MCP tool relay for local LLM inference — bridge any OpenAI-compatible endpoint to MCP servers
Project description
qsp-mcp
QSP — relay MCP tools to any OpenAI-compatible local LLM endpoint.
Named after the Q-signal QSP ("Will you relay?"), qsp-mcp relays tool calls between a local LLM and MCP servers. Any model with function calling capability gains access to the full qso-graph tool ecosystem — 82+ tools across 14 packages — from local weights, not from cloud.
Install
pip install qsp-mcp
Quick Start
# Interactive mode
qsp-mcp --config ~/.config/qsp-mcp/config.json
# Single query
qsp-mcp --query "What bands are open from DN13 to JN48 right now?"
# Direct endpoint (no config file needed if no MCP servers configured)
qsp-mcp --endpoint http://localhost:8000/v1/chat/completions --api-key sk-xxx
Configuration
The config format is Claude Desktop compatible — copy your existing mcpServers block directly:
{
"mcpServers": {
"ionis": {
"command": "ionis-mcp",
"env": { "IONIS_DATA_DIR": "/path/to/datasets/v1.0" }
},
"solar": {
"command": "solar-mcp"
},
"wspr": {
"command": "wspr-mcp"
}
},
"bridge": {
"endpoint": "http://localhost:8000/v1/chat/completions",
"model": "AstroSage-70B",
"temperature": 0.3,
"system_prompt": "You are an expert ham radio operator and RF engineer.",
"max_tool_calls_per_turn": 5,
"profiles": {
"contest": {
"servers": ["n1mm", "ionis", "solar", "wspr"],
"temperature": 0.2,
"system_prompt": "You are a contest advisor. Be concise."
},
"propagation": {
"servers": ["ionis", "solar", "wspr"],
"temperature": 0.3
},
"full": {
"servers": "*",
"temperature": 0.3
}
},
"server_timeouts": {
"ionis": 1,
"solar": 8,
"qrz": 5
}
}
}
The mcpServers block uses the exact same format as Claude Desktop. The bridge section is qsp-mcp specific (ignored by Claude Desktop).
CLI Options
qsp-mcp [OPTIONS]
Options:
-c, --config PATH Config file path (default: ~/.config/qsp-mcp/config.json)
-e, --endpoint URL LLM endpoint URL (overrides config)
-k, --api-key KEY API key for the LLM endpoint
-m, --model NAME Model name (overrides config)
-p, --profile NAME Tool profile (contest, dx, propagation, full)
-q, --query TEXT Single query mode — ask one question and exit
--enable-writes Enable write-capable tools (disabled by default)
--list-tools List available tools and exit
--version Show version
Interactive Commands
| Command | Action |
|---|---|
/tools |
List available tools |
/help |
Show help |
quit |
Exit (also: exit, q, 73) |
Design
qsp-mcp is a strict, stateless pipe between an LLM and MCP tools:
- No caching, no shared state, no health polling
- All state lives in MCP servers
- All inference optimization lives in the inference server (prefix caching, KV-cache)
- qsp-mcp just connects the two sides
Works with any OpenAI-compatible endpoint: llama.cpp, Ollama, vLLM, SGLang.
Security
- Write-capable tools disabled by default (
--enable-writesopt-in) - Credentials stay inside MCP servers (OS keyring) — never exposed to qsp-mcp or the LLM
- No subprocess, no shell execution, no eval
- All external connections HTTPS only (LAN endpoints exempted)
License
MIT — see LICENSE.
Part of the qso-graph ecosystem
qso-graph.io — MCP servers for amateur radio.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qsp_mcp-0.2.2.tar.gz.
File metadata
- Download URL: qsp_mcp-0.2.2.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25f88dbdaac8fb41480804ba16e5f752e0263bbb2ab4a530544f9af26bee2c5b
|
|
| MD5 |
6aa8d5044a87325b91c688adcc40ae08
|
|
| BLAKE2b-256 |
fb81092e4ebcf46994cd4aa174ffcdca8e367ec062555391a8ca87f9e0f5a500
|
Provenance
The following attestation bundles were made for qsp_mcp-0.2.2.tar.gz:
Publisher:
publish.yml on qso-graph/qsp-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qsp_mcp-0.2.2.tar.gz -
Subject digest:
25f88dbdaac8fb41480804ba16e5f752e0263bbb2ab4a530544f9af26bee2c5b - Sigstore transparency entry: 1095949015
- Sigstore integration time:
-
Permalink:
qso-graph/qsp-mcp@1328cdef38510e2502d9655be111b52b6f0d6abc -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/qso-graph
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1328cdef38510e2502d9655be111b52b6f0d6abc -
Trigger Event:
push
-
Statement type:
File details
Details for the file qsp_mcp-0.2.2-py3-none-any.whl.
File metadata
- Download URL: qsp_mcp-0.2.2-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
484203c02bf15db9faab68805a8d7e9cc0022e5834ee2b6d66cd996769b1043f
|
|
| MD5 |
9ffce3bd6867a8725db81d7d5f82cb38
|
|
| BLAKE2b-256 |
bb07e8c8e23e5f78cfe1a3d4a494286b151d860fec4db9fb895b3be997d4b97d
|
Provenance
The following attestation bundles were made for qsp_mcp-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on qso-graph/qsp-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qsp_mcp-0.2.2-py3-none-any.whl -
Subject digest:
484203c02bf15db9faab68805a8d7e9cc0022e5834ee2b6d66cd996769b1043f - Sigstore transparency entry: 1095949016
- Sigstore integration time:
-
Permalink:
qso-graph/qsp-mcp@1328cdef38510e2502d9655be111b52b6f0d6abc -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/qso-graph
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1328cdef38510e2502d9655be111b52b6f0d6abc -
Trigger Event:
push
-
Statement type: