botcall-mcp
Click on "Install 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., "@botcall-mcpProvision a US number and wait for an SMS verification code."
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.
botcall-mcp
An MCP server that gives AI agents real phone numbers. Provision a number, receive SMS, and extract verification codes — all through tool calls.
Built for Claude Desktop, Claude Code, and any MCP-compatible client.
Setup
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"botcall": {
"command": "npx",
"args": ["-y", "botcall-mcp"],
"env": {
"BOTCALL_API_KEY": "bs_live_..."
}
}
}
}Claude Code
claude mcp add botcall -- npx -y botcall-mcpThen set your API key in the environment:
export BOTCALL_API_KEY="bs_live_..."Other MCP clients
Any client that supports the MCP stdio transport works. Run npx botcall-mcp with BOTCALL_API_KEY set.
Related MCP server: agentline-mcp
Get an API key
Sign up at botcall.io, pick a plan, and grab your key from Dashboard → API Keys.
Tools
provision_number
Provision a new phone number for receiving SMS.
Parameter | Type | Description |
| string | Preferred area code, e.g. |
| string | ISO country code (default: |
get_code
Wait for an incoming SMS and extract the verification code. Long-polls until a message arrives or the timeout expires.
Parameter | Type | Description |
| number | Seconds to wait (default: 30, max: 30) |
| string | Filter to a specific number (optional) |
get_inbox
Get recent SMS messages received on your numbers.
Parameter | Type | Description |
| number | Max messages to return (default: 10) |
| string | Filter to a specific number (optional) |
list_numbers
List all your provisioned phone numbers. No parameters.
release_number
Release a phone number you no longer need.
Parameter | Type | Description |
| string | Required. The number ID to release |
get_usage
Get your current plan, limits, and usage stats. No parameters.
Example
You: Sign up for ExampleService using a phone number
Agent: I'll provision a number and handle the verification.
→ provision_number({ areaCode: "415" })
{ number: "+14155550123", id: "pn_abc123" }
→ [agent enters the number on ExampleService's signup page]
→ get_code({ numberId: "pn_abc123" })
Verification code: 847291
→ [agent enters 847291 to complete verification]Environment variables
Variable | Description |
| Required. Your API key from botcall.io |
| API base URL (default: |
License
MIT
Available Tools
6 toolsget_codeA
Wait for an incoming SMS and extract the verification code. Use this after triggering a verification flow — it long-polls until a message arrives or the timeout expires.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Seconds to wait for a message (default: 30, max: 30) | |
| numberId | No | Filter polling to a specific phone number ID (from list_numbers). Omit to poll across all your numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden and discloses key behavior: 'it long-polls until a message arrives or the timeout expires.' This explains the blocking nature and timeout mechanism. However, it does not specify what happens on timeout (e.g., error or empty response) or whether the message is consumed.
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 consists of two concise sentences. The first states the purpose, and the second adds usage context and behavioral details. Every sentence is informative, with no wasted 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 two parameters and no output schema, the description covers purpose, usage timing, and polling behavior. However, it does not specify the return format (e.g., does it return just the code or the full message?) or the behavior on timeout expiration, which are important for an agent. This gap reduces 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 100%, providing clear descriptions for both timeout (default/max) and numberId (filter by phone number ID). The description adds little beyond the schema, only implicitly referencing the timeout via 'until a message arrives or the timeout expires.' Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Wait for an incoming SMS and extract the verification code.' This is a specific verb+resource combination that distinguishes it from sibling tools like get_inbox (inbox retrieval) and get_usage (usage stats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this after triggering a verification flow', providing clear context for when to use the tool. It does not explicitly exclude alternatives, but the context is sufficient to differentiate from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inboxA
Get recent SMS messages received on your numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return (default: 10) | |
| numberId | No | Filter messages for a specific phone number ID (from list_numbers). Omit to get messages across all numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. The term 'recent' is vague and does not specify ordering, timestamps, or whether messages are read-only. It implies non-destructiveness but does not explicitly state behavioral traits.
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?
Single sentence, no wasted words, front-loaded with key information. Efficient and clear.
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 simplicity (2 optional params, no output schema, no annotations), the description is minimally adequate. However, it fails to mention return format or clarify 'recent', leaving some gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters (limit and numberId). The description adds no additional meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'recent SMS messages', and the scope 'on your numbers'. It is specific and distinguishes well from sibling tools like list_numbers or get_usage.
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?
No guidance on when to use this tool versus alternatives. The description is minimal and does not mention any conditions, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageA
Get your current plan, limits, and usage statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral info. It states 'Get', implying a safe read operation, but provides no details on return format, authentication, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that effectively communicates the tool's purpose without any unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter tool, the description provides adequate information about what is retrieved (plan, limits, usage statistics), though it could mention that it returns current data.
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?
No parameters exist, so the schema coverage is 100%. The description does not need to add parameter details beyond what is already clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and identifies the resource as 'your current plan, limits, and usage statistics', clearly distinguishing it from sibling tools like get_code or get_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, but the description implies using it to check plan details, and the sibling context provides implicit distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_numbersA
List all phone numbers you have provisioned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states it lists provisioned numbers, indicating a read-only behavior. However, without external annotations, it does not disclose return format or whether it includes additional fields beyond numbers.
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 with no unnecessary words, front-loading the purpose.
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 no parameters and no output schema, the description effectively communicates the tool's purpose and expected result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description adequately covers parameter semantics by omission. The tool requires no input, which is implicitly clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and resource 'phone numbers you have provisioned', clearly distinguishing it from sibling tools like provision_number (provisioning) and release_number (releasing).
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 usage when you need to view provisioned numbers, but does not explicitly guide when to choose this over siblings like get_usage or get_inbox. No alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_numberB
Provision a new phone number for receiving SMS. Returns the number details including the E.164 phone number.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | ISO country code (default: US) | |
| areaCode | No | Preferred area code (e.g., '206' for Seattle). Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any side effects, costs, limits, or behavioral traits beyond the basic action. For a provisioning tool that may have billing or availability implications, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, no extraneous content. It could be slightly more structured (e.g., listing what is returned), but it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool is simple with two optional parameters and no output schema, the description is mostly adequate but lacks specifics on the return format beyond 'E.164'. It does not mention other response fields or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% description coverage for both parameters (country and areaCode). The description adds no new semantic information about parameters, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Provision a new phone number'), the resource ('phone number'), and the purpose ('for receiving SMS'). It also mentions that it returns the number details including E.164 format, making the purpose unambiguous and distinct from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_numbers or get_code. There is no mention of prerequisites, scenarios, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_numberB
Release a phone number you no longer need.
| Name | Required | Description | Default |
|---|---|---|---|
| numberId | Yes | The ID of the phone number to release |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It implies a destructive action but fails to disclose side effects, permissions needed, or consequences like irreversible changes.
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 extremely concise and front-loaded with one clear sentence. However, being overly brief sacrifices completeness, preventing a higher score.
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 one required parameter and no output schema, the description covers the basic purpose but lacks details on the release process, reversibility, or confirmation, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the single parameter. The tool description adds no extra meaning beyond what the schema already provides, earning the baseline score.
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 verb 'release' and the resource 'phone number', making it distinct from siblings like provision_number. It is specific and actionable.
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?
While it mentions 'you no longer need' as a condition, it provides no explicit guidance on when to use versus alternatives, prerequisites, or state requirements. This is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.2- First observed
get_code - First observed
get_inbox - First observed
get_usage - First observed
list_numbers - First observed
provision_number - First observed
release_number
TDQS
Each tool has a clear, distinct purpose: waiting for a code, viewing inbox, usage stats, listing numbers, provisioning, and releasing numbers. No overlap in functionality.
All tool names follow a consistent verb_noun pattern in snake_case, using verbs like get, list, provision, release. No mixing of conventions.
With 6 tools, the set is well-scoped for an SMS verification and number management server. Each tool serves a necessary role without excess or deficiency.
The tool surface covers the full lifecycle of number management (list, provision, release) and SMS retrieval (inbox, code waiting) along with usage tracking. No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Virtual phone numbers for AI agents — rent numbers in 200+ countries, receive SMS.
Give AI agents a phone number. Voice calls, SMS, and phone number management for MCP clients.
Give AI agents real phone numbers, messages, and voice calls via MCP.
Real physical SIMs for AI agents: SMS verification and rentals. 145+ countries, 2500+ services.
Related MCP Servers
- AlicenseAqualityDmaintenanceVirtual phone number platform for AI agents — rent numbers across 200+ countries, receive SMS, and manage the full activation lifecycle.6564MIT
- AlicenseAqualityDmaintenanceGives AI agents phone numbers, email, SMS, and voice calls as MCP tools, enabling them to provision numbers, capture 2FA codes, send messages, and make calls.15MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage phone numbers, send/receive SMS, and place voice calls through natural language, connecting to the phone network via the AgentPhone API.7,395121MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to purchase virtual phone numbers, retrieve SMS verification codes, and manage activations through natural language by wrapping the VirtualSMS Consumer API.18MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/danecodes/botcall-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server