MCP server for CodeTrellis — monitors AI coding agents and visualizes their impact on codebase architecture in real-time. Provides tools for architecture queries, plan management, channel coordination, budget tracking, drift detection, and external contributor workflows.
CodeTrellis defines 30 tools with consistent naming (verb_noun pattern) and descriptions. However, critical gaps exist: most tools lack visible input schemas in the provided source, parameter descriptions are often generic, and output schemas are undocumented. Audio tools (start_audio_capture, push_audio_chunk) have WRITE risk but no confirmation/dry-run patterns. Architecture and drift tools are well-named but descriptions lack WHEN-to-use guidance. Error handling is absent from all tool definitions. The server follows basic structure but falls short of production-grade quality expected for agent composition.
Accept contributed items from a branch's staging area into a plan's manifest. Moves items from contributions/ into the plan, cleans up the staging area. Called after reviewing a contributor's PR.
Query the codebase dependency graph. Returns all file-to-file import edges, showing how the codebase is connected.
Whether more work should start on this plan. Call this before claiming an item, the same way check_freeze is called. Returns allowed=false once the plan is past its ceiling, with a reason to relay to the human. Advisory: nothing here can stop you, so respecting it is the point.
Check if proposed imports would violate architectural boundaries (circular dependencies, layer violations)
Run deviation detection for a plan — compares plan expectations against actual codebase state. Also detects unexpected files (changed since the baseline snapshot but not in any plan item's fileSpecs).
Output schemas undocumented for all 30 tools. LLMs cannot plan downstream calls or extract required fields without knowing response structure.
WRITE-risk tools (start_audio_capture, push_audio_chunk, set_budget, post_channel_event, promote_to_contribution, accept_contributions, prepare_contributor_branch, reconcile) lack confirmation/dry-run patterns. Agents cannot preview consequences before executing irreversible operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Mark a channel event as dismissed. Used when an event no longer needs a response (e.g., the underlying issue went away, or the asker abandoned the line of inquiry). The event stays in the history; it just stops appearing in "what needs my attention" lists.
Get the most recent audio from the capture buffer. Returns base64-encoded WebM/Opus audio that multi-modal models can process directly. Use this when the user invokes you during a meeting or discussion — the audio provides conversation context without transcription.
Check the audio capture state — whether capture is active, how much audio is buffered, and when capture started. Use this before get_audio_context to verify audio is available.
Time and cost for a plan: what has actually been spent, a forecast to completion, and a per-agent split. Time is measured for every agent; cost only where the agent reports a model we have prices for — an unknown cost is reported as null, never as zero. Estimates and overruns are reported only when a plan carries estimates, and nothing records them yet, so today they are always absent — see the note on the response.
Fetch a single ProposedChange (by id from list_proposed_changes) with its current drift status freshly computed against the live database.
Aggregate counts for a plan's proposed changes — total + breakdown by drift status, kind, and operation. Use this to get a one-line "12/18 satisfied" picture without pulling every change row.
Return a channel event thread — the root event plus all descendant responses, ordered chronologically. Use this to read the full back-and-forth around a stuck / need-decision conversation.
Get what a file imports and what imports it. Returns incoming and outgoing dependency edges.
Get all deviations between a plan and the actual codebase state. Shows where reality diverges from the plan.
Check if you are still following the plan. Compares the baseline snapshot (captured at plan approval) against the current live state. Returns what has changed, what is on track, and what has drifted. Also surfaces comment activity since `since_ms` (or since the baseline snapshot when omitted) so a returning agent can see what humans / other agents have said while it was away.
List channel events for a plan, newest-first. Filter by event type, status, or scoped item. Use this to see "what needs my attention" (status=open) or to review the team-coordination history.
List items currently staged in the contributions area for the current branch. Shows what will be included in the next PR.
Cross-system edges — non-import couplings between files inferred from runtime patterns. Today: HTTP fetches in TS/JS matched against FastAPI/Flask routes in Python (more protocols coming: SQL refs, subprocess, env-configured URLs, OpenAPI contracts). Use this to see how the frontend talks to the backend even when no import edges exist.
Granular CRUD feed projected from a plan's Actions: every affected file, symbol_spec, new_connection, and removed_connection becomes one ProposedChange row with operation (add/modify/remove/move), kind (file/symbol/connection), target, and a drift status (planned / in_progress / satisfied / missing / unexpected). Use this instead of walking item fields by hand to ask "what's left in this plan?".
Post a channel event to a plan. Six event types in the peer-to-peer team-coordination vocabulary: stuck (failing repeatedly), need-decision (genuine choice can't make alone), need-context (missing knowledge), handing-off (another actor should take over; here's what was tried), steer (direction in response), weigh-in (here's my thinking — what do others see?). Both humans and agents can post any of these. Events are durable; when the plan is shared (linked to disk), the event is exported to .codetrellis/plans/<slug>/channels/<uid>.yaml and travels via git.
Create a filtered git branch containing only the plan content the team wants to share with an external contributor. Omits local items, team-only attachments, and private comments. The contributor can fork from this branch.
Promote a local item to the contributions staging area (`.codetrellis/contributions/<branch>/`). The staged content travels as part of the contributor's PR for team review.
Push a chunk of audio data into the capture buffer. Used internally by the frontend — agents should use get_audio_context to read audio.
Resolve deviations from a plan. Accept (update plan to match), revert (flag for review), or ignore.
Mark a channel event as resolved. Typically called after a stuck has been steered through, or a need-decision has been answered. Sets status to "resolved" and exports the change to disk.
Check which attachment references can be resolved locally. Returns "resolved" or "external" for each, enabling placeholder display for team-only content that external contributors cannot access.
Search for functions, classes, interfaces, and other symbols across the codebase by name
Set or clear a plan budget. Either dimension may be set independently; pass null to clear one. Crossing 80% raises a need-decision channel event (once), and past 100% check_budget returns allowed=false. The ceiling is advisory — it cannot stop an agent, it tells one to stop.
Start capturing audio from the user's microphone. Audio streams into a rolling buffer (default 120 seconds). Use get_audio_context to retrieve the buffered audio.
Stop audio capture. The buffer is preserved and can still be read via get_audio_context until the next start.
No error handling guidance in any tool description. Tools do not indicate which errors are retryable, user-fixable, or fatal. Agents cannot self-correct on failure.
Parameter descriptions are generic or missing context. E.g., 'query' in search_symbols lacks guidance on substring matching behavior, case sensitivity, or max results. Descriptions should state WHAT, WHEN, and HOW.
Pagination parameters (limit, offset) present in list_channel_events but absent from list_contributions, list_proposed_changes, and list_cross_system_edges. Inconsistent pagination support risks context window exhaustion.