MCP server for Gramps Web genealogy API
Strong foundation with 38 well-named tools following verb_noun convention (search, get, create, update, delete, merge). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas present with type definitions and parameter descriptions. However, output schemas are not documented in the visible code, LLMs cannot predict response structure. Update tools use generic 'data' object parameter lacking field-level guidance. Error handling descriptions are minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE, IRREVERSIBLE). Merge operations lack confirmation/dry-run patterns for irreversible actions.
Create a new citation
Create a new event
Create a new family linking father and/or mother by their handles
Create a new media object
Create a new note
Create a new person. Provide first_name and/or surname.
Create a new place
Update tools (10 total) use generic 'data' object parameter with no field-level schema guidance. LLMs cannot predict which fields are valid or required without fetching the full object first. Violates pattern:tool-description and pattern:constrained-input.
No output schemas documented in visible code. LLMs cannot predict response structure (fields, types, pagination). Violates pattern:tool and pattern:paginated-result. Search and get_object return paginated results but no total_count or next_cursor documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | <=2025-11-25 | v2 |
Create a new repository
Create a new source
Create a new tag
Delete a genealogy object by handle
Get the time span between two events (e.g. birth and death)
Get chronological event timeline for a family
Get genealogy objects. `object_type` is always required (person, family, event, place, note, citation, source, media, repository, tag). Provide `handle` for a single record, or `gramps_id` / `oql` / `page` / `pagesize` to browse a collection. Use `oql` for structured filtering (call get_oql_reference for syntax). For full-text search use the `search` tool instead.
Get the OQL (Object Query Language) reference: operators, helper methods, and query examples by object type. Call this before writing an oql filter.
Get chronological event timeline for a person
Get the most direct relationship path between two people
Get tree-level statistics and metadata
Merge two citation records
Merge two event records
Merge two family records
Merge two media records
Merge two note records
Merge two person records
Merge two place records
Merge two repository records
Merge two source records
Full-text search across the genealogy database. Set object_type to narrow results to a specific type, or omit to search across all types. Use page/pagesize to paginate large result sets (default page=1, pagesize=20).
Update a citation record
Update an event record
Update a family record
Update a media record
Update a note record
Update a person record
Update a place record
Update a repository record
Update a source record
Update a tag record
Merge operations (7 total) are irreversible but lack confirmation/dry-run pattern. Agents can accidentally merge wrong records with no undo. Violates pattern:confirmation-request.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification in source (READ_ONLY, WRITE, DESTRUCTIVE, IRREVERSIBLE). LLMs cannot infer safety properties. Violates current MCP spec (2026-07-28) tool annotation requirement.
Error handling descriptions are minimal or absent. Tools do not guide LLMs on recovery (e.g., 'handle not found, try search() first'). Violates pattern:recovery-guide.