protogrid

Search / dev.mcphost/mcphost

mcphost

R0· no sign-in

Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working.

v0.111.6 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality72needs work
Trust91of 100
Uptime, 30 days100%
Latency p50512 ms

Connect

8 clients · secrets stay placeholders
{
  "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

Quality 72 / 100needs work

protocol100 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • pass
    protocol.list_ttltool list is cacheable (ttlMs 30000)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene71 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.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); …
  • pass
    tools.token_costabout 7,914 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes596 tool changes in 30 days
  • fail
    stability.rug_pull6 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

17 tools, about 7,914 tokens to load them all · tool set a129c67335d1 · tools last changed 2026-10-19 · checked 2026-10-19 10:20 UTC

Tool changes

  • host.tool_publishchangedoutput schema
  • host.tool_sharechangedinput schema
  • host.feedback.listchangedoutput schema
  • host.feedback.sendchangedoutput schema
  • host.tool_sharechangedoutput schema
  • host.state.listchangedoutput schema
  • host.state.getchangedoutput schema
  • host.state.setchangedoutput schema
  • host.tool_testchangedoutput schema
  • host.tool_callchangedoutput schema

Showing 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.

Trust 91 / 100

multi-version-spam
provenance85
liveness100
freshness100
hygiene75

+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.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcphost.dev/mcp streamable-httpnoneyes100%512 ms2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-282026-10-19

Tools (17)

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.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 answers tool_not_found with did_you_mean. Read-only, anonymous, no tenant data.
host.feedback.listList your own feedback (newest first, status received). Anonymous callers get [].
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.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_not_found with the nearest anchors in did_you_mean.
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 before reading any docs file.
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 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.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.
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.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.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 (<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_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 (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_shareShare 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_testDry-run a published tool by name: verdict (pass/will_fail/unverifiable), writes rolled back (dry_run); see host.quickstart.
host.whoamiReturn the calling tenant's identity, including key_age_s and key_rotated_at for auditing credential hygiene.
signupExplicit 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.

Similar MCP servers

Official server.json
{
  "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."
}