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