|
# 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. |