Skip to main content
Glama
danecodes

botcall-mcp

by danecodes

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-mcp

Then 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

areaCode

string

Preferred area code, e.g. "206" (optional)

country

string

ISO country code (default: "US")

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

timeout

number

Seconds to wait (default: 30, max: 30)

numberId

string

Filter to a specific number (optional)

get_inbox

Get recent SMS messages received on your numbers.

Parameter

Type

Description

limit

number

Max messages to return (default: 10)

numberId

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

numberId

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

BOTCALL_API_KEY

Required. Your API key from botcall.io

BOTCALL_API_URL

API base URL (default: https://api.botcall.io)

License

MIT

Available Tools

6 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoSeconds to wait for a message (default: 30, max: 30)
numberIdNoFilter polling to a specific phone number ID (from list_numbers). Omit to poll across all your numbers.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of messages to return (default: 10)
numberIdNoFilter messages for a specific phone number ID (from list_numbers). Omit to get messages across all numbers.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoISO country code (default: US)
areaCodeNoPreferred area code (e.g., '206' for Seattle). Optional.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberIdYesThe ID of the phone number to release

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 6 tool updatesv0.1.2
    • First observedget_code
    • First observedget_inbox
    • First observedget_usage
    • First observedlist_numbers
    • First observedprovision_number
    • First observedrelease_number

TDQS

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, using verbs like get, list, provision, release. No mixing of conventions.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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