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