MCP-Demo
This project provides a Python-based example of the Model Context Protocol (MCP), demonstrating communication between a Large Language Model agent and enterprise systems using JSON-RPC over HTTP. It showcases the use of a FastAPI-based server and a client to list and call tools, including a simulated real-time connection.
š§ Model Context Protocol (MCP) Example ā Python Implementation
This repository provides a minimal yet functional example of the Model Context Protocol (MCP) using Python. It demonstrates how a Large Language Model (LLM) agent can communicate with enterprise systems through a standardized client-server interface using JSON-RPC over HTTP, including support for Server-Sent Events (SSE).
You can read my blog to understand the subject better: https://srivatssan.medium.com/model-context-protocol-exhaustively-explained-f5a30a87a3ff?sk=1b971265640303c66b04377371c82102
š¦ Repository Structure
mcp-protocol-example/
āāā client/
ā āāā main.py # Python MCP client using JSON-RPC
āāā server/
ā āāā main.py # FastAPI-based MCP server with /rpc and /events endpoints
š How to Run This Example
1ļøā£ Start the Server
Make sure you have FastAPI and Uvicorn installed:
pip install fastapi uvicorn
Then, start the MCP server:
cd server
uvicorn main:app --reload
This starts a FastAPI server with:
POST /rpc
: JSON-RPC handler for tool listing and invocationGET /events
: Simulated SSE endpoint emitting heartbeat messages every 5 seconds
2ļøā£ Run the Client
Install the required Python requests package:
pip install requests
Then run the client to interact with the server:
cd client
python main.py
Output:
Tools: [{'name': 'greet', 'description': 'Greets the user', ...}]
Response: {'message': 'Hello, Sri!'}
You can run http://localhost:8000/events and you should see the heartbeat event being returned like the one shown below.
_data: {'event': 'heartbeat'}
data: {'event': 'heartbeat'} _ ...
āļø What It Demonstrates
- A basic MCP server exposing tools via
tools/list
andtools/call
- A client sending JSON-RPC requests to list and call tools
- Simulated real-time connection using
/events
SSE endpoint - Modular structure ready to extend for
resources/
andprompts/
support
š§© Next Steps
You can expand this prototype by:
- Adding more tools with different schemas
- Supporting
resources/list
andresources/read
- Managing prompt templates with
prompts/get
- Implementing authentication and access control
- Handling streaming responses from server to client
š References
- Model Context Protocol (official site)
- JSON-RPC 2.0 Specification
- FastAPI Documentation
- Server-Sent Events (MDN)
Created with ā¤ļø by Srivatssan Srinivasan