Webhound
About
Give agents a research budget and get cited, inspectable reports or datasets.
Details
- Author
- webhoundai
- Categories
- Search, Knowledge Base, Other
Jump to
Setup
Install Webhound in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/webhoundai/webhound-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
Website·Thesis·MCP setup·npm·Official registry
Research has no natural stopping point. A prompt tells an agent what to investigate, but it does not tell the agent how much work the question deserves.
Webhound adds that missing control. Give it a prompt and a dollar budget; it spends that effort searching, reading, verifying, and assembling a cited report or structured dataset. The completed result includes the working documents, sources, claim traces, limitations, and evidence pack behind the answer.
Run Webhound from any MCP-speaking agent. Webhound creates private, budgeted reports and datasets, runs as the agent's research sidecar, accepts non-interrupting source-backed notes, diagnoses failures, and returns cited outputs with sources and claim traces.
This package is the local stdio transport. Webhound also supports hosted MCP at:
This repository also packages the hosted MCP and thewebhound-researchskill for GitHub Copilot, Claude Code, Cursor, and Kiro:
- GitHub Copilot usesplugin.json,.mcp.json, andskills/webhound-research/SKILL.md.
- Claude Code uses.claude-plugin/plugin.json,.mcp.json, and the same skill. The included marketplace can be tested withclaude plugin marketplace add WebhoundAI/webhound-mcp, thenclaude plugin install webhound@webhound.
- Cursor uses.cursor-plugin/plugin.json,mcp.json, and the same skill.
- Kiro usesPOWER.mdandmcp.json.
Both MCP files point to Webhound's production remote endpoint and contain no API key, bearer token, static OAuth client, or shared publisher credential. Every person authorizes their own Webhound account through OAuth. TheoauthScopesentry inmcp.jsonis required by Kiro so it requests Webhound's two supported scopes instead of Kiro's unrelated defaults. Cursor ignores that Kiro-specific field and completes OAuth from Webhound's published authorization metadata.
The shared skill teaches each client the same public contract:
- Hound is Webhound's research harness, built with DeepSeek V4 Pro and GPT-5.4 across planning, execution, verification, and assembly.
- The prompt defines the investigation. The dollar budget controls research effort.
- done=trueis the completion gate. The agent then inspects the evidence pack when the answer depends on the research trail.
The ChatGPT app can accept attachments and return normal MCP status, output, working documents, claims, and sources. Webhound deliberately does not attach a custom interactive panel beneath tool calls. Public distribution still requires plugin submission through OpenAI.
The install link supplies only Webhound's hosted MCP URL. Replit discovers Webhound's OAuth metadata and each person authorizes their own account; the payload contains no API key, bearer token, OAuth client secret, or shared publisher credential.
Create a Webhound API key, then add the stdio server to your agent:
{ "mcpServers": { "webhound": { "command": "npx", "args": ["-y", "webhound-mcp@0.5.3"], "env": { "WEBHOUND_KEY": "wh_..." } } } }
Paste the URL into Claude's custom connector flow. The hosted server exposes OAuth discovery, authorize, and token endpoints for that connect flow.
- Add the publicwebhound/webhoundserver to your own Smithery toolbox.
- Every new Smithery connection starts inauth_requiredand opens a Webhound setup screen that asks that user for their own Webhound API key.
- Webhound exchanges that key for a scoped MCP token stored on that Smithery connection.
- Connecting another client to the same already-authorized toolbox may not prompt again; that is reuse of the same user's saved connection, not a publisher credential shared with other users.
Do not distribute one user's private toolbox endpoint as if it were a shared Webhound credential. Other users should add Webhound to their own toolbox or connect to the hosted Webhound MCP URL directly.
Open: https://manus.im/app/plugins Choose: Create → Add MCP by URL Server name: Webhound Server URL: https://api.webhound.ai/api/v2/mcp Advanced settings: leave empty
Call webhound_onboarding once with client set to hosted. Send its immediate_next_message exactly once. Treat agent_playbook.conversation_flow as the canonical sequence; the matching first entry is already consumed, so after I reply continue with the next unconsumed entry. setup_flow is reference-only and next_action is only the entry instruction. Do not repeatedly call onboarding to advance it. Continue the first run through done=true and return the output with sources and provenance. If I change the subject, drop onboarding immediately. Do not create or edit workspace rules unless I explicitly ask.
Other hosted clients should use the same server URL with OAuth when supported. Only clients that do not support OAuth should use a manually generated Webhound key in their bearer-token orAuthorizationadvanced setting.
claude mcp add --transport http webhound https://api.webhound.ai/api/v2/mcp # Local stdio alternative: claude mcp add --transport stdio webhound --env WEBHOUND_KEY=wh_... -- npx -y webhound-mcp@0.5.3
[mcp_servers.webhound] command = "npx" args = ["-y", "webhound-mcp@0.5.3"] [mcp_servers.webhound.env] WEBHOUND_KEY = "wh_..."
Cursor and Claude Desktop use the JSON shape above.
cline mcp add webhound \ --transport streamable-http \ --header "Authorization: Bearer wh_..." \ --yes \ https://api.webhound.ai/api/v2/mcp
You can also use the local stdio JSON shape above in Cline's MCP settings. After saving local stdio config, restart the agent session or open a new one if the Webhound tools do not appear. Many clients load MCP servers only when a session starts.
{ "servers": { "webhound": { "type": "stdio", "command": "npx", "args": ["-y", "webhound-mcp@0.5.3"], "env": { "WEBHOUND_KEY": "wh_..." } } } }
Use the same stdio server shape for Windsurf. Windsurf commonly stores it in~/.codeium/windsurf/mcp_config.json.
Hound is the research harness exposed by Webhound, not a selectable foundation model or mode. It is built with DeepSeek V4 Pro and GPT-5.4 across planning, execution, verification, and assembly. It is not a direct pass-through to one model and should not be described as "resolving" to a single provider backend.
The prompt defines what to investigate. The user's dollar budget defines how much research effort Hound can spend searching, reading, writing, and verifying before assembly. The MCP does not expose alternate model tiers or modes.
- budget:$5
- product:report
- free run: honor the saved preference; use automatically only when enabled, or after explicit one-run consent for an exact$5report or dataset
As a rule of thumb,$1buys about 15 minutes of research, so the$5default is about 75 minutes. Recommended starting points are$2quick,$5standard,$10deep, and$20exhaustive/highest-stakes (about 300 minutes or five hours). These are not caps; users can choose a larger custom budget or say how long they want Webhound to research, using about$1per 15 minutes.
webhound_onboardingreturns the client-aware guided first-run flow, including account and included-run state, the budget model, setup-first versus jump-in, report-versus-dataset guidance, waiting throughdone=true, provenance, export, and billing follow-up. Hosted clients such as Manus receive the full research flow but no workspace-writing flow unless the user explicitly requests that separate action. Starting a normal report or dataset never triggers workspace-rule setup.
New users may have one non-divisible free run pass. It covers one exact$5report or dataset. It can be used from the Webhound UI, API, hosted MCP, or this stdio MCP package.
Agents can read and update defaults with:
- webhound_onboarding
- webhound_help
- webhound_uninstall
- webhound_get_defaults
- webhound_set_defaults
If a user explicitly requests workspace rules, the agent must show the complete proposed content and exact destination before writing. After approval, it reads the file back and rejects empty or frontmatter-only content.
The core lifecycle is detached and visible:
- Start work withwebhound_start_reportorwebhound_start_dataset.
- Watch withwebhound_watchorwebhound_wait.
- While Webhound runs, keep doing useful independent work when it can improve the result. If the calling agent finds a concrete source-backed note, save it withwebhound_add_sidecar_notes. This does not interrupt the current Planner -> Executor -> Verifier cycle.
- Sidecar notes are shared state. Usewebhound_list_sidecar_notesto inspect what has already been saved andwebhound_update_sidecar_noteto correct, restore, or dismiss a note without steering the session.
- Treatdone=trueas the authoritative finished signal.
- If a run is still healthy and your environment can sleep, schedule a check-in, create a reminder, or run a one-time heartbeat, useruntime_estimate.recommended_next_check_secondsand callwebhound_watchthen. If it is still running, repeat using the updated estimate. If only a few minutes remain, usewebhound_wait.
- If a spend-bearing action returnsbilling_requiredor a running session returnscredit_exhausted, send the user tohttps://www.webhound.ai/billingto add credits, add a card, or enable auto-recharge. Ask them to ping you when done. After they reply, callwebhound_accountto confirm billing is ready, then retry the original start/add-budget/resume action.
- Ifawaiting_input, reply withwebhound_send_messageusingreason="awaiting_input"; that resumes the session.
- Usewebhound_send_messagewithreason="user_guidance"only when the user changes the objective, scope, constraints, or deliverable. Do not use steering for ordinary source suggestions.
- Only when the user explicitly asks to reduce the remaining report scope or finish with the research already gathered, callwebhound_set_budget. Readbudget_control.minimum_target_budgetfrom watch/session status when they want to finish at the nearest safe boundary. Lowering the budget does not bypass assembly: the revised budget becomes the stopping boundary, and Webhound runs normal final assembly afterward. Never do this merely because partial notes look sufficient or the run is taking time.
- Whendone=trueandoutput_ready=true, callwebhound_get_sessionfor the complete canonical session in one response. If a terminal run has no output, treat its typedEMPTY_OUTPUTorDATASET_ZERO_ROWSalert as a failure rather than claiming success.
- webhound_get_evidence_packreturns that same complete session plus evidence-follow-up guidance. Use it when the answer depends on the research trail.
- Usewebhound_get_outputfor the complete polished result orwebhound_export_sessionwhen the user needs a file. Use the claims and sources tools when you need one focused surface.
- For datasets, inspect rows/schema plus sources; export CSV/JSON when the user needs to use the data elsewhere.
- After reading/exporting the final output and evidence pack, use your own judgment to surface a few focused threads the user could pull next. Ground them in concrete things the session uncovered: unexplained entities, source gaps, paper trails, contested claims, missing rows, or narrow comparisons. These should be optional deeper follow-ups, not generic "research more" suggestions. If several are independent, they can be started in parallel as separate Webhound runs.
- If the user asks for a shareable link, usewebhound_get_shareable_link. It makes that report or dataset public to anyone with the link and returns the right share URL:/document/:idfor reports,/dataset/:idfor datasets. It is not Explore publishing and does not create a/p/:slugpublication.
Budget controls depth. As a rule of thumb,$1buys about 15 minutes of research. A healthy run may keep searching, reading, writing, and verifying through several waits while it uses the budget. More budget means more room for research before final assembly; it is not a signal for the calling agent to hurry the run. Do not send finalize/wrap-up guidance or stop the session just because partial working notes look usable.
Omitschemato let Webhound infer a concise schema. When fields matter, use exactly one of these forms.
{ "entity_name": "Company", "attributes": [ { "name": "company_name", "type": "string", "is_primary": true }, { "name": "website", "type": "string", "standard_format": "url" }, { "name": "employee_count", "type": "number" } ] }
{ "type": "object", "title": "Company", "required": ["company_name"], "properties": { "company_name": { "type": "string", "description": "Official company name", "x-webhound-primary": true }, "website": { "type": "string", "format": "uri" }, "employee_count": { "type": "integer" } } }
Native schemas require at least oneis_primary: truefield. For JSON Schema,x-webhound-primary: truewins; otherwise the first required property, then the first property, becomes the deterministic primary field. The start response echoesnormalized_schemabefore the dataset begins.
- webhound_health
- webhound_onboarding
- webhound_help
- webhound_uninstall
- webhound_get_defaults
- webhound_set_defaults
- webhound_start_report
- webhound_start_dataset
- webhound_watch
- webhound_wait
- webhound_add_sidecar_notes
- webhound_list_sidecar_notes
- webhound_update_sidecar_note
- webhound_send_message
- webhound_stop
- webhound_resume
- webhound_add_budget
- webhound_set_budget
- webhound_get_output
- webhound_export_session
- webhound_get_evidence_pack
- webhound_get_shareable_link
- webhound_get_claims
- webhound_get_sources
- webhound_search_sessions
- webhound_list_sessions
- webhound_get_session
- webhound_upload_file
- webhound_account
- webhound_diagnose
Supported upload formats are CSV, XLSX, PDF, DOCX, TXT, Markdown, and VTT. Convert legacy XLS/DOC files to XLSX/DOCX before uploading. MIME type, filename extension, and recognizable file bytes are checked before the upload reaches Webhound.
- done: terminal status
- output_ready: an artifact exists; wait fordone=truebefore treating it as final
- completion_reason:budget_complete,natural_complete,awaiting_input,user_stopped,credit_exhausted,failed, orstuck_or_empty
- alerts: structured issues with next actions
- budget_control: whether a report budget can be reduced, current spend and budget, and the nearest safe lower target
- next_research_instruction: guidance for the calling agent to derive focused next investigations from the final output and underlying evidence pack
Do not present a run as successful ifalertscontains an error such asempty_output,dataset_zero_rows, orcredit_exhausted. Forcredit_exhausted, use the returnedbilling_urlanduser_message_template; do not leave the user with a raw error.
Ifwebhound_waitreturnsstill_running=true, that is normal. Use the returned runtime estimate to schedule the next check-in when the agent environment supports timers/reminders/automations, then callwebhound_watchat that time. Usewebhound_add_sidecar_notesfor source-backed notes found by the calling agent. Usewebhound_send_message(reason="awaiting_input")for checkpoint replies andwebhound_send_message(reason="user_guidance")for real user intent changes, not for normal elapsed time or source suggestions. Usewebhound_stoponly when the user explicitly asks to stop, pause, or cancel the run.
webhound-mcp --help webhound-mcp --version webhound-mcp --self-test
--self-testchecks that the package loads and that the launch tool list is present. Usewebhound_healthfrom an MCP client to verify live auth and account state.
git clone https://github.com/WebhoundAI/webhound-mcp.git cd webhound-mcp npm install WEBHOUND_KEY=wh_... WEBHOUND_API_BASE=http://localhost:5000/api/v2 node bin/server.mjs
Run the package self-test without credentials:
npm run self-test npm test npm run test:coverage npm run verify npm run release:check
The test suite is fully offline and enforces 91% line, 75% branch, and 88% function coverage across the MCP runtime.npm run verifyalso rebuilds the published bundle, checks the CLI self-test, verifies canonical-runtime parity, inspects the packed artifact, and installs it into a temporary consumer project.
Before publishing, compare this checkout with the canonicalwebhound-server/mcpruntime:
npm run parity:compare -- /absolute/path/to/webhound-server/mcp
Search global news using natural language. Webz.io News Search API returns the most relevant articles and content, with filters for source, country, language, date, sentiment, and category.
Fetch, convert, and search AWS documentation pages, with recommendations for related content.
Search campgrounds around the world on campertunity, check availability, and provide booking links.
The Ferryhopper MCP Server exposes ferry routes, schedules and booking redirects so an AI assistant can discover connections across Europe and the Mediterranean and send users to Ferryhopper to complete bookings.
All-in-One SEO & Web Intelligence Toolkit API from FetchSERP.
MCP server that provides read-only access to HyperKitty, the web-based email archive component of Mailman 3.
At Sunrise Apps, we believe AI agents should be limitless, especially when it comes to visual data. We created ImageSorcery to bridge the critical gap in AI's ability to interact with and manipulate images directly, all while upholding the highest standards of privacy and security.
Just Domain is the domain registrar for businesses built with AI. Its remote MCP server checks availability and returns first-year and renewal pricing, plus a link to register on justdomain.ai, with DNS and WHOIS privacy in the same place. No account, no API key, read only. Endpoint: https://mcp.justdomain.ai/
Research tools, including a Sqlite-backed document stash
Semantic search over 9 free-license stock photo sources. Hosted remote server with OAuth — no API key to paste.
SerpApi MCP Server for Google and other search engine results
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.




