TwilioManager MCP
The TwilioManager MCP server enables programmatic management of Twilio resources through a standardized Model Context Protocol interface, providing seamless integration with AI assistants and development tools.
Core Capabilities:
List Twilio Subaccounts: Retrieve all subaccounts or filter by friendly name
Get Phone Numbers by Account: Fetch all phone numbers associated with a specific subaccount using the account SID
Transfer Phone Numbers: Move phone numbers between subaccounts (requires phone number SID, source account SID, and target account SID)
Retrieve Regulatory Bundle Information: Get regulatory bundle SIDs for subaccounts to manage compliance requirements
Integration Options:
Direct integration via uv/uvx
Server-Sent Events (SSE) for flexible deployment
Docker deployment with automatic HTTPS through Traefik reverse proxy
Compatible with Claude Desktop, Cursor, and other MCP-compatible AI assistants
Used for managing Twilio credentials and environment variables required for authentication with the Twilio API.
Enables direct interaction with Twilio's API for subaccount management, phone number control, regulatory compliance handling, and address management for compliance requirements.
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., "@TwilioManager MCPlist all phone numbers for subaccount AC123456789"
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.
Twilio Manager MCP
A Model Context Protocol (MCP) implementation for managing Twilio resources. This package provides tools for managing Twilio subaccounts, phone numbers, and regulatory bundles through a standardized MCP interface.
Features
List Twilio subaccounts
Get phone numbers associated with subaccounts
Transfer phone numbers between subaccounts
Get regulatory bundle SIDs
Support for both direct and Server-Sent Events (SSE) communication
Integration with Claude Desktop, Cursor, and other MCP-compatible tools
Related MCP server: Twilio MCP Server
Installation
Prerequisites
Install uv
On macOS:
brew install uvOn Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"On Linux:
curl -LsSf https://astral.sh/uv/install.sh | shProject Setup
Clone the repository:
git clone https://github.com/yourusername/twilio_manager_mcp.git
cd twilio_manager_mcpInstall dependencies using uv:
uv syncConfiguration
Create a
.envfile in the root directory with your Twilio credentials:
TWILIO_ACCOUNT_SID=your_account_sid
TWILIO_AUTH_TOKEN=your_auth_tokenConfigure MCP for your tool (Cursor, Claude Desktop, etc.) by creating a
.cursor/mcp.jsonfile:
{
"mcpServers": {
"twilio_manager_mcp_abs": {
"command": "uv",
"args": ["--directory", "/path/to/twilio_manager_mcp", "run", "mcp", "run", "./twilio_manager_mcp.py"],
"env": {
"TWILIO_ACCOUNT_SID": "your_account_sid",
"TWILIO_AUTH_TOKEN": "your_auth_token"
}
},
"twilio_manager_mcp_uvx": {
"command": "uvx",
"args": [ "twilio-manager-mcp" ],
"env": {
"TWILIO_ACCOUNT_SID": "your_account_sid",
"TWILIO_AUTH_TOKEN": "your_auth_token"
}
},
"twilio_manager_mcp_sse": {
"url": "http://localhost:8000/sse"
}
}
}Docker
You can run Twilio Manager MCP using Docker for easier deployment and management.
Using Docker Compose
The project includes a Docker Compose configuration that sets up:
The Twilio Manager MCP service
A Traefik reverse proxy with automatic HTTPS
Configure environment variables in your
.envfile:
# Twilio credentials
TWILIO_ACCOUNT_SID=your_account_sid
TWILIO_AUTH_TOKEN=your_auth_token
# Domain configuration for Traefik
DOMAIN_NAME=yourdomain.com
ACME_EMAIL=user@yourdomain.com
# Address details (optional)
ADDRESS_CUSTOMER_NAME=
ADDRESS_FRIENDLY_NAME=
ADDRESS_STREET=
ADDRESS_CITY=
ADDRESS_REGION=
ADDRESS_POSTAL_CODE=
ADDRESS_ISO_COUNTRY=Start the services:
docker-compose up -dThe application will be available at your configured domain with HTTPS enabled.
Using Docker Without Docker Compose
If you prefer to run just the Twilio Manager MCP container without Traefik:
Build the Docker image:
docker build -t twilio-manager-mcp .Run the container:
docker run -p 8000:8000 \
-e TWILIO_ACCOUNT_SID=your_account_sid \
-e TWILIO_AUTH_TOKEN=your_auth_token \
twilio-manager-mcpThe SSE endpoint will be available at http://localhost:8000/sse.
Usage
With Cursor, Claude Desktop, or other MCP-compatible tools
You have three options to use this MCP:
Direct UVX Integration (Recommended):
Use the
twilio_manager_mcp_uvxconfigurationThis is the simplest method and works out of the box with uvx
Direct UV Integration:
Use the
twilio_manager_mcp_absconfigurationRequires specifying the full path to your installation
SSE Server:
Use the
twilio_manager_mcp_sseconfigurationStart the SSE server first:
uvicorn twilio_manager_mcp_sse:app --host 0.0.0.0 --port 8000
Available Tools
Tool Name | Description |
| List all Twilio subaccounts |
| Get phone numbers for a specific subaccount |
| Transfer phone numbers between subaccounts |
| Get regulatory bundle SID for a subaccount |
Example Usage in Cursor/Claude Desktop
Once configured, you can use the tools directly in your AI assistant conversations:
List all subaccounts:
# The AI will automatically use the MCP to list all subaccounts
# No need to write code - just ask "List all Twilio subaccounts"Get phone numbers for a subaccount:
# Simply ask: "Show me all phone numbers for subaccount AC..."Direct Python Usage
For direct programmatic usage:
from mcp import ClientSession
from clients.client import MCPClient
async with MCPClient("uvx", ["twilio-manager-mcp"], env={}) as session:
# List available tools
tools = (await session.list_tools()).tools
# List all subaccounts
subaccounts = await session.invoke("list_twilio_subaccounts")
# Get phone numbers for a subaccount
numbers = await session.invoke("get_account_phone_numbers", {"account_sid": "AC..."})Project Structure
twilio_manager_mcp/
├── api/
│ └── async_twilio_api.py # Async Twilio API implementation
├── clients/
│ ├── client.py # Direct MCP client implementation
│ └── client_sse.py # SSE client implementation
├── twilio_manager_mcp.py # Core MCP server implementation
├── twilio_manager_mcp_sse.py # SSE server wrapper
├── requirements.txt # Project dependencies
└── README.md # This fileDevelopment
For development, you can use uv's virtual environment management:
# Create a virtual environment
uv venv
# Activate the virtual environment
source .venv/bin/activate # On Unix
.venv\Scripts\activate # On Windows
# Install dependencies in development mode
uv pip install -e .Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License
Available Tools
4 toolsget_account_phone_numbersC
Get all phone numbers associated with a Twilio subaccount
| Name | Required | Description | Default |
|---|---|---|---|
| account_sid | Yes |
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. It states the action ('Get') but doesn't describe what 'Get all phone numbers' entails—e.g., whether it returns a list, includes pagination, requires specific permissions, or has rate limits. This is a significant gap for a tool with no annotation coverage.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and appropriately sized, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, 0% schema description coverage, and no output schema, the description is incomplete. It doesn't address behavioral aspects like return format, error handling, or usage constraints, which are crucial for a tool with one required parameter and no structured guidance.
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 has 0% description coverage, so the description must compensate. It mentions 'account_sid' implicitly but doesn't explain what this parameter represents, its format, or how to obtain it. Without this additional semantic information, the agent lacks context for proper usage.
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') and resource ('all phone numbers associated with a Twilio subaccount'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_all_phone_numbers', which might have overlapping functionality, so it doesn't reach the highest score.
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 no guidance on when to use this tool versus alternatives like 'get_all_phone_numbers' or 'list_twilio_subaccounts'. It lacks context about prerequisites, such as whether the account_sid must be for a subaccount specifically, or any exclusions. This leaves the agent without clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_phone_numbersC
Get all phone numbers associated with a Twilio subaccount
| Name | Required | Description | Default |
|---|---|---|---|
| source_account_sid | Yes | ||
| phone_number_sid | Yes | ||
| target_account_sid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states a read operation ('Get'), implying it's likely non-destructive, but doesn't disclose behavioral traits such as authentication needs, rate limits, pagination, error handling, or what 'all' entails (e.g., scope, limits). For a tool with 3 required parameters and no annotation coverage, this is a significant gap in transparency.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with zero waste, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 required parameters, no annotations, no output schema), the description is incomplete. It lacks details on parameter usage, behavioral context, and output expectations. For a tool that likely involves account and phone number management, more guidance is needed to help an agent use it correctly, especially with sibling tools present.
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%, meaning parameters are undocumented in the schema. The description adds no meaning beyond the schema—it doesn't explain what the parameters (source_account_sid, phone_number_sid, target_account_sid) do, why they're required, or how they relate to 'getting all phone numbers'. With 3 required parameters and no compensation in the description, this fails to provide necessary semantic context.
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') and resource ('all phone numbers associated with a Twilio subaccount'), providing specific verb+resource pairing. However, it doesn't explicitly differentiate from sibling tools like 'get_account_phone_numbers' or 'list_twilio_subaccounts', which likely have overlapping functionality. The purpose is clear but lacks sibling distinction.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for selecting this over siblings like 'get_account_phone_numbers', or any exclusions. Usage is implied by the name and description alone, with no explicit when/when-not instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_regulatory_bundle_sidC
Get the regulatory bundle SID for a Twilio subaccount
| Name | Required | Description | Default |
|---|---|---|---|
| subaccount_sid | Yes |
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 of behavioral disclosure. It states the action is to 'Get', implying a read operation, but doesn't specify if it requires authentication, rate limits, error conditions, or what the output format might be (e.g., a string SID). This leaves significant gaps in understanding how the tool behaves.
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, clear sentence with no wasted words. It front-loads the key action and resource, making it easy to understand at a glance. Every part of the sentence contributes directly to the tool's 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?
Given the tool's complexity (a read operation with one parameter), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what a 'regulatory bundle SID' is, how it's used, or what the return value looks like, leaving the agent with insufficient context to use the tool effectively.
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 description mentions 'for a Twilio subaccount', which aligns with the single parameter 'subaccount_sid' in the schema. However, schema description coverage is 0%, so the description doesn't add details beyond the parameter's existence, such as format or validation rules. With one parameter and no schema descriptions, the baseline is 3 as it minimally compensates.
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') and the resource ('regulatory bundle SID for a Twilio subaccount'), making the purpose understandable. It doesn't explicitly differentiate from sibling tools like 'list_twilio_subaccounts', which lists subaccounts rather than retrieving a specific bundle SID, but the distinction is implied through the specific resource focus.
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. The description lacks context about prerequisites, such as needing a valid subaccount SID, or comparisons to other tools that might handle regulatory data. Usage is implied only by the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_twilio_subaccountsB
List all Twilio subaccounts or filter by friendly name. Provide an empty string for all subaccounts
| Name | Required | Description | Default |
|---|---|---|---|
No 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 of behavioral disclosure. It describes the basic operation (listing/filtering subaccounts) but lacks details on permissions, rate limits, pagination, or response format. For a tool with zero annotation coverage, this is a significant gap in transparency.
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, efficient sentence that front-loads the main purpose and includes essential details without waste. It's appropriately sized for a simple tool with no parameters, making it easy to understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is adequate but has clear gaps. It covers the basic operation but lacks details on behavioral aspects like response format or error handling. Without annotations or output schema, the description should do more to compensate, but it's minimally viable for this simple case.
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 has 0 parameters with 100% coverage, so no parameters are documented in the schema. The description adds value by explaining that filtering by friendly name is possible and that an empty string returns all subaccounts, which clarifies the tool's behavior beyond the empty schema. Since there are 0 parameters, the baseline is 4, and the description provides useful context.
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 with a specific verb ('List') and resource ('Twilio subaccounts'), and mentions optional filtering by friendly name. However, it doesn't explicitly differentiate this tool from its sibling tools (get_account_phone_numbers, get_all_phone_numbers, get_regulatory_bundle_sid), which appear to be related but distinct operations. The description is clear but lacks sibling differentiation.
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 context by mentioning filtering by friendly name and providing an empty string for all subaccounts, but it doesn't explicitly state when to use this tool versus alternatives or any prerequisites. There's no guidance on when not to use it or comparisons with sibling tools, leaving usage somewhat ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Two tools have nearly identical purposes: 'get_account_phone_numbers' and 'get_all_phone_numbers' both retrieve phone numbers for Twilio subaccounts, creating clear ambiguity. The other two tools target distinct resources (regulatory bundles and subaccounts), but the overlap between the first two tools is significant and likely to cause misselection.
All tools follow a consistent verb_noun pattern (e.g., get_account_phone_numbers, list_twilio_subaccounts) with clear, descriptive names. The naming style is uniform across the set, making it easy to parse and understand the actions and targets.
With only 4 tools, the count feels thin for a server named 'TwilioManager MCP', which suggests broader Twilio API management. This limited set may not cover essential operations like sending messages, managing calls, or updating resources, making it borderline for the implied scope.
The tool surface is severely incomplete for Twilio management, lacking core functionalities such as sending SMS, making calls, or updating subaccounts. It focuses narrowly on retrieval operations (get/list) without create, update, or delete capabilities, leading to significant gaps that will hinder agent workflows.
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
The Telnyx MCP server is an official implementation of the Model Context Protocol that enables AI clients (like Claude Desktop, Cursor, and OpenAI Agents) to interact with Telnyx's telephony, messaging, and AI assistant APIs. It provides comprehensive capabilities including making and managing phone calls, sending SMS/MMS messages, purchasing and configuring phone numbers, creating AI assistants with custom instructions, managing cloud storage buckets, scraping and embedding website content, and handling integration secrets. The server exists as both a local implementation and a remotely hosted version, allowing developers to integrate real-world communication infrastructure directly into AI applications.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP (Model Context Protocol) server that lets users send SMS messages through Twilio API directly from Claude Desktop via natural language commands.205MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables Claude and other AI assistants to send SMS and MMS messages using Twilio.2015MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude to initiate and manage real-time voice calls using Twilio and OpenAI's voice models.61MIT
- AlicenseNot gradedqualityFmaintenanceAn implementation of the Model Context Protocol (MCP) server that exposes Twilio APIs to AI assistants and tools, allowing them to interact with Twilio services through the MCP protocol.109MIT
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/errajibadr/twilio_manager_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server