mcphost
Server Details
Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working.
- Status
- Healthy
- Uptime
- 100.0% over 38 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- j0yen/mcphost
- GitHub Stars
- 0
- Server Listing
- mcphost
TDQS
Scored across 12 tools
Most tools target distinct resources (state.get/list/set, tool_publish/share/test/call), and the descriptions clarify the key boundaries. The closest pair, host.tool_call vs host.tool_test, is explicitly differentiated (metered real call vs dry-run). Minor overlap remains between signup and host.redeem and between host.quickstart and host.tool_publish, but each is distinguishable.
The host.* family follows a consistent dotted namespace plus verb_noun pattern (host.state.get, host.tool_publish). However, top-level tools break the pattern: signup is a bare verb with no namespace while billing.plans uses a dotted resource-style name, and there is no host.* prefix on either. Readable overall but conventions are mixed.
Twelve tools is well within the ideal range and each maps to a distinct capability (identity, billing, state, publishing, sharing, testing, invoking, onboarding). No filler or redundant entries are apparent.
State supports get/list/set but has no delete, and there is no tool to list, unpublish, or delete published tools, nor a tool_history surface. Several tools reference companion operations (host.runs.get/wait, host.tool_history) that are not themselves exposed, creating dead ends for async runs and version pinning.
Available Tools
14 toolsbilling.plansInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes | |
| billing_mode | Yes |
host.feedback.listInspect
List your own feedback (newest first, status received). Anonymous callers get [].
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows, up to 100; default 20. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | Yes | |
| feedback | Yes |
host.feedback.sendInspect
Tell the host's humans what you needed: kind, up to 2048 bytes of text, optional context. Works before signup. Returns feedback_id.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What you are telling the host. | |
| text | Yes | What you needed or saw; 1 to 2048 bytes after trim. | |
| context | No | Optional, at most 1 KB: tool, error_code, free. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| feedback_id | Yes |
host.quickstartInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which registered kind to return a worked example for, e.g. echo, http, python -- or a job-word alias (webhook, event, cron, ...) for its recipe. Omit to see every kind, alias and recipe name. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| kind | No | |
| next | No | |
| kinds | No | |
| steps | No | |
| verbs | No | |
| limits | No | |
| recipe | No | |
| aliases | No | |
| example | No | |
| outcome | No | |
| recipes | No | |
| verdict | No | |
| endpoint | No | |
| triggers | No | |
| namespace | No | |
| sandbox_api | No | |
| alt_endpoint | No | |
| reachability | No | |
| starter_tool | No | |
| welcome_back | No | |
| authenticated | No | |
| install_links | No | |
| resolved_from | No | |
| bridge_returns | No | |
| recipes_nearby | No | |
| install_doc_url | No | |
| try_before_call | No | |
| host_steps_allowed | No |
host.redeemInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. | |
| handoff_token | Yes | The handoff_token signup(handoff: true) returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| next | Yes | |
| usage | Yes | |
| session_bound | Yes |
host.state.getInspect
Read one key from this tenant's key-value state namespace. Returns found: false (not an error) if the key was never set.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to read from this tenant's key-value state namespace. | |
| end_user | No | "self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| found | Yes | |
| value | Yes | |
| impersonated | No | |
| updated_unix | No |
host.state.listInspect
List keys (with their current values) in this tenant's key-value state namespace, optionally filtered by prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max keys to return; default 100. | |
| prefix | No | Only list keys starting with this prefix; default: all keys. | |
| end_user | No | "self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| keys | Yes |
host.state.setInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to write in this tenant's key-value state namespace. | |
| value | Yes | Any JSON value to store under key. | |
| dry_run | No | return the diff this call would make and commit nothing | |
| end_user | No | "self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| set | Yes | |
| bytes_delta | Yes | |
| impersonated | No |
host.tool_callInspect
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 (.), 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.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Arguments to pass, validated against the tool's own args_schema. | |
| name | Yes | Local name of the tool to invoke. | |
| async | No | Run as a job instead of inline: returns {run_id, status} within ~50ms under the plan's job_max_s deadline; default false. | |
| budget | No | Lowers this call's budget below the plan default: any subset of max_child_calls, max_est_tokens, max_tool_latency_ms, max_wall_ms. A value above the plan's own ceiling is a validation error naming it; see host.runs.get's progress.budget. | |
| dry_run | No | Ask instead of call: runs every admission check the real call runs, dispatches nothing, writes no call row, and returns {fits, units, remaining, refusal}; same as host.estimate. Default false. | |
| version | No | Pin the call to this version instead of whichever is current; see host.tool_history. An unknown version is an argument error. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| tz | No | |
| v1 | No | |
| msg | No | |
| url | No | |
| args | No | |
| body | No | |
| kind | No | |
| name | No | |
| next | No | |
| rows | No | |
| text | No | |
| tool | No | |
| count | No | |
| steps | No | |
| preset | No | |
| result | No | |
| run_id | No | |
| status | No | |
| verify | No | |
| changed | No | |
| columns | No | |
| created | No | |
| doubled | No | |
| enabled | No | |
| headers | No | |
| payload | No | |
| schedule | No | |
| next_unix | No | |
| checked_at | No | |
| onboarding | No | |
| unverified | No | |
| client_tool | No | |
| https_proxy | No | |
| last_run_id | No | |
| last_status | No | |
| created_unix | No | |
| failed_steps | No | |
| forwarded_to | No | |
| welcome_back | No | |
| dedupe_header | No | |
| last_fired_unix | No |
host.tool_publishInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which registered kind to publish under: one of this field's `enum` (host.quickstart with no kind lists every kind, alias and recipe). A job-word alias in the enum also resolves here -- webhook-style words for an inbound webhook, cron-style words for a timed run -- both resolve to kind http and the descriptor comes back with resolved_from naming the alias you asked for. | |
| name | Yes | Local name for the new tool; must match ^[a-z][a-z0-9_]{1,40}$. | |
| spec | Yes | The kind-specific spec object; see host.quickstart(kind) for a filled-in example. For python's network field: "none" (every plan), "public" (requires the pro plan), "egress" (requires the pro plan) -- a tool's own code reaches this tenant's data with `import mcphost` (mcphost.table, mcphost.state, mcphost.docs, mcphost.lineage) even when network is "none". | |
| scopes | No | OAuth scopes a token must carry (directly, or via mcp) to reach this tool: catalogued names from host.oauth.scopes, or the built-ins read/write. At most 8. Omit (or [] ) to require only mcp -- unaffected by any catalog. | |
| dry_run | No | return the diff this call would make and commit nothing | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| hint | No | |
| kind | No | |
| lock | No | |
| name | No | |
| next | No | |
| gates | No | |
| steps | No | |
| reason | No | |
| verdict | No | |
| version | No | The tool's version after this publish (1 for a first publish). |
| evidence | No | |
| failures | No | |
| call_line | No | A ready-to-paste call for the published tool. Optional: declared so a typed client reserves the field; absent from responses that do not carry one. |
| onboarding | No | |
| deprecations | No | |
| welcome_back | No | |
| resolved_from | No |
host.tool_testInspect
Dry-run a published tool by name: verdict (pass/will_fail/unverifiable), writes rolled back (dry_run); see host.quickstart.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Arguments to pass, same shape as a real call. | |
| name | Yes | Local name of the already-published tool to dry-run. | |
| fixtures | No | Chain tools only: {"<step number or tool name>": <recorded result>}. A fixtured step executes nothing (no upstream call); later mappings resolve against it. host.runs.get(run_id, as_fixtures=true) exports a real run in this shape. | |
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| tz | No | |
| msg | No | |
| args | No | |
| kind | No | |
| line | No | |
| name | No | |
| next | No | |
| tool | No | |
| error | No | |
| outer | No | |
| state | No | |
| steps | No | |
| detail | No | |
| reason | No | |
| result | No | |
| schema | No | |
| changed | No | |
| created | No | |
| dry_run | Yes | |
| enabled | No | |
| payload | No | |
| request | No | |
| verdict | No | |
| envelope | No | |
| evidence | No | |
| failures | No | |
| response | No | |
| schedule | No | |
| warnings | No | |
| next_unix | No | |
| environment | No | |
| last_run_id | No | |
| last_status | No | |
| source_line | No | |
| created_unix | No | |
| forwarded_to | No | |
| welcome_back | No | |
| chain_dry_run | No | |
| exception_class | No | |
| inputs_required | No | |
| last_fired_unix | No |
host.whoamiInspect
Return the calling tenant's identity, including key_age_s and key_rotated_at for auditing credential hygiene.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_key | No | The key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | |
| plan | No | |
| admin | No | |
| links | No | |
| owner | No | |
| source | No | |
| tenant | No | |
| subject | No | |
| disabled | No | |
| resource | No | |
| claim_url | No | |
| key_age_s | No | |
| namespace | No | |
| created_at | No | |
| invite_url | No | |
| onboarding | No | |
| plan_since | No | |
| auth_method | No | |
| client_name | No | |
| contract_sha | Yes | |
| display_name | No | |
| metadata_url | No | |
| shared_tools | No | |
| source_class | No | |
| welcome_back | No | |
| client_version | No | |
| key_rotated_at | No | |
| owner_verified | No | |
| session_tenant | No | |
| naming_rule_url | No | |
| contract_version | Yes | |
| admin_schema_version | No |
signupAInspect
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//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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | display name | |
| handoff | No | Recommended: true to receive a handoff_token (redeem via host.redeem) instead of the raw key. Default false (raw key, unchanged). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the call is unauthenticated, explains the handoff_token security model (short-lived, single-use, transcript leakage yields a dead credential), and confirms the raw-key path remains supported. It omits edge-case behavior such as name collisions, idempotency of repeat signups, or rate limits, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and audience in the first clause, then layers the alternative path and the handoff recommendation. Four dense sentences with no filler, though the handoff security rationale could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description names the salient returns (bearer key, namespace, handoff_token, onboarding URL). It is sufficient for a 2-parameter tool, but it does not clarify response field names or the namespace's role, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds meaningful semantics for handoff beyond the schema: it is recommended, yields a short-lived single-use token redeemable once via host.redeem, and its purpose is leak containment. The name parameter gets no additional description, but the handoff elaboration lifts this above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and outcome: create a tenant and receive a bearer key and namespace, explicitly framed as an 'explicit signup' for sessionless clients. It distinguishes itself from the implicit tenant creation performed by other host.*/billing.* calls and from host.redeem, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says most clients never need this and names the alternative path (any fresh host.*/billing.* call creates a tenant implicitly, returning an onboarding URL). It also gives the selecting condition ('a client that cannot keep a session across calls') and recommends a specific parameter value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
host.tool_publish1 field changed- changed
Input schema / allOfPrevious value: -[ - { - "if": { - "properties": { - "kind": { - "const": "chain" - } - }, - "required": [ - "kind" - ] - }, - "then": { - "properties": { - "spec": { - "additionalProperties": false, - "properties": { - "reads": {}, - "steps": {} - }, - "required": [ - "steps" - ], - "type": "object" - } - } - } - }, - { - "if": { - "properties": { - "kind": { - "const": "echo" - } - }, - "required": [ - "kind" - ] - }, - "then": { - "properties": { - "spec": { - "additionalProperties": false, - "properties": { - "reads": {}, - "schema": {} - }, - "required": [ - "schema" - ], - "type": "object" - } - } - } - }, - { - "if": { - "properties": { - "kind": { - "const": "http" - } - }, - "required": [ - "kind" - ] - }, - "then": { - "properties": { - "spec": { - "additionalProperties": false, - "properties": { - "args_schema": {}, - "body": {}, - "description": {}, - "headers": {}, - "method": {}, - "outputs": {}, - "query": {}, - "reads": {}, - "response": {}, - "timeout_s": {}, - "upstream": {}, - "upstream_provider": {}, - "url": {} - }, - "type": "object" - } - } - } - }, - { - "if": { - "properties": { - "kind": { - "const": "python" - } - }, - "required": [ - "kind" - ] - }, - "then": { - "properties": { - "spec": { - "additionalProperties": false, - "properties": { - "args_schema": { - "description": "a JSON Schema object" - }, - "description": { - "description": "a string" - }, - "env": { - "description": "a map of name to string value; names must match ^[A-Z][A-Z0-9_]{0,63}$" - }, - "memory_mb": { - "description": "a positive integer number of megabytes" - }, - "network": { - "description": "\"none\" (every plan), \"public\" (requires the pro plan), \"egress\" (requires the pro plan) -- a tool's own code reaches this tenant's data with `import mcphost` (mcphost.table, mcphost.state, mcphost.docs, mcphost.lineage) even when network is \"none\"" - }, - "outputs": { - "description": "a list of field names or an object mapping field names to path strings" - }, - "reads": {}, - "requirements": { - "description": "a list of strings" - }, - "secrets": { - "description": "a list of strings" - }, - "source": { - "description": "a string" - }, - "timeout_s": { - "description": "a positive integer number of seconds" - } - }, - "required": [ - "source" - ], - "type": "object" - } - } - } - }, - { - "if": { - "properties": { - "kind": { - "const": "wasm" - } - }, - "required": [ - "kind" - ] - }, - "then": { - "properties": { - "spec": { - "additionalProperties": false, - "properties": { - "args_schema": {}, - "component": {}, - "memory_mb": {}, - "outputs": {}, - "reads": {}, - "timeout_s": {} - }, - "required": [ - "component" - ], - "type": "object" - } - } - } - } -]New value: +[ + { + "if": { + "properties": { + "kind": { + "const": "chain" + } + }, + "required": [ + "kind" + ] + }, + "then": { + "properties": { + "spec": { + "additionalProperties": false, + "properties": { + "reads": {}, + "steps": {}, + "ui": { + "additionalProperties": false, + "description": "Optional presentation hints. `form: true` gives a url-shared tool a /f/ page where a person fills in the arguments and the submission lands in your inbox.", + "properties": { + "form": { + "type": "boolean" + }, + "submit_label": { + "maxLength": 40, + "type": "string" + }, + "success_text": { + "maxLength": 200, + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "steps" + ], + "type": "object" + } + } + } + }, + { + "if": { + "properties": { + "kind": { + "const": "echo" + } + }, + "required": [ + "kind" + ] + }, + "then": { + "properties": { + "spec": { + "additionalProperties": false, + "properties": { + "reads": {}, + "schema": {}, + "ui": { + "additionalProperties": false, + "description": "Optional presentation hints. `form: true` gives a url-shared tool a /f/ page where a person fills in the arguments and the submission lands in your inbox.", + "properties": { + "form": { + "type": "boolean" + }, + "submit_label": { + "maxLength": 40, + "type": "string" + }, + "success_text": { + "maxLength": 200, + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "schema" + ], + "type": "object" + } + } + } + }, + { + "if": { + "properties": { + "kind": { + "const": "http" + } + }, + "required": [ + "kind" + ] + }, + "then": { + "properties": { + "spec": { + "additionalProperties": false, + "properties": { + "args_schema": {}, + "body": {}, + "description": {}, + "headers": {}, + "method": {}, + "outputs": {}, + "query": {}, + "reads": {}, + "response": {}, + "timeout_s": {}, + "ui": { + "additionalProperties": false, + "description": "Optional presentation hints. `form: true` gives a url-shared tool a /f/ page where a person fills in the arguments and the submission lands in your inbox.", + "properties": { + "form": { + "type": "boolean" + }, + "submit_label": { + "maxLength": 40, + "type": "string" + }, + "success_text": { + "maxLength": 200, + "type": "string" + } + }, + "type": "object" + }, + "upstream": {}, + "upstream_provider": {}, + "url": {} + }, + "type": "object" + } + } + } + }, + { + "if": { + "properties": { + "kind": { + "const": "python" + } + }, + "required": [ + "kind" + ] + }, + "then": { + "properties": { + "spec": { + "additionalProperties": false, + "properties": { + "args_schema": { + "description": "a JSON Schema object" + }, + "description": { + "description": "a string" + }, + "env": { + "description": "a map of name to string value; names must match ^[A-Z][A-Z0-9_]{0,63}$" + }, + "memory_mb": { + "description": "a positive integer number of megabytes" + }, + "network": { + "description": "\"none\" (every plan), \"public\" (requires the pro plan), \"egress\" (requires the pro plan) -- a tool's own code reaches this tenant's data with `import mcphost` (mcphost.table, mcphost.state, mcphost.docs, mcphost.lineage) even when network is \"none\"" + }, + "outputs": { + "description": "a list of field names or an object mapping field names to path strings" + }, + "reads": {}, + "requirements": { + "description": "a list of strings" + }, + "secrets": { + "description": "a list of strings" + }, + "source": { + "description": "a string" + }, + "timeout_s": { + "description": "a positive integer number of seconds" + }, + "ui": { + "additionalProperties": false, + "description": "Optional presentation hints. `form: true` gives a url-shared tool a /f/ page where a person fills in the arguments and the submission lands in your inbox.", + "properties": { + "form": { + "type": "boolean" + }, + "submit_label": { + "maxLength": 40, + "type": "string" + }, + "success_text": { + "maxLength": 200, + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "source" + ], + "type": "object" + } + } + } + }, + { + "if": { + "properties": { + "kind": { + "const": "wasm" + } + }, + "required": [ + "kind" + ] + }, + "then": { + "properties": { + "spec": { + "additionalProperties": false, + "properties": { + "args_schema": {}, + "component": {}, + "memory_mb": {}, + "outputs": {}, + "reads": {}, + "timeout_s": {}, + "ui": { + "additionalProperties": false, + "description": "Optional presentation hints. `form: true` gives a url-shared tool a /f/ page where a person fills in the arguments and the submission lands in your inbox.", + "properties": { + "form": { + "type": "boolean" + }, + "submit_label": { + "maxLength": 40, + "type": "string" + }, + "success_text": { + "maxLength": 200, + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "component" + ], + "type": "object" + } + } + } + } +]
13 tool updates
- Changed
billing.plans1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "billing_mode": { + "type": "string" + }, + "plans": { + "items": { + "properties": { + "calls_per_day": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price_usd_month": { + "type": "integer" + }, + "secrets_max": { + "type": "integer" + }, + "tools_max": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "billing_mode", + "plans" + ], + "type": "object" +}
- Changed
host.feedback.list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "integer" + }, + "feedback": { + "items": { + "properties": { + "context": { + "type": "null" + }, + "created_unix": { + "type": "integer" + }, + "feedback_id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "last_call_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "context", + "created_unix", + "feedback_id", + "kind", + "last_call_ids", + "status", + "text" + ], + "type": "object" + }, + "type": "array" + }, + "note": { + "type": "string" + } + }, + "required": [ + "count", + "feedback" + ], + "type": "object" +}
- Changed
host.feedback.send1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "feedback_id": { + "type": "string" + }, + "kind": { + "type": "string" + } + }, + "required": [ + "feedback_id", + "kind" + ], + "type": "object" +}
- Changed
host.quickstart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "aliases": { + "items": { + "type": "string" + }, + "type": "array" + }, + "alt_endpoint": { + "type": "string" + }, + "authenticated": { + "type": "boolean" + }, + "bridge_returns": { + "properties": { + "mcphost.call": { + "type": "string" + }, + "mcphost.channel.post": { + "properties": { + "channel_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "from_address": { + "type": "string" + }, + "post_id": { + "type": "string" + }, + "seq": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.channel.read": { + "properties": { + "posts": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.docs.get": { + "type": "string" + }, + "mcphost.docs.search": { + "properties": { + "index": { + "type": "string" + }, + "results": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.drift.reviews": { + "properties": { + "reviews": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.lineage.blast_radius": { + "properties": { + "impacted": { + "type": "string" + }, + "truncated": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.lineage.trace": { + "properties": { + "downstream": { + "type": "string" + }, + "downstream_count": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "label": { + "type": "string" + }, + "orphaned": { + "type": "string" + }, + "upstream": { + "type": "string" + }, + "uses": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.msg.inbox": { + "properties": { + "messages": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.msg.send": { + "properties": { + "delivered_to": { + "type": "string" + }, + "message_id": { + "type": "string" + }, + "refused": { + "type": "string" + }, + "seq": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.progress": { + "type": "string" + }, + "mcphost.state.delete": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "deleted": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.delete_rows": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "deleted": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.get": { + "type": "string" + }, + "mcphost.state.insert": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "ids": { + "type": "string" + }, + "inserted": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.list": { + "properties": { + "keys": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.query": { + "properties": { + "rows": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.set": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "key": { + "type": "string" + }, + "set": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.table_create": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "created": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.state.table_drop": { + "properties": { + "bytes_delta": { + "type": "string" + }, + "dropped": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.append": { + "properties": { + "appended": { + "type": "string" + }, + "ids": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.chart": { + "properties": { + "caption": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "row_count": { + "type": "string" + }, + "schema": { + "type": "string" + }, + "title": { + "type": "string" + }, + "vega_lite": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.create": { + "properties": { + "created": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.drop": { + "properties": { + "dropped": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.list": { + "properties": { + "bytes_used": { + "type": "string" + }, + "tables": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.query": { + "properties": { + "rows": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.query(handle=True)": { + "properties": { + "bytes": { + "type": "string" + }, + "columns": { + "type": "string" + }, + "derived_from": { + "type": "string" + }, + "expires_unix": { + "type": "string" + }, + "handle": { + "type": "string" + }, + "row_count": { + "type": "string" + }, + "sample": { + "type": "string" + }, + "sample_cap": { + "type": "string" + }, + "stats": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "mcphost.table.schema": { + "properties": { + "bytes_used": { + "type": "string" + }, + "columns": { + "type": "string" + }, + "rows": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "endpoint": { + "type": "string" + }, + "example": { + "properties": { + "args": { + "type": "object" + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "hint": { + "type": "string" + }, + "host_steps_allowed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "install_doc_url": { + "type": "string" + }, + "install_links": { + "properties": { + "claude_ai_steps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claude_code_command": { + "type": "string" + }, + "cursor": { + "type": "string" + }, + "mcp_url": { + "type": "string" + }, + "surfaces": { + "items": { + "properties": { + "artefact": { + "type": "string" + }, + "checked": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "vscode": { + "type": "string" + } + }, + "type": "object" + }, + "kind": { + "type": "string" + }, + "kinds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "limits": { + "properties": { + "call_timeout_default_s": { + "type": "integer" + }, + "call_timeout_max_s": { + "type": "integer" + }, + "concurrent_calls_host": { + "type": "integer" + }, + "concurrent_calls_per_tenant": { + "type": "integer" + }, + "forwarding": { + "type": "boolean" + }, + "max_spec_bytes": { + "type": "integer" + }, + "max_tools_per_tenant": { + "type": "integer" + }, + "name_pattern": { + "type": "string" + }, + "output_bytes_max": { + "type": "integer" + }, + "plan": { + "type": "object" + }, + "request_body_bytes_max": { + "type": "integer" + } + }, + "type": "object" + }, + "namespace": { + "type": "string" + }, + "next": { + "items": { + "properties": { + "alternative_arguments": { + "properties": { + "args": { + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "alternative_call": { + "type": "string" + }, + "arguments": { + "type": "object" + }, + "call": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "outcome": { + "type": "string" + }, + "reachability": { + "type": "string" + }, + "recipe": { + "properties": { + "docs": { + "type": "string" + }, + "name": { + "type": "string" + }, + "steps": { + "items": { + "properties": { + "args_example": { + "type": "object" + }, + "note": { + "type": "string" + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": [ + "object", + "string" + ] + }, + "recipes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "recipes_nearby": { + "items": { + "type": "string" + }, + "type": "array" + }, + "resolved_from": { + "type": "string" + }, + "sandbox_api": { + "properties": { + "attrs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "import": { + "type": "string" + }, + "modules": { + "properties": { + "mcphost.channel": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.docs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.drift": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.lineage": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.msg": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.state": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mcphost.table": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "not_a_module": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "starter_tool": { + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "publish_call": { + "properties": { + "arguments": { + "type": "object" + }, + "call": { + "type": "string" + } + }, + "type": "object" + }, + "spec": { + "properties": { + "method": { + "type": "string" + }, + "source": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "test_call": { + "properties": { + "arguments": { + "type": "object" + }, + "call": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "steps": { + "items": { + "properties": { + "alternative_arguments": { + "properties": { + "args": { + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "alternative_call": { + "type": "string" + }, + "arguments": { + "type": "object" + }, + "call": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "triggers": { + "type": "string" + }, + "try_before_call": { + "items": { + "properties": { + "arguments": { + "type": "object" + }, + "call": { + "type": "string" + }, + "case": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "verbs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "verdict": { + "type": "string" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": "null" + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
host.redeem1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "key": { + "type": "string" + }, + "next": { + "type": "string" + }, + "session_bound": { + "type": "boolean" + }, + "usage": { + "type": "string" + } + }, + "required": [ + "key", + "next", + "session_bound", + "usage" + ], + "type": "object" +}
- Changed
host.state.get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "found": { + "type": "boolean" + }, + "impersonated": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "updated_unix": { + "type": "integer" + }, + "value": { + "properties": { + "at": { + "type": "integer" + }, + "n": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "text": { + "type": "string" + }, + "who": { + "type": "string" + } + }, + "type": [ + "object", + "string", + "integer", + "null" + ] + } + }, + "required": [ + "found", + "key", + "value" + ], + "type": "object" +}
- Changed
host.state.list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "properties": { + "quota": { + "properties": { + "state_bytes_max": { + "properties": { + "limit": { + "type": "integer" + }, + "remaining": { + "type": "integer" + }, + "used": { + "type": "integer" + } + }, + "required": [ + "limit", + "remaining", + "used" + ], + "type": "object" + }, + "state_ops_per_call_max": { + "properties": { + "limit": { + "type": "integer" + }, + "remaining": { + "type": "null" + }, + "used": { + "type": "null" + } + }, + "required": [ + "limit", + "remaining", + "used" + ], + "type": "object" + }, + "state_rows_max": { + "properties": { + "limit": { + "type": "integer" + }, + "remaining": { + "type": "integer" + }, + "used": { + "type": "integer" + } + }, + "required": [ + "limit", + "remaining", + "used" + ], + "type": "object" + } + }, + "required": [ + "state_bytes_max", + "state_ops_per_call_max", + "state_rows_max" + ], + "type": "object" + } + }, + "required": [ + "quota" + ], + "type": "object" + }, + "keys": { + "items": { + "properties": { + "key": { + "type": "string" + }, + "updated_unix": { + "type": "integer" + }, + "value": { + "properties": { + "download_url": { + "type": "string" + }, + "entries_done": { + "type": "integer" + }, + "entries_total": { + "type": "integer" + }, + "expires_unix": { + "type": "integer" + }, + "imported": { + "properties": { + "docs": { + "type": "integer" + }, + "models": { + "type": "integer" + }, + "rows": { + "type": "integer" + }, + "state": { + "type": "integer" + }, + "tables": { + "type": "integer" + }, + "tools": { + "type": "integer" + } + }, + "required": [ + "docs", + "models", + "rows", + "state", + "tables", + "tools" + ], + "type": "object" + }, + "manifest": { + "items": { + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spec": { + "properties": { + "schema": { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "schema" + ], + "type": "object" + } + }, + "required": [ + "kind", + "name", + "spec" + ], + "type": "object" + }, + "type": "array" + }, + "n": { + "type": "integer" + }, + "secrets_to_set": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size_bytes": { + "type": "integer" + }, + "skipped": { + "type": "array" + }, + "unrecognised_paths": { + "type": "array" + } + }, + "required": [], + "type": [ + "integer", + "object", + "string" + ] + } + }, + "required": [], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "keys" + ], + "type": "object" +}
- Changed
host.state.set1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "bytes_delta": { + "type": "integer" + }, + "impersonated": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "set": { + "type": "boolean" + } + }, + "required": [ + "bytes_delta", + "key", + "set" + ], + "type": "object" +}
- Changed
host.tool_call1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "args": { + "properties": {}, + "type": "object" + }, + "body": { + "properties": { + "ok": { + "type": "boolean" + }, + "pong": { + "type": "boolean" + } + }, + "type": "object" + }, + "changed": { + "type": "array" + }, + "checked_at": { + "type": "integer" + }, + "client_tool": { + "type": "string" + }, + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "created": { + "type": "boolean" + }, + "created_unix": { + "type": "integer" + }, + "dedupe_header": { + "type": "null" + }, + "doubled": { + "type": "integer" + }, + "enabled": { + "type": "boolean" + }, + "failed_steps": { + "type": "array" + }, + "forwarded_to": { + "type": "string" + }, + "headers": { + "properties": { + "content-type": { + "type": "string" + } + }, + "type": "object" + }, + "https_proxy": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "last_fired_unix": { + "type": "null" + }, + "last_run_id": { + "type": "null" + }, + "last_status": { + "type": "null" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "next": { + "properties": { + "tool": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "type": "object" + }, + "next_unix": { + "type": "integer" + }, + "ok": { + "type": "boolean" + }, + "onboarding": { + "properties": { + "claim_url": { + "type": "string" + }, + "invited_by": { + "type": "string" + }, + "shared_tools": { + "items": { + "type": "string" + }, + "type": "array" + }, + "tenant": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "payload": { + "properties": { + "ok": { + "type": "boolean" + }, + "pong": { + "type": "boolean" + } + }, + "type": "object" + }, + "preset": { + "type": "null" + }, + "result": { + "properties": { + "region": { + "type": "string" + }, + "rows": { + "type": "string" + } + }, + "type": "object" + }, + "rows": { + "items": { + "properties": { + "body": { + "properties": { + "id": { + "type": "string" + } + }, + "type": "object" + }, + "checked_at": { + "type": "integer" + }, + "delivery_id": { + "type": "null" + }, + "id": { + "type": "string" + }, + "latency_ms": { + "type": "integer" + }, + "ok": { + "type": "boolean" + }, + "received_at": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "run_id": { + "type": "string" + }, + "schedule": { + "type": "string" + }, + "status": { + "type": [ + "string", + "integer" + ] + }, + "steps": { + "items": { + "properties": { + "result": { + "properties": { + "region": { + "type": "string" + }, + "rows": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "status": { + "type": "string" + }, + "step": { + "type": "integer" + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "text": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "tz": { + "type": "null" + }, + "unverified": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "v1": { + "type": "string" + }, + "verify": { + "properties": { + "allow_unverified": { + "type": "boolean" + }, + "scheme": { + "type": "string" + } + }, + "type": "object" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": "null" + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
host.tool_publish1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "call_line": { + "description": "A ready-to-paste call for the published tool. Optional: declared so a typed client reserves the field; absent from responses that do not carry one.", + "type": "string" + }, + "deprecations": { + "items": { + "properties": { + "path": { + "type": "string" + }, + "replacement": { + "type": "string" + }, + "since": { + "type": "string" + }, + "sunset": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "evidence": { + "items": { + "properties": { + "available": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did_you_mean": { + "type": "string" + }, + "path": { + "type": "string" + }, + "predecessor_keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "step": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "failures": { + "items": { + "properties": { + "available": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did_you_mean": { + "type": "string" + }, + "path": { + "type": "string" + }, + "predecessor_keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "step": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "gates": { + "items": { + "properties": { + "evidence": { + "items": { + "type": "object" + }, + "type": "array" + }, + "failures": { + "items": { + "type": "object" + }, + "type": "array" + }, + "fix": { + "type": [ + "string", + "null" + ] + }, + "gate": { + "type": "string" + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "ok": { + "type": "boolean" + }, + "verdict": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hint": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "lock": { + "properties": { + "hashes": { + "type": "boolean" + }, + "packages": { + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "next": { + "properties": { + "tool": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "type": "boolean" + }, + "onboarding": { + "properties": { + "claim_url": { + "type": "string" + }, + "memory_hint": { + "type": "string" + }, + "memory_line": { + "type": "string" + }, + "note": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reason": { + "type": "string" + }, + "resolved_from": { + "type": "string" + }, + "steps": { + "items": { + "properties": { + "hint": { + "type": "string" + }, + "prev_fields": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "prev_fields_source": { + "type": "string" + }, + "step": { + "type": "integer" + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "verdict": { + "type": "string" + }, + "version": { + "description": "The tool's version after this publish (1 for a first publish).", + "type": "integer" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": "null" + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
host.tool_share1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "expose_spec": { + "type": "boolean" + }, + "group": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "next": { + "properties": { + "tool": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "visibility": { + "type": "string" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": "null" + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "description", + "expose_spec", + "group", + "name", + "visibility" + ], + "type": "object" +}
- Changed
host.tool_test1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "args": { + "properties": {}, + "type": "object" + }, + "chain_dry_run": { + "type": "boolean" + }, + "changed": { + "type": "array" + }, + "created": { + "type": "boolean" + }, + "created_unix": { + "type": "integer" + }, + "detail": { + "type": "string" + }, + "dry_run": { + "properties": { + "delivered": { + "type": "boolean" + }, + "rolled_back": { + "type": "boolean" + }, + "writes": { + "items": { + "properties": { + "channel": { + "type": "string" + }, + "key": { + "type": [ + "string", + "null" + ] + }, + "op": { + "type": "string" + }, + "rows": { + "type": "integer" + }, + "store": { + "type": "string" + }, + "table": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "enabled": { + "type": "boolean" + }, + "envelope": { + "properties": { + "declared": { + "items": { + "type": "string" + }, + "type": "array" + }, + "found_at_contract_path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "green": { + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "type": "array" + }, + "missing_detail": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "seen_at": { + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "environment": { + "items": { + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "error": { + "type": "string" + }, + "evidence": { + "items": { + "properties": { + "available": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did_you_mean": { + "type": "string" + }, + "path": { + "type": "string" + }, + "predecessor_keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "step": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "exception_class": { + "type": "string" + }, + "failures": { + "items": { + "properties": { + "available": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did_you_mean": { + "type": "string" + }, + "path": { + "type": "string" + }, + "predecessor_keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "step": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "forwarded_to": { + "type": "string" + }, + "id": { + "type": "string" + }, + "inputs_required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "type": "string" + }, + "last_fired_unix": { + "type": "null" + }, + "last_run_id": { + "type": "null" + }, + "last_status": { + "type": "null" + }, + "line": { + "type": "integer" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "next": { + "properties": { + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "next_unix": { + "type": "integer" + }, + "ok": { + "type": "boolean" + }, + "outer": { + "properties": { + "tenant_key": { + "type": "string" + } + }, + "type": "object" + }, + "payload": { + "properties": { + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "reason": { + "type": "string" + }, + "request": { + "properties": { + "body": { + "type": "null" + }, + "headers": { + "properties": { + "x-api-key": { + "type": "string" + } + }, + "type": "object" + }, + "method": { + "type": "string" + }, + "query": { + "properties": {}, + "type": "object" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "response": { + "properties": { + "body": { + "properties": { + "blocking_tool": { + "type": "string" + }, + "fact": { + "type": "string" + }, + "json": { + "properties": { + "bridge_status": { + "type": "string" + }, + "ingestion_status": { + "type": "string" + } + }, + "type": "object" + }, + "length": { + "type": "integer" + }, + "ok": { + "type": "boolean" + } + }, + "type": "object" + }, + "headers": { + "properties": { + "content-type": { + "type": "string" + } + }, + "type": "object" + }, + "payload": { + "properties": { + "blocking_tool": { + "type": "string" + }, + "fact": { + "type": "string" + }, + "json": { + "properties": { + "bridge_status": { + "type": "string" + }, + "ingestion_status": { + "type": "string" + } + }, + "type": "object" + }, + "length": { + "type": "integer" + }, + "ok": { + "type": "boolean" + } + }, + "type": "object" + }, + "status": { + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "properties": { + "a": { + "type": "null" + }, + "appended": { + "type": "integer" + }, + "b": { + "type": "null" + }, + "city": { + "type": "string" + }, + "data": { + "properties": { + "status": { + "type": "string" + } + }, + "type": "object" + }, + "delivered": { + "type": "boolean" + }, + "n": { + "type": "integer" + }, + "ok": { + "type": "boolean" + }, + "payload": { + "properties": { + "data": { + "properties": { + "status": { + "type": "string" + } + }, + "type": "object" + }, + "ingestion_status": { + "type": "string" + } + }, + "type": "object" + }, + "table": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "would_post": { + "properties": { + "body": { + "type": "string" + }, + "channel": { + "type": "string" + }, + "data": { + "properties": { + "n": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "schedule": { + "type": "string" + }, + "schema": { + "properties": { + "properties": { + "properties": { + "cid": { + "properties": {}, + "type": "object" + }, + "city": { + "properties": {}, + "type": "object" + }, + "note": { + "properties": { + "default": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "required": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "source_line": { + "type": "string" + }, + "state": { + "properties": { + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reads": { + "type": "integer" + }, + "tables": { + "items": { + "type": "string" + }, + "type": "array" + }, + "writes": { + "type": "integer" + } + }, + "type": "object" + }, + "steps": { + "items": { + "properties": { + "dispatched": { + "type": "boolean" + }, + "error": { + "type": "string" + }, + "prev_fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "resolved": { + "type": "string" + }, + "resolved_args": { + "type": "object" + }, + "result": { + "properties": { + "a": { + "type": "integer" + }, + "appended": { + "type": "integer" + }, + "ids": { + "type": "array" + }, + "leads": { + "type": "array" + }, + "owner": { + "type": "string" + }, + "rows": { + "type": "array" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "side_effects": { + "type": "boolean" + }, + "step": { + "type": "integer" + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "tool": { + "type": "string" + }, + "tz": { + "type": "null" + }, + "verdict": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": "null" + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "dry_run" + ], + "type": "object" +}
- Changed
host.whoami1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "admin": { + "type": "boolean" + }, + "admin_schema_version": { + "type": "integer" + }, + "auth_method": { + "type": "string" + }, + "claim_url": { + "type": "string" + }, + "client_name": { + "type": [ + "string", + "null" + ] + }, + "client_version": { + "type": [ + "string", + "null" + ] + }, + "contract_sha": { + "type": "string" + }, + "contract_version": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "display_name": { + "type": "string" + }, + "invite_url": { + "type": "string" + }, + "key_age_s": { + "type": "integer" + }, + "key_rotated_at": { + "type": [ + "integer", + "null" + ] + }, + "links": { + "properties": { + "help": { + "type": "string" + }, + "plans": { + "type": "string" + }, + "status": { + "type": "string" + }, + "support": { + "type": "string" + } + }, + "type": "object" + }, + "metadata_url": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "naming_rule_url": { + "type": "string" + }, + "next": { + "properties": { + "tool": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "type": "object" + }, + "onboarding": { + "properties": { + "claim_url": { + "type": "string" + }, + "invite_url": { + "type": "string" + }, + "invited_by": { + "type": "string" + }, + "memory_hint": { + "type": "string" + }, + "memory_line": { + "type": "string" + }, + "note": { + "type": "string" + }, + "shared_tools": { + "type": "array" + }, + "tenant": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "owner": { + "properties": { + "verified_at": { + "type": "integer" + } + }, + "type": "object" + }, + "owner_verified": { + "type": "boolean" + }, + "plan": { + "type": "string" + }, + "plan_since": { + "type": "null" + }, + "resource": { + "type": "string" + }, + "session_tenant": { + "type": "string" + }, + "shared_tools": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "via": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "source": { + "type": [ + "string", + "null" + ] + }, + "source_class": { + "type": [ + "string", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "tenant": { + "type": "string" + }, + "welcome_back": { + "properties": { + "last_note": { + "type": [ + "string", + "null" + ] + }, + "last_seen": { + "type": "string" + }, + "notes": { + "type": "integer" + }, + "since_you_left": { + "properties": { + "calls": { + "type": "integer" + }, + "days": { + "type": "integer" + }, + "inbox": { + "type": "integer" + }, + "runs": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "contract_sha", + "contract_version" + ], + "type": "object" +}
2 tool updates
- Added
host.feedback.list - Added
host.feedback.send
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted MCP memory and agent control plane for durable conversations, jobs, and operations.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA production-grade MCP server designed for multi-tenant, authenticated, and observable AI agent systems, enabling secure tool execution across heterogeneous data sources.66MIT
- FlicenseNot gradedqualityDmaintenanceA runtime for inspectable agent workflows that provides MCP tools, bounded Python execution, session memory, and deterministic evaluation.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to expose and control local and self-hosted tools via MCP, with isolated workers, long-running task management, persisted state, and modular integrations for reverse engineering and development workflows.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely discover, invoke, and manage tools through a hardened MCP endpoint with protections like injection detection, circuit breakers, retry backoff, response caching, context-window limiting, and state snapshots.9 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.