Prepare the server locally
Run this once before adding it to Claude Code.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRegister it in Claude Code
claude mcp add mcp-math-stdio -- python /path/to/server/math_server.pyReplace any placeholder paths in the command with the real path on your machine.
Make your agent remember this setup
mcp-math-stdio's config, env vars, and the gotchas you hit — recalled in every future Claude Code, Cursor, and Codex session.
npx conare@latestFree · one command · indexes the sessions already on disk. Set up in the browser instead →
What it does
- Provides basic arithmetic operations including addition, subtraction, multiplication, and division
- Demonstrates a complete MCP server and client setup
- Uses stdio transport for communication
- Serves as a functional reference implementation for MCP development
Tools 4
addAdd two numberssubtractSubtract two numbersmultiplyMultiply two numbersdivideDivide two numbersTry it
Original README from wapred/mcp-math-stdio
MCP Math Tools (stdio)
This project demonstrates a complete Model Context Protocol (MCP) setup using:
- MCP Server
- MCP Client
- stdio transport
- Math calculation tools
Requirements
- Python 3.10+
- pip
Setup
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Run the Client
python client/math_client.py
Expected Output
Available tools: ['add', 'subtract', 'multiply', 'divide'] 10 + 5 = 15 6 * 7 = 42 20 / 4 = 5
Mental Model
Client (math_client.py) | | spawn process v Python server/math_server.py | | MCP initialize | | tools/list v Tool registry (add, subtract, multiply, divide) | | JSON-RPC response v Client prints tool metadata
How list_tools() actually works
tools_result = await session.list_tools()
This sends an MCP request:
{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }
On the server side
Your math_server.py probably has something like:
@mcp.tool() def add(a: float, b: float) -> float: """Add two numbers""" return a + b
When the server starts:
It registers all tools in an internal registry
Each tool has:
name
description
inputSchema
outputSchema
When it receives tools/list:
It serializes this registry
Sends it back to the client