Portable AI coding-agent toolkit — MCP server with indexed code retrieval, session management, and persistent memory
AIDOCS MCP provides 10 tools with explicit schemas and descriptions. Naming follows verb_noun convention (verify_*, ai_*). Descriptions are detailed (100-400 chars) and explain use cases well. However, critical gaps exist: (1) Input schemas lack enum constraints for constrained parameters (e.g., ai_events 'action_kind', 'event_kind' are free-form strings); (2) Output schemas are entirely undocumented, no return type specifications visible in tool definitions; (3) Error handling descriptions are absent, tools do not explain failure modes or recovery paths; (4) Parameter descriptions lack format/range constraints (e.g., 'limit' accepts 1-500 but this is buried in prose, not formalized); (5) Batch tools (ai_batch_str_replace, ai_batch_edit) lack per-item error reporting structure. Edit tools are well-composed (separate concerns: str_replace, anchor_replace, edit_lines, insert_lines, create, replace) but lack idempotency guarantees or dry-run support for destructive operations.
Replace content between anchor markers in a file. Part of the edit tool family with file-level read evidence tracking.
Perform multiple line-based edits in a single batch operation. Part of the edit tool family with file-level read evidence tracking.
Perform multiple string replacements in a single batch operation. Part of the edit tool family with file-level read evidence tracking.
Create a new file with specified content. Part of the edit tool family with file-level read evidence tracking.
Edit a range of lines in a file. Part of the edit tool family with file-level read evidence tracking.
Return a lane worker's tool-call timeline. Subagent events don't carry worker_id in payload (workers don't know their own registry id at tool-call time), so resolving by worker_id requires a JOIN against session_lane_agents to translate worker_id → (session_id, lane_id, started_at, completed_at) and then filter events by principal_type='subagent' + session + time window. Filter shapes: worker_id="w-..." → resolves identity via registry; lane_id + session_id → all subagent events for that lane (any worker, any run). tail (Phoenix 2026-05-09): when True, returns the LAST limit events instead of the first. Output is still chronological (oldest→newest within the returned slice) — only the slicing differs. Use for live-monitoring an in-flight worker; default False preserves the from-start scan for replaying a run. Returns ordered (observed_at, capability_name, action_kind, event_kind, status) — enough to spot refused calls (audit row without a matching tool_call_started/completed pair).
Output schemas completely undocumented. No tool specifies what fields are returned, their types, or structure. LLMs cannot plan downstream calls or extract required data (e.g., does verify_audit_chain return {verified: bool, first_broken_link: string}?). Violates pattern:tool requirement that output be documented.
Constrained parameters lack enum declarations. ai_events accepts 'action_kind' and 'event_kind' as free-form strings with no enum constraint. Descriptions mention valid values in prose ('tool_call_started/completed') but JSON Schema has no enum field. LLMs will hallucinate invalid values. Violates pattern:constrained-input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Insert lines at a specific location in a file. Part of the edit tool family with file-level read evidence tracking.
Replace entire file content. Part of the edit tool family with file-level read evidence tracking.
Replace a substring in a file with new content. Part of the edit tool family with file-level read evidence tracking.
Walk a session's execution_events Merkle chain and report whether it's intact. Each event's prev_hash = sha256(previous row's content). Any retroactive edit or delete breaks the chain — this tool returns verified=False and identifies the first broken link with expected vs stored prev_hash. Use from dashboards / compliance reports / forensic triage. Not hot-path; O(n) in session event count.
Destructive edit tools (ai_str_replace, ai_replace, ai_batch_*) lack confirmation/dry-run support and do not document idempotency guarantees. No error handling guidance for partial failures (e.g., if ai_batch_str_replace fails on edit 3 of 5, what state is the file in?). Violates pattern:confirmation-request and pattern:error-classification.
Parameter descriptions lack format/range constraints. 'limit' parameter in ai_events states 'default 100, max 500' in prose but JSON Schema has no minimum/maximum fields. 'path' parameters have no validation rules (absolute vs relative? symlink traversal protection?). Violates pattern:tool-description and review:param-validation-rules.
Batch tools (ai_batch_str_replace, ai_batch_edit) do not document per-item success/failure structure. If one edit in a batch of 10 fails, does the tool return partial results with error details per item, or fail entirely? No guidance for LLM recovery. Violates pattern:response-shaper.