gedcom-mcp
MCP server for reading, searching, and editing GEDCOM family-tree files (.ged) with lossless writes and backups.
Read tools: list files, file summaries, search individuals by name/place/years/sex, get full individual records, family records, source records, ancestor and descendant trees.
Write tools: create/rename GEDCOM files, add/update/remove individuals, set/remove events/facts, add notes, create families, add children, set parents, and delete individuals with back-reference cleanup.
Safety: every edit writes a .bak backup, stamps CHAN dates, preserves unknown tags/encoding/line endings, and saves atomically.
Resources:
gedcom://{file}summary andgedcom://{file}/person/{id}person cards for MCP resource-aware clients.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gedcom-mcpFind the parents of John Smith, born about 1840 in Bristol."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gedcom-mcp
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üllermatchesmuller), 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
_APIDrecord 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.bakfirst, 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) orpipAn 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 |
|
macOS / Linux |
|
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-mcpinstallsgedcom-mcponto yourPATH, or run it ad hoc withuvx --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-mcpOptions:
Flag | Description |
| Directory containing |
| Debug logging on stderr. |
| 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/genealogyAdd --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.jsonmacOS:
~/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:
list_files(orfile_summary) — see what's there.search_individuals— find people and get their ids.get_individual/get_family/get_ancestors/get_descendants/get_source— drill in.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
.gedextension:Smith Family TreeorSmith Family Tree.ged. Path separators,.., globs and control characters are rejected.filemay be omitted on every tool when the directory contains exactly one.gedfile. With several files, the error message lists the available names.
Dates
Dates are GEDCOM-style and are normalised on write:
Input | Meaning |
| Exact date |
| Partial date |
| Approximate / estimated / calculated |
| Before / after |
| Range |
| 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 — thenget_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")andadd_note(id="@I1@", text="Birth date corrected from baptism register …"). Both save immediately with a.bakwritten 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@, thenset_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 |
| — | Each |
|
| Record counts (individuals, families, sources, notes), originating software, earliest/latest year, top surnames. |
|
| Ranked matches with id, name, sex, birth and death (date + place), plus |
|
| Full record: all names, every event/fact with date, place, value, citations and notes; parents; each marriage with spouse and children; siblings; |
|
| Husband, wife, children (with life spans), marriage/divorce and other family events, notes, citations. |
|
| Pedigree tree — each node is a person with |
|
| Descendant tree — each node lists marriages, and each marriage its children as sub-trees. |
|
| Title, author, publication, repository, Ancestry |
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 a new, empty GEDCOM 5.5.1 file (UTF-8, with header and submitter). |
|
| Rename a file. Refuses to overwrite an existing one. |
|
| Add a person. Returns the new |
|
| Change name parts and/or sex. Only supplied fields change; other name sub-tags are kept. |
|
| Create or update a fact. |
|
| ⚠️ Delete the Nth fact with that tag, including its citations and notes. |
|
| Attach a free-text note. Multi-line text is folded into |
|
| Create an |
|
| Add an existing person as a child of an existing family. |
|
| 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. |
|
| ⚠️ 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 |
| Markdown summary of the file (same data as |
| 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:
The file is parsed into a tree of lines, and every line keeps its original raw bytes.
Only a line that you actually change is re-rendered; everything else is written back exactly as it was read.
parse(data).to_bytes() == dataholds for every file we've tried.CONT/CONCcontinuation lines are handled as ordinary children of a line, so note text with embedded newlines or stray carriage returns round-trips correctly.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.Edited records get a
CHAN/DATE/TIMEstamp (local time, per GEDCOM convention) so you can see in any genealogy program what was touched.Deleting a person walks every family and removes their
HUSB/WIFE/CHILreferences; 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,_EMPLOYetc. — custom facts. Preserved, and readable/editable viaset_eventwith 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.gedTests 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 fileData flows lines.py → file.py → model.py → search.py / edit.py → server.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 toolsadd_childA
Add an existing individual as a child of an existing family.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| child_id | Yes | Record id such as @I12@ | |
| family_id | Yes | Record id such as @I12@ |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| wife_id | No | ||
| child_ids | No | ||
| husband_id | No | ||
| marriage_date | No | ||
| marriage_place | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | M, F or U | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| note | No | ||
| given | Yes | Given name(s) | |
| surname | Yes | ||
| birth_date | No | ||
| death_date | No | ||
| birth_place | No | ||
| death_place | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Any record id (@I..@, @F..@, @S..@) | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New file name, without path |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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_summaryARead-onlyIdempotent
Overview of a GEDCOM file: record counts, originating software, year range, most common surnames.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| notes | Yes | |
| sources | Yes | |
| families | Yes | |
| individuals | Yes | |
| latest_year | No | |
| top_surnames | Yes | |
| earliest_year | No | |
| source_software | No |
TDQS
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.
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.
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.
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.
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.
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_ancestorsARead-onlyIdempotent
Pedigree tree (father/mother recursively) for an individual, up to N generations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| generations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| father | No | |
| mother | No | |
| person | Yes | |
| truncated | No | True if more ancestors exist beyond the generation limit |
| generation | Yes |
TDQS
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.
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.
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.
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.
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.
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_descendantsARead-onlyIdempotent
Descendant tree (children per marriage, recursively) for an individual, up to N generations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| generations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| person | Yes | |
| families | No | |
| truncated | No | |
| generation | Yes |
TDQS
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.
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.
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.
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.
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.
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_familyBRead-onlyIdempotent
One family record (@F..@): spouses, children, marriage and other family events.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| wife | No | |
| notes | No | |
| events | No | |
| husband | No | |
| children | No | |
| citations | No |
TDQS
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.
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.
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.
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.
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.
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_individualBRead-onlyIdempotent
Full record for one individual: names, all events/facts, notes, citations, parents, spouses, children, siblings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| include_notes | No | Include note text | |
| include_sources | No | Include source citations |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| sex | No | |
| name | Yes | |
| given | Yes | |
| notes | No | |
| events | No | |
| suffix | No | |
| parents | No | |
| surname | Yes | |
| families | No | One entry per marriage/partnership |
| siblings | No | |
| citations | No | |
| other_names | No | |
| last_changed | No | |
| family_ids_as_child | No |
TDQS
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.
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.
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.
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.
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.
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_sourceBRead-onlyIdempotent
A source record (@S..@): title, author, publisher, repository, Ancestry _APID, and who cites it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| apid | No | |
| text | No | |
| notes | No | |
| title | No | |
| author | No | |
| cited_by | No | Individuals with at least one citation of this source |
| publisher | No | |
| repository | No | |
| abbreviation | No |
TDQS
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.
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.
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.
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.
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.
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_filesARead-onlyIdempotent
List the GEDCOM (.ged) files available to this server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_eventBDestructive
Delete the index-th fact with the given tag from an individual or family.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| tag | Yes | ||
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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_individualADestructive
Delete an individual and all references to them. Families left with no members are removed too.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Existing file name | |
| new_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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_individualsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | M or F | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| given | No | Given-name filter (substring) | |
| limit | No | ||
| place | No | Matches any event place, e.g. 'Bristol' | |
| query | No | Free-text name match, e.g. 'john smith' or 'smith' | |
| offset | No | ||
| surname | No | Surname filter (substring) | |
| birth_year_to | No | ||
| death_year_to | No | ||
| birth_year_from | No | ||
| death_year_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| offset | Yes | |
| results | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Individual (@I..@) or family (@F..@) id | |
| tag | Yes | Fact tag: BIRT, DEAT, BURI, CHR, OCCU, RESI, EVEN, CENS, EMIG, IMMI ... or MARR/DIV for families | |
| date | No | GEDCOM date, e.g. '12 MAR 1840', 'ABT 1845' | |
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| type | No | TYPE sub-tag, used to describe EVEN/FACT facts | |
| index | No | Which fact with this tag to update (0 = first). Equal to the current count to add another. | |
| place | No | ||
| value | No | Attribute value (e.g. occupation text for OCCU) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| child_id | Yes | Record id such as @I12@ | |
| father_id | No | ||
| mother_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id such as @I12@ | |
| sex | No | ||
| file | No | GEDCOM file name (with or without .ged). Optional when only one file exists. | |
| given | No | ||
| surname | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Id of the record created or modified |
| file | Yes | |
| backup | No | Path of the .bak written before saving |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
19 tool updates
v0.1.0- First observed
add_child - First observed
add_family - First observed
add_individual - First observed
add_note - First observed
create_file - First observed
file_summary - First observed
get_ancestors - First observed
get_descendants - First observed
get_family - First observed
get_individual - First observed
get_source - First observed
list_files - First observed
remove_event - First observed
remove_individual - First observed
rename_file - First observed
search_individuals - First observed
set_event - First observed
set_parents - First observed
update_individual
TDQS
Scored across 19 tools
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.
All tool names follow a consistent verb_noun pattern (list_files, get_ancestors, add_individual, remove_event, etc.). No deviations or mixing of conventions.
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.
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
Related MCP Connectors
Human Lineage MCP server — search and query the public genealogical graph of all humanity
Create, edit, restructure, import and export Atlas Red mind maps from any MCP client. Free.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Personal knowledge graph as an AI memory layer over MCP - read, save, and link your memories.
Related MCP Servers
- AlicenseDqualityDmaintenanceEnables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.117 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables 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.1MIT
- FlicenseNot gradedqualityBmaintenanceMCP 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-
- AlicenseNot gradedqualityAmaintenanceRead-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