Gramps MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GRAMPS_MCP_TOKENS | No | Comma-separated list of pre-issued JWTs aligned with GRAMPS_MCP_INSTANCES. | |
| GRAMPS_MCP_TIMEOUT | No | Read timeout in seconds (default: 60). | 60 |
| GRAMPS_MCP_INSECURE | No | Set to '1' to skip TLS verification for self-signed servers. | 0 |
| GRAMPS_MCP_PASSWORD | No | Password for logging into the Gramps Web instance(s). | |
| GRAMPS_MCP_USERNAME | No | Username for logging into the Gramps Web instance(s). | |
| GRAMPS_MCP_INSTANCES | Yes | Comma-separated list of base URLs for Gramps Web instances. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Health check. Read-only. Args: (none) Returns: dict: {"pong": true, "version": }. |
| get_instancesA | List the configured target instances. Read-only. Args: (none) Returns: dict: {"instances": [, ...], "scope": "<value of GRAMPS_MCP_INSTANCES, or 'auto-discovery' when unset>"}. |
| manage_personA | Create, read, update or delete Gramps Person records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Person handle (e.g. 'P0001'); required for get-one, update, delete. data: The Person object for create/update (required for those). query: Optional dict of extra query-string parameters (e.g. {"page": 1, "pagesize": 20, "keys": "handle,name", "strip": true, "profile": "all", "extend": "all", "locale": "en"}). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status": , "url": , "data": <object(s) | transaction>}. |
| manage_familyA | Create, read, update or delete Gramps Family records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Family handle (e.g. 'F0001'); required for get-one, update, delete. data: The Family object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_eventA | Create, read, update or delete Gramps Event records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Event handle; required for get-one, update, delete. data: The Event object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_placeA | Create, read, update or delete Gramps Place records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Place handle; required for get-one, update, delete. data: The Place object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_sourceA | Create, read, update or delete Gramps Source records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Source handle; required for get-one, update, delete. data: The Source object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_citationA | Create, read, update or delete Gramps Citation records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Citation handle; required for get-one, update, delete. data: The Citation object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_noteA | Create, read, update or delete Gramps Note records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Note handle; required for get-one, update, delete. data: The Note object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_mediaA | Manage Gramps Media objects and their files. Writes: create, update, delete, upload. Standard CRUD via /media/ plus binary operations:
get/create/update/delete -> as in manage_person (GET/POST/PUT/DELETE).
upload -> POST /media/ streaming Args: action: "get", "create", "update", "delete", "upload", "file", "thumbnail", "ocr" or "face_detection". handle: Media handle; required for get-one, update, delete, file, thumbnail, ocr, face_detection. data: The Media object for create/update (required for those). query: Optional dict of extra query-string parameters (e.g. {"square": true}). file_path: Local file path for the 'upload' action (required there). mime_type: MIME type of the upload (e.g. 'image/jpeg'); required for 'upload'. size: Thumbnail target size in pixels (required for 'thumbnail'). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"} where binary results carry base64/mimetype. |
| manage_repositoryA | Create, read, update or delete Gramps Repository records. Writes: create, update, delete.
Args: action: The operation, "get", "create", "update" or "delete". handle: Repository handle; required for get-one, update, delete. data: The Repository object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| manage_tagA | Create, read, update or delete Gramps Tag records. Writes: create, update, delete. Tags are lightweight labels attachable to any object. Args: action: The operation, "get", "create", "update" or "delete". handle: Tag handle; required for get-one, update, delete. data: The Tag object for create/update (required for those). query: Optional dict of extra query-string parameters for reads. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data"}. |
| searchA | Full-text (or semantic) search across the Gramps tree. Read-only. Hits the search index: type-ahead style queries for people, families,
events, places, sources, citations, repositories, media and notes. Args: query: The search string (required). type: Comma-delimited object types to include, e.g. "person,family,source". page: 1-based result page. pagesize: Results per page (default 20). sort: Comma-delimited sort keys; "change" or "type", '-' prefix for descending (e.g. "-change"). profile: Comma-delimited profile sections: all,self,age,span,events, families,references. strip: If true, drop empty-valued keys from hits. semantic: If true, use the vector/semantic index instead of full text. change: ISO-8601 last-change filter, prefix with '>' or '<'. locale: Language code for localized profile output. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": [hits], "total": }. |
| merge_objectsA | Merge two Gramps objects of the same type into one. Writes: merge.
Args: obj_type: Object type to merge, e.g. "person" or "family". handle1: Handle that survives the merge (phoenix). handle2: Handle that is absorbed and deleted (titanic). data: Optional merge options dict (person/family specific). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": {}} on success. |
| get_timelineA | Chronological event timeline for a person, family, or the whole tree. Read-only.
Args: kind: "person", "family", "people" or "families". handle: Person/family handle; required for kinds 'person' and 'family'. page: 1-based page of the event list. pagesize: Events per page. strip: If true, drop empty-valued keys from returned objects. discard_empty: If true, omit placeholder slot rows. omit_anchor: If true, exclude the anchor object's own event row. ratings: If true, include per-event relevance ratings. keys: Comma-delimited subset of object keys to return. skipkeys: Comma-delimited keys to exclude. precision: Significant time components (1-3) for age/span strings. ancestors: Number of ancestor generations to include (person kind). offspring: Number of descendant generations to include (person kind). query: Optional dict of extra timeline params (event_classes, events, relative_events, relatives, first, last, handles, ...). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": [timeline rows]}. |
| get_relationA | Compute a genealogical relationship between two people. Read-only. Without Args: handle1: First person handle. handle2: Second person handle. all: If true, return all possible relationships (and ancestors). depth: Maximum generations to search for a common ancestor (default 15, minimum 2). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": relationship(s)}. |
| get_livingA | Estimate whether (or until when) a person is alive. Read-only.
Args: handle: Person handle. mode: "status" (default) or "dates". average_generation_gap: Average years between generations (>= 1). max_age_probably_alive: Max age in years still considered alive (>= 1). max_sibling_age_difference: Max sibling age gap tolerated (>= 1). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": }. |
| analyze_dnaA | DNA match analysis and raw match-string parsing. Writes: parse only. Actions:
matches -> GET /people//dna/matches; per-match relationship,
segments, common-ancestor profiles and citation-linked notes.
ydna -> GET /people//ydna; Y-DNA haplogroup clade lineage.
parse -> POST /parsers/dna-match with Args: action: "matches", "ydna" or "parse". handle: Person handle; required for matches and ydna. data: Raw DNA match string; required for parse. raw: If true, include raw segment strings in matches output. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": matches, clade or parsed segments}. |
| manage_importA | List importers or import a family tree file (Gramps XML, GEDCOM...). Writes: file, restore.
Args: action: "list", "info", "file" or "restore". extension: Importer extension (e.g. 'gramps' or 'ged'); required for info, file, restore. file_path: Local path of the file to upload (required for file/restore). dry_run: If true, compute counts/summary without importing (file/restore). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": importer list or import summary}. |
| manage_exportA | List exporters or produce an export file (GEDCOM, Gramps XML...). Writes: run.
Args: action: "list", "info", "run" or "file". extension: Exporter extension (e.g. 'ged' or 'gramps'); required for info, run, file. options: Dict of export option query parameters (see docstring). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": exporter list, task ref, or base64 file}. |
| manage_reportA | List, configure or generate Gramps reports (PDF, text, web...). Writes: run.
Args: action: "list", "info", "run", "file" or "result". report_id: Report id (e.g. 'descend_report'); required for info, run, file, result. options: Dict of report options (JSON-serialized into the options param). locale: Language code for report output (default server locale). include_help: If true, include the options-help dictionary in list/info. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": reports, task ref, or base64 file}. |
| manage_transactionA | Apply raw DB transactions, undo history, or bulk create/delete. Writes: all actions. Low-level database operations that the object endpoints cannot express:
apply -> POST /transactions/ replaying Args: action: "apply", "undo", "history", "history_id", "undo_history", "create_objects", "delete_objects" or "delete_by_handle". payload: Transaction dict (apply/undo) or list of objects (create_objects). params: Optional dict for apply/undo (undo, message, force, background). transaction_id: History transaction id; required for history_id, undo_history. namespace: Object plural namespace (e.g. 'people'); for delete_objects / delete_by_handle. handles: List of handles to delete; for delete_by_handle. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": transaction result or task reference}. |
| manage_userA | Administer Gramps Web users. Writes: create, update, delete, change_password.
Args: action: "list", "get", "create", "update", "delete" or "change_password". user_name: The user's name; required for get/update/delete/change_password. data: Body dict; required for create/update/change_password. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": user list/object or empty}. |
| manage_treeA | Inspect or administer Gramps Web family trees. Writes: create, update, disable, enable, repair, migrate, verify, config_set.
Args: action: "list", "get", "create", "update", "disable", "enable", "repair", "migrate", "verify", "config_get" or "config_set". tree_id: Tree id; required except for list/create; '-' = current tree. data: Body dict for create/update/config_set (create requires 'name'). instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": tree details or configuration}. |
| manage_bookmarkA | Read or edit bookmarks per object namespace. Writes: add, remove. Bookmarks are per-user, per-type handle shortcuts. Args: namespace: Bookmark namespace (one of the nine object plurals). action: "list_all", "list", "add" or "remove" (default "list"). handle: Object handle to bookmark/unbookmark; required for add/remove. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": bookmark list or empty}. |
| manage_typeA | List Gramps type vocabularies (custom + default) for all object types. Read-only. Enumerates the controlled vocabularies used across the schema, e.g. event
types, name types, place types, child reference types, gender types.
Args: action: "all", "defaults", "default", "default_map", "customs" or "custom". datatype: Vocabulary name (e.g. 'event_types'); required for default, default_map, custom. locale: If true, translate default type names to the server locale. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": vocabulary dict or list}. |
| get_server_infoA | Read Gramps Web server, database, locale and object-count metadata. Read-only. Wraps GET /metadata/: database id/name/type, Gramps + Gramps Web API + QL
versions, locale, per-type object counts, tree researcher info, search
index details, and server capabilities (multi-tree, task queue, OCR,
semantic search, chat, face detection, thumbnails). When Args: surnames: If true, include the full list of surnames in the database. instance: Gramps Web base URL from get_instances; default = first. Returns: dict: {"status", "url", "data": metadata object}. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 27 tools
The manage_* CRUD tools are cleanly separated by entity type, and read-only get_* tools (timeline, relation, living, server info) plus search and merge have distinct purposes. The main friction is that manage_media bundles many sub-actions, manage_export/manage_report both run async jobs and return files, and manage_transaction overlaps with the CRUD tools.
Snake_case verb_noun naming is used throughout (manage_person, get_timeline, merge_objects), making tool selection predictable. Minor deviations exist: bare verbs like ping/search, and manage_import/manage_export/manage_report use 'manage' for action runners rather than entity CRUD.
27 tools is above the comfortable range, but the Gramps Web API is broad and the per-object CRUD tools are parallel rather than redundant. It would benefit from some consolidation, such as splitting media sub-actions into separate tools, so it feels slightly heavy rather than excessive.
The surface covers CRUD for all major Gramps objects plus search, merge, timeline, relationships, living status, DNA, import/export/report, users, trees, bookmarks, types, and metadata. The main gaps are async task polling for exports/reports and a few admin operations like tree deletion.