Spaces:
Runtime error
Runtime error
| # 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 | |
| } | |
| ``` | |