Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "host.state.set"
⟨147 unchanged words⟩ :"Any JSON value to store under key.","type":["string","number","integer","boolean","array","object","null"]}},"required":["key","value"] ⟨4 unchanged words⟩
Changed the definition of "host.feedback.send" and "host.tool_share"
⟨118 unchanged words⟩ saw; 1 to 2048 bytes after trim.","minLength":1,"type":"string"}},"required":["kind ⟨5 unchanged words⟩
⟨68 unchanged words⟩ calls per hour from any one grantee.","maximum":10000,"minimum":1,"type":"integer"},"scopes":{"description" ⟨27 unchanged words⟩ read_source","fork"],"type":"string"},"minItems":1,"type":"array"},"tags":{" ⟨140 unchanged words⟩
Changed the definition of "host.tool_call" and "host.tool_test"
⟨25 unchanged words⟩ "type":"object"}},"properties":{"args":{"properties":{},"type":["object","null"]},"body":{"properties":{"ok":{"type":["boolean","null"]},"pong":{"type":["boolean","null"]}},"type":["object","null"]},"changed":{"type":["array","null"]},"checked_atcall_id":{"type":["integerstring","null"]},"client_tool":{"type":["string","null"]},"columns":{"items":{"type":"string"},"type":["array","null"]},"count":{"type":["integer","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"dedupe_header":{},"doubled":{"type":["integer","null"]},"enableddata":{"type":["boolean","null"]},"failed_stepsdry_run":{"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"https_proxy":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{},"last_run_id":{},"last_status":{},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]},"why":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"onboarding":{"properties":{"claim_url":{"type":["string","null"]},"invited_by":{"type":["string","null"]},"shared_tools":{"items":{"type":"string"},"type":["array","null"]},"tenant":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"ok":{"type":["boolean","null"]},"pong":{"type":["boolean","null"]}},"type":["object","null"]},"preset":{},"
Changed the definition of "host.state.set"
⟨24 unchanged words⟩ "data"],"type":"object"}},"propertiesanyOf":[{"required":["bytes_delta","key","set"],"type":"object"},{"typeproperties":{"integer_meta":{"properties":{"dry_run":{"const":true},"impersonatedscratch":{"type":["boolean"}},"null
Changed the definition of "signup"
⟨29 unchanged words⟩ ":"display name","type":"string"},"source":{"description":"Optional attribution tag for this signup (1-64 chars matching the pattern), e.g. \"plugin\", \"www\", \"cli\", \"hn\"; omit for none. Stored as the tenant's signup_source and counted in the signup-source funnel. Attribution only: whether a signup is real or synthetic is decided by the harness header and fleet IP, never by this value. \"synthorg\" is reserved for the discovery-chain harness.","pattern":"^[a-z0-9][a-z0-9._-]{0,63}$","type":"string"}},"required":["name"],"type":"object"}
Changed the definition of "host.quickstart"
⟨37 unchanged words⟩ recipe name.","type":"string"},"retry_after_s":{"description":"Seconds a rate-limited signup said to wait; an error's next_call carries it back here. Informational, never required.","type":"integer"},"tenant_key":{"description":"The key `signup` returned. ⟨80 unchanged words⟩
Added "host.resume"; changed the definition of "billing.plans", "host.errors", "host.feedback.list" and 12 more (17 tools before, 18 now)
⟨84 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
⟨98 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
Changed the definition of "host.tool_publish"
⟨365 unchanged words⟩ "type":["integer","null"]},"warnings":{"items":{"properties":{"ceiling":{"type":"integer"},"ceiling_field":{"type":"string"},"code":{"enum":["timeout_clamped"],"type":"string"},"effective":{"type":"integer"},"field":{"type":"string"},"message":{"type":"string"},"plan":{"type":"string"},"requested":{"type":"integer"}},"required":["ceiling","ceiling_field","code","effective","field","message","plan","requested"],"type":"object"},"type":["array","null"]},"welcome_back":{"properties":{"last_note":{}, ⟨37 unchanged words⟩
Changed the definition of "host.tool_share"
⟨58 unchanged words⟩ to share.","type":"string"},"rate_per_hour_per_caller":{"description":"Optional cap (1..10000) on calls per hour from any one grantee.","type":"integer"},"scopes":{"description":"What the grantee may do: call, read_source, fork. Default [\"call\"] ([\"call\",\"read_source\"] with expose_spec: true). url shares allow only call.","items":{"enum":["call","read_source","fork"],"type":"string"},"type":"array"},"tags":{"description":"Catalog tags merged into ⟨135 unchanged words⟩
Changed the definition of "billing.plans", "host.errors", "host.feedback.list" and 13 more
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"billing_mode":{"type":"string"},"plans" ⟨43 unchanged words⟩ "billing_mode","plans"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"
Changed the definition of "host.state.get", "host.state.list", "host.tool_call" and 3 more
⟨13 unchanged words⟩ ["integer","null"]},"value":{"properties":{"at":{"type":["integer","null"]},"n":{"type":["integer","null"]},"source":{"type":["string","null"]},"text":{"type":["string","null"]},"who":{"type":["string","null"]}},"type":["object","string","integer","null"]}},"required":["found","key", ⟨3 unchanged words⟩
⟨72 unchanged words⟩ ["integer","null"]},"value":{"properties":{"download_url":{"type":["string","null"]},"entries_done":{"type":["integer","null"]},"entries_total":{"type":["integer","null"]},"expires_unix":{"type":["integer","null"]},"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","null"]},"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","null"]},"n":{"type":["integer","null"]},"secrets_to_set":{"items":{"type":"string"},"type":["array","null"]},"size_bytes":{"type":["integer","null"]},"skipped":{"type":["array","null"]},"unrecognised_paths":{"type":["array","null"]}},"required":[],"type":["integer","object","string","null"]
Changed the definition of "host.quickstart", "host.tool_publish", "host.tool_share" and 1 more
⟨693 unchanged words⟩ "type":["array","null"]},"next_steps":{"items":{"type":"object"},"type":["array","null"]},"outcome":{"type":["string","null" ⟨40 unchanged words⟩ "type":"string"},"type":["array","object","null"]},"recipes_nearby":{"items" ⟨255 unchanged words⟩
⟨1198 unchanged words⟩ "none\".","type":"object"},"tags":{"description":"Catalog tags: at most 16, each 1-32 chars of a-z, 0-9 and '-', stored lower-case and deduped.","items":{"type":"string"},"type":"array"},"tenant_key":{"description":"The key `signup` returned.
Added "host.errors"; changed the definition of "host.whoami" (16 tools before, 17 now)
⟨39 unchanged words⟩ "type":["string","null"]},"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"client_version":{"type":["string","null"]},"clients":{"items":{"properties":{"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"label":{"type":["string","null"]},"last_seen":{"type":["integer","null"]},"this":{"type":["boolean","null"]}},"type":"object"},"type":["array","null"]},"contract_sha":{"type":"string"},"contract_version" ⟨11 unchanged words⟩ type":["string","null"]},"invite_url":{"type":["string","null"]},"join_url":{"type":["string","null"] ⟨232 unchanged words⟩
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.
Changed the definition of "billing.plans", "host.help.search" and "host.tool_publish"
⟨20 unchanged words⟩ "type":["string","null"]},"org_members_max":{"type":["integer","null"]},"overage_usd_per_1000_calls":{"type":["integer","null" ⟨21 unchanged words⟩
⟨34 unchanged words⟩ ":["chain","echo","http","jq","js","python","wasm"],"type": ⟨106 unchanged words⟩
Changed the definition of "billing.plans", "host.help.get" and "host.tool_publish"
⟨4 unchanged words⟩ "plans":{"items":{"properties":{"calls_included_month":{"type":["integer","null"]},"calls_per_day":{"type":["integer","null" ⟨4 unchanged words⟩ "]},"name":{"type":["string","null"]},"overage_usd_per_1000_calls":{"type":["integer","null"]},"price_usd_month":{"type" ⟨19 unchanged words⟩
⟨13 unchanged words⟩ an error's `anchor` field or a `host.help.search` hit. `<path>#top` and a bare `<path>` (e.g. docs/kinds/chain.md) both return that document's first section.","type":"string"},"tenant_key":{
Changed the definition of "host.help.search" and "host.tool_publish"
⟨34 unchanged words⟩ ":["chain","echo","http","js","python","wasm"],"type":"string"} ⟨105 unchanged words⟩
⟨294 unchanged words⟩ {"properties":{"kind":{"const":"js"}},"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":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"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":"
Changed the definition of "host.quickstart" and "host.tool_publish"
⟨467 unchanged words⟩ "type":["object","null"]},"contract":{"description":"The asked kind's KindContract summary: the error families its failures carry and whether they carry data.source_line.","properties":{"families":{"items":{"type":"string"},"type":["array","null"]},"source_line":{"type":["boolean","null"]}},"type":["object","null"]},"endpoint":{"type":["string","null" ⟨495 unchanged words⟩
⟨653 unchanged words⟩ with resolved_from naming the alias you asked for. Error contract per kind: chain (families: compose, tool_state; source_line: no); echo (families: none; source_line: no); http (families: upstream; source_line: no); python (families: tool_code, tool_limit, upstream, compose, tool_state; source_line: yes); wasm (families: tool_code, tool_limit; source_line: no).
Changed the definition of "billing.plans", "host.feedback.list", "host.help.get" and 10 more
⟨6 unchanged words⟩ :{"properties":{"calls_per_day":{"type":["integer","null"]},"description":{"type":["string","null"]},"name":{"type":["string","null"]},"price_usd_month":{"type":["integer","null"]},"secrets_max":{"type":["integer","null"]},"tools_max":{"type":["integer","null"]}},"type":"object"},"type": ⟨6 unchanged words⟩
Added "host.help.get" (15 tools before, 16 now)
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.
Changed the definition of "host.tool_test"
⟨6 unchanged words⟩ to pass, same shape as a real call. Omit to run one example generated from the tool's args_schema; the response then carries example_args (what ran) and untyped (keys the schema gave no type for).","type":"object"},"fixtures":{ ⟨130 unchanged words⟩ type":"string"}},"required":["name","args"],"type":"object","x-deprecated":{ ⟨4 unchanged words⟩
Changed the definition of "host.tool_publish"
⟨223 unchanged words⟩ :"object"},"type":"array"},"tool_lint":{"description":"Advisory publish-time lint findings for a python tool ([] when clean); a finding never blocks the publish.","items":{"properties":{"fix":{"type":"string"},"line":{"type":"integer"},"message":{"type":"string"},"rule":{"type":"string"},"source_line":{"type":"string"}},"type":"object"},"type":"array"},"verdict":{"type":"string"},"version" ⟨46 unchanged words⟩
Added "host.help.search"; changed the definition of "host.whoami" (14 tools before, 15 now)
{"properties":{"activation":{"properties":{"first_call_s":{"type":["integer","null"]},"first_own_call_s":{"type":["integer","null"]},"first_publish_s":{"type":["integer","null"]},"next_milestone":{"type":["object","null"]},"second_session_s":{"type":["integer","null"]}},"type":"object"},"admin":{"type":"boolean"},"admin_schema_version" ⟨195 unchanged words⟩
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.
Changed the definition of "host.tool_publish"
⟨16 unchanged words⟩ ":{"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" ⟨13 unchanged words⟩ ":{"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" ⟨21 unchanged words⟩ ,"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"},"
Changed the definition of "billing.plans", "host.feedback.list", "host.feedback.send" and 10 more
before
—after
{"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"}before
—after
{"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"}Added "host.feedback.list" and "host.feedback.send"; changed the definition of "host.state.set" and "host.tool_publish" (12 tools before, 14 now)
{"additionalProperties":false,"properties":{"dry_run":{"description":"return the diff this call would make and commit nothing","type":"boolean"},"end_user":{"description":"\"self\" for ⟨137 unchanged words⟩
⟨225 unchanged words⟩ :"object"}}}}],"properties":{"dry_run":{"description":"return the diff this call would make and commit nothing","type":"boolean"},"kind":{"description":"Which registered kind to ⟨307 unchanged words⟩
Changed the definition of "host.tool_call"
⟨180 unchanged words⟩ "integer"}},"type":"object"},"dry_run":{"description":"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.","type":"boolean"},"name":{"description":"Local name of the ⟨120 unchanged words⟩
Changed the definition of "host.tool_test"
⟨12 unchanged words⟩ real call.","type":"object"},"fixtures":{"description":"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.","type":"object"},"name":{"description":"Local name of the ⟨97 unchanged words⟩
Changed the definition of "host.tool_publish"
⟨300 unchanged words⟩ webhook","webhooks","inbound","trigger","inbox","cron","schedule","scheduled","doc","docs","document","documents","message","messages","inbox","msg","database","db","table ⟨222 unchanged words⟩
Changed the definition of "host.quickstart" and "host.tool_publish"
⟨120 unchanged words⟩ ,"type":"string"}},"required":["kind"],"type":"object"}
Publish a tool of a registered kind (chain,e.g.echopython, http,python,orwasm
Changed the definition of "host.tool_call" and "host.tool_publish"
⟨65 unchanged words⟩ validation error naming it; see host.runs.get's progress.budget.","properties":{"max_child_calls":{"description":"Free-plan ceiling 20; pro ceiling 50. Maximum shown is the free floor -- see host.quickstart limits.plan.budget for your plan.","maximum":20,"minimum":1,"type":"integer"},"max_est_tokens":{"description":"Free-plan ceiling 200000; pro ceiling 2000000. Maximum shown is the free floor -- see host.quickstart limits.plan.budget for your plan.","maximum":200000,"minimum":1,"type":"integer"},"max_tool_latency_ms":{"description":"Free-plan ceiling 30000; pro ceiling 120000. Maximum shown is the free floor -- see host.quickstart limits.plan.budget for your plan.","maximum":30000,"minimum":1,"type":"integer"},"max_wall_ms":{"description":"Free-plan ceiling 60000; pro ceiling 600000. Maximum shown is the free floor -- see host.quickstart limits.plan.budget for your plan.","maximum":60000,"minimum":1,"type":"integer"}},"type":"object"},"name":{"description" ⟨124 unchanged words⟩
Changed the definition of "host.tool_test"
Dry-run a published tool by name:writesverdictare(pass/will_fail/unverifiable), writes rolled backand reported under(dry_run, nothing delivered; for the other cases); see host.quickstart.
Changed the definition of "host.quickstart" and "signup"
⟨31 unchanged words⟩ naming the one dry-run tool for each case.Read-only.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 gettheasignupworkedstepexamplefirst.with no tenant data; any other host.*/billing.* call creates a tenant on first use, no signup required.
Changed the definition of "host.tool_call"
⟨35 unchanged words⟩ default false.","type":"boolean"},"budget":{"description":"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.","type":"object"},"name":{"description":"Local name of the ⟨120 unchanged words⟩
Changed the definition of "billing.plans", "host.quickstart", "host.redeem" and 8 more
⟨28 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as
Changed the definition of "host.tool_call", "host.tool_publish", "host.tool_share" and 1 more
⟨147 unchanged words⟩ "name","args"],"type":"object","x-deprecated":{"replaced_by":"host.tool.call","sunset":"2026-12-31"}}
⟨247 unchanged words⟩ "kind","spec"],"type":"object","x-deprecated":{"replaced_by":"host.tool.publish","sunset":"2026-12-31"}}
Changed the definition of "billing.plans", "host.quickstart", "host.redeem" and 9 more
{"additionalProperties":false,"properties":{"tenant_key":{"description":"The ⟨72 unchanged words⟩
{"additionalProperties":false,"properties":{"kind":{"description":"Which ⟨111 unchanged words⟩
Removed "billing.checkout", "billing.status", "host.agent.contact_accept" and 132 more (147 tools before, 12 now)
Create (or reuse an open one for the same plan) a Stripe Checkout URL to upgrade this tenant, defaulting to the pro plan. Returns billing_unavailable if this host has no Stripe key configured -- call billing.plans first to check.
This tenant's plan, usage against each quota, and when the daily call quota resets.
Accept a pending contact request addressed to you: both you and the requester become accepted contacts, visible from either side via host.agent.contacts().
Deny a pending contact request addressed to you. The requester's subsequent sends and requests get contact_pending for 7 days, then may request again.
Added "host.vault.connect_link", "host.vault.disconnect", "host.vault.provider_remove" and 3 more; changed the definition of "host.agent.unmute" and "host.msg.unblock" (141 tools before, 147 now)
Remove amute.mute: the address's messages resume appearing in host.msg.inbox(unread_only=true).
Remove ablock.block: the address's future sends to you are accepted again.
Changed the definition of "host.docs.search"
Ranked passage search over this tenant's document store. Lexical (BM25) bydefault;default,embeddingsormodehybrid (setreciprocalviarankhost.docs.index_configfusion of lexical and embeddings)ranksoncebyacosineproviderand
Added "host.lineage.blast_radius", "host.lineage.trace" and "host.lineage.trace_page"; changed the definition of "host.table.drop" (138 tools before, 141 now)
Drop a declared table and every row it holds. Refused as lineage_blocked when a tool, chain, chart, or handle would break, unless confirm: true.{"properties":{"confirm":{"description":"PRD-mcphost-lineage-blast-radius requirement 7: drop anyway even though a breaking consumer exists. Ignored when nothing breaking depends on this table.","type":"boolean"},"name":{"description":"Name of the declared ⟨86 unchanged words⟩
Rank every consumer downstream of a node by how badly a change would hurt it: severity (breaking/degrading/none), a suggested action, and observed use.
Added "host.table.chart" and "host.table.charts" (136 tools before, 138 now)
Run sql (the same read-only path and caps as host.table.query) and return chart.v1: a result-profile.v1 profile, a mark/encoding recommendation with rationale and alternatives, an inline-data Vega-Lite v5 spec, and a caption whose headline and facts are computed from the rows, never guessed. mark, if given, must be the recommended mark or one of its alternatives -- an unrecognized or disallowed mark (e.g. pie) fails naming the allowed set. share: true stores the chart (evicting this tenant's oldest past 100 stored) and returns a share_url valid 24 hours, no login required.
List this tenant's stored (host.table.chart {share: true}) charts, newest first, each with id, title, created_unix, and expires_unix.
Changed the definition of "billing.checkout", "billing.plans", "billing.status" and 132 more
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
Changed the definition of "host.quickstart" and "host.tool_publish"
⟨9 unchanged words⟩ worked example for, e.g. echo, http,python.python -- or a job-word alias (webhook, event, cron, ...) for its recipe. Omit to see every kind, alias and recipe name.","type":"string"},"tenant_key":{ ⟨41 unchanged words⟩
⟨2 unchanged words⟩ "description":"Which registered kind to publish under,:e.g.chain, echo, http,
Changed the definition of "billing.checkout", "billing.plans", "billing.status" and 132 more
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
Added "host.oauth.trusted_issuer_remove", "host.oauth.trusted_issuer_set", "host.oauth.trusted_issuers" and 1 more; changed the definition of "host.tool_share" (132 tools before, 136 now)
⟨6 unchanged words⟩ by host.catalog.search/get.","type":"string"},"expose_spec":{"description":"Default false. When true, any tenant this tool is shared with may call host.tool_spec_shared to read its (redacted) spec.","type":"boolean"},"group":{"description":"Required when visibility is ⟨62 unchanged words⟩
Remove one of this tenant's trusted identity-assertion issuers; its assertions stop authenticating immediately.
Register (or update) an identity-assertion issuer for this tenant's enterprise-managed auth: identity assertions with iss equal to issuer, from client_id, verified against jwks_url, mint a token for the employee they name -- no consent screen. Up to 4 trusted issuers per tenant; a 5th is refused quota_trusted_issuers; an issuer already trusted by another tenant is refused issuer_already_registered.
Added "host.oauth.doctor", "host.oauth.provider", "host.oauth.provider_remove" and 3 more; changed the definition of "host.tool_publish" (126 tools before, 132 now)
⟨29 unchanged words⟩ ,40}$.","type":"string"},"scopes":{"description":"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.","items":{"type":"string"},"type":"array"},"spec":{"description":"The kind-specific spec object; ⟨41 unchanged words⟩
Diagnose this tenant's OIDC provider setup: discovery reachable, jwks_uri reachable, per-tenant resource metadata, whether the callback URL is listed in the provider's discovery document (when exposed), and a dry-run authorize URL. One line per check with ok|fail and a fix.
Added "host.oauth.audit", "host.oauth.audit_export", "host.oauth.client_approve" and 5 more (118 tools before, 126 now)
Page this tenant's OAuth auth audit log (authorize/consent/token/refresh/revoke/ policy_change/approved/denied/refused events), newest additions last. Optional since/until (unix seconds) and event filters; limit defaults to 50, max 500; cursor resumes from a previous page's cursor field.
Export this tenant's OAuth auth audit log for since..until as JSON lines (one object per line, same fields host.oauth.audit pages). Refuses export_too_large (with a suggested narrower window) past 50 MiB.
Approve a pending client (from host.oauth.pending): its next /oauth/authorize reaches consent directly.
Deny a pending client (from host.oauth.pending): every later authorize attempt reads client_not_allowed.
Added "host.enduser.audit", "host.enduser.export", "host.enduser.get" and 6 more; changed the definition of "host.runs.list" (109 tools before, 118 now)
⟨7 unchanged words⟩ , optionally filtered by tool, status (queued|running|done|error|timeout|cancelled)or, trigger (call|job|schedule|event|chain) or end_user_subject (the end user, if any, the run ran as).
{"properties":{"end_user_subject":{"description":"Only runs that ran as this end user's subject.","type":"string"},"limit":{"description":"Max runs to return; ⟨62 unchanged words⟩
Added "host.progress", "host.runs.part", "host.share.caller_limit" and 1 more; changed the definition of "host.runs.wait" and "host.usage" (105 tools before, 109 now)
Long-poll one run until it finalizes, until: {counter, gte} is reached, or timeout_s elapses (max 25s), returning ⟨16 unchanged words⟩
⟨45 unchanged words⟩ 25; default 20.","type":"integer"},"until":{"description":"{counter: <name>, gte: <n>} -- return as soon as that counter reaches n, even while the run is still running.","type":"object"}},"required":["run_id"],"type":"object"}
Added "host.docs.index_config", "host.docs.reindex", "host.docs.search" and 2 more; changed the definition of "host.docs.status", "host.state.delete", "host.state.delete_rows" and 5 more (100 tools before, 105 now)
before
—after
This tenant's document store counters: documents, bytes, text_bytes, the current change watermark, this plan's document/byte quotas, and an index block (mode, indexed_watermark, lag_seconds, pending_documents, chunks, rebuilding, quota_chunks_reached) describing the search index's own freshness.before
—after
{"properties":{"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"}},"required":[],"type":"object"}Added "host.table.describe", "host.table.model_set" and "host.table.models" (97 tools before, 100 now)
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.docs.delete", "host.docs.get", "host.docs.list" and 6 more (88 tools before, 97 now)
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.channel.close", "host.channel.freeze", "host.channel.read" and 4 more; changed the definition of "host.channel.open", "host.channel.post", "host.tool_call" and 4 more (81 tools before, 88 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Added "host.changelog", "host.channel.open", "host.channel.post" and 1 more; changed the definition of "host.tool_publish" and "host.tool_run" (77 tools before, 81 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.self_offboard" (76 tools before, 77 now)
Definition not stored.
Added "host.agent.contact_accept", "host.agent.contact_deny", "host.agent.contact_request" and 4 more; changed the definition of "host.msg.send" (69 tools before, 76 now)
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.msg.wait"; changed the definition of "host.trigger.replay", "host.trigger.set" and "host.trigger.test" (68 tools before, 69 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Added "host.msg.ack", "host.msg.block", "host.msg.inbox" and 4 more (61 tools before, 68 now)
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.agent.lookup", "host.agent.profile_set", "host.agent.search" and 1 more (57 tools before, 61 now)
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Certificate recorded, valid to 2026-12-05
Authorization not required
Added "host.table.append", "host.table.create", "host.table.drop" and 3 more (51 tools before, 57 now)
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Added "host.key_rotate" and "host.redeem"; changed the definition of "host.whoami" and "signup" (49 tools before, 51 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
Added "host.trigger.replay" and "host.trigger.test"; changed the definition of "host.trigger.list" and "host.trigger.set" (47 tools before, 49 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
First tool surface recorded: 47 tools (server version 3.2.0)
Showing the latest 65 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨25 unchanged words⟩ "type":"object"}},"properties":{"args":{"properties":{},"type":["object","null"]},"chain_dry_run":{"type":["boolean","null"]},"changed":{"type":["array","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"detail":{"type":["string","null"]},"dry_run":{"properties":{"delivered":{"type":["boolean","null"]},"rolled_back":{"type":["boolean","null"]},"writes":{"items":{"properties":{"channel":{"type":["string","null"]},"key":{"type":["string","null"]},"op":{"type":["string","null"]},"rows":{"type":["integer","null"]},"store":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":"object"},"enabled":{"type":["boolean","null"]},"envelope":{"properties":{"declared":{"items":{"type":"string"},"type":["array","null"]},"found_at_contract_path":{"items":{"type":"string"},"type":["array","null"]},"green":{"type":["boolean","null"]},"missing":{"items":{"type":"string"},"type":["array","null"]},"missing_detail":{"items":{"properties":{"name":{"type":["string","null"]},"path":{"type":["string","null"]},"seen_at":{"type":["array","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","null"]},"environment":{"items":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"value":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"error":{"type":["string","null"]},"evidence":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"exception_class":{"type":["string","null"]},"failures":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_meancall_id":{"type":["string","null"]},"pathclient_tool":{"type":["string","null"]},"predecessor_keys":{"itemsdata":{"type":"string"},"type":["array","null"]},"stepdry_run":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"id":{"type":["string","null"]},"inputs_required":{"items":{"type":"string"},"type":["array","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{},"last_run_id":{},"last_status":{},"line":{"type":["integer","null"]},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"outer":{"properties":{"tenant_key":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"msg":{"type":["string","null"]}},"type":["object","null"]},"reason":{"type":["string","null"]},"request":{"properties":{"body":{},"headers":{"properties":{"x-api-key":{"type":["string","null"]}},"type":["object","null"]},"method":{"type":["string","null"]},"query":{"properties":{},"type":["object","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"response":{"properties":{"body":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"status":{"type":["integer","null"]}},"type":["object","null"]},"result":{},"schedule":{"type":["string","null"]},"schema":{"properties":{"properties":{"properties":{"cid":{"properties":{},"type":["object","null"]},"city":{"properties":{},"type":["object","null"]},"note":{"properties":{"default":{"type":["string","null"]},"type":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"required":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":["string","null"]}},"type":["object","null"]},"source_linestale_test":{"type":["string","null"]},"state":{"properties":{"keys":{"items":{"type":"string"},"type":["array","null"]},"reads":{"type":["integer","null"]},"tables":{"items":{"type":"string"},"type":["array","null"]},"writes":{"type":["integer","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"dispatched":{"type":["boolean","null"]},"error":{"type":["string","null"]},"prev_fields":{"items":{"type":"string"},"type":["array","null"]},"resolved":{"type":["string","null"]},"resolved_args":{"type":["object","null"]},"result":{},"side_effects":{"type":["boolean","null"]},"step":{"type":["integer","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"tool":{"type":["string","null"]},"tztested_version":{},"verdict":{"type":["string","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["dry_run"],"type" ⟨4 unchanged words⟩
⟨95 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
⟨128 unchanged words⟩ "kind","text"],"type":"object","x-mcphost-validated":true}
⟨117 unchanged words⟩ required":["anchor"],"type":"object","x-mcphost-validated":true}
⟨144 unchanged words⟩ required":["q"],"type":"object","x-mcphost-validated":true}
⟨122 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
⟨94 unchanged words⟩ required":["handoff_token"],"type":"object","x-mcphost-validated":true}
⟨131 unchanged words⟩ required":["key"],"type":"object","x-mcphost-validated":true}
⟨142 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
⟨155 unchanged words⟩ "key","value"],"type":"object","x-mcphost-validated":true}
⟨332 unchanged words⟩ ":"integer"}},"required":["name","args"],"type":"object","x-deprecated":{"replaced_by":"host.tool.call","sunset":"2026-12-31"},"x-mcphost-validated":true}
⟨918 unchanged words⟩ commit nothing","type":"boolean"},"force":{"description":"Publish a chain whose mapping can never resolve (verdict will_fail) anyway; the response's gates entry then carries forced: true. Default false.","type":"boolean"},"kind":{"description":"Which registered kind to ⟨447 unchanged words⟩
⟨181 unchanged words⟩ "replaced_by":"host.tool.test","sunset":"2026-12-31"},"x-mcphost-validated":true}
⟨84 unchanged words⟩ },"required":[],"type":"object","x-mcphost-validated":true}
Resume 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 own tool (host.tool.list, host.runs.list, host.note.list, host.changelog) for the rest. Read-only. An unauthenticated caller gets the onboarding block and creates no tenant.
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"count":{"type":"integer"},"feedback" ⟨41 unchanged words⟩ "count","feedback"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"feedback_id":{"type":"string"},"kind" ⟨3 unchanged words⟩ "feedback_id","kind"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"anchor":{"type":"string"},"example" ⟨29 unchanged words⟩ "text","title"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"hint":{"type":["string","null" ⟨58 unchanged words⟩ "index_version","total"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
before
{"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"alt_endpoint":{"type":["string","null"]},"authenticated":{"type":["boolean","null"]},"bridge_returns":{"properties":{"mcphost.call":{"type":["string","null"]},"mcphost.channel.post":{"properties":{"channel_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"from_address":{"type":["string","null"]},"post_id":{"type":["string","null"]},"seq":{"type":["string","null"]}},"type":["object","null"]},"mcphost.channel.read":{"properties":{"posts":{"type":["string","null"]}},"type":["object","null"]},"mcphost.docs.get":{"type":["string","null"]},"mcphost.docs.search":{"properties":{"index":{"type":["string","null"]},"results":{"type":["string","null"]}},"type":["object","null"]},"mcphost.drift.reviews":{"properties":{"reviews":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.blast_radius":{"properties":{"impacted":{"type":["string","null"]},"truncated":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.trace":{"properties":{"downstream":{"type":["string","null"]},"downstream_count":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]},"orphaned":{"type":["string","null"]},"upstream":{"type":["string","null"]},"uses":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.inbox":{"properties":{"messages":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.send":{"properties":{"delivered_to":{"type":["string","null"]},"message_id":{"type":["string","null"]},"refused":{"type":["string","null"]},"seq":{"type":["string","null"]},"thread_id":{"type":["string","null"]}},"type":["object","null"]},"mcphost.progress":{"type":["string","null"]},"mcphost.state.delete":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"key":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.delete_rows":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.get":{"type":["string","null"]},"mcphost.state.insert":{"properties":{"bytes_delta":{"type":["string","null"]},"ids":{"type":["string","null"]},"inserted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.list":{"properties":{"keys":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.query":{"properties":{"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.set":{"properties":{"bytes_delta":{"type":["string","null"]},"key":{"type":["string","null"]},"set":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_create":{"properties":{"bytes_delta":{"type":["string","null"]},"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_drop":{"properties":{"bytes_delta":{"type":["string","null"]},"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.append":{"properties":{"appended":{"type":["string","null"]},"ids":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.chart":{"properties":{"caption":{"type":["string","null"]},"profile":{"type":["string","null"]},"recommendation":{"type":["string","null"]},"row_count":{"type":["string","null"]},"schema":{"type":["string","null"]},"title":{"type":["string","null"]},"vega_lite":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.create":{"properties":{"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.drop":{"properties":{"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.list":{"properties":{"bytes_used":{"type":["string","null"]},"tables":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query":{"properties":{"rows":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query(handle=True)":{"properties":{"bytes":{"type":["string","null"]},"columns":{"type":["string","null"]},"derived_from":{"type":["string","null"]},"expires_unix":{"type":["string","null"]},"handle":{"type":["string","null"]},"row_count":{"type":["string","null"]},"sample":{"type":["string","null"]},"sample_cap":{"type":["string","null"]},"stats":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.schema":{"properties":{"bytes_used":{"type":["string","null"]},"columns":{"type":["string","null"]},"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"contract":{"description":"The asked kind's KindContract summary: the error families its failures carry and whether they carry data.source_line.","properties":{"families":{"items":{"type":"string"},"type":["array","null"]},"source_line":{"type":["boolean","null"]}},"type":["object","null"]},"endpoint":{"type":["string","null"]},"example":{"properties":{"args":{"type":["object","null"]},"tool":{"type":["string","null"]}},"type":["object","null"]},"hint":{"type":["string","null"]},"host_steps_allowed":{"items":{"type":"string"},"type":["array","null"]},"install_doc_url":{"type":["string","null"]},"install_links":{"properties":{"claude_ai_steps":{"items":{"type":"string"},"type":["array","null"]},"claude_code_command":{"type":["string","null"]},"cursor":{"type":["string","null"]},"mcp_url":{"type":["string","null"]},"surfaces":{"items":{"properties":{"artefact":{"type":["string","null"]},"checked":{"type":["string","null"]},"doc_url":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"vscode":{"type":["string","null"]}},"type":["object","null"]},"kind":{"type":["string","null"]},"kinds":{"items":{"type":"string"},"type":["array","null"]},"limits":{"properties":{"call_timeout_default_s":{"type":["integer","null"]},"call_timeout_max_s":{"type":["integer","null"]},"concurrent_calls_host":{"type":["integer","null"]},"concurrent_calls_per_tenant":{"type":["integer","null"]},"forwarding":{"type":["boolean","null"]},"max_spec_bytes":{"type":["integer","null"]},"max_tools_per_tenant":{"type":["integer","null"]},"name_pattern":{"type":["string","null"]},"output_bytes_max":{"type":["integer","null"]},"plan":{"type":["object","null"]},"request_body_bytes_max":{"type":["integer","null"]}},"type":["object","null"]},"namespace":{"type":["string","null"]},"next":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"next_steps":{"items":{"type":"object"},"type":["array","null"]},"outcome":{"type":["string","null"]},"reachability":{"type":["string","null"]},"recipe":{"properties":{"docs":{"type":["string","null"]},"name":{"type":["string","null"]},"steps":{"items":{"properties":{"args_example":{"type":["object","null"]},"note":{"type":["string","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","string","null"]},"recipes":{"items":{"type":"string"},"type":["array","object","null"]},"recipes_nearby":{"items":{"type":"string"},"type":["array","null"]},"resolved_from":{"type":["string","null"]},"sandbox_api":{"properties":{"attrs":{"items":{"type":"string"},"type":["array","null"]},"import":{"type":["string","null"]},"modules":{"properties":{"mcphost.channel":{"items":{"type":"string"},"type":["array","null"]},"mcphost.docs":{"items":{"type":"string"},"type":["array","null"]},"mcphost.drift":{"items":{"type":"string"},"type":["array","null"]},"mcphost.lineage":{"items":{"type":"string"},"type":["array","null"]},"mcphost.msg":{"items":{"type":"string"},"type":["array","null"]},"mcphost.state":{"items":{"type":"string"},"type":["array","null"]},"mcphost.table":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"not_a_module":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"starter_tool":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"publish_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]},"spec":{"properties":{"method":{"type":["string","null"]},"source":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"test_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"triggers":{"type":["string","null"]},"try_before_call":{"items":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"case":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"verbs":{"items":{"type":"string"},"type":["array","null"]},"verdict":{"type":["string","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":"object"}after
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"alt_endpoint":{"type":["string","null"]},"authenticated":{"type":["boolean","null"]},"bridge_returns":{"properties":{"mcphost.call":{"type":["string","null"]},"mcphost.channel.post":{"properties":{"channel_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"from_address":{"type":["string","null"]},"post_id":{"type":["string","null"]},"seq":{"type":["string","null"]}},"type":["object","null"]},"mcphost.channel.read":{"properties":{"posts":{"type":["string","null"]}},"type":["object","null"]},"mcphost.docs.get":{"type":["string","null"]},"mcphost.docs.search":{"properties":{"index":{"type":["string","null"]},"results":{"type":["string","null"]}},"type":["object","null"]},"mcphost.drift.reviews":{"properties":{"reviews":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.blast_radius":{"properties":{"impacted":{"type":["string","null"]},"truncated":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.trace":{"properties":{"downstream":{"type":["string","null"]},"downstream_count":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]},"orphaned":{"type":["string","null"]},"upstream":{"type":["string","null"]},"uses":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.inbox":{"properties":{"messages":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.send":{"properties":{"delivered_to":{"type":["string","null"]},"message_id":{"type":["string","null"]},"refused":{"type":["string","null"]},"seq":{"type":["string","null"]},"thread_id":{"type":["string","null"]}},"type":["object","null"]},"mcphost.progress":{"type":["string","null"]},"mcphost.state.delete":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"key":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.delete_rows":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.get":{"type":["string","null"]},"mcphost.state.insert":{"properties":{"bytes_delta":{"type":["string","null"]},"ids":{"type":["string","null"]},"inserted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.list":{"properties":{"keys":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.query":{"properties":{"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.set":{"properties":{"bytes_delta":{"type":["string","null"]},"key":{"type":["string","null"]},"set":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_create":{"properties":{"bytes_delta":{"type":["string","null"]},"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_drop":{"properties":{"bytes_delta":{"type":["string","null"]},"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.append":{"properties":{"appended":{"type":["string","null"]},"ids":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.chart":{"properties":{"caption":{"type":["string","null"]},"profile":{"type":["string","null"]},"recommendation":{"type":["string","null"]},"row_count":{"type":["string","null"]},"schema":{"type":["string","null"]},"title":{"type":["string","null"]},"vega_lite":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.create":{"properties":{"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.drop":{"properties":{"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.list":{"properties":{"bytes_used":{"type":["string","null"]},"tables":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query":{"properties":{"rows":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query(handle=True)":{"properties":{"bytes":{"type":["string","null"]},"columns":{"type":["string","null"]},"derived_from":{"type":["string","null"]},"expires_unix":{"type":["string","null"]},"handle":{"type":["string","null"]},"row_count":{"type":["string","null"]},"sample":{"type":["string","null"]},"sample_cap":{"type":["string","null"]},"stats":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.schema":{"properties":{"bytes_used":{"type":["string","null"]},"columns":{"type":["string","null"]},"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"contract":{"description":"The asked kind's KindContract summary: the error families its failures carry and whether they carry data.source_line.","properties":{"families":{"items":{"type":"string"},"type":["array","null"]},"source_line":{"type":["boolean","null"]}},"type":["object","null"]},"endpoint":{"type":["string","null"]},"example":{"properties":{"args":{"type":["object","null"]},"tool":{"type":["string","null"]}},"type":["object","null"]},"hint":{"type":["string","null"]},"host_steps_allowed":{"items":{"type":"string"},"type":["array","null"]},"install_doc_url":{"type":["string","null"]},"install_links":{"properties":{"claude_ai_steps":{"items":{"type":"string"},"type":["array","null"]},"claude_code_command":{"type":["string","null"]},"cursor":{"type":["string","null"]},"mcp_url":{"type":["string","null"]},"surfaces":{"items":{"properties":{"artefact":{"type":["string","null"]},"checked":{"type":["string","null"]},"doc_url":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"vscode":{"type":["string","null"]}},"type":["object","null"]},"kind":{"type":["string","null"]},"kinds":{"items":{"type":"string"},"type":["array","null"]},"limits":{"properties":{"call_timeout_default_s":{"type":["integer","null"]},"call_timeout_max_s":{"type":["integer","null"]},"concurrent_calls_host":{"type":["integer","null"]},"concurrent_calls_per_tenant":{"type":["integer","null"]},"forwarding":{"type":["boolean","null"]},"max_spec_bytes":{"type":["integer","null"]},"max_tools_per_tenant":{"type":["integer","null"]},"name_pattern":{"type":["string","null"]},"output_bytes_max":{"type":["integer","null"]},"plan":{"type":["object","null"]},"request_body_bytes_max":{"type":["integer","null"]}},"type":["object","null"]},"namespace":{"type":["string","null"]},"next":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"next_steps":{"items":{"type":"object"},"type":["array","null"]},"outcome":{"type":["string","null"]},"reachability":{"type":["string","null"]},"recipe":{"properties":{"docs":{"type":["string","null"]},"name":{"type":["string","null"]},"steps":{"items":{"properties":{"args_example":{"type":["object","null"]},"note":{"type":["string","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","string","null"]},"recipes":{"items":{"type":"string"},"type":["array","object","null"]},"recipes_nearby":{"items":{"type":"string"},"type":["array","null"]},"resolved_from":{"type":["string","null"]},"sandbox_api":{"properties":{"attrs":{"items":{"type":"string"},"type":["array","null"]},"import":{"type":["string","null"]},"modules":{"properties":{"mcphost.channel":{"items":{"type":"string"},"type":["array","null"]},"mcphost.docs":{"items":{"type":"string"},"type":["array","null"]},"mcphost.drift":{"items":{"type":"string"},"type":["array","null"]},"mcphost.lineage":{"items":{"type":"string"},"type":["array","null"]},"mcphost.msg":{"items":{"type":"string"},"type":["array","null"]},"mcphost.state":{"items":{"type":"string"},"type":["array","null"]},"mcphost.table":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"not_a_module":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"starter_tool":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"publish_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]},"spec":{"properties":{"method":{"type":["string","null"]},"source":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"test_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"triggers":{"type":["string","null"]},"try_before_call":{"items":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"case":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"verbs":{"items":{"type":"string"},"type":["array","null"]},"verdict":{"type":["string","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"key":{"type":"string"},"next" ⟨11 unchanged words⟩ "session_bound","usage"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"found":{"type":"boolean"},"impersonated" ⟨13 unchanged words⟩ "key","value"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"data":{"properties":{"quota":{"properties":{"state_bytes_max":{"properties ⟨73 unchanged words⟩ required":["keys"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"bytes_delta":{"type":"integer"},"impersonated" ⟨11 unchanged words⟩ "key","set"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"args":{"properties":{},"type":[ ⟨307 unchanged words⟩ ","null"]}},"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"call_line":{"description":"A ready-to-paste call for ⟨368 unchanged words⟩ ","null"]}},"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"description":{"type":["string","null" ⟨69 unchanged words⟩ "name","visibility"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
before
{"properties":{"args":{"properties":{},"type":["object","null"]},"chain_dry_run":{"type":["boolean","null"]},"changed":{"type":["array","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"detail":{"type":["string","null"]},"dry_run":{"properties":{"delivered":{"type":["boolean","null"]},"rolled_back":{"type":["boolean","null"]},"writes":{"items":{"properties":{"channel":{"type":["string","null"]},"key":{"type":["string","null"]},"op":{"type":["string","null"]},"rows":{"type":["integer","null"]},"store":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":"object"},"enabled":{"type":["boolean","null"]},"envelope":{"properties":{"declared":{"items":{"type":"string"},"type":["array","null"]},"found_at_contract_path":{"items":{"type":"string"},"type":["array","null"]},"green":{"type":["boolean","null"]},"missing":{"items":{"type":"string"},"type":["array","null"]},"missing_detail":{"items":{"properties":{"name":{"type":["string","null"]},"path":{"type":["string","null"]},"seen_at":{"type":["array","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","null"]},"environment":{"items":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"value":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"error":{"type":["string","null"]},"evidence":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"exception_class":{"type":["string","null"]},"failures":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"id":{"type":["string","null"]},"inputs_required":{"items":{"type":"string"},"type":["array","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{},"last_run_id":{},"last_status":{},"line":{"type":["integer","null"]},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"outer":{"properties":{"tenant_key":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"msg":{"type":["string","null"]}},"type":["object","null"]},"reason":{"type":["string","null"]},"request":{"properties":{"body":{},"headers":{"properties":{"x-api-key":{"type":["string","null"]}},"type":["object","null"]},"method":{"type":["string","null"]},"query":{"properties":{},"type":["object","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"response":{"properties":{"body":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"status":{"type":["integer","null"]}},"type":["object","null"]},"result":{},"schedule":{"type":["string","null"]},"schema":{"properties":{"properties":{"properties":{"cid":{"properties":{},"type":["object","null"]},"city":{"properties":{},"type":["object","null"]},"note":{"properties":{"default":{"type":["string","null"]},"type":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"required":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":["string","null"]}},"type":["object","null"]},"source_line":{"type":["string","null"]},"state":{"properties":{"keys":{"items":{"type":"string"},"type":["array","null"]},"reads":{"type":["integer","null"]},"tables":{"items":{"type":"string"},"type":["array","null"]},"writes":{"type":["integer","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"dispatched":{"type":["boolean","null"]},"error":{"type":["string","null"]},"prev_fields":{"items":{"type":"string"},"type":["array","null"]},"resolved":{"type":["string","null"]},"resolved_args":{"type":["object","null"]},"result":{},"side_effects":{"type":["boolean","null"]},"step":{"type":["integer","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"tool":{"type":["string","null"]},"tz":{},"verdict":{"type":["string","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["dry_run"],"type":"object"}after
{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"args":{"properties":{},"type":["object","null"]},"chain_dry_run":{"type":["boolean","null"]},"changed":{"type":["array","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"detail":{"type":["string","null"]},"dry_run":{"properties":{"delivered":{"type":["boolean","null"]},"rolled_back":{"type":["boolean","null"]},"writes":{"items":{"properties":{"channel":{"type":["string","null"]},"key":{"type":["string","null"]},"op":{"type":["string","null"]},"rows":{"type":["integer","null"]},"store":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":"object"},"enabled":{"type":["boolean","null"]},"envelope":{"properties":{"declared":{"items":{"type":"string"},"type":["array","null"]},"found_at_contract_path":{"items":{"type":"string"},"type":["array","null"]},"green":{"type":["boolean","null"]},"missing":{"items":{"type":"string"},"type":["array","null"]},"missing_detail":{"items":{"properties":{"name":{"type":["string","null"]},"path":{"type":["string","null"]},"seen_at":{"type":["array","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","null"]},"environment":{"items":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"value":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"error":{"type":["string","null"]},"evidence":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"exception_class":{"type":["string","null"]},"failures":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"id":{"type":["string","null"]},"inputs_required":{"items":{"type":"string"},"type":["array","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{},"last_run_id":{},"last_status":{},"line":{"type":["integer","null"]},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"outer":{"properties":{"tenant_key":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"msg":{"type":["string","null"]}},"type":["object","null"]},"reason":{"type":["string","null"]},"request":{"properties":{"body":{},"headers":{"properties":{"x-api-key":{"type":["string","null"]}},"type":["object","null"]},"method":{"type":["string","null"]},"query":{"properties":{},"type":["object","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"response":{"properties":{"body":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"status":{"type":["integer","null"]}},"type":["object","null"]},"result":{},"schedule":{"type":["string","null"]},"schema":{"properties":{"properties":{"properties":{"cid":{"properties":{},"type":["object","null"]},"city":{"properties":{},"type":["object","null"]},"note":{"properties":{"default":{"type":["string","null"]},"type":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"required":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":["string","null"]}},"type":["object","null"]},"source_line":{"type":["string","null"]},"state":{"properties":{"keys":{"items":{"type":"string"},"type":["array","null"]},"reads":{"type":["integer","null"]},"tables":{"items":{"type":"string"},"type":["array","null"]},"writes":{"type":["integer","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"dispatched":{"type":["boolean","null"]},"error":{"type":["string","null"]},"prev_fields":{"items":{"type":"string"},"type":["array","null"]},"resolved":{"type":["string","null"]},"resolved_args":{"type":["object","null"]},"result":{},"side_effects":{"type":["boolean","null"]},"step":{"type":["integer","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"tool":{"type":["string","null"]},"tz":{},"verdict":{"type":["string","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["dry_run"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}{"$defs":{"ErrorEnvelope":{"properties":{"code":{"type":"integer"},"data":{"properties":{"error_code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["error_code"],"type":"object"},"message":{"type":"string"}},"required":["code","message","data"],"type":"object"}},"properties":{"activation":{"properties":{"first_call_s":{"type ⟨335 unchanged words⟩ "contract_sha","contract_version"],"type":"object","x-error-envelope":{"$ref":"#/$defs/ErrorEnvelope"}}
⟨161 unchanged words⟩ "]},"preset":{},"result":{"properties":{"region":{"type":["string","null"]},"rows":{"type":["string","null"]}},"type":["object","null"]},"rows":{"items":{"properties":{"body":{"properties ⟨55 unchanged words⟩ {"items":{"properties":{"result":{"properties":{"region":{"type":["string","null"]},"rows":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"status":{"type":["string", ⟨85 unchanged words⟩
⟨1093 unchanged words⟩ ^[a-z][a-z0-9_]{1,40}$.","pattern":"^[a-z][a-z0-9_]{1,40}$","type":"string"},"scopes":{"description" ⟨265 unchanged words⟩
⟨197 unchanged words⟩ "replaced_by":"host.tool.share","sunset":"2026-12-31"},"x-mcphost-validated":true}
⟨405 unchanged words⟩ ["object","null"]},"result":{"properties":{"a":{},"appended":{"type":["integer","null"]},"b":{},"city":{"type":["string","null"]},"data":{"properties":{"status":{"type":["string","null"]}},"type":["object","null"]},"delivered":{"type":["boolean","null"]},"n":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"payload":{"properties":{"data":{"properties":{"status":{"type":["string","null"]}},"type":["object","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"table":{"type":["string","null"]},"total":{"type":["integer","null"]},"would_post":{"properties":{"body":{"type":["string","null"]},"channel":{"type":["string","null"]},"data":{"properties":{"n":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":["object","null"]},"schedule":{"type":["string","null" ⟨99 unchanged words⟩ ["object","null"]},"result":{"properties":{"a":{"type":["integer","null"]},"appended":{"type":["integer","null"]},"ids":{"type":["array","null"]},"leads":{"type":["array","null"]},"owner":{"type":["string","null"]},"rows":{"type":["array","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"side_effects":{"type":["boolean", ⟨69 unchanged words⟩
⟨58 unchanged words⟩ to share.","type":"string"},"tags":{"description":"Catalog tags merged into the tool's existing ones (same rules as host.tool_publish).","items":{"type":"string"},"type":"array"},"tenant_key":{"description":"The key `signup` returned. ⟨75 unchanged words⟩ ,"visibility":{"description":"\"public\"or(needs a passing dry run of the current version), \"unlisted\", \"group\" or \"url\".","enum":["unlisted","group","public","url"],"type":"string"}},"required":[ ⟨9 unchanged words⟩
⟨97 unchanged words⟩ "type":["string","null"]},"hint":{"type":["string","null"]},"invite_url":{"type":["string","null" ⟨236 unchanged words⟩
⟨320 unchanged words⟩ {"properties":{"kind":{"const":"jq"}},"required":["kind"]},"then":{"properties":{"spec":{"additionalProperties":false,"properties":{"args_schema":{},"description":{"description":"the tool's description in `tools/list` (every kind)"},"max_output_bytes":{},"outputs":{"description":"fields a caller can rely on in `result.payload`, optionally with a `$.a.b` path each (every kind)"},"program":{},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"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":["program"],"type":"object"}}}},{"if":{"properties":{"kind":{"const":"js"}},"required":["kind"]}, ⟨572 unchanged words⟩ http (families: upstream; source_line: no); jq (families: tool_code, tool_limit; source_line: no); js (families: tool_code, tool_limit, upstream, compose ⟨21 unchanged words⟩ ,"enum":["chain","echo","http","jq","js","python","wasm","event ⟨241 unchanged words⟩
⟨12 unchanged words⟩ spec":{"additionalProperties":false,"properties":{"description":{"description":"the tool's description in `tools/list` (every kind)"},"outputs":{"description":"fields a caller can ⟨84 unchanged words⟩ spec":{"additionalProperties":false,"properties":{"description":{"description":"the tool's description in `tools/list` (every kind)"},"outputs":{"description":"fields a caller can ⟨89 unchanged words⟩ :{},"body":{},"description":{"description":"the tool's description in `tools/list` (every kind)"},"headers":{},"method":{}, ⟨472 unchanged words⟩ properties":{"args_schema":{},"component":{},"description":{"description":"the tool's description in `tools/list` (every kind)"},"memory_mb":{},"outputs":{"description ⟨458 unchanged words⟩
⟨5 unchanged words⟩ {"items":{"properties":{"context":{"type":"null"},"created_unix":{"type":"integer"}, ⟨29 unchanged words⟩ ":"array"},"note":{"type":["string","null"]}},"required":["count","feedback"] ⟨2 unchanged words⟩
⟨13 unchanged words⟩ ":["code","lang"],"type":["object","null"]},"line":{"type":"integer"}, ⟨17 unchanged words⟩
{"properties":{"hint":{"type":["string","null"]},"hits":{"items":{"properties": ⟨13 unchanged words⟩ ":"string"},"truncated":{"type":["boolean","null"]}},"required":["anchor","code","lang"],"type":["object","null"]},"next_tool":{"type":["string","null"]},"score":{"type":"number"}, ⟨27 unchanged words⟩
before
{"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"}after
{"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"alt_endpoint":{"type":["string","null"]},"authenticated":{"type":["boolean","null"]},"bridge_returns":{"properties":{"mcphost.call":{"type":["string","null"]},"mcphost.channel.post":{"properties":{"channel_id":{"type":["string","null"]},"created_at":{"type":["string","null"]},"from_address":{"type":["string","null"]},"post_id":{"type":["string","null"]},"seq":{"type":["string","null"]}},"type":["object","null"]},"mcphost.channel.read":{"properties":{"posts":{"type":["string","null"]}},"type":["object","null"]},"mcphost.docs.get":{"type":["string","null"]},"mcphost.docs.search":{"properties":{"index":{"type":["string","null"]},"results":{"type":["string","null"]}},"type":["object","null"]},"mcphost.drift.reviews":{"properties":{"reviews":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.blast_radius":{"properties":{"impacted":{"type":["string","null"]},"truncated":{"type":["string","null"]}},"type":["object","null"]},"mcphost.lineage.trace":{"properties":{"downstream":{"type":["string","null"]},"downstream_count":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]},"orphaned":{"type":["string","null"]},"upstream":{"type":["string","null"]},"uses":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.inbox":{"properties":{"messages":{"type":["string","null"]}},"type":["object","null"]},"mcphost.msg.send":{"properties":{"delivered_to":{"type":["string","null"]},"message_id":{"type":["string","null"]},"refused":{"type":["string","null"]},"seq":{"type":["string","null"]},"thread_id":{"type":["string","null"]}},"type":["object","null"]},"mcphost.progress":{"type":["string","null"]},"mcphost.state.delete":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"key":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.delete_rows":{"properties":{"bytes_delta":{"type":["string","null"]},"deleted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.get":{"type":["string","null"]},"mcphost.state.insert":{"properties":{"bytes_delta":{"type":["string","null"]},"ids":{"type":["string","null"]},"inserted":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.list":{"properties":{"keys":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.query":{"properties":{"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.set":{"properties":{"bytes_delta":{"type":["string","null"]},"key":{"type":["string","null"]},"set":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_create":{"properties":{"bytes_delta":{"type":["string","null"]},"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.state.table_drop":{"properties":{"bytes_delta":{"type":["string","null"]},"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.append":{"properties":{"appended":{"type":["string","null"]},"ids":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.chart":{"properties":{"caption":{"type":["string","null"]},"profile":{"type":["string","null"]},"recommendation":{"type":["string","null"]},"row_count":{"type":["string","null"]},"schema":{"type":["string","null"]},"title":{"type":["string","null"]},"vega_lite":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.create":{"properties":{"created":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.drop":{"properties":{"dropped":{"type":["string","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.list":{"properties":{"bytes_used":{"type":["string","null"]},"tables":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query":{"properties":{"rows":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.query(handle=True)":{"properties":{"bytes":{"type":["string","null"]},"columns":{"type":["string","null"]},"derived_from":{"type":["string","null"]},"expires_unix":{"type":["string","null"]},"handle":{"type":["string","null"]},"row_count":{"type":["string","null"]},"sample":{"type":["string","null"]},"sample_cap":{"type":["string","null"]},"stats":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"mcphost.table.schema":{"properties":{"bytes_used":{"type":["string","null"]},"columns":{"type":["string","null"]},"rows":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"endpoint":{"type":["string","null"]},"example":{"properties":{"args":{"type":["object","null"]},"tool":{"type":["string","null"]}},"type":["object","null"]},"hint":{"type":["string","null"]},"host_steps_allowed":{"items":{"type":"string"},"type":["array","null"]},"install_doc_url":{"type":["string","null"]},"install_links":{"properties":{"claude_ai_steps":{"items":{"type":"string"},"type":["array","null"]},"claude_code_command":{"type":["string","null"]},"cursor":{"type":["string","null"]},"mcp_url":{"type":["string","null"]},"surfaces":{"items":{"properties":{"artefact":{"type":["string","null"]},"checked":{"type":["string","null"]},"doc_url":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"vscode":{"type":["string","null"]}},"type":["object","null"]},"kind":{"type":["string","null"]},"kinds":{"items":{"type":"string"},"type":["array","null"]},"limits":{"properties":{"call_timeout_default_s":{"type":["integer","null"]},"call_timeout_max_s":{"type":["integer","null"]},"concurrent_calls_host":{"type":["integer","null"]},"concurrent_calls_per_tenant":{"type":["integer","null"]},"forwarding":{"type":["boolean","null"]},"max_spec_bytes":{"type":["integer","null"]},"max_tools_per_tenant":{"type":["integer","null"]},"name_pattern":{"type":["string","null"]},"output_bytes_max":{"type":["integer","null"]},"plan":{"type":["object","null"]},"request_body_bytes_max":{"type":["integer","null"]}},"type":["object","null"]},"namespace":{"type":["string","null"]},"next":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"outcome":{"type":["string","null"]},"reachability":{"type":["string","null"]},"recipe":{"properties":{"docs":{"type":["string","null"]},"name":{"type":["string","null"]},"steps":{"items":{"properties":{"args_example":{"type":["object","null"]},"note":{"type":["string","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","string","null"]},"recipes":{"items":{"type":"string"},"type":["array","null"]},"recipes_nearby":{"items":{"type":"string"},"type":["array","null"]},"resolved_from":{"type":["string","null"]},"sandbox_api":{"properties":{"attrs":{"items":{"type":"string"},"type":["array","null"]},"import":{"type":["string","null"]},"modules":{"properties":{"mcphost.channel":{"items":{"type":"string"},"type":["array","null"]},"mcphost.docs":{"items":{"type":"string"},"type":["array","null"]},"mcphost.drift":{"items":{"type":"string"},"type":["array","null"]},"mcphost.lineage":{"items":{"type":"string"},"type":["array","null"]},"mcphost.msg":{"items":{"type":"string"},"type":["array","null"]},"mcphost.state":{"items":{"type":"string"},"type":["array","null"]},"mcphost.table":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"not_a_module":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"starter_tool":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"publish_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]},"spec":{"properties":{"method":{"type":["string","null"]},"source":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"test_call":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"alternative_arguments":{"properties":{"args":{"type":["object","null"]},"name":{"type":["string","null"]}},"type":["object","null"]},"alternative_call":{"type":["string","null"]},"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"triggers":{"type":["string","null"]},"try_before_call":{"items":{"properties":{"arguments":{"type":["object","null"]},"call":{"type":["string","null"]},"case":{"type":["string","null"]},"note":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"verbs":{"items":{"type":"string"},"type":["array","null"]},"verdict":{"type":["string","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":"object"}⟨3 unchanged words⟩ ":"boolean"},"impersonated":{"type":["boolean","null"]},"key":{"type":"string"},"updated_unix":{"type":["integer","null"]},"value":{"properties":{"at":{"type":["integer","null"]},"n":{"type":["integer","null"]},"source":{"type":["string","null"]},"text":{"type":["string","null"]},"who":{"type":["string","null"]}},"type":["object","string", ⟨8 unchanged words⟩
⟨25 unchanged words⟩ :{"type":"integer"},"remaining":{"type":"null"},"used":{"type":"null"}},"required":["limit","remaining", ⟨26 unchanged words⟩ },"required":["quota"],"type":["object","null"]},"keys":{"items":{"properties":{"key":{"type":["string","null"]},"updated_unix":{"type":["integer","null"]},"value":{"properties":{"download_url":{"type":["string","null"]},"entries_done":{"type":["integer","null"]},"entries_total":{"type":["integer","null"]},"expires_unix":{"type":["integer","null"]},"imported":{"properties":{"docs": ⟨21 unchanged words⟩ state","tables","tools"],"type":["object","null"]},"manifest":{"items":{"properties": ⟨25 unchanged words⟩ "],"type":"object"},"type":["array","null"]},"n":{"type":["integer","null"]},"secrets_to_set":{"items":{"type":"string"},"type":["array","null"]},"size_bytes":{"type":["integer","null"]},"skipped":{"type":["array","null"]},"unrecognised_paths":{"type":["array","null"]}},"required":[],"type":["integer","object","string","null"]}},"required":[],"type": ⟨7 unchanged words⟩
⟨3 unchanged words⟩ ":"integer"},"impersonated":{"type":["boolean","null"]},"key":{"type":"string"}, ⟨9 unchanged words⟩
{"properties":{"args":{"properties":{},"type":["object","null"]},"body":{"properties":{"ok":{"type":["boolean","null"]},"pong":{"type":["boolean","null"]}},"type":["object","null"]},"changed":{"type":["array","null"]},"checked_at":{"type":["integer","null"]},"client_tool":{"type":["string","null"]},"columns":{"items":{"type":"string"},"type":["array","null"]},"count":{"type":["integer","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"dedupe_header":{"type":"null"},"doubled":{"type":["integer","null"]},"enabled":{"type":["boolean","null"]},"failed_steps":{"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"https_proxy":{"type":["string","null"]},"id":{"type":["string","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{"type":"null"},"last_run_id":{"type":"null"},"last_status":{"type":"null"},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]},"why":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"onboarding":{"properties":{"claim_url":{"type":["string","null"]},"invited_by":{"type":["string","null"]},"shared_tools":{"items":{"type":"string"},"type":["array","null"]},"tenant":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"ok":{"type":["boolean","null"]},"pong":{"type":["boolean","null"]}},"type":["object","null"]},"preset":{"type":"null"},"result":{"properties":{"region":{"type":["string","null"]},"rows":{"type":["string","null"]}},"type":["object","null"]},"rows":{"items":{"properties":{"body":{"properties":{"id":{"type":["string","null"]}},"type":["object","null"]},"checked_at":{"type":["integer","null"]},"delivery_id":{"type":"null"},"id":{"type":["string","null"]},"latency_ms":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"received_at":{"type":["integer","null"]},"status":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"run_id":{"type":["string","null"]},"schedule":{"type":["string","null"]},"status":{"type":["string","integer","null"]},"steps":{"items":{"properties":{"result":{"properties":{"region":{"type":["string","null"]},"rows":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"status":{"type":["string","null"]},"step":{"type":["integer","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"text":{"type":["string","null"]},"tool":{"type":["string","null"]},"tz":{"type":"null"},"unverified":{"type":["boolean","null"]},"url":{"type":["string","null"]},"v1":{"type":["string","null"]},"verify":{"properties":{"allow_unverified":{"type":["boolean","null"]},"scheme":{"type":["string","null"]}},"type":["object","null"]},"welcome_back":{"properties":{"last_note":{"type":"null"},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":"object"}
⟨12 unchanged words⟩ spec":{"additionalProperties":false,"properties":{"outputs":{"description":"fields a caller can rely on in `result.payload`, optionally with a `$.a.b` path each (every kind)"},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"steps":{},"ui":{"additionalProperties ⟨57 unchanged words⟩ spec":{"additionalProperties":false,"properties":{"outputs":{"description":"fields a caller can rely on in `result.payload`, optionally with a `$.a.b` path each (every kind)"},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"schema":{},"ui":{"additionalProperties ⟨65 unchanged words⟩ :{},"method":{},"outputs":{"description":"fields a caller can rely on in `result.payload`, optionally with a `$.a.b` path each (every kind)"},"query":{},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"response":{},"timeout_s":{}, ⟨152 unchanged words⟩ names to path strings"},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"requirements":{"description":"a list ⟨85 unchanged words⟩ :{},"memory_mb":{},"outputs":{"description":"fields a caller can rely on in `result.payload`, optionally with a `$.a.b` path each (every kind)"},"reads":{"description":"tables this tool reads, recorded for lineage and blast-radius reports"},"timeout_s":{},"ui":{"additionalProperties ⟨376 unchanged words⟩
⟨22 unchanged words⟩ that do not carry one.","type":["string","null"]},"deprecations":{"items":{"properties":{"path":{"type":["string","null"]},"replacement":{"type":["string","null"]},"since":{"type":["string","null"]},"sunset":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"evidence":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":[
⟨16 unchanged words⟩ :{"properties":{"tool":{"type":["string","null"]},"why":{"type":["string","null"]}},"type":["object","null"]},"url":{"type":["string","null"]},"visibility":{"type":"string"},"welcome_back":{"properties":{"last_note":{"type":"null"},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["description","expose_spec", ⟨5 unchanged words⟩
before
{"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"}after
{"properties":{"args":{"properties":{},"type":["object","null"]},"chain_dry_run":{"type":["boolean","null"]},"changed":{"type":["array","null"]},"created":{"type":["boolean","null"]},"created_unix":{"type":["integer","null"]},"detail":{"type":["string","null"]},"dry_run":{"properties":{"delivered":{"type":["boolean","null"]},"rolled_back":{"type":["boolean","null"]},"writes":{"items":{"properties":{"channel":{"type":["string","null"]},"key":{"type":["string","null"]},"op":{"type":["string","null"]},"rows":{"type":["integer","null"]},"store":{"type":["string","null"]},"table":{"type":["string","null"]}},"type":"object"},"type":["array","null"]}},"type":"object"},"enabled":{"type":["boolean","null"]},"envelope":{"properties":{"declared":{"items":{"type":"string"},"type":["array","null"]},"found_at_contract_path":{"items":{"type":"string"},"type":["array","null"]},"green":{"type":["boolean","null"]},"missing":{"items":{"type":"string"},"type":["array","null"]},"missing_detail":{"items":{"properties":{"name":{"type":["string","null"]},"path":{"type":["string","null"]},"seen_at":{"type":["array","null"]}},"type":"object"},"type":["array","null"]}},"type":["object","null"]},"environment":{"items":{"properties":{"kind":{"type":["string","null"]},"name":{"type":["string","null"]},"value":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"error":{"type":["string","null"]},"evidence":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"exception_class":{"type":["string","null"]},"failures":{"items":{"properties":{"available":{"items":{"type":"string"},"type":["array","null"]},"did_you_mean":{"type":["string","null"]},"path":{"type":["string","null"]},"predecessor_keys":{"items":{"type":"string"},"type":["array","null"]},"step":{"type":["integer","null"]}},"type":"object"},"type":["array","null"]},"forwarded_to":{"type":["string","null"]},"id":{"type":["string","null"]},"inputs_required":{"items":{"type":"string"},"type":["array","null"]},"kind":{"type":["string","null"]},"last_fired_unix":{},"last_run_id":{},"last_status":{},"line":{"type":["integer","null"]},"msg":{"type":["string","null"]},"name":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]}},"type":["object","null"]},"next_unix":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"outer":{"properties":{"tenant_key":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"msg":{"type":["string","null"]}},"type":["object","null"]},"reason":{"type":["string","null"]},"request":{"properties":{"body":{},"headers":{"properties":{"x-api-key":{"type":["string","null"]}},"type":["object","null"]},"method":{"type":["string","null"]},"query":{"properties":{},"type":["object","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"response":{"properties":{"body":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"headers":{"properties":{"content-type":{"type":["string","null"]}},"type":["object","null"]},"payload":{"properties":{"blocking_tool":{"type":["string","null"]},"fact":{"type":["string","null"]},"json":{"properties":{"bridge_status":{"type":["string","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"length":{"type":["integer","null"]},"ok":{"type":["boolean","null"]}},"type":["object","null"]},"status":{"type":["integer","null"]}},"type":["object","null"]},"result":{"properties":{"a":{},"appended":{"type":["integer","null"]},"b":{},"city":{"type":["string","null"]},"data":{"properties":{"status":{"type":["string","null"]}},"type":["object","null"]},"delivered":{"type":["boolean","null"]},"n":{"type":["integer","null"]},"ok":{"type":["boolean","null"]},"payload":{"properties":{"data":{"properties":{"status":{"type":["string","null"]}},"type":["object","null"]},"ingestion_status":{"type":["string","null"]}},"type":["object","null"]},"table":{"type":["string","null"]},"total":{"type":["integer","null"]},"would_post":{"properties":{"body":{"type":["string","null"]},"channel":{"type":["string","null"]},"data":{"properties":{"n":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"type":["object","null"]},"schedule":{"type":["string","null"]},"schema":{"properties":{"properties":{"properties":{"cid":{"properties":{},"type":["object","null"]},"city":{"properties":{},"type":["object","null"]},"note":{"properties":{"default":{"type":["string","null"]},"type":{"type":["string","null"]}},"type":["object","null"]}},"type":["object","null"]},"required":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":["string","null"]}},"type":["object","null"]},"source_line":{"type":["string","null"]},"state":{"properties":{"keys":{"items":{"type":"string"},"type":["array","null"]},"reads":{"type":["integer","null"]},"tables":{"items":{"type":"string"},"type":["array","null"]},"writes":{"type":["integer","null"]}},"type":["object","null"]},"steps":{"items":{"properties":{"dispatched":{"type":["boolean","null"]},"error":{"type":["string","null"]},"prev_fields":{"items":{"type":"string"},"type":["array","null"]},"resolved":{"type":["string","null"]},"resolved_args":{"type":["object","null"]},"result":{"properties":{"a":{"type":["integer","null"]},"appended":{"type":["integer","null"]},"ids":{"type":["array","null"]},"leads":{"type":["array","null"]},"owner":{"type":["string","null"]},"rows":{"type":["array","null"]},"table":{"type":["string","null"]}},"type":["object","null"]},"side_effects":{"type":["boolean","null"]},"step":{"type":["integer","null"]},"tool":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"tool":{"type":["string","null"]},"tz":{},"verdict":{"type":["string","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]},"welcome_back":{"properties":{"last_note":{},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["dry_run"],"type":"object"}⟨21 unchanged words⟩ ["integer","null"]}},"type":["object","null"]},"admin":{"type":["boolean","null"]},"admin_schema_version":{"type":["integer","null"]},"auth_method":{"type":["string","null"]},"claim_url":{"type":["string","null"]},"client_name":{"type":["string", ⟨10 unchanged words⟩ ":"string"},"created_at":{"type":["string","null"]},"disabled":{"type":["boolean","null"]},"display_name":{"type":["string","null"]},"invite_url":{"type":["string","null"]},"key":{"properties":{"can_delegate":{"type":["boolean","null"]},"depth":{"type":["integer","null"]},"kind":{"type":["string","null"]},"label":{"type":["string","null"]},"parent":{"type":["string","null"]},"scopes":{"items":{"type":"string"},"type":["array","null"]}},"type":["object","null"]},"key_age_s":{"type":["integer","null"]},"key_rotated_at":{"type":["integer", ⟨2 unchanged words⟩ :{"properties":{"help":{"type":["string","null"]},"plans":{"type":["string","null"]},"status":{"type":["string","null"]},"support":{"type":["string","null"]}},"type":["object","null"]},"metadata_url":{"type":["string","null"]},"namespace":{"type":["string","null"]},"naming_rule_url":{"type":["string","null"]},"next":{"properties":{"tool":{"type":["string","null"]},"why":{"type":["string","null"]}},"type":["object","null"]},"onboarding":{"properties":{"claim_url":{"type":["string","null"]},"invite_url":{"type":["string","null"]},"invited_by":{"type":["string","null"]},"memory_hint":{"type":["string","null"]},"memory_line":{"type":["string","null"]},"note":{"type":["string","null"]},"shared_tools":{"type":["array","null"]},"tenant":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":["object","null"]},"owner":{"properties":{"verified_at":{"type":["integer","null"]}},"type":["object","null"]},"owner_verified":{"type":["boolean","null"]},"plan":{"type":["string","null"]},"plan_since":{"type":"null"},"resource":{"type":["string","null"]},"session_tenant":{"type":["string","null"]},"shared_tools":{"items":{"properties":{"name":{"type":["string","null"]},"owner":{"type":["string","null"]},"via":{"type":["string","null"]}},"type":"object"},"type":["array","null"]},"source":{"type":["string", ⟨8 unchanged words⟩ ,"null"]},"tenant":{"type":["string","null"]},"welcome_back":{"properties":{"last_note": ⟨2 unchanged words⟩ ,"null"]},"last_seen":{"type":["string","null"]},"notes":{"type":["integer","null"]},"since_you_left":{"properties":{"calls":{"type":["integer","null"]},"days":{"type":["integer","null"]},"inbox":{"type":["integer","null"]},"runs":{"type":["integer","null"]}},"type":["object","null"]}},"type":["object","null"]}},"required":["contract_sha","contract_version"] ⟨2 unchanged words⟩
before
—after
{"properties":{"feedback_id":{"type":"string"},"kind":{"type":"string"}},"required":["feedback_id","kind"],"type":"object"}before
—after
{"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"}before
—after
{"properties":{"key":{"type":"string"},"next":{"type":"string"},"session_bound":{"type":"boolean"},"usage":{"type":"string"}},"required":["key","next","session_bound","usage"],"type":"object"}before
—after
{"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"}before
—after
{"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"}before
—after
{"properties":{"bytes_delta":{"type":"integer"},"impersonated":{"type":"boolean"},"key":{"type":"string"},"set":{"type":"boolean"}},"required":["bytes_delta","key","set"],"type":"object"}before
—after
{"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"}before
—after
{"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"}before
—after
{"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"}before
—after
{"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"}before
—after
{"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"}List your own feedback (newest first, status received). Anonymous callers get [].
Tell the host's humans what you needed: kind, up to 2048 bytes of text, optional context. Works before signup. Returns feedback_id.
{"additionalProperties":false,"allOf":[{"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":{},"Which registeredheaders":{},"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":"atoJSONpublishSchemaunderobject"},"description":{"description":"achainstring"},"env":{"description":"aechomap of name to string value; names must match ^[A-Z][A-Z0-9_]{0,63}$"},"memory_mb":{"description":"ahttppositive integer number of megabytes"},"network":{"description":"\"none\"python(every plan),wasm.\"public\"A(requiresjob-wordthealiasproalsoplan),resolves\"egress\"here(requires the pro plan) --eventa tool's own code reaches this tenant's data with `import mcphost` (mcphost.table,eventsmcphost.state,webhookmcphost.docs,webhooksmcphost.lineage) even when network is \"none\""},"outputs":{"description":"ainboundlist of field names ortriggeran 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"}}}}],"properties":{"kind":{"description":"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, schedule orcron-stylescheduledwords for a timed run -- both resolve to ⟨7 unchanged words⟩ with resolved_from naming the alias you asked for.","enum":["chain","echo","http","python","wasm","event","events","webhook","webhooks","inbound","trigger","cron","schedule","scheduled","doc","docs","document","documents","message","messages","inbox","msg","database","db","table","tables","csv","sql","schedules","uptime","probe","probes","memory","memories"],"type":"string"},"name":{" ⟨210 unchanged words⟩
⟨136 unchanged words⟩ example. For python's network field: \"none\" (every plan), \"public\",or(requires the pro plan), \"egress\" (requires the pro plan) -- a tool's own code reaches this tenant's ⟨109 unchanged words⟩
CreateExplicit 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 ⟨42 unchanged words⟩
⟨66 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨38 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨75 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨86 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨2 unchanged words⟩
⟨75 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"},"value":{ ⟨13 unchanged words⟩
⟨75 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"},"version":{ ⟨33 unchanged words⟩
⟨198 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨10 unchanged words⟩
⟨87 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"},"visibility":{ ⟨19 unchanged words⟩
⟨53 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨9 unchanged words⟩
⟨28 unchanged words⟩ so later calls on it need no tenant_key.Required only whenOnthisa connectioncarrieswith no Authorization: Bearer header andnevernoranprior signup,--omittingwhenitbothimplicitly signs that connection up as aheaderbrand-new tenant and runs thisargumentcallareaspresent,itthe--headerseewins.host.whoami'sOmittingsourceitfield.onWhensuchboth aconnectionheaderreturnsandtenant_key_missingthis(-32602).argument are present, the header wins.","type":"string"}},"required": ⟨2 unchanged words⟩
⟨145 unchanged words⟩ "name","visibility"],"type":"object","x-deprecated":{"replaced_by":"host.tool.share","sunset":"2026-12-31"}}
Dry-runanaalready-publishedpublished tool by name,:nowritescallsarerowrolledwritten;back and reported under dry_run, nothing delivered; for the other cases see host.quickstart.
⟨101 unchanged words⟩ "name","args"],"type":"object","x-deprecated":{"replaced_by":"host.tool.test","sunset":"2026-12-31"}}
{"additionalProperties":false,"properties":{"handoff_token":{"description":"The ⟨83 unchanged words⟩
{"additionalProperties":false,"properties":{"end_user":{"description":"\" ⟨120 unchanged words⟩
{"additionalProperties":false,"properties":{"end_user":{"description":"\" ⟨130 unchanged words⟩
{"additionalProperties":false,"properties":{"end_user":{"description":"\" ⟨130 unchanged words⟩
{"additionalProperties":false,"properties":{"args":{"description":"Arguments ⟨145 unchanged words⟩
⟨22 unchanged words⟩ 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, ⟨18 unchanged words⟩
{"additionalProperties":false,"properties":{"kind":{"description":"Which ⟨123 unchanged words⟩ object; see host.quickstart(kind) for a filled-in example. For python's network field: \"none\", \"public\", or \"egress\" -- 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\".","type":"object"},"tenant_key":{ ⟨77 unchanged words⟩
{"additionalProperties":false,"properties":{"description":{"description":"Catalog-facing ⟨143 unchanged words⟩
{"additionalProperties":false,"properties":{"args":{"description":"Arguments ⟨99 unchanged words⟩
{"additionalProperties":false,"properties":{"tenant_key":{"description":"The ⟨72 unchanged words⟩
{"additionalProperties":false,"properties":{"handoff":{"description":"Recommended: ⟨31 unchanged words⟩
Request contact with a contacts-mode address; creates or returns the pending request. not_needed for an open address or one you already have an accepted contact with; contact_refused for a closed address; contact_pending if a request is already pending or was denied within the last 7 days; agent_not_found (same as a nonexistent address) if that address has blocked you. Quota contact_requests_per_day.
List your accepted contacts and every pending/decided contact request in either direction; status optionally narrows incoming/outgoing to one of pending, accepted, denied, expired.
Request contact with up to 50 addresses at once (e.g. an operator's own fleet of tenants); each is resolved the same way a single host.agent.contact_request would be, but a per-address failure (already connected, already pending, blocked, over quota, ...) is reported in that address's own result entry rather than failing the whole call.
Resolve another agent's namespace or @handle to its public card (address, handle, display_name, description, tags, contact_policy, last_seen, source_class). Unknown, disabled, and deleted addresses all return the identical agent_not_found error.
Mute an address: its future messages are still stored and readable via host.msg.thread, but excluded from host.msg.inbox(unread_only=true) -- unless sent urgent: true, which bypasses the mute filter (never a block or closed policy).
Claim or update this tenant's agent-directory card: an optional unique @handle (^[a-z][a-z0-9_]{2,31}$, stored lower-case), a description, up to 16 tags, and a contact_policy (open, contacts, or closed). Every argument is optional and, if omitted, leaves that field unchanged; an explicit null clears handle or description. A taken handle fails with handle_taken (names no one); a reserved one fails with handle_reserved.
Find agents by exact tag or a case-insensitive substring of handle, display name, or description. Disabled tenants are excluded. Ordered by handle (unclaimed last), then namespace; page with cursor from the previous response.
Remove a mute: the address's messages resume appearing in host.msg.inbox(unread_only=true).
Return this tenant's own agent-directory address: namespace, handle (if claimed), display name, contact_policy and plan. Never a key hash, billing field, or call log.
Dry-run an unpublished http spec against its real upstream; for the other cases see host.quickstart.
Return one public tool's descriptor and args_schema by its full name (<namespace>.<name>).
Search public tools across every tenant by name/description substring.
List what changed in the host.*/billing.* tool surface -- additions, deprecations, and removals -- since an optional version. Read-only.
Owner-only: close a group channel. Further host.channel.post calls get channel_closed; host.channel.read keeps working.
Owner-only: freeze a group channel. Further host.channel.post calls get channel_frozen; host.channel.read keeps working.
Create a named channel, or return the existing one of that name; or, with group instead of name, open (idempotently) the one channel for a group you own -- every current member can then host.channel.post/read it. Refuses channels_max (quota_exceeded) past the plan's cap.
Post to a channel by name or channel_id; advances your own read cursor to the new post. Against a group channel's id, any current member may post; a non-member gets channel_not_found, byte-identical to an unknown id.
Read a group channel's posts in seq order since a cursor (default: your own last read position, or 0 for a first read). ack: true stores next_cursor as your new read position. A non-member gets channel_not_found.
Owner-only: undo host.channel.freeze; the next post succeeds with the next seq.
Soft-delete a document by id or name; still visible via host.docs.list {since} with deleted: true.
Read a document by id or name -- version defaults to the current one; text: true also returns the extracted plain text this document's mime produced at put time.
Configure this tenant's search index provider. provider: "none" (lexical only, the default) or "openai-compatible" (endpoint, model, and secret -- a tenant secret name used as the embeddings request's bearer -- all required). Changing config re-indexes every document from scratch in the background.
List documents in this tenant's document store. Without since, returns the current live snapshot; with since (a watermark from host.docs.status, 0 for everything), returns every document changed since, including deleted ones (deleted: true).
Drop stored versions of a document older than older_than_versions versions back from its current one -- get {version: <a dropped version>} then reads not found.
Write (or, for an already-used name, create a new version of) a document in this tenant's document store. mime is detected from name and content when omitted; allowed mimes are text/plain, text/markdown, application/json, text/csv. content (or content_base64 for arbitrary bytes) must be at most MCPHOST_DOC_MAX_BYTES (default 2 MiB). Identical content to the current version is a no-op that repeats the current version.
Force this tenant's search index to re-chunk (and re-embed, if a provider is configured) one document (document_id) or, without document_id, every document, on the indexer's next tick.
Ranked passage search over this tenant's document store. Lexical (BM25) by default, or hybrid (reciprocal rank fusion of lexical and embeddings) once a provider is configured via host.docs.index_config -- falls back to lexical (index.mode: "lexical-fallback") if the provider call fails. mode overrides the default: "lexical" (never calls the provider), "embeddings", or "hybrid" (both require a configured provider). Returns [{document_id, name, version, chunk_no, offset, text, score, ranks: {lexical, embeddings}}] -- ranks names each hit's 1-based position in whichever source list(s) found it -…
This tenant's document store counters: documents, bytes, text_bytes, the current change watermark, this plan's document/byte quotas, and an index block (mode, indexed_watermark, lag_seconds, pending_documents, chunks, rebuilding, quota_chunks_reached) describing the search index's own freshness.
Generate and store a new per-tenant secret for signing end_user_assertion (HS256 compact JWS, claims sub/iat/exp with exp <= iat + 3600). Returns the secret once; it is never shown again and never appears in host.secret_list. Assertions signed with any prior secret stop verifying immediately -- no overlap window.
One end user's calls (tool, outcome, run_id, impersonated) merged with its revoke/unrevoke/purge control-plane events, newest first, paged by cursor.
Export one end user's state rows and call history as a bundle at /exports/<run_id>, the same envelope host.export returns (download_url, size_bytes, expires_unix).
One end user's roster row (subject, issuer, first_seen, last_seen, calls_total, revoked_at, revoked_by, purged_at) plus its live state_rows, vault_connections, and runs_30d counts.
List this tenant's end users with last-seen and call counts, newest last-seen first. Optional since (unix seconds, filters last_seen), revoked (bool), limit (default 50, max 1000), and cursor (from a previous page's cursor field).
Delete a revoked end user's scoped state and vault-token rows, de-identify its calls rows (kept, never deleted), and set purged_at. Requires the end user to be revoked first (revoke_required otherwise). Returns {state_rows, vault_tokens} counts.
Revoke an end user: its next identified call is refused with end_user_revoked, no tool runs, and its vault-token connections are disconnected.
Reverse a prior host.enduser.revoke; the end user's calls succeed again.
The end user (if any) this call itself carries: {subject, issuer, method, verified_at} from the OAuth bearer's sub/iss or a verified end_user_assertion; null when the call carries no verified end-user identity.
Build a downloadable .tar.gz of everything this tenant owns: tool sources, state, secret NAMES (never values), run/thread history and usage, plus a manifest.json re-publishable via host.tool_publish. Runs as a background job (poll host.runs.get with the returned run_id) -- calling this again while one is already running returns that same run_id rather than starting a second one. The finished run's result carries a download_url valid 24 hours.
Add a tenant (by namespace) to a group this tenant owns.
Create a named group this tenant owns, for host.tool_share(visibility: "group").
List the groups this tenant owns and their members.
Remove a tenant (by namespace) from a group this tenant owns.
Issue a new tenant key and invalidate the current one immediately: every other call using the old key fails as unauthenticated from this point on. Returns the new key exactly once -- use it (as tenant_key or Authorization) for every call after this one.
Rank every consumer downstream of a node by how badly a change would hurt it: severity (breaking/degrading/none), a suggested action, and observed use.
List everything a node depends on (upstream) and everything that depends on it (downstream). A downstream list over 100 nodes comes back as downstream_count plus a downstream_handle to page through with host.lineage.trace_page.
Page through a host.lineage.trace downstream_handle, 50 nodes at a time.
Mark messages as read for you; unread_only inbox reads stop returning them. Per-recipient -- a sender never sees others' receipts.
Block an address: its future sends to you are refused agent_not_found, byte-identical to sending to a nonexistent address. You can still send to it. Block lists are never exposed to the blocked party.
Every unread-or-read message across every thread you participate in, excluding your own sends, ordered oldest first; page with cursor from the previous response's next_cursor.
Reply in a thread you participate in; appends with the next seq. Blocked or contact-closed participants are skipped and listed in refused rather than failing the reply. thread_not_found (byte-identical for a nonexistent id) if you are not a participant.
Send a message to one or more agent-directory addresses, creating a new thread (or, with thread_id, adding to one you already participate in). Refused recipients (agent_not_found, contact_refused, recipient_inbox_full) are listed in refused rather than failing the whole call; from is always the authenticated tenant, never a caller argument.
Every message in one thread you participate in, ordered by seq; thread_not_found if you are not (or no longer) a participant.
Remove a block: the address's future sends to you are accepted again.
Long-poll for a new message until one past cursor arrives or timeout_s elapses (max 25s), returning the same shape as host.msg.inbox either way -- for a client with no polling loop of its own. On timeout, messages is empty and next_cursor is unchanged.
Page this tenant's OAuth auth audit log (authorize/consent/token/refresh/revoke/ policy_change/approved/denied/refused events), newest additions last. Optional since/until (unix seconds) and event filters; limit defaults to 50, max 500; cursor resumes from a previous page's cursor field.
Export this tenant's OAuth auth audit log for since..until as JSON lines (one object per line, same fields host.oauth.audit pages). Refuses export_too_large (with a suggested narrower window) past 50 MiB.
Approve a pending client (from host.oauth.pending): its next /oauth/authorize reaches consent directly.
Deny a pending client (from host.oauth.pending): every later authorize attempt reads client_not_allowed.
Diagnose this tenant's OIDC provider setup: discovery reachable, jwks_uri reachable, per-tenant resource metadata, whether the callback URL is listed in the provider's discovery document (when exposed), and a dry-run authorize URL. One line per check with ok|fail and a fix.
Revoke one hosted-authorization-server grant by id (from host.oauth.grants): its access tokens fail within 60s and its refresh tokens stop rotating.
List the OAuth clients currently connected to this tenant through mcphost's own hosted authorization server (host.oauth.issuer_set is for a tenant's own bring-your-own issuer instead): each grant's client_name, method (cimd|dcr), resource, created_at and last_used_at.
Remove one of this tenant's registered OAuth issuers; bearer JWTs from it stop authenticating immediately.
Register (or update) an OAuth issuer for this tenant: bearer JWTs with iss equal to issuer, a matching aud, verified against jwks_url, authenticate as this tenant. Up to 3 issuers per tenant; an issuer already registered by another tenant is refused issuer_already_registered.
List this tenant's registered OAuth issuers with their audience, jwks_url, and JWKS fetch age.
List clients awaiting approval under this tenant's clients: approve policy.
This tenant's current hosted-authorization-server client and session policy (host.oauth.policy_set's own field shape); the documented defaults for a tenant that has never called host.oauth.policy_set.
Set this tenant's hosted-authorization-server client and session policy. Every field is optional and, when omitted, keeps its current (or default) value: clients (any|allowlist|approve, default any), allowlist (client_id or CIMD-host strings, for allowlist mode), access_ttl_s (300..3600, default 3600), refresh_ttl_s (3600..2592000, default 2592000), max_grant_age_s (a refresh past this many seconds since consent fails invalid_grant/grant_expired; null clears it), reconsent_after_s (a refresh past this many seconds since consent fails invalid_grant/reconsent_required and the next authorize sho…
This tenant's registered OIDC identity provider (issuer, client_id, endpoints, scopes, flags) -- null if none is set. Never carries the client secret.
Remove this tenant's OIDC identity provider: every federated grant it produced is revoked immediately, and the per-tenant resource falls back to key/claim (owner) login.
Register (or update) this tenant's own OIDC identity provider: end users who connect to this tenant's per-tenant resource log in through it. Fetches the issuer's discovery document once (https only) and stores authorization_endpoint, token_endpoint, and jwks_uri. client_secret is encrypted at rest and never shown again.
Revoke every one of this tenant's live grants, refresh tokens and pending clients at once: access tokens fail within 60s.
Declare (or update) one scope this tenant's tools may require: name (a catalogued name, or the built-ins read/write) and a human-readable description shown on the OAuth consent page. Up to 32 catalog entries per tenant.
List this tenant's own scope catalog: name and description.
Remove one of this tenant's trusted identity-assertion issuers; its assertions stop authenticating immediately.
Register (or update) an identity-assertion issuer for this tenant's enterprise-managed auth: identity assertions with iss equal to issuer, from client_id, verified against jwks_url, mint a token for the employee they name -- no consent screen. Up to 4 trusted issuers per tenant; a 5th is refused quota_trusted_issuers; an issuer already trusted by another tenant is refused issuer_already_registered.
List this tenant's trusted identity-assertion issuers with their jwks_url, client_id and audience.
Report (or merge in) counters and/or pct/msg on a run, by id. Each named counter (items_processed, items_total, bytes_out, custom.<k>) is monotonic on its own -- a lower value than what's already stored fails validation with nothing written. Read back via host.runs.get/wait/list's counters field.
Publish this tenant's server.json to the configured MCP registry (requires --registry-url and admin.tenant_verify_namespace first).
Stop a queued or running job: its sandbox process is killed within ~2s and the run reads cancelled. A run that already finished fails with run_not_cancellable.
Read one run's status, progress and (once done) result by id -- the same run a host.tool_call(..., async=true) or a scheduled/triggered execution created.
List this tenant's recent runs, newest first, optionally filtered by tool, status (queued|running|done|error|timeout|cancelled), trigger (call|job|schedule|event|chain) or end_user_subject (the end user, if any, the run ran as).
Read part n of a run's result (host.runs.get/wait inline only part 0). A run whose whole result fit inline reads back parts: 1, n: 0 with the full result. n past the last part fails with not_found.
Delete the stored results of every done run finished at or before before_unix; each then reads done with result: null, purged: true. Frees state_bytes_max quota the results were counted against.
Long-poll one run until it finalizes, until: {counter, gte} is reached, or timeout_s elapses (max 25s), returning its current status either way -- for a client with no polling loop of its own.
List this tenant's secret names (never their values).
Store an encrypted secret value under this tenant's namespace.
Permanently close your own account: disables the tenant, cancels any active Stripe subscription (pro plan), and stops your key from authenticating anything further -- same as an admin-disabled tenant. Idempotent: an already-offboarded key gets the same tenant_disabled/tenant_key_invalid error every other host.*/ billing.* call already gets from it, not a crash. This does not scrub historical usage/signup records -- those stay for audit, same as today's admin-disabled tenants.
Cap how many successful calls a caller tenant may make per UTC day into one of this tenant's shared tools. The tool must already be shared. Exceeding the cap fails the call with quota_caller (never runs it); this tenant's own calls to the tool are unaffected.
Remove a caller_limit set by host.share.caller_limit.
Delete one key from this tenant's key-value state namespace.
Delete rows from a declared table matching an optional where filter (same grammar as host.state.query); omitting where deletes every row in the table.
Insert one row (an object) or several (an array of objects) into a declared table. Each row is validated against the table's schema first -- a type mismatch fails the whole call with state_schema_violation and writes nothing.
Read rows from a declared table, optionally filtered (where: "field op value", ops = != < <= > >=, clauses joined by ' and '), ordered (order_by: "field" or "field desc") and capped (limit).
Declare (or replace the schema of) a table in this tenant's state store. schema is {"column": "text"|"integer"|"real"|"boolean"|"json"}; primary_key, if given, must name one of schema's columns -- an insert whose row matches an existing row's primary_key value replaces it.
Drop a declared table and every row it holds.
Append one row (an object) or several (an array of objects) to a declared table. Each row is validated against the table's schema first -- a type mismatch fails the whole call with table_schema_violation and writes nothing.
Run sql (the same read-only path and caps as host.table.query) and return chart.v1: a result-profile.v1 profile, a mark/encoding recommendation with rationale and alternatives, an inline-data Vega-Lite v5 spec, and a caption whose headline and facts are computed from the rows, never guessed. mark, if given, must be the recommended mark or one of its alternatives -- an unrecognized or disallowed mark (e.g. pie) fails naming the allowed set. share: true stores the chart (evicting this tenant's oldest past 100 stored) and returns a share_url valid 24 hours, no login required.
List this tenant's stored (host.table.chart {share: true}) charts, newest first, each with id, title, created_unix, and expires_unix.
Declare a table in this tenant's SQL table store -- a different store from host.state.*'s key-value namespace and its own tables: use host.state.* for a handful of small values, host.table.* when you want real SQL (joins, aggregates, read-only queries) over rows. columns is {"column": "text"|"integer"|"real"| "timestamp"|"boolean"|"json"}; primary_key, if given, must name one of columns's own entries.
Return the generated semantic model for a declared table: per column its inferred type, null share, distinct count, min/max or top values, and role (key|category|measure|date|id|text); per table its row count, candidate primary key, detected foreign keys, and suggested measures/dimensions. Refreshes after append/create within 30s; a call right after a write returns the previous model with stale: true rather than blocking.
Drop a declared table and every row it holds. Refused as lineage_blocked when a tool, chain, chart, or handle would break, unless confirm: true.
List this tenant's declared tables, each with its current row count, plus the tenant's whole table-store byte usage.
Annotate a declared table or one of its columns -- the next describe merges this back in (an annotation's role wins over the inferred one; unit/description are added; hidden marks a column to omit from a summary). key must be one of role, unit, description, hidden.
List every declared table that has a computed semantic model, each with its version, staleness, row count and when it was last computed.
Run a single read-only SQL SELECT (CTEs allowed) against this tenant's own tables. Structurally rejected (not by string matching): anything but exactly one SELECT statement, a result over 1,000 rows, or a query running past 5 seconds -- each refusal names the rule or bound it hit.
Return one table's columns, types, row count and byte count, without running a query -- how an agent discovers its own table shape.
Return a unified diff between two published versions of one of this tenant's tools.
List every published version of one of this tenant's tools, newest first, each with its creation time, source_sha256, and whether it's the current one.
List this tenant's published tools.
Return the most recent log lines for one of this tenant's tools.
Remove a published tool by its local name.
Make an earlier published version of one of this tenant's tools current again -- the next host.tool_call (or namespaced call) runs that version's source. See host.tool_history for the valid version numbers.
Debug-run a published python tool: result.payload plus duration_ms and exit_code; for the other cases see host.quickstart.
Read a shared tool's kind and redacted spec -- only works when the owner shared it with expose_spec: true. The spec never carries env values or secret references (see host.tool_share's expose_spec).
Take a shared tool back to private.
Run a schedule once right now, for testing -- recorded as trigger: "schedule" with manual: true, independent of next_unix or pause state.
Read one trigger's current schedule, next_unix, last_run_id and last_status.
List this tenant's triggers (optionally filtered by tool), each with next_unix, last_run_id and last_status (schedule), url/verify/unverified (event), or url/name/verify with no secret (webhook).
Stop a trigger from firing until resumed; still counts toward schedules_max.
Delete a trigger outright (frees its schedules_max slot, unlike pause).
Re-run a past event- or message-triggered run's exact stored event/envelope (no re-verification -- the original delivery already passed it). The new run's trigger_ref names the original run id. For a webhook trigger, pass id (the trigger) and row_id (an inbox_<name> row id, e.g. from POST /hook/...'s own response or host.state.query) instead of run_id -- a paused delivery has no run to replay from.
Re-enable a paused trigger; if its scheduled time already passed, the next tick fires it once (a missed firing is never replayed).
Run a published tool on a cron schedule (5-field: minute hour day-of-month month day-of-week, UTC), give it a public webhook URL (kind="event"): a signed POST to that URL runs the tool with the event as its argument, fire it whenever this tenant receives a message (kind="message"): the tool runs with the message envelope as its argument, or give it an inbound-inbox URL (kind="webhook"): a verified POST lands as a row in state table inbox_<name> and fires the tool with that row as its argument -- the response carries {url, secret} once (host.trigger.get afterwards never returns the secret agai…
Dry-run an event trigger's verify config against a payload you supply, without exposing its real URL -- verifies the signature exactly as POST /hooks/... would, then runs the tool with the event as its argument. On a message trigger, runs the tool with a synthetic envelope (test: true, no messages row created). On a webhook trigger, builds and self-signs a synthetic body exactly like a real sender would, then stores and fires it through the same path POST /hook/... uses (one inbox row, one run). The run is marked test: true. A wrong signature fails signature_invalid, naming the header it chec…
Calls, errors and duration percentiles for this tenant over a window. Pass `by` ("tool", "caller", or "end_user") for a breakdown instead of the plain per-tenant summary: "caller" (only valid for a tool this tenant has shared) shows which tenant called in and how much; "end_user" shows which identified end user called, with the caller tenant folded into the key when the call crossed tenants. Breakdown rows cap at 1000 per page; pass the returned `cursor` back to page further.
Mint a one-time browser link (valid 15 min) for an end user to authorize a registered upstream OAuth provider; completing it stores their access and refresh tokens, encrypted, in the host.
Revoke an end user's stored upstream token for a provider. The next call needing it returns upstream_not_connected with a fresh host.vault.connect_link URL.
Delete a registered upstream OAuth provider and revoke every end user's stored token for it; a disconnected end user's host.vault.status then shows connected: false.
Register or update a tenant's upstream OAuth provider (e.g. "slack") so end users can connect it; client_secret is stored encrypted and never returned by host.vault.providers. Per-plan vault_providers_max caps distinct provider names.
List this tenant's registered upstream OAuth providers (auth_url, token_url, client_id, scopes) -- client_secret never appears here.
Show which upstream providers an end user has connected, with connected, expires_at, and scopes per provider -- never the token itself.
Mint a one-time browser link (valid 15 min) for an end user to authorize a registered upstream OAuth provider; completing it stores their access and refresh tokens, encrypted, in the host.
Revoke an end user's stored upstream token for a provider. The next call needing it returns upstream_not_connected with a fresh host.vault.connect_link URL.
Delete a registered upstream OAuth provider and revoke every end user's stored token for it; a disconnected end user's host.vault.status then shows connected: false.
Register or update a tenant's upstream OAuth provider (e.g. "slack") so end users can connect it; client_secret is stored encrypted and never returned by host.vault.providers. Per-plan vault_providers_max caps distinct provider names.
List this tenant's registered upstream OAuth providers (auth_url, token_url, client_id, scopes) -- client_secret never appears here.
Show which upstream providers an end user has connected, with connected, expires_at, and scopes per provider -- never the token itself.
⟨44 unchanged words⟩ default 5.","type":"integer"},"mode":{"description":"\"auto\" (default), \"lexical\", \"embeddings\", or \"hybrid\". \"embeddings\"/\"hybrid\" without a configured provider is a validation error.","type":"string"},"query":{"description":"Search query text.", ⟨78 unchanged words⟩
List everything a node depends on (upstream) and everything that depends on it (downstream). A downstream list over 100 nodes comes back as downstream_count plus a downstream_handle to page through with host.lineage.trace_page.
Page through a host.lineage.trace downstream_handle, 50 nodes at a time.
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨24 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨20 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨16 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨17 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨78 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨58 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨41 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨11 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨22 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨22 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨28 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨26 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨56 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨33 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨33 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨29 unchanged words⟩
⟨59 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨57 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨53 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨76 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨15 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨56 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨46 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨57 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨22 unchanged words⟩
⟨15 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨8 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨15 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨15 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨21 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨14 unchanged words⟩
⟨48 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨15 unchanged words⟩
⟨39 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨97 unchanged words⟩
⟨24 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨13 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨16 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨27 unchanged words⟩
⟨14 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨7 unchanged words⟩
⟨15 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨19 unchanged words⟩
⟨14 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨14 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨39 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨7 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨27 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨112 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨7 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨25 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨10 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨60 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨7 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨44 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨40 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨12 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨11 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨11 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨34 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨24 unchanged words⟩
⟨24 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨17 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨12 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨42 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨14 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨18 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨24 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨17 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨16 unchanged words⟩
⟨49 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨49 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨20 unchanged words⟩
⟨49 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨66 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨60 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨71 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨30 unchanged words⟩
⟨49 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨15 unchanged words⟩
⟨55 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨18 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨32 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨42 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨18 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨36 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨12 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨19 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨49 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨30 unchanged words⟩
⟨19 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨15 unchanged words⟩
⟨11 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨29 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨138 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨7 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨14 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨18 unchanged words⟩
⟨28 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨61 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨16 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨21 unchanged words⟩
⟨27 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨6 unchanged words⟩
⟨13 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨14 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨45 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨9 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨167 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨89 unchanged words⟩
⟨78 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨5 unchanged words⟩
⟨45 unchanged words⟩ ":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨50 unchanged words⟩
{"properties":{"tenant_key":{"description":"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. Required only when this connection carries no Authorization: Bearer header and never ran signup -- when both a header and this argument are present, the header wins. Omitting it on such a connectionwith no headerreturns tenant_key_missing (-32602).","type":" ⟨4 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨39 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨35 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨31 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨32 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨93 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨73 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨56 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨26 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨37 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨37 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨43 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨41 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨71 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨48 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨48 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"text":{ ⟨27 unchanged words⟩
⟨74 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨72 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨68 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨91 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨30 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨71 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨61 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨72 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tools":{ ⟨20 unchanged words⟩
⟨30 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨23 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨30 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨30 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨36 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"unread_only":{ ⟨12 unchanged words⟩
⟨63 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"thread_id":{ ⟨13 unchanged words⟩
⟨54 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"thread_id":{ ⟨95 unchanged words⟩
⟨39 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"thread_id":{ ⟨11 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨31 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"timeout_s":{ ⟨25 unchanged words⟩
⟨29 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"until":{ ⟨5 unchanged words⟩
⟨30 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"until":{ ⟨17 unchanged words⟩
⟨29 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨29 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨54 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨5 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨42 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨127 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨5 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨40 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨25 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨75 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨5 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨59 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨34 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨27 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨26 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨26 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨49 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨22 unchanged words⟩
⟨39 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨32 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨27 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"timeout_s":{ ⟨40 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨29 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"value":{ ⟨16 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨39 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨15 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨14 unchanged words⟩
⟨64 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨64 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"where":{ ⟨18 unchanged words⟩
⟨64 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨81 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨75 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨86 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"where":{ ⟨28 unchanged words⟩
⟨64 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"value":{ ⟨13 unchanged words⟩
⟨70 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨33 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨47 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨57 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨33 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨51 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"value":{ ⟨10 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨34 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨64 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"version":{ ⟨28 unchanged words⟩
⟨34 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"to":{ ⟨13 unchanged words⟩
⟨26 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨44 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨107 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨5 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨29 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"version":{ ⟨16 unchanged words⟩
⟨43 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨76 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"visibility":{ ⟨14 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨19 unchanged words⟩
⟨42 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨4 unchanged words⟩
⟨28 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨12 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨60 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
⟨24 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨182 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨87 unchanged words⟩
⟨93 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨3 unchanged words⟩
⟨60 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"},"tool":{ ⟨48 unchanged words⟩
⟨17 unchanged words⟩ -- when both are present, the header wins. Omitting it on a connection with no header returns tenant_key_missing (-32602).","type":"string"}},"required": ⟨2 unchanged words⟩
List this tenant's trusted identity-assertion issuers with their jwks_url, client_id and audience.
Read a shared tool's kind and redacted spec -- only works when the owner shared it with expose_spec: true. The spec never carries env values or secret references (see host.tool_share's expose_spec).
This tenant's registered OIDC identity provider (issuer, client_id, endpoints, scopes, flags) -- null if none is set. Never carries the client secret.
Remove this tenant's OIDC identity provider: every federated grant it produced is revoked immediately, and the per-tenant resource falls back to key/claim (owner) login.
Register (or update) this tenant's own OIDC identity provider: end users who connect to this tenant's per-tenant resource log in through it. Fetches the issuer's discovery document once (https only) and stores authorization_endpoint, token_endpoint, and jwks_uri. client_secret is encrypted at rest and never shown again.
Declare (or update) one scope this tenant's tools may require: name (a catalogued name, or the built-ins read/write) and a human-readable description shown on the OAuth consent page. Up to 32 catalog entries per tenant.
List this tenant's own scope catalog: name and description.
List clients awaiting approval under this tenant's clients: approve policy.
This tenant's current hosted-authorization-server client and session policy (host.oauth.policy_set's own field shape); the documented defaults for a tenant that has never called host.oauth.policy_set.
Set this tenant's hosted-authorization-server client and session policy. Every field is optional and, when omitted, keeps its current (or default) value: clients (any|allowlist|approve, default any), allowlist (client_id or CIMD-host strings, for allowlist mode), access_ttl_s (300..3600, default 3600), refresh_ttl_s (3600..2592000, default 2592000), max_grant_age_s (a refresh past this many seconds since consent fails invalid_grant/grant_expired; null clears it), reconsent_after_s (a refresh past this many seconds since consent fails invalid_grant/reconsent_required and the next authorize sho…
Revoke every one of this tenant's live grants, refresh tokens and pending clients at once: access tokens fail within 60s.
One end user's calls (tool, outcome, run_id, impersonated) merged with its revoke/unrevoke/purge control-plane events, newest first, paged by cursor.
Export one end user's state rows and call history as a bundle at /exports/<run_id>, the same envelope host.export returns (download_url, size_bytes, expires_unix).
One end user's roster row (subject, issuer, first_seen, last_seen, calls_total, revoked_at, revoked_by, purged_at) plus its live state_rows, vault_connections, and runs_30d counts.
List this tenant's end users with last-seen and call counts, newest last-seen first. Optional since (unix seconds, filters last_seen), revoked (bool), limit (default 50, max 1000), and cursor (from a previous page's cursor field).
Delete a revoked end user's scoped state and vault-token rows, de-identify its calls rows (kept, never deleted), and set purged_at. Requires the end user to be revoked first (revoke_required otherwise). Returns {state_rows, vault_tokens} counts.
Revoke an end user: its next identified call is refused with end_user_revoked, no tool runs, and its vault-token connections are disconnected.
Reverse a prior host.enduser.revoke; the end user's calls succeed again.
Revoke one hosted-authorization-server grant by id (from host.oauth.grants): its access tokens fail within 60s and its refresh tokens stop rotating.
List the OAuth clients currently connected to this tenant through mcphost's own hosted authorization server (host.oauth.issuer_set is for a tenant's own bring-your-own issuer instead): each grant's client_name, method (cimd|dcr), resource, created_at and last_used_at.
Calls, errors and duration percentiles for this tenant over a window. Pass `by` ("tool", "caller", or "end_user") for a breakdown instead of the plain per-tenant summary: "caller" (only valid for a tool this tenant has shared) shows which tenant called in and how much; "end_user" shows which identified end user called, with the caller tenant folded into the key when the call crossed tenants. Breakdown rows cap at 1000 per page; pass the returned `cursor` back to page further.{"properties":{"by":{"description":"\"tool\", \"caller\", or \"end_user\" -- omit for the plain per-tenant summary.","type":"string"},"cursor":{"description":"Resume a breakdown after this page's last key.","type":"string"},"limit":{"description":"Max breakdown rows per page (1-1000, default 1000).","type":"integer"},"tenant_key":{"description":"The key `signup` returned. ⟨16 unchanged words⟩ header wins.","type":"string"},"tool":{"description":"Scope the breakdown to one local tool name. Required when by is \"caller\".","type":"string"},"window":{"description":"Time window to summarize, e.g. \"24h\"/\"1d\"/\"7d\"/\"30d\"; default24h.24h (\"1d\" when `by` is given).","type":"string"}},"required": ⟨2 unchanged words⟩
Report (or merge in) counters and/or pct/msg on a run, by id. Each named counter (items_processed, items_total, bytes_out, custom.<k>) is monotonic on its own -- a lower value than what's already stored fails validation with nothing written. Read back via host.runs.get/wait/list's counters field.
Read part n of a run's result (host.runs.get/wait inline only part 0). A run whose whole result fit inline reads back parts: 1, n: 0 with the full result. n past the last part fails with not_found.
Cap how many successful calls a caller tenant may make per UTC day into one of this tenant's shared tools. The tool must already be shared. Exceeding the cap fails the call with quota_caller (never runs it); this tenant's own calls to the tool are unaffected.
Remove a caller_limit set by host.share.caller_limit.
before
—after
Delete one key from this tenant's key-value state namespace.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"key":{"description":"Key to delete from this tenant's key-value state namespace.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"}},"required":["key"],"type":"object"}before
—after
Delete rows from a declared table matching an optional where filter (same grammar as host.state.query); omitting where deletes every row in the table.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"table":{"description":"Name of the declared table to delete rows from.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"},"where":{"description":"Optional filter, same grammar as host.state.query; omit to delete every row.","type":"string"}},"required":["table"],"type":"object"}before
—after
Read one key from this tenant's key-value state namespace. Returns found: false (not an error) if the key was never set.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"key":{"description":"Key to read from this tenant's key-value state namespace.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"}},"required":["key"],"type":"object"}before
—after
Insert one row (an object) or several (an array of objects) into a declared table. Each row is validated against the table's schema first -- a type mismatch fails the whole call with state_schema_violation and writes nothing.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"rows":{"description":"One row (an object) or several (an array of objects), each validated against the table's schema."},"table":{"description":"Name of the declared table to insert into.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"}},"required":["table","rows"],"type":"object"}before
—after
List keys (with their current values) in this tenant's key-value state namespace, optionally filtered by prefix.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"limit":{"description":"Max keys to return; default 100.","type":"integer"},"prefix":{"description":"Only list keys starting with this prefix; default: all keys.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"}},"required":[],"type":"object"}before
—after
Read rows from a declared table, optionally filtered (where: "field op value", ops = != < <= > >=, clauses joined by ' and '), ordered (order_by: "field" or "field desc") and capped (limit).before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"limit":{"description":"Max rows to return; optional.","type":"integer"},"order_by":{"description":"Optional \"field\" or \"field desc\" to sort by.","type":"string"},"table":{"description":"Name of the declared table to read from.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"},"where":{"description":"Optional filter, e.g. \"age > 21\"; ops are != < <= > >=, clauses joined by ' and '.","type":"string"}},"required":["table"],"type":"object"}before
—after
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.before
—after
{"properties":{"end_user":{"description":"\"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.","type":["string","null"]},"key":{"description":"Key to write in this tenant's key-value state namespace.","type":"string"},"tenant_key":{"description":"The key `signup` returned. Required only when this connection carries no Authorization: Bearer header -- when both are present, the header wins.","type":"string"},"value":{"description":"Any JSON value to store under key."}},"required":["key","value"],"type":"object"}Configure this tenant's search index provider. provider: "none" (lexical only, the default) or "openai-compatible" (endpoint, model, and secret -- a tenant secret name used as the embeddings request's bearer -- all required). Changing config re-indexes every document from scratch in the background.
Force this tenant's search index to re-chunk (and re-embed, if a provider is configured) one document (document_id) or, without document_id, every document, on the indexer's next tick.
Ranked passage search over this tenant's document store. Lexical (BM25) by default; embeddings mode (set via host.docs.index_config) ranks by cosine and falls back to lexical (index.mode: "lexical-fallback") if the provider call fails. Returns [{document_id, name, version, chunk_no, offset, text, score}] plus an index block naming the mode and how stale the index is.
Generate and store a new per-tenant secret for signing end_user_assertion (HS256 compact JWS, claims sub/iat/exp with exp <= iat + 3600). Returns the secret once; it is never shown again and never appears in host.secret_list. Assertions signed with any prior secret stop verifying immediately -- no overlap window.
The end user (if any) this call itself carries: {subject, issuer, method, verified_at} from the OAuth bearer's sub/iss or a verified end_user_assertion; null when the call carries no verified end-user identity.
Definition not stored.
Definition not stored.
Definition not stored.
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.
Definition not stored.