Locus
Server Details
Pay-per-use APIs for agents: web research, data lookups, and metered endpoints billed to credits.
- Status
- Healthy
- Uptime
- 76.2% over 69 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- locus-technologies/locus-pro-plugin
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 22 tools
Most tools have sharply scoped roles (execute = one call, run_task = multi-call autonomy, workflow_run = saved code) and the descriptions explicitly cross-reference each other to route the agent. Minor confusion remains around get_balance vs show_account vs add_credits, and around the four workflow_* tools plus the router-prefixed search tool whose slug differs from its tool name.
Snake_case is universal, but the verb_noun convention breaks in several places: router_web_search sits beside web_extract/web_research with a different prefix, workflow_definition is a noun while siblings are verbs, and workflow_run (start) versus workflow_runs (inspect) differ only by plurality while doing different things. Core credit/call tools (get_balance, list_calls, get_call_result, pin_endpoint) are consistent, so it stays readable.
22 tools is heavy for a single server and includes several sub-clusters: five discovery tools (search_apis, describe_api, list_tool_groups, get_locus_guide, request_tool_access), four workflow tools, and four web tools. Each has a stated purpose, but the surface is broad enough that it sits at the upper bound of what an agent can hold in context comfortably.
The lifecycle is well covered: discovery, access approval, pinning, execution, result retrieval, billing, auditing, autonomous tasks, web research, and workflow authoring/validation/runs. The main gap is resource management — list_resources exists but release and renew are only reachable via raw POST endpoints rather than dedicated tools, forcing a detour through execute.
Available Tools
22 toolsadd_creditsAdd creditsAIdempotentInspect
Get a payment link for your human to add prepaid credits to this account. Use when get_balance is low or a call failed for insufficient credits. An agent-created account gets a 24-hour Stripe Checkout link; a person's account gets the billing page. Send human_message unchanged and never ask for card details. Charges nothing; the same idempotency_key returns the same link. Check get_balance after they pay.
| Name | Required | Description | Default |
|---|---|---|---|
| usd | Yes | Credits to add, in US dollars, e.g. "10". | |
| idempotency_key | No | Reuse to get the same link on retry. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Link for the human to open. |
| kind | Yes | |
| total_usd | No | Checkout total including any fee. |
| expires_at | No | |
| human_message | Yes | Send to the human as is. |
| funding_session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the call charges nothing, a 24-hour Stripe Checkout link is issued for agent-created accounts vs the billing page for a person's account, and the human must never be asked for card details. It also restates idempotency in operational terms ('the same idempotency_key returns the same link'), which concretizes the idempotentHint annotation rather than merely echoing 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?
Four short sentences, all front-loaded with the primary purpose and trigger first, and each earns its place except the 'human_message' instruction, which references a field the caller cannot see in the schema. Minor loss for that dangling reference.
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, return values need no explanation, and the description covers safety, cost, timing, and account-type branching well. The one gap is the unexplained 'human_message' hand-off: it is central to how the link reaches the human, yet it is absent from the schema and undefined in the description.
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 usd and idempotency_key are already documented, and the description adds only the idempotency-retry behavior already implied by the annotation. More concerning, it instructs 'Send human_message unchanged,' but no such parameter exists in the schema, which muddies rather than clarifies parameter meaning. 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?
States a specific verb and resource ('Get a payment link ... to add prepaid credits to this account') and immediately resolves the mismatch between the name add_credits and the actual behavior (returns a link, does not itself add credits). An agent can distinguish it from get_balance and the other siblings 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?
Explicit trigger conditions are given: 'Use when get_balance is low or a call failed for insufficient credits,' plus the follow-up step 'Check get_balance after they pay.' It names the sibling to consult both before and after, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_apiDescribe APIARead-onlyIdempotentInspect
Get one endpoint's full contract by slug: input schema, example, output shape, price. Use before the first execute or after an args rejection; get the slug from search_apis. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | provider/endpoint slug. | |
| model | No | Exact fal model ID. | |
| model_cursor | No | Fal page cursor. | |
| operation_query | No | Search operations or fal/generate models. | |
| operation_offset | No | MPP operation index or continuation offset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | No | |
| tool | No | |
| title | No | |
| inputSchema | No | |
| max_credits | No | |
| likely_credits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds a cost trait not present in annotations ('Free') and frames the retrieve-before-execute workflow. It stops short of noting auth requirements or rate limits, but with annotations doing that work a 4 is warranted.
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?
Two short sentences, zero filler, with the primary action ('get one endpoint's full contract by slug') front-loaded and the workflow guidance following. Every clause carries 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?
An output schema exists, so return values need no explanation, and the description covers when to call it and how to get the slug. The only residual gap is that the five-parameter schema hints at search/pagination behavior that the description doesn't reconcile with the 'one endpoint' framing.
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 slug, model, model_cursor, operation_query, and operation_offset are all documented in the schema; the baseline is 3. The description reinforces that the lookup is keyed by slug but does not explain why model/operation_query appear on a single-endpoint describe call.
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 one endpoint's full contract by slug') and enumerates what the contract contains (input schema, example, output shape, price). This is clearly distinguishable from siblings like search_apis (discovery) and execute (invocation).
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?
Gives explicit timing conditions ('before the first execute or after an args rejection') and names where to obtain the required slug ('get the slug from search_apis'). The workflow relationship to execute and search_apis is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
executeExecute API callADestructiveInspect
Call one enabled endpoint by slug with args from its schema; charges credits. Get the slug from search_apis. max_credits caps the charge. A stable idempotency_key makes retries exactly-once (idempotent_replay:true). Long results continue via get_call_result.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Endpoint args; call describe_api for schema. | |
| slug | Yes | provider/endpoint slug. | |
| loop_id | No | Agent loop ID when policy requires one. | |
| attribution | No | Spend attribution: taskId + feature (+ optional appVersion). | |
| max_credits | No | Most credits this call may charge. | |
| approval_token | No | From an approval error; send its idempotency_key. | |
| idempotency_key | No | Reuse on retry; charges once. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw provider response. |
| usd_charged | No | USD charged (secret-key auth only). |
| credits_balance | No | |
| credits_charged | No | |
| idempotent_replay | No | Stored replay; no new charge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=false, destructiveHint=true, openWorldHint=true), and the description adds real value beyond them: it discloses that the call charges credits, that max_credits caps the charge, and that a stable idempotency_key yields exactly-once retries surfaced as idempotent_replay:true — a conditional idempotency the flat idempotentHint=false cannot express. It omits the approval_token/approval-error flow, which is the one notable behavior left undisclosed.
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 tight clauses, front-loaded with the core action and cost, followed by discovery, cost-cap, idempotency, and continuation. No filler and no 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?
With an output schema present, the description needn't explain return values, and it still flags the idempotent_replay field and the long-result handoff. Combined with 100% schema coverage it is nearly complete; the missing piece is any mention of the approval_token / approval-error path, which an agent will only discover from the schema.
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 seven parameters; the description largely restates it (max_credits caps the charge, idempotency_key reused on retry). The only genuinely additive bit is the response field name idempotent_replay:true, which is output-side rather than parameter semantics. 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?
Specific verb+resource: 'Call one enabled endpoint by slug with args from its schema.' It immediately distinguishes itself from siblings by naming search_apis (for slug discovery) and get_call_result (for continuation). An agent can identify this as the single execution entry point 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?
Explicit routing: 'Get the slug from search_apis' tells the agent the prerequisite discovery step, and 'Long results continue via get_call_result' names the follow-up tool. It also states the cost-control condition ('max_credits caps the charge') and the retry condition for idempotency_key, so the when/how is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceGet balanceARead-onlyIdempotentInspect
Read the remaining credit balance: the pooled account, or one end user via external_user_id with a secret key. Use before a large spend or after an insufficient-credits error. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| external_user_id | No | End-user id; secret-key auth only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| credits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add cost/auth context — and it does: 'Free' and 'secret key' auth for the end-user scope. It does not discuss rate limits or eventual consistency of the balance, which keeps it out of 5 territory.
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 clauses: what it reads, how scope is selected, when to call it, plus a one-word cost note. Zero filler, and the primary purpose is front-loaded ahead of the usage triggers.
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?
An output schema exists, so return-format details are unnecessary here. Between the description and schema an agent knows both scopes, the auth mode each requires, the trigger conditions, and that the call is free — nothing needed to invoke 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 coverage is 100% and already documents external_user_id's type and auth requirement, so baseline is 3. The description goes beyond the schema by clarifying the default (omitting the parameter returns the pooled account balance rather than failing), which is behavioral meaning the schema does not encode.
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 concrete verb+resource ('Read the remaining credit balance') and immediately disambiguates the two scopes it can serve: the pooled account, or a single end user via external_user_id. An agent can distinguish it from the write-side sibling add_credits without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggers ('before a large spend', 'after an insufficient-credits error') that make the call condition actionable. It also states the auth precondition for the per-user mode. It stops short of naming an alternative tool or stating when not to use it, so it's strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_call_resultRead call resultARead-onlyIdempotentInspect
Read an earlier call's stored result by receipt ID in chunks (offset or page, max_characters); wait_seconds waits for a still-running call. Use when execute truncated the result. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Prior next_page. | |
| offset | No | Character offset; default 0. | |
| api_call_id | Yes | Receipt ID. | |
| wait_seconds | No | Async wait. | |
| max_characters | No | Default 8000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| chunk | No | |
| api_call_id | No | |
| total_characters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful context beyond those hints by explaining chunked reading, offset/page handling, async waiting, and that the operation is free.
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 single sentence is densely packed but front-loaded with the core action and receipt ID, then adds truncation, chunking, and wait behavior. Every clause carries operational 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?
The tool has an output schema, rich annotations, and fully documented parameters. The description supplies the missing usage context: when to call it, how chunking works, and what wait_seconds does.
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 still adds meaning by clarifying that results are read in chunks using offset or page and max_characters, and that wait_seconds controls waiting for a still-running call.
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: read a stored call result by receipt ID. It also distinguishes the tool from execute by saying to use it when execute truncated the result, so an agent can identify its role 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?
It gives a clear trigger condition: use when execute truncated the result, and explains that wait_seconds is for a still-running call. It does not state explicit exclusions or name alternative tools, but the operative context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locus_guideGet Locus guideARead-onlyIdempotentInspect
Fetch a Locus how-to guide as text when no Locus skill files are installed; otherwise prefer the skill. Omit id to list guides, or pass task to get the one for your goal. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Omit to list or pick by task. | |
| task | No | Your goal, to pick a guide. | |
| cursor | No | Prior next_cursor. | |
| section | No | Section ID; omit for all. | |
| version | No | Omit for latest. | |
| max_characters | No | Chunk size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| object | No | Guide index, recommendations, or page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds non-obvious context the annotation can't: output is text, cost is 'Free', and there is a preferred skill-file alternative. It does not mention pagination behavior via cursor or size limits, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler. The primary purpose and the alternative-skill condition are front-loaded before the parameter modes, so the most decision-relevant information comes first.
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?
An output schema exists, so return-value explanation is unnecessary, and all six parameters are documented in-schema. The description covers purpose, routing, and the skill fallback; only pagination/chunking behavior (cursor + max_characters interaction) is left to the schema, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter has a terse description ('Omit to list or pick by task', 'Your goal, to pick a guide', 'Prior next_cursor', etc.), so the schema carries the load. The description's id/task routing rule is genuinely useful but overlaps with the usage-guidance dimension, and it says nothing about cursor, section, version, or max_characters. Baseline 3.
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?
Specific verb + resource + format: 'Fetch a Locus how-to guide as text.' It also states scope (how-to guides, not API docs) and is easily distinguished from siblings like describe_api or search_apis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the when/when-not condition: use this 'when no Locus skill files are installed; otherwise prefer the skill.' It also gives mode selection (omit id to list, pass task for a goal-targeted guide), so an agent knows exactly which call shape to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_callsList callsARead-onlyIdempotentInspect
List recent billed calls, newest first, with call ID, endpoint, status, credits, and error summary. Use to audit spend or find an ID for get_call_result or report_bug; filter by status or provider. Free, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 10. | |
| cursor | No | Prior next_cursor. | |
| status | No | Default all. | |
| provider | No | Provider ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| calls | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: results are newest-first, the call is free (no credit cost), and it is paged. It does not quantify page size or cursor expiry, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler; the what/ordering/fields come first, then usage and filters. Every clause carries information the agent needs.
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?
An output schema exists, so return-value documentation is not the description's burden, yet it still names the key fields. Combined with the paging and free-operation notes and the sibling routing, an agent has everything needed to call this 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 all four parameters are documented in the schema and the baseline is 3. The description only restates that status and provider act as filters, adding intent but no syntax or format detail beyond the schema's enum and default notes.
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 ('List recent billed calls'), gives the ordering ('newest first'), and enumerates the returned fields (call ID, endpoint, status, credits, error summary). It also names the sibling tools that consume the resulting ID, so an agent can distinguish it from get_call_result and report_bug without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names two use cases ('audit spend' and 'find an ID for get_call_result or report_bug') and the filter axes (status, provider), which is clear routing guidance. It stops short of stating when NOT to use it or what the alternative is for a full-text or user-scoped search, so it falls just short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesList resourcesARead-onlyIdempotentInspect
List durable resources your calls created that persist, expire, or keep costing, such as AgentMail inboxes, phone numbers, and E2B sandboxes, with service, status, and expiry. Use to find what to release or renew (POST /credits/resources/{id}/release or /renew); listing changes nothing. Free, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | next_cursor from the last page. | |
| status | No | Defaults to all. | |
| service | No | Service name or provider slug. | |
| end_user | No | Only rows for this end user. |
Output Schema
| Name | Required | Description |
|---|---|---|
| resources | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description still adds real context beyond them: 'listing changes nothing', that the operation is 'Free', and that results are 'paged'. It does not describe pagination mechanics or rate limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the resource list is, then the action guidance, then cost/paging in three clipped fragments. Dense but every clause carries information; the trailing 'Free, paged.' is terse but purposeful.
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, return values need no explanation, and the description still adds useful field names, cost, and pagination behavior. It also points to the mutation endpoints for release/renew, so an agent has everything needed to call and act on 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?
Schema description coverage is 100%, so cursor, status, service and end_user are already documented in the schema, and the description adds no filtering syntax or defaults beyond that. The mention of 'service, status, and expiry' describes returned columns rather than input parameters, 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?
Names a specific verb (List) and a precise resource class (durable resources created by your calls that persist, expire, or cost money), reinforced with concrete examples (AgentMail inboxes, phone numbers, E2B sandboxes) and the fields returned. An agent can distinguish this from list_calls or get_balance 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?
States the decision context clearly: use it to find what to release or renew, and even names the follow-up endpoints (POST /credits/resources/{id}/release or /renew). It also rules out side effects with 'listing changes nothing'. No explicit when-not-to-use or sibling alternative is given, but the routing intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tool_groupsBrowse tool groupsARead-onlyIdempotentInspect
Browse catalog categories and packs (curated endpoint bundles) to orient before search_apis. Lists only: it enables nothing (use request_tool_access) and calls nothing (use execute). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| query | No | Name filter. | |
| cursor | No | Prior next_cursor. | |
| group_type | No | Group type. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| groups | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds genuinely new context beyond those: the operation is free, and it is purely observational with no access-granting or execution side effects. It does not cover pagination behavior, but the output schema handles the return shape.
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 clauses, front-loaded with the purpose before the parenthetical disambiguation and the negative boundaries. Every sentence earns its place with 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?
For a read-only list tool with full schema coverage, rich annotations, and an output schema, the description supplies everything an agent needs: purpose, orientation role in the workflow, and explicit side-effect boundaries.
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 limit, query, cursor, and group_type are already fully documented in the schema. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (browse) with a specific resource (catalog categories and packs), and defines what a pack is ('curated endpoint bundles'). It explicitly names the sibling tools it is not: search_apis, request_tool_access, execute.
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?
States when to use it ('to orient before search_apis') and draws explicit negative boundaries: it enables nothing (use request_tool_access) and calls nothing (use execute). Both the condition and the alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_endpointPin endpointAIdempotentInspect
Pin (pinned:true, the default) or unpin one enabled endpoint so it appears as its own typed tool on every MCP connection of this workspace instead of going through execute. Use for endpoints you call repeatedly. Each pin adds its schema to every session's context, so the first pin requires acknowledge_context_cost:true. Persistent and workspace-wide; does not enable or call the endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Exact provider/endpoint slug. | |
| pinned | No | True to pin (default), false to unpin. | |
| acknowledge_context_cost | No | Required once: pinned schemas use model context on every connection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | No | |
| pinned | No | |
| pinned_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only covering the safety profile, the description adds substantial context: persistence, workspace-wide scope, the context-cost consequence on every session, and the first-pin acknowledge_context_cost:true prerequisite. These are behavioral traits not derivable from 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 sentences, front-loaded with the core action and default, then scope, then the prerequisite. No filler and nothing repeated.
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?
An output schema exists so return values need no explanation, and the description covers mutation semantics, scope, and the one-time acknowledgement prerequisite. Nothing needed to invoke 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%, so the schema already documents all three parameters. The description reinforces the acknowledge_context_cost requirement and the pinned default, but adds little syntax or meaning beyond the schema's own 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?
States a specific verb (pin/unpin), the resource (one enabled endpoint), and the precise effect (appears as its own typed tool on every MCP connection instead of going through execute). This clearly differentiates it from the execute sibling.
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?
Gives a clear when-to-use rule ('Use for endpoints you call repeatedly') and implicitly routes one-off calls to execute. It also states what the tool does not do ('does not enable or call the endpoint'), though it never names a negative alternative explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugReport a bugAInspect
File a bug report with the Locus team after a wrong result or error; include call_id and tool so it can be traced. Charges nothing, does not retry or refund, and gets no in-session reply.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Tool name. | |
| call_id | No | Call ID. | |
| context | No | JSON, max 8 KB. | |
| message | Yes | What went wrong. |
Output Schema
| Name | Required | Description |
|---|---|---|
| received | No | |
| report_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only say non-readOnly, non-idempotent, non-destructive) by disclosing cost ('charges nothing'), the absence of retry/refund side effects, and that no in-session reply is returned. These are exactly the behavioral traits an agent needs before invoking a fire-and-forget reporting 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?
A single dense sentence: trigger, action, required traceability fields, and behavioral caveats, all front-loaded with zero 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?
An output schema exists so return values need no explanation, and the description pre-empts the main agent confusion ('no in-session reply') for a non-readOnly, non-idempotent reporting tool. Nothing material is missing for correct invocation.
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 four parameters. The description only adds the motivation for call_id and tool ('so it can be traced') and says nothing about the message or context payload. Baseline 3 is appropriate when the schema carries the 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?
States a specific verb and resource ('File a bug report with the Locus team') plus the triggering condition ('after a wrong result or error'). It is clearly distinguishable from siblings like get_call_result, list_calls, or execute, none of which file reports.
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?
Gives a clear when-to-use trigger (after a wrong result or error) and an implied not-to-use for normal successful flows. It does not explicitly name a sibling alternative or exclusion, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_tool_accessRequest tool accessAInspect
Create a short-lived approval link for one disabled (enabled:false) endpoint; send its URL to a human, who enables it. On an account your agent credential created that no person has claimed yet, it enables the endpoint at once (status enabled). Calls nothing; free.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Exact provider/endpoint slug returned by search. | |
| reason | No | Why you need it, shown to the human. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | No | |
| status | No | already_enabled, enabled, pending_human_approval, approved, denied, or expired. |
| request_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say non-read-only, non-destructive, non-idempotent, closed-world), the description discloses that the grant is short-lived, that approval is human-mediated in the normal case, and that an unclaimed agent-created account enables immediately. 'Calls nothing; free' rules out upstream invocation and billing side effects, which is genuinely useful context.
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?
Two dense sentences with the primary case front-loaded and the exception second; no filler. The telegraphic clauses ('status enabled', 'Calls nothing; free') are terse but readable, and nothing appears 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?
An output schema exists, so return values need not be explained, and the description covers both outcome branches of calling it. Minor gaps remain: behavior when the endpoint is already enabled, or what happens when the link expires or is denied.
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 both the exact provider/endpoint slug pattern and the 'reason' field (shown to the human) are already documented in the schema. The description reinforces that exactly one endpoint is targeted but adds no syntax or format detail 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?
The description states a concrete verb and resource: creating a short-lived approval link for a single disabled endpoint, plus the alternate auto-enable path. It is clearly distinct from execution-oriented siblings like execute or run_task, though it never names any sibling explicitly.
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 is implied by the scoping constraint ('one disabled (enabled:false) endpoint'), so an agent can infer this is the path when an endpoint is unavailable. It gives no explicit when-not guidance and does not point at alternatives such as execute, describe_api, or search_apis for other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
router_web_searchLocus Web SearchAInspect
Search the live web and return a ranked, deduplicated list of sources (title, URL, snippet) merged from several search providers; no language model summarizes on this path. Use when you need links to cite or read next; use router/web-research for a synthesized answer and router/web-extract to read URLs. Billed per fulfilled provider call; mode fast, balanced, or comprehensive sets provider breadth and cost, and maxCredits caps the total. rails and strategy are legacy fields; prefer mode. Usually costs ~10.1 credits per call. The result reports credits charged.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | balanced | |
| query | Yes | Search or research request. | |
| rails | No | Legacy access-path field retained for compatible clients. | |
| topic | No | general | |
| _locus | No | Optional Locus execution controls; provider arguments remain top-level. | |
| country | No | ||
| strategy | No | Legacy mode selector retained for compatible clients. | |
| providers | No | ||
| maxCredits | No | Aggregate hard charge ceiling in workspace credits. Decimal strings support up to six fractional digits; numeric values are rounded down to six digits. | |
| maxResults | No | ||
| attribution | No | Optional JSON ledger metadata such as a task or customer identifier. | |
| recencyDays | No | ||
| maxProviders | No | ||
| includeImages | No | ||
| excludeDomains | No | ||
| externalUserId | No | Optional end-user billing attribution for a tenant secret key. | |
| includeDomains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw provider response. |
| usd_charged | No | USD charged (secret-key auth only). |
| credits_balance | No | |
| credits_charged | No | |
| idempotent_replay | No | Stored replay; no new charge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=true and idempotentHint=false; the description adds the reason for the non-read-only flag (billed per fulfilled provider call), a concrete cost estimate (~10.1 credits), how mode drives provider breadth and cost, how maxCredits caps spend, and that the result reports credits charged. It also flags rails/strategy as legacy, which structured fields cannot express. Minor gap: the schema exposes an idempotency_key while idempotentHint=false, and the description does not reconcile that for retry 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?
Two front-loaded sentences; purpose comes first, then alternatives, then billing. The second sentence is dense with semicolon-chained clauses (billing, mode, maxCredits, legacy fields, cost estimate), which is efficient but slightly harder to scan than a short bulleted 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?
For a 17-parameter, cost-bearing tool with an output schema, the description covers what the output schema cannot: routing versus siblings, spend semantics, and deprecation of legacy fields. It leaves the geo/recency/domain-filter parameters and the idempotency question unaddressed, so it is strong but not fully complete.
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 17 parameters and only 41% schema description coverage, the description compensates for the highest-risk fields: it explains mode's fast/balanced/comprehensive trade-off between provider breadth and cost, that maxCredits is a total ceiling, and that rails/strategy are legacy with 'prefer mode'. It says nothing about topic, country, recencyDays, maxResults, maxProviders, includeImages, include/excludeDomains, providers, attribution, or externalUserId, which remain undocumented in both places.
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 (search the live web) plus the exact return shape (ranked, deduplicated sources with title, URL, snippet merged from several providers) and explicitly notes no LLM summarization on this path. That negative clause alone separates it from web_research and web_extract.
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?
Gives an explicit when: 'use when you need links to cite or read next', and names two alternatives with the condition that selects each (web-research for a synthesized answer, web-extract to read URLs). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_taskRun a taskAInspect
Use this first whenever a request needs more than one API call: lists of companies or people, enrichment (founders, emails, funding), multi-source research or comparisons with sources, figures from filings, reading several pages, or any CSV/table deliverable. Give the goal in plain language (for example "find 10 Series A hardware companies in Los Angeles with founders' verified work emails as a CSV" or "compare Vercel, Netlify and Render free-tier limits with source links"); Locus finds and calls the right APIs with this account's credits and spending controls, checks the result, and returns structured data, files, sources, and cost. Use execute only for a single call. If it returns status running, call again with action "wait" and the task_id instead of resubmitting.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | What you want done, in plain language. Required to start a task. | |
| action | No | Omit to start a task. Use with task_id to wait, check, cancel, answer a question (respond), or resume. | |
| answer | No | Your answer when the task asks a question. | |
| inputs | No | Optional data for the task, such as URLs, names, or records. | |
| output | No | Optional output preferences. | |
| task_id | No | Task to continue; required with action. | |
| max_credits | No | Hard cap on total task spend in credits, not USD: 1,000 credits = 1 USD unless the account sets another rate. Default 5 USD worth (5000 at that rate), minimum 0.10 USD worth. | |
| wait_seconds | No | How long to wait for completion in this call (default 45). | |
| idempotency_key | No | Reuse to make retried submissions return the same task. | |
| deadline_seconds | No | Stop and deliver what is verified after this many seconds (default 900). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Structured data or answer. |
| status | No | queued, running, needs_input, completed, partial, unsupported, failed, or canceled. |
| task_id | No | Durable task id. |
| artifacts | No | Files with download_url. |
| continuation | No | How to continue this task, if anything remains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-read-only, open-world operation; the description adds substantive context beyond that: it spends this account's credits under spending controls, verifies results, and returns sources and cost. The async contract (status running → call again with action 'wait' and task_id) is disclosed, which annotations do not cover. It stops short of describing failure/partial-failure behavior or whether a cancelled task still incurs charges.
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 routing rule and cost/verification behavior are front-loaded, and the trailing sentence about 'wait' is actionable rather than filler. The two inline examples are slightly verbose but earn their place by demonstrating the expected goal phrasing.
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 10-parameter, nested-schema, open-world orchestration tool with an output schema, this covers the essentials an agent needs: when to choose it, how to phrase the goal, what it costs, and how to handle the asynchronous lifecycle. Return value details are correctly left to the output schema.
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 schema already defines each parameter, but the description adds real meaning: 'goal' is described as plain language with two concrete example phrasings, and the submit/wait/task_id interplay is explained procedurally rather than just field-by-field. It does not elaborate on how max_credits interacts with the default or how deadline_seconds affects partial delivery.
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 scope: it finds and calls the right APIs to accomplish a multi-step goal, returning structured data, files, sources, and cost. It explicitly contrasts with the sibling 'execute' for single calls, so an agent can route correctly without opening both schemas.
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?
Gives an explicit precedence rule ('Use this first whenever a request needs more than one API call'), enumerates the qualifying scenarios (lists, enrichment, multi-source research, filings, CSV deliverables), and names the alternative ('Use execute only for a single call'). It also tells the agent what to do on a running status instead of resubmitting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apisSearch APIsARead-onlyIdempotentInspect
Find a live data API for any external fact: social profiles and followers, Google Maps places and reviews, keyword search volume and web traffic, people and verified work emails, company data, stock, crypto and FX prices, SEC filings, weather, flights, products, news and jobs. Use it before scraping a site with curl or answering from memory. Query by outcome (e.g. "twitter user followers"); returns slug, price and enabled state, enabled first. Free. Then describe_api for the schema and execute. For an outcome that needs several calls, use run_task instead.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | No | Canonical curated-pack ID or an unambiguous live pack alias. | |
| limit | No | Results: default 5, max 50. | |
| query | No | Outcome or provider search phrase. Optional when category or pack is supplied. | |
| cursor | No | Opaque next_cursor from a prior search with the same filters. | |
| enabled | No | Filter to enabled or disabled endpoints. Defaults to true; pass "all" to include both, ranked enabled-first. | |
| category | No | Canonical category ID or an unambiguous live category alias. | |
| include_facets | No | Include bounded principal-scoped category and pack counts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive and closed-world behavior, so the bar is lower, yet the description still adds cost ("Free"), result shape (slug, price, enabled state), and ranking behavior (enabled first). Nothing here contradicts 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 routing advice and chaining instructions are front-loaded and every clause is actionable. The long domain enumeration is dense and slightly list-like, but each domain keyword supports semantic matching, so it largely earns its space.
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 full schema coverage, an output schema, and complete annotations, the description only needs to supply selection and sequencing context, which it does. Chaining to describe_api/execute/run_task and the free/ranked return shape make the definition self-sufficient.
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 documented parameters set the baseline at 3, but the description adds meaning beyond it by explaining that queries should be phrased as outcomes ("twitter user followers") rather than provider names. It says nothing extra about pack, category, cursor, or include_facets, leaving those to 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?
The description opens with a concrete verb-plus-resource ("Find a live data API") and enumerates the domains it covers, so an agent can tell instantly whether this tool serves its need. It also differentiates itself from "scrape with curl", "answering from memory", and from siblings describe_api, execute, and run_task.
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 it (before scraping or answering from memory), what to do next (describe_api for schema, then execute), and which alternative to pick when an outcome spans multiple calls (run_task). That is explicit when-to-use, when-not, and alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_accountShow accountARead-onlyIdempotentInspect
Show the human an account panel: balance, add credits, enabled tools, pending tool approvals, and recent calls. Use when they ask to see their account, usage, or approvals; free and read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | Default activity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| balance | No | |
| recent_calls | No | |
| pending_approvals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, idempotent, non-destructive). The description adds meaningful extra context: it renders a panel to the human rather than returning machine data, and it is 'free,' which matters because several siblings (execute, web_search) incur cost.
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?
Two tightly packed sentences, front-loaded with the core action and contents, followed immediately by the when-to-use clause. The section enumeration is long but each item earns its place by telling the agent what the panel surfaces.
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 and annotations covering safety, the description needn't explain returns. It covers contents, trigger conditions, and cost, leaving only sibling-alternative routing unaddressed.
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?
One optional enum parameter at 100% schema coverage ('Default activity.'), so the schema already carries the semantics. The description's section list loosely maps to the tabs but adds no format or default details beyond the schema, making baseline 3 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?
States a specific verb and resource ('Show the human an account panel') and enumerates exactly what the panel contains, making it clearly distinct from data-returning siblings like get_balance and list_calls — this renders a UI surface rather than returning raw data.
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?
Explicit when-to-use is given: 'Use when they ask to see their account, usage, or approvals.' It does not name alternatives (e.g., get_balance for programmatic reads), so the boundary against overlapping siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extractLocus Web ExtractAInspect
Read the full content of one to twenty exact public URLs you already have and return each page's text, or structured JSON via json. Use after a search produced URLs or when the user supplies links; it never searches or substitutes other pages, so use router/web-search or router/web-research to find sources first. Billed per URL; maxCredits caps the total. In text mode a second extractor retries only the URLs the first one fails; json mode uses a single extractor with no retry. Usually costs ~1.01 credits per call. The result reports credits charged.
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | Return structured JSON for each URL in one step instead of page text. Pass a prompt, a JSON Schema, or both. Cannot be combined with objective. | |
| urls | Yes | Exact public HTTP(S) resources to read. The router never substitutes another URL. | |
| _locus | No | Optional Locus execution controls; provider arguments remain top-level. | |
| objective | No | Optional focus within each supplied resource; it does not authorize discovery. | |
| maxCredits | No | Aggregate hard charge ceiling in workspace credits. Decimal strings support up to six fractional digits; numeric values are rounded down to six digits. | |
| attribution | No | Optional JSON ledger metadata such as a task or customer identifier. | |
| maxAgeSeconds | No | Maximum accepted cache age. Omit to use each extractor default. | |
| externalUserId | No | Optional end-user billing attribution for a tenant secret key. | |
| maxCharactersPerUrl | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw provider response. |
| usd_charged | No | USD charged (secret-key auth only). |
| credits_balance | No | |
| credits_charged | No | |
| idempotent_replay | No | Stored replay; no new charge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses per-URL billing, that maxCredits is a hard aggregate ceiling, the retry asymmetry (text mode retries only failed URLs with a second extractor, json mode uses a single extractor with no retry), the typical ~1.01 credit cost, and that the result reports credits charged. This is exactly the cost/retry information an agent needs before spending credits, and nothing contradicts readOnlyHint=false / idempotentHint=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?
Front-loaded with the core action, then usage routing, then billing and retry semantics in descending importance. Dense but every sentence carries operational information; the cost figure and retry clause could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needs no explanation, and the description still covers the non-obvious pieces: spend limits, retry behavior by mode, and cost per call. Only edge details such as failure/error outcomes for individual URLs are left unstated.
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 89%, so the schema already explains json, urls, maxCredits, maxAgeSeconds and the Locus controls. The description adds only the 1–20 URL bound and that maxCredits caps the total, which is largely redundant with the schema's minItems/maxItems and its own description.
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 ('Read the full content of one to twenty exact public URLs') and names the two output shapes (page text or structured JSON via json). The 'never searches or substitutes other pages' clause separates it cleanly from the router search/research 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?
Gives an explicit trigger ('Use after a search produced URLs or when the user supplies links') and an explicit alternative for the other case ('use router/web-search or router/web-research to find sources first'). The boundary between extracting and discovering is stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_researchLocus Web ResearchAInspect
Get a grounded, current answer with inline source references: Locus searches the live web, reads sources, and synthesizes the answer. Use when you need an answer, not a list of links; use router/web-search for sources only and router/web-extract to read known URLs. effort light (default, fixed price), medium, or heavy sets depth and cost; maxCredits caps the charge. Always pass effort with maxCredits or search filters, or the call takes the legacy sources-only path and returns no answer. Usually costs ~10.1 credits per call. The result reports credits charged.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | balanced | |
| query | Yes | Search or research request. | |
| rails | No | Legacy access-path field retained for compatible clients. | |
| topic | No | general | |
| _locus | No | Optional Locus execution controls; provider arguments remain top-level. | |
| effort | No | Grounded answer tier. Defaults to light, priced up front. Without effort, maxCredits or search filters such as includeDomains keep the legacy evidence-only contract. | |
| country | No | ||
| strategy | No | Legacy mode selector retained for compatible clients. | |
| providers | No | ||
| maxCredits | No | Aggregate hard charge ceiling in workspace credits. Decimal strings support up to six fractional digits; numeric values are rounded down to six digits. | |
| maxResults | No | ||
| attribution | No | Optional JSON ledger metadata such as a task or customer identifier. | |
| recencyDays | No | ||
| maxProviders | No | ||
| outputSchema | No | Optional bounded JSON object schema for the answer. Requires effort and preserves the same grounded-reference envelope. | |
| includeImages | No | ||
| excludeDomains | No | ||
| externalUserId | No | Optional end-user billing attribution for a tenant secret key. | |
| includeDomains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw provider response. |
| usd_charged | No | USD charged (secret-key auth only). |
| credits_balance | No | |
| credits_charged | No | |
| idempotent_replay | No | Stored replay; no new charge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true and idempotentHint=false, so safety is covered. The description adds genuinely valuable non-schema behavior: the ~10.1 credit cost per call, the fixed-price nature of the light tier, that the result reports credits charged, and the legacy-path trap. However, it discloses nothing about how charges are incurred on failure or partial results, which matters for a metered, non-idempotent call.
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 outcome, then routing, then cost and the legacy-path constraint – all in roughly 90 words with no filler. The cost/dependency rule is compressed into one dense sentence that an agent may need to reread, but nothing 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?
An output schema exists, so return-value explanation is rightly omitted, and the description still flags the credits-charged field. For a 19-parameter tool it covers the highest-stakes parameters (effort, maxCredits, filter fields) but says nothing about topic, recencyDays, maxResults, providers, outputSchema's effort dependency, or the mode/strategy fields.
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 only 47% schema coverage across 19 parameters, the description earns credit for explaining that effort controls depth and cost (light default, fixed price), that maxCredits is a hard ceiling, and that 'search filters' such as includeDomains also bypass the legacy path. It leaves the mode enum (fast/balanced/comprehensive) and the legacy strategy field unexplained, which is a real gap given they overlap conceptually with effort.
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 first sentence names a specific verb and deliverable ('Get a grounded, current answer with inline source references') and explains the mechanism (searches, reads sources, synthesizes). It explicitly separates itself from router/web-search ('sources only') and router/web-extract ('read known URLs'), so an agent can route without opening a 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?
Gives an explicit when-to-use condition ('when you need an answer, not a list of links') and names two alternative tools with their selection criteria. It also adds a critical operational warning: without effort plus maxCredits or search filters, the call silently falls back to a sources-only result with no answer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_definitionManage Workflow definitionAInspect
Manage customer-owned Workflow code: list, create, update, get, clone, archive, or save. Use for authoring and versioning only; use workflow_validate to check code and workflow_run to execute it. save publishes one exact draft revision and requires that revision to have passed workflow_validate. None of these actions runs code or charges credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional new Workflow name for clone. | |
| view | No | Response detail for get; defaults to summary. Full includes bounded source, versions, and validations. | |
| limit | No | Page size for list: max 100. | |
| query | No | Optional case-insensitive name filter for list. | |
| action | Yes | Lifecycle action. Its required fields are described below. | |
| cursor | No | Opaque next_cursor returned by a prior list with the same filters. | |
| source | No | Complete inline files or a tenant-owned artifact for create/update; mutually exclusive with source_patch. Prefer the artifact returned by a successful inline check. | |
| status | No | Definition status filter for list; defaults to active. | |
| revision | No | Exact current draft revision for update, archive, or save. | |
| workflow_id | No | Required for get, update, clone, archive, and save. | |
| source_patch | No | Path-scoped update retaining omitted draft files. Pass exactly one of files (whole-file replace/delete) or edits (exact text replacement); the server enforces exclusivity for schema-simplifying hosts. | |
| idempotency_key | No | Stable key for create, clone, or update retries. It is stored only as a one-way hash. | |
| expected_revision | No | Compatibility alias for revision on update, archive, or save; prefer revision. | |
| validated_source_digest | No | For create: digest from a successful inline check. Matching source is rechecked and recorded as revision 1 evidence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| version | No | Saved version, when saving. |
| workflow | No | Workflow definition summary or full draft. |
| workflows | No | Definition summaries, when listing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely useful context beyond them: no action runs code or charges credits, and save publishes exactly one draft revision that must already be validated. It stops short of clarifying archive reversibility or required permissions, hence a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose then routing, then the save precondition, then the side-effect disclaimer. Every sentence earns its place with no 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 14-parameter, 7-action tool with nested objects, the description adequately covers purpose, sibling routing, and the key save precondition, and an output schema exists so return values need not be described. It does not map which parameters apply to which of the seven actions, a modest remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented in the schema. The description only lightly reinforces semantics ('save publishes one exact draft revision' maps to revision), adding little beyond structured data. 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?
States a specific resource (customer-owned Workflow code) and enumerates the exact lifecycle verbs (list, create, update, get, clone, archive, save). It explicitly distinguishes itself from workflow_validate and workflow_run, so an agent can route 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?
Provides explicit when-to-use and when-not-to-use: 'Use for authoring and versioning only; use workflow_validate to check code and workflow_run to execute it.' It also states the precondition that save requires the revision to have passed validation, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_runRun WorkflowADestructiveIdempotentInspect
Queue a run of one exact saved Workflow version. mode pilot is an isolated trial; mode run is production. max_charge_credits is a hard ceiling for the whole run. idempotency_key is required: resubmitting with the same key replays the existing run (replay:true) instead of starting another. Returns the run summary and poll_after_ms; follow progress, results, cancel, or resume with workflow_runs.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | pilot for an isolated trial run, run for production. | |
| input | No | Inline Workflow input; mutually exclusive with input_artifact_id. | |
| action | No | Optional symmetry alias. Omit it or pass submit. | |
| version | Yes | Exact immutable saved version; latest is not accepted. | |
| max_rows | No | Maximum result rows: max 10000. | |
| workflow_id | Yes | Workflow ID that owns the saved version. | |
| idempotency_key | Yes | Stable exactly-once retry key for submit. | |
| input_artifact_id | No | Tenant-owned artifact holding the Workflow input. | |
| max_charge_credits | Yes | Positive decimal hard cap for the complete run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | No | Run summary. |
| replay | No | True when an identical submit was replayed. |
| poll_after_ms | No | Suggested poll delay for queued runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint and destructiveHint, so the bar is lower, and the description usefully goes beyond them: it explains that a repeated idempotency_key replays the existing run (replay:true) rather than starting another, and that max_charge_credits is a hard ceiling for the whole run. It does not cover auth/permission requirements or what state changes occur, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each earning its place: purpose first, then mode semantics, then the credit cap, then idempotency and follow-up routing. No filler 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 9-parameter mutation tool with an output schema, the description supplies the operational context an agent needs: mode choice, cost ceiling, exactly-once retry behavior, and where to go next for run lifecycle operations. Return-value explanation is unnecessary given the output schema, and nothing material 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, but the description adds real meaning beyond the schema: it defines pilot vs run semantics, frames max_charge_credits as a hard run-wide ceiling, and clarifies the replay behavior of idempotency_key. It adds value on the semantically tricky parameters rather than merely restating them.
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 ('Queue a run of one exact saved Workflow version'), and the emphasis on 'exact saved version' distinguishes it from siblings like workflow_validate or workflow_definition. An agent can identify the operation 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?
Explicitly explains the pilot-vs-run selection condition and routes follow-up work (progress, results, cancel, resume) to workflow_runs, which is a clear alternative. It stops short of an explicit when-not to use it (e.g., validating a definition first), so it is strong but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_runsInspect or control Workflow runADestructiveIdempotentInspect
Inspect and control runs started by workflow_run: list runs, get one run's bounded status, page a stored provider-call response (call) or artifact without a new charge, cancel pending dispatch, or resume an eligible paused run with current authorization. Use for everything after a run is queued; use workflow_run to start one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size for list: max 100. | |
| action | Yes | list, get, call, artifact, cancel, or resume. | |
| cursor | No | Opaque next_cursor from a prior list with the same filters. | |
| run_id | No | Run ID; required for get, call, artifact, cancel, and resume. | |
| call_id | No | Required for call; use an ID returned by get. | |
| artifact_id | No | Artifact ID; required for artifact. | |
| max_characters | No | Characters: min 1024, max 20000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | No | Run detail, when getting or controlling. |
| call | No | Stored provider-call page, when reading one. |
| runs | No | Run summaries, when listing. |
| artifact | No | Stored artifact page, when reading one. |
| result_page | No | Bounded run result, when getting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context well beyond the annotations: call/artifact paging happens 'without a new charge' (cost behavior), get returns a 'bounded status', cancel only affects 'pending dispatch' (scope of the destructive operation), and resume needs 'current authorization'. These disclosures are non-obvious and directly useful for safe invocation.
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?
Two sentences, zero filler, with the action inventory front-loaded and the routing rule in the closing clause. Every phrase carries distinct 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 an output schema present and annotations covering safety, the description supplies the remaining essentials: all six actions, their scope, cost behavior, and the sibling routing rule. Nothing an agent needs to select or invoke this 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%, so the schema already documents every parameter, including run_id/call_id/artifact_id requirements. The description adds only marginal tying of call_id and artifact_id to the call/artifact actions, so 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?
Names a specific verb pair (inspect/control) and the exact resource class (runs started by workflow_run), then enumerates all six actions in verb+object form that map to the action enum. It explicitly separates itself from the sibling workflow_run ('use workflow_run to start one').
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?
Gives an explicit lifecycle boundary: 'Use for everything after a run is queued; use workflow_run to start one.' The alternative is named and the selecting condition is stated, and eligibility constraints are noted for resume ('eligible paused run with current authorization').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_validateValidate WorkflowAInspect
Check Workflow code without a production run. mode check validates inline source (before it is persisted) or one exact draft revision; mode fixtures runs that revision against isolated, no-network fixtures. Use before workflow_definition save, which requires a passing check, and before workflow_run. Makes no provider calls, so nothing is charged.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | check accepts either inline source or workflow_id plus revision. fixtures always requires workflow_id plus revision. | |
| source | No | Inline files or tenant-owned artifact for a pre-persistence check; mutually exclusive with workflow_id and revision. A successful inline check returns source_artifact_id. | |
| revision | No | Required with workflow_id for persisted draft checks and fixtures; exact current draft revision to validate. | |
| fixture_set | No | Optional named fixture export; valid only with persisted draft identity. | |
| workflow_id | No | Required with revision for persisted draft checks and fixtures; omit only for an inline source check. |
Output Schema
| Name | Required | Description |
|---|---|---|
| validation | No | Check or fixture outcome. A successful inline check includes source_artifact_id for exact reuse during definition creation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: no provider calls means nothing is charged, and fixtures run in an isolated no-network environment. This is consistent with readOnlyHint=false, since a successful inline check evidently produces a source_artifact_id. It does not cover idempotency or repeat-run behavior, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the core action and followed immediately by mode semantics, prerequisites, and cost. No filler or restated title language.
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 five-parameter tool with an output schema, the description supplies everything an agent needs that structured fields do not: the prerequisite ordering relative to save and run, the mode-dependent identity requirements, network isolation, and absence of charges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: 'mode check validates inline source (before it is persisted) or one exact draft revision; mode fixtures runs that revision against isolated, no-network fixtures' explains what the enum values actually do and the exclusivity of source vs. workflow_id+revision.
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 first sentence gives a specific verb and resource (check Workflow code) plus the key scoping distinction: without a production run. It then differentiates the two modes concretely, so an agent can distinguish this from workflow_run and workflow_definition without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Use before workflow_definition save, which requires a passing check, and before workflow_run.' The two modes are each given a when-to-use condition (inline/pre-persistence vs. exact draft revision with fixtures), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
request_tool_access1 field changed- added
Input schema / properties / reasonAdded value: +{ + "description": "Why you need it, shown to the human.", + "type": "string" +}
2 tool updates
- Changed
router_web_search1 field changed- changed
Input schema / properties / maxResults / maximumPrevious value: -20New value: +10
- Added
run_task
10 tool updates
- Added
add_credits - Removed
cancel_cost_approval - Changed
describe_api2 fields changed- added
Output schema / properties / likely_creditsAdded value: +{ + "type": "string" +} - added
Output schema / properties / max_creditsAdded value: +{ + "type": "string" +}
- Removed
estimate_cost - Changed
execute2 fields changed- changed
Input schema / properties / approval_token / descriptionPrevious value: -"estimate_cost quote; requires its idempotency_key."New value: +"From an approval error; send its idempotency_key." - added
Input schema / properties / max_creditsAdded value: +{ + "description": "Most credits this call may charge.", + "type": [ + "string", + "number" + ] +}
- Added
list_resources - Changed
list_tool_groups2 fields changed- added
Input schema / properties / group_typeAdded value: +{ + "default": "all", + "description": "Group type.", + "enum": [ + "all", + "category", + "pack" + ], + "type": "string" +} - removed
Input schema / properties / kindRemoved value: -{ - "default": "all", - "description": "Group type.", - "enum": [ - "all", - "category", - "pack" - ], - "type": "string" -}
- Changed
request_tool_access2 fields changed- added
Output schema / properties / request_idAdded value: +{ + "type": "string" +} - changed
Output schema / properties / status / descriptionPrevious value: -"already_enabled or pending_human_approval."New value: +"already_enabled, enabled, pending_human_approval, approved, denied, or expired."
- Added
show_account - Changed
web_research1 field changed- changed
Input schema / properties / effort / descriptionPrevious value: -"Grounded answer tier. Defaults to light, priced up front. Pass maxCredits without effort for the legacy evidence-only contract."New value: +"Grounded answer tier. Defaults to light, priced up front. Without effort, maxCredits or search filters such as includeDomains keep the legacy evidence-only contract."
16 tool updates
- Changed
cancel_cost_approval3 fields changed- removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / canceled / descriptionRemoved value: -"True when the quote was canceled." - removed
Output schema / properties / code / descriptionRemoved value: -"Machine-readable outcome code."
- Changed
describe_api5 fields changed- removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / inputSchema / descriptionRemoved value: -"JSON Schema for execute args." - removed
Output schema / properties / slug / descriptionRemoved value: -"provider/endpoint slug." - removed
Output schema / properties / title / descriptionRemoved value: -"Endpoint title." - removed
Output schema / properties / tool / descriptionRemoved value: -"Typed tool name for direct calls."
- Changed
estimate_cost7 fields changed- changed
Input schema / properties / endpoint / descriptionPrevious value: -"Endpoint slug."New value: +"Endpoint ID." - changed
Input schema / properties / expires_in_seconds / descriptionPrevious value: -"Lifetime seconds: default 120, range 30-600."New value: +"Seconds; default 120." - changed
Input schema / properties / max_charge_credits / descriptionPrevious value: -"Optional positive decimal hard charge ceiling, as a string."New value: +"Hard charge cap, decimal string." - changed
Input schema / properties / provider / descriptionPrevious value: -"Provider slug."New value: +"Provider ID." - removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / descriptionRemoved value: -"Human-readable quote outcome." - removed
Output schema / properties / slug / descriptionRemoved value: -"provider/endpoint slug."
- Changed
execute5 fields changed- changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Stable exactly-once retry key."New value: +"Reuse on retry; charges once." - removed
Output schema / properties / credits_balance / descriptionRemoved value: -"Remaining credit balance." - removed
Output schema / properties / credits_charged / descriptionRemoved value: -"Credits debited for this call." - changed
Output schema / properties / data / descriptionPrevious value: -"Raw upstream provider response body."New value: +"Raw provider response." - changed
Output schema / properties / idempotent_replay / descriptionPrevious value: -"True when a stored identical call was replayed; no new charge was made."New value: +"Stored replay; no new charge."
- Changed
get_balance3 fields changed- removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / credits / descriptionRemoved value: -"Remaining credit balance." - removed
Output schema / properties / status / descriptionRemoved value: -"Account status."
- Changed
get_call_result8 fields changed- changed
Input schema / properties / api_call_id / descriptionPrevious value: -"execute call or capability receipt ID."New value: +"Receipt ID." - changed
Input schema / properties / max_characters / descriptionPrevious value: -"Characters: default 8000, max 20000."New value: +"Default 8000." - added
Input schema / properties / pageAdded value: +{ + "description": "Prior next_page.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / wait_secondsAdded value: +{ + "description": "Async wait.", + "maximum": 45, + "minimum": 0, + "type": "integer" +} - removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / api_call_id / descriptionRemoved value: -"Receipt ID." - removed
Output schema / properties / chunk / descriptionRemoved value: -"Result text slice." - removed
Output schema / properties / total_characters / descriptionRemoved value: -"Full stored result length."
- Changed
get_locus_guide9 fields changed- changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque continuation cursor from a prior chunk."New value: +"Prior next_cursor." - changed
Input schema / properties / id / descriptionPrevious value: -"Guide ID; omit to list guides or pick by task."New value: +"Omit to list or pick by task." - changed
Input schema / properties / max_characters / descriptionPrevious value: -"Characters: default 20000."New value: +"Chunk size." - changed
Input schema / properties / section / descriptionPrevious value: -"Section ID within the guide; omit for the full guide."New value: +"Section ID; omit for all." - changed
Input schema / properties / task / descriptionPrevious value: -"What you are trying to do, in plain language; used to recommend a guide."New value: +"Your goal, to pick a guide." - changed
Input schema / properties / version / descriptionPrevious value: -"Guide version; omit for the latest."New value: +"Omit for latest." - removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / count / descriptionRemoved value: -"Guides listed, when listing." - changed
Output schema / properties / object / descriptionPrevious value: -"Result kind: guide index, recommendations, or page."New value: +"Guide index, recommendations, or page."
- Added
list_calls - Changed
list_tool_groups7 fields changed- changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque cursor from a prior call with the same filters."New value: +"Prior next_cursor." - changed
Input schema / properties / kind / descriptionPrevious value: -"Group kind filter; defaults to all."New value: +"Group type." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size: default 20, max 50."New value: +"Page size." - changed
Input schema / properties / query / descriptionPrevious value: -"Optional case-insensitive name filter."New value: +"Name filter." - removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / count / descriptionRemoved value: -"Groups in this page." - removed
Output schema / properties / groups / descriptionRemoved value: -"Categories and packs with executable counts."
- Changed
pin_endpoint4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / pinned / descriptionRemoved value: -"True when currently pinned." - removed
Output schema / properties / pinned_count / descriptionRemoved value: -"Pinned endpoint count after this call." - removed
Output schema / properties / slug / descriptionRemoved value: -"provider/endpoint slug."
- Added
report_bug - Changed
request_tool_access2 fields changed- removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / slug / descriptionRemoved value: -"provider/endpoint slug."
- Changed
router_web_search4 fields changed- removed
Output schema / properties / credits_balance / descriptionRemoved value: -"Remaining credit balance." - removed
Output schema / properties / credits_charged / descriptionRemoved value: -"Credits debited for this call." - changed
Output schema / properties / data / descriptionPrevious value: -"Raw upstream provider response body."New value: +"Raw provider response." - changed
Output schema / properties / idempotent_replay / descriptionPrevious value: -"True when a stored identical call was replayed; no new charge was made."New value: +"Stored replay; no new charge."
- Changed
search_apis5 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Results: default 10, max 50."New value: +"Results: default 5, max 50." - removed
Output schema / additionalPropertiesRemoved value: -true - removed
Output schema / properties / count / descriptionRemoved value: -"Results in this page." - removed
Output schema / properties / query / descriptionRemoved value: -"Echo of the search phrase." - removed
Output schema / properties / results / descriptionRemoved value: -"Catalog entries with pricing and next step."
- Changed
web_extract5 fields changed- added
Input schema / properties / jsonAdded value: +{ + "additionalProperties": false, + "description": "Return structured JSON for each URL in one step instead of page text. Pass a prompt, a JSON Schema, or both. Cannot be combined with objective.", + "minProperties": 1, + "properties": { + "prompt": { + "maxLength": 400, + "minLength": 1, + "type": "string" + }, + "schema": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" +} - removed
Output schema / properties / credits_balance / descriptionRemoved value: -"Remaining credit balance." - removed
Output schema / properties / credits_charged / descriptionRemoved value: -"Credits debited for this call." - changed
Output schema / properties / data / descriptionPrevious value: -"Raw upstream provider response body."New value: +"Raw provider response." - changed
Output schema / properties / idempotent_replay / descriptionPrevious value: -"True when a stored identical call was replayed; no new charge was made."New value: +"Stored replay; no new charge."
- Changed
web_research5 fields changed- changed
Input schema / properties / effort / descriptionPrevious value: -"Explicitly request a grounded answer. Omit only for the legacy evidence-only contract."New value: +"Grounded answer tier. Defaults to light, priced up front. Pass maxCredits without effort for the legacy evidence-only contract." - removed
Output schema / properties / credits_balance / descriptionRemoved value: -"Remaining credit balance." - removed
Output schema / properties / credits_charged / descriptionRemoved value: -"Credits debited for this call." - changed
Output schema / properties / data / descriptionPrevious value: -"Raw upstream provider response body."New value: +"Raw provider response." - changed
Output schema / properties / idempotent_replay / descriptionPrevious value: -"True when a stored identical call was replayed; no new charge was made."New value: +"Stored replay; no new charge."
3 tool updates
- Added
router_web_search - Added
web_extract - Added
web_research
4 tool updates
- Added
workflow_definition - Added
workflow_run - Added
workflow_runs - Added
workflow_validate
2 tool updates
- Changed
describe_api3 fields changed- added
Input schema / properties / modelAdded value: +{ + "description": "Exact fal model ID.", + "maxLength": 240, + "type": "string" +} - added
Input schema / properties / model_cursorAdded value: +{ + "description": "Fal page cursor.", + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / operation_query / descriptionPrevious value: -"Search intent for directory operations."New value: +"Search operations or fal/generate models."
- Changed
estimate_cost2 fields changed- changed
Input schema / descriptionPrevious value: -"Provide exactly one endpoint selector: slug, or provider plus endpoint."New value: +"Use slug or provider + endpoint." - changed
Input schema / properties / args / descriptionPrevious value: -"Alias for body; must match body when both are provided."New value: +"Alias for body; must match it."
12 tool updates
- Changed
cancel_cost_approval1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "canceled": { + "description": "True when the quote was canceled.", + "type": "boolean" + }, + "code": { + "description": "Machine-readable outcome code.", + "type": "string" + } + }, + "type": "object" +}
- Changed
describe_api2 fields changed- added
Input schema / properties / operation_queryAdded value: +{ + "description": "Search intent for directory operations.", + "maxLength": 256, + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "inputSchema": { + "description": "JSON Schema for execute args.", + "type": "object" + }, + "slug": { + "description": "provider/endpoint slug.", + "type": "string" + }, + "title": { + "description": "Endpoint title.", + "type": "string" + }, + "tool": { + "description": "Typed tool name for direct calls.", + "type": "string" + } + }, + "type": "object" +}
- Changed
estimate_cost9 fields changed- added
Input schema / descriptionAdded value: +"Provide exactly one endpoint selector: slug, or provider plus endpoint." - removed
Input schema / oneOfRemoved value: -[ - { - "properties": { - "slug": { - "type": "string" - } - }, - "required": [ - "slug" - ] - }, - { - "properties": { - "endpoint": { - "type": "string" - }, - "provider": { - "type": "string" - } - }, - "required": [ - "provider", - "endpoint" - ] - } -] - added
Input schema / properties / args / descriptionAdded value: +"Alias for body; must match body when both are provided." - changed
Input schema / properties / max_charge_credits / descriptionPrevious value: -"Optional hard charge ceiling."New value: +"Optional positive decimal hard charge ceiling, as a string." - added
Input schema / properties / max_charge_credits / maxLengthAdded value: +100 - added
Input schema / properties / max_charge_credits / minLengthAdded value: +1 - removed
Input schema / properties / max_charge_credits / oneOfRemoved value: -[ - { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - { - "exclusiveMinimum": 0, - "type": "number" - } -] - added
Input schema / properties / max_charge_credits / typeAdded value: +"string" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "executable_quote": { + "description": "True when approval_token is included.", + "type": "boolean" + }, + "message": { + "description": "Human-readable quote outcome.", + "type": "string" + }, + "slug": { + "description": "provider/endpoint slug.", + "type": "string" + } + }, + "type": "object" +}
- Changed
execute1 field changed- changed
Input schema / properties / args / descriptionPrevious value: -"Endpoint args; schema and example via search_apis or describe_api."New value: +"Endpoint args; call describe_api for schema."
- Changed
get_balance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "credits": { + "description": "Remaining credit balance.", + "type": "string" + }, + "status": { + "description": "Account status.", + "type": "string" + } + }, + "type": "object" +}
- Changed
get_call_result1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "api_call_id": { + "description": "Receipt ID.", + "type": "string" + }, + "chunk": { + "description": "Result text slice.", + "type": "string" + }, + "total_characters": { + "description": "Full stored result length.", + "type": "integer" + } + }, + "type": "object" +}
- Added
get_locus_guide - Removed
list_apis - Added
list_tool_groups - Changed
pin_endpoint1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "pinned": { + "description": "True when currently pinned.", + "type": "boolean" + }, + "pinned_count": { + "description": "Pinned endpoint count after this call.", + "type": "integer" + }, + "slug": { + "description": "provider/endpoint slug.", + "type": "string" + } + }, + "type": "object" +}
- Added
request_tool_access - Changed
search_apis8 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "Canonical category ID or an unambiguous live category alias.", + "maxLength": 120, + "type": "string" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque next_cursor from a prior search with the same filters.", + "maxLength": 500, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / enabledAdded value: +{ + "description": "Filter to enabled or disabled endpoints. Defaults to true; pass \"all\" to include both, ranked enabled-first.", + "oneOf": [ + { + "type": "boolean" + }, + { + "const": "all", + "type": "string" + } + ] +} - added
Input schema / properties / include_facetsAdded value: +{ + "description": "Include bounded principal-scoped category and pack counts.", + "type": "boolean" +} - added
Input schema / properties / packAdded value: +{ + "description": "Canonical curated-pack ID or an unambiguous live pack alias.", + "maxLength": 120, + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Search phrase."New value: +"Outcome or provider search phrase. Optional when category or pack is supplied." - removed
Input schema / requiredRemoved value: -[ - "query" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "count": { + "description": "Results in this page.", + "type": "integer" + }, + "query": { + "description": "Echo of the search phrase.", + "type": "string" + }, + "results": { + "description": "Catalog entries with pricing and next step.", + "type": "array" + } + }, + "type": "object" +}
9 tool updates
- First observed
cancel_cost_approval - First observed
describe_api - First observed
estimate_cost - First observed
execute - First observed
get_balance - First observed
get_call_result - First observed
list_apis - First observed
pin_endpoint - First observed
search_apis
Publisher details
- Operator
- Locus
- Operator website
- https://paywithlocus.com
- Vendor relationship
- First-party
- Documentation
- https://docs.paywithlocus.com
- Trust center
- https://paywithlocus.com/terms
- Restrictions
- Not applicable
Related MCP Connectors
Pay-per-call APIs for AI agents: web scraping, DNS/email checks, classification, trading risk.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
One key and one balance for 2,500+ data APIs from 90+ providers. Your AI agent pays per call.
Pay-per-call APIs built for AI agents: crypto market data, onchain checks, x402 tools, and the web and documents (web search, page fetch and extract, screenshots, PDF to text, an HTTP proxy, x402 marketplace search and pre-pay quotes). No API keys, no signup. Agents pay per call via x402 in USDC on Base.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform pay-per-call web extraction, DNS/WHOIS/IP lookup, and PDF/feed/sitemap processing via remote tools, with payment through x402 USDC or prepaid credits and no signup required.MIT
- FlicenseNot gradedqualityCmaintenancePay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.-
- AlicenseNot gradedqualityCmaintenanceGive your AI agent a prepaid card to pay per call for hundreds of paid services — no per-vendor signups or API keys.44MIT
- AlicenseAqualityDmaintenanceEnables AI agents to access paid tools like crypto prices, weather, translation, and web intelligence via per-request USDC payments on Base, with no API keys or subscriptions.1548 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.