Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://mcphost.dev/mcp在终端中运行这条命令
claude mcp add --transport http mcphost https://mcphost.dev/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"mcphost": {
"url": "https://mcphost.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"mcphost": {
"type": "http",
"url": "https://mcphost.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://mcphost.dev/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
工具名称和描述与服务器在 2026年11月6日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
signup 看起来像是对 AI 下的指令Explicit signup, for a client that cannot keep a session across calls: create a tenant and receive a bearer key and namespace. Unauthenticated. Most clients never need this -- any other host.*/billing.* call from a fresh connection creates a tenant implicitly and returns its own
host.quickstartReturn the shortest ordered sequence of calls to a working tool of `kind`, with your namespace and a filled-in example already substituted in, plus the current limits and a try_before_call table naming the one dry-run tool for each case. Read-only -- this call alone never creates
host.help.searchSearch this host's own documentation and tool descriptions. Returns up to k hits (default 3, response under 2 KB), each with a snippet, the nearest runnable example and an anchor. Read-only, anonymous, no tenant data -- call it with the error text or import line you are stuck on
host.help.getReturn the documentation section an anchor points at: its text (at most 4 KB) and its first fenced example. Pass an anchor exactly as an error, hint or help entry printed it, e.g. a rate_limited error's `anchor`. Read-only, anonymous, no tenant data. An unknown anchor is anchor_n
host.errorsList every error code this host can return, each with its class (agent_fault | host_refusal | upstream_fault | plan_limit | host_fault), family, remedy, docs anchor, retryable flag and help_url -- the same object GET /errors.json serves. Pass code to get one row; a misspelt code
host.redeemExchange a signup(handoff: true) handoff_token for the tenant key it was issued for. Single-use: a second redemption fails with handoff_token_redeemed; past its expiry it fails with handoff_token_expired. Unauthenticated -- the token itself is the proof.
billing.plansThe plan catalog (price and quotas per plan) and whether Stripe billing is configured on this host. Anonymous callers get the same answer as tenants.
host.whoamiReturn the calling tenant's identity, including key_age_s and key_rotated_at for auditing credential hygiene.
host.tool_publishPublish a tool of a registered kind (e.g. python, http or echo; the kind argument's enum lists them all) under this tenant's namespace. Call host.quickstart(kind) first for a filled-in example spec and the full publish-to-call sequence. Python's sandbox API: import mcphost (mcpho
host.tool_callInvoke a tool this tenant has already published, by its local name -- the same real, metered call as calling it directly by its namespaced name ( . ), for a session that has no way to see its own namespaced tool name yet. Unlike host.tool_test, this counts toward host.usage and a
host.tool_testDry-run a published tool by name: verdict (pass/will_fail/unverifiable), writes rolled back (dry_run); see host.quickstart.
host.state.setWrite one key in this tenant's key-value state namespace; value may be any JSON value. Overrun of the plan's state_bytes_max quota fails with state_quota_exceeded and writes nothing.
host.state.getRead one key from this tenant's key-value state namespace. Returns found: false (not an error) if the key was never set.
host.state.listList keys (with their current values) in this tenant's key-value state namespace, optionally filtered by prefix.
host.tool_shareShare one of this tenant's published tools with everyone (visibility: "public") or with a named group this tenant owns (visibility: "group", group: ). The tool keeps running in this tenant's own sandbox with this tenant's own secrets; a caller reaches it as . .
host.feedback.sendTell the host's humans what you needed: kind, up to 2048 bytes of text, optional context. Works before signup. Returns feedback_id.
host.feedback.listList your own feedback (newest first, status received). Anonymous callers get [].
host.resumeResume where you left off in one call (at most 4096 bytes): your tools with each one's last call status, unfinished runs, your newest notes, what changed on the host since your last call, and one suggested next_call. truncated names any section that was cut -- call that section's
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过域名 mcphost.dev 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 597 毫秒内响应(HTTP 200)
无需登录
有 1 个工具描述包含看起来像是对 AI 下指令的文字。安装前请先阅读下方的内容
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(0.126.1)于3天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, TF Rooms
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Live room availability, rates and stay quotes for 12 New Leaf motels in Twin Falls, Idaho.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
where agents host their own tools · mcphost.dev · status · llms.txt · llms-install.md
Find it in the registry: dev.mcphost/mcphost — connect with the one-URL quickstart at mcphost.dev.
mcphost is a remote MCP server where your agent publishes its own tools. Your agent writes a tool mid-task, publishes it with one call, and keeps working: the tool is live with no restart and no deploy, and it outlives the conversation that built it. A schedule can fire it while you sleep, another agent can share it, and every run lands in a log you can read.
Under the hood, mcphost serve is one Rust binary that speaks streamable-HTTP MCP at a single endpoint. Everything is a tool call: publish, run, schedule, log, meter, store secrets, share with another agent, act as one of your end users over OAuth. There is no dashboard; /status is the one page, and the operator works through admin.* tools on the same endpoint.
Measured, not promised: p95 34.2 ms across 200 concurrent calls with zero errors, committed next to the test that produces it. The public site is mcphost.dev; the machine-readable summary at /llms.txt is generated from the same source as the quickstart below (docs/agent-quickstart.md, scripts/gen-agent-docs.sh).
Paste one line into your client and it has mcphost. Your agent's first call creates its account on that connection: no signup form, no key to paste.
Claude Code
claude mcp add --transport http mcphost https://mcphost.dev/mcp
Docs: https://code.claude.com/docs/en/mcp (checked 2026-10-09)
Cursor
Add to Cursor, or add https://mcphost.dev/mcp to your MCP config directly.
Docs: https://docs.cursor.com/en/tools/mcp (checked 2026-10-09)
VS Code
Add to VS Code, or add https://mcphost.dev/mcp to your MCP config directly.
Docs: https://code.visualstudio.com/api/extension-guides/ai/mcp (checked 2026-10-09)
GitHub Copilot in VS Code
{
"servers": { "mcphost": { "type": "http", "url": "https://mcphost.dev/mcp" } } }
Docs: https://code.visualstudio.com/docs/agent-customization/mcp-servers (checked 2026-10-21)
Claude.ai
Docs: https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp (checked 2026-10-09)
ChatGPT
Docs: https://platform.openai.com/docs/mcp (checked 2026-10-09)
Codex CLI
codex mcp add mcphost --url https://mcphost.dev/mcp
Docs: https://developers.openai.com/codex/mcp (checked 2026-10-09)
Gemini CLI
gemini mcp add --transport http mcphost https://mcphost.dev/mcp
Docs: https://geminicli.com/docs/tools/mcp-server/ (checked 2026-10-09)
OpenCode
opencode mcp add mcphost --url https://mcphost.dev/mcp
Docs: https://opencode.ai/docs/mcp-servers/ (checked 2026-10-09)
Amp
amp mcp add mcphost https://mcphost.dev/mcp
Docs: https://ampcode.com/manual#mcp (checked 2026-10-09)
Goose
Docs: https://goose-docs.ai/docs/getting-started/using-extensions/ (checked 2026-10-09)
Warp
Docs: https://docs.warp.dev/agents/capabilities/mcp/ (checked 2026-10-09)
Windsurf
{
"mcpServers": { "mcphost": { "url": "https://mcphost.dev/mcp" } } }
Docs: https://docs.windsurf.com/windsurf/cascade/mcp (checked 2026-10-09)
Cline / Roo
{
"mcpServers": { "mcphost": { "type": "streamableHttp", "url": "https://mcphost.dev/mcp" } } }
Docs: https://docs.cline.bot/mcp/configuring-mcp-servers (checked 2026-10-09)
SDKs
{
"name": "mcphost", "type": "url", "url": "https://mcphost.dev/mcp" }
Docs: https://platform.claude.com/docs/en/agents-and-tools/mcp-connector (checked 2026-10-21)
See the live status page and the Acceptable Use Policy before you point production traffic at it. Plans and limits: plans / /plans.json (same numbers billing.plans returns, and docs/plans.md). Every error payload carries a help_url pointing at a generated /help/ page explaining it.
Support: support channel not configured (MCPHOST_SUPPORT_URL is unset).
Every release is a git tag, and every change is in CHANGELOG.md.
Ship an MCP tool, not a deployment project.
mcphost lets an agent create the tool it needs, mid-task, without a human in the loop: sign up with one unauthenticated tool call, publish with the next, and the new tool is live immediately — no restart, no deploy, no review queue.
Measured (panel run 0.26.3-20260908T085001Z, 21 sessions): median time from signup to a tenant's first successful host.tool.publish is 30.7s; median time from signup to a successful call on that tenant's own tool is 42.4s.
https://mcphost.dev/mcp -- paste that URL into your MCP client's config. No signup call, no credentials, nothing to paste into a header.host.quickstart() is read-only and hands back a worked example before you commit to anything; any other host.*/ billing.* call creates your tenant right then, on this connection, with no signup call at all -- host.whoami() is the simplest: host.whoami()
onboarding.url once, in that same response, and save it -- it's this tenant's own address and its credential in one; reconnecting through it later is how you come back as this same tenant. onboarding.memory_hint names where agents conventionally keep it. Reconnect rule: a later call on this SAME connection without a key is refused, naming the tenant you already are (data.tenant on the tenant_key_missing response) -- it never creates a second tenant. Use onboarding.url for every call from here on.onboarding.url. host.quickstart()'s own starter_tool is a ready-to-publish python spec; its publish_call is exactly: host.tool_publish(name="table_note", kind="python", spec={"source": "import mcphost\n\ndef main(args):\n mcphost.table.create(name='quickstart_notes', columns={'note': 'text'})\n mcphost.table.append(table='quickstart_notes', rows=[{'note': args.get('note', '')}])\n return {'appended': 1}\n"})
Three real kinds: submit code (python -- source required, args_schema/requirements inferred if omitted; js -- JavaScript source defining main(args), args_schema inferred if omitted) or wrap an API you already use (http -- url and method required, args_schema inferred if omitted). echo is a stub for testing the pipes, not a real tool. Before publishing anything, dry-run with host.tool_publish({..., dry_run: true}) -- every gate (secrets, env, network, deps, name, kind, spec size) reported at once, no tool row written -- or host.spec_test(kind, spec, invocations) for up to 5 example calls through the same sandbox a real call uses.
host.tool_test(name, args) dry-runs an already-published tool by name, or call it directly as . (its own entry in your tools/list): host.tool_test(name="table_note", args={"note": "hello"})
try_before_call: args may be omitted on host.tool_test -- the host then runs one example generated from the tool's own schema and returns it as example_args.
host.invite.create() returns an /i/ /mcp URL -- whoever connects there and makes their own first call gets a fresh tenant already in contact with you, with any tool names passed as share already shared (see "Share a tool, not a key" in www/llms.txt for sharing one tool while keeping its own key hidden): host.invite.create()
onboarding.url and the sentence "Claim this backend so it belongs to you: ." Never print the personal URL or the key anywhere but that one handoff.Also useful once you're past the first call: billing.plans()/ billing.status() for plan and quota; host.tool.list()/ host.tool.logs(name)/host.tool.remove(name)/host.usage(window) to inspect and manage; host.secret.set/host.secret.list() for credentials a published tool needs (secrets stored AES-256-GCM encrypted, with a separate plain env map alongside for everything that isn't one). Pass expose_spec: true on host.tool.share (or share names on host.invite.create) to also let a sharee read a tool's source, not just call it -- they read it with host.tool.spec_shared(tool=" . "); shared without expose_spec, the same call fails spec_not_exposed (see "Share a tool, not a key" in www/llms.txt for the full worked example). host.tool.share also takes scopes (what the grantee may do: call, read_source, fork; default ["call"]; url shares allow only call) and rate_per_hour_per_caller; a grantee with fork copies the tool with host.tool.fork(owner, tool, as), and after host.tool.unshare a past caller's next call fails share_revoked.
A client that can't hold a persistent connection across calls -- so there is no session for mcphost to implicitly bind a tenant to -- signs up directly instead of relying on its first call to create one:
tools/list with no credentials. The only tool offered is signup.signup(name). The response contains tenant, key (a bearer token, shown once), namespace, endpoint, and claim_url. Signup is rate-limited to 5 per IP per hour. Pass source (e.g. signup(name, source: "hn")) to tag which channel this signup came from -- recommended values are hn, reddit, discord, registry, plugin, docs; it's echoed back in the response and broken out in admin healthz, but never required. If signups are paused (an operator's kill switch for an abuse spike), the call fails with signup_paused and a retry_after_secs; try again later. An operator pauses and resumes signups without a shell with the admin tool admin.signup_pause (message to pause, optional until; resume: true to只显示了开头部分;其余内容请在仓库中阅读