Agent Broker
Server Details
23 MCP tools: compliance, verification, messaging, booking and US contract search. 13 keyless.
- Status
- Unhealthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- basilalshukaili/agentbroker
- GitHub Stars
- 1
- Server Listing
- Agent Broker
Available Tools
23 toolscall_businessADestructiveInspect
Place a conversational voice-AI phone call to a business on a consumer's behalf and return a structured answer. THE differentiated capability: reach the tens of millions of long-tail SMBs that have NO API and NO booking page — only a phone number. An AI agent cannot pick up a phone and hold a conversation; this tool does. Give a plain-language objective; the voice AI navigates the call and extracts the answer. Business-directed (B2B), far less restricted than calling consumers — but the compliance gate still enforces recording consent per jurisdiction. Async: returns a call handle; poll get_outcome for the transcript + extracted fields.
WHEN TO USE: Use when the target business has NO booking URL and NO API — only a phone number — and the consumer asked the agent to reach them (e.g. 'call this plumber and ask if they can come Tuesday', 'ask the salon if they take walk-ins this afternoon'). Also use to confirm details a booking page doesn't expose (real-time availability, custom quotes). WHEN NOT TO USE: Do NOT use when the business has a booking URL — use import_booking_url + schedule_appointment (cheaper, faster, deterministic). Do NOT use for calls to consumers/individuals (this tool is for reaching businesses). Do NOT use for marketing or telemarketing — the compliance gate and the B2B-only framing reject that. COST: $0.2 per_call LATENCY: ~45000ms EXECUTION: async_by_default (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| smb_id | No | Known SMB identifier with a phone on record. Provide this OR business_phone. | |
| objective | Yes | What the call should accomplish, in plain language. | |
| country_code | No | ISO 3166-1 alpha-2 for compliance + recording-consent routing. | |
| on_behalf_of | No | Name of the consumer the call is placed for. | |
| business_phone | No | Business phone in E.164 (e.g. +14045550123). Provide this OR smb_id. | |
| extract_fields | No | Structured fields to pull from the answer, e.g. ['available_tomorrow','price_quote','earliest_slot']. | |
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. | |
| max_duration_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations present, the description adds substantial behavioral context: async execution via call handle requiring poll of get_outcome, compliance consent enforcement per jurisdiction, B2B-only restriction, idempotency-key retry semantics, cost, and latency. No contradictions with the annotations were found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (WHEN TO USE, WHEN NOT TO USE, COST, LATENCY, EXECUTION) and is front-loaded with the core purpose. Each section contributes selection or invocation-relevant information, and the redundancy is minimal and reinforcing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, an async execution model, and no output schema, the description is remarkably complete: it explains expected return via get_outcome, cost, latency, compliance gate, and the boundary conditions against sibling tools. An agent has what it needs to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the schema already explains most parameters. The description adds illustrative plain-language objective examples and mentions structured extraction, but it does not deeply define smb_id, business_phone, country_code, or extract_fields beyond the schema, which is acceptable given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb+resource ('Place a conversational voice-AI phone call to a business') and the return type ('structured answer'). It also differentiates from siblings by emphasizing it is for businesses with no API and no booking page, making its role distinct from import_booking_url and schedule_appointment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The WHEN TO USE and WHEN NOT TO USE sections are explicit: use for businesses with only a phone number, do not use when a booking URL exists (and names the alternatives), do not use for consumers, and do not use for marketing. This gives an agent unambiguous selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_leadAInspect
Structured intake of a prospect into an SMB's funnel with validation and deduplication on (smb_id, phone or email). Stores the prospect in the SMB's AgentBroker lead funnel — this is AgentBroker's own lead store, NOT a write into the business's own CRM.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Tell smb_xyz I'm interested and want a callback" -> call capture_lead({"smb_id": "smb_xyz", "prospect": {"name": "Jane", "phone": "+15551234567", "email": "jane@example.com"}, "source": "agent"})
WHEN TO USE: Use when a potential customer has expressed interest in an SMB's service and you want to ensure they are registered in the SMB's pipeline for follow-up. WHEN NOT TO USE: Do not use for confirmed bookings — use schedule_appointment. Do not use for bulk list imports. COST: $0.05 per_call LATENCY: ~600ms EXECUTION: sync_fast (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| smb_id | Yes | ||
| source | No | Where the consumer-initiated request originated (e.g., 'consumer_request', 'inbound_quote_form', 'agent_referral_from_find_business'). | |
| prospect | Yes | ||
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal non-read-only/non-idempotent/non-destructive; the description adds concrete behavioral detail: it stores a lead in AgentBroker's store, deduplicates on (smb_id, phone or email), costs $0.05/call, ~600ms latency, and requires get_outcome to retrieve the result. This materially exceeds the annotation safety profile.
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?
Well structured with core behavior first, followed by example, when-to-use, and operational metadata. No filler; each section (example, exclusions, cost, latency, execution) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-object tool with no output schema, the description supplies routing guidance, a full invocation example, side-effect location, cost/latency, and a pointer to get_outcome for results. Nothing an agent needs to decide or execute the call 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 ~50%, with source, idempotency_key, and consent_record_id already documented in the schema. The description compensates for undocumented fields with a concrete example mapping smb_id, name, phone, and email, and clarifies the dedup semantics of smb_id/phone/email. Minor gap: it does not illustrate notes or service_interest, but those are optional and inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Structured intake of a prospect into an SMB's funnel') and clarifies this is AgentBroker's lead store, not a CRM write. The deduplication key and validation behavior add further specificity and distinguish it from sibling operations like schedule_appointment.
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' and 'WHEN NOT TO USE' sections, including a named alternative: confirmed bookings should use schedule_appointment. Also excludes bulk list imports, giving an agent clear routing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_booking_linkARead-onlyIdempotentInspect
Free, instant pre-flight check for a booking URL. Classifies which booking platform a URL belongs to and tells you whether import_booking_url will accept it, WITHOUT fetching the page or spending money. Returns the platform, the exact smb_id import_booking_url would assign, the channels the booking will route through, and the inferred country. Use it to de-risk a paid booking BEFORE calling import_booking_url + schedule_appointment.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Is this a bookable link? https://cal.com/jane" -> call check_booking_link({"url": "https://cal.com/jane"}) -> then import_booking_url({"booking_url": "https://cal.com/jane"}) user: "Can you book me here: https://www.opentable.com/r/acme-bistro" -> call check_booking_link({"url": "https://www.opentable.com/r/acme-bistro"})
WHEN TO USE: Call this the moment a user pastes a URL and you are not sure it is a bookable page, or before you commit to a paid schedule_appointment. It is free and sub-100ms, so run it as a guard: if supported=true, proceed to import_booking_url with confidence; if supported=false, fall back to find_business or call_business instead of wasting a booking attempt. WHEN NOT TO USE: Do not use to confirm the page is currently live/available — this tool does not fetch the URL, it only classifies its shape. It is not a substitute for import_booking_url (which actually registers the business) or verify_business (which confirms an already-imported smb_id). COST: free - no key required LATENCY: ~20ms
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http(s) URL to classify, e.g. 'https://cal.com/jane' or 'https://www.opentable.com/r/acme'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses that the tool does NOT fetch the URL, is free, and runs in ~20ms, and it explains what it only inspects rather than guarantees. These are important behavioral traits that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with headers and front-loaded summary, but it contains minor redundancy such as 'free'/'instant' repeated in both the opening and COST/LATENCY sections. Still, every major section adds actionable guidance.
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?
There is no output schema, but the description lists the returned fields (platform, smb_id, channels, country), the supported/un-supported decision, cost, latency, and workflow integration. An agent has enough context to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single url parameter is already fully documented in the input schema with format examples, so the description adds little beyond reinforcing the same sample URLs. This is the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource ('pre-flight check for a booking URL') and states exactly what it classifies and returns, differentiating it from import_booking_url and verify_business. It also names sibling tools as fallbacks in WHEN NOT TO USE.
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 includes explicit WHEN TO USE / WHEN NOT TO USE sections with concrete conditions, alternatives (find_business, call_business), and exclusions. Example user queries demonstrate the exact call sequence, so an agent knows precisely when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_complianceARead-onlyIdempotentInspect
Free, instant pre-flight for the compliance gate. Runs the SAME TCPA / GDPR / CASL / CAN-SPAM / 10DLC gate that send_message and call_business run — but in preview mode, so NO message is sent and NO state changes. Tells you whether a (recipient, channel, message_type, content) send would be permitted BEFORE you pay for it, and if not, names the exact rule and how to remediate. Use it to de-risk a paid send the same way check_booking_link de-risks a paid booking. Attaches a compliance_receipt: an Ed25519-signed, hash-bound record of what was checked, when, against which sources, and what it returned - verifiable OFFLINE against the public key published at https://hatchloop.dev/agents.md, so you can hand it to an auditor as evidence the check really ran.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Is it legal to text this US number a 20%-off promo?" -> call check_compliance({"recipient_id": "+14045550200", "content": "20% off this week only!", "channel": "sms", "message_type": "marketing", "country_code": "US"}) user: "Before you email the dentist, make sure it's allowed" -> call check_compliance({"recipient_id": "office@dentist.example", "content": "Do you accept Cigna? Following up on my request.", "message_type": "follow_up"}) -> then send_message({"recipient": {"id_type": "email", "id_value": "office@dentist.example"}, "message_type": "follow_up", "content": {"body": "Do you accept Cigna? Following up on my request."}})
WHEN TO USE: Call this the moment before send_message or call_business when there is any chance the send is regulated — anything tagged marketing, any SMS to a US number (10DLC), any message to an EU/UK (GDPR) or Canadian (CASL) recipient, or any content you are unsure about. It is free and sub-100ms, so run it as a guard: if legal=true, proceed to send_message with confidence; if legal=false, fix the cited blocker instead of burning a paid, rejected send. WHEN NOT TO USE: Do not treat a legal=true as a permanent license — the gate re-runs at send time, so a fresh opt-out between preview and send still blocks. Do not use it to check two-party voice recording consent (that is evaluated at call time in the voice adapter, not here). It is not a substitute for send_message; it never delivers anything. COST: free - no key required LATENCY: ~15ms
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Delivery channel. Omit to auto-infer sms/email from recipient_id; set 'voice' explicitly. | |
| content | Yes | The actual message body you intend to send. The gate classifies the real text, so a meaningful preview needs the real content. | |
| state_code | No | US state code (e.g. 'CA') for state-specific rules. | |
| country_code | No | ISO 3166-1 alpha-2 (e.g. 'US', 'DE', 'CA'). Auto-inferred from phone if omitted; drives which jurisdiction rules apply. | |
| message_type | No | Intent tag: transactional, marketing, reminder, follow_up, notification. 'marketing' triggers the consent checks. Defaults to transactional. | transactional |
| recipient_id | Yes | Phone in E.164 (e.g. '+14045550100') or email address the message would go to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only/idempotent/non-destructive, and the description reinforces this with 'NO message is sent and NO state changes.' It adds extra behavioral context: gate re-runs at send time so legal=true is not permanent, compliance_receipt is Ed25519-signed and offline-verifiable, and consent is evaluated elsewhere for voice.
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?
Well-structured with an upfront summary followed by examples, WHEN TO USE/WHEN NOT TO USE, and cost/latency. Slightly longer than strictly necessary due to two example queries and repetition of 'free' and '~15ms' in both prose and headers, but every major section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param tool with no output schema, the description covers invocation context, return behavior (legal true/false, cited rule, remediation, receipt), exclusions, cost, and latency. An agent has everything needed to decide when to call it and what to do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a rich description. The tool description adds little beyond example call arguments and the general (recipient, channel, message_type, content) tuple, so it doesn't materially raise the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific action ('pre-flight for the compliance gate'), the exact regulations covered, and preview mode. It explicitly contrasts with send_message and call_business, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE spells out concrete triggering conditions (marketing tag, US SMS/10DLC, EU/UK GDPR, Canadian CASL, uncertain content) and the guard pattern before send_message/call_business. WHEN NOT TO USE explicitly excludes voice recording consent and says it never delivers anything, and references check_booking_link as the analogous de-risking tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_quotaARead-onlyIdempotentInspect
Returns the caller's current quota state: how many operations have been used today, how many remain, the daily limit, the tier (free / credits / unlimited), and when the quota resets. Read-only and free. Works with any valid X-Agent-Identity token; returns tier='anonymous' for keyless callers with the anonymous daily limits.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "How many API calls do I have left today?" -> call check_quota({}) user: "Check my quota before sending messages" -> call check_quota({}) user: "When does my rate limit reset?" -> call check_quota({})
WHEN TO USE: Call at session start or before a batch of write operations to confirm you have enough remaining quota. Use when a user asks how many API calls they have left today. Also useful after a rate_limited error to understand when the quota resets. WHEN NOT TO USE: Do not call on every single tool invocation — quota is also injected into every write-tool response in the 'quota' field. Only call proactively when you need the current state without performing an operation. COST: free - no key required LATENCY: ~5ms
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds meaningful context beyond those annotations: it is free, works with any valid X-Agent-Identity token, returns tier='anonymous' for keyless callers, and includes cost and latency information. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear opening, example queries, usage guidance, and cost/latency sections. It is slightly longer than necessary because the three example user queries are near-duplicates and 'free' is mentioned both in the body and in COST, but this is minor 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?
Given there is no output schema, the description fully enumerates what the agent can expect: used operations, remaining operations, daily limit, tier, and reset time. It also covers authentication, anonymous behavior, cost, and latency, making the tool complete for a zero-parameter read-only call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers the input surface. With 0 params, the baseline is 4, and the description appropriately focuses on output and usage behavior rather than parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Returns the caller's current quota state' and enumerates the exact fields: operations used, remaining, daily limit, tier, and reset time. This distinguishes it from sibling tools, none of which are quota-focused, so an agent can confidently separate it from business-action tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'WHEN NOT TO USE' sections. It tells the agent to call at session start or before write batches, not on every invocation, and explains that quota is already injected into write-tool responses. This is strong routing guidance with a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
escalate_to_humanADestructiveInspect
Hand off an in-flight task to a human operator with a full context bundle: transcript, prior actions, identifiers, and a recommended next step.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "I'm stuck — get a human at smb_xyz to call me back" -> call escalate_to_human({"smb_id": "smb_xyz", "reason": "automation_failed", "context": {"original_operation": "schedule_appointment", "recommended_next_step": "Call the business directly to confirm the slot"}, "priority": "urgent"})
WHEN TO USE: Use when automated resolution has failed after channel-fallback exhaustion, when the task requires human judgment, or when the customer has explicitly requested human contact. WHEN NOT TO USE: Do not use as a first resort. Escalate only after automated resolution attempts. COST: $0.2 per_call LATENCY: ~2000ms EXECUTION: async_by_default (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| smb_id | Yes | ||
| context | Yes | ||
| priority | No | normal | |
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, idempotentHint=false, and destructiveHint=true, which the description does not contradict. The description adds genuinely useful behavioral context beyond the annotations: COST ($0.2/call), LATENCY (~2000ms), and especially EXECUTION: async_by_default with instruction to use get_outcome for the result. However, it never explains the irreversible/destructive aspect flagged by destructiveHint=true (what handing off permanently changes), so it doesn't fully leverage the annotation signal.
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 one-sentence core purpose is front-loaded, followed by clearly labeled sections (example, when to use, when not to use, cost, latency, execution) that each earn their place. It is longer than the minimal get_calls example, but every section adds decision-relevant information rather than filler, and the headers make it scannable.
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 moderately complex tool (5 params, nested context object, no output schema), the description covers the core action, the context bundle contents, when to use it, and how to retrieve the async result via get_outcome. Since there is no output schema, the description need not explain return values. The main gap is that the destructive implications and per-parameter semantics are not elaborated, but the overall usage picture is sufficiently complete for an agent 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 only 20% (only idempotency_key has schema-level docs), so the description carries the burden for the other four parameters. The example call demonstrates smb_id, reason, context, and priority usage in a realistic structure, which is helpful, but it does not explain the meaning of each parameter beyond what the schema enumerations already show. The context object's nested fields are left entirely to the schema. The example partially compensates for the coverage gap but not fully.
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 ('Hand off') and resource ('an in-flight task to a human operator'), plus the makeup of the context bundle (transcript, prior actions, identifiers, recommended next step). This clearly distinguishes escalation from siblings like call_business or send_message, which perform automated actions. It stops short of explicitly naming a sibling to differentiate against, so it doesn't reach a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The WHEN TO USE / WHEN NOT TO USE sections give explicit conditions ('after channel-fallback exhaustion', 'requires human judgment', 'customer has explicitly requested human contact') and an explicit exclusion ('Do not use as a first resort... only after automated resolution attempts'). This is strong guidance, though it frames alternatives by condition rather than by naming specific sibling tools, so it falls just below the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_businessARead-onlyIdempotentInspect
Given criteria (vertical, location, capability, price band, availability window), return ranked candidate businesses from our supply network. THE NETWORK IS SMALL AND STILL MOSTLY SAMPLE DATA: entries that are not real are named [DEMO] and flagged is_demo - check that field before acting on a result.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Find me a salon in Tokyo that does color" -> call find_business({"vertical": "personal_services", "location": {"zip_or_city": "Tokyo"}, "capability": "color"}) user: "I need a plumber near 30309" -> call find_business({"vertical": "home_services", "location": {"zip_or_city": "30309"}, "capability": "plumbing"}) user: "Show me dentists in London" -> call find_business({"vertical": "professional_services", "location": {"zip_or_city": "London"}, "capability": "dentist"})
WHEN TO USE: Use when an agent needs to identify which SMBs can fulfill a business task (booking, service, consultation) in a given location and vertical. Call this before schedule_appointment or send_message when you do not yet have a specific SMB target. WHEN NOT TO USE: Do not use as a general directory or browsing surface. Do not use when you already have a specific verified SMB identifier. Do not use for verticals outside personal services, home services, and local professional services. COST: free - no key required LATENCY: ~200ms
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | ||
| vertical | Yes | Service vertical to search within | |
| capability | No | Specific service capability required, e.g. 'haircut', 'plumbing', 'tax_consultation' | |
| price_band | No | ||
| max_results | No | ||
| availability_window | No | Accepted but NOT APPLIED - it does not narrow results. We do not hold live calendars for the supply network. The response carries availability_window_applied: false when you send one. To book a specific slot use schedule_appointment with requested_time, which checks real availability. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and idempotent, and the description adds crucial non-obvious behavior: the network is small and mostly sample data, demo entries are named [DEMO] and flagged is_demo, so the agent must check that field before acting. This goes beyond the safety profile in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well organized: what it does, critical demo-data warning, examples, usage boundaries, and cost/latency all earn their place. The minor example error and slightly repetitive availability-window mention in the schema keep it from being perfect.
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 6-parameter nested-object tool with no output schema, the description plus schema covers invocation, the most critical data-quality caveat, and the alternative for real availability. It does not explain ranking criteria or the shape of results beyond is_demo, but enough is present for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Three worked examples map natural-language requests to vertical, location, and capability values, which helps a lot. However, price_band, max_results, and radius_miles receive no real explanation beyond their names/defaults, and the 'dentists in London' example incorrectly uses capability 'plumbing'. Schema coverage is only 50%, so the description does not fully compensate.
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 operation ('return ranked candidate businesses') on a specific resource (our supply network) and lists the filtering criteria. It also distinguishes this lookup from directory browsing and from situations where a specific SMB is already known, which separates it from sibling verification/calling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call this before schedule_appointment or send_message when no specific SMB target exists, and gives a WHEN NOT TO USE block covering general browsing and already-verified identifiers. That is concrete routing guidance, not just an implied use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationARead-onlyInspect
Read a two-way conversation thread you started: its state, every message exchanged, and how many replies the business has sent.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Did the salon reply about Sara's booking?" -> call get_conversation({"conversation_id": "conv_1a2b3c4d"}) user: "Check request 4821 with that barber" -> call get_conversation({"reference": "4821", "business_number": "96890000001"})
WHEN TO USE: After send_message with on_behalf_of returns a conversation_id, poll this to read the business's reply. Replies are matched to the right thread exactly (never guessed), so what you read here belongs to YOUR end-user. WHEN NOT TO USE: Do not poll more often than every 10 seconds. COST: free - no key required LATENCY: ~300ms
| Name | Required | Description | Default |
|---|---|---|---|
| reference | No | The 4-digit request reference, e.g. '4821'. Requires business_number. | |
| business_number | No | Scopes a `reference` to one business (references are reused across businesses). | |
| conversation_id | No | From the send_message receipt (preferred). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false; the description goes beyond by revealing the no-key/cost-free operation, ~300ms latency, the 10-second polling restriction, and the guarantee that replies are matched exactly to the caller's thread. No statement 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 description is front-loaded with a one-sentence capability summary, then uses labeled sections (examples, when to use/not, cost, latency) so an agent can scan quickly. Every section carries operational information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, it tells the agent what it will get back (state, messages, reply count) and how to use identifiers via examples. It also covers auth/cost and polling behavior, leaving no essential decision unresolved.
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?
All three parameters are already documented in the schema (100% coverage), so the baseline is 3. The description adds value by marking conversation_id as preferred, showing two concrete valid call shapes, and reinforcing that reference is scoped by business_number.
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?
Description opens with a specific verb and resource — 'Read a two-way conversation thread you started' — and lists concrete return contents (state, every message, reply count). This clearly differentiates it from broadly named siblings like get_status and get_outcome.
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?
WHEN TO USE gives an explicit trigger: poll after send_message with on_behalf_of returns a conversation_id. It also gives a rate-limit constraint under WHEN NOT TO USE, but it does not name alternative tools for cases that don't match, so it is a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outcomeARead-onlyIdempotentInspect
Retrieve the final OutcomeReceipt for a completed operation.
WHEN TO USE: Use after get_status returns success/failure/partial to retrieve the full result with cost and reason codes. WHEN NOT TO USE: Do not use for operations still in pending/executing state — use get_status first. COST: free - no key required LATENCY: ~50ms
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it is free and requires no key, has ~50ms latency, and returns 'full result with cost and reason codes.' This gives the agent practical expectations beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured with clear sections: purpose, WHEN TO USE, WHEN NOT TO USE, COST, LATENCY. Every line adds useful information and the key trigger condition is front-loaded.
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 simple one-parameter read-only tool, the description covers the essential retrieval condition, the prerequisite tool, cost, latency, and what the return value contains. With no output schema, this is sufficient for an agent to invoke it correctly in the intended flow.
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 0%, so the description must compensate for the one required parameter, operation_id. It never explicitly explains where operation_id comes from or its format; it only implies it is tied to a get_status call. Given low schema coverage, this is a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Retrieve'), a specific resource ('final OutcomeReceipt'), and a precondition ('completed operation'). It differentiates itself from get_status by indicating it returns the full result after status is known, so an agent can tell the tools apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and WHEN NOT TO USE are explicit and actionable. The description names get_status as both the prerequisite and the alternative for pending/executing operations, leaving no ambiguity about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusARead-onlyIdempotentInspect
Query the current state of any in-flight async operation by operation_id.
WHEN TO USE: Use to poll the state of a pending_async operation when no webhook callback has arrived or to check progress. WHEN NOT TO USE: Do not poll more frequently than once per 10 seconds — use webhook delivery for real-time updates instead. COST: free - no key required LATENCY: ~50ms
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds valuable behavioral context: cost ('free - no key required'), latency (~50ms), and a strict polling rate limit (10 seconds). These are not implied by annotations and give the agent critical operational constraints, enhancing transparency well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally well-structured and front-loaded. The core purpose is in the first sentence, followed by clear WHEN TO USE / WHEN NOT TO USE sections, then terse COST and LATENCY lines. Every sentence carries essential information with no wasted words, making it easy to parse quickly.
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 single-parameter read-only poll tool, the description provides all necessary context: what it does, when to use it, constraints on usage, and performance characteristics. The absence of an output schema is mitigated since the description implies it returns the current state. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is operation_id, and the schema provides zero description (coverage 0%). The description mentions 'by operation_id' but does not explain what an operation_id is, where to obtain it, or its format. Since the schema is silent, the description should compensate, but it merely restates the parameter name without adding semantic meaning. This is a minimal gap that could confuse agents unfamiliar with the async operation workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries the state of in-flight async operations by operation_id. It uses a specific verb ('Query') and resource ('state of any in-flight async operation'), which distinguishes it from siblings like get_outcome (which likely returns final results rather than in-flight status). No ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'WHEN NOT TO USE' sections. It directs the agent to use it for polling when no webhook callback has arrived and warns not to poll more than once per 10 seconds, pointing to webhook delivery as the real-time alternative. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handle_inboundAInspect
Classify an inbound message on behalf of an SMB and get a recommended next action. Classifies intent (booking request, cancellation, opt-out, inquiry, complaint) and returns a suggested_action for YOUR agent to act on - opt-outs are recorded durably; nothing else is auto-routed or auto-executed by this tool.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Process this customer reply for me: 'Yes I want to book Tuesday'" -> call handle_inbound({"smb_id": "smb_xyz", "inbound_channel": "sms", "raw_message": "Yes I want to book Tuesday"})
WHEN TO USE: Use when an SMB needs inbound message triage — classifying incoming contact-form submissions, SMS replies, voicemails, or email inquiries. WHEN NOT TO USE: Do not use for outbound communications. Do not use for compliance-flagged recipient lists without verified opt-in records. COST: $0.03 per_call LATENCY: ~3000ms EXECUTION: async_by_default (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| sender | No | ||
| smb_id | Yes | ||
| raw_message | Yes | ||
| routing_rules | No | Optional override routing policy for this SMB | |
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. | |
| inbound_channel | Yes | ||
| received_at_iso | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations, the description discloses that opt-outs are recorded durably, that nothing else is auto-executed, and that execution is async with results retrieved via get_outcome. It also includes cost and latency, giving the agent a clear operational picture before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its core purpose and then organized into terse, labeled sections covering examples, usage boundaries, cost, latency, and execution mode. Every section earns its place, and there is no redundant 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 7-parameter asynchronous tool with no output schema, the description covers selection criteria, execution mode, result retrieval, and cost/latency well. It stops short of describing the suggested_action return shape and some optional parameter semantics, but it provides enough for a correct first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, so the description needed to compensate. It does illustrate the three required parameters (smb_id, inbound_channel, raw_message) in a concrete example and maps channel types to real-world inbound sources, but sender, received_at_iso, and routing_rules receive little or no additional semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Classify an inbound message on behalf of an SMB and get a recommended next action,' and it enumerates the intents it handles. It also explicitly states that nothing else is auto-routed or auto-executed, which clearly separates this tool from action-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE and WHEN NOT TO USE sections, covering inbound triage channels and excluding outbound communications and unverified compliance-flagged lists. It also includes a concrete example query-to-invocation mapping, making both selection and first-call construction unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_booking_urlAIdempotentInspect
Turn ANY public booking URL (Cal.com, Calendly, Doctolib, Booksy, Fresha, OpenTable, Setmore, Square, Acuity, Schedulista, Squarespace, BookMyCity) into a callable smb_id you can immediately use with schedule_appointment, send_message, or capture_lead. Idempotent — calling twice returns the same smb_id.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Book me a haircut at https://cal.com/jane-salon" -> call import_booking_url({"booking_url": "https://cal.com/jane-salon", "vertical": "personal_services"}) -> then schedule_appointment({"smb_id": "", "action": "book"}) user: "Schedule with this dentist: https://www.doctolib.fr/dentiste/paris/jean-dupont" -> call import_booking_url({"booking_url": "https://www.doctolib.fr/dentiste/paris/jean-dupont"}) user: "Reserve a table at https://www.opentable.com/r/acme-bistro" -> call import_booking_url({"booking_url": "https://www.opentable.com/r/acme-bistro", "vertical": "restaurants"})
WHEN TO USE: Call this FIRST whenever the user provides a specific booking URL (cal.com/handle, calendly.com/handle/event, doctolib.fr/..., booksy.com/..., opentable.com/r/..., etc.). User patterns that match: 'book me at https://cal.com/...', 'schedule with calendly.com/jane/intro', 'reserve a table at opentable.com/r/...', 'I want to book this dentist: https://www.doctolib.fr/...'. After importing, the returned smb_id can be passed straight to schedule_appointment. WHEN NOT TO USE: Do not use if the user only describes a business by name without a URL — call find_business instead. Do not use for arbitrary websites that are not on the supported booking-platform list (use /supply/platforms to see all 12). COST: free (no credits) - but requires a free email-verified key LATENCY: ~600ms
| Name | Required | Description | Default |
|---|---|---|---|
| vertical | No | Best-guess vertical. If omitted, inferred from the platform (e.g., Doctolib -> healthcare, OpenTable -> restaurants). | |
| booking_url | Yes | Full URL the user supplied. Must point at one of the 12 supported booking platforms; auto-detected from the host. | |
| capabilities | No | Free-form capability tags (e.g., ['haircut','color','blowdry']). | |
| country_code | No | ISO 3166-1 alpha-2 (e.g. 'US', 'FR'). Used for compliance routing on later send_message calls. | |
| business_name | No | Optional override. If omitted, the business name is auto-extracted from the page's <title> or og:title. | |
| contact_email | No | Optional. | |
| contact_phone | No | Optional. If omitted, the platform integration handles outreach. | |
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply idempotentHint=true, and the description reinforces it with 'Idempotent — calling twice returns the same smb_id.' It additionally discloses cost ('free'), latency (~600ms), and the requirement for an email-verified key, which are not in the annotations. No contradiction exists. The description adds useful behavioral context beyond the structured hints.
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?
Though detailed, the description is well-structured with clear sections (purpose, examples, WHEN TO USE, WHEN NOT TO USE, cost, latency) and front-loads the primary purpose. Every section earns its place, and the examples are concise and directly relevant. The length is justified given the complexity and the multiple decision points it clarifies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, usage conditions, idempotency, cost, latency, platform constraints, and integration with sibling tools (schedule_appointment, send_message, capture_lead). It states the return value (smb_id) explicitly. There's no output schema, but the description covers everything an agent needs to invoke the tool correctly, making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — every parameter has a description in the input schema. The tool description adds marginal value such as example verticals in the user query illustrations, but it doesn't introduce new semantics beyond what the schema already explains. Per the baseline for high coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool's purpose: turning any supported public booking URL into an smb_id for downstream use. It names the specific action (import) and resource (booking URL) and explicitly contrasts with find_business when only a business name is given. The intended output (smb_id) is also stated, making it distinct from siblings like check_booking_link or capture_lead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'WHEN TO USE' and 'WHEN NOT TO USE' sections provide explicit conditions, including example user query patterns and the exact circumstances to avoid (e.g., business name only, unsupported websites). It names the alternative (find_business) and even references /supply/platforms for allowed hosts. This is exemplary guidance for an agent to decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_us_contractsARead-onlyIdempotentInspect
Search US federal contract awards by company (recipient) name using the free USASpending.gov public API. Returns the top awards sorted by dollar amount: award ID, recipient name, award amount USD, awarding agency, NAICS code/description, and period of performance. Zero upstream cost, no key required. Data covers 2020-2026 procurement contracts.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Does Palantir have US government contracts?" -> call lookup_us_contracts({"company_name": "Palantir Technologies"}) user: "What federal contracts does Booz Allen Hamilton have?" -> call lookup_us_contracts({"company_name": "Booz Allen Hamilton", "max_results": 5}) user: "Find US import supplier data for Lockheed Martin" -> call lookup_us_contracts({"company_name": "Lockheed Martin"}) user: "Which government agencies are customers of SAIC?" -> call lookup_us_contracts({"company_name": "SAIC", "max_results": 10})
WHEN TO USE: Use when you need to know whether a company is a US federal contractor, which government agencies have awarded it contracts, the dollar value and NAICS sector of those contracts, and the period of performance. Useful for supplier due-diligence, vendor qualification, competitive intelligence, and import/trade research. The target demand: "us import data api", "supplier lookup api", "company trade records", "who has government contracts", "federal contractor search". WHEN NOT TO USE: Do not use for non-US companies (USASpending.gov only covers US federal contracts). Do not use as an exhaustive financial-risk or sanctions screen -- use verify_company_record and screen_sanctions for those. Do not use for state/local government contracts (federal only). COST: free - no key required LATENCY: ~1200ms
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Maximum number of contract awards to return (sorted by award amount descending). Default: 5, max: 10. | |
| company_name | Yes | Company or recipient name to search for in US federal contract awards (e.g. "Lockheed Martin", "Booz Allen Hamilton", "Palantir Technologies"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context: free/no-key access, USASpending.gov source, data coverage 2020-2026, sorting by award amount, and ~1200ms latency. It doesn't disclose possible API errors or edge cases, but that is a minor gap for a simple read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its core purpose and organized into labeled sections. The example queries are somewhat lengthy but serve as useful few-shot call patterns for an agent. Each section—WHEN TO USE, WHEN NOT TO USE, COST, LATENCY—earns its place, though it could be trimmed 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?
For a read-only two-parameter lookup with no nested objects and no output schema, the description is complete: it states the source, input requirements, example calls, returned fields, constraints, and alternatives. An agent has everything needed to invoke the tool and interpret results 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?
The input schema already provides 100% coverage with clear descriptions for both parameters, including max_results default/min/max and sorting behavior. The description's examples add practical value by mapping natural-language queries to company_name values, but they don't meaningfully extend the parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search US federal contract awards by company (recipient) name using the free USASpending.gov public API.' It clearly lists the returned fields and scope, and the WHEN NOT TO USE section explicitly distinguishes it from sibling tools like verify_company_record and screen_sanctions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a dedicated WHEN TO USE section with concrete use cases (supplier due-diligence, vendor qualification, competitive intelligence) and an explicit WHEN NOT TO USE section naming alternatives and exclusions (non-US, state/local, sanctions screening). This gives an agent unambiguous guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_trade_restrictionARead-onlyIdempotentInspect
Free cross-border trade screening of the DESTINATION and the PARTIES. IT DOES NOT CLASSIFY THE PRODUCT: the product argument is recorded and echoed back, never checked against any export-control list, so a controlled item to an unrestricted destination returns no findings and reason_code 'partial' -- never 'clear'. This is not an export-control clearance; classify the item (HS/ECCN) against BIS/EU/UK controls yourself. Given a product and destination country (and optionally an HS code, origin country, and a list of parties to screen), returns: (a) whether the destination or any party hits an export-control or sanctions restriction, (b) the destination risk level (comprehensive_embargo / sectoral_sanctions / elevated_scrutiny / standard), (c) HS code hint if the caller provided one, (d) honest tariff guidance + official links without fabricated rates, and (e) party sanctions screening against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO). Acts as a MIDDLEMAN -- unifies the OFAC comprehensive-embargo map, our own indexed copies of the EU and UK lists, and OFAC SDN into one clean call. Never fabricates a tariff rate, a clear, or a restricted status.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Can we ship laptops to Iran?" -> call map_trade_restriction({"product": "laptop computers", "destination_country": "IR"}) user: "Screen this supplier before we import from them: Mahan Air, Iran" -> call map_trade_restriction({"product": "aircraft parts", "destination_country": "US", "parties": ["Mahan Air"]}) user: "Is exporting hydraulic pumps to Russia restricted?" -> call map_trade_restriction({"product": "hydraulic pumps", "hs_code": "8413.50", "destination_country": "RU"}) user: "Check if we can sell medical devices to Germany, supplier is ACME GmbH" -> call map_trade_restriction({"product": "medical devices", "origin_country": "US", "destination_country": "DE", "parties": ["ACME GmbH"]})
WHEN TO USE: Use before any cross-border trade to flag embargoed destinations, screen exporters/importers/freight forwarders against sanctions lists, and get authoritative links to the applicable tariff databases. Call this as a pre-flight check before quoting, invoicing, or shipping internationally. Covers OFAC comprehensively-embargoed countries (Iran, North Korea, Cuba, Syria) and significant advisory countries (Russia, Belarus, Ukraine Crimea/DNR/LNR regions). WHEN NOT TO USE: Do NOT use as a substitute for a licensed export compliance review. Do NOT use to obtain authoritative tariff rates (this tool returns guidance links, never fabricated rates). Do NOT use for purely domestic shipments where no cross-border movement is involved. COST: free within the daily quota, then $0.02 per call LATENCY: ~3000ms
| Name | Required | Description | Default |
|---|---|---|---|
| hs_code | No | Optional Harmonized System code (e.g. '8471.30' for laptops). If provided, echoed back and included in tariff guidance. Not derived -- caller must supply the official HS code. | |
| parties | No | Optional list of party names to screen (exporter, importer, freight forwarder, end-user, etc.). Each name is screened against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO). At most 20 parties per call - a longer list is refused outright (bad_input) rather than partially screened; split it across calls. | |
| product | Yes | Product name or description, e.g. 'laptop computers', 'crude oil', 'medical devices'. Used in the tariff guidance note. | |
| origin_country | No | Optional ISO 3166-1 alpha-2 code for the exporting country (e.g. 'US', 'DE'). Used in the tariff guidance note. | |
| destination_country | Yes | ISO 3166-1 alpha-2 code for the importing country (e.g. 'IR', 'CA', 'DE'). Required. Checked against the OFAC comprehensive-embargo map and sectoral-sanctions advisory list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this readOnly, idempotent, and non-destructive, and the description adds substantial behavior beyond that: product is never checked, reason_code can be 'partial' but never 'clear', and no tariff rate or restricted status is ever fabricated. Also discloses cost, latency, and that it acts as a middleman over multiple sanctions lists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each section earns its place: the critical product-classification limitation is front-loaded, examples show realistic queries, and WHEN TO USE / WHEN NOT TO USE are clearly separated. The structure makes it easy for an agent to scan and extract the right guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description comprehensively explains what the tool returns: restriction findings, destination risk levels, HS hints, tariff guidance links, and party screening results. It also covers failure semantics like 'partial' reason codes and 20-party call splitting, plus cost and latency, making it complete for a complex 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 coverage is 100%, so the baseline is 3, but the description adds important functional meaning: product is only echoed and never classified, hs_code is not derived, destination_country is checked against the embargo map, and parties are screened against three named sanctions lists. These clarifications go beyond the schema's field 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 precise verb and resource: cross-border trade screening of the destination and parties, explicitly excluding product classification. Clearly distinguishes itself from an export-control clearance by saying it never checks the product against any list.
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?
Contains explicit WHEN TO USE and WHEN NOT TO USE sections, instructing use as a pre-flight check before quoting or shipping and excluding domestic shipments, authoritative tariff rates, or licensed export compliance reviews. This leaves little ambiguity about when an agent should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mint_keyAInspect
Agent self-serve API key issuance. An autonomous agent that has no email inbox can obtain a free-tier API key by proving it holds the MACHINE_MINT_SECRET via HMAC-SHA256. Returns a usable key immediately with no human action required. If the operator has not activated a mint secret on the server, this returns an honest not_configured failure rather than a key - call it once and branch on that before planning around it.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "I need an API key to call AgentBroker tools" -> call mint_key({"agent_id": "my-agent-abc123", "timestamp": 1725100000, "nonce": "4f8a2c1d", "signature": "<HMAC-SHA256(agent_id+timestamp+nonce, MACHINE_MINT_SECRET)>"})
WHEN TO USE: Use when an AI agent needs to self-provision a write-capable API key without a human email address. The caller must know the MACHINE_MINT_SECRET (available from hatchloop.dev/docs/#machine-mint). WHEN NOT TO USE: Do not use if the agent has a human operator who can complete the email flow at /keys/request. Do not use for paid plans — this endpoint issues free-tier keys (100 ops/day) only. COST: free - no key required LATENCY: ~100ms
| Name | Required | Description | Default |
|---|---|---|---|
| nonce | Yes | Random value (UUID or hex). Prevents replay attacks — use a fresh nonce each call. | |
| agent_id | Yes | A stable unique identifier for this agent (e.g. a UUID). The issued key is deterministically tied to this ID. | |
| signature | Yes | HMAC-SHA256(agent_id + str(timestamp) + nonce, MACHINE_MINT_SECRET) as lowercase hex. The HMAC input is the raw concatenation with no separators. | |
| timestamp | Yes | Unix epoch seconds at signing time. Must be within 60s of server time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses a valuable failure mode: if no mint secret is activated, it returns an honest not_configured failure rather than a key. It also reveals that the endpoint is immediate, requires no human action, issues only free-tier keys at 100 ops/day, and costs no key to call—useful context annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections and front-loaded purpose, but it is slightly redundant: the opening paragraph and WHEN TO USE both cover the autonomous-agent-without-email condition. The example and operational details earn their place, though a tighter edit would reduce repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description is remarkably complete: it covers when to use, when not to use, the HMAC proof requirement, the not_configured failure branch, cost, latency, and an example call. An agent can confidently select and invoke this tool without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all four parameters at 100%, so the baseline is 3. The description adds value by including a full example invocation with concrete values for agent_id, timestamp, nonce, and signature, and by pointing to where MACHINE_MINT_SECRET is documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Agent self-serve API key issuance' and clearly distinguishes it from ordinary key-request flows by describing the autonomous, secret-proving mechanism. It also differentiates from sibling tools by scoping to free-tier agent self-provisioning without a human email inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'WHEN NOT TO USE' sections, naming the exact alternative (the human email flow at /keys/request) and excluding paid-plan usage. It also tells the agent to call once and branch on the not_configured failure, which is concrete operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_costARead-onlyIdempotentInspect
Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Returns the exact price when it is fixed, and a min/max range when the cost depends on channel or outcome. It does not promise an accuracy percentage - check cost_range.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "How much will this SMS cost me?" -> call preview_cost({"operation": "send_message", "params": {"preferred_channel": "sms"}}) user: "Estimate the cost of booking via voice fallback" -> call preview_cost({"operation": "schedule_appointment", "params": {"preferred_channel": "voice"}})
WHEN TO USE: Use before any operation when the agent is operating under a budget constraint and needs to decide whether to proceed. WHEN NOT TO USE: Do not use in a hot loop — cache the result for at least 60 seconds if repeating the same preview. COST: free - no key required LATENCY: ~100ms
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | The same request body you would pass to the operation | |
| operation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description adds valuable behavioral context: it returns estimates only, does not execute the operation, gives exact or ranged prices depending on channel/outcome, does not promise accuracy percentages, and is free/no-key with ~100ms latency. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then organized into examples, usage guidance, and operational notes. Every section adds necessary information, and the structure makes it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter preview tool with no output schema, the description covers return value shape (cost, latency, success probability, exact vs. range), parameter usage via examples, usage constraints, caching guidance, cost, latency, and key requirements. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (operation lacks a description), but the description compensates with two concrete examples showing operation values ('send_message', 'schedule_appointment') and params shapes ('preferred_channel'). It also clarifies that params is 'the same request body you would pass to the operation', adding meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource: expected cost, latency, and success-probability estimates for a proposed call before execution. It clearly distinguishes the tool from operational siblings by framing it as a pre-execution estimation step, and clarifies exact vs. range pricing.
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 provides explicit WHEN TO USE (budget constraint, deciding whether to proceed) and WHEN NOT TO USE (hot loop, cache for 60 seconds), plus concrete example queries. It does not name alternative tools, but the usage boundaries are clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_appointmentADestructiveInspect
Availability lookup, hold, confirm, reschedule, or cancel appointments with an SMB. Routes through the SMB's native booking system if available, falls back to voice AI or web form.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Book the haircut for next Tuesday at 3pm" -> call schedule_appointment({"smb_id": "smb_imp_abc", "action": "book", "service": "haircut"}) user: "Cancel my Friday appointment at smb_xyz" -> call schedule_appointment({"smb_id": "smb_xyz", "action": "cancel"}) user: "Reschedule my dental cleaning to next week" -> call schedule_appointment({"smb_id": "smb_imp_xyz", "action": "reschedule"})
WHEN TO USE: Use when an agent needs to book, reschedule, or cancel a specific appointment with a specific SMB. Requires a verified smb_id. WHEN NOT TO USE: Do not use for bulk scheduling. Do not use without a verified SMB — call find_business and verify_business first if needed. COST: from $0.15 per_call_variable (see preview_cost for exact) LATENCY: ~5000ms EXECUTION: async_by_default (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| action | Yes | ||
| smb_id | Yes | ||
| service | No | ||
| customer | No | ||
| requested_time | No | ||
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. | |
| existing_appointment_id | No | Required for reschedule/cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses meaningful runtime behavior: routing through the SMB's native booking system with fallback to voice AI or web form, async execution via get_outcome, and cost/latency characteristics. It does not detail side effects beyond cancellation, and the mention of 'hold' and 'confirm' is not reflected in the action enum, but the added behavioral context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well structured with labeled sections: examples, WHEN TO USE, WHEN NOT TO USE, COST, LATENCY, and EXECUTION. The main purpose is front-loaded, and the sections earn their place by giving practical invocation and routing context. A small amount of redundancy exists, such as the verified smb_id requirement appearing more than once.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides strong operational context: prerequisites, alternatives, cost, latency, and async behavior. However, there is no output schema and the description does not explain the result shape, what availability lookups return, or how nested objects like requested_time and customer should be populated. For an 8-parameter tool with nested objects, this leaves noticeable gaps despite the otherwise rich context.
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 only 25%, so the description needed to compensate, but it only lightly does so. The examples map three natural-language requests onto smb_id, action, and service, yet the reschedule and cancel examples omit the required existing_appointment_id parameter. There is no guidance for requested_time, customer, notes, or how the action enum values relate to the full request flow.
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 opening line clearly names the resource (appointments with an SMB) and lists concrete actions such as book, reschedule, cancel, and check availability. The example queries reinforce what the tool does in practice. It is slightly less crisp than a single-purpose tool because it is an umbrella for several appointment operations and does not explicitly distinguish itself from siblings like check_booking_link or call_business.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit WHEN TO USE section and a WHEN NOT TO USE section that names alternatives: find_business and verify_business. It also warns against bulk scheduling and emphasizes the verified smb_id prerequisite. This gives the agent clear decision rules for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_sanctionsARead-onlyIdempotentInspect
Free screening of a name or entity against official sanctions lists, each fetched from the authority that issues it: the OFAC SDN list from the US Treasury (SDN.CSV plus ALT.CSV for alternate spellings), the EU consolidated financial sanctions list from the European Commission, and the UK Sanctions List from the FCDO. THE UN CONSOLIDATED LIST IS NOT SCREENED -- it carries no licence permitting commercial redistribution, so we do not claim it. ALWAYS check lists_screened on the response: it names the lists that actually ran ON THAT CALL, and a list that failed to load appears in sources_unavailable instead. reason_code is 'partial_screening' whenever any source was unavailable, never 'clear'. Returns screening_status ('hit' | 'clean' | 'candidates' | 'not_screened' -- branch on THIS, not on matched, because matched:false is also false when nothing could be screened), matched: bool, a list of matches with score, program, and source URL, and which lists were screened. Never fabricates a match or a clear -- if no match is found, explicitly names which lists were checked. Attaches a compliance_receipt: an Ed25519-signed, hash-bound record of what was checked, when, against which sources, and what it returned - verifiable OFFLINE against the public key published at https://hatchloop.dev/agents.md, so you can hand it to an auditor as evidence the check really ran.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Screen this vendor before we pay them: ACME Trading LLC, Russia" -> call screen_sanctions({"name": "ACME Trading LLC", "country": "RU", "type": "entity"}) user: "Is Kim Jong-un on the OFAC list?" -> call screen_sanctions({"name": "Kim Jong-un", "country": "KP", "type": "person"}) user: "Run a sanctions check on this person before onboarding" -> call screen_sanctions({"name": "Ivan Petrov", "country": "RU", "type": "person"}) user: "Do a compliance check -- is this company sanctioned?" -> call screen_sanctions({"name": "Mahan Air", "country": "IR", "type": "entity"})
WHEN TO USE: Use before onboarding a counterparty, processing a payment, engaging a vendor, or doing any due-diligence step that requires knowing whether a person or entity appears on official sanctions lists. Essential for agents doing business formation, vendor qualification, payments onboarding, trade compliance, or any workflow where a sanctioned counterparty is a legal or reputational risk. WHEN NOT TO USE: Do not use as a substitute for full KYC/AML screening -- this covers sanctions lists only, not PEP (Politically Exposed Person) databases, adverse media, or credit risk. Do not treat a negative result as a compliance clearance; it is informational only. Do not use for bulk screening of large lists -- each call is a live API query. COST: free within the daily quota, then $0.02 per call LATENCY: ~2000ms
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Full name of the person or entity to screen, e.g. 'Kim Jong-un' or 'ACME Trading LLC'. Use the most complete name available for best accuracy. | |
| type | No | Optional entity type hint. 'person' for individuals, 'entity' for organizations/companies. Omit to screen both. | |
| country | No | Optional ISO 3166-1 alpha-2 country code or country name (e.g. 'IR', 'Iran'). It ANNOTATES AND RANKS results; it never removes any. Each EU/UK match carries country_match: true, false, or null when the listing records no country. Nothing is dropped on a mismatch, because the country we hold is the address/nationality on the listing rather than everywhere a party operates - excluding on it would return a clean screen for someone who IS listed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds substantial behavior beyond them: the UN list is intentionally excluded for licensing reasons, lists_screened may vary per call, reason_code becomes 'partial_screening' on partial failure, and screening_status must be branched on instead of matched. It also discloses the compliance_receipt signing and the no-fabrication guarantee.
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?
Though detailed, the description is well-structured with headers, examples, and explicit cost/latency fields. Every section earns its place by addressing a real invocation risk: partial screening, false-clear semantics, and source attribution. The most decision-critical warning (never treat matched:false as clean) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden of explaining return values and failure modes: it names screening_status values, matched, matches structure, lists_screened, sources_unavailable, reason_code, and compliance_receipt. It also covers cost, latency, and response verification. Nothing an agent needs to call and interpret this tool 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 baseline is 3. The tool description adds value by showing exact example mappings from natural-language queries to parameters and reinforces the country parameter's annotate-never-filter behavior, which prevents an agent from incorrectly using country as a hard filter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Free screening of a name or entity against official sanctions lists') and names the exact lists screened (OFAC, EU, UK). It is unmistakably distinct from generic tools like check_compliance by scoping the behavior to sanctions-only screening.
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' (onboarding, payments, vendor engagement, due diligence) and 'WHEN NOT TO USE' (not a substitute for full KYC/AML, not bulk screening, not a compliance clearance). It even gives concrete example user queries and their corresponding parameter mappings, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
self_testARead-onlyIdempotentInspect
Service health probe: runs 6 internal checks and reports how many passed. Confirms the server is up and responding - it does NOT probe each tool individually. Use to verify connectivity before production use.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Run a health check before I send the broadcast" -> call self_test({})
WHEN TO USE: Use at agent startup, before high-stakes task sequences, or after receiving unexpected errors to check if the service is degraded. WHEN NOT TO USE: Do not call more than once per minute in production. COST: free - no key required LATENCY: ~200ms
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond those: the exact number of checks, the fact that it does not probe individual tools, cost, latency, and a rate-limit warning. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with front-loaded purpose, followed by example, usage guidance, cost, and latency. Every section adds decision-relevant information 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 zero-parameter health probe with strong annotations, the description is complete: it explains what is checked, what the result means, when to call it, when not to call it, and operational characteristics. No output schema exists, but 'reports how many passed' is adequate for this simple 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?
There are zero parameters, so the schema imposes no semantic burden. The description reinforces the empty call with 'call self_test({})' in the example, which is sufficient; no deeper parameter explanation is needed.
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 ('Service health probe: runs 6 internal checks and reports how many passed') and explicitly distinguishes this from checking individual tools. It clearly says what the tool does and what it does not do.
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' guidance covers startup, high-stakes sequences, and error recovery. 'WHEN NOT TO USE' gives a concrete rate-limit constraint, and the 'does NOT probe each tool individually' statement helps route agents away from incorrect use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageADestructiveInspect
Send a message on behalf of an agent's user or an SMB across WhatsApp (free during launch), SMS, email, or voice. Five message types: transactional, reminder, follow_up, notification, marketing. Every send routes through a non-bypassable compliance gate (TCPA, GDPR, CASL, PDPL across 26 jurisdictions) that enforces opt-in consent for marketing/promotional content — marketing without recorded consent is rejected at runtime with a structured compliance_violation receipt. Channel is abstracted: specify intent and recipient; the service selects and falls back across channels.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Text the salon I'll be 10 minutes late" -> call send_message({"recipient": {"id_type": "smb_id", "id_value": "smb_xyz"}, "message_type": "notification", "content": {"body": "Running about 10 minutes late for my appointment."}, "preferred_channel": "sms"}) user: "Email the dentist about insurance" -> call send_message({"recipient": {"id_type": "email", "id_value": "front-desk@example-dental.com"}, "message_type": "transactional", "content": {"body": "Do you accept Cigna insurance?"}, "preferred_channel": "email"})
WHEN TO USE: Use to: (a) confirm a booking the agent just made, (b) reply to a customer who messaged the SMB first, (c) follow up on a quote the user requested, (d) send appointment reminders the SMB owes its customer, (e) send marketing messages to recipients who have opted in (with consent_record_id). The gate verifies consent on every send. WHEN NOT TO USE: Do NOT use for OTPs or critical transactional confirmations — use send_transactional_confirmation. Do NOT attempt to send marketing without a consent_record_id pointing at a real opt-in — the gate will reject the send and log a compliance_violation. Do NOT attempt bulk / list-based / drip / cold outreach — those are out of scope and the rate limiter will throttle abuse. COST: from $0.02 per_call_variable (see preview_cost for exact) LATENCY: ~800ms EXECUTION: sync_fast (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| recipient | Yes | ||
| business_id | No | Optional stable id for the recipient business. Enables global demand shaping (we rate-limit total inbound across ALL agents so businesses stay responsive instead of blocking us). | |
| send_at_iso | No | NOT SUPPORTED YET. We do not schedule messages. Supplying a time more than 2 minutes in the future is REFUSED (reason_code scheduling_not_supported) rather than sent immediately, which is what used to happen. Call send_message at the moment you want delivery, or omit this field. | |
| message_type | Yes | Intent tag for the message. Five permitted types. 'marketing' is allowed only when paired with a valid consent_record_id; the compliance gate verifies the consent at send time and rejects (compliance_violation receipt) if it's missing, expired, or revoked. | |
| on_behalf_of | No | Who this message is FOR (your end-user's name/label). On WhatsApp this opens a tracked conversation and travels in-message as '#4821 for Sara (via HatchLoop)', so the business knows who it is talking to and their reply is matched back to this exact request instead of guessed. Strongly recommended for two-way channels. | |
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. | |
| preferred_channel | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a state-changing, non-idempotent operation, and the description builds on that with a non-bypassable compliance gate, consent rejection behavior, channel fallback, cost/latency, and sync_fast with get_outcome retrieval. It discloses more behavioral context than any structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with example queries, WHEN TO USE/WHEN NOT TO USE, and cost/latency/execution sections. It earns most of its length; a small amount of compliance warning is 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?
For a complex, state-changing tool with no output schema, the description covers send scenarios, exclusions, cost, latency, and result retrieval. The absent consent_record_id in the schema and lack of guidance on the remaining enum choices keep it from being 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?
Schema coverage is only 63%, and the description compensates with concrete example mappings (user utterance to recipient/content/preferred_channel) and explains the marketing restriction and message_type intent tagging. However, it repeatedly references consent_record_id as a required input while the schema exposes no such parameter, which is a real usability gap.
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?
Description opens with a specific verb+resource ('Send a message') and then narrows scope: channels (WhatsApp/SMS/email/voice), actor (agent's user or SMB), and five message types. It also differentiates itself from send_transactional_confirmation in the negative guidance, so an agent can tell this tool apart from its 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?
Contains an explicit WHEN TO USE section with five concrete scenarios and a WHEN NOT TO USE section with the specific sibling (send_transactional_confirmation), the compliance rule for marketing, and a ban on bulk/cold outreach. This is the strongest possible usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_transactional_confirmationADestructiveInspect
Idempotent transactional messages: OTPs, booking confirmations, payment receipts, cancellation notices. Falls back across configured channels; an unconfigured channel fails honestly rather than reporting a delivery that did not happen.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Send the booking confirmation receipt to my email" -> call send_transactional_confirmation({"recipient": {"id_type": "email", "id_value": "customer@example.com"}, "confirmation_type": "booking_confirmation", "data": {"appointment_time": "2026-09-03T15:00:00Z", "business_name": "Salon 718"}, "preferred_channel": "email"})
WHEN TO USE: Use for any message that MUST be delivered reliably — OTPs, booking confirmations, receipts. Do not use for marketing. WHEN NOT TO USE: Do not use for marketing or promotional messages. Do not use for conversational messages. COST: $0.02 per_call LATENCY: ~500ms EXECUTION: sync_fast (use get_outcome to retrieve result)
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Type-specific payload; e.g., {otp_code} for otp, {appointment_time, smb_name} for booking_confirmation | |
| recipient | Yes | ||
| idempotency_key | No | Optional client-supplied key for safe retries. Replaying the same key within 24h returns the original receipt - the operation is NOT re-executed and NOT re-charged. | |
| confirmation_type | Yes | ||
| preferred_channel | No | sms |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims idempotency and the schema's idempotency_key says retries are not re-executed/re-charged, while the annotation idempotentHint=false indicates the operation is not idempotent; this is a direct contradiction. The useful fallback and honest-failure details cannot overcome that conflict.
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 tool description is structured with example, when-to-use, cost, latency, and execution sections; the key routing guidance is front-loaded. It is slightly repetitive about not using marketing, but no major wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers channel fallback behavior, honest failure, idempotency semantics, cost, latency, and how to retrieve the result via get_outcome. It is reasonably complete for a side-effectful send tool, though the invalid example and the idempotency contradiction leave some ambiguity.
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 only 40%, so the description needed to clarify the parameters, but its example uses recipient.id_type/id_value while the schema requires recipient.phone_or_email. It also uses business_name in the example while the schema's data description says smb_name for booking_confirmation, creating ambiguous guidance for constructing the payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (transactional confirmations) and enumerates concrete types: OTPs, booking confirmations, payment receipts, cancellation notices. It clearly separates this tool from conversational messaging, and the example query reinforces the intended use.
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 and WHEN NOT TO USE sections state that this tool is for messages that must be delivered reliably and must not be used for marketing or conversational messages. Sibling differentiation is implied through the exclusions and transaction-specific examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_businessARead-onlyIdempotentInspect
Look up what we know about a business in our supply network: its contact channels, capabilities, and when the record was last verified. This is a DIRECTORY LOOKUP - it does not contact the business.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Confirm smb_imp_abc actually does emergency plumbing" -> call verify_business({"smb_id": "smb_imp_abc", "capability_to_verify": "emergency_plumbing"})
WHEN TO USE: Use before sending communications or scheduling if you have an unverified SMB identifier, or if the agent's task requires confirmed capability (e.g., 'I need to be sure they do emergency plumbing'). WHEN NOT TO USE: Do not use if the SMB was returned from find_business within the last 24 hours — those results are already verified. COST: free - no key required LATENCY: ~500ms
| Name | Required | Description | Default |
|---|---|---|---|
| smb_id | Yes | ||
| capability_to_verify | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful context beyond annotations by stating that the tool does not contact the business and by providing cost (free, no key) and latency (~500ms), which helps an agent decide to invoke 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?
The description is front-loaded with the core behavior and then uses labeled sections (example, when to use, when not to use, cost, latency). Every section adds decision-relevant information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description states what the lookup returns (contact channels, capabilities, last verified), when to call it, when not to call it, cost, and latency. This is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates with a worked example mapping smb_id and capability_to_verify to concrete values, and the 'WHEN TO USE' text explains capability_to_verify as a confirmed-capability check. It doesn't explicitly define the exact smb_id format or the optionality behavior, but the example and context make parameter usage clear enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource ('Look up what we know about a business in our supply network') and lists the returned data (contact channels, capabilities, last verified). It adds a sharp disambiguation ('DIRECTORY LOOKUP - it does not contact the business') that separates it from call_business, but it does not explicitly differentiate from the similarly named sibling verify_company_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'WHEN TO USE' and 'WHEN NOT TO USE' sections give explicit conditions with a concrete example: use before communications/scheduling for unverified identifiers or confirmed capability, and avoid when find_business returned the SMB within 24 hours because it is already verified. It names the alternative tool find_business, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_company_recordARead-onlyIdempotentInspect
Free, live lookup of a company official registry record. Queries the GLEIF global LEI registry (primary, 2.6 million legal entities worldwide) and SEC EDGAR (US public companies) to return the official legal name, LEI, entity status, jurisdiction, registered address, and registry authority. Never fabricates: if the company is not found in these free registries, returns an honest not_found with the sources that were queried.
EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Is Apple Inc a real registered company?" -> call verify_company_record({"name": "Apple Inc", "country": "US"}) user: "Look up the LEI for Volkswagen AG" -> call verify_company_record({"name": "Volkswagen AG", "country": "DE"}) user: "Verify this LEI: 529900HNOAA1KXQJUQ27" -> call verify_company_record({"name": "Volkswagen AG", "lei": "529900HNOAA1KXQJUQ27"})
WHEN TO USE: Use when you need to verify that a company exists as a registered legal entity and retrieve its official registry details -- before signing a contract, qualifying a vendor, validating a counterparty, or populating a due-diligence record. Accepts a legal name plus optional country filter or a direct LEI for a precise lookup. WHEN NOT TO USE: Do not use to verify private companies not registered with GLEIF or SEC. Do not use as an exhaustive fraud-detection tool; this is a first-pass existence check against free public registries, not a full KYC screen. COST: free within the daily quota, then $0.02 per call LATENCY: ~800ms
| Name | Required | Description | Default |
|---|---|---|---|
| lei | No | Optional 20-character Legal Entity Identifier for a direct, precise lookup. | |
| name | Yes | Legal company name to look up, e.g. Apple Inc or Volkswagen AG. | |
| country | No | Optional ISO 3166-1 alpha-2 country filter (e.g. US, DE, GB). Narrows GLEIF results to one jurisdiction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond that: it states the tool never fabricates results, returns an honest 'not_found' with which sources were queried, and discloses cost and latency. This behavioral disclosure is not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably long but well-structured with clear headers (introduction, examples, when to use/not, cost, latency). It front-loads the core purpose and uses concrete examples that add value without excessive rambling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 3 simple parameters and no output schema, the description is exceptionally complete. It specifies the registries, return fields, not_found behavior, source transparency, cost, latency, and usage patterns. An agent has all necessary information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it restates parameter purposes and provides usage examples, but does not offer deeper semantic detail (e.g., how to combine parameters, precedence rules). The examples illustrate but do not significantly enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'verify' and resource 'company record', and it details the exact registries queried and fields returned, making the purpose unambiguous. It does not explicitly differentiate from the sibling tool verify_business, though the focus on GLEIF/SEC and LEI distinguishes it implicitly.
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?
Includes dedicated 'WHEN TO USE' and 'WHEN NOT TO USE' sections with concrete scenarios (contract signing, vendor qualification) and exclusions (private companies, KYC). It does not name alternative tools, but the guidance is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
- Changed
map_trade_restriction2 fields changed- changed
Input schema / properties / parties / descriptionPrevious value: -"Optional list of party names to screen (exporter, importer, freight forwarder, end-user, etc.). Each name is screened against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO)."New value: +"Optional list of party names to screen (exporter, importer, freight forwarder, end-user, etc.). Each name is screened against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO). At most 20 parties per call - a longer list is refused outright (bad_input) rather than partially screened; split it across calls." - added
Input schema / properties / parties / maxItemsAdded value: +20
1 tool update
- Changed
mint_key1 field changed- changed
Input schema / properties / nonce / descriptionPrevious value: -"Random value (UUID or hex). Prevents replay attacks — use a fresh nonce each call."New value: +"Random value (UUID or hex). Prevents replay attacks — use a fresh nonce each call."
2 tool updates
- Added
check_quota - Changed
mint_key1 field changed- changed
Input schema / properties / nonce / descriptionPrevious value: -"Random value (UUID or hex). Prevents replay attacks — use a fresh nonce each call."New value: +"Random value (UUID or hex). Prevents replay attacks — use a fresh nonce each call."
1 tool update
- Added
lookup_us_contracts
1 tool update
- Added
mint_key
2 tool updates
- Changed
find_business1 field changed- added
Input schema / properties / availability_window / descriptionAdded value: +"Accepted but NOT APPLIED - it does not narrow results. We do not hold live calendars for the supply network. The response carries availability_window_applied: false when you send one. To book a specific slot use schedule_appointment with requested_time, which checks real availability."
- Changed
send_message1 field changed- changed
Input schema / properties / send_at_iso / descriptionPrevious value: -"Schedule for future delivery; omit for immediate"New value: +"NOT SUPPORTED YET. We do not schedule messages. Supplying a time more than 2 minutes in the future is REFUSED (reason_code scheduling_not_supported) rather than sent immediately, which is what used to happen. Call send_message at the moment you want delivery, or omit this field."
2 tool updates
- Changed
map_trade_restriction1 field changed- changed
Input schema / properties / parties / descriptionPrevious value: -"Optional list of party names to screen (exporter, importer, freight forwarder, end-user, etc.). Each name is screened against OpenSanctions (40+ official lists) and OFAC SDN."New value: +"Optional list of party names to screen (exporter, importer, freight forwarder, end-user, etc.). Each name is screened against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO)."
- Changed
screen_sanctions1 field changed- changed
Input schema / properties / country / descriptionPrevious value: -"Optional ISO 3166-1 alpha-2 country code (e.g. 'US', 'RU', 'IR'). Narrows results to entities associated with this country."New value: +"Optional ISO 3166-1 alpha-2 country code or country name (e.g. 'IR', 'Iran'). It ANNOTATES AND RANKS results; it never removes any. Each EU/UK match carries country_match: true, false, or null when the listing records no country. Nothing is dropped on a mismatch, because the country we hold is the address/nationality on the listing rather than everywhere a party operates - excluding on it would return a clean screen for someone who IS listed."
1 tool update
- Added
get_conversation
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
135 MCP tools: geo, email, phone, company, DNS, FX, equities, weather, tax, econ, intel — one key.
113 MCP tools: oracle, escrow, compliance, remittance, AI. 12 free tools, PAYG $0.001/call.
327 tools, 92 providers. Pay per call via x402 + MPP. One MCP endpoint.
- sendifaiOAuthcom.sendifai
335 MCP tools, 75 playbooks. AI-native CRM, email/SMS, events, OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenance26 US federal data domains as 23 MCP tools. Ed25519 signed responses. Free, no API key.951MIT
- AlicenseNot gradedqualityCmaintenance36 enterprise MCP tools for AWS security, infrastructure generation, AI workflows, and agent governance. IAM validation, MFA compliance, CloudFormation/SAM generation, DynamoDB design, OAuth validation, vector embeddings, error analysis, data lake readiness, 12 ACI governance tools for AI agent safety, and 4 local interview tools.112MIT
- AlicenseAqualityFmaintenanceProvides 14 MCP tools for AI agent infrastructure, enabling knowledge base queries, skill search, handoffs, blueprint validation, trust scoring, identity verification, SLA validation, and compliance checks.22MIT
- AlicenseNot gradedqualityDmaintenance498 MCP tools across 12 industry verticals. Marketplace, escrow, DeFi, legal, healthcare, insurance, construction, and trades. USDC payments on Base L2.9MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Most tools target distinct resource+action pairs (find_business vs verify_business, check_booking_link vs import_booking_url, get_status vs get_outcome). The main confusable pairs are send_message vs send_transactional_confirmation and verify_business vs verify_company_record, but their descriptions draw clear boundary lines.
The set overwhelmingly follows lower_snake_case verb_noun naming (call_business, check_quota, find_business, send_message, verify_company_record). Minor deviations like self_test and mint_key, plus inconsistent verb choices (lookup_ vs get_ vs find_), prevent a perfect score.
At 23 tools, the server falls into the heavy range and bundles several unrelated domains: SMB booking/messaging, trade and sanctions compliance, company verification, and platform operations. Each tool is individually reasonable, but the set feels like multiple servers merged into one.
Core SMB workflows are well covered: find/verify/import/book, messaging with conversation handling, and compliance preflights. Notable gaps include no consent-record management even though send_message requires consent_record_id for marketing, no update/delete lifecycle for leads or businesses, and no webhook configuration despite webhooks being referenced.