2.7 KiB
Collapse to CLI: remove MCP + Agno, make scanning agent-invocable
Why
The MCP server is a thin httpx proxy over the FastAPI server — every MCP tool
just POSTs to :8718. So the "run MCP" path actually requires two processes
(MCP stdio + web server) plus the auth/security surface of an exposed server.
Coding agents (Claude, Codex) can call a local CLI directly with none of that.
Goal: one stateless CLI command an agent can invoke and parse. Delete the rest.
Scope
MCP and Agno are internal/experimental — never a public contract. Hard-delete in one PR, bump version. No deprecation shims.
Phase 1 — Delete Agno (dead code, zero risk)
Imported by nothing, not a declared dependency, has undefined-variable bugs.
- Remove
agentic_security/agents/(onlyoperator_agno.py) - Remove Agno references from
docs/mcp_agno_integration.md
Phase 2 — Delete MCP
Core scanning (probe_actor/, lib.py) depends on none of this.
- Remove
agentic_security/mcp/(main.py,client.py,__init__.py) - Remove
examples/mcp_client_usage.py - Remove
tests/unit/test_mcp.py - Remove
docs/mcp_client_usage.md,docs/mcp_agno_integration.md - Drop
mcp = "^1.22.0"frompyproject.toml - Strip MCP sections from
Readme.md
Phase 3 — Make the CLI agent-invocable (the real work)
Today scanning is config-file-driven: init writes agesec.toml, then ci
reads it. An agent has to do two steps with hidden disk state. Replace with a
direct one-shot command.
Target UX (to be finalized in design):
agentic_security scan --spec <file|->— stateless, noagesec.tomlrequired; spec from arg, file, or stdin- Streams machine-readable results to stdout (JSON lines), logs to stderr
- Non-zero exit code on failures found (CI-friendly)
- Decide fate of existing
ci(config-driven) vs newscan: keepcifor config workflows, addscanfor ad-hoc/agent use
Open design questions:
- Output format: JSON lines vs single JSON doc vs both behind a flag
- Does
scanneed the FastAPIappat all, or callfuzzer.scan_router()directly vialib.SecurityScanner(preferred — fully standalone) - What's the minimal spec an agent must pass (llmSpec only? + datasets?)
Phase 4 — Server stays, but secondary
Keep agentic_security server (web UI) — it's the interactive surface. It is
no longer the integration path for agents. Default bind is now 127.0.0.1.
Success criteria
- An agent can run a full scan with a single CLI command, no server, no config file on disk, parse results from stdout.
grep -ri "mcp\|agno" agentic_security/returns nothing in source.- Existing fuzzer/probe tests still pass.