MCP Run Python

Source: simonwillison.net/2025/Apr/18/mcp-run-python/ Type: article (linkblog) By: simon-willison Valid as of: 2026-04-23 (재확인 — 원문 변경 없음, og:updated_time 2025-04-18 유지)

핵심 Takeaway

  • pydantic-aimcp-run-python은 Deno + Pyodide(WebAssembly)로 LLM 생성 Python 코드를 격리 실행하는 MCP 서버 (출처: 본문 §1)
  • WASM 샌드박스 패턴 — Deno 프로세스 안에 Pyodide를 올려 신뢰할 수 없는 코드 실행을 격리, harness-engineering Verification 레이어의 구체 구현
  • uv run --with + Deno의 온디맨드 의존성 로딩을 조합하면 복잡한 에이전틱 파이프라인을 제로 설치 원라이너로 시연 가능
  • MCP run_python_code 도구 호출 흐름이 ToolCallPart 객체로 투명하게 기록 — 하네스 관찰성의 실제 사례
  • 로컬 LLM(Mistral Small 3.1 via Ollama)도 동일 MCP 서버 사용 가능 — 단, “Use your python tool” 명시 프롬프팅 필요

상세 요약

Pydantic AI mcp-run-python

pydantic-ai가 공개한 MCP 서버. LLM이 생성한 Python 코드를 Deno 프로세스 내 Pyodide(WASM) 위에서 실행해 호스트 시스템을 보호한다. Simon Willison이 2년 전 직접 탐구했던 deno/pyodide-sandbox 패턴을 Pydantic AI가 프로덕션 수준 MCP 서버로 구현한 것이다.

제로 설치 원라이너 데모

ANTHROPIC_API_KEY="sk-ant-..." \
uv run --with pydantic-ai python -c '...'

uv run --with로 Python 의존성을, Deno의 JSR 온디맨드 로딩으로 jsr:@pydantic/mcp-run-python을 설치 없이 구동한다. 결과: Claude 3.5 Haiku가 날짜 계산 코드를 MCP 서버에서 실행해 정답 반환.

MCP 도구 호출 투명성

LLM의 도구 호출이 ToolCallPart 객체로 노출된다:

ToolCallPart(
    tool_name='run_python_code',
    args={'python_code': '...'},
    tool_call_id='toulu_...',
)

하네스 관찰성 — 에이전트가 무슨 코드를 실행했는지 로그로 추적 가능.

로컬 모델 호환성

Mistral Small 3.1 (15GB, Ollama) + OpenAI-compatible API provider 조합으로도 동일 MCP 서버 동작 확인. 단, 자동으로 Python 도구를 선택하지 않아 “Use your python tool” 프롬프트 명시 필요.

연결되는 위키 페이지