MCP server exposing the Elvanto church management API as tools
15 tools with consistent naming (verb_noun pattern: get_*, search_*) and basic schemas. All tools are READ_ONLY, reducing risk. However, descriptions are minimal (10-30 chars), parameter descriptions lack detail, and output schemas are undocumented. No error handling guidance. Tool descriptions fail to explain WHEN to use each tool vs. similar ones (e.g., people_get vs people_search), and lack dependency hints. Parameters like 'fields' (array) and 'search' (object) lack type constraints and usage examples. No pagination guidance despite page/page_size params. Schemas present but sparse, missing min/max bounds, enum constraints, and output structure documentation.
Get all calendar events
Get a specific calendar by ID
Get all calendars
Get all custom fields
Get a specific group by ID
Get all groups
Get a specific person by ID
Get all people in the database
Tool descriptions are 10-30 characters, below the 50-200 char baseline for LLM-optimized descriptions. Descriptions like 'Get all people in the database' lack context for tool selection and do not explain when to use get_all vs search vs get.
Parameter descriptions are missing or trivial. 'fields' (array) and 'search' (object) parameters lack type constraints, usage examples, and guidance on valid values. LLMs cannot infer what fields are valid or how to structure the search object.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | 2026-07-28+ | v2 |
Search for people
Get a specific service by ID
Get all services
Get a specific song by ID
Get all songs
Get a specific transaction by ID
Get all financial transactions
Output schemas are not documented. Tools return paginated results but the response structure (total count, next_cursor, items array) is not specified. LLMs cannot plan downstream calls or extract required fields.
No error handling guidance. Tools do not document what errors can occur (e.g., invalid ID, permission denied, API rate limit) or how to recover. LLMs receive raw errors with no actionable next steps.
Pagination parameters (page, page_size) lack bounds and defaults. No documentation of max page_size, default page_size, or total record count. Code shows DEFAULT_PAGE_SIZE=25 and DEFAULT_MAX_RESPONSE_CHARS=100_000 but these are not exposed in tool descriptions.