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.2.0.tar.gz (24.8 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.2.0-py3-none-any.whl (25.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: qsp_mcp-0.2.0.tar.gz
  • Upload date:
  • Size: 24.8 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.2.0.tar.gz
Algorithm Hash digest
SHA256 b2914385fb03419f8f5393d632a2f3d2d60bb70baface293fdf0b3e049f3b173
MD5 c7e9fb0baf8d4a28606a3ef1898659cf
BLAKE2b-256 0cff8bc7993d26275c78a1a1f59309c744cad9b872be22768cfe11ae5e222261

See more details on using hashes here.

Provenance

The following attestation bundles were made for qsp_mcp-0.2.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.2.0-py3-none-any.whl.

File metadata

  • Download URL: qsp_mcp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 25.9 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2cf6a346e78df751a85e77cb042c67a36675849e6659a4463cea7bd6cfc0ded
MD5 0543f6eba0fcdc2d038e7422273bd59a
BLAKE2b-256 2c8cf5bd54ed93bfc1a64c694f9602c48c1e0787a57d1d14ddffe94d39edce8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for qsp_mcp-0.2.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