docs/content/docs/providers/claude-agent-sdk.mdx
The Claude Agent SDK provider transforms Composio tools into tools compatible with the Claude Agent SDK.
<Callout type="info"> Looking for the Claude Messages API? See the [Anthropic](/docs/providers/anthropic) provider page. </Callout> <Steps> <Step> **Install**<Tabs groupId="language" items={["Python", "TypeScript"]} persist> <Tab value="Python">
pip install composio composio_claude_agent_sdk claude-agent-sdk
COMPOSIO_API_KEY=xxxxxxxxx
ANTHROPIC_API_KEY=xxxxxxxxx
<Tabs groupId="language" items={["Python", "TypeScript"]} persist> <Tab value="Python">
import asyncio
from composio import Composio
from composio_claude_agent_sdk import ClaudeAgentSDKProvider
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, create_sdk_mcp_server
composio = Composio(provider=ClaudeAgentSDKProvider())
# Create a session for your user
session = composio.create(user_id="user_123")
tools = session.tools()
tool_server = create_sdk_mcp_server(name="composio", version="1.0.0", tools=tools)
async def main():
options = ClaudeAgentOptions(
system_prompt="You are a helpful assistant",
permission_mode="bypassPermissions",
mcp_servers={"composio": tool_server},
)
async with ClaudeSDKClient(options=options) as client:
await client.query("Send an email to [email protected] with the subject 'Hello' and body 'Hello from Composio!'")
async for msg in client.receive_response():
print(msg)
asyncio.run(main())
const composio = new Composio({ provider: new ClaudeAgentSDKProvider(), });
// Create a session for your user const session = await composio.create("user_123"); const tools = await session.tools(); const toolServer = createSdkMcpServer({ name: "composio", version: "1.0.0", tools: tools, });
for await (const content of query({ prompt: "Send an email to [email protected] with the subject 'Hello' and body 'Hello from Composio!'", options: { mcpServers: { composio: toolServer }, permissionMode: "bypassPermissions", }, })) { if (content.type === "assistant") { console.log("Claude:", content.message); } }
</Tab>
</Tabs>
</Step>
</Steps>