voygr-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@voygr-mcpCheck if The Blue Bottle Coffee is open and call to ask about hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
voygr-mcp
MCP server for VOYGR place verification and outbound venue calls. Proper stdio MCP: tools, resources, prompts, progress notifications, and elicitation.
Install
cd voygr-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"Requires a VOYGR API key at process start:
export VOYGR_API_KEY=your_key
# or: voygr login your_keyRelated MCP server: vonage-mcp-server-api-bindings
Dry-run (default)
VOYGR_DRY_RUN defaults to 1. Calls only are mocked (magic numbers, scripted
events, canned transcripts). verify_place / verify_places / check_credits
always hit the live VOYGR API via the official voygr Python client.
Magic number | Outcome |
|
|
|
|
| mid-call |
|
|
|
|
|
|
Live dialing:
export VOYGR_DRY_RUN=0
docker compose up -d redis # call state / event cursors
export VOYGR_REDIS_URL=redis://localhost:6379/0
voygr-mcpClaude Desktop (stdio)
Put
VOYGR_API_KEY=...in the project.env(loaded automatically; Claude’s cwd does not matter).Edit
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) and merge:
{
"mcpServers": {
"voygr": {
"command": "/Users/vaarunsinha/voygr-mcp/scripts/claude-desktop-mcp.sh",
"env": {
"VOYGR_DRY_RUN": "1"
}
}
}
}Fully quit and reopen Claude Desktop. Confirm under + → Connectors (or Developer settings) that
voygris connected and tools likeverify_placeappear.
Or point command at .venv/bin/voygr-mcp directly — the server also loads
the package-root .env on start.
Tools
Tool | Role |
| Single POI → agent-safe verdict (not raw open/closed) |
| Batch + normalized cache |
| Structured call ( |
| Resume by call handle |
| Usage / credits |
Consent is never a tool parameter — it is always an elicitation to the human.
Resources / prompt
voygr://call/{id}/transcript— 7-day retention noted in metadatavoygr://call/{id}/eventsPrompt:
verify_before_recommending
Honesty (demo / video)
When recording the 60s demo:
Refusal arm (
verify_placesdropping closed/not_found) should be live API.Mid-call handoff segment should be dry-run (
+1-555-0102) and labeled on screen.List which segments used dry-run in any public write-up.
Tests
pytestTests use ScriptedElicitationProvider (no human). No skip-consent env var ships
in the server.
Stack
Python, official mcp SDK (stdio), voygr PyPI client, httpx (calls API), Redis
(live call state), Docker Compose, pytest. No FastAPI in v1.
Reference checkout of upstream CLI (not vendored): ../voygr-dev-tools.
Available Tools
7 toolsanswer_mid_callA
Relay the human's answer to a mid-call venue question. When call_place/approve_call returns status=awaiting_mid_call_answer, show question to the human in chat, then call this with answer_token + their answer. This is the mid-call handoff — do not invent the answer or the token.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | ||
| answer_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mid-call handoff nature and the instruction not to invent the answer or token. However, it does not mention any side effects, return behavior, or whether the call ends after this, but it is generally transparent for a relay tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loaded with the purpose. Every sentence adds value: the first states what it does and when, the second explains the workflow and a critical warning. No unnecessary words.
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 tool with 2 parameters, the description covers purpose, usage conditions, parameter meaning, and behavioral constraints. An output schema exists, so return values are already structured. Sibling context is not needed for completeness.
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% and the input schema provides no descriptions for 'answer_token' or 'answer'. The description compensates by defining the token as coming from call_place/approve_call and the answer as the human's response. It doesn't specify formats or constraints, but gives enough context to understand both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Relay the human's answer to a mid-call venue question.' It uses a specific verb ('relay') and resource ('human's answer'), and distinguishes itself from siblings by referencing the call_place/approve_call status and the mid-call handoff.
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 when to use the tool: 'When call_place/approve_call returns status=awaiting_mid_call_answer.' It provides a clear sequence of actions (show question to human, then call with token and answer) and even warns against inventing the answer or token. This is excellent usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_callA
Approve a pending call after the human said yes in chat. Pass the consent_token returned by call_place when error=consent_required. Only works with a server-issued token — do not invent one.
| Name | Required | Description | Default |
|---|---|---|---|
| consent_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a critical behavioral constraint: 'Only works with a server-issued token — do not invent one.' This warns against fabricating tokens and implies invalid tokens will fail. It does not detail failure modes or side effects, but the key restriction is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each purposeful: purpose, usage, and a warning. No redundant wording. The structure front-loads the action and contextualizes the token requirement efficiently.
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 tool with an output schema present, the description covers what, when, and how—leaving no critical gaps. The warning about server-issued tokens addresses a potential misuse. No additional context is needed.
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 only defines consent_token as a required string. The description adds essential semantics: the token is returned by call_place when error=consent_required. This tells the agent exactly where the value comes from and how to obtain it, going well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Approve a pending call after the human said yes in chat.' It specifies the action (approve) and the resource (pending call), and the mention of consent_token ties it to a specific workflow, distinguishing it from sibling 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 gives explicit when-to-use context: 'after the human said yes in chat' and 'when error=consent_required.' It also provides a concrete reference to call_place, but does not explicitly name alternatives or when-not-to-use scenarios. The guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_placeA
Place a structured outbound VOYGR call to a venue phone. Intents: inquiry | info_gathering. Language: en only. For inquiry, slots MUST include question (a free-text ask for the venue). party_size/date/time alone are not enough. Consent is elicited when the client supports it; otherwise the tool returns consent_required + consent_token — ask the human in chat, then call approve_call. If the venue asks something mid-call, the tool may return awaiting_mid_call_answer — ask the human that question in chat, then answer_mid_call. No confirm boolean. In dry-run, inquiry calls simulate a live venue including mid-call questions.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| phone | Yes | ||
| slots | No | ||
| venue | No | ||
| intent | Yes | ||
| language | No | en |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavior disclosure burden. It explains consent handling, return values like consent_required and awaiting_mid_call_answer, the absence of a confirm boolean, and dry-run simulation behavior. These details go beyond what annotations would typically provide and give the agent a realistic model of the tool's runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence provides actionable information: purpose, intents, language, slot requirements, consent flow, mid-call answer flow, confirm boolean absence, and dry-run behavior. There is no fluff or repetition, and it is front-loaded with the core purpose. This is an excellent balance of detail and brevity.
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?
This is a complex tool involving consent workflows, mid-call interactions, and dry-run behavior. The description covers the critical operational flows and return states. While it does not spell out the success return shape, an output schema is present, so that information is not required in the description. The description is sufficiently complete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions (0% coverage), so the description must compensate. It explains the intent values, the required slot (question) for inquiry, and that language is restricted to 'en'. It also clarifies that there is no confirm boolean. However, it does not explain the meaning of all parameters (e.g., kind, venue, phone, slots keys), leaving some gaps for a few parameters.
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: 'Place a structured outbound VOYGR call to a venue phone.' This clearly states what the tool does and distinguishes it from sibling tools like approve_call or answer_mid_call, which are follow-up actions. It further clarifies the two intents (inquiry and info_gathering), leaving no ambiguity about the primary function.
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 usage guidance, including when to use alternative tools: if consent is required, 'call approve_call'; if a mid-call question arises, 'answer_mid_call'. It also sets a clear precondition for the inquiry intent (slots must include a question) and states that party_size/date/time alone are insufficient. This gives the agent actionable decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_creditsA
Report VOYGR usage/credits so the agent can explain spend and holds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. The verb 'Report' implies a read-only operation, and the description identifies the type of data returned (usage/credits). However, it does not explicitly confirm no side effects, mention any authorization needs, or describe potential failure modes. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence of 14 words. It front-loads the core action ('Report VOYGR usage/credits') and follows with the purpose. Every word earns its place; there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters) and the presence of an output schema, the description provides sufficient context. It names the resource type (VOYGR usage/credits) and the intended use case (explain spend and holds). The output schema can handle return-value details, so no additional description is necessary.
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 coverage is 100% by default. Per the scoring rules, 0 parameters merits a baseline of 4. The description adds no parameter-related meaning because there are no parameters to explain. No deduction is applied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Report VOYGR usage/credits'. The verb 'Report' is specific and the resource ('VOYGR usage/credits') is explicit. It also conveys the intended outcome ('so the agent can explain spend and holds'), which adds purpose. This distinguishes it from sibling tools focused on places and calls.
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 phrase 'so the agent can explain spend and holds' provides clear context for when to use this tool: when the agent needs to answer questions about spending or holds. However, it does not explicitly mention when not to use it or name alternative tools, though sibling tools are clearly unrelated to credits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_callA
Get status/outcome for a call handle returned by call_place (async recovery path).
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of disclosing side effects. 'Get status/outcome' strongly implies a read-only operation, but it does not explicitly state 'read-only', nor does it describe error cases, auth requirements, or whether the operation is safe to repeat. The 'async recovery path' hint adds some context but not enough behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action and resource, and contains no filler. Every word contributes to understanding the tool's purpose and usage context.
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 only one parameter and an output schema (not shown), the description covers the essential context: the origin of the call handle and the async recovery path. It is slightly thin on explicit usage guidance or alternative tools, but for a simple getter, the provided context is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only lists 'call_id' as a string. The description adds meaning by linking this ID to 'a call handle returned by call_place', which clarifies what value to pass and where it originates. This goes beyond the schema's bare title, effectively compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get status/outcome'), the resource ('a call handle'), and the context ('returned by call_place (async recovery path)'). This differentiates it from sibling tools like call_place (which places the call) and verify_place (which likely verifies a place). The verb+resource+context is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: after call_place returns a handle, and specifically in async recovery scenarios. It does not explicitly mention alternatives or exclusion criteria, but the context is clear enough for an agent to infer the appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_placeA
Verify whether a named place at an address exists and is operating. Returns verdict/recommend — never trust raw open_closed alone. Costs 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| address | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so well. It discloses that the return value is a 'verdict/recommend' rather than raw data, warns against trusting 'open_closed' alone, and explicitly notes the cost of 1 credit. This goes beyond the schema and gives the agent important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the core purpose; the second adds return behavior, a critical reliability warning, and cost information. Every sentence earns its place, and the description is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so the description need not detail return values; it appropriately mentions 'verdict/recommend' as a preview. It covers cost and the reliability caveat. It does not mention prerequisites like credit checking or typical failure modes, but given the output schema and simple 2-parameter input, this is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It indirectly references the parameters ('named place' and 'address') but does not define their format, constraints, or examples. The parameter names themselves are self-explanatory, and the description ties them to the tool's purpose, providing minimal added meaning. A score of 3 reflects that it is adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('verify') and resource ('a named place at an address'), and defines the scope as checking existence and operating status. This distinguishes it from siblings like call_place or get_call, though not explicitly from verify_places.
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 clear context on when to use this tool: whenever one needs a trusted verdict on a place's operating status, since 'never trust raw open_closed alone.' It also mentions a cost (1 credit), implying the agent should consider resource usage. It does not explicitly exclude alternatives or list when-not-to-use scenarios, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_placesA
Verify multiple places. Input a list of {name, address}. Deduped/cached on normalized name+address. Use before recommending options.
| Name | Required | Description | Default |
|---|---|---|---|
| places | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions deduplication and caching on normalized name+address, which is useful. However, it does not explain what verification entails, potential side effects, or error behavior, leaving gaps.
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 only two sentences, front-loaded with the primary action, and includes no filler. Every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and an output schema, the description covers purpose, input format, behavioral nuances, and usage context. It could be more explicit about when to choose this over 'verify_place,' but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only shows a generic array of objects with string properties. The description adds essential semantics: 'Input a list of {name, address},' specifying the expected keys and structure, which is critical given the schema lacks descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Verify multiple places,' which clearly specifies the verb (verify), resource (places), and scope (multiple), effectively distinguishing it from the singular 'verify_place' 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?
It provides a clear usage context: 'Use before recommending options.' This indicates when to call the tool, though it does not explicitly mention when not to use it or contrast it with 'verify_place' beyond the plural implication.
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.
7 tool updates
v0.1.0- First observed
answer_mid_call - First observed
approve_call - First observed
call_place - First observed
check_credits - First observed
get_call - First observed
verify_place - First observed
verify_places
TDQS
Scored across 7 tools
Each tool has a distinct role: verification, credit check, call placement, consent, mid-call answer, and status retrieval. The only potential overlap is verify_place vs verify_places, but the singular/plural distinction is clearly explained in the descriptions.
All tools follow a consistent verb_noun pattern in snake_case (verify_place, check_credits, call_place, approve_call, answer_mid_call, get_call), with no naming style mixing.
Seven tools is well-scoped for a place-verification and calling service. Each tool covers a distinct step in the workflow with no redundancy.
The surface covers the full workflow: verify places, place calls, handle consent, relay mid-call answers, and retrieve status. Minor gaps like canceling a call or listing history are not critical for the core purpose.
Maintenance
Related MCP Connectors
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
MCP server for Vonage API documentation, code snippets, tutorials, and troubleshooting.
AI call analysis and voice agents for sales teams. Signup, usage, agents and call data over MCP.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceMCP server that lists applications and phone numbers, and initiates outbound calls via Fonoster.956 npm8,114MIT- AlicenseNot gradedqualityDmaintenanceMCP Server that integrates various Vonage APIs as MCP tools, to make it easier for developers to work with and create Vonage applications.48 npm3Apache 2.0

Smallest MCP Serverofficial
AlicenseBqualityAmaintenanceMCP server for the Smallest AI platform that enables managing AI voice agents, debugging calls, and viewing analytics directly from your IDE.8352 npm1MIT- FlicenseCqualityCmaintenanceMCP server enabling interaction with Telnyx telephony, messaging, and AI assistant APIs through natural language.46-