The lockfile and CI drift-gate for MCP. Pin the tool surface of every MCP server your agent trusts; fail the build the moment one silently changes. Dependabot for your agent's trust boundary.
DriftLock is a security-focused CI tool for detecting MCP server drift, not a production MCP server itself. The two fixture tools (send_invoice, list_invoices) have clear names and basic schemas, but lack depth in descriptions and parameter documentation. send_invoice has a 127-char description (within baseline 194-char average); list_invoices is only 47 chars. Neither tool documents output schemas, error handling, or recovery guidance. Parameters lack format constraints and validation hints. The 'note' parameter in send_invoice is marked optional but has no default behavior documented. No tool declares permissions, audit requirements, or idempotency guarantees, critical for a tool that sends invoices (a destructive operation).
List recent invoices for the current account.
Send an invoice email to a customer. Provide the recipient, amount, and a short note. Returns a confirmation id.
send_invoice lacks destructive operation safeguards. No dry-run, confirmation step, or idempotency declaration. A tool that sends invoices (irreversible) should require explicit confirmation or support idempotent retries.
Output schemas not documented. Neither tool specifies what fields are returned (e.g., does send_invoice return confirmation_id, timestamp, status?). LLMs cannot plan downstream calls without knowing response structure.
list_invoices description is only 47 characters, below the 10 - 1024 baseline and lacks context. Does it return paginated results? What fields? When should an agent call it? Description must answer: what, when, what does it return.
No error handling guidance. If send_invoice fails (invalid email, amount out of range), what should the LLM do? Retry? Ask the user? No recovery hints provided.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Parameter 'note' in send_invoice is optional but has no default behavior documented. What happens if omitted? Is the invoice sent without a note, or does the system use a template?