Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 62 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Server Listing
mcphost
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 18 tools

Disambiguation4/5

Most tools target clearly distinct operations (state.get/list/set, feedback.list/send, help.get/search, tool_publish/call/test/share). The closest pairs are host.tool_call vs host.tool_test (real vs dry-run) and host.quickstart vs host.tool_publish, but descriptions explicitly differentiate them. Minor residual ambiguity only.

Naming Consistency3/5

Names use a namespace prefix (host.*, billing.*) which is largely consistent, but the segment style is mixed: dotted hierarchy in host.state.get/host.tool_* uses underscores (host.tool_call, host.tool_publish) while others use dots, and billing.plans is a bare noun. Other names are single tokens (signup, host.whoami, host.resume). Readable but not a single predictable pattern.

Tool Count4/5

18 tools for a multi-domain host (state, tools, billing, help, feedback, auth) is reasonable and each appears to earn its place. Slightly on the heavy side but well within scope.

Completeness3/5

Core lifecycle is covered (signup/redeem/whoami, state get/list/set, tool publish/call/test/share, help, feedback), but there is no state.delete and, more seriously, host.resume references tools that do not exist in this surface (host.tool.list, host.runs.list, host.runs.get/wait, host.note.list, host.changelog), creating dead ends for agents following its guidance.

Available Tools

18 tools
billing.plansBInspect

The plan catalog (price and quotas per plan) and whether Stripe billing is configured on this host. Anonymous callers get the same answer as tenants.

NameRequiredDescriptionDefault
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
plansYes
billing_modeYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses one access fact (anonymous callers get the same answer as tenants) but says nothing about whether the call is read-only or side-effect free. Per the schema, omitting tenant_key can implicitly create a brand-new tenant -- a material side effect the description never surfaces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the primary return content followed by the secondary billing-configuration fact. No filler, though the second sentence could be folded in.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the single parameter is fully documented. The description covers what is returned and the auth-invariance behavior, leaving only side-effect disclosure as a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so tenant_key's full semantics (signup binding, header precedence, implicit signup) are already documented in the schema. The description adds nothing about the parameter, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource and its contents -- the plan catalog with price and quotas per plan -- plus a configuration fact (Stripe billing configured on this host). A reader knows exactly what comes back. It does not name or contrast with any sibling, but the subject matter is distinct from the host.* and signup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers it should call this to discover plans and billing availability. There is no explicit when-to-use, when-not-to-use, or alternative named, though the note that anonymous callers get the same answer subtly signals no auth prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.errorsAInspect

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.

NameRequiredDescriptionDefault
codeNoAn error code, e.g. tool_exception. Omit to list every code.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
codeNo
classNo
codesNo
familyNo
remedyNo
classesNo
versionNo
help_urlNo
retryableNo
docs_anchorNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares read-only, anonymous, no tenant data, and the return fields, plus the edge-case behavior for a misspelt code (tool_not_found with did_you_mean). It stops short of stating rate limits or auth mechanics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense but well-ordered paragraph that front-loads the main purpose and return shape before the filtering and edge-case details. Every clause earns its place, though the field list is fairly long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be re-explained, and the description still tells the agent the two invocation modes and the failure behavior. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description adds only the filtering behavior of code; it says nothing extra about tenant_key, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'List every error code this host can return', with the exact payload shape enumerated. It is clearly distinguishable from siblings like host.help.search, which deal with documentation rather than error codes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two modes: omit code to list everything, pass code to get one row, and even covers the misspelling case. It gives clear context but never names an alternative tool or states when another sibling would be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.feedback.listAInspect

List your own feedback (newest first, status received). Anonymous callers get [].

NameRequiredDescriptionDefault
limitNoMax rows, up to 100; default 20.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
noteNo
countYes
feedbackYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose non-obvious traits: results are newest-first, only status "received" is returned, and anonymous callers get an empty list. It is silent on auth mechanics, but those are handled thoroughly in the tenant_key schema description rather than here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence, front-loaded with the action, and each parenthetical carries a distinct, useful fact. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with an output schema (so return values need no explanation) and full schema coverage, the description supplies scope, ordering, status filtering, and the anonymous edge case. It is essentially complete, though it could note that the tool is read-only and non-paginated beyond limit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already fully documents limit and tenant_key (including the elaborate binding/auth semantics). The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List your own feedback") plus scope ("your own") and filter conditions, which is enough to distinguish it from the write-oriented sibling host.feedback.send. It never names that sibling explicitly, so differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "your own feedback" scoping and the anonymous-caller note imply who should call it and what they get, but there is no explicit when-to-use guidance and no named alternative for broader feedback retrieval. Usage is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.feedback.sendAInspect

Tell the host's humans what you needed: kind, up to 2048 bytes of text, optional context. Works before signup. Returns feedback_id.

NameRequiredDescriptionDefault
kindYesWhat you are telling the host.
textYesWhat you needed or saw; 1 to 2048 bytes after trim.
contextNoOptional, at most 1 KB: tool, error_code, free.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
kindYes
feedback_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add real behavioral facts: it is available prior to signup and returns a feedback_id. What it omits is the side effect documented in the schema that omitting tenant_key implicitly signs the caller up as a new tenant, plus any rate or dedupe behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero padding; the core action and the key constraint (works before signup) are front-loaded. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A four-parameter tool with a nested context object and an output schema; the return value need not be explained, and the schema covers tenant_key. Still, the description never flags the implicit tenant-creation side effect of omitting tenant_key, which is the single most consequential behavior an agent should know before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all four parameters in depth, including the nuanced tenant_key binding rules. The description restates the 2048-byte bound and that context is optional but adds nothing beyond the schema, and never mentions tenant_key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: telling "the host's humans" something, i.e. submitting feedback, with the expected inputs named. It distinguishes itself implicitly from the read-side sibling host.feedback.list by being the send path, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Works before signup" is a useful precondition for when this can be called, but there is no explicit when-to-use guidance, no direction on choosing among the kind enum values, and no reference to host.feedback.list or signup as alternatives. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.help.getAInspect

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.

NameRequiredDescriptionDefault
anchorYesA `<path>#<slug>` anchor, e.g. README.md#call-limits, as printed by 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.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
lineYes
pathYes
textYes
titleYes
anchorYes
exampleNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it declares the operation read-only, anonymous, and free of tenant data, caps output size, and discloses the error contract (anchor_not_found plus did_you_mean suggestions). It does not cover the implicit tenant signup behavior that the tenant_key parameter enables.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the return contract, then invocation, then safety and error behavior. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. The description supplies purpose, invocation rule, safety profile, size limit, and error contract, which is everything an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: exact-match semantics for the anchor string and the anchor_not_found/did_you_mean behavior for unknown values. The tenant_key parameter is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (return) and resource (the documentation section an anchor points at), plus scope details: text capped at 4 KB and the first fenced example. It is clearly distinguishable from host.help.search because it resolves an already-known anchor rather than searching for one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete invocation guidance ('Pass an anchor exactly as an error, hint or help entry printed it') and names where anchors come from (an error's `anchor`, a host.help.search hit). It stops short of an explicit when-not or a direct statement telling the agent to use host.help.search first to discover anchors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.help.searchAInspect

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.

NameRequiredDescriptionDefault
kNoHow many hits to return (default 3).
qYesWhat you are stuck on: a tool name, an error code or message, an import line.
kindNoOnly search the page of this registered kind (docs/kinds/<kind>.md).
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
hintNo
hitsYes
totalYes
index_versionYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses read-only, anonymous, no tenant data, a response size ceiling (<2 KB), default k=3, and what each hit contains. It does not cover auth header interplay or rate limits, but the schema's tenant_key note covers the former.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense but front-loaded block: purpose, then output shape, then usage guidance. Every clause earns its place, though the single long sentence is slightly harder to scan than two shorter ones.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is optional, yet the description still summarizes hit contents usefully. The 'anonymous, no tenant data' framing sits slightly apart from the schema's tenant_key signup behavior, but the schema resolves that nuance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents q, k, kind, and tenant_key in detail. The description reinforces q's intent ('the error text or import line you are stuck on') and the k default, but adds no format or syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search this host's own documentation and tool descriptions') and immediately characterizes the output (up to k hits with snippet, nearest runnable example, anchor). The contrast with reading docs files directly makes its role distinct from siblings like host.help.get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use trigger -- 'call it with the error text or import line you are stuck on' -- and an ordering rule ('before reading any docs file'). It does not name the alternative tool (host.help.get) explicitly, so it falls short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.quickstartAInspect

Return the shortest ordered sequence of calls to a working tool of kind, with your namespace and a filled-in example already substituted in, plus the current limits and a try_before_call table naming the one dry-run tool for each case. Read-only -- this call alone never creates a tenant. Call this before host.tool_publish if you're not sure what a spec should look like. Unauthenticated callers get a worked example with no tenant data; any other host./billing. call creates a tenant on first use, no signup required.

NameRequiredDescriptionDefault
kindNoWhich registered kind to return a worked example for, e.g. echo, http, python -- or a job-word alias (webhook, event, cron, ...) for its recipe. Omit to see every kind, alias and recipe name.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.
retry_after_sNoSeconds a rate-limited signup said to wait; an error's next_call carries it back here. Informational, never required.

Output Schema

NameRequiredDescription
hintNo
kindNo
nextNo
kindsNo
stepsNo
verbsNo
limitsNo
recipeNo
aliasesNo
exampleNo
outcomeNo
recipesNo
verdictNo
contractNoThe asked kind's KindContract summary: the error families its failures carry and whether they carry data.source_line.
endpointNo
triggersNo
namespaceNo
next_stepsNo
sandbox_apiNo
alt_endpointNo
reachabilityNo
starter_toolNo
welcome_backNo
authenticatedNo
install_linksNo
resolved_fromNo
bridge_returnsNo
recipes_nearbyNo
install_doc_urlNo
try_before_callNo
host_steps_allowedNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it states the call is read-only and never creates a tenant, explains that unauthenticated callers get a worked example with no tenant data, and notes that any other host.*/billing.* call creates a tenant on first use. It does not cover error handling or rate limits on this call itself, but the key side-effect and auth nuances are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with what the tool returns, then read-only status, then usage guidance, and finally auth-related behavior. Every sentence adds value, though the first sentence is dense and could be slightly shorter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Schema coverage is 100% for parameters. Behavior and usage are well covered. The only missing elements are edge cases like invalid kind or specific error responses, which are minor for this help/quickstart tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters in detail. The description adds no additional syntax or meaning for kind, tenant_key, or retry_after_s beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Return) and a clear resource (shortest ordered sequence of calls to a working tool of `kind`, plus limits and a try_before_call table). It distinguishes itself from siblings by explicitly referencing host.tool_publish and the broader host.*/billing.* context, so an agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative (host.tool_publish) and the condition that selects this tool ('Call this before host.tool_publish if you're not sure what a spec should look like'). It also implicitly guides usage for unauthenticated callers versus other host.*/billing.* calls that create tenants. No inference needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.redeemAInspect

Exchange a signup(handoff: true) handoff_token for the tenant key it was issued for. Single-use: a second redemption fails with handoff_token_redeemed; past its expiry it fails with handoff_token_expired. Unauthenticated -- the token itself is the proof.

NameRequiredDescriptionDefault
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.
handoff_tokenYesThe handoff_token signup(handoff: true) returned.

Output Schema

NameRequiredDescription
keyYes
nextYes
usageYes
session_boundYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden: it declares unauthenticated operation, single-use redemption, the handoff_token_redeemed failure code on second use, the handoff_token_expired failure code past expiry, and that the token itself is the proof. This is rich behavioral disclosure well beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with purpose and followed by the critical lifecycle and failure semantics. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no annotations and an output schema, the description supplies the needed auth, lifecycle, and failure context. Return values are covered by the output schema, and tenant_key nuances are covered by the schema description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no parameter syntax, format, or constraint detail beyond what the schema already documents for handoff_token and tenant_key. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Exchange) and resource (signup(handoff: true) handoff_token for the tenant key), making the operation distinct from the sibling signup tool. The relation to signup's handoff mode identifies the exact input and outcome without requiring the schema to be opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly triggers on a handoff_token returned by signup(handoff: true) and gives failure conditions for redeeming it again or after expiry. It does not explicitly compare to alternatives such as host.resume or host.whoami, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.resumeAInspect

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.

NameRequiredDescriptionDefault
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
hostNo
notesNo
toolsNo
tenantNo
last_seenNo
next_callYes
runs_openNo
truncatedNo
onboardingNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden and does so well: it discloses the 4096-byte cap, the truncation contract via 'truncated', that the operation is read-only, and the unauthenticated path (onboarding block, no tenant created). Auth/binding nuance is further handled in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the payoff (what you get in one call), then truncation handling, then safety/auth notes. Dense but every clause carries information; the parenthetical enumerations make it slightly run-on but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, yet the description still frames the return shape and the truncation escape hatch, plus auth behavior. For a resumption/orchestration tool with one optional param, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the tenant_key schema text already explains binding, signup, header precedence, and implicit signup. The description adds no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Resume where you left off') and enumerates exactly what comes back: tools with last call status, unfinished runs, newest notes, host changelog, and a suggested next_call. It distinguishes itself from siblings by naming the per-section tools (host.tool.list, host.runs.list, host.note.list, host.changelog) an agent would use instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for when to use it (to resume in one call) and explicit routing to the section-specific tools when output is truncated. It doesn't explicitly contrast with host.state.get or host.state.list, which are the closest-looking siblings, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.state.getAInspect

Read one key from this tenant's key-value state namespace. Returns found: false (not an error) if the key was never set.

NameRequiredDescriptionDefault
keyYesKey to read from this tenant's key-value state namespace.
end_userNo"self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
keyYes
foundYes
valueYes
impersonatedNo
updated_unixNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose one genuinely useful trait — a missing key returns found:false rather than an error — but says nothing about permissions, tenant binding requirements, or what happens when an implicit tenant is created, all of which are behaviors an agent would want surfaced at this level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the core operation is front-loaded ahead of the not-found caveat. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the parameter semantics are fully documented in the schema. The description is nearly complete for a simple getter, though it does not touch the non-obvious tenant-binding/implicit-signup implications that an agent could otherwise miss.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed prose for tenant_key and end_user, so the schema already does the heavy lifting. The description adds only the namespace-scoping phrase, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Read") and resource ("one key from this tenant's key-value state namespace"), which is enough to separate it from host.state.list (many keys) and host.state.set (write). It does not explicitly name those siblings, so it stops short of the 5 benchmark, but the scope word "one" conveys the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the read-one-key framing and the not-found behavior signals when this is the correct call, but there is no explicit when/when-not guidance or naming of alternatives such as host.state.list or host.state.set. Adequate minimum, with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.state.listBInspect

List keys (with their current values) in this tenant's key-value state namespace, optionally filtered by prefix.

NameRequiredDescriptionDefault
limitNoMax keys to return; default 100.
prefixNoOnly list keys starting with this prefix; default: all keys.
end_userNo"self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
dataNo
keysYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose that current values are returned (not just keys) and that results can be narrowed by prefix, and 'List' implies a read operation, but it says nothing about permissions, rate limits, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and its scope lead, with the optional filter trailing. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 100%-covered schema and an output schema that documents return values, the description need not explain formats or fields. It is adequate, though it omits any mention of the implicit tenant-binding/signup side effects that the tenant_key schema documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, prefix, end_user and tenant_key are already fully documented in the schema. The description only restates the optional prefix filter and adds no syntax or semantics beyond what the schema provides, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List), resource (keys in this tenant's key-value state namespace) and scope (this tenant's, optional prefix filter), plus the useful detail that values are returned alongside keys. It does not explicitly differentiate from the sibling host.state.get/host.state.set, but the name and scope make the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the prefix filter is optional but gives no when-to-use guidance, no conditions for choosing this over host.state.get, and no prerequisites. Usage must be inferred from the name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.state.setAInspect

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.

NameRequiredDescriptionDefault
keyYesKey to write in this tenant's key-value state namespace.
valueYesAny JSON value to store under key.
dry_runNoreturn the diff this call would make and commit nothing
end_userNo"self" for the caller's own verified end-user identity, an explicit subject (only when this call carries no end-user identity of its own), or omit/null for the tenant-wide value.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
keyNo
setNo
bytes_deltaNo
impersonatedNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It helpfully discloses quota-failure behavior ('state_quota_exceeded' and 'writes nothing'), but it does not say whether writing an existing key overwrites its prior value, whether the write is atomic/idempotent, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and followed by the most important failure mode. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and fully described input schema mean return values and parameter details need not be in the description. The description covers purpose and a key failure mode, though it omits overwrite semantics that matter for a mutation tool with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents key, value, dry_run, end_user, and tenant_key semantics. The description adds no parameter-level meaning beyond repeating that the value may be any JSON value; baseline 3 applies when the schema does this much work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Write') and resource ('one key in this tenant's key-value state namespace'), and implicitly distinguishes itself from read-oriented siblings like host.state.get and host.state.list. The value-type and quota clauses add useful scope without obscuring the core action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool versus alternatives such as host.state.get, host.state.list, or dry-run mode. It gives no when-not-to-use guidance, leaving the agent to infer usage from the write verb and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.tool_callAInspect

Invoke a tool this tenant has already published, by its local name -- the same real, metered call as calling it directly by its namespaced name (.), for a session that has no way to see its own namespaced tool name yet. Unlike host.tool_test, this counts toward host.usage and appears in host.tool_logs. Pass async: true for a tool that needs more than the call deadline: returns {run_id, status: "queued"} immediately instead of running inline -- see host.runs.get/wait. Pass version to pin the call to one of host.tool_history's versions instead of whichever is current.

NameRequiredDescriptionDefault
argsNoArguments to pass, validated against the tool's own args_schema.
nameYesLocal name of the tool to invoke.
asyncNoRun as a job instead of inline: returns {run_id, status} within ~50ms under the plan's job_max_s deadline; default false.
budgetNoLowers this call's budget below the plan default: any subset of max_child_calls, max_est_tokens, max_tool_latency_ms, max_wall_ms. A value above the plan's own ceiling is a validation error naming it; see host.runs.get's progress.budget.
dry_runNoAsk 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.
versionNoPin the call to this version instead of whichever is current; see host.tool_history. An unknown version is an argument error.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
dataNo
stateNo
resultNo
call_idNo
dry_runNo
verdictNo
stale_testNo
client_toolNo
forwarded_toNo
tested_versionNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses that this is a real metered call that counts toward host.usage and appears in host.tool_logs, describes the async return shape {run_id, status}, and notes that an unknown version is an argument error. It omits behavioral detail on budget refusal and tenant_key side effects, which are only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A dense but well-structured paragraph that front-loads the core purpose and equivalence to namespaced invocation before elaborating options. Every sentence adds some value, though a few clauses on async/version duplicate schema content and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 7-param tool with nested budget and an output schema, the description covers the essential invocation semantics, metering, and async/version behavior without needing to explain return values (output schema exists). The one gap is that dry_run, budget, and tenant_key semantics are left entirely to the schema, but overall it is complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters thoroughly (including nested budget fields). The description's notes on async and version largely restate what the schema says, adding only the local-vs-namespaced name framing. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Invoke") and resource ("a tool this tenant has already published, by its local name") and explicitly equates it to calling by namespaced name, so the agent understands the exact operation. It also names the sibling host.tool_test as the contrasting tool, making it distinguishable without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear condition for use ("for a session that has no way to see its own namespaced tool name yet") and an explicit contrast with host.tool_test (which does not meter). It also routes long-running calls to async mode and version pinning to host.tool_history. It does not cover the dry_run/host.estimate alternative, leaving one notable gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.tool_publishAInspect

Publish a tool of a registered kind (e.g. python, http or echo; the kind argument's enum lists them all) under this tenant's namespace. Call host.quickstart(kind) first for a filled-in example spec and the full publish-to-call sequence. Python's sandbox API: import mcphost (mcphost.table, mcphost.state, mcphost.docs). Name must match ^[a-z][a-z0-9_]{1,40}$; a rejection names the failing field and a corrected example. Try host.tool_test before a real call.

NameRequiredDescriptionDefault
kindYesWhich registered kind to publish under: one of this field's `enum` (host.quickstart with no kind lists every kind, alias and recipe). A job-word alias in the enum also resolves here -- webhook-style words for an inbound webhook, cron-style words for a timed run -- both resolve to kind http and the descriptor comes back with resolved_from naming the alias you asked for. Error contract per kind: chain (families: compose, tool_state; source_line: no); echo (families: none; source_line: no); http (families: upstream; source_line: no); jq (families: tool_code, tool_limit; source_line: no); js (families: tool_code, tool_limit, upstream, compose, tool_state; source_line: yes); python (families: tool_code, tool_limit, upstream, compose, tool_state; source_line: yes); wasm (families: tool_code, tool_limit; source_line: no).
nameYesLocal name for the new tool; must match ^[a-z][a-z0-9_]{1,40}$.
specYesThe kind-specific spec object; see host.quickstart(kind) for a filled-in example. For python's network field: "none" (every plan), "public" (requires the pro plan), "egress" (requires the pro plan) -- a tool's own code reaches this tenant's data with `import mcphost` (mcphost.table, mcphost.state, mcphost.docs, mcphost.lineage) even when network is "none".
tagsNoCatalog tags: at most 16, each 1-32 chars of a-z, 0-9 and '-', stored lower-case and deduped.
forceNoPublish a chain whose mapping can never resolve (verdict will_fail) anyway; the response's gates entry then carries forced: true. Default false.
scopesNoOAuth scopes a token must carry (directly, or via mcp) to reach this tool: catalogued names from host.oauth.scopes, or the built-ins read/write. At most 8. Omit (or [] ) to require only mcp -- unaffected by any catalog.
dry_runNoreturn the diff this call would make and commit nothing
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.
visibilityNoWho may find the tool (default private). unlisted: callable by full name and readable by host.catalog.get, never listed. public: listed in the catalog, and refused (untested_tool_cannot_be_public) unless the current version passes its dry run first. Use host.tool_share for group or url.

Output Schema

NameRequiredDescription
okNo
hintNo
kindNo
lockNo
nameNo
nextNo
gatesNo
stepsNo
reasonNo
verdictNo
versionNoThe tool's version after this publish (1 for a first publish).
evidenceNo
failuresNo
warningsNo
call_lineNoA 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.
tool_lintNoAdvisory publish-time lint findings for a python tool ([] when clean); a finding never blocks the publish.
onboardingNo
deprecationsNo
welcome_backNo
resolved_fromNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden. It usefully discloses the name regex, the rejection behavior (failing field plus corrected example), and Python's mcphost sandbox imports. However it never states what publishing does to an existing tool of the same name (overwrite vs conflict), nor the mutation/permission profile, which are the traits an agent most needs here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by prerequisites, then environment and error details, in four dense sentences with no filler. Every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation, and the schema fully documents the kind-specific spec shapes and error families. Combined with quickstart and tool_test pointers, the description is nearly complete; the one real gap is the republish/overwrite semantics of a mutating publish call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 9 parameters, so force, scopes, tags, dry_run, tenant_key and visibility are already well documented in the schema. The description adds only the kind examples and a Python sandbox note, both of which the schema also touches, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: publish a tool of a registered kind, scoped to the tenant namespace, and names the kind enum as the source of valid values. An agent can distinguish it from host.tool_test and host.tool_call purely from this sentence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing and alternatives: call host.quickstart(kind) first for an example spec and the publish-to-call sequence, and try host.tool_test before a real call. The condition that selects each sibling is stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.tool_shareAInspect

Share one of this tenant's published tools with everyone (visibility: "public") or with a named group this tenant owns (visibility: "group", group: ). The tool keeps running in this tenant's own sandbox with this tenant's own secrets; a caller reaches it as <this tenant's namespace>..

NameRequiredDescriptionDefault
nameYesLocal name of the tool to share.
tagsNoCatalog tags merged into the tool's existing ones (same rules as host.tool_publish).
groupNoRequired when visibility is "group"; must already exist (host.group.create).
scopesNoWhat the grantee may do: call, read_source, fork. Default ["call"] (["call","read_source"] with expose_spec: true). url shares allow only call.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.
visibilityYes"public" (needs a passing dry run of the current version), "unlisted", "group" or "url".
descriptionNoCatalog-facing blurb; shown by host.catalog.search/get.
expose_specNoDefault false. When true, any tenant this tool is shared with may call host.tool_spec_shared to read its (redacted) spec.
rate_per_hour_per_callerNoOptional cap (1..10000) on calls per hour from any one grantee.

Output Schema

NameRequiredDescription
urlNo
nameYes
nextNo
groupYes
visibilityYes
descriptionYes
expose_specYes
welcome_backNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden; it does disclose the key behavioral fact that the tool keeps running in this tenant's sandbox with this tenant's own secrets and is reached as <namespace>.<name>. That is genuinely useful context, but it omits auth/permission requirements, whether the share is idempotent or revocable, what happens to existing grants, and the rate-limiting/scope behavior that governs what a grantee can actually do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the recipient modes front-loaded and the hosting/namespace model following as necessary context. Every clause carries information an agent cannot get from the name alone.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but for a 9-parameter mutation tool with no annotations the description is thin: it never covers the unlisted/url visibilities, the scopes grant model, per-caller rate caps, or the fact that the definition is deprecated in favor of host.tool.share (2026-12-31). Adequate for the core share semantics, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; every parameter (tags, group, scopes, expose_spec, rate_per_hour_per_caller, tenant_key) is already documented in the schema. The description adds meaning only for visibility/group, leaving scopes and the exposure controls entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (share) and resource (one of this tenant's published tools) plus the two recipient modes, so the agent knows exactly what the call does. It implicitly depends on host.tool_publish having run first but never names that sibling or contrasts sharing with publishing/forking, so sibling differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the conditional for two modes: 'everyone (visibility: public)' vs 'a named group this tenant owns (visibility: group, group: <name>)', which is real routing guidance. However, it ignores the other two enum values the schema allows (unlisted, url) and offers no exclusions, prerequisites (public needs a passing dry run), or alternatives such as host.tool_publish or host.tool_call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.tool_testAInspect

Dry-run a published tool by name: verdict (pass/will_fail/unverifiable), writes rolled back (dry_run); see host.quickstart.

NameRequiredDescriptionDefault
argsNoArguments 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).
nameYesLocal name of the already-published tool to dry-run.
fixturesNoChain tools only: {"<step number or tool name>": <recorded result>}. A fixtured step executes nothing (no upstream call); later mappings resolve against it. host.runs.get(run_id, as_fixtures=true) exports a real run in this shape.
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
dataNo
stateNo
resultNo
call_idNo
dry_runYes
verdictNo
stale_testNo
client_toolNo
forwarded_toNo
tested_versionNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the key behavioral trait: writes are rolled back in dry_run. It also names the verdict states, which tells the agent what to inspect. It omits auth/tenant implications and what a failed verdict means in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core action front-loaded and no filler; the verdict enumeration and rollback note are packed efficiently. The quickstart pointer is short and actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema fully covers the four parameters including nested objects. The description covers the essential contract (dry-run, rollback, verdict); only the fixture/chaining story is left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; every parameter including args, fixtures and tenant_key is already documented in the schema. The description adds little beyond re-stating that the tool is selected 'by name'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Dry-run a published tool by name') plus the outcome vocabulary (pass/will_fail/unverifiable), which lets an agent distinguish it from the real-call sibling host.tool_call. It stops short of naming that sibling explicitly, so differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by 'Dry-run' and the pointer 'see host.quickstart'. There is no explicit statement of when to prefer this over host.tool_call, nor any exclusion such as 'cannot dry-run unpublished tools'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host.whoamiBInspect

Return the calling tenant's identity, including key_age_s and key_rotated_at for auditing credential hygiene.

NameRequiredDescriptionDefault
tenant_keyNoThe key `signup` returned. Optional on the connection that ran signup (or host.redeem): that connection is already bound to the tenant it created, so later calls on it need no tenant_key. On a connection with no Authorization: Bearer header and no prior signup, omitting it implicitly signs that connection up as a brand-new tenant and runs this call as it -- see host.whoami's source field. When both a header and this argument are present, the header wins.

Output Schema

NameRequiredDescription
keyNo
hintNo
nextNo
planNo
adminNo
linksNo
ownerNo
sourceNo
tenantNo
clientsNo
subjectNo
disabledNo
join_urlNo
resourceNo
claim_urlNo
client_idNo
key_age_sNo
namespaceNo
activationNo
created_atNo
invite_urlNo
onboardingNo
plan_sinceNo
auth_methodNo
client_nameNo
contract_shaYes
display_nameNo
metadata_urlNo
shared_toolsNo
source_classNo
welcome_backNo
client_versionNo
key_rotated_atNo
owner_verifiedNo
session_tenantNo
naming_rule_urlNo
contract_versionYes
admin_schema_versionNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it only restates the return content. It does not disclose the significant side effect documented in the schema — that omitting tenant_key on a connection with no Authorization header silently signs up a brand-new tenant — nor does it mention auth expectations or read-only status. The one behavioral fact an agent most needs is absent from the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the core action front-loaded and no filler. Every phrase (calling tenant, key_age_s, key_rotated_at) carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the single parameter is fully documented in the schema. The description supplies adequate purpose context for a 1-param read tool; only the behavioral side effect and auth model live solely in the schema, which is a minor completeness gap rather than a functional one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the tenant_key description is unusually thorough (header precedence, implicit signup, binding from signup/redeem). The tool description adds nothing about the parameter, so the schema does all the work — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Return the calling tenant's identity' with the additional scope of credential-hygiene fields. It is clearly distinct from mutation siblings like host.state.set or signup, but it never explicitly contrasts itself with the closest read siblings (host.state.get, host.resume), so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'for auditing credential hygiene' — an agent can infer this is a read of its own identity for key-age checks. However, there is no when-to-use/when-not guidance, no prerequisites, and no named alternative (e.g., vs host.state.get for tenant state), so the routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signupAInspect

Explicit signup, for a client that cannot keep a session across calls: create a tenant and receive a bearer key and namespace. Unauthenticated. Most clients never need this -- any other host./billing. call from a fresh connection creates a tenant implicitly and returns its own /u//mcp URL in the response's onboarding field. Recommended here: pass handoff: true to receive a short-lived, single-use handoff_token instead of the raw key -- redeem it once with host.redeem to get the key, so a transcript of this call and the redeem call, if it leaks, carries a dead credential. The raw-key path (handoff omitted) stays fully supported.

NameRequiredDescriptionDefault
nameYesdisplay name
sourceNoOptional 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.
handoffNoRecommended: true to receive a handoff_token (redeem via host.redeem) instead of the raw key. Default false (raw key, unchanged).

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares the call unauthenticated, explains that handoff_token is short-lived and single-use, and gives the security rationale (a leaked transcript carries a dead credential). It does not mention rate limits, tenant quotas, or what happens on duplicate names, so it is strong but not exhaustive for an unannotated mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the primary caveat in the first sentence, with no filler. The final sentence about the raw-key path staying supported is a useful but slightly padded reassurance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe returns, and it does: a bearer key plus namespace, or a handoff_token, plus the mention of the onboarding field on implicit creation. An agent has enough to call correctly and to decide between handoff modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to handoff: why it is recommended, that the token is single-use, and that it must be redeemed via host.redeem. The name and source parameters are left to the schema, which already documents them thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('create a tenant') plus what is returned ('bearer key and namespace'), and pins down the exact audience: a client that cannot keep a session across calls. It is clearly distinguished from the implicit-tenant behavior of sibling host.*/billing.* calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says most clients never need this and names the alternative path (any fresh host.*/billing.* call creates a tenant implicitly and returns /u/<secret>/mcp in the onboarding field). It also recommends the handoff:true variant and names host.redeem as the redemption step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedhost.state.set1 field changed
      • addedInput schema / properties / value / type
        Added value: +[
        +  "string",
        +  "number",
        +  "integer",
        +  "boolean",
        +  "array",
        +  "object",
        +  "null"
        +]
  2. 2 tool updates
    • Changedhost.feedback.send1 field changed
      • addedInput schema / properties / text / minLength
        Added value: +1
    • Changedhost.tool_share3 fields changed
      • addedInput schema / properties / rate_per_hour_per_caller / maximum
        Added value: +10000
      • addedInput schema / properties / rate_per_hour_per_caller / minimum
        Added value: +1
      • addedInput schema / properties / scopes / minItems
        Added value: +1
  3. 2 tool updates
    • Changedhost.tool_call47 fields changed
      • removedOutput schema / properties / args
        Removed value: -{
        -  "properties": {},
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / body
        Removed value: -{
        -  "properties": {
        -    "ok": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    },
        -    "pong": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / call_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / changed
        Removed value: -{
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / checked_at
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / columns
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / created
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / created_unix
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / dedupe_header
        Removed value: -{}
      • removedOutput schema / properties / doubled
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / dry_run
        Added value: +{}
      • removedOutput schema / properties / enabled
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / failed_steps
        Removed value: -{
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / headers
        Removed value: -{
        -  "properties": {
        -    "content-type": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / https_proxy
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / id
        Removed value: -{}
      • removedOutput schema / properties / kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / last_fired_unix
        Removed value: -{}
      • removedOutput schema / properties / last_run_id
        Removed value: -{}
      • removedOutput schema / properties / last_status
        Removed value: -{}
      • removedOutput schema / properties / msg
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / next
        Removed value: -{
        -  "properties": {
        -    "tool": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "why": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / next_unix
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / ok
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / onboarding
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / payload
        Removed value: -{
        -  "properties": {
        -    "ok": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    },
        -    "pong": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / preset
        Removed value: -{}
      • removedOutput schema / properties / rows
        Removed value: -{}
      • removedOutput schema / properties / run_id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / schedule
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / stale_test
        Added value: +{}
      • addedOutput schema / properties / state
        Added value: +{}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "type": [
        -    "string",
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / steps
        Removed value: -{
        -  "items": {
        -    "properties": {
        -      "result": {},
        -      "status": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "step": {
        -        "type": [
        -          "integer",
        -          "null"
        -        ]
        -      },
        -      "tool": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / tested_version
        Added value: +{}
      • removedOutput schema / properties / text
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / tool
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / tz
        Removed value: -{}
      • removedOutput schema / properties / unverified
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / url
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / v1
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / verdict
        Added value: +{}
      • removedOutput schema / properties / verify
        Removed value: -{
        -  "properties": {
        -    "allow_unverified": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    },
        -    "scheme": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / welcome_back
        Removed value: -{
        -  "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"
        -  ]
        -}
    • Changedhost.tool_test48 fields changed
      • removedOutput schema / properties / args
        Removed value: -{
        -  "properties": {},
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / call_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / chain_dry_run
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / changed
        Removed value: -{
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / client_tool
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / created
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / created_unix
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / data
        Added value: +{}
      • removedOutput schema / properties / detail
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / dry_run / properties
        Removed value: -{
        -  "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"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / dry_run / type
        Removed value: -"object"
      • removedOutput schema / properties / enabled
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / envelope
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / environment
        Removed value: -{
        -  "items": {
        -    "properties": {
        -      "kind": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "value": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / error
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / evidence
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / exception_class
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / failures
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / id
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / inputs_required
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / kind
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / last_fired_unix
        Removed value: -{}
      • removedOutput schema / properties / last_run_id
        Removed value: -{}
      • removedOutput schema / properties / last_status
        Removed value: -{}
      • removedOutput schema / properties / line
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / msg
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / name
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / next
        Removed value: -{
        -  "properties": {
        -    "tool": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / next_unix
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / ok
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / outer
        Removed value: -{
        -  "properties": {
        -    "tenant_key": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / payload
        Removed value: -{
        -  "properties": {
        -    "msg": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / reason
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / request
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / response
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / schedule
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / schema
        Removed value: -{
        -  "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"
        -  ]
        -}
      • removedOutput schema / properties / source_line
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / stale_test
        Added value: +{}
      • removedOutput schema / properties / state / properties
        Removed value: -{
        -  "keys": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": [
        -      "array",
        -      "null"
        -    ]
        -  },
        -  "reads": {
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "tables": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": [
        -      "array",
        -      "null"
        -    ]
        -  },
        -  "writes": {
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / state / type
        Removed value: -[
        -  "object",
        -  "null"
        -]
      • removedOutput schema / properties / steps
        Removed value: -{
        -  "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"
        -  ]
        -}
      • addedOutput schema / properties / tested_version
        Added value: +{}
      • removedOutput schema / properties / tool
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / tz
        Removed value: -{}
      • removedOutput schema / properties / verdict / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • removedOutput schema / properties / warnings
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": [
        -    "array",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / welcome_back
        Removed value: -{
        -  "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"
        -  ]
        -}

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources