gramps-web-mcp is an MCP server that provides structured, tool-based access to Gramps Web genealogy data. It acts as a companion to the Gramps Web open-source genealogy platform, enabling AI agents to work with family trees via the Model Context Protocol.
๐ ๏ธ Key Features
MCP server for structured access to Gramps Web genealogy data
Tool-based interface for AI agents
Operates alongside a Gramps Web instance
๐ Use Cases
Integrate AI agents with Gramps Web family trees
Access genealogy data in a structured MCP workflow
โก Developer Benefits
Uses the Model Context Protocol for standardized, tool-based integration
Designed to run with existing Gramps Web resources
โ ๏ธ Limitations
Not a standalone genealogy UI and not a replacement for Gramps Web
Requires an existing Gramps Web instance to run alongside
Companion MCP server for the Gramps Web
open-source genealogy platform. It gives AI agents structured, tool-based
access to family trees through the Model Context Protocol.
This project is not a standalone genealogy UI or replacement for Gramps
Web. Run it alongside an existing Gramps Web instance; your users, trees,
media, permissions, and genealogy editing UI stay in Gramps Web.
Features
57 MCP tools โ read, create, update, and delete people, families, events, places,
sources, citations, notes, media, repositories, and tags
Search and browse โ full-text search and paginated object listing
Kinship tools โ ancestors, descendants, relationships, and timelines
Composite workflows โ quick-add person, add event to person, find by Gramps ID
6 MCP resources โ type vocabularies, input guide, tree metadata, name
settings, and opt-in media thumbnails/files for vision-capable agents
Media safeguards โ size limits, MIME allowlists, and private-record defaults
MCP prompts โ guided workflows for research, adding people/families, and imports
run-local-server.sh connects to the public demo.grampsweb.org
instance using well-known demo credentials (owner / owner):
bash
./run-local-server.sh
The server starts with HTTP transport at http://127.0.0.1:8080/mcp. No API key is
required when binding to loopback only.
Docker
Pre-built multi-arch images (linux/amd64, linux/arm64) are published to
GitHub Container Registry. Docker picks the matching architecture automatically;
amd64 covers most Unraid and x86 hosts, arm64 covers Apple Silicon and ARM
SBCs:
The image exposes a GET /health endpoint for Docker HEALTHCHECK, Unraid
container health, and other uptime monitors. It returns HTTP 200 when the MCP
server can authenticate against Gramps Web, or HTTP 503 otherwise. The public
response is minimal by default: { "status": "healthy" } or
{ "status": "unhealthy" }. Startup logs include a line such as
Connected to Gramps Web at โฆ once the API is reachable.
The image defaults to Streamable HTTP (MCP_TRANSPORT=http) on port 8080, which
is what the commands above use. Clients that spawn the container themselves
(such as MCP Registry installs) instead run it over stdio with
-e MCP_TRANSPORT=stdio and stdin kept open (docker run -i); that is the mode
declared in server.json.
Search for gramps-web-mcp and install the template.
Set GRAMPS_API_URL, GRAMPS_USERNAME, GRAMPS_PASSWORD, and
GRAMPS_TREE_ID for your Gramps Web instance. Set MCP_API_KEY when the
MCP port is reachable from other machines on your network.
Keep the default container port 8080, or map it to another host port.
Start the container and check /health; it returns HTTP 200 once the service
can authenticate to Gramps Web, with a minimal JSON response by default.
For the easiest pairing, run Gramps Web and gramps-web-mcp on the same Unraid
Docker network and set GRAMPS_API_URL to the Gramps Web container URL. The MCP
endpoint for clients is http://<unraid-host>:<mapped-port>/mcp.
Gramps Web + MCP (Docker Compose)
To run Gramps Web and the MCP server on the same host and Docker network, use
docker-compose.example.yml as a starting point:
bash
cp docker-compose.example.yml docker-compose.yml
cp .env.example .env# Complete the Gramps Web setup wizard, then set credentials in .env
docker compose up -d
Gramps Web is published on port 5055; MCP is on 8080 (/mcp and
/health). Inside the compose network the MCP container reaches Gramps Web at
http://grampsweb:5000.
Claude Desktop (MCPB extension)
One-click install for Claude Desktop is available as an MCP Bundle (.mcpb) from
GitHub Releases. Download the
bundle for your platform:
Platform
Artifact
macOS Apple Silicon
gramps-web-mcp-claude-desktop-osx-arm64-v*.mcpb
macOS Intel
gramps-web-mcp-claude-desktop-osx-x64-v*.mcpb
Windows x64
gramps-web-mcp-claude-desktop-win-x64-v*.mcpb
Linux x64
gramps-web-mcp-claude-desktop-linux-x64-v*.mcpb
Linux ARM64
gramps-web-mcp-claude-desktop-linux-arm64-v*.mcpb
Download the .mcpb file for your OS from the latest release.
Double-click it, or drag it into the Claude Desktop window.
Enter your Gramps Web URL, username, password/token, and tree UUID.
Leave Read-only mode enabled for your first session; disable it only when you
want Claude to create or edit records.
Complete installation and start a new chat.
The extension runs locally over stdio and does not require the .NET SDK on your
machine.
See mcpb/README.md for packaging details and
PRIVACY.md for the privacy policy.
To build a bundle locally:
bash
./scripts/pack-mcpb.sh osx-arm64 # or osx-x64, win-x64, linux-x64, linux-arm64
To run a stdio server in read-only mode, add "GRAMPS_READ_ONLY": "true" to env.
HTTP (remote / Docker):
Point your MCP client at http://host:8080/mcp with Streamable HTTP transport.
When MCP_API_KEY is set, send it as Authorization: Bearer <key> or
X-Api-Key: <key> on every MCP request.
Vision-capable agents can read opt-in media through tools (GetMediaThumbnail,
GetMediaFile) or through binary MCP resources such as
gramps://media/{handle}/thumbnail/{size} and gramps://media/{handle}/file.
GetMediaFile returns image, audio, or embedded blob resource content depending
on MIME type. End-to-end analysis depends on the MCP client forwarding the typed
tool content or binary resource content to a capable model.
Configuration
Required (Gramps connection)
Variable
Description
GRAMPS_API_URL
Base URL of your Gramps Web instance (no trailing slash)
GRAMPS_USERNAME
API user name
GRAMPS_PASSWORD
API password or token
GRAMPS_TREE_ID
Tree UUID on that server
Runtime mode
Variable
Default
GRAMPS_READ_ONLY
false
GRAMPS_MUTATION_SERIALIZE
true
GRAMPS_MUTATION_MIN_INTERVAL_MS
0
GRAMPS_READ_ONLY: set to true to block create, update, and delete calls
while keeping tools visible.
GRAMPS_MUTATION_SERIALIZE: runs create/update/delete HTTP calls one at a
time in this process.
GRAMPS_MUTATION_MIN_INTERVAL_MS: minimum pause between mutation HTTP calls,
including steps inside composite tools.
Runtime notes:
GRAMPS_READ_ONLY=false means the server starts in read/write mode.
The Claude Desktop MCPB extension is the exception: its setup form defaults to
read-only for safer first use.
Write serialization and the optional interval protect typical Gramps Web
SQLite trees from agent write bursts.
The write gate is in-process only. It does not coordinate across multiple
MCP replicas, the Gramps Web UI, or other API clients.
SQLite deployments that still see database is locked on sequential edits
should set GRAMPS_MUTATION_MIN_INTERVAL_MS=250 or 500.
On SQLite lock errors or upstream HTTP 429, mutation tools return a retryable
MCP error with a short backoff hint instead of a generic 500.
Set GRAMPS_MUTATION_SERIALIZE=false when Gramps Web uses PostgreSQL and you
want parallel writes.
Media file access
Media byte tools/resources are disabled by default. get_media remains
available for metadata without enabling file downloads.
Variable
Description
Default
GRAMPS_MEDIA_RESOURCES_ENABLED
Enables binary media tools/resources for thumbnails and full files
false
GRAMPS_MEDIA_MAX_BYTES
Maximum bytes returned by any media resource
5242880
GRAMPS_MEDIA_ALLOWED_MIME_TYPES
Allowed MIME types for media bytes
see below
GRAMPS_MEDIA_ALLOW_PRIVATE
Allows bytes for Gramps media records marked private
false
Prefer GetMediaThumbnail or gramps://media/{handle}/thumbnail/{size} for AI
analysis. Full files can be large and sensitive, and are still subject to the
same size, MIME, and private-record checks.
Exact types and type/* wildcards are supported. The default media allowlist is
image/jpeg,image/png,image/webp,image/avif,application/pdf.
Transports
Set GRAMPS_API_URL, GRAMPS_USERNAME, GRAMPS_PASSWORD, and
GRAMPS_TREE_ID as usual.
Value
Behavior
(unset or stdio)
JSON-RPC over stdin/stdout (default; local clients).
http
Streamable HTTP at MCP_PATH (default /mcp).
sse
Legacy MCP SSE: GET {MCP_PATH}/sse + POST {MCP_PATH}/message. Stateful; use for older clients only.
For HTTP transport, responses stream over SSE. See the
Streamable HTTP spec
for protocol details. Set ASPNETCORE_URLS to choose the listen address, for
example http://127.0.0.1:8080.
Optional (MCP transport)
Variable
Description
Default
ASPNETCORE_URLS
Listen URLs for HTTP/SSE
โ
MCP_PATH
URL prefix for MCP endpoints
/mcp
MCP_STATELESS
Stateless mode for Streamable HTTP
true
MCP_ENABLE_LEGACY_SSE
Expose legacy /sse with http transport
false
MCP_API_KEY
Shared secret for HTTP/SSE transport (comma-separated for rotation; min 16 characters)
โ
HTTP authentication
When MCP_API_KEY is set, all MCP HTTP/SSE endpoints require the key on every
request. GET /health stays anonymous for Docker and load-balancer probes.
Generate a key:
bash
openssl rand -base64 32
Without a key, the server still starts (backward compatible). If the listen
address is not loopback-only, a warning is logged recommending that you set
MCP_API_KEY, use a reverse proxy with its own authentication, or bind to
127.0.0.1 for local use only.
Inside Docker, ASPNETCORE_URLS is typically http://0.0.0.0:8080, so the
warning appears even when the host publishes the port on 127.0.0.1 only.
That is expected when external access is already restricted.
The Claude Desktop extension is a local MCP server. It sends data only to the
Gramps Web instance you configure and does not collect analytics or conversation
data. See PRIVACY.md for full details.
License
Copyright (c) Scormave
This project is licensed under the GNU Affero General Public License v3.0
(AGPL-3.0-or-later). Because this is network server software, hosting a modified
version requires making the corresponding source available to users interacting
with it over a network.
Install
Configuration
Environment variables
MCP_TRANSPORTdefault stdio
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.
GRAMPS_API_URLrequired
Base URL of your Gramps Web instance
GRAMPS_USERNAMErequired
Gramps Web API username
GRAMPS_PASSWORDrequiredsecret
Gramps Web API password or token
GRAMPS_TREE_IDrequired
Gramps Web tree UUID
GRAMPS_READ_ONLYdefault false
Set to true to block create, update, and delete tools