foretop charter — MCP capability drift scanner
Review every MCP capability before it expands.
Charter turns committed MCP client configuration into a deterministic lock file and shows when a pull request adds a server or expands access.
Available now · Apache-2.0
What it checks
A bounded scanner with explicit evidence and an honest unknown state.
Inventory committed MCP servers
Read project-level Claude Code and Cursor configuration, recording transports, commands, arguments, and endpoints.
Record references, never values
Capture the names and paths of credential-referencing environment variables and headers without opening the secrets behind them.
Enumerate only when asked
Static parsing is the default. Optional local stdio enumeration launches trusted servers and classifies the tools they expose.
Use it locally or as a CI gate
Start report-only
Add --base origin/main to fail when a server or capability expands relative to the merge base. Without --enumerate, the comparison intentionally detects server-level drift only.
One result, several renderers
Choose table, Markdown, JSON, SARIF, annotations, and triage JSON without changing what the scan concluded.
Annotate the pull request
The public repository includes a composite GitHub Action that emits annotations, maintains one summary comment, and preserves the CLI's exit code.
Trust boundary
What leaves the machine?
Static scans are local and never read secret values. --enumerate is opt-in because it launches configured third-party stdio servers; remote servers are recorded but not contacted.
What is outside today's boundary?
- Only project-level Claude Code and Cursor MCP configuration files are scanned.
- Live enumeration currently supports local stdio servers, not remote transports.
- Capability-level drift needs comparable enumeration data on both revisions.
Run it on yours
Install the published package, scan the current directory, and inspect every result before deciding whether to gate CI.