mirror of https://github.com/sysown/proxysql
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
6.0 KiB
192 lines
6.0 KiB
# ProxySQL MCP stdio Bridge
|
|
|
|
A bridge that converts between **stdio-based MCP** (for Claude Code) and **ProxySQL's HTTPS MCP endpoint**.
|
|
|
|
## What It Does
|
|
|
|
```
|
|
┌─────────────┐ stdio ┌──────────────────┐ HTTPS ┌──────────┐
|
|
│ Claude Code│ ──────────> │ stdio Bridge │ ──────────> │ ProxySQL │
|
|
│ (MCP Client)│ │ (this script) │ │ MCP │
|
|
└─────────────┘ └──────────────────┘ └──────────┘
|
|
```
|
|
|
|
- **To Claude Code**: Acts as an MCP Server (stdio transport)
|
|
- **To ProxySQL**: Acts as an MCP Client (HTTPS transport)
|
|
|
|
## Installation
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
pip install httpx
|
|
```
|
|
|
|
2. Make the script executable:
|
|
```bash
|
|
chmod +x proxysql_mcp_stdio_bridge.py
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Required | Default | Description |
|
|
|----------|----------|---------|-------------|
|
|
| `PROXYSQL_MCP_ENDPOINT` | No | `https://127.0.0.1:6071/mcp/query` | ProxySQL MCP endpoint URL |
|
|
| `PROXYSQL_MCP_TOKEN` | No | - | Bearer token for authentication (if configured) |
|
|
| `PROXYSQL_MCP_INSECURE_SSL` | No | 0 | Set to 1 to disable SSL verification (for self-signed certs) |
|
|
|
|
### Configure in Claude Code
|
|
|
|
Add to your Claude Code MCP settings (usually `~/.config/claude-code/mcp_config.json` or similar):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"proxysql": {
|
|
"command": "python3",
|
|
"args": ["./scripts/mcp/proxysql_mcp_stdio_bridge.py"],
|
|
"env": {
|
|
"PROXYSQL_MCP_ENDPOINT": "https://127.0.0.1:6071/mcp/query",
|
|
"PROXYSQL_MCP_TOKEN": "your_token_here",
|
|
"PROXYSQL_MCP_INSECURE_SSL": "1"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Quick Test from Terminal
|
|
|
|
```bash
|
|
export PROXYSQL_MCP_ENDPOINT="https://127.0.0.1:6071/mcp/query"
|
|
export PROXYSQL_MCP_TOKEN="your_token" # optional
|
|
export PROXYSQL_MCP_INSECURE_SSL="1" # for self-signed certs
|
|
|
|
python3 proxysql_mcp_stdio_bridge.py
|
|
```
|
|
|
|
Then send a JSON-RPC request via stdin:
|
|
```json
|
|
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
|
|
```
|
|
|
|
## Supported MCP Methods
|
|
|
|
| Method | Description |
|
|
|--------|-------------|
|
|
| `initialize` | Handshake protocol |
|
|
| `tools/list` | List available ProxySQL MCP tools |
|
|
| `tools/call` | Call a ProxySQL MCP tool |
|
|
| `ping` | Health check |
|
|
|
|
## Available Tools (from ProxySQL)
|
|
|
|
Once connected, the following tools will be available in Claude Code:
|
|
|
|
### Database Exploration Tools
|
|
- `list_schemas` - List databases
|
|
- `list_tables` - List tables in a schema
|
|
- `describe_table` - Get table structure
|
|
- `get_constraints` - Get foreign keys and constraints
|
|
- `sample_rows` - Sample data from a table
|
|
- `run_sql_readonly` - Execute read-only SQL queries
|
|
- `explain_sql` - Get query execution plan
|
|
- `table_profile` - Get table statistics
|
|
- `column_profile` - Get column statistics
|
|
- `suggest_joins` - Suggest join paths between tables
|
|
- `find_reference_candidates` - Find potential foreign key relationships
|
|
|
|
### Two-Phase Discovery Tools
|
|
- `discovery.run_static` - Run Phase 1 of two-phase discovery (static harvest)
|
|
- `agent.run_start` - Start a new agent run for discovery coordination
|
|
- `agent.run_finish` - Mark an agent run as completed
|
|
- `agent.event_append` - Append an event to an agent run
|
|
|
|
### LLM Interaction Tools
|
|
- `llm.summary_upsert` - Store or update a table/column summary generated by LLM
|
|
- `llm.summary_get` - Retrieve LLM-generated summary for a table or column
|
|
- `llm.relationship_upsert` - Store or update an inferred relationship between tables
|
|
- `llm.domain_upsert` - Store or update a business domain classification
|
|
- `llm.domain_set_members` - Set the members (tables) of a business domain
|
|
- `llm.metric_upsert` - Store or update a business metric definition
|
|
- `llm.question_template_add` - Add a question template that can be answered using this data
|
|
- `llm.note_add` - Add a general note or insight about the data
|
|
- `llm.search` - Search LLM-generated content and insights
|
|
|
|
### Catalog Tools
|
|
- `catalog_upsert` - Store data in the catalog
|
|
- `catalog_get` - Retrieve from the catalog
|
|
- `catalog_search` - Search the catalog
|
|
- `catalog_delete` - Delete entry from the catalog
|
|
- `catalog_list` - List catalog entries by kind
|
|
- `catalog_merge` - Merge multiple catalog entries into a single consolidated entry
|
|
|
|
## Example Usage in Claude Code
|
|
|
|
Once configured, you can ask Claude:
|
|
|
|
> "List all tables in the testdb schema"
|
|
> "Describe the customers table"
|
|
> "Show me 5 rows from the orders table"
|
|
> "Run SELECT COUNT(*) FROM customers"
|
|
|
|
## Logging
|
|
|
|
For debugging, the bridge writes logs to `/tmp/proxysql_mcp_bridge.log`:
|
|
|
|
```bash
|
|
tail -f /tmp/proxysql_mcp_bridge.log
|
|
```
|
|
|
|
The log shows:
|
|
- stdout writes (byte counts and previews)
|
|
- tool calls (name, arguments, responses from ProxySQL)
|
|
- Any errors or issues
|
|
|
|
This can help diagnose communication issues between Claude Code, the bridge, and ProxySQL.
|
|
|
|
## Troubleshooting
|
|
|
|
### Debug Mode
|
|
|
|
If tools aren't working, check the bridge log file for detailed information:
|
|
|
|
```bash
|
|
cat /tmp/proxysql_mcp_bridge.log
|
|
```
|
|
|
|
Look for:
|
|
- `"tools/call: name=..."` - confirms tool calls are being forwarded
|
|
- `"response from ProxySQL:"` - shows what ProxySQL returned
|
|
- `"WRITE stdout:"` - confirms responses are being sent to Claude Code
|
|
|
|
### Connection Refused
|
|
Make sure ProxySQL MCP server is running:
|
|
```bash
|
|
curl -k https://127.0.0.1:6071/mcp/query \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"jsonrpc": "2.0", "method": "ping", "id": 1}'
|
|
```
|
|
|
|
### SSL Certificate Errors
|
|
Set `PROXYSQL_MCP_INSECURE_SSL=1` to bypass certificate verification.
|
|
|
|
### Authentication Errors
|
|
Check that `PROXYSQL_MCP_TOKEN` matches the token configured in ProxySQL:
|
|
```sql
|
|
SHOW VARIABLES LIKE 'mcp-query_endpoint_auth';
|
|
```
|
|
|
|
## Requirements
|
|
|
|
- Python 3.7+
|
|
- httpx (`pip install httpx`)
|
|
- ProxySQL with MCP enabled
|
|
|
|
## Version
|
|
|
|
- **Last Updated:** 2026-01-19
|
|
- **MCP Protocol:** JSON-RPC 2.0 over HTTPS
|