gr-mcp/pyproject.toml
Ryan Malloy 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

53 lines
1.2 KiB
TOML

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "gnuradio-mcp"
version = "0.2.0"
description = "MCP server for GNU Radio — build, validate, run, and export flowgraphs programmatically."
readme = "README.md"
license = "MIT"
requires-python = ">=3.14"
authors = [
{name = "Ryan Malloy", email = "ryan@supported.systems"},
]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering",
"Topic :: Communications :: Ham Radio",
]
dependencies = [
"pydantic>=2.12",
"fastmcp>=3.0.0b1",
# for gnuradio
"mako>=1.3",
"pyyaml>=6.0",
]
[project.optional-dependencies]
runtime = [
"docker>=7.0",
]
dev = [
"pytest>=9.0",
"pytest-asyncio>=1.3",
"pre-commit>=4.5",
]
[project.urls]
Homepage = "https://github.com/rsp2k/gr-mcp"
Repository = "https://github.com/rsp2k/gr-mcp"
Issues = "https://github.com/rsp2k/gr-mcp/issues"
[project.scripts]
gnuradio-mcp = "gnuradio_mcp.server:main"
[tool.pytest.ini_options]
# Tell pytest where to find the package
pythonpath = ["src", "."]
asyncio_mode = "auto"