dspy-mcp-tool-integration — Claude Code skill: MCP tools in DSPy
A skill that walks through wiring an MCP server into DSPy: turning its tools into dspy.Tool and calling them from an async agent.
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a claude-codeWhat dspy-mcp-tool-integration does
The skill covers the join between the MCP Python client and DSPy. You open a ClientSession, pull the tool list with list_tools(), and wrap each entry via dspy.Tool.from_mcp_tool. Those tools then go into dspy.ReAct, which picks them as it works through a task.
Two runnable examples ship with it: a streamable HTTP server at http://localhost:8000/mcp and a local stdio server built from StdioServerParameters. Both are asyncio-based, so the agent has to be driven with acall() rather than a plain call. The session gets initialized before list_tools().
One thing to watch: DSPy converts tools but leaves connection handling to you. The ClientSession has to stay open for as long as the dspy.Tool objects derived from it are in use — close it early and the calls fail. Installation pulls the dspy[mcp] extra, version 3.2.1 up to 3.3.
What it helps with
- hook an MCP server up to a DSPy agent
- convert MCP tools into
dspy.Toolobjects - build a ReAct agent on top of MCP tools
- launch a local stdio MCP server from Python
- call async MCP tools through
acall()
Example prompts for the agent
- Connect the MCP server at
http://localhost:8000/mcpand wrap its tools asdspy.Tool - Build a ReAct agent with the MCP tools and
max_iters=5 - Start a local stdio MCP server and hand its tools to DSPy
How to install dspy-mcp-tool-integration
1Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a claude-code2Manually: put the files in place
~/.claude/skills/dspy-mcp-tool-integration/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/dspy-mcp-tool-integration/
1Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a codex2Manually: put the files in place
.agents/skills/dspy-mcp-tool-integration/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a cursor2Manually: put the files in place
.cursor/skills/dspy-mcp-tool-integration/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install OmidZamani/dspy-skills dspy-mcp-tool-integration2Manually: put the files in place
.github/skills/dspy-mcp-tool-integration/SKILL.md1Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a gemini-cli2Platform CLI
gemini skills install https://github.com/OmidZamani/dspy-skills --path skills/dspy-mcp-tool-integrationManually: put the files in place
.devin/skills/dspy-mcp-tool-integration/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about dspy-mcp-tool-integration
How do I install dspy-mcp-tool-integration in Claude Code?
Run npx skills add OmidZamani/dspy-skills --skill dspy-mcp-tool-integration -a claude-code; the skill file then lands at ~/.claude/skills/dspy-mcp-tool-integration/SKILL.md.
What does dspy-mcp-tool-integration do?
It shows how to connect an MCP server to DSPy — open a ClientSession, list the tools, and use them inside an async agent.
What do I need for this skill to work?
The dspy[mcp] package, version 3.2.1 to 3.3. DSPy does not manage the MCP connection, so keep the ClientSession open while the tools are in use.
Source text
SKILL.md · MIT
---
name: dspy-mcp-tool-integration
version: "1.0.0"
dspy-compatibility: "3.2.1"
tags: ["agent", "production"]
requires-extras: ["dspy[mcp]"]
description: Use for MCP tools with DSPy, Model Context Protocol servers, dspy.Tool.from_mcp_tool, and ReAct agents over MCP-compatible tools.
allowed-tools:
- Read
- Write
- Glob
- Grep
---
# DSPy MCP Tool Integration
## Goal
Connect an MCP server with the MCP Python client, convert its tools to `dspy.Tool`, and use them in an async DSPy agent.
## Install
```bash
pip install -U "dspy[mcp]>=3.2.1,<3.3"
```
DSPy converts tools but does not manage MCP connections. Keep the `ClientSession` alive for as long as the DSPy tools are in use.
## Streamable HTTP Server
```python
import asyncio
import dspy
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
async with streamablehttp_client("http://localhost:8000/mcp") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
response = await session.list_tools()
tools = [dspy.Tool.from_mcp_tool(session, tool) for tool in response.tools]
agent = dspy.ReAct("task -> result", tools=tools, max_iters=5)
output = await agent.acall(task="Check the weather in Tokyo")
print(output.result)
asyncio.run(main())
```
## Local Stdio Server
```python
import asyncio
import dspy
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
params = StdioServerParameters(
command="python3",
args=["path/to/server.py"],
env=None,
)
async with stdio_client(params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
response = await session.list_tools()
tools = [dspy.Tool.from_mcp_tool(session, tool) for tool in response.tools]
agent = dspy.ReAct("question -> answer", tools=tools, max_iters=5)
print((await agent.acall(question="What is 25 + 17?")).answer)
asyncio.run(main())
```
## Best Practices
1. Use `acall()` because MCP tools are asynchronous.
2. Initialize the session before listing tools.
3. Keep tool descriptions precise at the MCP server boundary.
4. Apply authentication and authorization before exposing sensitive tools.
5. Set a modest `max_iters` and trace tool use in production.
## Related Skills
- Build agents: [dspy-react-agent-builder](../dspy-react-agent-builder/SKILL.md)
- Configure native function calling: [dspy-adapters-multimodal](../dspy-adapters-multimodal/SKILL.md)
- Add async runtime patterns: [dspy-production-deployment](../dspy-production-deployment/SKILL.md)
## Official Documentation
- **DSPy MCP guide**: https://dspy.ai/learn/programming/mcp/
- **DSPy MCP tutorial**: https://dspy.ai/tutorials/mcp/
- **MCP Python SDK**: https://github.com/modelcontextprotocol/python-sdk
© OmidZamani · MIT · OmidZamani/dspy-skills