Quick Start
-
Install protomcp
Terminal window brew install msilverblatt/tap/protomcp -
Install the SDK
Terminal window # Pythonpip install protomcp# TypeScriptnpm install protomcp zod# Gogo get github.com/msilverblatt/protomcp/sdk/go# Rustcargo add protomcp serde_jsoncargo add tokio --features full -
Write a tool file
Create
tools.py(Python):from protomcp import tool, ToolResult@tool("Add two numbers together")def add(a: int, b: int) -> ToolResult:return ToolResult(result=str(a + b))@tool("Greet a user by name")def greet(name: str) -> ToolResult:return ToolResult(result=f"Hello, {name}!")Or create
tools.ts(TypeScript):import { tool, ToolResult } from 'protomcp';import { z } from 'zod';tool({description: 'Add two numbers together',args: z.object({ a: z.number(), b: z.number() }),handler: function add({ a, b }) {return new ToolResult({ result: String(a + b) });},});tool({description: 'Greet a user by name',args: z.object({ name: z.string() }),handler: function greet({ name }) {return new ToolResult({ result: `Hello, ${name}!` });},}); -
Run in dev mode
Terminal window # Pythonpmcp dev tools.py# TypeScriptpmcp dev tools.tsYou should see:
[protomcp] listening on stdio[protomcp] loaded 2 tools: add, greet -
Configure your MCP client
Add to your MCP client config (e.g. Claude Desktop
claude_desktop_config.json):{"mcpServers": {"mytools": {"command": "pmcp","args": ["dev", "/absolute/path/to/tools.py"]}}}Use the full path to your tool file (
.pyor.ts). Restart your MCP client. The toolsaddandgreetwill appear. -
Try hot reload
While the MCP client is running, add a new tool to your file:
# Python@tool("Reverse a string")def reverse(text: str) -> ToolResult:return ToolResult(result=text[::-1])// TypeScripttool({description: 'Reverse a string',args: z.object({ text: z.string() }),handler: function reverse({ text }) {return new ToolResult({ result: text.split('').reverse().join('') });},});Save the file. protomcp reloads automatically — no restart needed. The new tool appears in your client within seconds.
Next steps
- Writing Tools (Python) — type hints, optional params, progress, logging
- Writing Tools (TypeScript) — Zod schemas, async handlers, progress, logging
- Writing Tools (Go) — functional options,
ToolResult, progress - Writing Tools (Rust) — builder pattern,
ArgDef, progress - Dynamic Tool Lists — enable/disable tools at runtime
- Custom Middleware — intercept tool calls with before/after hooks
- CLI Reference — all flags and options