Search / dev.mcphost/mcphost
mcphost
R0· no sign-inHosted MCP runtime where your agent publishes its own tools by tool call and keeps working.
v0.111.6 · active · repository · website · descriptor JSON · versions
Search / dev.mcphost/mcphost
R0· no sign-inHosted MCP runtime where your agent publishes its own tools by tool call and keeps working.
v0.111.6 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"mcphost": {
"type": "http",
"url": "https://mcphost.dev/mcp"
}
}
}claude mcp add --transport http mcphost https://mcphost.dev/mcp[mcp_servers.mcphost]
url = "https://mcphost.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcphost": {
"type": "remote",
"url": "https://mcphost.dev/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"mcphost": {
"type": "http",
"url": "https://mcphost.dev/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=mcphost&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwaG9zdC5kZXYvbWNwIn0%3D"
}{
"servers": {
"mcphost": {
"type": "http",
"url": "https://mcphost.dev/mcp"
}
}
}{
"mcpServers": {
"mcphost": {
"httpUrl": "https://mcphost.dev/mcp"
}
}
}extensions:
"mcphost":
enabled: true
name: "mcphost"
type: streamable_http
uri: "https://mcphost.dev/mcp"
timeout: 300
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltool list is cacheable (ttlMs 30000)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky onestools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: host.help.get (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); host.redeem (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); billing.plans (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …tools.token_costabout 7,914 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes596 tool changes in 30 daysstability.rug_pull6 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagehost.tool_publishchangedoutput schemahost.tool_sharechangedinput schemahost.feedback.listchangedoutput schemahost.feedback.sendchangedoutput schemahost.tool_sharechangedoutput schemahost.state.listchangedoutput schemahost.state.getchangedoutput schemahost.state.setchangedoutput schemahost.tool_testchangedoutput schemahost.tool_callchangedoutput schemaShowing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +dns-namespace +website +reachable +uptime-100% +updated-0d-ago -multi-version-spam(180)
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://mcphost.dev/mcp streamable-http | none | yes | 100% | 512 ms | 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28 | 2026-10-19 |
billing.plans | The 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.errors | List 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 answers tool_not_found with did_you_mean. Read-only, anonymous, no tenant data. |
host.feedback.list | List your own feedback (newest first, status received). Anonymous callers get []. |
host.feedback.send | Tell the host's humans what you needed: kind, up to 2048 bytes of text, optional context. Works before signup. Returns feedback_id. |
host.help.get | Return 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_not_found with the nearest anchors in did_you_mean. |
host.help.search | Search 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 before reading any docs file. |
host.quickstart | Return 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 a tenant. Call this before host.tool_publish if you're not sure what a spec should look like. Unauthenticated callers get a worked example with no tenant data; any other host.*/billing.* call creates a tenant on first use, no signup required. |
host.redeem | Exchange 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. |
host.state.get | Read one key from this tenant's key-value state namespace. Returns found: false (not an error) if the key was never set. |
host.state.list | List keys (with their current values) in this tenant's key-value state namespace, optionally filtered by prefix. |
host.state.set | Write 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.tool_call | Invoke a tool this tenant has already published, by its local name -- the same real, metered call as calling it directly by its namespaced name (<namespace>.<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 appears in host.tool_logs. Pass async: true for a tool that needs more than the call deadline: returns {run_id, status: "queued"} immediately instead of running inline -- see host.runs.get/wait. Pass version to pin the call to one of host.tool_history's versions instead of whichever is current. |
host.tool_publish | Publish 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 (mcphost.table, mcphost.state, mcphost.docs). Name must match ^[a-z][a-z0-9_]{1,40}$; a rejection names the failing field and a corrected example. Try host.tool_test before a real call. |
host.tool_share | Share one of this tenant's published tools with everyone (visibility: "public") or with a named group this tenant owns (visibility: "group", group: <name>). The tool keeps running in this tenant's own sandbox with this tenant's own secrets; a caller reaches it as <this tenant's namespace>.<name>. |
host.tool_test | Dry-run a published tool by name: verdict (pass/will_fail/unverifiable), writes rolled back (dry_run); see host.quickstart. |
host.whoami | Return the calling tenant's identity, including key_age_s and key_rotated_at for auditing credential hygiene. |
signup | 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 /u/<secret>/mcp URL in the response's onboarding field. Recommended here: pass handoff: true to receive a short-lived, single-use handoff_token instead of the raw key -- redeem it once with host.redeem to get the key, so a transcript of this call and the redeem call, if it leaks, carries a dead credential. The raw-key path (handoff omitted) stays fully supported. |
Schemas: list_tools.
{
"name": "dev.mcphost/mcphost",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"remotes": [
{
"url": "https://mcphost.dev/mcp",
"type": "streamable-http"
}
],
"version": "0.111.6",
"repository": {
"url": "https://github.com/j0yen/mcphost",
"source": "github"
},
"websiteUrl": "https://mcphost.dev",
"description": "Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working."
}