5 Commits

Author SHA1 Message Date
212832e7e4 feat: expose protocol analysis, OOT export tools; harden for release
Wire up protocol analysis (parse_protocol_spec, generate_decoder_chain,
get_missing_oot_modules), signal analysis (analyze_iq_file), and OOT
export (generate_oot_skeleton, export_block_to_oot, export_from_flowgraph)
as MCP tools with integration tests.

Security fixes from Hamilton review:
- Remove `from __future__ import annotations` from tool registration
  files (breaks FastMCP schema generation)
- Add blocklist guard to evaluate_expression (was unsandboxed eval)
- Replace string interpolation with base64 encoding in Docker test
  harness (prevents code injection)
- Add try/finally cleanup for temp files and Docker containers
- Replace assert with proper ValueError in flowgraph block creation
- Log OOT auto-discovery failures instead of swallowing silently

Packaging:
- Move entry point to src/gnuradio_mcp/server.py with script entry
  point (uv run gnuradio-mcp)
- Add PyPI metadata (authors, license, classifiers, urls)
- Add MIT LICENSE file
- Rewrite README for current feature set (80+ tools)
- Document single-session limitation
2026-02-20 13:17:11 -07:00
dca4e80857 feat: add incremental OOT block path management and auto-discovery
Add add_block_path() and get_block_paths() MCP tools for incremental
OOT module loading with BlockPathsModel responses. On startup, auto-scan
/usr/local/share and ~/.local/share for OOT blocks so modules like
gr-lora_sdr are available without manual configuration.
2026-01-30 18:02:27 -07:00
f3efb36435 feat: add gap analysis tools, OOT block loading, and configurable Docker image
Source changes spanning three features:

- Gap analysis: 12 new MCP tools (generate_code, load_flowgraph,
  search_blocks, get_block_categories, flowgraph options, embedded
  Python blocks, expression evaluation, block bypass, export/import)
- OOT support: load_oot_blocks tool + auto-discovery of paths like
  /usr/local/share/gnuradio/grc/blocks for third-party modules
- Docker: configurable image parameter on launch_flowgraph for
  running OOT-enabled containers (e.g. gnuradio-lora-runtime)

Resolves merge from feat/oot-block-paths into gap analysis work.
All 274 tests pass (204 unit + 70 integration).
2026-01-30 13:55:21 -07:00
e9ac115728 feat: add OOT (Out-of-Tree) block path loading support
Add load_oot_blocks MCP tool to dynamically load GNU Radio OOT modules.

Since GRC's Platform.build_library() clears all blocks on every call,
the implementation combines default block paths with OOT paths before
rebuilding. This allows loading custom blocks from:
- /usr/local/share/gnuradio/grc/blocks (locally-built)
- Custom user-specified directories

Implementation:
- PlatformMiddleware.load_oot_paths(): validates paths, combines with
  defaults, rebuilds library
- PlatformProvider.load_oot_blocks(): exposes method to MCP layer
- McpPlatformProvider: registers load_oot_blocks tool

Returns useful diagnostics: added_paths, invalid_paths, and block
counts before/after reload.
2026-01-29 18:35:16 -07:00
Yoel Bassin
425b308556 main - feat: Imlement basic MCP server 2025-04-27 22:16:58 +03:00