trakshan-mishra
Deploy FastAPI & MCP server over SSE
036a2db
|
Raw
History Blame Contribute Delete
4.47 kB
# DiffContext Web Service — Complete Setup Guide
## What you just built
```
diffcontext-service/
├── backend/
│ └── main.py ← FastAPI REST API server
├── frontend/
│ └── index.html ← Web UI (open in browser, no server needed)
├── mcp/
│ └── mcp_server.py ← MCP server for Claude Desktop / Cursor
└── README.md ← This file
```
---
## Option A — Web UI (easiest, for beginners)
### Step 1: Install dependencies
```bash
pip install fastapi uvicorn python-multipart aiofiles
```
### Step 2: Start the API server
```bash
cd /path/to/Diffcontext
uvicorn diffcontext-service.backend.main:app --reload --port 8000
```
### Step 3: Open the web UI
Just open `diffcontext-service/frontend/index.html` in your browser.
(Double-click it, or drag it into Chrome/Firefox.)
### Step 4: Use it
1. Zip your Python project folder
2. Upload the zip on the "Upload Project" tab
3. Pick a function from the list
4. Click "Analyse Blast Radius"
5. See what breaks!
---
## Option B — REST API (for developers)
Once the server is running at `http://localhost:8000`:
```python
import requests
# 1. Upload your project
with open("myproject.zip", "rb") as f:
r = requests.post("http://localhost:8000/upload", files={"file": f})
repo_id = r.json()["repo_id"]
# 2. List all functions
r = requests.get(f"http://localhost:8000/symbols?repo_id={repo_id}")
print(r.json()["symbols"][:5])
# 3. Get blast radius
r = requests.post("http://localhost:8000/blast", json={
"repo_id": repo_id,
"symbol": "./src/auth.py:validate_jwt"
})
print(r.json())
# 4. Get LLM context to paste into Claude
r = requests.post("http://localhost:8000/compile", json={
"repo_id": repo_id,
"symbol": "./src/auth.py:validate_jwt",
"max_tokens": 8000
})
print(r.json()["context_text"])
```
### Or use curl:
```bash
# Upload
curl -X POST http://localhost:8000/upload -F "file=@myproject.zip"
# Blast radius
curl -X POST http://localhost:8000/blast \
-H "Content-Type: application/json" \
-d '{"repo_id": "abc123", "symbol": "./main.py:my_function"}'
# Paste code directly (no upload)
curl -X POST http://localhost:8000/inline \
-H "Content-Type: application/json" \
-d '{
"files": {"main.py": "def greet(name):\n msg = build_message(name)\n print(msg)\n\ndef build_message(name):\n return f\"Hello {name}\""},
"symbol": "./main.py:greet"
}'
```
Interactive docs: http://localhost:8000/docs
---
## Option C — MCP Server (Claude Desktop / Cursor)
This lets Claude Desktop call DiffContext automatically — no copy-paste needed.
### Step 1: Install MCP
```bash
pip install mcp
```
### Step 2: Find the full path to mcp_server.py
```bash
# Mac/Linux
realpath diffcontext-service/mcp/mcp_server.py
# Windows
cd diffcontext-service\mcp && echo %CD%\mcp_server.py
```
### Step 3: Add to Claude Desktop config
**Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"diffcontext": {
"command": "python",
"args": ["/FULL/PATH/TO/diffcontext-service/mcp/mcp_server.py"]
}
}
}
```
### Step 4: Restart Claude Desktop
### Step 5: Use it in Claude Desktop
```
"List all functions in /Users/me/myproject"
"What is the blast radius of ./src/auth.py:validate_jwt
in /Users/me/myproject?"
"I'm about to change create_user in /Users/me/myproject.
Compile context so I can understand the impact."
```
Claude will call DiffContext automatically and show you the results.
---
## Troubleshooting
| Problem | Fix |
|---------|-----|
| `Connection refused` on localhost:8000 | Run the uvicorn command first |
| `No Python files found` | Make sure your zip contains .py files |
| Symbol not found | Use format `./filename.py:function_name` (no parentheses) |
| MCP not working | Check the full path in claude_desktop_config.json |
| `ModuleNotFoundError: mcp` | Run `pip install mcp` |
---
## API response format
```json
{
"symbol": "./service.py:onboard_user",
"direct_callers": ["./api.py:handle_signup"],
"direct_callees": ["./service.py:create_user", "./service.py:create_order"],
"blast_radius_count": 5,
"blast_radius_by_file": {
"./api.py": ["handle_signup", "process_request"],
"./tests/test_service.py": ["test_onboard"]
},
"all_affected": ["./api.py:handle_signup", ...],
"total_symbols_in_repo": 47
}
```