原始内容
🧠 Model Context Protocol (MCP) - Server-Client Implementation
This project is a simple Model Context Protocol (MCP) system that includes an MCP Server and a MCP Client, communicating via Server-Sent Events (SSE) using FastAPI. It demonstrates lightweight tool invocation using SSE over HTTP.
🏗️ Architecture Overview
+-------------+ SSE HTTP +-------------+
| | <------------------------------------> | |
| MCP CLIENT | | MCP SERVER |
| (FastAPI) | /upload_claim ⇄ upload_claim | (SSE Tools) |
| Port: 5000 | /get_claim_details ⇄ get_claim_details | Port: 8000 |
+-------------+ +-------------+
📁 Project Structure
.
├── client/ # MCP Client (FastAPI app)
│ └──main.py
│
├── server/ # MCP Server with SSE tools
│ └──main.py
|
└── README.md
└── requirements.txt
🔧 MCP Server
- Port:
8000 - Framework: FastAPI
- Protocol: Server-Sent Events (SSE)
- Defined Tools:
upload_claimget_claim_details
▶️ Running the MCP Server
cd server
pip install -r requirements.txt
python main.py
🚀 MCP Client
- Port:
5000 - Framework: FastAPI
- Endpoints:
POST /upload_claim→ Callsupload_claimtool on the MCP ServerGET /get_claim_details→ Callsget_claim_detailstool on the MCP Server
▶️ Running the MCP Client
cd client
pip install -r requirements.txt
python main.py
🔄 Communication Flow
- Client sends an SSE HTTP request to the MCP Server to invoke a tool.
- Server processes the request and streams the response back via SSE.
📬 Sample Requests
POST /upload_claim
curl -X POST http://localhost:5000/upload_claim \
-H "Content-Type: application/json" \
-d '{
"emp_id": "12345",
"claim": "This is a dummy claim!"
}'
POST /get_claim_details
curl -X POST http://localhost:5000/get_claim_details \
-H "Content-Type: application/json" \
-d '{
"claim_id": "12345"
}'
🧰 Requirements
Python 3.10+
requirements.txt`
"mcp[cli]"
fastapi
httpx
Install dependencies in each directory using:
pip install -r requirements.txt
⚠️ Notes
- This is a minimal prototype intended for development or educational use.
- Data is stored in-memory and will reset on server restart.
- SSE is used for simplicity and streaming compatibility.