A .NET MCP server for managing a library system with books, users, and rentals
Server has 4 tools with explicit schemas and descriptions. All tools have names starting with action verbs (listar, cadastrar, locar) and descriptions present. However, descriptions are minimal (10-60 chars), parameter descriptions lack depth, and no output schemas are documented. Parameter types are defined but lack constraints (enums, ranges, patterns). No error handling guidance, no idempotency hints, and no security/permission documentation. Schemas are present but sparse, missing examples of output structure, pagination guidance, and field-level documentation. This is a functional but minimal implementation typical of early-stage MCP servers.
Cadastra um novo livro no acervo da biblioteca
Cadastra um novo usuário na biblioteca
Lista todos os livros disponíveis para locação na biblioteca
Realiza a locação de um livro para um usuário
No output schemas documented. Tools return McpResponse with generic Data field, but LLMs cannot infer what fields to expect (e.g., does listar_livros_disponiveis return {id, titulo, autor, quantidade}?). This forces agents to guess downstream field names and breaks tool chaining.
Descriptions are too brief (10-60 chars, baseline 194 chars). 'Lista todos os livros disponíveis para locação na biblioteca' lacks context on when to call it, what structure it returns, and whether it supports pagination. LLMs cannot reliably select this tool over similar ones.
Parameter descriptions lack constraints. 'Quantidade de exemplares' has no min/max bounds; 'Dias de empréstimo' has no range (1-365?). LLMs will pass absurd values (0, 999999) that break business logic. No enum constraints on status-like fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No error handling guidance. McpResponse returns {Success: false, Error: message} but does not categorize errors as retryable, user-fixable, or fatal. An LLM receiving 'CPF already registered' has no guidance on whether to retry, ask the user, or try a different approach.
No idempotency or confirmation hints. cadastrar_livro and cadastrar_usuario are write operations that create records, but descriptions do not warn agents about duplicate-prevention or offer dry-run/confirmation patterns. Agents may retry and create duplicates.