SampleMCP
A simple Python project demonstrating how to build and connect MCP servers using FastMCP, LangChain MCP adapters, LangGraph, and OpenAI.
Features
- Math MCP server using
stdio - Weather MCP server using
streamable-http - LangChain MCP client connecting to multiple MCP servers
- LangGraph ReAct agent using MCP tools
- Example tool calls for math and weather queries
Project Structure
SampleMCP/
├── client.py # MCP client + LangGraph agent
├── mathserver.py # Math MCP server with add/multiply tools
├── weather.py # Weather MCP server using streamable HTTP
├── main.py # Basic sample entry point
├── pyproject.toml # Project metadata and dependencies
├── requirements.txt # Python dependencies
└── README.md
Requirements
- Python 3.12+
- OpenAI API key
- Optional: Groq API key
Installation
Clone the repository:
git clone https://github.com/JayantPrakash/SampleMCP.git
cd SampleMCP
Install dependencies:
pip install -r requirements.txt
Or using uv:
uv sync
Environment Variables
Create a .env file in the project root:
OPENAI_API_KEY=your_openai_api_key
GROQ_API_KEY=your_groq_api_key
Running the MCP Servers
1. Start the Weather Server
The weather server uses streamable-http.
python weather.py
By default, it exposes the MCP endpoint at:
http://localhost:8000/mcp
2. Math Server
The math server uses stdio and is started automatically by the client through:
"command": "python",
"args": ["mathserver.py"],
"transport": "stdio"
Running the Client
In a separate terminal, run:
python client.py
The client connects to:
mathserver.pythroughstdioweather.pythroughstreamable_http
It then creates a LangGraph ReAct agent and asks:
what's (3 + 5) x 12?
and:
what is the weather in California?
MCP Tools
Math Server
Defined in mathserver.py.
add(a: int, b: int) -> int
Adds two numbers.
multiple(a: int, b: int) -> int
Multiplies two numbers.
Weather Server
Defined in weather.py.
get_weather(location: str) -> str
Returns a sample weather response for a given location.
Notes
mathserver.pyusestransport="stdio".weather.pyusestransport="streamable-http".- In
client.py, the streamable HTTP transport is configured asstreamable_http. - Make sure the weather server is running before executing
client.py.
Example Output
Math response: 96
Weather response: It's always raining in California