A contract linter for MCP servers — catch breaking tool-schema changes before they ship.
Covenant is a contract linter/proxy for MCP servers, not itself a production tool server. The 4 example tools (get_account, get_weather, convert_currency, get_transactions) are minimal demonstrations in examples/mcp_server.py. All have basic schemas with required parameters and descriptions (10-50 chars), but lack depth: no output schemas documented, no error handling guidance, no parameter constraints (enums, ranges), and descriptions are generic. Naming follows verb_noun convention (good). Parameters are typed but underdescribed. No tool annotations. The server's actual value is as a contract enforcement proxy, not as a tool provider, the example tools are stubs.
Convert a USD amount to another currency.
Look up a bank account and its current balance.
List recent transactions for an account.
Return current weather for a city.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields without knowing response structure.
Parameter descriptions are minimal (10-50 chars) and lack actionable detail. 'The account identifier' does not explain format, constraints, or examples. Descriptions should be 50-200 chars with format/range guidance.
No error handling guidance. Tools do not document what happens on invalid input (e.g. non-existent account_id, invalid currency code). No recovery hints for LLMs.
convert_currency has a default parameter (to_currency='EUR') but no description of what happens if omitted. Defaults must be explicit in descriptions to prevent silent misuse.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No parameter constraints (enums, ranges, patterns). 'city' in get_weather accepts any string; 'to_currency' in convert_currency has no enum of valid codes. Enums prevent hallucinated values.