Skip to main content
Glama
gedcom-mcp

gedcom-mcp

by brianjbeach

gedcom-mcp

A small MCP server that reads and searches a GEDCOM 5.5.1 file. It gives an AI agent a fast, structured way to look up individuals, families, sources, and multimedia references in a family tree, and to suggest folder slugs for an archive of per-person pages.

It is tolerant of the custom tags that Ancestry.com exports emit (_APID, _TREE, _PRIM, _OID, and M/D/YYYY dates), but it works with any spec-compliant GEDCOM.

No family data is bundled with this server — you point it at your own .ged file via an environment variable.

Install

Requires Python 3.10+ and uv.

git clone https://github.com/<you>/gedcom-mcp.git
cd gedcom-mcp
uv sync

Related MCP server: GEDCOM MCP Server

Configuration

One required environment variable:

Variable

Description

GEDCOM_FILE

Absolute path to the .ged file to load.

The file is parsed lazily on the first tool call and cached in memory.

Tools

Tool

What it does

info

File path, Ancestry tree id (if present), counts by record type.

find_individual(query, limit=25)

Token search over INDI names (incl. AKAs).

get_individual(id)

Full INDI record: events, residences, sources, multimedia, family links, suggested slug, external_ids.

find_family(husband_query, wife_query, marriage_year, limit=25)

Match FAM records by spouses and/or year.

get_family(id)

Full FAM record with husband/wife/children resolved.

list_children(individual_id)

Children across all spouse families.

list_ancestors(individual_id, generations=4)

Bounded ancestor walk.

list_descendants(individual_id, generations=4)

Bounded descendant walk.

get_sources(individual_id)

SOUR citations attached to the person and their events, including Ancestry _APID codes.

suggest_slug(id)

Suggest a stable folder slug for the record (see below).

IDs may be passed with or without @ delimiters (I123 and @I123@ are equivalent).

Running locally

GEDCOM_FILE="/path/to/your-tree.ged" uv run gedcom-mcp

It speaks MCP over stdio.

Registering with an MCP client

Add an entry like this to your MCP client's server config (paths are examples — adjust to your checkout and your .ged file):

{
  "mcpServers": {
    "gedcom": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/gedcom-mcp", "gedcom-mcp"],
      "env": {
        "GEDCOM_FILE": "/path/to/your-tree.ged"
      }
    }
  }
}

Output conventions

The server returns plain JSON-shaped data. Dates are normalized to ISO 8601 (YYYY-MM-DD, partial dates allowed). The agent is responsible for turning these dicts into whatever it needs; the server stays out of formatting decisions.

Slug convention

suggest_slug produces a lowercase, hyphenated, ASCII slug intended as a stable folder name for a per-record page:

  • Individual: <surname>-<given>-<birthyear> (e.g. smith-john-1901)

  • Family: <husband-surname>-<wife-surname>-<marriageyear>

unknown is used for a missing year. This convention is opinionated; if your archive uses a different scheme, adapt suggest_slug / the *_slug helpers in src/gedcom_mcp/model.py.

License

MIT. See LICENSE.

Available Tools

10 tools
find_familyA

Search families by spouse name and/or marriage year. At least one of husband_query, wife_query, marriage_year must be set.

Inputs: limit, wife_query, husband_query, marriage_year. Returns: result

find_individualA

Search for individuals by name. Matches all tokens in query against the union of an individual's NAME records (primary + AKAs). Returns compact summaries with id, name, sex, birth/death, and a suggested folder slug per the workspace conventions.

Inputs: query (required), limit. Returns: result

get_familyA

Return the full FAM record for id (e.g. @F1@ or F1) with husband/wife/children resolved to summary dicts.

Inputs: id (required). Returns: object

get_individualA

Return the full INDI record for id (e.g. @I123@ or I123). Includes events, residences, sources, multimedia refs, family links, suggested slug, and external_ids shaped per the workspace's content schema.

Returns {"error": "..."} if no such record exists.

Inputs: id (required). Returns: object

get_sourcesA

Source citations attached to the individual and their immediate events. Includes Ancestry's _APID codes when present.

Inputs: individual_id (required). Returns: result

infoA

Return basic info about the loaded GEDCOM: file path, tree id (if Ancestry), and counts of major record types.

Inputs: no named parameters. Returns: object

list_ancestorsA

Ancestors of the given individual, up to generations levels. Each result includes a generation field (1 = parent, 2 = grandparent…).

Inputs: individual_id (required), generations. Returns: result

list_childrenA

Children of the given individual across all spouse families.

Inputs: individual_id (required). Returns: result

list_descendantsA

Descendants of the given individual, up to generations levels.

Inputs: individual_id (required), generations. Returns: result

suggest_slugA

Apply the workspace folder-slug rule from AGENTS.md to the given record.

For an INDI: <surname>-<given>-<birthyear>. For a FAM: <husband-surname>-<wife-surname>-<marriageyear>.

unknown is used for missing year. Slugs are lowercase ASCII, hyphen-separated. Returns the slug plus the inputs used to derive it so the caller can sanity-check.

Inputs: id (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool has a distinct purpose: get_* fetches by ID, find_* searches by criteria, list_* traverses relations, and get_sources/suggest_slug handle dedicated concerns. The potential overlap between get_family and list_children is minor as they take different inputs and serve different queries.

    Naming Consistency4/5

    Tools follow a consistent verb_noun pattern with get_ (by ID), find_ (search), and list_ (relation traversal). The 'info' tool breaks the pattern, and 'suggest_slug' uses a less common verb, but the overall structure is predictable.

    Tool Count5/5

    Ten tools is well within the ideal range for a focused domain server. Each tool addresses a core genealogy query or workspace utility with no redundancy.

    Completeness5/5

    The server covers the full read-only lifecycle: retrieval by ID, search by name/family, ancestor/descendant traversal, source citations, and a slug utility. There are no obvious dead ends or missing operations for its stated purpose.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to create, edit, and query genealogical data from GEDCOM files. Supports complex genealogy searches, automatic data enrichment from web sources, relationship analysis, and biography generation for individuals and families.
      17
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with Gramps genealogy databases for intelligent family tree research and management. Provides comprehensive tools for searching family data, creating records, analyzing relationships, and tracking genealogy research through natural language.
      51
      AGPL 3.0
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to load and query local GEDCOM genealogy files, supporting search, browsing, and family tree traversal.
      2
      2
      AGPL 3.0