gr-mcp/main.py
Ryan Malloy 84db5a9000 fix: use local gnuradio-runtime image for Docker testing
- Change test_block_in_docker to use gnuradio-runtime:latest instead of
  non-existent gnuradio/gnuradio:latest
- Add auto_enable option to McpBlockDevProvider to register block dev
  tools at startup (avoids MCP reconnect dance)
- Support GR_MCP_BLOCK_DEV=1 env var for auto-enabling
2026-02-11 01:17:49 -07:00

52 lines
1.5 KiB
Python

from __future__ import annotations
import logging
import os
from fastmcp import FastMCP
from gnuradio_mcp.middlewares.platform import PlatformMiddleware
from gnuradio_mcp.providers.mcp import McpPlatformProvider
from gnuradio_mcp.providers.mcp_block_dev import McpBlockDevProvider
from gnuradio_mcp.providers.mcp_runtime import McpRuntimeProvider
logger = logging.getLogger(__name__)
try:
from gnuradio import gr
from gnuradio.grc.core.platform import Platform
except ImportError:
raise Exception("Cannot find GNU Radio!") from None
platform = Platform(
version=gr.version(),
version_parts=(gr.major_version(), gr.api_version(), gr.minor_version()),
prefs=gr.prefs(),
)
platform.build_library()
app: FastMCP = FastMCP("GNU Radio MCP", instructions="Create GNU Radio flowgraphs")
pmw = PlatformMiddleware(platform)
# Auto-discover OOT modules from common install locations
oot_candidates = [
"/usr/local/share/gnuradio/grc/blocks",
os.path.expanduser("~/.local/share/gnuradio/grc/blocks"),
]
for path in oot_candidates:
if os.path.isdir(path):
try:
result = pmw.add_block_path(path)
if result.blocks_added > 0:
logger.info(f"OOT: +{result.blocks_added} blocks from {path}")
except Exception:
pass
McpPlatformProvider.from_platform_middleware(app, pmw)
McpRuntimeProvider.create(app)
McpBlockDevProvider.create(app, auto_enable=True) # Tools always available
if __name__ == "__main__":
app.run()