Cromanion
Server Details
Raise conversion on a site you manage. No API key, no human to wake — you prove the domain.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Each tool maps to a distinct resource or action—state reads (config, pending, grants, site_status), mutations (set_*, add_goal, decide), and lifecycle steps (open_claim, verify_claim, claim_domain) are clearly separated by detailed descriptions. Even similar-sounding tools like install_check vs site_status are explicitly differentiated.
All tools share the cromanion_ prefix and snake_case, but the action-object pattern is inconsistent: many are verb_noun (set_mode, verify_claim), while others are bare nouns or verbs (config, pending, crawl, decide, surfaces). This mixed convention is readable but not predictable.
24 tools is at the high end; the server covers a broad domain and each tool has a distinct job, but the set feels heavy with many narrow configuration endpoints (set_brand, set_voice, surfaces, exclusions). It is not bloated enough to be chaotic, but it is borderline.
The surface covers the full lifecycle from claim/verify/install through goal definition, rules, decisions, measurement, and lead delivery. Minor gaps exist—no account/site deletion, no broader integration management—but agents can accomplish core workflows without dead ends.
Available Tools
26 toolscromanion_add_goalAIdempotentInspect
Define a conversion to count, or change one you already defined. This is not one more setting: it is the numerator of every impact figure your human will read, so a goal that fires on every pageview makes the agent look brilliant and tells them nothing. Send type and value to create — idempotent, the same matcher twice creates one goal. Send goalId instead to rename, reprioritise or price an existing one, or with remove: true to stop counting it. Needs the goals permission.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Matcher: css_click, form_submit, page_view, mailto, tel, outbound, scroll_depth, dwell, custom_event. | |
| label | No | What your human will call it. Defaults to something readable. | |
| value | No | What the matcher matches — a selector, a path, a percentage, seconds. | |
| goalId | No | Change an EXISTING goal instead of creating one. Ids come from cromanion_config. With `remove: true` it stops counting that conversion; otherwise it applies the label, priority or dollarValue you send. | |
| remove | No | With goalId: stop counting that conversion. Nothing already measured is rewritten. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| priority | No | With goalId: 1 is the primary goal, ascending. Rejected rather than clamped if out of range. | |
| dollarValue | No | Optional worth of one conversion, for revenue figures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | Present when nothing changed, saying why. |
| label | No | What your human sees it called, after the change. |
| goalId | Yes | |
| created | No | Present on a create. False when this site already counted that conversion — the call succeeded either way and nothing was duplicated. |
| removed | No | Present when you sent remove: true. |
| updated | No | Present on an edit: which fields changed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The idempotentHint annotation is reinforced and detailed by the description: 'the same matcher twice creates one goal.' The description also discloses mutation behavior for existing goals, removal semantics, and the permissions requirement. It is consistent with destructiveHint=false because removing a goal is described as 'stop counting it' rather than destroying historical data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core verb and resource are front-loaded, and the create/edit/remove modes are each stated in compact, purposeful sentences. The conceptual warning about pageview-level goals earns its place because it prevents a common misuse of the tool. There is no filler or redundant restatement of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 8-parameter schema and 100% coverage, the description supplies the missing combination rules and permission context that the schema alone does not make explicit. It also warns about low-value goals, which matters for the agent's decision-making. The output schema exists, so the description does not need to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema description coverage is 100%, the description adds relationship semantics beyond individual property docs: `type` and `value` together define a new matcher, `goalId` switches to modification mode, and `goalId` with `remove: true` means stop counting. It also maps 'rename, reprioritise or price' to label, priority, and dollarValue, which helps an agent combine parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Define a conversion to count, or change one you already defined,' naming a specific resource and both creation and modification behaviors. It also contrasts the tool with 'one more setting,' which helps distinguish it from the cromanion_set_* sibling family. This is far more than a restatement of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains the two operational modes: send `type` and `value` to create, or send `goalId` to rename, reprioritise, price, or remove an existing goal. It also states the goals permission prerequisite. It does not explicitly name sibling alternatives or exclusion conditions, but the 'not one more setting' warning provides useful context for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_add_siteAInspect
Add another of your human's sites to their account, on a plan that allows more than one. Reaching a site they already own needs no proof — they added it. CREATING one does: nothing about holding a credential for one domain says anything about another, so publish this claim's challenge on the new domain first, the same three ways that proved the first. Refused if your human restricted this credential to specific sites: a list they set should not grow by your action — use cromanion_ask_human. Needs the site-config permission.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| siteUrl | Yes | The public https URL of the site to add, e.g. https://second-shop.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| site | Yes | The new site: its id, domain and mode. Always `learn` to begin with. |
| install | Yes | The snippet for THIS site — a different key from the first one. |
| provedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds real behavioral context: the challenge-publishing requirement for new domains, the asymmetry between owned and new domains, the refusal behavior for restricted credentials, and an explicit permission requirement. These are meaningful for safe invocation and are not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main action is front-loaded and the conditions are ordered logically. It is a bit dense and stylized ('CREATING one does', 'nothing about holding a credential for one domain says anything about another'), but each sentence adds a distinct piece of information, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tricky edge cases: already-owned versus newly created sites, restricted credentials, permission requirements, and the plan limitation. Since an output schema exists, return-value details are not needed. This is complete for a mutating tool with meaningful behavioral caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters well, including when siteId is needed and what siteUrl expects. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add another of your human's sites to their account,' and narrows the scope with 'on a plan that allows more than one.' It clearly distinguishes the tool from siblings like add_goal or ask_human by describing what it adds and when proof is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when no proof is needed (already-owned sites), when proof is required (creating a new site), and when the call is refused (restricted credential), naming cromanion_ask_human as the alternative. It also states the required site-config permission, giving clear invocation conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_ask_humanAIdempotentInspect
Ask your human for something only they can do, in a place they will actually see it. Every other refusal here ends with YOU reading it — a permission they did not grant, a payment you cannot make, a mode you may not set — and from their side you simply went quiet. This puts one request on their notifications screen, attributed to you. Nothing replies here: they act in their console, and you find out by reading cromanion_grants or cromanion_config again. One request an hour, and a second from you replaces the first rather than stacking.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Why you need it and what it unblocks, in a sentence or two. Up to 400 characters. | |
| title | Yes | What you need, in a line they can read at a glance. Up to 90 characters. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | Where it landed, and that nothing answers back here. |
| asked | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: the request appears on the human's notification screen, is attributed to the agent, receives no inline reply, and replaces a prior request rather than stacking. It also tells the agent to re-read cromanion_grants or cromanion_config to see the outcome, which is essential for this async tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence states the purpose immediately, and subsequent sentences explain when to use it, what happens after invocation, and the rate limiting. It is slightly rhetorical in the middle, but every sentence contributes useful decision-making or behavioral information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unusual asynchronous human-interaction tool, the description is complete: it explains the delivery channel, attribution, lack of inline response, how to observe the result, and the request rate limit. The output schema exists, and the description correctly tells the agent not to expect a direct reply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a meaningful description. The tool description does not add parameter-specific semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: asking the human for something only they can do, delivered to their notifications screen. It also distinguishes this tool from the broader refusal/error path in sibling tools by contrasting permission, payment, and mode blocks that otherwise end with the agent reading the result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear applicable scenarios: human-only actions like granting permissions, making payments, or setting modes that the agent cannot perform. It also explains follow-up behavior, the one-request-per-hour limit, and replacement semantics, though it does not explicitly list alternative sibling tools by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_claim_domainADestructiveIdempotentInspect
Claim another host for this site so its traffic counts, or give one up with remove: true. A DIFFERENT registrable domain must be proven on its own — publish this claim's challenge there too, then call again. Subdomains need no call at all: a claimed domain already covers them. Needs the site-config permission.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | A public hostname, e.g. shop.example.com. | |
| remove | No | Give the host up instead. Needs no proof — it only narrows what we listen to. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | Present when nothing changed, saying why — usually that a claimed domain already covers this subdomain. |
| added | No | False when the host was already covered — not a failure. |
| claimed | Yes | Every host this site now listens to, after the change. The answer, whichever branch ran. |
| removed | No | Present on a removal: the host given up. |
| provedBy | No | Present when a fresh proof was read, which a different registrable domain requires. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the site-config permission requirement, the challenge-publication workflow, and the subdomain-coverage behavior. It also reinforces the destructive nature of removal ('give one up') consistent with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action and effect, followed by the key caveat and exclusion. Every sentence earns its place and there is no redundant restating of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema and fully described parameters, the description covers the critical operational context: permission needed, challenge requirement for new registrable domains, and the subdomain no-op rule. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that the domain must be a different registrable domain and that subdomains are already covered without a call, enriching the meaning of the domain parameter beyond the schema's simple hostname example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Claim another host for this site so its traffic counts') and the inverse action ('give one up with remove: true'), clearly identifying the resource and effect. It also distinguishes itself from related claim/verification work by noting subdomains need no call, so an agent can tell what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context ('so its traffic counts'), an explicit when-not-to-use rule ('Subdomains need no call at all'), and the proof workflow for a different registrable domain. It does not name sibling tools like cromanion_verify_claim as alternatives, but the process is concrete enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_configARead-onlyInspect
Everything IN FORCE on this site: the conversions that count, the facts you may state and the ones forbidden, which surfaces are enabled, the brand, and every distilled rule WITH its status. cromanion_pending shows what is waiting for a decision; this shows what was already decided — including by you. Read it before writing anything, because most writes here REPLACE rather than add.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| hint | No | |
| brand | No | |
| goals | Yes | Conversions that COUNT. `source` says who defined each — `agent` is one of yours. |
| voice | Yes | The client's raw text plus the COMPILED buckets: `tone` steers the prompt, `assertions` are facts somebody vouches for, `interdicts` are enforced in code after the model has spoken. |
| domains | Yes | |
| surfaces | Yes | Enabled surfaces, the modal switch, stored CSS, and which surfaces carry custom markup. |
| editGenres | Yes | |
| youMayDecide | No | |
| observedPaths | No | |
| playbookRules | Yes | Distilled rules in EVERY state — `proposed`, `approved`, `paused`, `rejected`. This is how you find a rule you paused in order to un-pause it. |
| excludedVisitors | No | Present only with the measurement permission. ABSENT means you may not see it — not that nobody is excluded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds valuable context: this tool reflects already-decided state, including the caller's own decisions, and warns that writes on the site replace rather than add. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences deliver the core purpose, a category list, the sibling alternative, and a usage warning. The enumeration is slightly dense but each sentence earns its place; no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter and an output schema, the description fully covers purpose, scope, sibling relationship, and when to invoke it. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the siteId parameter is already thoroughly documented, even cross-referencing cromanion_grants and explaining the refusal behavior when omitted. The free-text description adds no parameter-specific meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear read purpose — showing everything 'in force' on a site — and enumerates the content categories (conversions, allowed/forbidden facts, surfaces, brand, rule statuses). It explicitly distinguishes itself from cromanion_pending, which shows undecided items, so an agent can tell this tool apart from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use rule ('Read it before writing anything') and names the alternative for pending decisions (cromanion_pending). The warning that most writes replace rather than add reinforces why consulting this tool first matters, leaving no ambiguity about its role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_crawlAInspect
Re-read the site, and name the pages that matter most so they are read first. You know this site's structure better than its owner does — seeding it is the cheapest real improvement to what the agent understands. Rate-limited: one crawl per 30 minutes. Needs the site-config permission.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| priorityUrls | No | Up to 10 paths or URLs to read first, e.g. ["/pricing", "/checkout"]. Anything unusable is handed back rather than dropped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| ignored | Yes | What we could not use, handed back rather than dropped — you sent ten and kept eight, these are the two. |
| advanceUrl | No | POST this between status polls to advance the crawl yourself, instead of waiting for the cron. |
| priorityUrls | Yes | The paths we accepted and will read first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), the description discloses two non-obvious operational constraints not visible in structured data: 'one crawl per 30 minutes' rate limiting and the 'site-config permission' requirement. It also frames the call's effect as improving the agent's site understanding. No contradiction with annotations — a crawl with side effects is consistent with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and closing with hard constraints (rate limit, permission). The second sentence's motivational aside, 'You know this site's structure better than its owner does,' is mild fluff, though the 'cheapest real improvement' clause does add a usage signal. Slightly compressible but well under the size limit and mostly earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, fully-schema-documented tool with an output schema and four annotations, the description covers the operational essentials an agent needs to invoke it correctly: purpose, rate limiting, and required permission. Output schema handles return values, annotations handle IDempotency/destructiveness. The remaining gap is strategic (when to crawl) rather than mechanical, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema descriptions are exceptional: siteId explains when it's required, points to cromanion_grants, and states the refusal-on-omission behavior; priorityUrls documents the 10-item limit, path/URL format with examples, and the 'handed back rather than dropped' error handling. The main description only loosely gestures at priorityUrls ('name the pages that matter most'), so the schema carries the burden — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Re-read the site' (crawl the site) with a clear behavioral add-on, 'name the pages that matter most so they are read first' (priority seeding). The title annotation reinforces this. Among 24 siblings, none is an obvious crawl alternative, so no explicit differentiation is needed, though the verb 're-read' is slightly indirect for 'crawl'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: 'seeding it is the cheapest real improvement to what the agent understands' suggests this is the go-to refresh mechanism, and the rate limit warns against frequent calls. However, the description never states when to use it (initial setup, after site changes, periodically), names no alternative tools, and gives no when-not-to-use guidance. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_decideAIdempotentInspect
Rule on one thing from cromanion_pending: pass its kind and id back unchanged with a decision. approve / reject for everything; pause additionally for a playbook rule. Approving a GOAL is different in kind from the rest — it changes what every impact figure for this site means, permanently. You cannot edit rule text here, only rule on it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The item's id, exactly as cromanion_pending returned it. Ids are not shared across kinds. | |
| all | No | Rule on every discovered page at once, ignoring `id`. observed_path only — the other kinds are decided one at a time, as in the console. | |
| kind | Yes | Which queue the item came from. Copy it back from cromanion_pending unchanged. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| decision | Yes | A status and nothing else — rule TEXT is edited by cromanion_set_playbook. `pause` applies only to a playbook_rule. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | Yes | |
| kind | Yes | |
| ruled | No | Present with `all`: how many were ruled on. Zero is a success — there was nothing waiting. |
| summary | No | What the ruling changed, in one line you can repeat to your human. |
| decision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the consequential, permanent semantic effect of approving a GOAL — that it changes what every impact figure for this site means. Also clarifies that the decision is a status only, not editable rule text, adding real behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, purposeful sentences with the core instruction front-loaded. Each sentence earns its place: what to pass, which decisions apply to what, the critical GOAL caveat, and the edit limitation. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completeness is achieved given the output schema and rich parameter descriptions. The description covers the call pattern, decision applicability, the most important semantic consequence, and the boundary with sibling tools, so an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by warning that approving a GOAL permanently changes impact figures and by emphasizing that kind and id must be passed back unchanged. This is useful but not required for every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action — 'Rule on one thing from cromanion_pending' — and enumerates the exact decision values. It also distinguishes itself from rule-text editing by saying 'You cannot edit rule text here, only rule on it,' which separates it from cromanion_set_playbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear scope: approve/reject apply to everything, pause applies only to playbook_rule, and rule text must not be edited here. It implies the alternative (edit via cromanion_set_playbook) through the negative constraint but does not explicitly name it in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_disconnect_hubspotADestructiveIdempotentInspect
Sever the account's HubSpot connection. The other half of cromanion_set_lead_destination's hubspot option: you can point leads at a CRM, so you can take them back out. Refused while any site on the account still delivers there — change those destinations first, or the forms would keep working while every lead failed delivery. Reconnecting is NOT a tool: it is an OAuth consent screen only your human can click, so treat this as one-way and say so before you call it. Needs the integrations permission.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| changed | Yes | False when nothing was connected. That is a success, not a failure. |
| portalId | No | The portal that was severed. Present only when something was. |
| connected | Yes | Always false on success — the state after the call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive and non-read-only behavior, but the description adds meaningful context: it requires the integrations permission, fails when any site still delivers to HubSpot, and has the serious side effect that forms would keep working while every lead delivery fails. It also makes the irreversible nature concrete by explaining that reconnection is a human-only OAuth consent screen. This goes well beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well structured: the core action comes first, followed by the relation to a sibling, a critical refusal condition, the one-way nature, and the permission requirement. Each sentence earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers prerequisites, preconditions, failure modes, side effects, irreversibility, and the alternative path through cromanion_set_lead_destination. Since an output schema exists, the lack of return-value detail is not a gap. The agent has enough context to decide correctly whether and when to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, siteId, already has 100% schema documentation, including when it is required and that it is refused if omitted when multiple sites are covered. The tool description itself adds no additional parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states the specific action: 'Sever the account's HubSpot connection.' It also distinguishes itself from siblings by naming itself as 'the other half of cromanion_set_lead_destination's `hubspot` option,' so an agent can clearly tell what this tool does and how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when the tool is appropriate: it is the counterpart to setting a HubSpot destination and should be used to remove leads from a CRM. It also gives a clear precondition and exclusion — disconnection is refused while any site still delivers to HubSpot, and the user should change those destinations first. It further warns that reconnection is not a tool action but a human-only OAuth flow, so the agent should treat this as one-way and communicate that before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_errorsARead-onlyInspect
Every refusal this server can return, and what to do about each. Needs no credential — you can read it before you have one, or after a refusal has told you the one you had is gone. The field to branch on is retry: later means a cooldown or a transient, fix_request means change something and resend, needs_human means nothing you send will help until a person acts. Read it once and stop guessing whether a 409 is worth retrying.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| errors | Yes | The closed set. A token absent from here is one this server does not emit. |
| readMe | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description adds valuable context beyond that: it reveals the credential-free access ('Needs no credential') and explains the semantic of the `retry` field with three enumerated values (`later`, `fix_request`, `needs_human`) and what each implies. This is behavioral disclosure that helps an agent interpret the output without guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core purpose, then the credential note, then the retry-field explanation, and a closing recommendation. Every sentence adds value; there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, parameterless tool with an output schema, the description covers the essential context: what it returns (all refusals), how to use it (without credentials, even after a refusal), and how to interpret the key field. The output schema presumably details the structure, so the description doesn't need to list every refusal. It is complete for an agent to decide when to call and how to act on the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema is an empty object, so the description has no parameters to document. The baseline for 0 params is 4, and the description correctly focuses on output semantics instead. No gaps exist in parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: 'Every refusal this server can return, and what to do about each.' This identifies a specific resource (the catalog of refusals) and its purpose (guidance on handling each), distinguishing it from sibling action-oriented tools. The verb 'read' is implicit but clear, and the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Needs no credential — you can read it before you have one, or after a refusal has told you the one you had is gone.' It also advises 'Read it once and stop guessing whether a 409 is worth retrying,' which guides agents to consult it for retry decisions. It doesn't name alternatives, but as a unique reference tool the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_grantsARead-onlyInspect
List what your human has allowed this agent to do, and what they have not. Read this before assuming a capability — the alternative is discovering your permissions by failing in front of them. You cannot change these yourself; only your human can, in their console.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| granted | Yes | Only what you MAY do. A capability absent from this list is one to stop planning around. |
| revoked | Yes | True once your human has ended this credential. Nothing else will work; do not retry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint; the description reinforces this by stating 'You cannot change these yourself; only your human can, in their console.' This adds ownership and mutability context beyond the structured fields, though it doesn't describe the output format, which is covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences lead with the core purpose, then a usage warning, then a mutability constraint. No filler; each sentence contributes new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, a readOnlyHint annotation, and an output schema present, the description covers what the tool lists, when to read it, and how permissions can change. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the description needs no parameter detail. The baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('what your human has allowed this agent to do, and what they have not'), clearly identifying it as a permission introspection tool. This distinguishes it from sibling action tools like cromanion_add_goal and cromanion_decide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to 'Read this before assuming a capability' and warns that the alternative is 'discovering your permissions by failing in front of them,' which tells when to use it. It doesn't name sibling exclusions, but no sibling offers the same read-only permission list, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_impactARead-onlyInspect
What the agent has actually changed: visitors who saw it versus the 10% held back as a control. Read liftStatus before reporting anything — learn means nothing has been shown yet and insufficient means the arms are too small to tell signal from noise. Neither is 'no lift'.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| impact | Yes | Exposed arm versus the held-back control. Read `liftStatus` FIRST — it decides whether the numbers beside it mean anything yet. |
| readMe | No | What each liftStatus means. `learn` = nothing shown yet, `insufficient` = arms too small to separate from noise. Neither is 'no lift'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the critical interpretive nuance that `learn` and `insufficient` statuses do not mean 'no lift', and explains the holdout control design. This prevents misinterpretation of results and reveals behavior around inconclusive or not-yet-shown data. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences each carry essential information: what the tool measures, the prerequisite status check, and the meaning of ambiguous statuses. It is appropriately sized with no filler, though the opening noun phrase could have been phrased as a clear verb statement for quicker parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, read-only tool with one optional parameter and an output schema, the description provides the key interpretive context needed to correctly use the result. It explains the control group and how to read liftStatus, which is sufficient for most agents. It stops short of describing all possible status values or how to interpret a true 'no lift' result, but the output schema can fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, and the schema already fully documents siteId including when it's required and the consequence of omitting it. The description adds no parameter-specific detail, so the baseline 3 applies; the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clarifies that the tool reports the effect of what the agent changed, comparing visitors who saw it against a 10% holdout control. Though it lacks an explicit verb like 'read', the annotation title supplies 'Read measured lift against the holdout', making the purpose clear. It doesn't explicitly distinguish itself from siblings like cromanion_site_status or cromanion_surfaces, but the experimental lift framing sets it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow guidance: read `liftStatus` before reporting anything, and explains that `learn` and `insufficient` are not 'no lift'. However, it provides no explicit comparison to alternatives or when not to use this tool, so usage context is implied rather than fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_install_checkARead-onlyInspect
Why the tag is not firing. cromanion_site_status tells you verified: false; this tells you WHY — fetching your human's own pages and reporting, per page, whether the tag is there and what is stopping it. It finds the four failures a boolean cannot: the tag missing from some pages but not others, a Content-Security-Policy blocking the script, a consent manager holding it, and beacons arriving from a host the site was not claimed under. Each comes back with the fix. Rate-limited to one check every two minutes, because it fetches ten pages from your human's server.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| pages | Yes | Per page: the status we got, whether the tag was in the HTML, and whether a consent manager had parked it. |
| checked | Yes | |
| present | Yes | How many of the fetched pages carry the tag. |
| verdict | No | No problems is not the same sentence as it working: a beacon still needs a real visitor. |
| problems | Yes | Empty means the tag is present and nothing blocks it. Each entry carries what is wrong and what to do. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint=true already signals a read-only operation, the description adds meaningful behavioral context beyond annotations: it fetches ten pages from the human's server, is rate-limited to one check every two minutes, reports per page, identifies four specific failure modes, and includes fixes. This is exactly the kind of side-effect and constraint disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it establishes the relationship to site_status, lists the four diagnostic categories, promises fixes, and discloses the rate limit and page-fetch behavior. It is front-loaded with the core purpose and contains no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with a single optional parameter, a rich output schema, and annotations declaring read-only and open-world behavior, the description is complete. It covers when to use it, what it checks, what it returns, and the operational constraint of rate-limiting, leaving no critical gap for an agent deciding whether or how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single `siteId` parameter, including when it is required and what happens if omitted with multiple credentials. Because schema description coverage is 100%, the description does not need to add parameter semantics; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: diagnosing why the tag is not firing, and explicitly contrasts it with cromanion_site_status, which only reports `verified: false`. It names the resource (the human's pages) and the specific output (per-page tag presence and blockers), making it impossible to confuse with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use trigger: when cromanion_site_status reports `verified: false`, this tool explains why. It also names the alternative tool and the four diagnostic categories it covers, giving an agent clear grounds for choosing this tool over cromanion_site_status or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_mark_readAIdempotentInspect
Mark notifications read once you have passed them on to your human. cromanion_pending returns the unread ones and nothing cleared them, so the queue grew for ever and you re-read the same items on every poll. Send a notificationId for one, or nothing to clear them all. Needs the decisions permission.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| notificationId | No | One notification, by the id cromanion_pending returned. Omit to mark every unread one read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| title | No | Present when you named one. |
| marked | Yes | How many were actually unread. Zero is a success, not a failure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, idempotent, and non-destructive; the description adds useful context on permission requirements and the 'one notification or all' side effect. It also explains the operational problem it solves. It does not specify the output shape, but an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, then motivation, then invocation options and permission. The 'queue grew for ever' sentence earns its place by explaining why the tool exists, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional parameters, full schema descriptions, an output schema, and annotations covering idempotence/destructiveness, the description supplies the missing operational context: when to mark, which permission is needed, and how to choose one-or-all. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already fully documented in the input schema (siteId disambiguation and notificationId semantics incl. omit-to-clear-all), so schema coverage is 100%. The description's parameter guidance mostly restates what the schema already says, so it adds little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact operation and object ('Mark notifications read') and adds a concrete triggering condition ('once you have passed them on to your human'). It also draws a clear line against cromanion_pending: that tool returns unread notifications, while this one clears them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool, why it is needed (otherwise the queue grows and items are re-read), and a required permission ('Needs the decisions permission'). It stops short of an explicit when-not-to-use list, but the context is clear enough for an agent to choose it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_open_claimAInspect
Start here, and you need nothing to do it — no API key, no human. This call takes no credential and creates NOTHING: no account, no key, no charge. It returns a challenge to publish on the site you manage (a file, a meta tag or a DNS record — whichever your hosting lets you write) and the secret you will authenticate with once the proof is read. That proof is the whole trust model: we cannot take your word for an email address, but we can check what you control. Store the secret; it is shown once. Refuses if the address already has an account, because controlling a site does not prove controlling a mailbox.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Optional: what you call yourself, for support and audit. | |
| Yes | Your human's email. It becomes the account's login. | ||
| siteUrl | Yes | The public URL of the site to optimize, e.g. https://example.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| domain | Yes | The domain we resolved from your siteUrl, and the one the proof must appear on. |
| proofs | Yes | The three ways to prove control, each with the exact URL and the exact string. Publish any ONE, then call cromanion_verify_claim. |
| secret | Yes | Shown ONCE. Store it now — we keep only its hash, so a lost secret means a new claim. |
| claimId | Yes | This claim's id, for your own logs. |
| challenge | Yes | The random string to publish. It proves this claim and no other. |
| expiresAt | Yes | ISO timestamp. Redeemable until then; after that, open another. |
| verifyUrl | No | The HTTP equivalent of cromanion_verify_claim, if you would rather curl it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations: it states no credential is needed, no account/key/charge is created, the secret is shown only once, and the call refuses for already-registered addresses. It also explains the trust model behind the challenge, giving the agent accurate expectations about side effects and auth. No contradiction with readOnlyHint=false exists because 'creates NOTHING' is qualified as no account, key, or charge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with 'Start here' and nearly every sentence adds behavioral or usage value, but it is slightly verbose: 'no API key, no human' and 'takes no credential' are redundant, and the trust-model sentence is explanatory rather than invocation-critical. Still well-structured for a security-sensitive flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the input schema is fully covered, the description provides everything else an agent needs: prerequisites, side-effect profile, what the returned challenge/secret are for, the one-time display warning, and the already-has-account refusal condition. Nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents email, siteUrl, and agent. The description only loosely reinforces that email is the login and siteUrl is the site the user controls, adding no new syntax, constraints, or format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Start here' and clearly identifies the tool as the entry point for a Cromanion signup: it returns a challenge and a one-time secret for proving site control. It also distinguishes itself from later verification steps by describing the challenge-then-proof flow, so an agent can tell it apart from siblings like cromanion_verify_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start here' gives explicit when-to-use context, and the description states there is no API key or human needed and that the call refuses if the email already has an account. It does not name sibling alternatives explicitly, but the entry-point positioning and failure condition provide clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_pendingARead-onlyInspect
Everything on this site that is waiting for a decision: page rewrites the agent wants to make, rules it distilled from real sessions, conversions it spotted but has never counted, and pages your traffic found that the crawl missed. This is the client's actual job in the console, in one call. Rule on an item with cromanion_decide.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| hint | No | |
| items | Yes | Everything waiting. Pass an item's kind and id back to cromanion_decide unchanged. |
| youMayDecide | Yes | Your own grants, echoed here so you do not rule on an item you will be refused for. |
| notifications | Yes | Unread notes for your human. Not decisions — the other reason they would open the console. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the bar is lower; the description adds genuine behavioral context by aggregating all decision-pending item types into one unified view and characterizing it as the client's main console job, which an agent would not infer from annotations alone. It does not cover operational details like pagination or ordering, but the presence of an output schema offsets that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the core scope is front-loaded, the category list earns its length by concretely defining what 'pending' means, and the closing sentence efficiently points at the decision tool. The middle framing sentence ('client's actual job...') is mildly redundant with the 'one call' idea but adds workflow-priority value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, zero-required read-only list tool with an output schema and a fully documented parameter, nothing an agent needs to call it correctly is missing. The description covers what items appear, the site scoping, and the follow-up action, while the schema handles credential-based site selection and the output schema handles return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the siteId parameter is already thoroughly documented in the schema, including when it is needed (multi-credential cases) and the refusal behavior when omitted. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Everything on this site that is waiting for a decision' — and enumerates four concrete categories (page rewrites, distilled rules, unconverted conversions, crawl-missed pages), making the tool's scope unmistakable. It differentiates from siblings by naming cromanion_decide as the companion action, and the annotation title 'List everything awaiting a decision' reinforces the same purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames this as 'the client's actual job in the console, in one call,' signaling it is the primary entry point for the review workflow, and explicitly routes the next step to cromanion_decide ('Rule on an item with cromanion_decide'). It stops short of explicitly stating when not to use alternatives among the 23 siblings, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_brandAIdempotentInspect
Adjust the palette, fonts and button styling the agent paints its surfaces with. The crawl guesses these from a stylesheet; you probably know the real tokens. Cosmetic only — it changes how the agent looks, never what it may say. Needs the brand permission.
| Name | Required | Description | Default |
|---|---|---|---|
| colors | No | Hex per role, e.g. {"primary":"#1a1a2e"}. Roles come from cromanion_site_status. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| ctaFill | No | Primary button background, hex. | |
| ctaText | No | Primary button text colour, hex. | |
| bodyFont | No | CSS font-family stack for body text, e.g. "Inter, sans-serif". | |
| ctaRadius | No | Primary button corner radius, e.g. 8px. | |
| headingFont | No | CSS font-family stack for headings, e.g. "Inter, sans-serif". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| button | No | |
| palette | Yes | The stored colours, by role. |
| version | No | Bumped on every save, so the edge picks the new tokens up. |
| typography | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the operation is cosmetic, that it affects appearance only and not what the agent may say, and that it requires the brand permission. It also explains where current guesses come from ('The crawl guesses these from a stylesheet'), adding useful behavioral context the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose is front-loaded, the cosmetic-only boundary is stated early, and the permission requirement is included. Every sentence contributes either to correct tool selection or safe invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with seven parameters, a nested object, and an output schema, the description supplies the missing non-schema context: why the tool exists, when to use it, its scope boundary, and required permission. The schema covers parameters and the output schema covers return values, so nothing critical is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents each parameter. The description adds general context about real tokens versus crawl guesses, but it does not add per-parameter meaning beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Adjust the palette, fonts and button styling the agent paints its surfaces with.' It also differentiates itself by declaring 'Cosmetic only — it changes how the agent looks, never what it may say,' which clearly separates it from content-affecting siblings like cromanion_set_voice and cromanion_set_playbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use context: the crawl guesses styling from a stylesheet, so this tool should be used when the agent knows the real tokens. It also provides an explicit exclusion ('never what it may say') and a permission prerequisite, but it does not name specific sibling alternatives to route to for content changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_exclusionsADestructiveIdempotentInspect
Put an excluded device back into the measurement. Your human can mark their own devices as "not a real visitor" so their browsing does not count; this removes one of those marks, by the label they gave it. You cannot ADD an exclusion — that names the caller's own browser, which you do not have. Needs the measurement permission.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | The label your human gave the device, as cromanion_config lists it. An ambiguous label is refused rather than guessed at. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| removed | Yes | The label that is no longer excluded. |
| stillExcluded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the destructive and idempotent annotations by explaining the limitation that you cannot add an exclusion (which names the caller's own browser) and the permission requirement. This reveals constraints and side effects that are not fully captured by the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of just a few sentences that cover purpose, limitations, and permissions without any fluff or repetition. Each sentence adds valuable information, and the structure is logical and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description provides all necessary context: what the tool does, when to use it, its constraints, and its permission requirements. Nothing essential is missing for an agent to correctly invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are described with meaningful, user-oriented explanations. The label is defined as the human-given device label, and siteId is explained with its conditional necessity. These descriptions go beyond mere type info and clarify the intended use, which justifies a score above the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to remove an exclusion and put a device back into measurement. It also provides helpful context about what exclusions are and explicitly contrasts with adding an exclusion, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage guidance by stating that adding an exclusion is not possible with this tool and by mentioning the required measurement permission. It does not explicitly enumerate alternative sibling tools, but the contrast with ADD and the permission note serve as clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_holdoutADestructiveIdempotentInspect
Set the share of visitors held back from the agent so its effect stays measurable (0.05–0.5). Changing it splits the measurement window: periods either side are compared separately and never pooled. Needs the measurement permission.
| Name | Required | Description | Default |
|---|---|---|---|
| share | Yes | Fraction held back, e.g. 0.1 for 10%. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | That this change split the measurement window, and what that means for later comparisons. |
| holdoutShare | Yes | The share as APPLIED, clamped to 0.05–0.5. Read it rather than assuming your value was taken verbatim. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior; the description adds meaningful context about splitting the measurement window and never pooling periods. It does not repeat the destructive hint, but the annotations cover that risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, no filler, with the primary action and key constraints stated upfront.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Includes the required permission, the quantitative range, the behavioral implication of changing the value, and references an output schema exists. No critical information needed to invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with clear descriptions; the tool description adds context about the allowed range and the measurement-window effect, but does not substantially deepen parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set'), the resource ('share of visitors held back'), and the purpose ('so its effect stays measurable'), clearly distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context about when this tool is relevant, including the required permission ('Needs the measurement permission') and the behavioral consequence of changing the holdout share. It does not explicitly contrast with alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_lead_destinationADestructiveIdempotentInspect
Set where captured leads are delivered: an https webhook, a connected HubSpot portal, or off. Note before you use it: this is the one change that leaves no other trace — forms keep working and visitors keep being thanked while the addresses go somewhere new — so every change emails your human and appears on their notifications screen. Needs the integrations permission.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Where leads go: `webhook` posts them to your `target` URL, `hubspot` to the connected portal, `off` stops delivery while forms keep working. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| target | No | The https webhook URL. Not needed for hubspot or off. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | On a real change: that your human has been emailed and it is on their notifications screen. This is the one setting whose misuse leaves no other trace. |
| changed | Yes | False when leads already went there. Nothing was emailed in that case. |
| destination | Yes | Where leads go now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: this change 'leaves no other trace' while forms keep working, every change emails the human and appears on a notifications screen, and the integrations permission is required. These side-effect, notification, and authorization details directly complement the destructiveHint=true and openWorldHint=true annotations rather than repeating them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence, followed by a dense but valuable warning sentence about traceability, notifications, and permissions. Slightly long, but every clause earns its place given the destructive and silent nature of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Well covered for a destructive mutation: safety profile is in annotations, all parameters are fully documented in the schema, an output schema exists, and the description adds auth requirements and side-effect disclosure. The only gap is the lack of explicit routing to or away from sibling tools such as disconnect_hubspot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself is already rich, documenting each enum value, the conditional need for target, and siteId's multi-credential refusal behavior. The description's mention of the three delivery options maps to the kind enum but adds no parameter-level semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-resource pair ('Set where captured leads are delivered') and enumerates the three delivery modes (webhook, HubSpot portal, off), which differentiates it from siblings like set_brand, set_mode, and set_voice that target different resources. An agent can tell what this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the clear purpose and the note about needing the integrations permission, but the description never explicitly says when to choose this over alternatives or when not to use it. It does not, for example, clarify how this relates to disconnect_hubspot or when setting kind=off is preferable to disconnecting the portal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_modeAIdempotentInspect
Switch the agent on. learn watches and shows visitors nothing; act lets it intervene in your human's name. customizeMode is a separate axis for rewriting their own page copy: off, shadow (propose only) or live. Needs the activation permission.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | `learn` watches and shows visitors nothing; `act` lets the agent intervene in your human's name. Omit to leave it as it is. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| customizeMode | No | Rewriting your human's own page copy, a separate axis from `mode`: `off`, `shadow` (propose only, nothing shown) or `live`. Omit to leave it as it is. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| mode | Yes | The mode as it now stands. |
| changed | Yes | False when it already was what you asked for. Not a failure. |
| customizeMode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it explains that `learn` shows visitors nothing, that `act` acts in the user's name, and that `shadow` only proposes changes without showing them. It also discloses the activation permission requirement. This complements the annotations rather than contradicting them, though it does not go into reversibility or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the main action, defines both mode axes compactly, and ends with the permission requirement. Every sentence earns its place, and the density is appropriate for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's three optional parameters, full schema coverage, annotations, and an output schema, the description is nearly complete. It communicates the core operational states, the separate customization axis, and a required permission. It could be more explicit about how to verify or obtain the activation permission, but the essential invocation context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description largely restates the mode enum meanings and introduces the "separate axis" framing, which helps conceptual understanding. However, it adds little about `siteId` or parameter-specific behavior beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action, "Switch the agent on," and immediately defines what each mode does: `learn` watches without showing visitors anything, while `act` lets the agent intervene. It also introduces `customizeMode` as a separate axis with three clear values. This makes the tool's purpose and scope easy to distinguish from sibling configuration tools like cromanion_set_brand or cromanion_set_voice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a useful prerequisite, "Needs the activation permission," which tells the agent an important precondition. However, it does not explicitly name alternatives or say when not to use this tool versus a sibling such as cromanion_grants or cromanion_config. The usage context is implied by the mode definitions, but explicit routing guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_playbookADestructiveInspect
Reword a distilled rule, or ask for a fresh distillation. Rules are what the agent learned from real sessions; cromanion_decide approves or pauses them, and this changes what they SAY. Send a ruleId with condition and/or recommendedAction to reword one — ids come from cromanion_config, which also shows rules you have already approved or paused. Send redistill: true instead to distil new rules from recent sessions; they arrive as proposed for you to rule on. Rate-limited to one distillation an hour. Needs the decisions permission.
| Name | Required | Description | Default |
|---|---|---|---|
| ruleId | No | The rule to reword, from cromanion_config. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| condition | No | When the rule applies, in plain words. Omit to leave it. | |
| redistill | No | Ignore ruleId and distil fresh rules from recent sessions instead. | |
| recommendedAction | No | What the agent should do when it applies. Omit to leave it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| ruleId | No | |
| changed | No | False when the wording was already what you sent. |
| condition | No | |
| redistilled | No | |
| recommendedAction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false and destructiveHint=true, and the description is consistent with them rather than repeating them. It adds genuine behavioral context beyond the annotations: rewording 'changes what they SAY', redistilled rules 'arrive as proposed for you to rule on', the hourly rate limit, and the 'decisions permission' requirement. It does not elaborate on what exactly gets destroyed or whether a reword is reversible, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but efficient paragraph that front-loads the core purpose before moving to modes and constraints. The background sentence explaining rules and cromanion_decide's role earns its place because it defines domain vocabulary used throughout, and the rate-limit/permission sentences are brief. It could be marginally tighter, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-mode tool with 5 parameters, the description covers purpose, mode selection, parameter combinations, the source of ids, the rate limit, and the permission requirement — and an output schema exists, so return values don't need explanation. The only gap is the unelaborated destructive hint: the description doesn't say whether rewording an approved rule re-enters the proposed state or permanently overwrites it, which would strengthen completeness for a destructive call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 with the schema doing the heavy lifting. The description adds value on top by specifying parameter interactions not in the schema: the mutually exclusive relationship between redistill and ruleId ('Send redistill: true instead'), and the combinability of ruleId with condition and/or recommendedAction. This interaction guidance is exactly what an agent needs to invoke the two modes correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific dual-purpose statement — 'Reword a distilled rule, or ask for a fresh distillation' — with a clear verb and resource, and then defines what a rule is and how it relates to siblings (cromanion_decide approves/pauses, cromanion_config provides ids). It distinguishes both modes from one another and from the sibling tools' responsibilities, so an agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditions for each mode: send a ruleId with condition and/or recommendedAction to reword, send redistill: true to distil fresh rules, and states that ids come from cromanion_config while approval happens in cromanion_decide. It also discloses the rate limit ('one distillation an hour') and the required permission. It stops short of an explicit 'use X instead' exclusion statement, but the routing to siblings is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_surfacesADestructiveIdempotentInspect
Choose where the agent may speak and what those places look like: which layout surfaces are enabled, whether the exit modal is allowed, custom CSS, and per-surface HTML. Markup and CSS are re-checked against an allowlist on every visitor — anything that could run, or fetch a remote resource, is silently removed, so compare what comes back with what you sent. Needs the surfaces permission.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. | |
| enabled | No | Surfaces the agent may use: inline_hint, card, sticky_bar, bottom_sheet, inline_block, cta_tooltip. | |
| customCss | No | CSS applied inside the intervention's shadow root. An empty string clears it. | |
| templates | No | Per-surface HTML, keyed by surface. Use {{message}}, {{cta_label}} and {{cta_url}} as placeholders. | |
| allowModal | No | Allow the page-blocking exit modal. Off by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| changed | Yes | |
| enabled | No | Surfaces now in use. |
| customCss | No | The CSS as STORED — compare with what you sent to see what the allowlist removed. |
| templates | No | Per-surface, what was kept and what was stripped from your markup. |
| allowModal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait beyond the annotations: it states that markup and CSS are re-checked against an allowlist on every visitor and that anything that could run or fetch remote resources is silently removed. This warns the agent that the output may differ from the input, which is not indicated by the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat repetitive and uses a quirky phrasing ('Choose where the agent may speak' and 'compare what comes back with what you sent') that could be streamlined. It is still understandable but contains redundant words and concepts that could be expressed more tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives enough context for the agent to use the tool effectively: it mentions the permission requirement, the filtering behavior, and the need to compare output. It does not describe the return structure since an output schema is present, which is acceptable. The overall context is sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides coverage for all five parameters, and the description adds extra semantic detail such as 'an empty string clears it' for customCss, the placeholder variables for templates, and the default off state for allowModal. This enriches the parameter meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: configuring where the agent may speak (surfaces), enabling/disabling the exit modal, and setting custom CSS and per-surface HTML. It distinguishes itself from siblings by focusing on surface layout and appearance rather than other configuration aspects like goals, brands, or voice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: it requires the 'surfaces' permission and instructs the agent to compare the returned data with what was sent because allowlisting may silently remove content. This helps the agent know when to use this tool and what to expect, though it does not explicitly contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_set_voiceADestructiveIdempotentInspect
Write the facts the agent may state to visitors, and the things it must never say. Plain sentences, one idea per line; start a line with 'never' to forbid something. Anything you write that your human's own pages do not already state is attributed to THEM as the source — so write only what they have told you is true. Every rule is checked against your own text and the site's vocabulary, and anything ungrounded is silently dropped: read the returned lines to see what actually survived. Your human sees each line attributed to you. Needs the voice permission.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The whole guidance, replacing what is there. An empty string clears it. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| lines | Yes | What SURVIVED grounding, not what you sent. Compare it with your input; anything missing was dropped as unverifiable. |
| cleared | No | Present when you sent an empty string: the guidance is now empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive and idempotent hints, the description discloses that ungrounded rules are silently dropped, that each line is attributed to the human, that an empty string clears the voice, and that replacement is full rather than additive. It also calls out the required voice permission and that the returned lines show what survived. This is rich behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, line syntax, attribution, validation/drop behavior, output meaning, and permission. It is front-loaded with the core purpose before the mechanics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent write operation with an output schema, the description fully covers purpose, input format, side effects, error behavior (refusal to guess), permissions, and how to read the result. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description substantially enriches both parameters: text gets a line format with 'never' prefixes and empty-string clearing semantics, while siteId gets a clear rule about when it is required and that omission with multiple credentials is refused. This goes well beyond the schema's short descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Write the facts the agent may state to visitors, and the things it must never say,' which clearly identifies the tool as setting the agent's voice/facts. It is further clarified by the title 'Replace the facts the agent may state'. However, it does not explicitly differentiate itself from sibling set_* tools like cromanion_set_brand or cromanion_set_playbook, so it stops short of full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong how-to guidance but no explicit when-to-use or when-not-to-use guidance, and it never names an alternative tool. There is no exclusion criteria such as 'use cromanion_set_brand for brand voice instead' or prerequisite context like which other tools to prefer. This leaves selection among the many sibling set_* tools mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_site_statusARead-onlyInspect
Check the site you provisioned: whether the tag is actually live (a beacon received from your own domain, not merely a snippet handed to you), how the crawl is going, and the plan. Poll this after installing the snippet. Requires the claim secret as a bearer token.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| site | Yes | |
| crawl | No | Progress of the site read. While `status` is pending or running it carries `advanceUrl` — POST it between polls to advance the queue yourself. |
| account | No | Plan and billing state, or null if it cannot be read. |
| install | Yes | |
| consoleUrl | No | Where your human signs in to see all of this. |
| humanNextStep | No | What is waiting on your human, in words you can repeat to them. Null when nothing is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, and the description adds meaningful behavior: the tag must be a beacon received from the caller's own domain, the call reports crawl progress and plan, and it requires the claim secret as a bearer token. This goes beyond what annotations and schema alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler, front-loading the core purpose and then giving timing and authentication requirements. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, a fully documented optional parameter, and annotations covering read-only behavior, the description supplies the remaining context: when to poll, what the verification means, and the auth requirement. Nothing essential is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional parameter siteId is already well documented, including when it is required and that omitting it with multiple credentials is refused. The tool description adds no extra parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: check the site you provisioned, covering tag liveness, crawl progress, and the plan. It also distinguishes itself from related tools by defining the tag-liveness check as a beacon from your own domain rather than a handed-over snippet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage cue: 'Poll this after installing the snippet,' which tells the agent when the call applies. It does not name alternative sibling tools or state when not to use it, but the timing and prerequisite are clearly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_upgrade_linkAInspect
Get a Stripe Checkout link for a paid plan (pro or growth). Returns a URL and nothing else — YOU do not pay and cannot: give the link to your human, who enters their own card. The site works on the free plan meanwhile. Requires the claim secret as a bearer token.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Which paid plan the link should check out: pro or growth. The site keeps working on free until your human completes it. | |
| siteId | No | Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| plan | Yes | |
| checkoutUrl | Yes | A Stripe Checkout link. Give it to your human; you cannot complete it. |
| instructions | No | What to tell your human, in a sentence you can pass on unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: it returns only a URL, it does not charge the AI, the human must enter their own card, the site remains on the free plan until checkout completes, and authentication requires a claim secret as a bearer token. This is substantial behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's core purpose. Every sentence contributes: what it returns, who pays, what happens to the site during checkout, and the required auth. There is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema, and the description covers the two key operational facts an agent needs: the returned artifact is just a checkout URL, and auth is required via a bearer token. The schema covers plan and siteId semantics. Nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds little beyond what the schema provides; it mostly restates the plan options and the free-plan behavior already present in the schema. The baseline of 3 is appropriate because the description does not meaningfully compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a Stripe Checkout link for a paid plan (pro or growth).' It also clarifies the exact output ('Returns a URL and nothing else'), making the tool's role unmistakable and distinguishable from siblings that manage goals, claims, or site status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool: when a paid plan upgrade link is needed and the human must complete checkout. It also gives an explicit guardrail — 'YOU do not pay and cannot: give the link to your human' — which is valuable usage guidance. It stops short of naming alternative tools or when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cromanion_verify_claimAIdempotentInspect
Redeem a claim once you have published one of its three proofs (a /.well-known file, a tag, or a DNS TXT record). On success it creates the account and the site and returns the tracking snippet to install. Idempotent — safe to retry. Requires the claim secret as a bearer token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| site | Yes | |
| status | Yes | `created` the first time, `existing` on a retry — the same account either way. |
| install | Yes | |
| provedBy | No | Which of the three proofs we actually read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover idempotency and non-read-only behavior; the description adds valuable context by specifying that the claim secret must be a bearer token and that success creates the account/site and returns a tracking snippet. It does not contradict the annotations and provides meaningful side-effect and auth information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the core action. Every sentence earns its place: the precondition, the success outcome, and the idempotency/auth requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an empty input schema and an output schema available, the description covers all essential operational context: prerequisites, proof types, auth mechanism, retry safety, and success behavior. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema leaves nothing to document, and the baseline is 4. The description still adds relevant input-related context by requiring the claim secret as a bearer token, which is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('redeem a claim') and the precondition ('once you have published one of its three proofs'), which distinguishes it from earlier claim-lifecycle siblings like open_claim or claim_domain. It also names the concrete outcomes: creating the account and site and returning a tracking snippet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: after publishing a /.well-known file, meta tag, or DNS TXT record. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full exclusions.
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. Dates show when Glama detected each change.
7 tool updates
- Added
cromanion_disconnect_hubspot - Removed
cromanion_exclusions - Removed
cromanion_lead_destination - Added
cromanion_set_exclusions - Added
cromanion_set_lead_destination - Added
cromanion_set_surfaces - Removed
cromanion_surfaces
1 tool update
- Added
cromanion_add_site
20 tool updates
- Changed
cromanion_add_goal1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_ask_human1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_claim_domain1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_config1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_crawl1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_decide1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_exclusions1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_impact1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_install_check1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_lead_destination1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_mark_read1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_pending1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_set_brand1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_set_holdout1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_set_mode1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_set_playbook1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_set_voice1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_site_status1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_surfaces1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
- Changed
cromanion_upgrade_link1 field changed- added
Input schema / properties / siteIdAdded value: +{ + "description": "Which site this call is about. Only needed when your credential covers more than one — cromanion_grants lists them and says whether it is required. Omitting it with several is refused rather than guessed at.", + "type": "string" +}
1 tool update
- Added
cromanion_errors
1 tool update
- Added
cromanion_ask_human
1 tool update
- Added
cromanion_install_check
2 tool updates
- Changed
cromanion_decide5 fields changed- added
Input schema / properties / allAdded value: +{ + "description": "Rule on every discovered page at once, ignoring `id`. observed_path only — the other kinds are decided one at a time, as in the console.", + "type": "boolean" +} - changed
Input schema / properties / decision / descriptionPrevious value: -"A status and nothing else — there is no way to edit an item's text here. `pause` applies only to a playbook_rule."New value: +"A status and nothing else — rule TEXT is edited by cromanion_set_playbook. `pause` applies only to a playbook_rule." - changed
Input schema / requiredPrevious value: -[ - "kind", - "id", - "decision" -]New value: +[ + "kind", + "decision" +] - added
Output schema / properties / ruledAdded value: +{ + "description": "Present with `all`: how many were ruled on. Zero is a success — there was nothing waiting.", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "kind", - "id", - "decision" -]New value: +[ + "ok", + "kind", + "decision" +]
- Added
cromanion_exclusions
3 tool updates
- Changed
cromanion_add_goal10 fields changed- added
Input schema / properties / goalIdAdded value: +{ + "description": "Change an EXISTING goal instead of creating one. Ids come from cromanion_config. With `remove: true` it stops counting that conversion; otherwise it applies the label, priority or dollarValue you send.", + "type": "string" +} - added
Input schema / properties / priorityAdded value: +{ + "description": "With goalId: 1 is the primary goal, ascending. Rejected rather than clamped if out of range.", + "type": "number" +} - added
Input schema / properties / removeAdded value: +{ + "description": "With goalId: stop counting that conversion. Nothing already measured is rewritten.", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "type" -]New value: +[] - changed
Output schema / properties / created / descriptionPrevious value: -"False when this site already counted that conversion. The call succeeded either way; nothing was duplicated."New value: +"Present on a create. False when this site already counted that conversion — the call succeeded either way and nothing was duplicated." - changed
Output schema / properties / label / descriptionPrevious value: -"Present when created: what your human will see it called."New value: +"What your human sees it called, after the change." - changed
Output schema / properties / note / descriptionPrevious value: -"Present when it already existed."New value: +"Present when nothing changed, saying why." - added
Output schema / properties / removedAdded value: +{ + "description": "Present when you sent remove: true.", + "type": "boolean" +} - added
Output schema / properties / updatedAdded value: +{ + "description": "Present on an edit: which fields changed.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "goalId", - "created" -]New value: +[ + "ok", + "goalId" +]
- Added
cromanion_mark_read - Added
cromanion_set_playbook
1 tool update
- Added
cromanion_config
17 tool updates
- Changed
cromanion_add_goal1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created": { + "description": "False when this site already counted that conversion. The call succeeded either way; nothing was duplicated.", + "type": "boolean" + }, + "goalId": { + "type": "string" + }, + "label": { + "description": "Present when created: what your human will see it called.", + "type": "string" + }, + "note": { + "description": "Present when it already existed.", + "type": "string" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "ok", + "goalId", + "created" + ], + "type": "object" +}
- Changed
cromanion_claim_domain1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "added": { + "description": "False when the host was already covered — not a failure.", + "type": "boolean" + }, + "claimed": { + "description": "Every host this site now listens to, after the change. The answer, whichever branch ran.", + "items": { + "type": "string" + }, + "type": "array" + }, + "note": { + "description": "Present when nothing changed, saying why — usually that a claimed domain already covers this subdomain.", + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "provedBy": { + "description": "Present when a fresh proof was read, which a different registrable domain requires.", + "enum": [ + "well_known", + "meta_tag", + "dns_txt", + "account_holder" + ], + "type": "string" + }, + "removed": { + "description": "Present on a removal: the host given up.", + "type": "string" + } + }, + "required": [ + "ok", + "claimed" + ], + "type": "object" +}
- Changed
cromanion_crawl1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "advanceUrl": { + "description": "POST this between status polls to advance the crawl yourself, instead of waiting for the cron.", + "type": "string" + }, + "ignored": { + "description": "What we could not use, handed back rather than dropped — you sent ten and kept eight, these are the two.", + "items": { + "type": "string" + }, + "type": "array" + }, + "ok": { + "type": "boolean" + }, + "priorityUrls": { + "description": "The paths we accepted and will read first.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "ok", + "priorityUrls", + "ignored" + ], + "type": "object" +}
- Changed
cromanion_decide1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "decision": { + "enum": [ + "approve", + "reject", + "pause" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "enum": [ + "edit_genre", + "playbook_rule", + "goal", + "observed_path" + ], + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "summary": { + "description": "What the ruling changed, in one line you can repeat to your human.", + "type": "string" + } + }, + "required": [ + "ok", + "kind", + "id", + "decision" + ], + "type": "object" +}
- Changed
cromanion_grants1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "granted": { + "description": "Only what you MAY do. A capability absent from this list is one to stop planning around.", + "items": { + "properties": { + "grant": { + "description": "The capability token, e.g. `goals`, matching what a refusal names in `neededGrant`.", + "type": "string" + }, + "label": { + "description": "What your human saw when they allowed it.", + "type": "string" + } + }, + "required": [ + "grant" + ], + "type": "object" + }, + "type": "array" + }, + "ok": { + "type": "boolean" + }, + "revoked": { + "description": "True once your human has ended this credential. Nothing else will work; do not retry.", + "type": "boolean" + } + }, + "required": [ + "ok", + "revoked", + "granted" + ], + "type": "object" +}
- Changed
cromanion_impact1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "impact": { + "description": "Exposed arm versus the held-back control. Read `liftStatus` FIRST — it decides whether the numbers beside it mean anything yet.", + "type": "object" + }, + "ok": { + "type": "boolean" + }, + "readMe": { + "description": "What each liftStatus means. `learn` = nothing shown yet, `insufficient` = arms too small to separate from noise. Neither is 'no lift'.", + "type": "string" + } + }, + "required": [ + "ok", + "impact" + ], + "type": "object" +}
- Changed
cromanion_lead_destination1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "changed": { + "description": "False when leads already went there. Nothing was emailed in that case.", + "type": "boolean" + }, + "destination": { + "description": "Where leads go now.", + "type": "object" + }, + "note": { + "description": "On a real change: that your human has been emailed and it is on their notifications screen. This is the one setting whose misuse leaves no other trace.", + "type": "string" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "ok", + "changed", + "destination" + ], + "type": "object" +}
- Changed
cromanion_open_claim1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "challenge": { + "description": "The random string to publish. It proves this claim and no other.", + "type": "string" + }, + "claimId": { + "description": "This claim's id, for your own logs.", + "type": "string" + }, + "domain": { + "description": "The domain we resolved from your siteUrl, and the one the proof must appear on.", + "type": "string" + }, + "expiresAt": { + "description": "ISO timestamp. Redeemable until then; after that, open another.", + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "proofs": { + "description": "The three ways to prove control, each with the exact URL and the exact string. Publish any ONE, then call cromanion_verify_claim.", + "type": "object" + }, + "secret": { + "description": "Shown ONCE. Store it now — we keep only its hash, so a lost secret means a new claim.", + "type": "string" + }, + "verifyUrl": { + "description": "The HTTP equivalent of cromanion_verify_claim, if you would rather curl it.", + "type": "string" + } + }, + "required": [ + "ok", + "claimId", + "secret", + "challenge", + "domain", + "expiresAt", + "proofs" + ], + "type": "object" +}
- Changed
cromanion_pending1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hint": { + "type": "string" + }, + "items": { + "description": "Everything waiting. Pass an item's kind and id back to cromanion_decide unchanged.", + "items": { + "properties": { + "decisions": { + "description": "The verbs THIS item accepts, so you never guess one.", + "items": { + "type": "string" + }, + "type": "array" + }, + "detail": { + "description": "What you are being asked to allow, in your human's terms.", + "type": "string" + }, + "evidence": { + "description": "Occurrences, sessions, confidence — when there are any.", + "type": "object" + }, + "id": { + "description": "Unique within its kind, not across kinds.", + "type": "string" + }, + "kind": { + "enum": [ + "edit_genre", + "playbook_rule", + "goal", + "observed_path" + ], + "type": "string" + }, + "title": { + "description": "Already resolved — never an id you have to look up.", + "type": "string" + } + }, + "required": [ + "kind", + "id", + "title", + "decisions" + ], + "type": "object" + }, + "type": "array" + }, + "notifications": { + "description": "Unread notes for your human. Not decisions — the other reason they would open the console.", + "items": { + "type": "object" + }, + "type": "array" + }, + "ok": { + "type": "boolean" + }, + "youMayDecide": { + "description": "Your own grants, echoed here so you do not rule on an item you will be refused for.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "ok", + "items", + "notifications", + "youMayDecide" + ], + "type": "object" +}
- Changed
cromanion_set_brand1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "button": { + "type": "object" + }, + "ok": { + "type": "boolean" + }, + "palette": { + "description": "The stored colours, by role.", + "type": "object" + }, + "typography": { + "type": "object" + }, + "version": { + "description": "Bumped on every save, so the edge picks the new tokens up.", + "type": [ + "string", + "number" + ] + } + }, + "required": [ + "ok", + "palette" + ], + "type": "object" +}
- Changed
cromanion_set_holdout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "holdoutShare": { + "description": "The share as APPLIED, clamped to 0.05–0.5. Read it rather than assuming your value was taken verbatim.", + "type": "number" + }, + "note": { + "description": "That this change split the measurement window, and what that means for later comparisons.", + "type": "string" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "ok", + "holdoutShare" + ], + "type": "object" +}
- Changed
cromanion_set_mode1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "changed": { + "description": "False when it already was what you asked for. Not a failure.", + "type": "boolean" + }, + "customizeMode": { + "enum": [ + "off", + "shadow", + "live" + ], + "type": "string" + }, + "mode": { + "description": "The mode as it now stands.", + "enum": [ + "learn", + "act" + ], + "type": "string" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "ok", + "changed", + "mode" + ], + "type": "object" +}
- Changed
cromanion_set_voice1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cleared": { + "description": "Present when you sent an empty string: the guidance is now empty.", + "type": "boolean" + }, + "lines": { + "description": "What SURVIVED grounding, not what you sent. Compare it with your input; anything missing was dropped as unverifiable.", + "items": { + "properties": { + "backedBy": { + "description": "What vouches for it — the site's own pages, or your human's assertion through you.", + "type": "string" + }, + "concepts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "description": "Whether it asserts a fact or forbids a phrase.", + "type": "string" + }, + "raw": { + "description": "The sentence, as you wrote it.", + "type": "string" + } + }, + "required": [ + "raw", + "kind" + ], + "type": "object" + }, + "type": "array" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "ok", + "lines" + ], + "type": "object" +}
- Changed
cromanion_site_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "account": { + "description": "Plan and billing state, or null if it cannot be read.", + "type": [ + "object", + "null" + ] + }, + "consoleUrl": { + "description": "Where your human signs in to see all of this.", + "type": "string" + }, + "crawl": { + "description": "Progress of the site read. While `status` is pending or running it carries `advanceUrl` — POST it between polls to advance the queue yourself.", + "type": [ + "object", + "null" + ] + }, + "humanNextStep": { + "description": "What is waiting on your human, in words you can repeat to them. Null when nothing is.", + "type": [ + "string", + "null" + ] + }, + "install": { + "properties": { + "docs": { + "type": "string" + }, + "lastBeaconAt": { + "type": [ + "string", + "null" + ] + }, + "lastBeaconOrigin": { + "description": "The host we actually heard from. When verified is false this is usually the whole answer: a staging domain, or a www the site does not serve.", + "type": [ + "string", + "null" + ] + }, + "publicKey": { + "type": "string" + }, + "snippet": { + "type": "string" + }, + "verified": { + "description": "A beacon arrived AND it came from this site's own domain. Both, or false — this is the field to poll.", + "type": "boolean" + } + }, + "required": [ + "publicKey", + "snippet", + "verified" + ], + "type": "object" + }, + "ok": { + "type": "boolean" + }, + "site": { + "properties": { + "createdAt": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "id": { + "type": "string" + }, + "mode": { + "enum": [ + "learn", + "act" + ], + "type": "string" + }, + "onboardingStep": { + "type": "string" + } + }, + "required": [ + "id", + "domain", + "mode" + ], + "type": "object" + } + }, + "required": [ + "ok", + "site", + "install" + ], + "type": "object" +}
- Changed
cromanion_surfaces1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "allowModal": { + "type": "boolean" + }, + "changed": { + "type": "boolean" + }, + "customCss": { + "description": "The CSS as STORED — compare with what you sent to see what the allowlist removed.", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Surfaces now in use.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "note": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "templates": { + "description": "Per-surface, what was kept and what was stripped from your markup.", + "type": "object" + } + }, + "required": [ + "ok", + "changed" + ], + "type": "object" +}
- Changed
cromanion_upgrade_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "checkoutUrl": { + "description": "A Stripe Checkout link. Give it to your human; you cannot complete it.", + "type": "string" + }, + "instructions": { + "description": "What to tell your human, in a sentence you can pass on unchanged.", + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "plan": { + "enum": [ + "pro", + "growth" + ], + "type": "string" + } + }, + "required": [ + "ok", + "plan", + "checkoutUrl" + ], + "type": "object" +}
- Changed
cromanion_verify_claim1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "install": { + "properties": { + "docs": { + "type": "string" + }, + "publicKey": { + "type": "string" + }, + "snippet": { + "description": "Paste this before </body> on every page. Do not assemble your own.", + "type": "string" + } + }, + "required": [ + "publicKey", + "snippet" + ], + "type": "object" + }, + "ok": { + "type": "boolean" + }, + "provedBy": { + "description": "Which of the three proofs we actually read.", + "enum": [ + "well_known", + "meta_tag", + "dns_txt", + "account_holder" + ], + "type": "string" + }, + "site": { + "properties": { + "domain": { + "type": "string" + }, + "id": { + "type": "string" + }, + "mode": { + "description": "Always `learn` for a new site.", + "enum": [ + "learn", + "act" + ], + "type": "string" + }, + "plan": { + "description": "Always `free` for a new account.", + "type": "string" + } + }, + "required": [ + "id", + "domain", + "mode" + ], + "type": "object" + }, + "status": { + "description": "`created` the first time, `existing` on a retry — the same account either way.", + "type": "string" + } + }, + "required": [ + "ok", + "status", + "site", + "install" + ], + "type": "object" +}
5 tool updates
- Changed
cromanion_decide3 fields changed- added
Input schema / properties / decision / descriptionAdded value: +"A status and nothing else — there is no way to edit an item's text here. `pause` applies only to a playbook_rule." - added
Input schema / properties / id / descriptionAdded value: +"The item's id, exactly as cromanion_pending returned it. Ids are not shared across kinds." - added
Input schema / properties / kind / descriptionAdded value: +"Which queue the item came from. Copy it back from cromanion_pending unchanged."
- Changed
cromanion_lead_destination1 field changed- added
Input schema / properties / kind / descriptionAdded value: +"Where leads go: `webhook` posts them to your `target` URL, `hubspot` to the connected portal, `off` stops delivery while forms keep working."
- Changed
cromanion_set_brand2 fields changed- added
Input schema / properties / bodyFont / descriptionAdded value: +"CSS font-family stack for body text, e.g. \"Inter, sans-serif\"." - added
Input schema / properties / headingFont / descriptionAdded value: +"CSS font-family stack for headings, e.g. \"Inter, sans-serif\"."
- Changed
cromanion_set_mode2 fields changed- added
Input schema / properties / customizeMode / descriptionAdded value: +"Rewriting your human's own page copy, a separate axis from `mode`: `off`, `shadow` (propose only, nothing shown) or `live`. Omit to leave it as it is." - added
Input schema / properties / mode / descriptionAdded value: +"`learn` watches and shows visitors nothing; `act` lets the agent intervene in your human's name. Omit to leave it as it is."
- Changed
cromanion_upgrade_link1 field changed- added
Input schema / properties / plan / descriptionAdded value: +"Which paid plan the link should check out: pro or growth. The site keeps working on free until your human completes it."
17 tool updates
- First observed
cromanion_add_goal - First observed
cromanion_claim_domain - First observed
cromanion_crawl - First observed
cromanion_decide - First observed
cromanion_grants - First observed
cromanion_impact - First observed
cromanion_lead_destination - First observed
cromanion_open_claim - First observed
cromanion_pending - First observed
cromanion_set_brand - First observed
cromanion_set_holdout - First observed
cromanion_set_mode - First observed
cromanion_set_voice - First observed
cromanion_site_status - First observed
cromanion_surfaces - First observed
cromanion_upgrade_link - First observed
cromanion_verify_claim
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
- RunCabinOAuthcom.runcabin
Put websites online from chat - instant free HTTPS, real domains, zero DNS or API-key setup.
Look up a domain's public Website Launches launch record, owner verification & trust context.
Launch and operate a SaaS from one conversation — domain, hosting, email, Stripe, ads, security.
Free AI-visibility and competitive Exposure Audit for any domain. No account, no API key.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables auditing any public website, returning a scored plain-English report that flags issues costing customers, covering speed, phone experience, search visibility, contact options, writing quality, and modernity.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI clients to perform domain verification, DNS lookup, and domain assessment via the Revnuvo x402 paid APIs, with automatic USDC micropayments on Base.-
- FlicenseNot gradedqualityFmaintenancePay-per-call API that verifies whether a domain belongs to a real business. Returns a verdict (real/likely_real/uncertain/likely_fake/fake), a 0-100 score, and signals (WHOIS via RDAP, SSL via Certificate Transparency, homepage LLM judgment, contacts, social) — for KYB, vendor screening, fraud checks, and lead qualification.-
- AlicenseNot gradedqualityBmaintenancePublish the website you built with AI to a live public URL — straight from chat, no setup. Enables deploying static sites and updating them with edit tokens.1MIT