Skip to main content
Glama

gedcom-mcp

CI License: MIT Python 3.10+ MCP M8ven Live Monitored M8ven Live Monitored

A Model Context Protocol server that lets Claude (or any MCP client) read, search and edit GEDCOM .ged family-tree files — the export format used by Ancestry.com, FamilySearch, MyHeritage, Gramps, RootsMagic, Family Tree Maker and most other genealogy software.

Point it at a folder of .ged files and ask things like:

"Who were the parents of John Smith, born about 1840 in Bristol?" "Show me four generations of ancestors for @I123@." "Add a burial for Mary Jones on 3 May 1901 at St Mary's, Islington." "Which source records cite the 1881 census?"

Edits are written straight back to the file — safely, with a backup, and without disturbing anything you didn't touch.


Contents


Related MCP server: gramps-remote-mcp

Features

  • Current MCP SDK — built on mcp>=2.2 (MCPServer, structured/typed output, tool annotations for read-only / destructive hints).

  • Proper search — free-text name search that is case- and accent-insensitive (Müller matches muller), ranked by match quality; filter by given name, surname, birth/death year ranges, place and sex; paginated.

  • Relationship navigation — parents, spouses, children, siblings; N-generation pedigree (ancestor) and descendant trees, with children grouped per marriage.

  • Sources, citations and notes — full source records, per-fact citations (including Ancestry's _APID record ids), and note text everywhere it appears.

  • Editing — add, update and remove people; create or update any event/fact; add notes; create families; link children to parents; delete people cleanly (all back-references removed).

  • Lossless — the file is held as a line tree and only lines you actually change are re-rendered. Unknown and vendor tags (_APID, _OID, OBJE, _MILT, …), record order, character encoding, byte-order mark and line endings all survive byte-for-byte. Round-tripping a file without edits produces an identical file.

  • Safe — every edit writes a <name>.ged.bak first, then saves atomically. File names are plain names inside the configured directory: no path traversal, no globs, no writes anywhere else.

  • No log files — diagnostics go to stderr only; nothing is written next to your data.

  • Any GEDCOM 5.5 / 5.5.1 file — tested against Ancestry.com exports (BOM + CRLF, ~2,300 people) and standard fixtures.

Requirements

  • Python 3.10 or newer

  • uv (recommended) or pip

  • An MCP client — Claude Code, Claude Desktop, Cursor, VS Code Copilot, etc.

Installation

Clone the repository and create a virtual environment:

git clone https://github.com/ggoosen/gedcom-mcp.git
cd gedcom-mcp

# with uv (recommended)
uv venv
uv pip install -e .

# or with plain pip
python -m venv .venv
.venv/Scripts/activate        # Windows
source .venv/bin/activate     # macOS / Linux
pip install -e .

This installs a gedcom-mcp console script into the virtual environment:

Platform

Executable

Windows

<repo>\.venv\Scripts\gedcom-mcp.exe

macOS / Linux

<repo>/.venv/bin/gedcom-mcp

You'll need that full path when registering the server with a client (clients don't activate your venv for you).

Tip: if you'd rather not clone, uv tool install git+https://github.com/ggoosen/gedcom-mcp installs gedcom-mcp onto your PATH, or run it ad hoc with uvx --from git+https://github.com/ggoosen/gedcom-mcp gedcom-mcp --gedcom-path DIR.

Running the server

The server speaks MCP over stdio. It takes one required setting — the directory that holds your .ged files:

gedcom-mcp --gedcom-path "C:/Users/you/Documents/Genealogy"
# or
GEDCOM_PATH="/home/you/genealogy" gedcom-mcp

Options:

Flag

Description

--gedcom-path DIR

Directory containing .ged files. Falls back to the GEDCOM_PATH environment variable. Required.

-v, --verbose

Debug logging on stderr.

-h, --help

Show help.

Run from a terminal it will simply wait for a client on stdin — that's normal. Press Ctrl+C to exit. Normally you don't run it yourself; the MCP client launches it.

Put your files in a dedicated folder. The server can read and write every .ged in the directory, so don't point it at a folder that also holds files you'd rather it never touched. Keep your own backups too — the .bak only holds the state before the most recent edit.

Connecting an MCP client

Claude Code

Register the server for the current project (local scope):

# Windows
claude mcp add gedcom -- "C:/path/to/gedcom-mcp/.venv/Scripts/gedcom-mcp.exe" --gedcom-path "C:/Users/you/Documents/Genealogy"

# macOS / Linux
claude mcp add gedcom -- /path/to/gedcom-mcp/.venv/bin/gedcom-mcp --gedcom-path /home/you/genealogy

Add --scope user to make it available in every project, or --scope project to write a shareable .mcp.json into the current repo. Check with claude mcp list; remove with claude mcp remove gedcom.

Equivalent .mcp.json (project scope):

{
  "mcpServers": {
    "gedcom": {
      "type": "stdio",
      "command": "C:/path/to/gedcom-mcp/.venv/Scripts/gedcom-mcp.exe",
      "args": ["--gedcom-path", "C:/Users/you/Documents/Genealogy"]
    }
  }
}

Once registered, start Claude Code in that project and the tools appear as mcp__gedcom__*. Try: "list the gedcom files and give me a summary of the first one."

Claude Desktop

Edit claude_desktop_config.json (Settings → Developer → Edit Config):

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "gedcom": {
      "command": "C:/path/to/gedcom-mcp/.venv/Scripts/gedcom-mcp.exe",
      "args": ["--gedcom-path", "C:/Users/you/Documents/Genealogy"]
    }
  }
}

Restart Claude Desktop. The server shows up under the tools (🔨) icon.

Cursor, Windsurf, VS Code and others

Any client that supports stdio MCP servers works with the same shape — a command and args. For example, VS Code (.vscode/mcp.json):

{
  "servers": {
    "gedcom": {
      "type": "stdio",
      "command": "/path/to/gedcom-mcp/.venv/bin/gedcom-mcp",
      "args": ["--gedcom-path", "/home/you/genealogy"]
    }
  }
}

You can also pass the directory via the environment instead of args:

"env": { "GEDCOM_PATH": "/home/you/genealogy" }

Usage

The intended workflow is:

  1. list_files (or file_summary) — see what's there.

  2. search_individuals — find people and get their ids.

  3. get_individual / get_family / get_ancestors / get_descendants / get_source — drill in.

  4. The write tools — make changes; each returns a short confirmation and saves immediately.

Claude figures this out on its own from the tool descriptions; you just ask questions in plain English.

Ids and file names

  • Record ids are GEDCOM cross-references including the @ signs: @I12@ (individual), @F3@ (family), @S7@ (source). Ancestry exports use long numeric ids such as @I200180069284@; those work too.

  • File names are plain names relative to the configured directory, with or without the .ged extension: Smith Family Tree or Smith Family Tree.ged. Path separators, .., globs and control characters are rejected.

  • file may be omitted on every tool when the directory contains exactly one .ged file. With several files, the error message lists the available names.

Dates

Dates are GEDCOM-style and are normalised on write:

Input

Meaning

12 MAR 1840

Exact date

MAR 1840, 1840

Partial date

ABT 1845 / EST 1845 / CAL 1845

Approximate / estimated / calculated

BEF 1900 / AFT 1900

Before / after

BET 1930 AND 1935

Range

FROM 1901 TO 1905

Period

Year filters in search_individuals (birth_year_from, etc.) understand all of these forms.

Example conversations

Finding someone

You: Find anyone called Smith born in Bristol between 1830 and 1850.

Claude calls search_individuals(surname="Smith", place="Bristol", birth_year_from=1830, birth_year_to=1850) and returns a ranked list with ids, life spans and birth places.

Exploring a family

You: Show me William Smith's family and four generations of his ancestors.

Claude calls get_individual(id="@I1@") — parents, every marriage with its children, siblings, all facts with citations — then get_ancestors(id="@I1@", generations=4).

Correcting a record

You: William's birth date is wrong — it should be 12 March 1841, and add a note that this came from his baptism register entry.

Claude calls set_event(id="@I1@", tag="BIRT", date="12 MAR 1841") and add_note(id="@I1@", text="Birth date corrected from baptism register …"). Both save immediately with a .bak written first.

Adding a new person and linking them

You: Add a daughter for William and Mary, Elizabeth, born 4 June 1866 in Bristol.

Claude calls add_individual(given="Elizabeth", surname="Smith", sex="F", birth_date="4 JUN 1866", birth_place="Bristol, Gloucestershire, England") which returns @I9@, then set_parents(child_id="@I9@", father_id="@I1@", mother_id="@I2@") — reusing William and Mary's existing family record.

Tracing sources

You: What does source @S2@ cover and who is cited against it?

Claude calls get_source(id="@S2@") — title, author, publisher, repository, Ancestry _APID, and every individual/fact that cites it.

Tool reference

Every tool accepts an optional file argument (see Ids and file names).

Read tools

All read tools are annotated readOnlyHint so well-behaved clients won't prompt for approval.

Tool

Parameters

Returns

list_files

Each .ged file: name, size, modified time.

file_summary

file

Record counts (individuals, families, sources, notes), originating software, earliest/latest year, top surnames.

search_individuals

query (free-text name), given, surname, birth_year_from, birth_year_to, death_year_from, death_year_to, place, sex (M/F), limit (1–200, default 25), offset

Ranked matches with id, name, sex, birth and death (date + place), plus total for pagination.

get_individual

id, include_sources (default true), include_notes (default true)

Full record: all names, every event/fact with date, place, value, citations and notes; parents; each marriage with spouse and children; siblings; CHAN timestamp.

get_family

id

Husband, wife, children (with life spans), marriage/divorce and other family events, notes, citations.

get_ancestors

id, generations (1–10, default 4)

Pedigree tree — each node is a person with father and mother sub-trees.

get_descendants

id, generations (1–10, default 3)

Descendant tree — each node lists marriages, and each marriage its children as sub-trees.

get_source

id

Title, author, publication, repository, Ancestry _APID, notes, and a list of who cites it (person, fact, page).

Write tools

Write tools save immediately. Each one first writes <name>.ged.bak, then replaces the file atomically, and stamps the touched record with a CHAN (change date) entry. Tools that delete data are annotated destructiveHint so clients can ask for confirmation.

Tool

Parameters

What it does

create_file

name

Create a new, empty GEDCOM 5.5.1 file (UTF-8, with header and submitter).

rename_file

file, new_name

Rename a file. Refuses to overwrite an existing one.

add_individual

given, surname, sex (M/F/U), birth_date, birth_place, death_date, death_place, note

Add a person. Returns the new @I..@ id — use set_parents / add_family to link them.

update_individual

id, given, surname, sex

Change name parts and/or sex. Only supplied fields change; other name sub-tags are kept.

set_event

id (person or family), tag, date, place, value, type, index (default 0)

Create or update a fact. tag is any GEDCOM event/attribute tag — BIRT, DEAT, BURI, CHR, BAPM, OCCU, RESI, CENS, EMIG, IMMI, EVEN, FACT, … or MARR/DIV/ENGA on a family. value is the attribute text (e.g. occupation). type sets the TYPE sub-tag (describes EVEN/FACT). index picks the Nth existing fact with that tag; set it equal to the current count to add another one.

remove_event

id, tag, index (default 0)

⚠️ Delete the Nth fact with that tag, including its citations and notes.

add_note

id (any record), text

Attach a free-text note. Multi-line text is folded into CONT/CONC correctly.

add_family

husband_id, wife_id, child_ids, marriage_date, marriage_place

Create an @F..@ record and write the FAMS/FAMC back-links on every person named.

add_child

family_id, child_id

Add an existing person as a child of an existing family.

set_parents

child_id, father_id, mother_id

Make the named people the child's parents. Reuses the parents' existing family if they already have one together (or fills the empty spouse slot of a one-parent family), otherwise creates a new one.

remove_individual

id

⚠️ Delete a person and every reference to them (as spouse or child). Families left with no members are removed as well.

All write tools return a WriteResult with the affected id, a human-readable message, and the path of the backup that was written.

Resources

For clients that support MCP resources:

URI

Content

gedcom://{file}

Markdown summary of the file (same data as file_summary).

gedcom://{file}/person/{id}

A Markdown card for one person — handy to attach to a conversation as context.

How editing works (safety guarantees)

GEDCOM files from commercial software are full of vendor extensions, odd ordering and encoding quirks, and most parsers silently drop or rewrite things they don't understand. This server avoids that entirely:

  1. The file is parsed into a tree of lines, and every line keeps its original raw bytes.

  2. Only a line that you actually change is re-rendered; everything else is written back exactly as it was read. parse(data).to_bytes() == data holds for every file we've tried.

  3. CONT/CONC continuation lines are handled as ordinary children of a line, so note text with embedded newlines or stray carriage returns round-trips correctly.

  4. Before saving, the previous content is copied to <name>.ged.bak; the new content is then written to a temporary file and atomically renamed over the original, so a crash mid-write can't leave you with a truncated file.

  5. Edited records get a CHAN / DATE / TIME stamp (local time, per GEDCOM convention) so you can see in any genealogy program what was touched.

  6. Deleting a person walks every family and removes their HUSB / WIFE / CHIL references; families left with nobody in them are deleted too. No dangling pointers.

Files are cached in memory and re-read automatically when their modification time or size changes, so you can edit them in other software while the server is running.

Working with Ancestry.com exports

Ancestry's Export tree produces a GEDCOM 5.5.1 file with a UTF-8 BOM, CRLF line endings, long numeric ids and a number of custom tags. All are preserved:

  • _APID — Ancestry's record-collection id on each citation. Surfaced on citations and sources so you can trace a fact back to the exact Ancestry record.

  • _OID, _MTYPE, _PRIM, OBJE — media links and metadata. Preserved untouched.

  • _MILT, _DEG, _EMPLOY etc. — custom facts. Preserved, and readable/editable via set_event with the raw tag name.

Editing an Ancestry export and re-importing it is up to Ancestry (their importer creates a new tree rather than merging), but the file stays valid for any desktop program — Family Tree Maker, RootsMagic, Gramps, Legacy — and for re-upload.

Development

uv venv && uv pip install -e ".[dev]"

pytest                                # 51 tests, ~1.5 s
ruff check src tests                  # lint
ruff format src tests                 # format
pyright                               # type-check
python tests/make_fixture.py          # regenerate tests/fixtures/sample.ged

Tests cover the lossless parser (round-trip of BOM + CRLF fixtures and files with embedded \r), the person/family model, search ranking and filters, every write tool (save → reload → assert, and untouched records byte-identical), and the MCP surface itself through an in-memory mcp.Client.

The .gitattributes marks *.ged as binary so fixture bytes are never altered by line-ending normalisation on checkout.

Architecture

src/gedcom_mcp/
  __main__.py      CLI entry point (argparse → configure → mcp.run())
  server.py        MCPServer instance; all @mcp.tool / @mcp.resource; converters to schemas
  config.py        Settings: root directory, safe file-name resolution, per-file cache
  schemas.py       pydantic output models (MCP structured output)
  gedcom/
    lines.py       Lossless line tree: GedLine / GedDocument, parse_bytes() / to_bytes()
    file.py        GedcomFile: load, xref index, CHAN stamping, atomic save + .bak
    model.py       Person / Family / Event / Citation / Source views over the line tree
    search.py      ranked search; ancestors() / descendants() walkers
    edit.py        every mutation (add/update/remove person, set_event, families, notes)
    dates.py       year extraction, normalisation, today's date in GEDCOM form
    names.py       "Given /Surname/ Suffix" parsing; accent-insensitive folding
tests/             pytest; fixtures/sample.ged is a synthetic Ancestry-style file

Data flows lines.pyfile.pymodel.pysearch.py / edit.pyserver.py. The line tree is the single source of truth; the model classes are thin views over it, and edits mutate the tree directly so nothing has to be "serialised back".

Dependencies: mcp (server framework), pydantic (output models), and ged4py — used only for its date parser and encoding detection, not as the storage layer.

Troubleshooting

The client says the server failed to start / no tools appear. Run the exact command from your config in a terminal. --gedcom-path must be an existing directory; the message will tell you if it isn't. On Windows use forward slashes or escaped backslashes in JSON.

No .ged files in … The directory is right but empty. Files must end in .ged (lower-case is safest).

Several GEDCOM files are available; pass 'file' More than one .ged in the directory — ask for the one you want by name.

Invalid file name File names must be bare names (My Tree or My Tree.ged), not paths.

Non-ASCII names don't display correctly. The file's declared CHAR is honoured (UTF-8, ANSEL, ASCII, …) and the encoding is auto-detected when the header is wrong. If a file was mis-encoded by the exporting software the text will look wrong everywhere, not just here.

I want to undo an edit. Copy <name>.ged.bak back over <name>.ged. Only the most recent pre-edit state is kept, so for longer histories keep the folder under version control or take periodic copies.

Enable debug output. Add -v to the args; output goes to stderr, which the client captures in its MCP log (Claude Desktop: Settings → Developer → Open Logs Folder; Claude Code: /mcp shows server status).

License

MIT © George Goosen

Available Tools

19 tools
add_childA

Add an existing individual as a child of an existing family.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
child_idYesRecord id such as @I12@
family_idYesRecord id such as @I12@

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful precondition that both the individual and family must already exist, but it does not describe side effects, duplicate handling, or what happens to existing family structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It immediately states the action and the required entities, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description states the core operation and preconditions, but it does not address edge cases like adding a child who is already associated with the family or whether existing children are replaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents file, child_id, and family_id with patterns and examples. The description adds no parameter-level detail beyond what the schema provides, fitting the baseline of 3 when structured data carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Add') and resource ('an existing individual as a child of an existing family'), making the operation clear. However, it does not distinguish this tool from potentially related siblings such as set_parents or add_individual, leaving some ambiguity for an agent choosing among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you want to add an existing individual as a child of an existing family), but it provides no explicit when-to-use guidance, prerequisites, or alternative tools. There is no exclusion or routing advice against siblings like set_parents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_familyB

Create a family (@F..@) linking spouses and/or children; FAMS/FAMC back-links are written too.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
wife_idNo
child_idsNo
husband_idNo
marriage_dateNo
marriage_placeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, covering the safety profile. The description adds useful context that FAMS/FAMC back-links are written, which is a behavioral trait beyond the annotations, but it does not describe prerequisites, permissions, or side effects on existing records in depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence that front-loads the core action and adds the back-link behavior without any filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter write tool with 83% of parameters undocumented and no explicit usage guidance, the description is too thin. It notes back-link writes and the family record format, but lacks prerequisites, ID expectations, and when-to-use alternatives among siblings like add_child or set_parents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% (just the 'file' parameter). The description maps vaguely to wife_id, husband_id, and child_ids by saying 'linking spouses and/or children', but it offers no ID format details and completely omits marriage_date and marriage_place, leaving most parameters undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create'), resource ('family'), and scope ('linking spouses and/or children'), plus the GEDCOM record format (@F..@). It does not explicitly contrast with siblings like add_child or set_parents, so it is clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool is for creating a family unit with spouses and/or children, but it gives no explicit when-to-use guidance, no exclusions, and no mention of alternative tools such as add_child or set_parents. An agent must infer usage from the action alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_individualB

Add a new individual and save. Returns the new @I..@ id; link them with add_family / set_parents.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexNoM, F or U
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
noteNo
givenYesGiven name(s)
surnameYes
birth_dateNo
death_dateNo
birth_placeNo
death_placeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds real context beyond that: the write is persisted ('and save') and the tool returns a GEDCOM @I..@ id, which the agent needs to chain further calls. It does not mention permissions, file-selection side effects, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and immediately followed by the return value and the follow-up routing. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile and an output schema exists, so return-value documentation is not strictly required (though the id note is a helpful preview). The main gap is the low schema description coverage for a 9-parameter tool, which the description does nothing to fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% across 9 parameters, so the description must compensate and it does not — it says nothing about birth/death dates, places, note, or sex. The only semantic addition is the @I..@ id return format, which relates to output rather than inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a new individual and save'), which cleanly separates it from update_individual, add_family, and set_parents. It does not explicitly contrast itself with those siblings, but the operation is unambiguous from the name plus description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'link them with add_family / set_parents' gives useful next-step routing, so the agent knows this tool only creates the record and a separate call wires up relationships. However, there is no explicit when-to-use vs update_individual guidance or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_noteC

Attach a free-text note to a record.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAny record id (@I..@, @F..@, @S..@)
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — it doesn't say whether the note is appended or replaces existing notes, nor anything about auth or scope constraints for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clean sentence with the verb and object front-loaded and zero filler. It is efficient, though arguably terse for a mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations carry the safety profile, so the description needn't explain returns. However, for a write operation with 3 parameters it omits any behavioral detail about what attaching a note actually does to the record, leaving it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so the schema documents the id pattern, the optional file argument, and the text field adequately. The description's phrase 'free-text note' loosely maps to the text parameter but adds no format, length, or target-type detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (attach) and resource (free-text note) with a clear target (a record). No sibling tool offers note functionality, so differentiation is implicit rather than stated, but an agent can still tell exactly what this does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no conditions, and no mention of alternatives among the numerous siblings (add_individual, update_individual, set_event, etc.). The usage context is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_fileA

Create a new, empty GEDCOM 5.5.1 file in the server's directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew file name, without path

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description usefully adds that the file is empty and written to the server's directory, but it omits a key behavioral question: what happens if a file of that name already exists (overwrite vs. error).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler; the action and the location constraint are front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation, and the one parameter is fully documented. The only notable omission is collision/overwrite behavior for an existing filename.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'name' parameter is documented as 'New file name, without path'. The description adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new, empty GEDCOM 5.5.1 file') plus a scope constraint ('in the server's directory'). It does not explicitly differentiate itself from siblings like rename_file or list_files, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the nature of the operation (you call this when you need a new file), but there is no explicit when-to-use guidance, no prerequisites, and no reference to alternatives such as rename_file. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

file_summaryA
Read-onlyIdempotent

Overview of a GEDCOM file: record counts, originating software, year range, most common surnames.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileYes
notesYes
sourcesYes
familiesYes
individualsYes
latest_yearNo
top_surnamesYes
earliest_yearNo
source_softwareNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds only what the summary contains, but no additional behavioral context such as error handling, file-format constraints, or multiple-file behavior; with annotations present, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence, front-loaded with the tool's purpose and output fields, with no filler or redundancy. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only summary tool with full schema coverage, clear annotations, and an output schema, the description is complete enough. It tells the agent what the tool provides without needing to restate parameter details or return-value structure already covered by structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% for the single optional file parameter, so the schema already documents its meaning and optionality. The description does not add any parameter semantics beyond what the schema provides, making the baseline of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (GEDCOM file) and enumerates what the overview covers: record counts, originating software, year range, and common surnames. This clearly differentiates it from siblings like list_files, get_individual, and search_individuals without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, exclusions, or alternatives. It does not say when to choose file_summary over list_files or other sibling tools, nor does it mention prerequisites like the file being present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ancestorsA
Read-onlyIdempotent

Pedigree tree (father/mother recursively) for an individual, up to N generations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
generationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
fatherNo
motherNo
personYes
truncatedNoTrue if more ancestors exist beyond the generation limit
generationYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, and idempotentHint=true, covering the safety profile. The description adds only that the traversal is recursive and bounded by N generations; it does not disclose pagination, performance limits, or error behavior beyond what annotations and output schema imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It conveys purpose, traversal direction, and depth constraint efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with an output schema and declarative annotations, the description covers the core operation and scope. It could be more complete by mentioning the file parameter or routing guidance against get_descendants, but those gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: id and file are described in the schema, but generations has no schema description. The description partially compensates by clarifying that generations controls depth ('up to N generations'), but it omits default (4) and maximum (10) details that an agent might need.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (get ancestors) and resource (pedigree tree for an individual), and clarifies the traversal direction (father/mother recursively) and depth (up to N generations). It distinguishes itself from siblings like get_individual and get_descendants by scope and direction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool does but gives no explicit guidance on when to use it versus alternatives such as get_descendants or get_individual. There are no exclusions, prerequisites, or context signals to help an agent choose between siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_descendantsA
Read-onlyIdempotent

Descendant tree (children per marriage, recursively) for an individual, up to N generations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
generationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personYes
familiesNo
truncatedNo
generationYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the result is a recursive tree grouped 'children per marriage' and bounded by a generation limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource, structure and limit all front-loaded. Nothing extraneous; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still previews the tree shape and generation bound. Slightly under-specified only on error/edge behavior (e.g., missing id, nonexistent file).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (id and file documented; generations has only default/min/max bounds with no description). The description's 'up to N generations' supplies the meaning of the undocumented generations parameter, so it partially compensates but doesn't fully close the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Descendant tree ... for an individual') plus the recursive structure and generation cap, clearly contrasting with the get_ancestors sibling by naming descendants rather than ancestors. It never explicitly names the alternative, but an agent can distinguish the two from the resource noun alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it applies 'for an individual,' which suggests the id-based lookup context. No when-to-use vs get_ancestors, no exclusions or prerequisites are stated, so the agent must infer the routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_familyB
Read-onlyIdempotent

One family record (@F..@): spouses, children, marriage and other family events.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
wifeNo
notesNo
eventsNo
husbandNo
childrenNo
citationsNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-open-world, so safety is covered. The description adds a content summary (spouses, children, marriage events) but does not add behavioral details beyond that; output schema covers return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single compact sentence front-loads the resource and its contents. No waste, though it is a noun fragment rather than a full sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present and annotations covering safety, the description is nearly sufficient. It could mention that id must reference a family record and that file is optional, but core completeness is high for a simple getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both id and file documented. The description only notes the @F..@ id format, which is redundant with the schema pattern/example, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource (family record), its GEDCOM identifier format (@F..@), and the contents (spouses, children, marriage and other family events). Distinguishes from get_individual and get_source by family scope, though it omits an explicit retrieval verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this tool versus get_individual, get_ancestors, or search_individuals. The context is inferable from the name and siblings, but no when-to-use or alternative guidance is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_individualB
Read-onlyIdempotent

Full record for one individual: names, all events/facts, notes, citations, parents, spouses, children, siblings.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
include_notesNoInclude note text
include_sourcesNoInclude source citations

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
sexNo
nameYes
givenYes
notesNo
eventsNo
suffixNo
parentsNo
surnameYes
familiesNoOne entry per marriage/partnership
siblingsNo
citationsNo
other_namesNo
last_changedNo
family_ids_as_childNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds that relatives and citations are part of the return payload, which is useful context, but it omits any optionality or file-selection behavior. With annotations doing the heavy lifting, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence lists the contents efficiently with no wasted words. It is compact and well-structured, though the enumerated list is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value formatting need not be explained. However, for a record-fetch tool that may require a file context, the description does not address how the optional file parameter interacts with single-file vs multi-file setups, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents id, file, include_notes, and include_sources. The description adds almost no parameter-level detail beyond the schema, which is the baseline expectation when coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb phrase, 'Full record for one individual,' and enumerates what the record contains (names, events, notes, citations, relatives). It distinguishes itself from list/search siblings by implying a single-record fetch, though it doesn't name a sibling directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no mention of when to prefer search_individuals or list_files, and no prerequisites such as the required id pattern. The agent must infer the use case from the name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sourceB
Read-onlyIdempotent

A source record (@S..@): title, author, publisher, repository, Ancestry _APID, and who cites it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
apidNo
textNo
notesNo
titleNo
authorNo
cited_byNoIndividuals with at least one citation of this source
publisherNo
repositoryNo
abbreviationNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and closed-world behavior, so the safety profile is covered. The description adds that a source record carries citation relationships ("who cites it"), which is mild extra context, but nothing about lookups failing, file scoping, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single terse sentence-fragment listing the record's contents; front-loaded and waste-free. It reads slightly like a glossary entry rather than an instruction, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and annotations cover the read-only/idempotent profile. What remains—the field list—is adequate context for a simple lookup tool, though the missing verb and absence of usage guidance are small gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the id pattern and the optional file parameter are already documented in the schema. The description's "(@S..@)" restates the id format already enforced by the pattern, adding no new syntax or behavioral detail about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description implies retrieval of a GEDCOM source record and enumerates the fields it contains, which distinguishes it from siblings like get_individual or get_family. However, it never states the verb explicitly ("retrieves a source record by id"); the intent is inferred from the tool name rather than asserted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no conditions selecting it over alternatives, and no mention of prerequisites such as needing a valid @S..@ id. The agent gets a listing of fields but nothing about when this tool is the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA
Read-onlyIdempotent

List the GEDCOM (.ged) files available to this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is fully covered by structured data. The phrase 'available to this server' adds a small amount of scope context consistent with the closed-world hint, but nothing about ordering, filtering, or failure behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The resource and scope constraint both land in the first clause, and there is nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema, the description needs only to identify the returned resource, which it does. It stops short of noting anything about result shape or whether files are enumerated as names vs. paths, but the output schema carries that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter semantics are needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and a precise resource ('GEDCOM (.ged) files'), with the scope of 'available to this server' scoping it against the machine's whole filesystem. It implicitly separates itself from file_summary and create_file, but the description never names a sibling to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives (e.g., file_summary for inspecting a chosen file), and no stated prerequisites or follow-up actions. The description only says what it returns, leaving routing entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_eventB
Destructive

Delete the index-th fact with the given tag from an individual or family.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
tagYes
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds that deletion targets a tagged fact selected by index, but omits what happens on out-of-range index or missing tag, and whether changes are persisted to the GEDCOM file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no redundancy, and the delete action plus its selector are front-loaded. It is efficient, though it could afford one more sentence for disambiguation without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and annotations cover the destructive nature. However, for a mutation tool with weak parameter coverage, the absence of usage routing and missing id/file semantics leaves gaps an agent would need to resolve elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate, yet it only implies the meaning of tag and index ('index-th fact with the given tag') and says nothing about the required id (whose @...@ pattern matters) or the file parameter. Two of four parameters remain effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (a fact with a given tag at a given index, on an individual or family). It does not explicitly distinguish itself from the sibling set_event, but the destructive framing is clear enough to pick it over read/add tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus set_event or other mutation tools, and no prerequisites or warnings about deleting the wrong fact. The agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_individualA
Destructive

Delete an individual and all references to them. Families left with no members are removed too.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: deletion cascades to all references and orphaned families are removed as well, which is collateral damage an agent must know before calling. It stops short of stating irreversibility or confirmation requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the primary action front-loaded and the cascade caveat following immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations carry the destructive profile. The description covers the critical cascade side effect, though it omits behavior when the id is not found or which file scope applies when multiple files exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (id with its @I12@ pattern, and the optional file) are fully documented in the schema. The description adds no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (an individual) and further scopes the operation with cascading behavior ('all references to them'). An agent can distinguish this from add_individual and update_individual immediately without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it (removing a person from the file), but there is no explicit when/when-not guidance and no alternative is named (e.g., update_individual for corrections instead of deletion). Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_fileB

Rename a GEDCOM file. Refuses to overwrite an existing file.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesExisting file name
new_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, closed-world operation. The description adds a genuinely useful behavioral constraint beyond that: it refuses to overwrite an existing file. However, it omits what error/return occurs on refusal and any permission or path-scope requirements, so the added value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero filler, with the primary action stated first and the key constraint second. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the annotations cover the safety profile. What remains missing for a mutation tool is clarification of the new_name parameter format and the failure mode when the target exists, leaving the definition minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% — 'file' is documented as 'Existing file name' but 'new_name' has no description at all. The description adds nothing about whether new_name is a bare name, a path, or whether extensions are required, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Rename a GEDCOM file'), making it immediately distinguishable from siblings like create_file, list_files, and file_summary. No ambiguity about what operation is performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives such as create_file (copy-then-delete) or how to handle conflicts. The agent is left to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_individualsA
Read-onlyIdempotent

Search individuals by name, birth/death year range, place or sex.

Matching is case- and accent-insensitive. Results are ranked: exact full-name matches first,
then surname/given matches, then partial matches; ties sort by surname then given name.
ParametersJSON Schema
NameRequiredDescriptionDefault
sexNoM or F
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
givenNoGiven-name filter (substring)
limitNo
placeNoMatches any event place, e.g. 'Bristol'
queryNoFree-text name match, e.g. 'john smith' or 'smith'
offsetNo
surnameNoSurname filter (substring)
birth_year_toNo
death_year_toNo
birth_year_fromNo
death_year_fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
offsetYes
resultsYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower. The description adds genuinely non-obvious behavior: matching is case- and accent-insensitive, and results are ranked by match quality with a specific tie-break order. It does not explain pagination interplay between limit/offset, but the ranking semantics are the more valuable disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the searchable fields before the matching/ranking rules. Every sentence carries information, though the ranking clause is dense and could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed. For a 12-parameter, zero-required search tool the description covers the semantically important filters and the ranking model; the missing pieces (file scoping, limit/offset behavior) are documented in the schema itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, the baseline for a 3. The description reinforces the meaning of query/given/surname, year ranges, place, and sex, and its note about accent-insensitive matching adds value beyond the raw schema strings. However, file, limit, and offset are left entirely to the schema, and the limit/offset interaction is never surfaced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Search individuals") and enumerates the searchable dimensions: name, birth/death year range, place, and sex. This clearly distinguishes it from point-lookup siblings like get_individual and get_family, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool name and the listed filters, but there is no explicit when-to-use/when-not-to-use guidance relative to siblings such as get_individual (exact lookup) or list_files. An agent must infer that this is the fuzzy/discovery entry point rather than one taking a known ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_eventA

Create or update an event/fact on an individual or family (e.g. set a birth date, add an occupation).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIndividual (@I..@) or family (@F..@) id
tagYesFact tag: BIRT, DEAT, BURI, CHR, OCCU, RESI, EVEN, CENS, EMIG, IMMI ... or MARR/DIV for families
dateNoGEDCOM date, e.g. '12 MAR 1840', 'ABT 1845'
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
typeNoTYPE sub-tag, used to describe EVEN/FACT facts
indexNoWhich fact with this tag to update (0 = first). Equal to the current count to add another.
placeNo
valueNoAttribute value (e.g. occupation text for OCCU)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety is covered. The description's contribution is the upsert framing ('Create or update'), which tells the agent this is not strictly a create, but it omits any mention of overwrite risk when index targets an existing fact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with parenthetical examples that earn their place by mapping natural-language facts to the tag parameter. No filler, though a second sentence clarifying the create-vs-update distinction would not have been waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 88% schema coverage, the agent does not need return-value documentation. The description adequately conveys the core operation, though the update-via-index mechanics and the GEDCOM file resolution are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so the schema already documents id, tag, date, type, index, and value thoroughly. The description only echoes tag semantics with examples ('birth date, add an occupation') and adds no format or constraint detail beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Create or update an event/fact on an individual or family') with concrete examples (birth date, occupation). It does not, however, distinguish itself from siblings like remove_event, update_individual, or add_family, so the agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Examples ('set a birth date, add an occupation') imply intent, but there is no explicit when-to-use guidance, no when-not, and no routing to alternatives such as remove_event for deletion or add_individual for the person record itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_parentsB

Make father/mother the parents of a child, reusing their existing family or creating one.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
child_idYesRecord id such as @I12@
father_idNo
mother_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only but non-destructive, closed-world mutation. The description adds real value by disclosing that existing family records are reused and a new one may be created. It says nothing about what happens when the child already has parents, whether both parents may be omitted, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence with the action front-loaded. The trailing clause about reusing or creating a family is somewhat compressed and slightly ambiguous, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. However, for a mutation that reshapes family structure, the description omits the key behavioral questions (replacement of existing parents, optionality of father vs mother, required permissions), leaving gaps for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and father_id/mother_id have no schema descriptions at all. The description's mention of 'father/mother' partially maps to those undocumented parameters but does not clarify whether either is required, whether omitting one is allowed, or the @I12@ id format beyond what child_id's schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: making a father/mother the parents of a child. It is clear and distinct from siblings like add_child or add_family, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus add_child, add_family, or update_individual, and no prerequisites or exclusions are given. The agent must infer usage entirely from the purpose sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_individualB

Change an individual's given name, surname and/or sex. Only supplied fields change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord id such as @I12@
sexNo
fileNoGEDCOM file name (with or without .ged). Optional when only one file exists.
givenNo
surnameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoId of the record created or modified
fileYes
backupNoPath of the .bak written before saving
messageYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered. The description adds genuine value beyond them by disclosing partial-update semantics: 'Only supplied fields change,' which tells the agent unsupplied fields are preserved. It stops short of stating error behavior or whether the id must already exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the operation and followed immediately by the partial-update rule. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description still leaves the 60% undocumented parameters (sex value format, given/surname semantics, file scope) largely to inference, which is a meaningful gap for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%: id and file are documented in the schema, while sex, given and surname have no schema descriptions. The description partially compensates by naming the three editable fields, but adds no format, valid-value, or null-handling detail for them. Baseline 3 given the moderate coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Change) plus the exact resource and target fields (an individual's given name, surname and/or sex). The verb 'Change' implicitly separates it from siblings like add_individual and remove_individual, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites (e.g. the record must exist), and never names alternatives such as add_individual or set_event. 'Only supplied fields change' is a behavioral note, not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 19 tool updatesv0.1.0
    • First observedadd_child
    • First observedadd_family
    • First observedadd_individual
    • First observedadd_note
    • First observedcreate_file
    • First observedfile_summary
    • First observedget_ancestors
    • First observedget_descendants
    • First observedget_family
    • First observedget_individual
    • First observedget_source
    • First observedlist_files
    • First observedremove_event
    • First observedremove_individual
    • First observedrename_file
    • First observedsearch_individuals
    • First observedset_event
    • First observedset_parents
    • First observedupdate_individual

TDQS

A3.5/5.0

Scored across 19 tools

Disambiguation4/5

Most tools have clearly distinct purposes (e.g., get_ancestors vs get_descendants, add_individual vs update_individual). However, set_parents and add_family both create family links, and add_child could be seen as a special case of add_family, causing slight overlap. Descriptions mitigate this by clarifying specific use cases.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_files, get_ancestors, add_individual, remove_event, etc.). No deviations or mixing of conventions.

Tool Count4/5

19 tools is on the higher end but appropriate for a GEDCOM server covering querying, traversal, and CRUD operations. Each tool appears to serve a distinct function, though the count could be slightly consolidated.

Completeness4/5

The surface covers most CRUD and traversal needs: file management (list, create, rename), individual and family creation/update/deletion, event handling, notes, and sources. However, there is no explicit tool to remove or update families, and no direct way to delete a note or source, leaving minor gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    D
    quality
    D
    maintenance
    Enables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.
    11
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables MCP clients to read and edit a Gramps family tree hosted on Gramps Web, with guarded write operations that tag new records as unconfirmed for review.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that visualizes git branch genealogy and worktree locations within a repository, marking the current session position. Supports creating branches/worktrees, safe deletion/cleanup, and session navigation with fallback guidance.
    2
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Read-only MCP server for genealogy data from Family Tree Builder (.ftb) or GEDCOM files, exposing tools for person search, family relationships, and statistical analysis via HTTP or stdio.
    Apache 2.0