MCP-Demo

MCP-Demo

1

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 invocation
  • GET /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 and tools/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/ and prompts/ support

🧩 Next Steps

You can expand this prototype by:

  • Adding more tools with different schemas
  • Supporting resources/list and resources/read
  • Managing prompt templates with prompts/get
  • Implementing authentication and access control
  • Handling streaming responses from server to client

šŸ“š References


Created with ā¤ļø by Srivatssan Srinivasan