Skip to main content

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 — 71+ tools across 12 servers — 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-writes opt-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

qsp_mcp-0.1.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qsp_mcp-0.1.0-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file qsp_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: qsp_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qsp_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d815f539d6c2a30b432facbbdacf55b6af8aed534e3ef6474c17b7084f3d135c
MD5 d054cb64a0da543745570b17a83af668
BLAKE2b-256 85568eb0a743a1e74a2a5b312962f2426a12f234430099d8f735c3e5a0b57685

See more details on using hashes here.

Provenance

The following attestation bundles were made for qsp_mcp-0.1.0.tar.gz:

Publisher: publish.yml on qso-graph/qsp-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qsp_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: qsp_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qsp_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96bdc80d54d12840de80bb0cf46bfc58cc851afda96063a4f2f63c0f2e222fbd
MD5 20fbd7bb33eeddb1cd3524e263b7ac70
BLAKE2b-256 8f2ec49a1c291038ddd61090112196bdd5cb837cc916709d1bf985a74779a72d

See more details on using hashes here.

Provenance

The following attestation bundles were made for qsp_mcp-0.1.0-py3-none-any.whl:

Publisher: publish.yml on qso-graph/qsp-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page