This project demonstrates a simple client-server implementation using the Model Context Protocol (MCP), which is a standardized way to connect large language models with tools and data.
This example shows how to:
- Create an MCP server with custom tools
- Connect to the server using an MCP client
- Call tools and get responses from the server
Click the image above to watch a tutorial on MCP implementation.
.
├── pyproject.toml
├── README.md
├── src
│ ├── client
│ │ └── mcp_client.py # MCP client implementation
│ └── server
│ └── example_server.py # MCP server with tools
└── uv.lock
The server exposes two tools:
calculate_bmi
- A simple calculator that computes Body Mass Indexfetch_weather
- An async tool that retrieves weather data from an external API
The client connects to the server via stdio, initializes a session, and calls the server's tools.
- Python 3.9+
- uv (Python package manager)
# Install dependencies
uv install -e .
- Start the client (which will automatically start the server):
uv run src/client/mcp_client.py
The client will:
- Connect to the server
- List available tools
- Call the BMI calculator with sample data
- Call the weather tool with sample coordinates
Available tools: meta=None nextCursor=None tools=[...]
BMI calculation result: 22.857142857142858
Weather data: {"current_weather":{"temperature":14.2,"windspeed":12.6, ...}}
( run command below and then visit http://localhost:5173 )
❯ mcp dev src/server/example_server.py
Starting MCP inspector...
Proxy server listening on port 3000
🔍 MCP Inspector is up and running at http://localhost:5173 🚀
New SSE connection
Query parameters: {
transportType: 'stdio',
command: 'uv',
args: 'run --with mcp mcp run src/server/example_server.py',
This project uses:
This project is licensed under the MIT License - see the LICENSE file for details.