14 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
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
27f651307e fix: remove stale lru_cache from FlowGraphMiddleware.get_block
The lru_cache on get_block() caused three cache coherence bugs:

1. Removed blocks remained accessible — set_block_params would
   modify a detached block object that no longer exists in the
   flowgraph, so save_flowgraph would serialize stale state.

2. Re-created blocks with the same auto-generated name would
   return the cached (removed) block instead of the new one.

3. Renamed blocks (via set_block_params id=...) left phantom
   cache entries under the old name.

Fix: always look up blocks from the live flowgraph. Block lookup
is a linear scan of typically <20 blocks — no cache needed.
Raises KeyError instead of StopIteration for missing blocks.
2026-01-28 21:37:04 -07:00
Yoel Bassin
425b308556 main - feat: Imlement basic MCP server 2025-04-27 22:16:58 +03:00
Yoel Bassin
f5a0629da7 main - fix: Fix using already populated GRC file and connection of hidden ports 2025-04-27 20:51:48 +03:00
Yoel Bassin
6d6e4d0fc2 main - fix: Change BlockModel key to name 2025-04-27 17:16:13 +03:00
Yoel Bassin
ac4105b210 main - feat: Create new BlockTypeModel and allow named ports 2025-04-27 16:58:50 +03:00
Yoel Bassin
42484d6c7d main - feat: Implement gnuradio element validation and errors 2025-04-27 12:33:29 +03:00
Yoel Bassin
5485413efd main - feat: Implement block connection 2025-04-27 00:02:19 +03:00
Yoel Bassin
73bf514fc1 main - feat: Implement default block naming 2025-04-26 22:05:06 +03:00
Yoel Bassin
185e68f809 main - feat: Add pre-commit and fix all files 2025-04-26 21:52:32 +03:00
Yoel Bassin
37cb51f056 main - fiat: Implement BlockMiddleware and reorganize tests 2025-04-26 21:25:28 +03:00
Yoel Bassin
c5b4be6950 main - feat: Implement flowgraph block removal 2025-04-26 16:40:39 +03:00
Yoel Bassin
a4a3d124bd main - feat: Implement basic flowgraph 2025-04-26 16:35:43 +03:00