Skip to main content
Glama

Server Details

Odile Labs: AI agents reach businesses by phone number (Direct); Gate keys, audit. Agentforce-ready.

Ownership verified
Status
Healthy
Uptime
95.1% over 40 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
tolga-boop/odile-mcp
GitHub Stars
0

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action, and the descriptions actively cross-reference siblings ('call find_business_agent first', 'not for messages callers left on your line — use get_line_messages'), which strongly reduces misselection. The remaining soft spot is the contact-a-business pair: call_business vs send_to_business require the agent to reason about directory lookup results and voice fallback before choosing, and get_direct_payment vs get_direct_usage sit close together by name.

Naming Consistency4/5

Nearly all names are snake_case verb_noun (find_business_agent, send_to_business, get_replies, reply_to_business, answer_call_question). The minor deviations are the get_direct_* prefix acting as an implicit namespace and get_m2m_network breaking that pattern, but everything is readable and predictable.

Tool Count5/5

Ten tools is well within the healthy range for a multi-channel business-contact platform. Each tool owns a distinct lifecycle stage (discovery, send, reply, call, live-call answer, result polling, payment check, balance, pricing), so none feels redundant.

Completeness3/5

The outbound path is well covered end to end, including payments and rate limits, but the surface is referenced-tool-incomplete: descriptions repeatedly point to get_line_calls, get_line_messages and get_agent_services, none of which exist here, so inbound answering-line work is a dead end. There is also no way to list conversations/tasks or recover a thread_id you did not persist, forcing agents to hold identifiers externally.

Available Tools

10 tools
answer_call_questionAnswer a question during your business callA
Destructive
Inspect

Give the calling assistant your answer to a question the business asked during a call placed with call_business, so the call can continue. Use it only when get_call_result shows state input_required (its pending_question holds the question); reply within 45 seconds or the assistant tells the business the person will follow up and carries on. The assistant uses the answer on the live call and it cannot be taken back, so keep it short and factual (up to 300 characters). It is refused if it contains a number of four to eight digits, a card-length number, or words such as password, PIN or code; never include payment card numbers, passwords or one-time codes. Requires direct:tasks and ownership of the call. Returns the call state; read get_call_result for the outcome. Example: task_id='dv_9a3', answer='A 40-gallon gas heater, installed in 2016.'

NameRequiredDescriptionDefault
answerYesThe answer to the pending question, in plain words, without card numbers, passwords, one-time codes or any number of four to eight digits.
task_idYesThe task_id returned by call_business.

TDQS

A4.8/5.0
Behavior5/5

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

Goes far beyond destructiveHint=true and idempotentHint=false by naming the real consequences: the answer is spoken on a live call and cannot be taken back, there is a 45-second deadline after which the assistant proceeds without you, and specific content patterns cause outright rejection. It also states the required scope (direct:tasks) and ownership precondition, which no annotation conveys.

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

Conciseness4/5

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

Purpose and the gating condition come first, then consequences, then restrictions — a sensible front-load. It is a dense multi-clause paragraph with some repetition between the prose restriction list and the schema's own wording, which keeps it from a 5.

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

Completeness5/5

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

No output schema exists, yet the description tells the agent exactly what comes back ('the call state') and where to look next (get_call_result). With required scopes, ownership, timing, content limits and an example all covered, nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the 300-character practical limit, the 'keep it short and factual' style guidance, the concrete input_required source of answer, and a worked task_id/answer example. Minor residual gap is that it doesn't explain what a task_id looks like structurally beyond the example.

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

Purpose5/5

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

States a specific verb and resource ('give the calling assistant your answer to a question the business asked') and ties it to the specific tool that produces the need (call_business). An agent can distinguish it from call_business, reply_to_business, and get_call_result without opening any schema.

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

Usage Guidelines5/5

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

Explicit gating condition: 'Use it only when get_call_result shows state input_required (its pending_question holds the question)', with the alternative behavior spelled out if the 45-second window lapses. The when-to-use, when-not-to-use, and prerequisite are all present.

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

call_businessCall a business without a Direct cardA
DestructiveIdempotent
Inspect

Place an outbound phone call to a business to ask for information on a named person’s behalf. Use it when find_business_agent returned not_found for a US or Canadian number; when a Direct card exists use send_to_business. It dials a real number and a call cannot be recalled once placed. Requires direct:tasks, human opt-in at https://odilelabs.com/developers#voice and the person’s permission for this call (on_behalf_consent true). Informational calls only: no sales, payments or account access. Calls run Monday to Friday, 9:00 to 17:00 in the business’s local time; outside that window the request is refused and the error includes next_window. A number is not called twice within 24 hours, and each account has a daily call cap. number and callback_number must be callable US or Canadian E.164 numbers, callback_number being the person’s own, never the business’s. message_id is required: reuse it unchanged on every retry so only one call is placed. Returns {task_id, state (queued, completed or failed), status}; read get_call_result for progress and answers. Voice credit costs: get_m2m_network. Example: number='+15615550123', business_name='Harbor Plumbing', caller_name='Ana Diaz', callback_number='+15615550199', need='Do you replace water heaters?', on_behalf_consent=true, message_id='call-8f2'.

NameRequiredDescriptionDefault
needYesThe information the person wants from the business.
numberYesThe business’s E.164 phone number, e.g. +15615550123.
questionsNoUp to five questions to ask the business.
message_idYesA stable request id; reuse it unchanged on every retry.
caller_nameYesThe named person who requested this call.
max_secondsNoMaximum call duration, from 60 to 600 seconds, subject to available credits.
business_nameYesThe business to call.
callback_numberYesThat person’s own callback number in E.164, never the business’s.
on_behalf_consentYesTrue only after that person asked for this call.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past annotations: the call 'cannot be recalled', requires the direct:tasks scope, developer opt-in, and per-person consent; calls run Mon–Fri 9:00–17:00 local with a next_window error; no number is dialed twice in 24h and accounts have a daily cap. It also states the return shape and routes progress checks to get_call_result, plus credit cost lookup via get_m2m_network.

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

Conciseness4/5

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

Front-loaded with purpose and tool routing, then constraints, then a worked example — all sentences carry information. It is a dense single block, however, and the eligibility/compliance clauses could be grouped more scannably rather than run together.

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

Completeness5/5

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

For a 7-required-parameter destructive action with no output schema, the description covers prerequisites, consent, scheduling, idempotency, return fields, and follow-up tooling. Nothing an agent needs to invoke it safely is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3; the description adds genuinely new meaning — number and callback_number must be callable US/Canadian E.164, callback_number is the person's own and never the business's, and message_id must be reused unchanged on retries to guarantee a single call. It does not elaborate on optional questions/max_seconds, keeping it just below a 5.

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

Purpose5/5

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

States a specific verb and resource ('place an outbound phone call to a business to ask for information on a named person's behalf') and explicitly differentiates from siblings find_business_agent and send_to_business with the exact conditions that select each. An agent can choose correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('when find_business_agent returned not_found for a US or Canadian number'), when-not ('when a Direct card exists use send_to_business'), and hard exclusions ('Informational calls only: no sales, payments or account access'). Operating-window behavior and the refusal path are also spelled out.

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

find_business_agentFind a business agentA
Read-onlyIdempotent
Inspect

Look up a business by its phone number in the Odile Direct directory and get its Direct card. Start here: send_to_business needs the business id () from this card. Pass the number as customers dial it, in E.164 with the country code and no spaces or dashes (+15615550123); any other format is rejected. Returns {agent_card, business, trade, town}: agent_card is the A2A card URL (/b// for a business line, /c// for a claimed listing; pass that to send_to_business), and the card lists the skills the business accepts. A number that is not on Direct returns not_found with claim_url and listings_url; for a US or Canadian number, voice_fallback says whether call_business is available. Capped at 30 lookups per IP per hour without sign-in and 10000 per key per day signed in. Read-only; contacts no business. Example: number='+15615550123' returns the card whose id you pass to send_to_business as biz.

NameRequiredDescriptionDefault
numberYesThe business's phone number in E.164, e.g. +15615550123.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (which only cover read-only/idempotent/openWorld) by disclosing rate limits (30 lookups per IP per hour anonymous, 10000 per key per day signed in), the error payload shape, and that it 'contacts no business.' That is exactly the operational context an agent needs 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.

Conciseness4/5

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

Front-loaded with purpose and the 'start here' routing instruction, then format, then returns, then limits and edge cases — a sensible order. It runs long and packs many clauses into single sentences, but nearly every clause carries actionable information; the trailing example is mildly redundant with the schema.

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

Completeness5/5

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

There is no output schema, yet the description documents the return object fields ({agent_card, business, trade, town}), the meaning of the /b/ vs /c/ card paths, and the not_found error shape. Nothing an agent needs to call it and consume the result is missing.

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

Parameters4/5

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

Schema coverage is 100% and the schema already has the E.164 pattern and an example, so the description's format restatement is partly redundant. It does add meaning by explaining the number must be 'as customers dial it' and that any other format is rejected, which clarifies the real-world source of the value.

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

Purpose5/5

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

States a specific verb+resource: 'Look up a business by its phone number in the Odile Direct directory and get its Direct card.' It also positions itself relative to siblings (send_to_business needs the id from this card; call_business availability via voice_fallback), so an agent can tell what this tool is and is not.

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

Usage Guidelines5/5

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

'Start here' explicitly establishes this as the entry point before send_to_business, and it names the downstream alternative for unlisted US/Canadian numbers via voice_fallback/call_business. It also states a negative case (not on Direct → not_found with claim_url and listings_url), 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.

get_call_resultRead your business call resultA
Read-onlyIdempotent
Inspect

Read the state and outcome of a business call you placed with call_business (an outbound call; the calls your own answering line took are in get_line_calls), using its task_id. Call it again until the state is final: queued, dialing and in_call are still in progress; completed, no_answer, voicemail, refused and failed are final; input_required means the business asked a question that answer_call_question can answer within 45 seconds. Requires direct:tasks and ownership of the call (another account’s task_id returns Not found). Returns {task_id, state, outcome, duration_seconds, transcript, answers, summary, cost {credits}}, plus pending_question {question, expires_at} while a question waits. Changes nothing, starts no call and is safe to repeat. Example: task_id='dv_9a3' from call_business; stop polling once state is completed, failed or no_answer.

NameRequiredDescriptionDefault
task_idYesThe task_id returned by call_business.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds valuable context beyond them: requires direct:tasks scope, ownership enforcement (another account's task_id returns Not found), the full state machine, the return shape including pending_question with expires_at, and confirmation that it changes nothing and starts no call.

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

Conciseness5/5

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

The description is dense but front-loaded: purpose first, then polling states, auth/ownership, return values, and a short example. Every sentence carries operational value and there is no filler.

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

Completeness5/5

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

No output schema exists, but the description fully specifies the return shape ({task_id, state, outcome, duration_seconds, transcript, answers, summary, cost}, plus pending_question). Combined with the state machine and auth notes, an agent has everything needed to call and poll correctly.

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

Parameters4/5

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

Schema coverage is 100% and already documents that task_id comes from call_business. The description adds a concrete format example (task_id='dv_9a3') and ties the parameter to the ownership/Not found behavior, providing meaningful extra semantics beyond the schema.

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

Purpose5/5

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

States a specific verb and resource: read the state and outcome of a business call placed with call_business. It explicitly distinguishes this from get_line_calls (calls your answering line took) and from answer_call_question, so an agent can tell exactly which tool to use.

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

Usage Guidelines5/5

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

Gives explicit polling guidance: call it again until the state is final, with queued/dialing/in_call as in-progress and completed/no_answer/voicemail/refused/failed as final. It also names answer_call_question as the alternative when input_required appears within the 45-second window.

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

get_direct_paymentCheck your merchant checkout and bookingA
Idempotent
Inspect

Check an existing deposit booking on your signed-in Direct account: reconcile its Stripe Checkout payment and return its receipt and the separate booking state. Use it after send_to_business returned a payment_url for a deposit booking, to see whether the person has paid; it cannot start a payment, which the person makes on Stripe’s hosted page. Pass biz (the business id from its card) and task_id (the task id send_to_business returned for that booking). Requires direct:tasks. Uses only the stored merchant account and amount and creates no new charge or booking identity; a verified paid checkout may finish its already-authorized held booking. Payout status remains unknown: paid does not mean a bank payout. Safe to repeat. Example: biz='harbor-plumbing', task_id='tk_5d0' after send_to_business returned a payment_url for a deposit booking.

NameRequiredDescriptionDefault
bizYesThe business id (from its card) the deposit booking was made with.
task_idYesThe task id send_to_business returned for that booking.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond annotations: it names the required scope (direct:tasks), discloses that it 'creates no new charge or booking identity,' warns that a verified paid checkout 'may finish its already-authorized held booking' (explaining why readOnlyHint is false for a get_* tool), cautions that 'paid does not mean a bank payout,' and confirms repeat safety. This is exactly the contextual disclosure annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the verb and purpose, and every sentence carries operational weight. It is on the long side, with mild redundancy about payment_url and the example repeating the trigger condition already stated in the second sentence.

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

Completeness5/5

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

No output schema, but the description still tells the agent what comes back (receipt plus separate booking state), what is and isn't knowable (payout status unknown), prerequisites, and side-effect boundaries. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds provenance ('the business id from its card', the task id send_to_business returned) and a concrete example with format hints (biz='harbor-plumbing', task_id='tk_5d0'), though it largely restates the schema's own parameter wording.

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

Purpose5/5

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

States a specific verb and resource: 'Check an existing deposit booking... reconcile its Stripe Checkout payment and return its receipt and the separate booking state.' It also distinguishes itself from siblings by naming send_to_business as the predecessor and noting that it 'cannot start a payment.'

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

Usage Guidelines5/5

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

Explicit trigger: 'Use it after send_to_business returned a payment_url for a deposit booking.' Explicit exclusion: 'it cannot start a payment, which the person makes on Stripe's hosted page.' The only prerequisite, the direct:tasks scope, is named.

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

get_direct_usageYour Direct allowance and creditsA
Read-onlyIdempotent
Inspect

Read your own Direct account ledger: the signed-in account’s UTC free-send allowance, prepaid balance in cents, reserved cents and last 20 charges. It never buys credit and does not list costs (see get_m2m_network). Use it before sending tasks that may cost credit; a payment_required reply from send_to_business carries the top-up link. Uses the same ledger as REST and your developer page. Requires direct:tasks and sign-in. Changes nothing; phone minutes and legacy credits are tracked separately. Example: call it with no arguments before a booking to confirm the allowance or balance covers it.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Adds context the annotations do not: the direct:tasks OAuth scope and sign-in requirement, the closed scope of the data (only the last 20 charges), and that phone minutes and legacy credits live elsewhere. 'Changes nothing' and 'never buys credit' partly restate readOnly/destructive hints, which keeps it just short of a 5.

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

Conciseness4/5

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

Front-loaded with the resource and returned fields, then usage, then prerequisites. Every sentence is relevant, though the parenthetical enumerations and the 'same ledger as REST and your developer page' aside make it denser than strictly necessary.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so by listing each returned datum plus its unit (cents) and window (last 20 charges). Auth requirements, side-effect profile, and boundary with sibling tools are all covered, so nothing an agent needs is missing.

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

Parameters4/5

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

The tool takes zero parameters, which is the baseline-4 case. The description reinforces this with an explicit no-argument invocation example, leaving no ambiguity about how to call it.

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

Purpose5/5

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

States a specific verb (read) plus exact resource (the signed-in account's Direct ledger) and enumerates the fields returned: UTC free-send allowance, prepaid balance in cents, reserved cents, last 20 charges. It also explicitly distinguishes itself from get_m2m_network (which lists costs) and get_direct_payment, so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Gives a concrete trigger ('Use it before sending tasks that may cost credit'), names the follow-up path (a payment_required reply from send_to_business carries the top-up link), and redirects cost lookups to get_m2m_network. Both when-to-use and when-not-to-use are covered.

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

get_m2m_networkOdileM2M networkA
Read-onlyIdempotent
Inspect

Read the OdileM2M network card for Direct: the live skills a business can accept, what each costs in credits, the credit packs, the limits that apply, and the Gate MCP address and quickstart. Use it to cost Direct tasks before sending any. It does not choose between products (get_agent_services) and does not show your own balance (get_direct_usage). Returns the pricing card (currency, credit_cents, packs, lookups) plus live_skills[{id, name, description, credits}], receipts, mcp_url, gate_mcp_url, quickstart_url, docs_url and connect_steps[]. Reference data, nothing account-specific: takes no arguments, needs no sign-in, contacts no business and changes nothing. Example: call it once with no arguments before the first send_to_business of a session.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds non-obvious context: reference data, nothing account-specific, needs no sign-in, contacts no business, and that it is safe to call once per session rather than repeatedly. It stops short of describing freshness/staleness of the pricing card, which would be the remaining behavioral unknown.

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

Conciseness4/5

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

Front-loaded with the purpose and the contents of the card, with the sibling exclusions and the trigger example at the end where they belong. Slightly dense — the long enumerated return list plus the 'changes nothing' restatement of destructiveHint could be trimmed — but nearly every clause carries information.

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

Completeness5/5

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

There is no output schema, so the description compensates by naming the returned fields (pricing card, live_skills shape, mcp_url, gate_mcp_url, quickstart_url, docs_url, connect_steps). Combined with the auth/side-effect disclosure and the call-timing example, an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Zero parameters, so the baseline is a 4, and the description confirms it explicitly with 'takes no arguments', removing any doubt about whether filters or identifiers are required. No further parameter meaning is possible.

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

Purpose5/5

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

Specific verb+resource: 'Read the OdileM2M network card for Direct,' followed by an enumeration of exactly what the card contains (live skills, credit costs, packs, limits, Gate MCP address, quickstart). It explicitly positions itself against two named siblings, so an agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

States the use case ('cost Direct tasks before sending any'), the exclusions with named alternatives (get_agent_services for product choice, get_direct_usage for own balance), and a concrete trigger ('call it once with no arguments before the first send_to_business of a session'). Nothing is left to inference.

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

get_repliesRead replies from a businessA
Read-onlyIdempotent
Inspect

Read the replies in a Direct conversation you started with send_to_business: its status and messages, newest last. Use it to find out whether the business has answered; it only reads and does not wait, so call it again later if there is no reply yet. Not for messages callers left on your own answering line (get_line_messages) or the outcome of a phone call (get_call_result). Pass the thread_id that send_to_business returned; sign in as the original requester with direct:tasks, or supply the private thread_token instead. Returns {thread_id, status (received, business_notified, business_replied, booked, waiting_for_you or closed), caller_name, callback_number, messages[{from: customer or business, text, at}]}. An unknown thread or a wrong token returns not_found, and a thread expires 90 days after its last message. Changes nothing and uses no credits. Example: thread_id='th_7c1' (with thread_token unless you started the thread while signed in) returns the status and messages so far.

NameRequiredDescriptionDefault
thread_idYesThe thread_id returned by send_to_business.
thread_tokenNoThe private thread_token; required unless signed in as the requester who started the thread.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds substantial context beyond them: it does not wait, unknown thread or bad token returns not_found, threads expire 90 days after last message, and it uses no credits. It also describes the return structure in detail.

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

Conciseness4/5

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

Front-loaded with purpose and usage, and most sentences earn their place. The dense return-value enumeration makes it longer than necessary, but the detail is useful and well organized.

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

Completeness5/5

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

Given no output schema and a simple two-parameter read operation, the description covers usage, authentication, failure modes, expiration, and the exact return shape. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented in the schema. The description reinforces where thread_id comes from and the thread_token fallback, plus an example, but adds little semantic information beyond the schema text.

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

Purpose5/5

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

States a specific verb and resource: read replies in a Direct conversation started with send_to_business, including status and messages. It clearly distinguishes itself from sibling tools by naming get_line_messages and get_call_result as out of scope.

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

Usage Guidelines5/5

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

Explicitly says when to use it (to find out whether the business has answered), notes that it does not wait and should be called again later, and names alternatives for related but different needs. It also specifies the required thread_id and authentication options.

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

reply_to_businessReply in a business conversationA
DestructiveIdempotent
Inspect

Send a customer reply in an open Direct conversation and notify the business. Use it after get_replies shows the business answered or asked something; to start a new conversation use send_to_business, and to answer a question during a live phone call use answer_call_question. Pass the thread_id that send_to_business returned and the reply text (1 to 500 characters); sign in as the original requester with direct:tasks, or supply the private thread_token instead. message_id is the retry key: reuse it unchanged when retrying. Returns the A2A {task} for the reply: read its state before telling anyone it was delivered. A delivered reply cannot be recalled and is billed the same way as a take_message task; closed conversations refuse replies. Example: thread_id='th_7c1', text='Thursday after 2pm works, thank you.', message_id='rep-1'.

NameRequiredDescriptionDefault
textYesThe customer’s reply to the business.
thread_idYesThe thread_id returned by send_to_business.
message_idNoYour id for this reply; reuse it unchanged when retrying.
thread_tokenNoThe private thread_token; required unless signed in as the requester who started the thread.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true; the description goes further by saying the reply cannot be recalled, is billed like a take_message task, that closed conversations refuse it, and that message_id is the retry key to reuse unchanged. It also tells the agent to read the returned {task} state before claiming delivery, which is valuable behavioral context. Only gap: it doesn't say what happens on partial failure or how billing/side effects interact with a retried message_id, so it's strong-but-not-exhaustive rather than a full 5.

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

Conciseness4/5

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

Front-loaded purpose, then routing, then parameters, then a worked example — every part earns its place. The parameter sentence is dense (thread_id, text length, auth, retry key in one breath) and could be split for readability.

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

Completeness4/5

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

With no output schema, the description compensates by naming the return value (A2A {task}) and warning to read its state before asserting delivery. Combined with auth, billing, and closed-conversation constraints, an agent has what it needs; only failure-mode details are thin.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented; the description corroborates thread_id provenance (from send_to_business) and reinforces message_id as a retry key. It adds the auth choice (sign in as requester with direct:tasks, or supply thread_token) which is meaningfully beyond the schema text.

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

Purpose5/5

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

States a specific verb and resource ('Send a customer reply in an open Direct conversation') and immediately distinguishes itself from send_to_business (new conversation) and answer_call_question (live phone call). An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('after get_replies shows the business answered'), names two alternatives with the conditions that select them, and adds a prerequisite-style constraint that closed conversations refuse replies.

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

send_to_businessSend a business a message or bookingA
Destructive
Inspect

Send one request to a business found with find_business_agent, using a skill its card lists: take_message (leave a message), check_availability (read open times), book (book a slot check_availability returned), book_first_available (book the first open slot in up to 5 preferred windows) or cancel_booking (cancel a booking you made). Call find_business_agent first; for a business without a card, use call_business. Say an automated assistant is acting, and get the person's permission before booking. A delivered message cannot be recalled; a booking is undone only with cancel_booking. message_id is the retry key: reuse it unchanged on every retry so the request runs once. If you omit it, an identical request from you counts as a retry only within the same UTC day. Returns the A2A v1.0 {task}: read its state before telling anyone a message was delivered or a booking confirmed. A deposit booking returns INPUT_REQUIRED with a payment_url for the person; it is held 30 minutes and confirmed only after payment, which get_direct_payment checks. Failed, refused and unconfirmed tasks are not charged; costs are in get_m2m_network and your balance in get_direct_usage. Messages and confirmed bookings return thread_id and thread_token: use get_replies to read the business’s replies and reply_to_business to answer in the same conversation. Signed-in requesters may omit callback_number for take_message; anonymous requesters still need their own valid number. Example: biz='harbor-plumbing', skill='take_message', message_id='req-8f2', data={caller_name:'Ana Diaz', callback_number:'+15615550199', need:'Leaking water heater, today if possible'}.

NameRequiredDescriptionDefault
bizYesThe business id from its card: the <biz> in /b/<biz>/ or /c/<biz>/.
dataYesThe skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is not charged and does not refund a booking fee. For take_message only, a signed-in requester may omit callback_number and receive replies in the thread.
skillYesOne skill the business card lists.
targetNoline (default) for a business line (/b/ card); claim for a claimed listing (/c/ card), which takes messages only.
message_idNoYour id for this request; reuse it unchanged on every retry so the request runs once.
approval_idNoOnly when the business approves bookings itself: the action_id (da_...) from its approval_required reply, sent with the same message_id and data once the owner approves.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false, openWorldHint=true): it discloses that a delivered message cannot be recalled, that a booking is only undone via cancel_booking, that message_id makes the request run once (and the same-UTC-day fallback when omitted), that deposit bookings are held 30 minutes pending payment, and which outcomes are not charged. It also explains the return contract as an A2A task whose state must be read before reporting success.

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

Conciseness4/5

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

Front-loaded with the action and the skill list, then prerequisites, then invariants, then return behavior, so an agent can stop reading early. It is a dense single paragraph for a genuinely complex tool, but some clauses (costs, balance lookups) could be pulled into a reference rather than the main description.

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

Completeness5/5

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

With no output schema and six parameters including a free-form nested data object, the description still covers the async A2A task envelope, the INPUT_REQUIRED/payment_url deposit case, thread_id/thread_token reuse, and which failure states incur no charge. Nothing an agent needs to interpret the result or retry safely is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already carries field-level meaning and the baseline would be 3; the description adds value by explaining message_id as the retry key across the whole request and by supplying a worked example that shows how biz, skill and the nested data fields compose. The approval_id flow and the anonymous-vs-signed-in callback_number distinction are reinforced rather than duplicated verbatim.

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

Purpose5/5

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

States a specific verb and resource ('Send one request to a business') and immediately enumerates the five skills (take_message, check_availability, book, book_first_available, cancel_booking) that define what the request can be. This distinguishes it from call_business and reply_to_business, which it explicitly routes to for different situations.

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

Usage Guidelines5/5

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

Gives explicit ordering ('Call find_business_agent first'), a named fallback ('for a business without a card, use call_business'), and a routing rule after success ('use get_replies ... and reply_to_business'). It also states a precondition ('get the person's permission before booking') and a required disclosure ('Say an automated assistant is acting').

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

Tool Schema Changelog

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

  1. 10 tool updates
    • Removedbuy_pack
    • Removedget_agent_services
    • Removedget_answering_line
    • Removedget_answering_line_offer
    • Removedget_line_calls
    • Removedget_line_messages
    • Removedget_receptionist_benchmark
    • Removedget_sip_address
    • Removedset_up_answering_line
    • Removedtry_answering_line
  2. 4 tool updates
    • Changedanswer_call_question1 field changed
      • changedInput schema / properties / answer / description
        Previous value: -"The answer to the pending question, without card numbers, passwords or one-time codes."New value: +"The answer to the pending question, in plain words, without card numbers, passwords, one-time codes or any number of four to eight digits."
    • Changedcall_business2 fields changed
      • changedInput schema / properties / callback_number / description
        Previous value: -"That person’s own callback number in E.164."New value: +"That person’s own callback number in E.164, never the business’s."
      • changedInput schema / properties / number / description
        Previous value: -"The business’s E.164 phone number."New value: +"The business’s E.164 phone number, e.g. +15615550123."
    • Changedsend_to_business1 field changed
      • changedInput schema / properties / data / description
        Previous value: -"The skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is free and does not refund a booking fee. For take_message only, a signed-in requester may omit callback_number and receive replies in the thread."New value: +"The skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is not charged and does not refund a booking fee. For take_message only, a signed-in requester may omit callback_number and receive replies in the thread."
    • Changedset_up_answering_line2 fields changed
      • changedInput schema / properties / business_phone / description
        Previous value: -"The business number callers dial today (US, with area code). The owner forwards it to the new line."New value: +"The business number callers dial today (US, with area code, any common format such as (561) 555-0123). The owner forwards it to the new line."
      • changedInput schema / properties / pack / description
        Previous value: -"The first pack: min40: 40 minutes for $10; min200: 200 minutes for $50; out50: 50 resolved conversations for $24.50; out200: 200 resolved conversations for $98."New value: +"The first pack: min40: 40 minutes; min200: 200 minutes; out50: 50 resolved conversations; out200: 200 resolved conversations. Amounts and billing rules: get_answering_line_offer."
  3. 3 tool updates
    • Addedget_replies
    • Addedreply_to_business
    • Changedsend_to_business1 field changed
      • changedInput schema / properties / data / description
        Previous value: -"The skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is free and does not refund a booking fee."New value: +"The skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is free and does not refund a booking fee. For take_message only, a signed-in requester may omit callback_number and receive replies in the thread."
  4. 3 tool updates
    • Addedanswer_call_question
    • Addedcall_business
    • Addedget_call_result
  5. 4 tool updates
    • Changedbuy_pack2 fields changed
      • changedInput schema / properties / pack / description
        Previous value: -"The pack id: formats small | medium | large; minutes m200 | m600 | m2000; calls calls10 | calls50; phone minutes min40 | min200; outcomes out50 | out200; photos starter | growth | scale."New value: +"The pack id: formats small | medium | large; minutes m200 | m600 | m2000; calls calls10 | calls50; phone minutes min40 | min200; outcomes out50 | out200; photos starter | growth | scale; direct direct100c | direct1000 | direct10000."
      • changedInput schema / properties / product / description
        Previous value: -"'formats' credits, meeting 'minutes', phone 'line_minutes', resolved 'line_outcomes', Plate API 'photos', or legacy answered 'calls'."New value: +"'formats' credits, meeting 'minutes', phone 'line_minutes', resolved 'line_outcomes', Plate API 'photos', legacy answered 'calls' or 'direct' Direct credits."
    • Changedfind_business_agent1 field changed
      • addedInput schema / properties / number / description
        Added value: +"The business's phone number in E.164, e.g. +15615550123."
    • Changedget_direct_payment2 fields changed
      • addedInput schema / properties / biz / description
        Added value: +"The business id (from its card) the deposit booking was made with."
      • addedInput schema / properties / task_id / description
        Added value: +"The task id send_to_business returned for that booking."
    • Changedsend_to_business6 fields changed
      • addedInput schema / properties / approval_id / description
        Added value: +"Only when the business approves bookings itself: the action_id (da_...) from its approval_required reply, sent with the same message_id and data once the owner approves."
      • addedInput schema / properties / biz / description
        Added value: +"The business id from its card: the <biz> in /b/<biz>/ or /c/<biz>/."
      • addedInput schema / properties / data / description
        Added value: +"The skill's fields; put skill beside data, never inside it. take_message: caller_name, callback_number (the person's own E.164 number, never the business's), need, optional on_behalf_of and urgency (low, normal, high or urgent). check_availability: optional service and date (YYYY-MM-DD in the business's time zone). book: slot exactly as check_availability returned it, caller_name, callback_number, need. book_first_available: options (1 to 5 windows in order, each {date, optional after and before as HH:MM, optional service}), fallback (none or take_message), caller_name, callback_number, need. cancel_booking: booking_id and cancel_token from the confirmed booking, optional reason (up to 300 characters); cancelling is free and does not refund a booking fee."
      • addedInput schema / properties / message_id / description
        Added value: +"Your id for this request; reuse it unchanged on every retry so the request runs once."
      • addedInput schema / properties / skill / description
        Added value: +"One skill the business card lists."
      • addedInput schema / properties / target / description
        Added value: +"line (default) for a business line (/b/ card); claim for a claimed listing (/c/ card), which takes messages only."
  6. 12 tool updates
    • Changedbuy_pack4 fields changed
      • changedInput schema / properties / line_id / description
        Previous value: -"For product 'calls' or 'line_minutes': the line_id from get_answering_line."New value: +"For product 'calls', 'line_minutes' or 'line_outcomes': the line_id from get_answering_line."
      • changedInput schema / properties / pack / description
        Previous value: -"The pack id: formats small | medium | large; minutes m200 | m600 | m2000; calls calls10 | calls50; phone minutes min40 | min200; photos starter | growth | scale."New value: +"The pack id: formats small | medium | large; minutes m200 | m600 | m2000; calls calls10 | calls50; phone minutes min40 | min200; outcomes out50 | out200; photos starter | growth | scale."
      • changedInput schema / properties / product / description
        Previous value: -"'formats' credits, meeting 'minutes', phone 'line_minutes', Plate API 'photos', or legacy answered 'calls'."New value: +"'formats' credits, meeting 'minutes', phone 'line_minutes', resolved 'line_outcomes', Plate API 'photos', or legacy answered 'calls'."
      • changedInput schema / properties / product / enum
        Previous value: -[
        -  "formats",
        -  "minutes",
        -  "calls",
        -  "line_minutes",
        -  "photos",
        -  "direct"
        -]New value: +[
        +  "formats",
        +  "minutes",
        +  "calls",
        +  "line_minutes",
        +  "line_outcomes",
        +  "photos",
        +  "direct"
        +]
    • Removedcreate_media_job
    • Removedestimate_meal_photo
    • Removedestimate_media_job
    • Removedget_balance
    • Removedget_catalog
    • Removedget_downloads
    • Removedget_job
    • Removedprepare_upload
    • Changedsend_to_business1 field changed
      • changedInput schema / properties / skill / enum
        Previous value: -[
        -  "take_message",
        -  "check_availability",
        -  "book",
        -  "book_first_available"
        -]New value: +[
        +  "take_message",
        +  "check_availability",
        +  "book",
        +  "book_first_available",
        +  "cancel_booking"
        +]
    • Changedset_up_answering_line2 fields changed
      • changedInput schema / properties / pack / description
        Previous value: -"The first pack: min40: 40 minutes for $10; min200: 200 minutes for $50."New value: +"The first pack: min40: 40 minutes for $10; min200: 200 minutes for $50; out50: 50 resolved conversations for $24.50; out200: 200 resolved conversations for $98."
      • changedInput schema / properties / pack / enum
        Previous value: -[
        -  "min40",
        -  "min200"
        -]New value: +[
        +  "min40",
        +  "min200",
        +  "out50",
        +  "out200"
        +]
    • Removedunlock_job
  7. 1 tool update
    • Changedsend_to_business1 field changed
      • addedInput schema / properties / approval_id
        Added value: +{
        +  "pattern": "^da_[a-f0-9]{24}$",
        +  "type": "string"
        +}
  8. 1 tool update
    • Addedget_m2m_network
  9. 1 tool update
    • Changedbuy_pack1 field changed
      • changedInput schema / properties / product / enum
        Previous value: -[
        -  "formats",
        -  "minutes",
        -  "calls",
        -  "line_minutes",
        -  "photos"
        -]New value: +[
        +  "formats",
        +  "minutes",
        +  "calls",
        +  "line_minutes",
        +  "photos",
        +  "direct"
        +]
  10. 1 tool update
    • Addedget_direct_payment
  11. 1 tool update
    • Addedget_direct_usage
  12. 1 tool update
    • Addedget_agent_services
  13. 1 tool update
    • Addedget_sip_address
  14. 1 tool update
    • Changedsend_to_business1 field changed
      • changedInput schema / properties / skill / enum
        Previous value: -[
        -  "take_message",
        -  "check_availability",
        -  "book"
        -]New value: +[
        +  "take_message",
        +  "check_availability",
        +  "book",
        +  "book_first_available"
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Make phone calls and join Zoom, Microsoft Teams and Google Meet meetings from any AI agent. A self-hosted, open-source voice agent that calls businesses and people through your own SignalWire or Twilio number, joins meetings as a bot that answers when spoken to, says it is an AI, and returns the outcome, decisions, action items and transcript.
    14
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Human-in-the-loop approvals and notifications for AI agents via WhatsApp. Enables Cursor, Claude Code, and autonomous AI agents to reach users away from their computers.
    53 npm
    ISC
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.