io.github.qso-graph/qsp-client
QSP — relay MCP tools to any OpenAI-compatible local LLM (llama.cpp, Ollama, vLLM)
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
qsp-clientclaude mcp add qsp-client -- uvx qsp-client==0.5.1
{
"mcpServers": {
"qsp-client": {
"command": "uvx",
"args": [
"qsp-client==0.5.1"
]
}
}
}
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
qsp-client
QSP — relay MCP tools to any OpenAI-compatible local LLM endpoint.
Named after the Q-signal QSP ("Will you relay?"), qsp-client relays tool calls between a local LLM and MCP servers. It is an MCP client: any model with function calling gains access to the qso-graph servers' tools, from local weights, not from cloud.
Formerly qsp-mcp. See Moving from qsp-mcp.
Install
uv tool install qsp-client # the qsp-client command, on your PATH
pip install qsp-client # or into your own environment
Quick Start
# Interactive mode
qsp-client --config ~/.config/qsp-client/config.json
# Single query
qsp-client --query "What bands are open from DN13 to JN48 right now?"
# Direct endpoint (no config file needed if no MCP servers configured)
qsp-client --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-client specific (ignored by Claude Desktop).
CLI Options
qsp-client [OPTIONS]
Options:
-c, --config PATH Config file path (default: ~/.config/qsp-client/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) |
ADIF tools
qsp-adif-convert converts an ADIF (.adi) log to JSON or NDJSON, with filters for band, mode,
callsign, date range and confirmed QSOs:
qsp-adif-convert -i mylog.adi -o mylog.json
qsp-adif-convert --help
It works on files on your own machine and opens no connection. It used to be adif-mcp convert;
adif-mcp is now only the MCP server.
Design
qsp-client 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-client 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-client or the LLM
- No subprocess, no shell execution, no eval
- All external connections HTTPS only (LAN endpoints exempted)
Moving from qsp-mcp
qsp-client is qsp-mcp, renamed: in the MCP world, -mcp names mark servers, and this is a client.
- Install the new name:
pip uninstall qsp-mcp && pip install qsp-client. - Your config keeps working:
~/.config/qsp-mcp/config.jsonand~/.qsp-mcp.jsonare still read, after the new~/.config/qsp-client/config.jsonand~/.qsp-client.json. - The
qsp-mcpcommand still works, and says it has moved. Useqsp-client.
License
GPL-3.0-or-later — see LICENSE.
Part of the qso-graph ecosystem
qso-graph.io — MCP servers for amateur radio.
Frequently asked questions
What is io.github.qso-graph/qsp-client?
QSP — relay MCP tools to any OpenAI-compatible local LLM (llama.cpp, Ollama, vLLM)
How do I install io.github.qso-graph/qsp-client?
It runs on your machine. In Claude Code: claude mcp add qsp-client -- uvx qsp-client==0.5.1. For other clients, paste the JSON configuration from this page into their MCP settings.
Does io.github.qso-graph/qsp-client need an API key?
Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.
Is io.github.qso-graph/qsp-client open source?
Yes. Its code is on GitHub under the GPL-3.0 license.
Who maintains io.github.qso-graph/qsp-client?
It is published by qso-graph. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.