Pydantic Python Sandbox
STDIOModel Context Protocol server to run Python code in sandbox using Pyodide and Deno.
Model Context Protocol server to run Python code in sandbox using Pyodide and Deno.
Model Context Protocol server to run Python code in a sandbox.
The code is executed using Pyodide in Deno and is therefore isolated from the rest of the operating system.
See https://ai.pydantic.dev/mcp/run-python/ for complete documentation.
The server can be run with deno
installed using:
deno run \ -N -R=node_modules -W=node_modules --node-modules-dir=auto \ jsr:@pydantic/mcp-run-python [stdio|sse|warmup]
where:
-N -R=node_modules -W=node_modules
(alias of --allow-net --allow-read=node_modules --allow-write=node_modules
)
allows network access and read+write access to ./node_modules
. These are required so pyodide can download and cache
the Python standard library and packages--node-modules-dir=auto
tells deno to use a local node_modules
directorystdio
runs the server with the
Stdio MCP transport —
suitable for running the process as a subprocess locallysse
runs the server with the
SSE MCP transport —
running the server as an HTTP server to connect locally or remotelywarmup
will run a minimal Python script to download and cache the Python standard library. This is also useful to
check the server is running correctly.Here's an example of using @pydantic/mcp-run-python
with PydanticAI:
from pydantic_ai import Agent from pydantic_ai.mcp import MCPServerStdio import logfire logfire.configure() logfire.instrument_mcp() logfire.instrument_pydantic_ai() server = MCPServerStdio('deno', args=[ 'run', '-N', '-R=node_modules', '-W=node_modules', '--node-modules-dir=auto', 'jsr:@pydantic/mcp-run-python', 'stdio', ]) agent = Agent('claude-3-5-haiku-latest', mcp_servers=[server]) async def main(): async with agent.run_mcp_servers(): result = await agent.run('How many days between 2000-01-01 and 2025-03-18?') print(result.output) #> There are 9,208 days between January 1, 2000, and March 18, 2025.w if __name__ == '__main__': import asyncio asyncio.run(main())