Single Toolkit MCP
For most use cases, use a regular session instead. Sessions provide dynamic tool access and a much better MCP experience with context management handled by us.
Install the SDK
uv add composioCreate an MCP server
Initialize Composio
from composio import Composio
composio = Composio(api_key="YOUR_API_KEY")Create server configuration
Before you begin: Create an auth configuration for your toolkit.
server = composio.mcp.create(
name="my-gmail-server",
toolkits=[{
"toolkit": "gmail",
"auth_config": "ac_xyz123"
}],
allowed_tools=["GMAIL_FETCH_EMAILS", "GMAIL_SEND_EMAIL"]
)
print(f"Server created: {server.id}")You can also create and manage MCP configs from the Composio dashboard.
Generate user URLs
Users must authenticate with the toolkits configured in your MCP server first. See authentication for details.
instance = composio.mcp.generate(user_id="user-123", mcp_config_id=server.id)
print(f"MCP Server URL: {instance['url']}")Use with AI providers
Pass an x-api-key header when connecting to Composio MCP. This is required when require_mcp_api_key is enabled (default for newly created organizations).
from openai import OpenAI
client = OpenAI(api_key="your-openai-api-key")
mcp_server_url = "https://backend.composio.dev/v3/mcp/YOUR_SERVER_ID?user_id=YOUR_USER_ID"
mcp_headers = {"x-api-key": "YOUR_COMPOSIO_API_KEY"}
response = client.responses.create(
model="gpt-5",
tools=[{
"type": "mcp",
"server_label": "composio-server",
"server_url": mcp_server_url,
"headers": mcp_headers,
"require_approval": "never",
}],
input="What are my latest emails?",
)
print(response.output_text)Server management
List servers
servers = composio.mcp.list()
print(f"Found {len(servers['items'])} servers")
# Filter by toolkit
gmail_servers = composio.mcp.list(toolkits="gmail", limit=20)Get server details
server = composio.mcp.get("mcp_server_id")
print(f"Server: {server.name}")Update a server
updated = composio.mcp.update(
server_id="mcp_server_id",
name="updated-name",
allowed_tools=["GMAIL_FETCH_EMAILS", "GMAIL_SEARCH_EMAILS"]
)Delete a server
result = composio.mcp.delete("mcp_server_id")
if result['deleted']:
print("Server deleted")Next
Providers
Use with Anthropic, OpenAI, and other frameworks