MCP JSON-RPC 2.0 server over stdio transport for the Agent Covenant Protocol (ACP). Provides tools for token management, covenant lifecycle, settlement, and member administration.
acp-server defines 14 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (propose_passage, approve_draft, get_token_balance). Descriptions are present (avg ~120 chars) and explain state transitions and permissions. However, several critical gaps reduce quality: (1) descriptions lack actionable recovery guidance for errors; (2) parameter descriptions are minimal (avg ~40 chars) and omit constraints like ranges/formats; (3) output schemas are not documented, callers cannot see what fields to expect; (4) no idempotency hints despite write operations; (5) token/credential parameters exposed in schemas (session_token, owner_token, agent_id) should be server-injected. Tools like approve_draft and reject_draft have complex conditional logic (log_id OR draft_id) but dependencies are not clearly documented. Query tools (get_token_balance, list_members) lack pagination parameters despite potentially large result sets.
Activate a covenant member whose status is 'pending'. Owner-only.
Approve a pending draft and award tokens to the proposer. Owner-only. Requires log_id or draft_id plus word_count.
Set the AntiGamingPolicy for a covenant (ACR-20 Part 4). Phase 4.1 enforces rate_limit_per_hour only; other fields are accepted and reserved. Owner-only; allowed while DRAFT, OPEN, or ACTIVE.
Store token allocation rules on a DRAFT covenant. Owner-only.
Confirm a pending settlement output and transition covenant to SETTLED. Owner-only.
Trigger settlement output generation for a LOCKED or ACTIVE covenant. Owner-only.
Credentials exposed as parameters: session_token, owner_token, agent_id, covenant_id appear in every tool schema. These should be server-injected via environment variables or request context, not passed by the agent. Tokens in parameters leak into logs and traces.
Output schemas not documented. Tools return structured data but callers cannot see field names, types, or required fields. E.g., get_token_balance returns 'confirmed, pending, rejected token totals' but schema is absent. LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Return the ACR-20 Part 4 Layer 5 concentration report: threshold, total confirmed tokens, per-agent share, and the subset exceeding concentration_warn_pct. Owner-only.
Return confirmed, pending, and rejected token totals for an agent. Requires session token.
Return token ledger entries for an agent (ACR-20 Part 7). Optional from/to (ISO 8601) and status filter. Requires session token.
Mark the calling agent as having left the covenant. Confirmed token entries are preserved. Owner cannot leave.
Return all covenant members with their token totals. Uses X-Owner-Token auth.
Propose a draft passage for token consideration. Creates a pending token entry that requires owner approval via approve_draft.
Reject a pending covenant member. Owner-only. Uses X-Owner-Token auth.
Reverse a token ledger entry and refund budget cost. Owner-only. Uses X-Owner-Token auth.
Parameter descriptions lack constraints. E.g., word_count is 'required, must be > 0' but no maximum. acceptance_ratio is '0.0 - 1.0' but no description of what happens at boundaries. rate_limit_per_hour is '0 = unlimited' but no guidance on reasonable values. LLMs cannot validate inputs without explicit ranges.
Conditional parameter logic undocumented. approve_draft requires 'one of log_id or draft_id' but this mutual-exclusivity constraint is not stated in parameter descriptions. reject_draft requires log_id but no guidance on how to obtain it. LLMs will pass both or neither, causing failures.
Query tools lack pagination. list_members and get_token_history may return unbounded result sets. No limit, offset, or cursor parameters. Large covenants could return thousands of entries, exhausting context windows. Descriptions do not mention result limits.