Gramps Web MCP
An MCP server for the Gramps Web open-source genealogy platform that provides AI agents with structured, tool-based access to family trees. It supports reading and editing people, families, events, places, sources, citations, notes, media, repositories, and tags. Features include full-text search, kinship queries, careful edits with undo capabilities, and support for various MCP clients via stdio, Streamable HTTP, or SSE.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
Checks and signals
Each line is separate evidence, not a trust score.
- Popularity 21 GitHub stars
What you can do with it
- Read and edit family tree data including people, events, and media
- Perform full-text search and kinship queries like finding ancestors
- Upload photos and scans with metadata stripping for vision agents
- Undo changes or confirm deletions before modifying the tree
Source and maintenance
- Last repository push
- Latest release
- v2.8.1
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
ghcr.io/scormave/gramps-web-mcp:2.8.1
{
"transport": "stdio",
"identifier": "ghcr.io/scormave/gramps-web-mcp:2.8.1",
"runtimeHint": "docker",
"registryType": "oci",
"environmentVariables": [
{
"name": "MCP_TRANSPORT",
"value": "stdio",
"description": "Pinned to stdio for registry-installed containers that the client spawns itself. The image's own default is http (Streamable HTTP on port 8080) for networked Docker deployments; see the README for that setup."
},
{
"name": "GRAMPS_API_URL",
"isRequired": true,
"description": "Base URL of your Gramps Web instance"
},
{
"name": "GRAMPS_USERNAME",
"description": "Gramps Web API username; required with GRAMPS_PASSWORD unless GRAMPS_REFRESH_TOKEN is set"
},
{
"name": "GRAMPS_PASSWORD",
"description": "Gramps Web API password; required with GRAMPS_USERNAME unless GRAMPS_REFRESH_TOKEN is set"
},
{
"name": "GRAMPS_REFRESH_TOKEN",
"description": "Refresh token for instances with password login disabled; replaces GRAMPS_USERNAME and GRAMPS_PASSWORD"
},
{
"name": "GRAMPS_TREE_ID",
"isRequired": true,
"description": "Gramps Web tree UUID"
},
{
"name": "GRAMPS_READ_ONLY",
"default": "false",
"description": "Set to true to block create, update, and delete tools"
},
{
"name": "GRAMPS_MUTATION_SERIALIZE",
"default": "true",
"description": "Serialize create/update/delete HTTP calls in-process (set false to allow parallel writes)"
},
{
"name": "GRAMPS_MUTATION_MIN_INTERVAL_MS",
"default": "0",
"description": "Minimum milliseconds between mutation HTTP calls. Use 250 or 500 on SQLite if you see database is locked"
},
{
"name": "GRAMPS_CONFIRMATION",
"default": "when-supported",
"description": "Whether delete_object and undo_change ask the user to confirm through MCP elicitation: when-supported, required (refuse in clients that cannot ask), or off"
},
{
"name": "GRAMPS_LOG_LEVEL",
"default": "Information",
"description": "Server log level: Trace, Debug, Information, Warning, Error, Critical, or None. Debug and Trace also log request and response bodies, which contain genealogy data"
},
{
"name": "GRAMPS_MEDIA_RESOURCES_ENABLED",
"default": "false",
"description": "Set to true to expose read_media and the media resources for thumbnails and full files, and to allow uploads from GRAMPS_MEDIA_UPLOAD_DIRS"
},
{
"name": "GRAMPS_MEDIA_MAX_BYTES",
"default": "5242880",
"description": "Maximum bytes returned by read_media or a media resource"
},
{
"name": "GRAMPS_MEDIA_ALLOW_PRIVATE",
"default": "false",
"description": "Set to true to return bytes for media records marked private"
},
{
"name": "GRAMPS_MEDIA_UPLOAD_DIRS",
"description": "Absolute folders, separated by : (; on Windows), that create_media and update_media may upload photos, scans and PDFs from while GRAMPS_MEDIA_RESOURCES_ENABLED is true. Unset turns uploading off and hides create_media"
},
{
"name": "GRAMPS_MEDIA_UPLOAD_MAX_BYTES",
"default": "52428800",
"description": "Largest file create_media or update_media uploads"
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · repository · passed · metadata changed · updated
- · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"gramps-web-mcp-2-8-1": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT=<YOUR_MCP_TRANSPORT>",
"-e",
"GRAMPS_API_URL=<YOUR_GRAMPS_API_URL>",
"-e",
"GRAMPS_USERNAME=<YOUR_GRAMPS_USERNAME>",
"-e",
"GRAMPS_PASSWORD=<YOUR_GRAMPS_PASSWORD>",
"-e",
"GRAMPS_REFRESH_TOKEN=<YOUR_GRAMPS_REFRESH_TOKEN>",
"-e",
"GRAMPS_TREE_ID=<YOUR_GRAMPS_TREE_ID>",
"-e",
"GRAMPS_READ_ONLY=<YOUR_GRAMPS_READ_ONLY>",
"-e",
"GRAMPS_MUTATION_SERIALIZE=<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"-e",
"GRAMPS_MUTATION_MIN_INTERVAL_MS=<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"-e",
"GRAMPS_CONFIRMATION=<YOUR_GRAMPS_CONFIRMATION>",
"-e",
"GRAMPS_LOG_LEVEL=<YOUR_GRAMPS_LOG_LEVEL>",
"-e",
"GRAMPS_MEDIA_RESOURCES_ENABLED=<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"-e",
"GRAMPS_MEDIA_MAX_BYTES=<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"-e",
"GRAMPS_MEDIA_ALLOW_PRIVATE=<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"-e",
"GRAMPS_MEDIA_UPLOAD_DIRS=<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"-e",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES=<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>",
"ghcr.io/scormave/gramps-web-mcp:2.8.1"
],
"env": {
"MCP_TRANSPORT": "<YOUR_MCP_TRANSPORT>",
"GRAMPS_API_URL": "<YOUR_GRAMPS_API_URL>",
"GRAMPS_USERNAME": "<YOUR_GRAMPS_USERNAME>",
"GRAMPS_PASSWORD": "<YOUR_GRAMPS_PASSWORD>",
"GRAMPS_REFRESH_TOKEN": "<YOUR_GRAMPS_REFRESH_TOKEN>",
"GRAMPS_TREE_ID": "<YOUR_GRAMPS_TREE_ID>",
"GRAMPS_READ_ONLY": "<YOUR_GRAMPS_READ_ONLY>",
"GRAMPS_MUTATION_SERIALIZE": "<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"GRAMPS_MUTATION_MIN_INTERVAL_MS": "<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"GRAMPS_CONFIRMATION": "<YOUR_GRAMPS_CONFIRMATION>",
"GRAMPS_LOG_LEVEL": "<YOUR_GRAMPS_LOG_LEVEL>",
"GRAMPS_MEDIA_RESOURCES_ENABLED": "<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"GRAMPS_MEDIA_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"GRAMPS_MEDIA_ALLOW_PRIVATE": "<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"GRAMPS_MEDIA_UPLOAD_DIRS": "<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>"
}
}
}
}Cline
{
"mcpServers": {
"gramps-web-mcp-2-8-1": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT=<YOUR_MCP_TRANSPORT>",
"-e",
"GRAMPS_API_URL=<YOUR_GRAMPS_API_URL>",
"-e",
"GRAMPS_USERNAME=<YOUR_GRAMPS_USERNAME>",
"-e",
"GRAMPS_PASSWORD=<YOUR_GRAMPS_PASSWORD>",
"-e",
"GRAMPS_REFRESH_TOKEN=<YOUR_GRAMPS_REFRESH_TOKEN>",
"-e",
"GRAMPS_TREE_ID=<YOUR_GRAMPS_TREE_ID>",
"-e",
"GRAMPS_READ_ONLY=<YOUR_GRAMPS_READ_ONLY>",
"-e",
"GRAMPS_MUTATION_SERIALIZE=<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"-e",
"GRAMPS_MUTATION_MIN_INTERVAL_MS=<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"-e",
"GRAMPS_CONFIRMATION=<YOUR_GRAMPS_CONFIRMATION>",
"-e",
"GRAMPS_LOG_LEVEL=<YOUR_GRAMPS_LOG_LEVEL>",
"-e",
"GRAMPS_MEDIA_RESOURCES_ENABLED=<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"-e",
"GRAMPS_MEDIA_MAX_BYTES=<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"-e",
"GRAMPS_MEDIA_ALLOW_PRIVATE=<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"-e",
"GRAMPS_MEDIA_UPLOAD_DIRS=<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"-e",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES=<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>",
"ghcr.io/scormave/gramps-web-mcp:2.8.1"
],
"env": {
"MCP_TRANSPORT": "<YOUR_MCP_TRANSPORT>",
"GRAMPS_API_URL": "<YOUR_GRAMPS_API_URL>",
"GRAMPS_USERNAME": "<YOUR_GRAMPS_USERNAME>",
"GRAMPS_PASSWORD": "<YOUR_GRAMPS_PASSWORD>",
"GRAMPS_REFRESH_TOKEN": "<YOUR_GRAMPS_REFRESH_TOKEN>",
"GRAMPS_TREE_ID": "<YOUR_GRAMPS_TREE_ID>",
"GRAMPS_READ_ONLY": "<YOUR_GRAMPS_READ_ONLY>",
"GRAMPS_MUTATION_SERIALIZE": "<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"GRAMPS_MUTATION_MIN_INTERVAL_MS": "<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"GRAMPS_CONFIRMATION": "<YOUR_GRAMPS_CONFIRMATION>",
"GRAMPS_LOG_LEVEL": "<YOUR_GRAMPS_LOG_LEVEL>",
"GRAMPS_MEDIA_RESOURCES_ENABLED": "<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"GRAMPS_MEDIA_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"GRAMPS_MEDIA_ALLOW_PRIVATE": "<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"GRAMPS_MEDIA_UPLOAD_DIRS": "<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>"
}
}
}
}VS Code
{
"servers": {
"gramps-web-mcp-2-8-1": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT=<YOUR_MCP_TRANSPORT>",
"-e",
"GRAMPS_API_URL=<YOUR_GRAMPS_API_URL>",
"-e",
"GRAMPS_USERNAME=<YOUR_GRAMPS_USERNAME>",
"-e",
"GRAMPS_PASSWORD=<YOUR_GRAMPS_PASSWORD>",
"-e",
"GRAMPS_REFRESH_TOKEN=<YOUR_GRAMPS_REFRESH_TOKEN>",
"-e",
"GRAMPS_TREE_ID=<YOUR_GRAMPS_TREE_ID>",
"-e",
"GRAMPS_READ_ONLY=<YOUR_GRAMPS_READ_ONLY>",
"-e",
"GRAMPS_MUTATION_SERIALIZE=<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"-e",
"GRAMPS_MUTATION_MIN_INTERVAL_MS=<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"-e",
"GRAMPS_CONFIRMATION=<YOUR_GRAMPS_CONFIRMATION>",
"-e",
"GRAMPS_LOG_LEVEL=<YOUR_GRAMPS_LOG_LEVEL>",
"-e",
"GRAMPS_MEDIA_RESOURCES_ENABLED=<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"-e",
"GRAMPS_MEDIA_MAX_BYTES=<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"-e",
"GRAMPS_MEDIA_ALLOW_PRIVATE=<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"-e",
"GRAMPS_MEDIA_UPLOAD_DIRS=<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"-e",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES=<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>",
"ghcr.io/scormave/gramps-web-mcp:2.8.1"
],
"env": {
"MCP_TRANSPORT": "<YOUR_MCP_TRANSPORT>",
"GRAMPS_API_URL": "<YOUR_GRAMPS_API_URL>",
"GRAMPS_USERNAME": "<YOUR_GRAMPS_USERNAME>",
"GRAMPS_PASSWORD": "<YOUR_GRAMPS_PASSWORD>",
"GRAMPS_REFRESH_TOKEN": "<YOUR_GRAMPS_REFRESH_TOKEN>",
"GRAMPS_TREE_ID": "<YOUR_GRAMPS_TREE_ID>",
"GRAMPS_READ_ONLY": "<YOUR_GRAMPS_READ_ONLY>",
"GRAMPS_MUTATION_SERIALIZE": "<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"GRAMPS_MUTATION_MIN_INTERVAL_MS": "<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"GRAMPS_CONFIRMATION": "<YOUR_GRAMPS_CONFIRMATION>",
"GRAMPS_LOG_LEVEL": "<YOUR_GRAMPS_LOG_LEVEL>",
"GRAMPS_MEDIA_RESOURCES_ENABLED": "<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"GRAMPS_MEDIA_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"GRAMPS_MEDIA_ALLOW_PRIVATE": "<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"GRAMPS_MEDIA_UPLOAD_DIRS": "<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"gramps-web-mcp-2-8-1": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT=<YOUR_MCP_TRANSPORT>",
"-e",
"GRAMPS_API_URL=<YOUR_GRAMPS_API_URL>",
"-e",
"GRAMPS_USERNAME=<YOUR_GRAMPS_USERNAME>",
"-e",
"GRAMPS_PASSWORD=<YOUR_GRAMPS_PASSWORD>",
"-e",
"GRAMPS_REFRESH_TOKEN=<YOUR_GRAMPS_REFRESH_TOKEN>",
"-e",
"GRAMPS_TREE_ID=<YOUR_GRAMPS_TREE_ID>",
"-e",
"GRAMPS_READ_ONLY=<YOUR_GRAMPS_READ_ONLY>",
"-e",
"GRAMPS_MUTATION_SERIALIZE=<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"-e",
"GRAMPS_MUTATION_MIN_INTERVAL_MS=<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"-e",
"GRAMPS_CONFIRMATION=<YOUR_GRAMPS_CONFIRMATION>",
"-e",
"GRAMPS_LOG_LEVEL=<YOUR_GRAMPS_LOG_LEVEL>",
"-e",
"GRAMPS_MEDIA_RESOURCES_ENABLED=<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"-e",
"GRAMPS_MEDIA_MAX_BYTES=<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"-e",
"GRAMPS_MEDIA_ALLOW_PRIVATE=<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"-e",
"GRAMPS_MEDIA_UPLOAD_DIRS=<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"-e",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES=<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>",
"ghcr.io/scormave/gramps-web-mcp:2.8.1"
],
"env": {
"MCP_TRANSPORT": "<YOUR_MCP_TRANSPORT>",
"GRAMPS_API_URL": "<YOUR_GRAMPS_API_URL>",
"GRAMPS_USERNAME": "<YOUR_GRAMPS_USERNAME>",
"GRAMPS_PASSWORD": "<YOUR_GRAMPS_PASSWORD>",
"GRAMPS_REFRESH_TOKEN": "<YOUR_GRAMPS_REFRESH_TOKEN>",
"GRAMPS_TREE_ID": "<YOUR_GRAMPS_TREE_ID>",
"GRAMPS_READ_ONLY": "<YOUR_GRAMPS_READ_ONLY>",
"GRAMPS_MUTATION_SERIALIZE": "<YOUR_GRAMPS_MUTATION_SERIALIZE>",
"GRAMPS_MUTATION_MIN_INTERVAL_MS": "<YOUR_GRAMPS_MUTATION_MIN_INTERVAL_MS>",
"GRAMPS_CONFIRMATION": "<YOUR_GRAMPS_CONFIRMATION>",
"GRAMPS_LOG_LEVEL": "<YOUR_GRAMPS_LOG_LEVEL>",
"GRAMPS_MEDIA_RESOURCES_ENABLED": "<YOUR_GRAMPS_MEDIA_RESOURCES_ENABLED>",
"GRAMPS_MEDIA_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_MAX_BYTES>",
"GRAMPS_MEDIA_ALLOW_PRIVATE": "<YOUR_GRAMPS_MEDIA_ALLOW_PRIVATE>",
"GRAMPS_MEDIA_UPLOAD_DIRS": "<YOUR_GRAMPS_MEDIA_UPLOAD_DIRS>",
"GRAMPS_MEDIA_UPLOAD_MAX_BYTES": "<YOUR_GRAMPS_MEDIA_UPLOAD_MAX_BYTES>"
}
}
}
}Let your agent find its tools
Find servers like Gramps Web MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.