| # MCP Client Configuration Examples | |
| This document provides configuration examples for various MCP clients to connect to the Proportio server. | |
| ## Cursor IDE | |
| ### Method 1: Settings JSON | |
| Add to your Cursor settings (`Cmd/Ctrl + ,` → Open Settings JSON): | |
| ```json | |
| { | |
| "mcpServers": { | |
| "proportio": { | |
| "url": "http://localhost:7860/gradio_api/mcp/sse", | |
| "headers": { | |
| "X-Api-Key": "your-secure-token-here" | |
| } | |
| } | |
| } | |
| } | |
| ``` | |
| ### Method 2: Workspace Configuration | |
| Create `.cursor/mcp.json` in your project root: | |
| ```json | |
| { | |
| "proportio": { | |
| "url": "http://localhost:7860/gradio_api/mcp/sse", | |
| "headers": { | |
| "X-Api-Key": "your-secure-token-here" | |
| } | |
| } | |
| } | |
| ``` | |
| ## Claude Desktop | |
| ### Configuration File Location | |
| - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` | |
| - **Windows**: `%APPDATA%/Claude/claude_desktop_config.json` | |
| ### Local Server Configuration | |
| ```json | |
| { | |
| "mcpServers": { | |
| "proportio": { | |
| "command": "python", | |
| "args": ["/path/to/proportio/app.py"], | |
| "env": { | |
| "MCP_TOKEN": "your-secure-token-here" | |
| } | |
| } | |
| } | |
| } | |
| ``` | |
| ### Remote Server Configuration | |
| ```json | |
| { | |
| "mcpServers": { | |
| "proportio": { | |
| "url": "https://your-server.com/gradio_api/mcp/sse", | |
| "headers": { | |
| "X-Api-Key": "your-secure-token-here" | |
| } | |
| } | |
| } | |
| } | |
| ``` | |
| ## CrewAI | |
| ### Basic Setup | |
| ```python | |
| from crewai import Agent, Task, Crew | |
| from crewai.tools import MCPTool | |
| # Configure the MCP tool | |
| proportio_tool = MCPTool( | |
| name="proportio_calculator", | |
| url="http://localhost:7860/gradio_api/mcp/sse", | |
| headers={"X-Api-Key": "your-secure-token-here"} | |
| ) | |
| # Create an agent with the tool | |
| math_agent = Agent( | |
| role="Mathematical Calculator", | |
| goal="Perform accurate proportion and percentage calculations", | |
| backstory="You are an expert mathematician who uses reliable tools for calculations.", | |
| tools=[proportio_tool], | |
| verbose=True | |
| ) | |
| # Example task | |
| calculation_task = Task( | |
| description="Calculate what percentage 75 is of 300, then scale that result by 1.5", | |
| agent=math_agent, | |
| expected_output="The percentage and scaled result with explanations" | |
| ) | |
| # Run the crew | |
| crew = Crew( | |
| agents=[math_agent], | |
| tasks=[calculation_task] | |
| ) | |
| result = crew.kickoff() | |
| print(result) | |
| ``` | |
| ### Advanced CrewAI Setup with Multiple Tools | |
| ```python | |
| from crewai import Agent, Task, Crew | |
| from crewai.tools import MCPTool | |
| class ProportioTools: | |
| def __init__(self, base_url="http://localhost:7860", api_key="your-token"): | |
| self.base_url = f"{base_url}/gradio_api/mcp/sse" | |
| self.headers = {"X-Api-Key": api_key} | |
| def get_tools(self): | |
| return [ | |
| MCPTool( | |
| name="percent_calculator", | |
| url=self.base_url, | |
| headers=self.headers, | |
| description="Calculate percentages accurately" | |
| ), | |
| MCPTool( | |
| name="proportion_solver", | |
| url=self.base_url, | |
| headers=self.headers, | |
| description="Solve proportion equations" | |
| ), | |
| MCPTool( | |
| name="dimension_resizer", | |
| url=self.base_url, | |
| headers=self.headers, | |
| description="Resize dimensions with scaling" | |
| ) | |
| ] | |
| # Usage | |
| proportio = ProportioTools(api_key="your-secure-token-here") | |
| tools = proportio.get_tools() | |
| agent = Agent( | |
| role="Design Calculator", | |
| goal="Help with design calculations and proportions", | |
| tools=tools | |
| ) | |
| ``` | |
| ## OpenAI Agents SDK | |
| ### Basic Configuration | |
| ```python | |
| from openai_agents import Agent | |
| from openai_agents.mcp import MCPConnection | |
| # Setup MCP connection | |
| mcp_conn = MCPConnection( | |
| url="http://localhost:7860/gradio_api/mcp/sse", | |
| headers={"X-Api-Key": "your-secure-token-here"} | |
| ) | |
| # Create agent with MCP tools | |
| agent = Agent( | |
| name="Math Assistant", | |
| model="gpt-4", | |
| mcp_connections=[mcp_conn] | |
| ) | |
| # Use the agent | |
| response = agent.run("What percentage is 45 out of 180?") | |
| print(response) | |
| ``` | |
| ## Generic HTTP Client (for testing) | |
| ### Using curl | |
| ```bash | |
| # Test percent_of tool | |
| curl -X POST http://localhost:7860/gradio_api/mcp/sse \ | |
| -H "X-Api-Key: your-secure-token-here" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "jsonrpc": "2.0", | |
| "id": 1, | |
| "method": "tools/call", | |
| "params": { | |
| "name": "percent_of", | |
| "arguments": { | |
| "part": 25, | |
| "whole": 100 | |
| } | |
| } | |
| }' | |
| ``` | |
| ### Using Python requests | |
| ```python | |
| import requests | |
| import json | |
| def call_proportio_tool(tool_name, arguments, api_key="your-token"): | |
| url = "http://localhost:7860/gradio_api/mcp/sse" | |
| headers = { | |
| "X-Api-Key": api_key, | |
| "Content-Type": "application/json" | |
| } | |
| payload = { | |
| "jsonrpc": "2.0", | |
| "id": 1, | |
| "method": "tools/call", | |
| "params": { | |
| "name": tool_name, | |
| "arguments": arguments | |
| } | |
| } | |
| response = requests.post(url, headers=headers, json=payload) | |
| return response.json() | |
| # Examples | |
| result1 = call_proportio_tool("percent_of", {"part": 75, "whole": 300}) | |
| print(f"Percentage: {result1}") | |
| result2 = call_proportio_tool("solve_proportion", {"a": 3, "b": 4, "c": 6, "d": None}) | |
| print(f"Missing value: {result2}") | |
| result3 = call_proportio_tool("resize_dimensions", { | |
| "width": 1920, | |
| "height": 1080, | |
| "scale": 0.5 | |
| }) | |
| print(f"New dimensions: {result3}") | |
| ``` | |
| ## Environment-Specific Configurations | |
| ### Development Environment | |
| ```bash | |
| # .env file | |
| MCP_TOKEN=dev-token-123 | |
| DEBUG=true | |
| LOG_LEVEL=DEBUG | |
| RELOAD=true | |
| ``` | |
| ### Production Environment | |
| ```bash | |
| # .env file | |
| MCP_TOKEN=prod-secure-token-xyz789 | |
| DEBUG=false | |
| LOG_LEVEL=WARNING | |
| MAX_REQUEST_SIZE=32768 | |
| ``` | |
| ### Hugging Face Spaces | |
| Set these as Space secrets: | |
| - `MCP_TOKEN`: Your secure authentication token | |
| - `LOG_LEVEL`: `INFO` or `WARNING` | |
| Access URL: `https://your-username-proportio.hf.space/gradio_api/mcp/sse` | |
| ## Security Best Practices | |
| ### Token Generation | |
| Generate secure tokens: | |
| ```bash | |
| # Python | |
| python -c "import secrets; print(secrets.token_urlsafe(32))" | |
| # OpenSSL | |
| openssl rand -base64 32 | |
| # Node.js | |
| node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))" | |
| ``` | |
| ### Token Rotation | |
| 1. Generate new token | |
| 2. Update all client configurations | |
| 3. Update server environment variable | |
| 4. Restart server | |
| 5. Verify all clients work with new token | |
| ### Network Security | |
| - Use HTTPS in production | |
| - Implement rate limiting at reverse proxy level | |
| - Monitor for unusual usage patterns | |
| - Keep logs for security auditing | |
| ## Troubleshooting | |
| ### Common Connection Issues | |
| 1. **"Connection refused"** | |
| - Check if server is running: `curl http://localhost:7860` | |
| - Verify port is not blocked by firewall | |
| 2. **"Invalid API key"** | |
| - Ensure `X-Api-Key` header is included | |
| - Check token matches `MCP_TOKEN` environment variable | |
| - Verify no extra spaces or characters in token | |
| 3. **"Request timeout"** | |
| - Check server logs for errors | |
| - Verify network connectivity | |
| - Increase client timeout settings | |
| ### Debug Mode | |
| Enable debug logging to troubleshoot issues: | |
| ```bash | |
| export DEBUG=true | |
| export LOG_LEVEL=DEBUG | |
| python app.py | |
| ``` | |
| This will show detailed logs of all MCP requests and responses. | |
| ## Roo Code Assistant | |
| ### Configuration | |
| Roo uses MCP servers automatically when they're running locally. Simply start the Proportio server: | |
| ```bash | |
| python app.py | |
| ``` | |
| Roo will detect the running MCP server at `http://localhost:7860/gradio_api/mcp/sse` and make the tools available. | |
| ### Usage Examples | |
| ``` | |
| Human: Calculate what percentage 45 is of 180 | |
| Roo: I'll use the proportion calculator to find what percentage 45 is of 180. | |
| [Using percent_of tool with part=45, whole=180] | |
| 45 is 25% of 180. | |
| ``` | |
| ``` | |
| Human: I need to resize an image from 1920x1080 to half the size | |
| Roo: I'll help you calculate the new dimensions using the resize tool. | |
| [Using resize_dimensions tool with width=1920, height=1080, scale=0.5] | |
| The new dimensions would be 960 × 540 pixels. | |
| ``` | |
| ## OpenWebUI | |
| ### Configuration File | |
| Add to your OpenWebUI configuration (`config.yaml` or environment): | |
| ```yaml | |
| mcp: | |
| servers: | |
| proportio: | |
| url: "http://localhost:7860/gradio_api/mcp/sse" | |
| headers: | |
| X-Api-Key: "your-secure-token-here" | |
| tools: | |
| - percent_of | |
| - solve_proportion | |
| - scale_by_ratio | |
| - direct_k | |
| - resize_dimensions | |
| ``` | |
| ### Environment Variables | |
| ```bash | |
| # OpenWebUI MCP configuration | |
| OPENWEBUI_MCP_SERVERS='[ | |
| { | |
| "name": "proportio", | |
| "url": "http://localhost:7860/gradio_api/mcp/sse", | |
| "headers": {"X-Api-Key": "your-secure-token-here"} | |
| } | |
| ]' | |
| ``` | |
| ### Docker Compose with OpenWebUI | |
| ```yaml | |
| version: '3.8' | |
| services: | |
| proportio: | |
| build: . | |
| ports: | |
| - "7860:7860" | |
| environment: | |
| - MCP_TOKEN=your-secure-token-here | |
| networks: | |
| - webui_network | |
| openwebui: | |
| image: ghcr.io/open-webui/open-webui:main | |
| ports: | |
| - "3000:8080" | |
| environment: | |
| - OPENWEBUI_MCP_SERVERS=[{"name":"proportio","url":"http://proportio:7860/gradio_api/mcp/sse","headers":{"X-Api-Key":"your-secure-token-here"}}] | |
| depends_on: | |
| - proportio | |
| networks: | |
| - webui_network | |
| networks: | |
| webui_network: | |
| driver: bridge | |
| ``` | |
| ## Msty | |
| ### Configuration | |
| In Msty's settings, add the MCP server: | |
| ```json | |
| { | |
| "mcp_servers": { | |
| "proportio": { | |
| "type": "sse", | |
| "url": "http://localhost:7860/gradio_api/mcp/sse", | |
| "auth": { | |
| "type": "header", | |
| "header_name": "X-Api-Key", | |
| "header_value": "your-secure-token-here" | |
| }, | |
| "description": "Mathematical proportion calculations" | |
| } | |
| } | |
| } | |
| ``` | |
| ### Using with Msty | |
| 1. Start the Proportio server: `python app.py` | |
| 2. Open Msty and go to Settings → MCP Servers | |
| 3. Add a new server with the configuration above | |
| 4. The tools will be available in chat sessions | |
| ### Example Msty Usage | |
| ``` | |
| You: I need to solve this proportion: 3/4 = x/12. What is x? | |
| Msty: I'll use the proportion solver to find the missing value. | |
| [Using solve_proportion tool] | |
| The missing value x is 9. So 3/4 = 9/12. | |
| ``` | |
| ## Local Development Setup Script | |
| Create a setup script for easy local development: | |
| ```bash | |
| #!/bin/bash | |
| # setup_local_mcp.sh | |
| # Generate secure token | |
| TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))") | |
| # Create .env file | |
| cat > .env << EOF | |
| MCP_TOKEN=$TOKEN | |
| DEBUG=true | |
| LOG_LEVEL=DEBUG | |
| RELOAD=true | |
| EOF | |
| echo "Generated secure token: $TOKEN" | |
| echo "Add this to your MCP clients' X-Api-Key header" | |
| # Start the server | |
| python app.py | |
| ``` | |
| Make it executable: `chmod +x setup_local_mcp.sh` | |
| ## Testing Your MCP Connection | |
| ### Quick Test Script | |
| ```python | |
| #!/usr/bin/env python3 | |
| """Test script for Proportio MCP server connection""" | |
| import requests | |
| import json | |
| import sys | |
| def test_mcp_connection(base_url="http://localhost:7860", api_key="your-token"): | |
| """Test MCP server connection and tools.""" | |
| url = f"{base_url}/gradio_api/mcp/sse" | |
| headers = { | |
| "X-Api-Key": api_key, | |
| "Content-Type": "application/json" | |
| } | |
| # Test cases | |
| tests = [ | |
| { | |
| "name": "Percentage Calculation", | |
| "tool": "percent_of", | |
| "args": {"part": 25, "whole": 100}, | |
| "expected": 25.0 | |
| }, | |
| { | |
| "name": "Proportion Solving", | |
| "tool": "solve_proportion", | |
| "args": {"a": 3, "b": 4, "c": 6, "d": None}, | |
| "expected": 8.0 | |
| }, | |
| { | |
| "name": "Dimension Resizing", | |
| "tool": "resize_dimensions", | |
| "args": {"width": 100, "height": 50, "scale": 2.0}, | |
| "expected": {"new_width": 200.0, "new_height": 100.0} | |
| } | |
| ] | |
| print(f"Testing MCP server at {url}") | |
| print(f"Using API key: {api_key[:8]}...") | |
| print("-" * 50) | |
| for test in tests: | |
| try: | |
| payload = { | |
| "jsonrpc": "2.0", | |
| "id": 1, | |
| "method": "tools/call", | |
| "params": { | |
| "name": test["tool"], | |
| "arguments": test["args"] | |
| } | |
| } | |
| response = requests.post(url, headers=headers, json=payload, timeout=10) | |
| if response.status_code == 200: | |
| result = response.json() | |
| print(f"✅ {test['name']}: PASSED") | |
| print(f" Result: {result}") | |
| else: | |
| print(f"❌ {test['name']}: FAILED (HTTP {response.status_code})") | |
| print(f" Response: {response.text}") | |
| except Exception as e: | |
| print(f"❌ {test['name']}: ERROR - {str(e)}") | |
| print() | |
| if __name__ == "__main__": | |
| api_key = input("Enter your API key (or press Enter for 'test-token'): ").strip() | |
| if not api_key: | |
| api_key = "test-token" | |
| test_mcp_connection(api_key=api_key) | |
| ``` | |
| Save as `test_mcp.py` and run: `python test_mcp.py` | |
| This comprehensive guide covers all major MCP clients including Roo, OpenWebUI, and Msty, providing practical examples for integrating the Proportio server into your development workflow. |