Skip to main content
Glama

genealogy-mcp — find your family history with any AI assistant

Русская версия

CI PyPI Python MCP Registry License: MIT

An MCP server that turns Claude, ChatGPT, Cursor or any MCP-capable assistant into a careful genealogist. It knows where the records of your ancestors are (171 archives and databases across Russia and the former USSR, Europe, the British Isles, the USA and Latin America), how to search them (name variants, transliterations, old spelling, the Julian calendar), and when a find really is your person — so the assistant gives you working links and a plan instead of confident guesses.

Built from years of real research for an open family archive powered by gene_archive: parish registers, revision lists, WWI and WWII databases, repression files, emigration records — and every trap we fell into along the way. The story behind it: an article on Habr (in Russian).

You ask your assistant; genealogy-mcp knows where to look, how to search, how to read old dates and whether a find is your person, and writes into your project, your own GEDCOM tree or your family site

At a glance

  • 171 archives and databases in 55 countries, each with what it holds and how to search it well — and which archive holds the records of a historical province today (borders moved; the answer is often not the obvious one).

  • 31 tools for the real work of a genealogist: name variants and 9 transliteration systems, Daitch–Mokotoff, Julian, Hebrew and French Republican calendars, dates by church feasts, Church Slavonic numerals, kinship in three languages, DNA, evidence checks, a tree audit, live search in open databases, archive request drafts.

  • It works on your tree, not beside it. Point it at the .ged file from MyHeritage, Ancestry, Gramps or RootsMagic and it reads, searches and changes it in place — only the changed lines, everything else byte for byte, a copy kept, every change shown first. Or at a gene-archive family website: changes go through the site's checks, logs and git history.

  • It remembers. Sources with full citations, open leads and every search — "nothing found" included — so nobody searches the same place twice.

  • Honest by design. A namesake is not a relative: a find is linked only with two independent facts beyond the name.

  • Private. Runs on your computer; goes online only for a search you ask for, and only to that one site.

  • Any assistant: Claude Desktop (one-click install), Claude Code, ChatGPT, Cursor, VS Code, Windsurf, Cline.

  • Guides in English, Russian and Ukrainian, the main ones also in Spanish, Portuguese, Polish and German.

Related MCP server: ftb-mcp

Quick start

Claude Desktop: download genealogy-mcp-<version>.mcpb from the latest release and open it. Claude Code: claude mcp add genealogy -- uvx genealogy-mcp. Anything else: uvx genealogy-mcp as the server command (details in Install).

Then just ask: "Help me find my great-grandfather. Here is what I know…"

What you can ask

My great-grandfather Ivan Kolodin was born about 1885 near Bogoroditsk, Tula province. Where do I look?

The assistant makes a plan for Russia 1880–1945, reads the record guides, builds the name forms (Колодин / Колодина / Колодинъ / Kolodin / Kołodin…), gives you search links for FamilySearch, the Internet Archive full text and the Russian war databases, tells you which archive holds the parish registers and drafts the request.

Is this baptism record the same Ivan? It says «Іоаннъ, father Петръ, 1887, Сынково».

check_match compares fact by fact with name variants and age tolerance: two independent facts beyond the name → confirmed; one → probable; a contradiction → find a third document.

What is my grandmother's cousin's daughter to me? И как это по-русски?

kinship → «троюродная сестра… / first cousin once removed» — in Russian, English and Romanian, with the expected DNA share.

Check my tree. (a GEDCOM from Ancestry, MyHeritage, Gramps, Geni…)

audit_tree finds the impossible (born after the mother's death, a mother aged 10, death before birth), possible duplicates and gaps — a to-do list for the next search.

The register says he was born «на Покров» 1885, the year is written ҂аѡ҃пе.

cyrillic_numerals reads the year (1885), feast_date gives 1 October (Julian) = 13 October 1885.

We share 230 cM with a match on MyHeritage. Who could she be?

dna_match: second cousin, first cousin twice removed, half first cousin… — and why only documents can decide.

Where are the parish registers of Volhynia governorate now?

where_are_records: the state archives of Zhytomyr (the consistory), Rivne and Volyn — borders moved, so it is not always the archive of today's region.

Remember what we found, and continue next week.

A research project on your computer: people, sources with full citations, open leads and a log of every search — including "nothing found" — so nobody searches the same place twice. GEDCOM in and out.

Write what we found into our family site.

If your family archive is a gene-archive site, give the project tools the path of its folder: the assistant reads the archive itself — who is missing, which dates have no document — and every change it makes goes through the site's own checks, lands in its corrections and research logs, is committed to git under your name and rebuilds the site. It shows the change first and writes only after your yes.

Here is my tree — add what we found.

Or give it the GEDCOM file of the tree you keep in MyHeritage, Ancestry, Gramps, RootsMagic, Family Historian or webtrees: the assistant reads it, searches it and changes it in place. Only the lines of what changed are rewritten — your program's own tags, photos, notes and the header stay byte for byte; it shows those lines before writing, keeps a copy of the file, and keeps the search log, leads and corrections in a file next to it. Then import the file back into your program (Family Historian and webtrees work on GEDCOM directly). Files not in UTF-8 are read-only.

Why use it

Without it

With genealogy-mcp

The assistant names two or three famous websites

171 sources chosen by country, years and kind of record, each with "how to search it well"

Searches one spelling

Spelling variants, pre-1918 orthography, male/female forms, 9 transliteration systems, given-name equivalents (Иван = Іоаннъ = Jan = Johann = Juan)

Invented or broken URLs

Ready search links built from tested URL templates; a weekly job checks every site

"This is probably your ancestor"

An explicit evidence rule: a namesake is not a relative

Dates taken at face value

Julian ↔ Gregorian, birth years from ages with realistic drift, dates normalised to GEDCOM

Generic advice

Record guides: parish registers, confession lists, revision lists, household books, WWI/WWII, repression files, passenger lists, censuses, European civil registration, Latin American records

You write to archives from scratch

Request drafts for Russian ZAGS, state, military and FSB archives, and for any archive in English, Spanish or Portuguese

It forgets everything between chats

A research project that remembers people, sources, leads and every search

It cannot touch your tree

Reads and changes your own GEDCOM file in place, losing nothing, showing every change first

It cannot read old numbers and dates

Church Slavonic numerals, church feasts, Julian, Hebrew and French Republican calendars

"Search FamilySearch for your name"

Live search in the Internet Archive full text, WikiTree, Open Archives and Wikidata place history

DNA matches are a mystery

Shared cM → the relationships it fits

Most genealogy MCP servers connect the assistant to one service or one file. genealogy-mcp gives it the research method around them — where to look, how to search, how to read and weigh what it finds — and works on your own tree file too. It runs happily next to a server for a service you use, such as a FamilySearch client.

Everything runs on your computer. The server goes online only when the assistant runs a live search (search_online, search_book_pages, place_history), and then sends that query to that one site.

Coverage

  • Worldwide: FamilySearch (records and the catalogue of unindexed images), Internet Archive full text, MyHeritage, Geni, WikiTree, Find a Grave, BillionGraves, Arolsen Archives, Yad Vashem, JewishGen, Matricula, Geneanet, Wikipedia.

  • Russia and the USSR: Yandex Archive, archive guides, VGD forum, Pamyat Naroda, OBD Memorial, gwar.mil.ru, Road of Memory, Immortal Regiment, Open List, Immortal Barrack, Returned Names, PSTGU martyrs, NashiPredki, metricabook.ru, Rodovod, Presidential and National Electronic Libraries, historical libraries, old maps, church history, RIA-1914, regional archives, ZAGS, TsAMO, RGVIA, RGIA, GARF.

  • Ukraine, Belarus, Moldova, Romania, Poland, the Baltics: national archive portals and catalogues, TsDIAK, genealogica.ro, Genealogy of Bessarabia, deportari.org, Cartea Memoriei, the Moldavian censuses of 1772–1774, Geneteka, Szukajwarchiwach, epaveldas, Raduraksti, the Estonian archives.

  • Europe: ICRC WWI prisoners, CWGC, Volksbund, ScotlandsPeople, FreeBMD, Irish civil and census records, Archion, GenWiki, FranceArchives, Mémoire des hommes, Antenati, PARES, Digitarq, Open Archives (NL), Belgian State Archives, Riksarkivet, Digitalarkivet, Danish Family Search, HisKi, Finnish Digital Archive, Hungaricana, Acta Publica (Czechia), Bulgarian state archives, FreeCEN, FreeREG, The National Archives, GRO, Welsh Newspapers.

  • Germany and German-speaking lands: WWI casualty lists, GEDBAS, Online-OFB, German Digital Library, Bundesarchiv, Baltic Biographical Lexicon, Black Sea Germans (Odessa3), Poznań Project, Metryki.

  • Jewish genealogy: JRI-Poland, Gesher Galicia, LitvakSIG, JewishGen, Yad Vashem, Steve Morse One-Step tools.

  • Caucasus and Central Asia: National Archives of Georgia, the central state archives of Kazakhstan, Uzbekistan, Kyrgyzstan, Tajikistan and Turkmenistan.

  • The Americas: FamilySearch Latin America, AGN Mexico, Arquivo Nacional and Museu da Imigração (Brazil), Hemeroteca Digital, CEMLA and AGN (Argentina), Archivo Nacional (Chile), NARA, Ellis Island, Chronicling America, USGenWeb, Library and Archives Canada, BAnQ (Quebec), Pier 21.

  • Australia and New Zealand: Trove, National Archives of Australia, Papers Past, New Zealand BDM.

Record guides in English, Russian and Ukrainian, the main ones also in Spanish, Portuguese, Polish and German.

Install

Claude Desktop, one click: download genealogy-mcp-<version>.mcpb from the latest release and open it — Claude Desktop installs it and asks where to keep your research projects.

For the other ways you need uv (it fetches Python and the package by itself).

Claude Desktop, by hand — Settings → Developer → Edit Config, add:

{
  "mcpServers": {
    "genealogy": {
      "command": "uvx",
      "args": ["genealogy-mcp"]
    }
  }
}

Claude Code:

claude mcp add genealogy -- uvx genealogy-mcp

Cursor (~/.cursor/mcp.json), Windsurf, Cline — the same mcpServers block as for Claude Desktop. VS Code (.vscode/mcp.json): {"servers": {"genealogy": {"command": "uvx", "args": [ …same… ]}}}.

Docker: docker build -t genealogy-mcp . then docker run -i --rm genealogy-mcp (stdio) or docker run --rm -p 8000:8000 genealogy-mcp --http --host 0.0.0.0 (HTTP at /mcp).

Your gene-archive site as the project: install the server together with gene-archive — pip install "genealogy-mcp[site]" or uvx --from "genealogy-mcp[site]" genealogy-mcp (the gene command is found on PATH or next to the server's Python; elsewhere set GENE_CMD), then name the folder in GENEALOGY_MCP_SITES (or in the Claude Desktop extension settings), or just give its path to the assistant. GENE_AUTHOR sets the name in the git history (default: git config user.name).

Your tree in a GEDCOM file as the project: give the assistant the path of the .ged file (or name it in GENEALOGY_MCP_SITES). Copies are kept as tree.ged.bak (before the last change) and tree.before-genealogy-mcp.ged (before the first); the log lives in tree.ged.research.json.

Clients that connect over HTTP (ChatGPT connectors, remote agents): run genealogy-mcp --http --host 0.0.0.0 --port 8000 behind HTTPS and add https://your-host/mcp. In HTTP mode audit_tree takes the GEDCOM text only, never a file path.

The package is on PyPI and in the official MCP Registry (io.github.igormel81/genealogy-mcp): uvx genealogy-mcp installs and runs it.

Research workflow

Start from project_view: policy, local sources, active questions and owner tasks. Work from family documents and the civil registry through existing records to primary sources, then secondary leads. project_policy configures limits and archive-request preferences per project. Leads have a next step; source checks distinguish no hits from an inaccessible site. Custom archive folders without site.json are readable without converting or changing them. See workflow, policy and source checks.

The 171 catalogue entries are recommendations, not 171 live connectors. Six services support search_online; Wikidata supplies place history. Other sources need a browser or documents supplied by the user. Gallica page search and event evidence are described in books and event citations.

Tools

Tool

What it does

plan_research

A step-by-step plan for a country and period: which records exist, guides, sources in order

find_sources

Sources by country/region (europe, latin_america, russian_empire…), years and record kind

source_details

One source: coverage, access, how to search

where_are_records

Which archives now hold the records of a historical province (Russian Empire, Poland, Galicia, Bukovina, East Prussia, the Baltics, the Caucasus); with a year, whose land it was then (southern Bessarabia: Moldavia/Romania 1857–1878, Romania 1918–1944); with a village, which church kept its books

search_links

Ready search URLs for a name and its variants

search_online

Live search: Internet Archive full text, Chronicling America, WikiTree, Open Archives, Open List, Gallica OCR document search

place_history

Wikidata: what a village belonged to over the years, coordinates, Wikipedia article; the church it was attached to, where known

name_variants

Spelling, old orthography, gendered forms, transliterations, Daitch–Mokotoff codes, given-name equivalents (incl. Yiddish and Hebrew), patronymics; Moldovan surnames in Romanian, Russian and Soviet Moldavian forms, a second surname («Мокану, он же Плеш») flagged

normalize_date

"около 1899", "9 de octubre de 1899" → ABT 1899, 9 OCT 1899

convert_calendar

Julian ↔ Gregorian, Hebrew, French Republican

feast_date

«на Покров», «после Петрова поста», Easter, Wielkanoc… → the date in a given year

cyrillic_numerals

҂аѡ҃п ↔ 1880

birth_year_from_age

The birth-year range from an age in a record

estimate_birth_year

A birth year from relatives (eldest child −27, spouse and siblings ±8, parents +18…+45) and ages: BET … AND … / ABT … with a ready explanation; ages that cannot be one person flagged as likely namesakes

kinship

The name of a relation in ru/en/ro, with the expected DNA share

dna_match

Shared cM → the relationships it fits (Shared cM Project 4.0)

check_match

Is a found record our person? A verdict with every fact compared (Hispanic double surnames too)

parent_hypothesis

A parent hypothesis from a patronymic: candidates ranked by name, village and age, arguments for and against (grandson's name, godparents, sureties), a warning for namesakes from another village, the record that would settle it — a lead, never a link

audit_tree

Impossible facts, duplicates and gaps in a GEDCOM or family_tree.json

project_view, project_save, project_log, project_transfer

The research project between conversations: people, families, sources, leads, the search log, GEDCOM import/export — or a gene-archive site folder, written through its checks and logs, or your own .ged file, changed in place

search_book_pages

OCR excerpts within a Gallica book, scan sequence numbers and stable page links

project_evidence

Event-by-event citation coverage, broken references and missing locators, prioritized by generation

project_policy

Policy for this project: active-question limit, archive drafts, living-person research and owner tasks

project_coverage

What has been read: parish → year → part → film and frames → complete / partial up to No. … / not found; what is still unread for these villages and years

film_reading_plan

Reading an unindexed FamilySearch film page by page: which films in which order, thumbnails vs full frames, a request budget under the rate limit, what to log

draft_archive_request

A request letter to a registry office or archive

record_guide

How to read and find a kind of record

glossary

Old Russian record terms explained

Resources: genealogy://sources (the catalogue), genealogy://guide/research/{en|ru} (a full research guide), genealogy://guide/prompts/{en|ru} (ready requests for each step), genealogy://records/{topic}, genealogy://glossary. Prompts: start research, check a find, transcribe a record, write to an archive.

Privacy and honesty

  • The server sends nothing anywhere by itself. A live search (search_online, search_book_pages, place_history) sends the query — names, years, place — to the one site searched. Research projects are files on your computer (~/Documents/genealogy-mcp or GENEALOGY_MCP_HOME); on a shared HTTP server they are switched off.

  • The assistant you use is a separate service with its own privacy policy — think before pasting details about living people.

  • Letters are drafts: you check and send them.

  • The rules the assistant gets: cite the original, keep conflicting versions, mark guesses as "probably", never link a namesake without evidence.

Benchmark

evals/tasks.json holds 35 questions with checkable answers: dates by church feasts, Julian, Hebrew and Republican calendars, Cyrillic numerals, Daitch–Mokotoff, Moldovan surnames, DNA, kinship, old terms, archives of historical provinces and borders by year, evidence checks, ages that cannot be one person, record history. evals/check_tools.py runs in CI and checks that the tools answer all of them correctly. evals/run.py asks a Claude model the same questions without the server and with it and scores both (needs an API key; it costs money, so it is run by hand: Actions → Benchmark).

Contributing

See CONTRIBUTING.md for source fields and contribution guidelines. A source is missing or a link moved? Edit tools/make_sources.py, run python3 tools/make_sources.py and python3 -m unittest discover tests, open a pull request. Record guides live in src/genealogy_mcp/guides.py.

See also

  • gene_archive — an open-source engine for a family archive website: tree, stories, documents, map, GEDCOM, an online editor and relatives' comments.

MIT License.

Available Tools

31 tools
audit_treeA
Read-only

Audit a family tree from any program (GEDCOM) for impossible facts (born after the mother's death, a parent under 14, death before birth), possible duplicates and gaps (no sources, no dates, people cut off from the tree) — a to-do list for the next search.

NameRequiredDescriptionDefault
fileYesPath to a GEDCOM (.ged) or family_tree.json file, or the GEDCOM text itself
langNoen
codesNoOnly these checks: death_before_birth, born_after_mother_death, born_after_father_death, parent_young, parent_old, married_young, long_life, possible_duplicate, bad_date, unconnected, no_documents, event_no_source, no_dates, family_no_source, no_sex
limitNo

Output Schema

NameRequiredDescription

No output parameters

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 and openWorldHint=false, so safety and locality are covered structurally. The description adds the audit categories and confirms the output is a prioritized to-do list, but says nothing about how the `limit` caps findings, whether long trees are truncated, or reporting format.

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 dense sentence, front-loaded with the verb and resource, then the finding categories and the outcome. No filler, though the parenthetical example list is long enough to blunt the front-loading slightly.

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 safety profile. Still, a 4-parameter tool with an unexplained `limit` and `lang`, plus no routing guidance against the many sibling research tools, leaves gaps an agent would have to guess at.

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% — `lang` and `limit` carry no descriptions anywhere, and the description never explains them (e.g. does limit truncate the checklist?). The `file` and `codes` semantics are already fully documented in the schema, so the description adds essentially nothing for parameters despite 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 concrete verb (audit) and resource (family tree / GEDCOM) and enumerates the exact classes of findings it produces (impossible facts, duplicates, gaps). No sibling tool performs auditing, so it is trivially distinguishable, and the 'to-do list for the next search' framing clarifies the output's purpose.

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: the 'to-do list for the next search' hint suggests running it before planning searches, but it never says when to prefer this over plan_research, find_sources, or where_are_records, nor any prerequisites. Adequate context, no explicit when/when-not guidance.

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

birth_year_from_ageA
Read-only

The birth-year range implied by an age in a record (census, confession list, death record), exact and loose.

NameRequiredDescriptionDefault
ageYes
record_dateYesDate or year of the record that gives the age

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish read-only and closed-world behavior. The description adds that the result is a range with 'exact and loose' variants, but it does not define those variants, state assumptions, or explain calendar handling, so the added behavioral context is limited.

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 compact, front-loaded sentence with no filler. Although 'exact and loose' is cryptic, the overall structure is appropriate and every phrase contributes.

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 two-parameter calculation tool, annotations cover safety and an output schema exists for return values, so the description need not explain output. It still omits routing guidance versus sibling date tools and leaves 'exact and loose' input assumptions implicit, but it is effectively complete for basic invocation.

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%: record_date has a schema description, while age does not. The description clarifies that age comes from a historical record and lists example record types, but it does not specify age units, expected format, or how record_date affects the calculation.

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 names the resource and computation clearly: a birth-year range implied by an age in a record, with concrete record contexts. It does not explicitly differentiate from sibling tools such as normalize_date or convert_calendar, so it is clear but lacks named 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 Guidelines3/5

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

It implies use when interpreting an age from a census, confession list, or death record, giving useful context. However, it provides no explicit when-not conditions and does not name alternative tools, so usage must be inferred.

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

check_matchA
Read-only

Is the person in a found record ours? Compares fact by fact (with name variants and Julian/rounded-age tolerance) and gives a verdict: confirmed (2+ independent facts beyond the name), probable, insufficient, conflict or different_person.

NameRequiredDescriptionDefault
langNoen
foundYesThe same fields from the found record
knownYesWhat we know about our person: given, surname, patronymic, father_given, mother_given, mother_surname, spouse_given, spouse_surname, birth_year, birth_place, residence, death_year, children (list), occupation
year_toleranceNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds real behavioral context beyond that: the fact-by-fact comparison method, name-variant handling, Julian calendar and rounded-age tolerance, and a full verdict taxonomy with a threshold for 'confirmed'. It omits nothing critical for a pure local computation.

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, front-loaded with the core question and a tight parenthetical on special handling, then the verdict list. No filler; 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?

With an output schema present, the description need not explain return values, yet it helpfully enumerates verdicts anyway; annotations cover the safety profile. The remaining gap is the unexplained 'lang' and 'year_tolerance' semantics, which is minor for this comparison 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%: 'known' and 'found' are described, but 'lang' and 'year_tolerance' have no descriptions in the schema. The description hints at tolerance behavior (Julian/rounded-age) without mapping it to 'year_tolerance', and never explains what 'lang' controls. Adequate but not compensating 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?

Opens with a specific question ('Is the person in a found record ours?') that names the exact verb (compare fact by fact) and resources (known person vs. found record), then enumerates the output verdicts. This is clearly distinguishable from DNA-based siblings like dna_match and kinship.

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?

Implies the usage context (comparing a known person against a discovered record to decide if it is the right person) and gives useful decision criteria ('2+ independent facts beyond the name' = confirmed). However, it names no alternatives and states no when-not-to-use conditions, e.g. when to prefer dna_match.

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

convert_calendarA
Read-only

Convert between calendars of old records: Julian (old style; Russia until February 1918: +10 days in the 1600s, +11 in the 1700s, +12 in the 1800s, +13 in 1900–1918), Gregorian, Hebrew (Jewish registers, tombstones) and the French Republican calendar (1792–1805).

NameRequiredDescriptionDefault
toNogregorian
dateYes'1899-10-09' / '9.10.1899' (Julian or Gregorian), '15 Nisan 5650' (Hebrew), '18 Brumaire an VIII' (French Republican)
from_calendarNoThe calendar of `date`; auto: Hebrew and Republican are recognised by month names, a plain date is Julian when converting to Gregorian and vice versaauto

Output Schema

NameRequiredDescription

No output parameters

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 and openWorldHint=false, so safety is covered. The description contributes real domain behavior (the century-dependent Julian drift: +10 in 1600s through +13 in 1900–1918), which is useful context beyond the annotations, but it says nothing about error handling, ambiguous-input resolution, or out-of-range dates.

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 dense sentence that front-loads the core action and then parenthetically supplies the historical windows; every clause carries information. It is slightly over-packed but no sentence is wasted.

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 documentation is not needed, and annotations cover the read-only/no-network profile. For a three-parameter read-only conversion tool, the description supplies enough domain framing, with only ambiguity/error behavior left unspecified.

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%, and the schema itself already documents the date string formats and explains that 'auto' recognizes Hebrew/Republican by month names. The description reinforces the calendar set and historical windows but adds little syntax or semantic detail for 'to' or 'from_calendar' beyond what the schema 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?

States a specific verb (convert) and resource (calendars) and enumerates exactly which calendars are supported, which is concrete and unambiguous. It does not, however, differentiate itself from siblings like normalize_date or feast_date, so the agent gets the 'what' but not the 'why not that one'.

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 through domain context ('old records', the Julian windows before 1918 and Republican 1792–1805), which hints at genealogical date scenarios. There is no explicit when-to-use-vs-alternatives guidance relative to normalize_date or feast_date, so an agent must infer the boundary itself.

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

cyrillic_numeralsA
Read-only

Church Slavonic numerals in old registers and church books: ҂аѡ҃п = 1880, ѳі = 19 (11–19 are written units first). Reads letters, writes a number, or finds every numeral marked with a titlo in a text.

NameRequiredDescriptionDefault
valueYesLetters to read ('҂аѡ҃п', 'ѳі') or a number to write (1880), or a transcription to scan for numerals

Output Schema

NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the safety profile is covered and even the apparent 'writes a number' phrase is not a contradiction (it means emitting a numeral, not persisting). The description adds genuine behavioral context (the titlo-scan mode, the 11–19 units-first rule), but says nothing about error handling or ambiguous input.

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 with examples that earn their place by anchoring the numeral formats. Front-loaded with the domain context, though it is dense and the mode list could be split more cleanly.

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 single-parameter tool with an output schema, the description supplies enough domain context (notation examples, the three operating modes) to invoke it correctly. The only real gap is how the tool disambiguates modes from a single free-form `value`.

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 100% and the schema's own description already explains that `value` may be letters, a number, or a transcription. The description adds example formats and the 11–19 ordering note, which helps interpret inputs, but does not fully override the baseline since the schema does most of the work.

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 second sentence states three specific verbs (reads, writes, finds) applied to a named resource (Church Slavonic numerals / numerals marked with a titlo). This distinguishes it clearly from siblings like normalize_date or convert_calendar, which handle dates rather than numeral systems.

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 enumerates three modes but never says when to prefer this tool over alternatives or how the agent signals which mode it wants. Usage is implied by the input format rather than stated, so guidance is only minimal.

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

dna_matchA
Read-only

Which relationships a DNA match fits, from the amount of shared DNA (Shared cM Project 4.0 ranges), closest first. Several always fit: use documents (and the kinship tool) to decide.

NameRequiredDescriptionDefault
langNoen
shared_cmYesTotal shared autosomal DNA in centimorgans (cM), as AncestryDNA, MyHeritage, 23andMe, FTDNA or GEDmatch report it

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnly/openWorld annotations, the description discloses an important behavioral fact: results are non-unique ('Several always fit'), so the output is a candidate set rather than a verdict. It also credits the underlying methodology (Shared cM Project 4.0 ranges). It doesn't say how many candidates come back, but the output schema presumably covers that.

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 filler. The core purpose is front-loaded and the disambiguation caveat follows immediately after.

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 two-parameter, single-required-input tool with an output schema present, the description supplies everything the agent needs: what the result means, its ordering, and that the result is inherently ambiguous. Return-value details are correctly left to the output 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 50%: shared_cm is fully documented in the schema, while lang has only an enum and default with no prose. The description adds no parameter-level detail (no unit hints, no format/locale behavior), so it neither compensates for the gap nor goes beyond the schema. Baseline 3 is 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?

The description states a concrete transformation (shared DNA in cM → candidate relationships) and names the source of the ranges (Shared cM Project 4.0), plus the output ordering ('closest first'). It also distinguishes itself from a sibling by explicitly naming the 'kinship tool' as the complementary step rather than a substitute.

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

Usage Guidelines4/5

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

It gives real routing guidance: when several relationships fit, use documents and the kinship tool to disambiguate. What's missing is a positive trigger for when to reach for dna_match in the first place (e.g., vs. the kinship or check_match tools) — the agent must infer that this is the cM-interpretation step.

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

draft_archive_requestA
Read-only

A draft letter to a registry office or an archive (Russian ZAGS, state, military and FSB archives; any archive in English, Spanish or Portuguese), with what to attach. Gaps are left in [brackets]. The user sends it — not the tool.

NameRequiredDescriptionDefault
bornNo
diedNo
kindYeszags: Registry office (ZAGS): a copy of a birth/marriage/death record; state_archive: State (regional) archive: genealogical search in parish registers, revision lists, etc.; military: Military archive (TsAMO, RGVA, RGVIA): service and losses; repression: FSB / MVD / SBU archive: investigation or deportation file; generic_en: Any archive, in English; generic_es: Any archive, in Spanish (Latin America, Spain); generic_pt: Any archive, in Portuguese (Brazil, Portugal)
whatNoWhat is requested
placeNo
yearsNo
personNo
spouseNo
archiveNoName and address of the archive
detailsNo
parentsNo
projectNo
relationNoWho the requester is to the person
requesterNo
birth_placeNo
death_placeNo
requester_addressNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known; the description adds genuinely new behavior — the output is a letter with deliberate [bracketed] placeholders and the tool never sends anything. That is exactly the kind of context annotations cannot express. It stops short of describing length, format, or what an incomplete draft looks like, but the key traits are covered.

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?

Three short sentences with zero filler; the artifact is stated first, then the placeholder convention, then the crucial send-boundary note. Every sentence 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 shape needn't be explained, and the read-only annotation covers safety. What is missing given 17 mostly-undescribed inputs is guidance on which fields matter for which 'kind' (e.g. that zags wants born/died/place while repression wants person/details) — an agent can call the tool but cannot fill it well from the description alone.

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?

Seventeen parameters at only 24% schema description coverage, and the description offers almost nothing: aside from 'with what to attach' hinting at details, it never explains what 'what', 'details', 'project', 'archive', or 'years' should contain or how they interact. The heavy lifting falls on self-explanatory field names, which is not enough to compensate for the low coverage.

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?

Specific verb+resource: 'A draft letter to a registry office or an archive'. The description scopes the artifact (a letter with attachments, [bracketed] gaps) and the supported jurisdictions/languages, and explicitly states 'The user sends it — not the tool', which prevents the agent from misreading this as a send/dispatch tool. No sibling tool overlaps with drafting correspondence, so differentiation is implicit but effectively complete.

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

Usage Guidelines4/5

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

It gives clear context for when to reach for it (need a ready-to-send request letter for ZAGS, state, military or FSB archives, or an English/Spanish/Portuguese generic archive) and rules out the send step. It does not say what to do instead when no archive letter is needed, or which upstream tools (find_sources, where_are_records, plan_research) should precede it.

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

estimate_birth_yearA
Read-only

A birth year estimated from relatives (eldest child −27, spouse and siblings ±8, parents +18…+45, first marriage at about 22) and ages in records: a GEDCOM date (BET … AND … or ABT …), the most likely year and a ready explanation to save with it. Also checks the ages against each other: 7 in 1850 and 22 in 1882 cannot be one person — likely two namesakes.

NameRequiredDescriptionDefault
sexNoU
agesNoAges in records: [{age, date (or year), source}] — also checked against each other
langNoen
father_birthNoFather's year of birth (the person born 18–45 years later)
mother_birthNoMother's year of birth (the person born 18–45 years later)
spouse_birthNoSpouse's year of birth (±8; husbands usually a few years older)
first_marriageNoYear of the person's first marriage (about 22, 16–35)
siblings_birthsNoBrothers' and sisters' years of birth (±8 each)
eldest_child_birthNoYear of birth of the eldest known child (the person was about 27, 18–45)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this a safe read (readOnlyHint=true, openWorldHint=false), so the bar is low, and the description still adds real behavioral context: it produces a most likely year plus a save-ready explanation, and it cross-checks ages to flag probable namesake collisions (7 in 1850 vs 22 in 1882). It does not state how conflicts between relative-derived and age-derived estimates are resolved.

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?

Front-loaded with the core action, then the evidence heuristics, then the consistency-check behavior; only the parenthetical offset list is dense. Three sentences, each doing work, with no filler.

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, return-value detail is correctly omitted, and the description still covers the estimation heuristics and the cross-validation behavior for a 9-parameter tool. Gaps are minor: no note on required vs optional inputs, defaults, or precedence when relative-based and age-based estimates disagree.

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?

Schema coverage is 78%, so most parameters are documented in the schema itself; the description's value-add is explaining how those inputs combine (eldest child ≈ −27, spouse/siblings ±8, parents +18…+45, marriage ≈22) and that ages are also cross-checked. That is more than restating the schema, though the offsets largely duplicate the per-parameter descriptions.

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 names a specific verb+resource (estimate a birth year) and enumerates the evidence classes it consumes, so the agent knows exactly what kind of computation this tool performs. It does not, however, name or contrast itself with the close sibling birth_year_from_age, leaving the boundary between those two tools to be inferred.

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 rather than stated: the enumeration of relatives and record ages suggests 'use when you have collateral or documentary age evidence,' but there is no explicit when-to-use, when-not-to-use, or pointer to birth_year_from_age for the single-age case. Adequate but leaves routing to inference.

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

feast_dateA
Read-only

The date of a church feast or fast in a given year (Julian and Gregorian), including movable feasts counted from Easter. Records and family stories often date events by feasts: «родился на Покров», «венчались после Петрова поста».

NameRequiredDescriptionDefault
yearYes
feastYesA feast or fast as a record names it: «Покров», «Петров день», «Троица», «Пасха», «Филиппов пост», 'Michaelmas', 'Wielkanoc'…
churchNoorthodox

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and determinism are covered. The description adds genuine behavioral context beyond that: it computes both Julian and Gregorian dates and handles movable feasts derived from Easter, signaling non-trivial computation rather than a simple lookup. It does not, however, disclose ambiguity handling or whether both calendar results are returned.

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, both earning their place: the first front-loads the capability, the second motivates it with concrete, culturally specific examples. No filler or restatement of the name.

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 semantics need not be explained, and the core concept plus feast examples are well covered. The remaining gap is the unaddressed influence of the 'church' parameter on movable feast dates, which an agent needs to call the tool correctly for Orthodox vs Catholic contexts.

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 33% — only the 'feast' parameter is documented, while 'year' and 'church' are bare. The description does not compensate: it never explains that 'church' (orthodox/catholic) materially shifts movable feast dates because Easter differs between the two, nor does it clarify the year format. With the schema leaving most parameters undocumented, the description needed to fill this gap and does not.

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 (the date of a church feast or fast for a given year) and specifies the computational scope — Julian and Gregorian calendars plus movable feasts counted from Easter. This clearly distinguishes it from siblings like normalize_date or convert_calendar, which deal with generic calendar conversion rather than feast lookup.

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

Usage Guidelines4/5

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

The final sentence gives strong context for when the tool applies: records and family stories often date events by feast names, with vivid examples («родился на Покров», «венчались после Петрова поста»). It clarifies the motivating scenario but names no explicit alternative or exclusion (e.g., when to prefer normalize_date), leaving comparison to inference.

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

film_reading_planA
Read-only

A plan for reading unindexed FamilySearch films page by page for a parish, years and parts: which films to read in which order, thumbnails to find the book (title pages, end-of-year summaries naming the church) and full frames only for the record pages, a rough request budget split into sessions under the site's variable rate limit (pause at least an hour after HTTP 429, no parallel sessions), and what to log with project_coverage.

NameRequiredDescriptionDefault
langNoen
filmsNoFilms from the FamilySearch Catalog entry: [{film (DGS number), years ('1860-1875'), frames (images on the film, if shown), item, note}]; empty = how to find them
orderNonewest_first
partsNoParts to read: births, marriages, deaths, confession, revision, census, other; default births, marriages, deaths
parishYesThe church whose books to read, with its village: «Покровская церковь с. Сынково», 'church of Leca'
projectNoA project (name, site folder or .ged path) whose coverage marks what is already read; it is skipped
year_toNo
year_fromYes

Output Schema

NameRequiredDescription

No output parameters

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, openWorldHint=false), and the description goes further by disclosing the plan's operating constraints: a request budget split into sessions, no parallel sessions, and a mandatory pause of at least an hour after HTTP 429, plus the thumbnail-vs-full-frame policy. These are concrete execution behaviours not present in the annotations. The rate-limit caveat describes guidance embedded in the plan output rather than the tool's own runtime behaviour, which slightly blurs the picture.

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?

The purpose is front-loaded in the opening clause before the list of plan contents, and every element (order, thumbnails, budget, rate limit, logging) corresponds to something the agent must act on. It is dense and heavily parenthesised, bordering on a run-on, but there is little that could be cut without losing operational information.

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?

Because an output schema exists, the description is not obliged to enumerate return fields, and annotations cover the read-only nature. The description supplies the execution policy and logging target needed to use the plan correctly. The remaining gaps are the lang parameter and the absence of explicit routing away from the indexed-search siblings.

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%, so the description needs to compensate for the undocumented half. It touches parish, years, parts, and reading order conceptually, which overlaps with the schema text but adds no format or syntax detail beyond it, and it says nothing about lang. Baseline 3 is appropriate given partial schema coverage and no real semantic addition.

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 concrete resource and scope: a reading plan for unindexed FamilySearch films, per parish, years, and parts, with an explicit ordering and thumbnail strategy. The word 'unindexed' implicitly contrasts with the indexed-search siblings (search_online, find_sources), but no sibling is named as an alternative the way a 5 would require. An agent can still tell what it produces without opening the 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?

Usage context is implied by 'unindexed' (you use this when records aren't searchable) and by the downstream reference to project_coverage for logging what gets read. However, there is no explicit statement of when-not to use it, nor a named alternative such as plan_research or search_online. Guidance 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.

find_sourcesB
Read-only

Find genealogy databases and archives for a country (or region), period and kind of records — 171 sources across Russia and the former USSR, the Caucasus and Central Asia, Eastern, Western and Northern Europe, Germany, the British Isles, the Americas, Australia and New Zealand, each with what it holds and how to search it well.

NameRequiredDescriptionDefault
langNoen
textNoFree text to match in names and descriptions
limitNo
countryNoCountry or region: 'Ukraine', 'UA', 'Россия', 'europe', 'latin_america', 'russian_empire'; several separated by commas. Empty = any.
recordsNoKinds of records: church, vital, census, revision, confession, household, military, repression, deportation, holocaust, forced_labour, displaced, emigration, newspapers, directories, books, graves, trees, catalogs, places, maps, clergy, nobility
year_toNoLast year of interest
year_fromNoFirst year of interest
include_worldwideNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and closed-world behavior are covered. The description adds that this is a curated catalog of 171 sources where each entry carries 'what it holds and how to search it well', which is useful, but it says nothing about paging, result counts, or how the limit interacts with the catalog.

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?

The core purpose is front-loaded in the first clause. The long geographic enumeration ('Caucasus and Central Asia, Eastern, Western and Northern Europe...') is somewhat padded since it essentially restates worldwide coverage already indicated by include_worldwide, but it does help an agent judge whether its region is covered.

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?

With 8 parameters, an output schema, and annotations covering safety, the description need not explain return values. But it leaves the interaction of include_worldwide with country filtering and the meaning of limit/pagination unexplained, which matters for a tool with this many optional parameters.

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 63%, and the description only implicitly maps to the country, year range, and records parameters through its prose. It gives no added meaning for lang, text, limit, or include_worldwide, so the schema does most of the work and the baseline of 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?

The description states a specific verb and resource ('Find genealogy databases and archives') and enumerates the filtering axes (country/region, period, kind of records). It is clearly distinct in spirit from siblings like source_details or search_online, but it never names an alternative to differentiate itself 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 phrase 'for a country (or region), period and kind of records', so an agent can infer the right query shape. However, there is no statement of when to prefer this over where_are_records, source_details, or search_online, and no exclusions or prerequisites.

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

glossaryB
Read-only

Old Russian terms from records — estates, kinship by marriage (шурин, деверь, золовка), archive citation (фонд, опись, дело, лист), administrative units, pre-1918 letters — explained.

NameRequiredDescriptionDefault
langNoen
termNoA word from an old document, or empty for all

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the bar is lower. The description usefully signals breadth of coverage (pre-1918 letters, archival citation forms), but adds nothing about behavior beyond domain examples, and an output schema already exists for 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.

Conciseness4/5

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

A single dense sentence with the core purpose front-loaded and examples bracketed inline to show scope. No filler, though the fragment style (no explicit verb until the trailing 'explained') slightly strains readability.

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?

For a zero-required-parameter read-only lookup with an output schema, the description covers scope adequately and need not explain return values. What it omits is the routing context: with 'kinship' among its siblings, an agent cannot tell from this text which tool to prefer for marriage-relation terms.

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%: 'term' is documented in the schema ('A word from an old document, or empty for all') while 'lang' carries only an en/ru enum with a default, which is largely self-explanatory. The description mentions no parameters at all, so it neither compensates for the coverage gap nor adds meaning beyond the schema; 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?

The description names a specific resource (old Russian terms from archival records) and enumerates concrete coverage domains: estates, kinship by marriage, archive citation, administrative units, pre-1918 orthography. It is clearly distinguishable from most siblings, but it does not differentiate itself from the 'kinship' sibling, which covers overlapping marriage-relation vocabulary (шурин, деверь, золовка).

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 rather than stated: an agent can infer 'use this when a term from an old record is unfamiliar', but there is no explicit when/when-not and no routing to alternatives such as 'kinship' for relationship questions or 'record_guide' for document-type questions. Thematically scoped but no disambiguation.

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

kinshipB
Read-only

What B is to A, named in Russian, English and Romanian (троюродный брат / second cousin / văr de gradul 2, двоюродный дед / great-uncle), with the expected share of DNA.

NameRequiredDescriptionDefault
upNoOr: generations from A up to the common ancestor
sexNoU
downNo…and from the common ancestor down to B
halfNo
pathNoSteps from person A: 'father brother son', "mother's sister's daughter", «сын брата отца», «отец матери»

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the description only needs to add context. It discloses the output content (three-language terms plus DNA share), which is genuinely useful, but says nothing about determinism, error behavior for invalid paths, or how the optional inputs combine. Adequate but thin against a low annotation bar.

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 well-formed sentence that front-loads the trilingual naming and ends with the DNA share. The parenthetical examples earn their place by showing the output format, though the description is dense and could be split for scannability.

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 read-only annotations cover safety. However, with zero required parameters the description never clarifies that 'path' is an alternative to the up/down pair for specifying the same relationship, which is exactly the decision an agent must make to call it correctly.

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?

The description contains zero parameter guidance—all five params (up, down, sex, half, path) are left to the schema, which only documents 60% of them. The 40% gap (sex enum values, the meaning of half) is unaddressed in either place, and the description's examples (троюродный брат, second cousin) illustrate output terms, not input syntax.

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 computation: naming what B is to A, in three languages, plus the expected DNA share. An agent can tell this is a kinship-term resolver distinct from siblings like dna_match or audit_tree. It stops short of 5 because 'What B is to A' is terse and the resource (relationship/kinship) is never named outright.

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, no prerequisite, and no named alternative (dna_match and check_match overlap conceptually but are never mentioned). Usage is only inferable from the genealogy context. Nothing tells the agent what input shape selects this tool versus the DNA-oriented siblings.

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

name_variantsB
Read-only

All the forms a name can take in records (and its Daitch–Mokotoff Soundex codes): spelling variants, pre-1918 orthography, male/female surname forms (Колодин/Колодина, Kowalski/Kowalska, Kazlauskas/Kazlauskienė), transliterations (passport, BGN, German, French, Polish, Romanian, Spanish, Ukrainian, scholarly) and given-name equivalents across languages (Иван = Іоаннъ = Jan = Johann = Juan). Moldovan and Bessarabian surnames: Romanian and Russian renderings (Călugăreanu = Калугарян = Калугаряну = Кэлугэряну, Pleș = Плешъ = Плешу), a second surname flagged («Мокану, он же Плеш»), clerk and recognition distortions as hints, and look-alikes that are another family.

NameRequiredDescriptionDefault
kindNoWhat the name issurname
nameYesThe name as found; for a surname also a pair from a register: «Мокану, он же Плеш», 'Mocanu zis Pleș'
originNomoldovan: a surname from Moldova, Bessarabia or Romania (found by itself for Romanian letters and endings like -eanu, -escu, -ян, -яну)auto

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

readOnlyHint=true and openWorldHint=false already establish that this is a safe, closed-world lookup, so the bar is lower. The description adds genuine behavioral context — that clerk/recognition distortions come back as hints and that look-alikes may be another family — but says nothing about determinism, interpretation confidence, or how the flagged second surname should be treated downstream.

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

Conciseness3/5

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

The core statement is front-loaded and the parenthetical Soundex note is well placed, but the body is one dense run-on paragraph with long language and transliteration enumerations whose marginal value is low. It would read better split into what-it-does / variant classes / cautions rather than a single comma-chained block.

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 needn't explain return values, and all three parameters are documented in-schema at 100%. The description covers every variant class the tool produces, so an agent has enough to call it correctly; only workflow placement (when in a research sequence) is missing.

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?

Schema coverage is 100%, so baseline is 3, and the description earns a step above it by clarifying what each kind actually produces: gendered surname pairs and transliterations for surnames, cross-language equivalents (Иван = Іоаннъ = Jan = Johann = Juan) for given names, and the Romanian/Russian renderings tied to the Moldovan origin. The 'auto' origin default is left to the schema, which is acceptable.

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 opening clause states a specific resource — 'all the forms a name can take in records' plus Daitch–Mokotoff Soundex codes — and the examples make the scope unambiguous (orthography, gendered forms, transliterations, cross-language given names). The verb is nominal rather than active ('all the forms...'), and no sibling is named, but the domain is distinct enough from kinship/check_match/glossary that an agent can place it.

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, when-not-to-use, or alternative. Phrases like 'as hints' and 'look-alikes that are another family' implicitly signal caution in interpretation, but nothing tells the agent when to call this versus kinship, check_match or glossary, or whether it should be run before a record search.

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

normalize_dateA
Read-only

A date as people write it ('около 1899', 'between 1900 and 1905', '9 de octubre de 1899', '9.10.1899') → ISO or GEDCOM ('ABT 1899', 'BET 1900 AND 1905', '9 OCT 1899', '1899-10-09').

NameRequiredDescriptionDefault
textYes

Output Schema

NameRequiredDescription

No output parameters

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 and openWorldHint=false, so the safety profile is covered. The description adds the concrete behavioral contract of the transform (free-form input, ISO or GEDCOM output on either side of the arrow), but says nothing about unparseable input, ambiguous dates, error behavior, or whether output format is selectable.

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 compact sentence with an arrow structure that front-loads the input contract and immediately follows with the output. No filler, no restatement of the tool name, and the parenthetical examples do real work.

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 needn't explain return values, and with one parameter the surface area is small. What it covers — input variety and the two output standards — is the essential information; only edge-case behavior for invalid or ambiguous dates is missing.

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?

Schema coverage is 0% and the schema only declares 'text' as a string, so the description must carry the semantic load — and it does, by demonstrating four distinct accepted input shapes: approximate qualifiers, ranges, Spanish month names, and dotted numeric notation. It still omits the full set of supported languages and formats, so it compensates well but not completely.

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 verb 'normalize' is implicit but unmistakable from the arrow mapping human-written dates to ISO/GEDCOM, and the concrete examples ('около 1899' → 'ABT 1899') make the resource and direction of transformation unambiguous. It does not, however, distinguish itself from plausible siblings such as convert_calendar or feast_date, leaving that routing work to the agent.

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, when-not-to-use, or alternative-naming guidance. The examples imply that messy, non-standard, or non-English date strings are the target input, but the agent gets no explicit rule for choosing this tool over convert_calendar or cyrillic_numerals.

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

parent_hypothesisA
Read-only

A working hypothesis about a parent from a patronymic: the father's given name it implies (Петрович → Пётр, Ильич → Илья), each candidate ranked by name, surname, village and age with the arguments for and against (a grandson named after him, godparents and sureties of his surname, his household listing a child of this name), a warning for a namesake from another village, and the record that would settle it. Always a hypothesis — save it as an open lead or 'probably', never as a link in the tree.

NameRequiredDescriptionDefault
langNoen
childYesThe person whose parent we look for: given, surname, patronymic (or father_given as recorded), birth_year, place (village), children_given (the person's own children — a son may carry the grandfather's name), godparents (of the person's children) and sureties (at the person's marriage), as names, id
candidatesNoPossible fathers found in the records: given, surname, birth_year, death_year, place, sex, children (names listed in the candidate's household), id; empty = how to find them

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-structured behavior: the output is always a hypothesis, must be saved as an open lead/'probably', and never written as a tree link, plus the warning about namesakes from other villages. It does not discuss limits, determinism, or what happens when candidates is empty.

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 core purpose is front-loaded in the opening clause, followed by the ranking factors, the caveat, and the settling record. The Петрович → Пётр / Ильич → Илья examples are short and directly illustrate the transformation, so 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 no explanation, and the description covers the epistemic status, ranking logic and the null-candidates fallback (documented in the schema). For a nested-object analytical tool this is close to complete, though it omits when to prefer it over sibling analysis tools.

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?

With 67% schema coverage and nested objects, the description still adds meaning: it explains that ranking runs on name, surname, village and age, and that godparents, sureties and the child's own children feed the evidence (a grandson named after him). That connects the narrative to the child/candidates fields rather than restating them.

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 transformation and output: deriving a father's given name from a patronymic and returning ranked candidates with arguments for and against, a namesake warning, and a settling record. That is far more specific than a tautology and lets an agent understand the tool's output shape. It never names or contrasts a sibling tool (e.g. check_match or kinship), so it falls short of the top band.

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

Usage Guidelines4/5

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

It gives a clear usage rule for the result: "Always a hypothesis — save it as an open lead or 'probably', never as a link in the tree." That is strong guidance about how to treat the output. It does not, however, say when to reach for this tool versus the sibling analysis tools, so no alternatives are named.

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

place_historyB
Read-only

Look a place up in Wikidata: what administrative units it was part of (with years where known), coordinates and the Wikipedia article — a first step to the uezd, province and parish of a village — and the church its books were kept in, where that attachment is known. Sends the name to Wikidata.

NameRequiredDescriptionDefault
langNoru
nameYesA village, town or district, as precise as possible: «Сынково Тульская область»

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint true. The description usefully specifies the external target ('Sends the name to Wikidata') and flags partial coverage with 'with years where known' and 'where that attachment is known'. It does not add auth, rate-limit, or failure behavior, and the openWorld disclosure largely duplicates the annotation.

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

Conciseness3/5

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

The returned fields are front-loaded after the verb, which is good. However, the single em-dash-laden sentence is dense and back-loads the 'Sends the name to Wikidata' note, which could be stated as a short separate clause without the narrative phrasing.

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 needn't explain return values, and the read-only/open-world annotations cover the safety profile. The one real gap is that the lang parameter's meaning and defaults are never addressed, but otherwise an agent has enough to invoke the tool correctly.

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 required name parameter is documented in the schema (with a precision example) while the lang enum has no description in either place. The description adds nothing about lang or about input format beyond what the schema already carries, so it neither compensates for the gap nor adds value.

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 gives a specific verb+resource (look a place up in Wikidata) and enumerates the returned fields — administrative units with years, coordinates, Wikipedia article, and church attachment. It never names or contrasts a sibling tool, but the purpose is unmistakable and distinct from the genealogy-utility siblings like name_variants or estimate_birth_year.

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?

It implies a usage context — 'a first step to the uezd, province and parish of a village' — so an agent can infer this belongs at the start of a place-research flow. It gives no explicit when-not condition and names no alternative tool, so guidance remains implicit.

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

plan_researchB
Read-only

A step-by-step research plan for a country and period: which records exist, which guides to read and which sources to search, in order (free and country-specific first).

NameRequiredDescriptionDefault
langNoen
countryNo
lead_idNo
projectNo
year_toNo
questionNoWhat we want to find out, with what is known
year_fromNo

Output Schema

NameRequiredDescription

No output parameters

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 and openWorldHint=false, so safety is covered. The description adds that output is an ordered plan with free/country-specific sources prioritized — useful behavioral context — but does not clarify whether the tool merely plans or also executes searches, which is a meaningful distinction given sibling tools that do search.

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 dense sentence with no filler, and the core deliverable is front-loaded. The trailing parenthetical about prioritization earns its place by encoding ordering policy.

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 explanation is not required, and annotations cover the read-only profile. However, with seven optional parameters at 14% coverage, the description leaves an agent unclear on how country, period, and the free-text question interact when constructing a plan.

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 14% and the description only accounts for two of seven parameters ('country' and 'period'). It says nothing about the semantically important 'question' parameter (the only schema-documented one), nor about lead_id, project, or lang, so it does not compensate for the 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?

The description names a specific artifact ('a step-by-step research plan') and enumerates what it contains — records, guides, sources, in order — which is clearly distinct from sibling tools like find_sources or record_guide that perform only one of those steps. It stops short of explicitly contrasting itself with those siblings.

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 rather than stated: the phrase 'free and country-specific first' signals the ordering policy and hints this is the entry-point planning tool, but the description never says when to call it instead of find_sources or record_guide. No exclusions or prerequisites are given.

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

project_coverageA

What has already been read in the registers: parish → year → part → film and frames → status (complete, partial up to No. …, not found). Mark each book when you finish it, and ask what is still unread for these villages and years before opening a film — so nobody reads the same frames twice. Kept with the project (for a .ged file in the file next to it; for a gene-archive site in a file of this server, read together with the site's own coverage).

NameRequiredDescriptionDefault
langNoen
partsNoFor unread: the parts to check; default births, marriages, deaths
actionNomark: save what was read; unread: what is still unread for places and years; list: everything recordedunread
placesNoFor unread/list: parishes or villages (a village is matched through the entries that name it)
dry_runNoFor mark: show the change without writing
entriesNoFor mark: one entry per book read — parish (the church whose book it is), villages (that church's villages in the book), year, part (births, marriages, deaths, confession, revision, census, other), film, frames ('112-140'), status (complete | partial | not_found), up_to (for partial: 'No. 45'), source_ids, note
projectYesProject name, the path of a gene-archive site folder, or the path of a .ged file
year_toNo
year_fromNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already signal a non-read-only, non-idempotent operation, and the description usefully adds that data is persisted with the project and where (next to a .ged file, or in a server-side file for a gene-archive site). It stops short of describing error cases or exactly what 'mark' overwrites, but the storage disclosure is genuine value beyond the annotations.

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

Conciseness3/5

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

The front-loaded opening is good, but the long parenthetical about .ged files and gene-archive sites is dense and adds tangential storage detail, and the arrow notation is compressed. It is readable but not tight; several clauses could be trimmed.

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?

With an output schema present, return values need no explanation, and the description covers the data model, the three actions, and the persistence model for a 9-parameter mutation tool. An agent has enough to invoke it correctly, with only minor param-level gaps remaining.

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 arrow-chain data model (parish → year → part → film and frames → status) and the status vocabulary (complete, partial up to 'No. …', not found) reinforce and enrich the 'entries' parameter beyond the schema's own text. With 67% schema coverage this helps, though the somewhat non-standard 'lang', 'year_from', and 'year_to' params receive no description-side clarification.

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 conveys a specific domain resource (register-reading coverage: parish → year → part → film/frames → status) and reads clearly as a coverage-tracking tool. It does not, however, cleanly differentiate itself from nearby siblings like project_view, project_log, and project_save, so an 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 Guidelines4/5

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

It gives explicit workflow guidance: 'Mark each book when you finish it' and 'ask what is still unread ... before opening a film,' which maps onto the mark/unread actions. It stops short of naming alternatives or stating when NOT to use it (e.g., vs project_log or project_view).

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

project_evidenceB
Read-only

Review source references for individual birth/death/burial/residence and marriage events, read-only. Uses the project root (or root_person_id), follows ancestors up to 10 generations and prioritizes closer ones. Distinguishes missing/broken references, missing locators and reference presence. A person's general sources do not prove every event; even a located citation still needs inspection. Does not verify parentage or change data.

NameRequiredDescriptionDefault
limitNo
projectYes
generationsNo
root_person_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the bar is lower, and the description still adds real context: it distinguishes missing/broken references, missing locators, and reference presence, and warns that even a located citation needs inspection. That interpretive caveat is genuinely useful for an agent. It omits output shape and the meaning of ordering/limits, keeping it below 5.

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?

Four sentences, front-loaded with the core action and scope, and the caveats each carry information an agent needs to interpret results. Some density in the third sentence, but 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?

An output schema exists, so return values need not be described, and the description covers purpose, scope, and interpretation caveats well. However, with 0% parameter documentation it leaves limit and generations semantics dangling, which matters for a traversal tool with a default fan-out.

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 0% across four parameters, so the description must compensate and largely does not. It explains the role of project root and root_person_id and implies a generations cap ('up to 10'), but leaves limit and the generations default (4) unexplained, and the stated 10-generation cap is not tied to the parameter.

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 names a specific verb and resource: reviewing source references for birth/death/burial/residence/marriage events, in read-only mode. It is distinguishable from siblings like find_sources or project_coverage by its event-level evidence focus. It stops short of naming an alternative sibling explicitly, so it lands at 4 rather than 5.

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?

It gives scope (project root or root_person_id, ancestors up to 10 generations, closer ones prioritized) but never states when to choose this over find_sources, source_details, or audit_tree. The exclusions ('does not verify parentage or change data') hint at boundaries without routing to alternatives, so usage is only implied.

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

project_logA

Write a line in the project's research log, so nobody searches the same place twice. Log negative results. Use source_id/lead_id to track the source checklist; unavailable is not no hits.

NameRequiredDescriptionDefault
scopeNo
actionYesWhat was searched and where: 'FamilySearch index, Kolodin, Tula 1880–1890'
resultYesWhat came out — 'nothing found' is a result too
lead_idNo
outcomeNochecked
projectYesProject name, the path of a gene-archive site folder, or the path of a .ged file
source_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive write that is not idempotent. The description adds real behavioral context beyond that: it is an append-style coordination log, negative results must be recorded, and the outcome semantics distinguish 'unavailable' from 'no hits.' It doesn't say what happens on duplicate entries, which is the main remaining gap for a non-idempotent write.

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?

Three short sentences, front-loaded with the core action and rationale, then the logging rule, then the parameter hint. No filler or redundancy.

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, return values need no explanation, and annotations cover the safety profile. The description supplies the workflow rationale and outcome semantics; only the unexplained 'scope' parameter and duplicate-write behavior keep it from being fully complete for a 7-parameter 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 43%, so the description carries weight, and it does clarify usage of source_id/lead_id (checklist tracking) and outcome ('unavailable is not no hits' maps to the enum). However, the 'scope' parameter is left entirely unexplained in both schema and description, so compensation is incomplete.

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: 'Write a line in the project's research log.' The coordination rationale ('so nobody searches the same place twice') makes the intent unambiguous and distinguishes it from analysis/gathering siblings like plan_research or project_evidence, 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 Guidelines4/5

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

Gives clear conditions for use: log after a search, including negative results, and the caveat that 'unavailable is not no hits' tells the agent how to classify a failed lookup. No alternative tool is explicitly excluded or contrasted, which keeps it out of 5 territory.

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

project_policyA

Configure this project's policy only (dry_run by default; save within the owner's authorization). Keys: max_active_questions (default 3), allow_archive_requests (default true; drafts only), allow_living_research (default false), owner_tasks [{id, next, due (ISO date), status}]. Read policy, resources and waiting questions with project_view what='workflow'. A custom archive folder without site.json stays read-only; its policy is stored under GENEALOGY_MCP_HOME/policies, never in that folder.

NameRequiredDescriptionDefault
changesYes
dry_runNo
projectYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses material behavior: dry_run defaults to true, saves happen within the owner's authorization, several policy keys and defaults are listed, and custom archive folders without site.json remain read-only with policy stored outside that folder. This is unusually rich operational context 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?

The purpose is front-loaded, and the dense paragraph contains mostly useful operational details. It is somewhat cramped: defaults, key semantics, the read alternative, and the archive-folder caveat are packed into one block, reducing readability.

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?

Given the output schema and annotations, the description covers the main call context: policy mutation, dry-run behavior, authorization, key defaults, and a read-alternative. It still omits important operational details like how existing policy is merged and what the project string should contain.

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?

With 0% schema description coverage, the description does significant work by naming the expected changes keys and their defaults, including owner_tasks fields. It does not explain the project parameter's expected format or whether changes are partial merges, so it is strong but not fully compensating.

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 gives a specific verb and resource: 'Configure this project's policy only.' It also names project_view as the read-side alternative, so an agent can tell this is for policy mutation rather than general project viewing or saving.

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

Usage Guidelines4/5

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

It clearly implies use when configuring project policy and explicitly routes reading of policy, resources and waiting questions to project_view what='workflow'. It lacks explicit when-not guidance or mention of other project-related siblings such as project_save, so it falls short of full alternative routing.

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

project_saveA

Add or change a person, family, source or research lead in the project. Every change of an existing record is logged with the old and new value, the reason and the documents. Save the source first, then cite its S-id. In a gene-archive site folder the change goes through gene apply: refused if it adds an error, logged, committed to git under the owner's name, and the site is rebuilt. In a .ged file only the changed lines are rewritten (everything else in the file stays as it was), a copy is kept, and gedcom_changes shows the lines. Ask the user before writing into their archive or tree.

NameRequiredDescriptionDefault
kindYes
deleteNo
reasonNoWhy this was added or changed — kept in the corrections log
recordYesFields. person: given_names, surname, sex (M/F), birth/death/burial {date, place_as_recorded, source_ids, note}, notes, research_status ('confirmed' | 'probable' | 'unlinked_candidate'). family: partners [ids], children [ids], marriage {date, place_as_recorded, source_ids}, source_ids. source: title, kind (parish_register, census, military, civil_record, family_document, photo, book, web…), locator (archive, fond, opis, delo, folio — or film/image), url, scope (what it says: transcription). lead: title, record (where), person_id, url, next (required specific next step), checked (ISO date or null), status (open|active|waiting_owner|reading_room|closed), blocked_by (owner task/missing document), resolution, stage (family|civil_registry|existing_documents|primary_records|secondary_sources), stage_result (required when advancing), expected_sources [source ids to check before advancing]. Pass "id" to update an existing record (a field set to null is removed).
dry_runNoCheck the change and show it without writing — use it to show the user what will be saved
projectYesProject name, the path of a gene-archive site folder, or the path of a .ged file
source_idsNoSources (S…) that prove it

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: changes to existing records are logged with old/new value, reason and documents; in a site folder the write runs through `gene apply`, is refused on validation error, git-committed under the owner's name and triggers a rebuild; in a .ged only changed lines are rewritten and a backup copy is kept. That is exactly the write-side context an agent needs and cannot get from readOnlyHint/destructiveHint alone.

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?

Front-loads the core action and then branches into the two execution modes, so structure matches how an agent reasons about the call. It is dense but every clause carries operational meaning; only the site-folder `gene apply` sentence is heavy enough to slow scanning.

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?

Covers both target types, the logging/backup guarantees, and the human-in-the-loop requirement, and an output schema exists so return values need not be explained. What's missing is any note on the delete/field-removal path and on what happens when validation refuses the write (beyond 'refused if it adds an error').

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?

Schema coverage is 71%, so the schema already carries most per-field detail (record shapes, dry_run, project paths). The description still adds meaning the schema does not: the ordering requirement to create the source first and then cite its S-id, and that the `reason` value is what lands in the corrections log. The `delete` flag is not discussed in the description at all.

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 ('Add or change a person, family, source or research lead in the project') and enumerates the record kinds, which maps directly to the `kind` enum. It is plainly distinguishable from read-oriented siblings such as project_view, project_log and project_evidence.

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

Usage Guidelines4/5

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

Gives concrete sequencing guidance ('Save the source first, then cite its S-id') and a consent rule ('Ask the user before writing into their archive or tree'). It lacks an explicit statement of when to prefer a sibling tool (e.g. project_transfer for moving data), so it falls short of a full when/when-not pair.

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

project_transferB

Export the project as GEDCOM 5.5.1 (for MyHeritage, Ancestry, Gramps, Geni…) next to the project file, or start a new project from a GEDCOM exported by another program.

NameRequiredDescriptionDefault
fileNoFor import: path to a .ged file or the GEDCOM text
projectYes
directionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare write (readOnlyHint=false), non-destructive, non-idempotent, closed-world behavior, so the safety profile is covered. The description adds genuinely useful behavior: the output format is GEDCOM 5.5.1 and the export lands next to the project file, and import creates a new project. It does not say whether import overwrites existing data or what permissions are needed.

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 covering both operating modes with no filler. It is efficient, though the app-name parenthetical is slightly ornamental and the two modes could be split for faster scanning.

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, and annotations cover the safety profile. What remains missing for a 3-parameter mutation tool is the export-side meaning of 'file', any overwrite/merge caveat on import, and a pointer to project_save as the prerequisite — a real gap given the low 33% schema coverage.

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 33% (only 'file' is documented), so the description should compensate more than it does. It maps well onto the 'direction' enum by describing both export and import flows, and it hints at output location, but it says nothing about the required 'project' parameter and never clarifies the 'file' parameter's role on the export side.

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 pair with two named modes: exporting the project as GEDCOM 5.5.1 next to the project file, or starting a new project from an external GEDCOM. It also names target applications (MyHeritage, Ancestry, Gramps, Geni), which differentiates it from the project_view/project_save siblings. It falls short of 5 because it never explicitly ties these two modes to the 'direction' enum values.

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 two clauses imply when to use each mode (interop with other genealogy programs vs. onboarding a foreign GEDCOM), giving usable context. However, there is no explicit when-not-to-use, no required prerequisites (e.g. project must already exist/saved), and no mention of the project_save sibling it relates to.

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

project_viewB
Read-only

Read the research project kept between conversations — or a family's gene-archive site folder, or the user's own tree in a GEDCOM file: summary (people, open leads, recent searches, problems), one record with its family and sources, a text search, the full search log, or the tree checks. Start every session on an existing project with what='summary'.

NameRequiredDescriptionDefault
idNoRecord id for what='record' (I1, F1, S1, L1)
langNoen
whatNosummary
queryNoText for what='search'
projectNoProject name (one per family or research question), the path of a gene-archive site folder, or the path of a .ged file (the user's own tree); empty = list the projects, site folders and trees

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real context by disclosing that the same read can target three quite different sources (a tracked research project, a gene-archive site folder, a .ged file), but it largely restates the what enum and says nothing about empty results, error behavior, or size limits on the tree checks.

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

Conciseness3/5

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

Two sentences of reasonable length, with the session-start rule placed last so it is easy to miss. The opening sentence is a tangled em-dash chain with an embedded parenthetical list that is hard to parse on first read; the mode/return-value mapping would be far clearer as a short list.

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 spelled out, and annotations handle the safety profile; the description covers source selection, the primary entry point, and most modes. The remaining gap is coverage of the 'workflow' and 'resources' modes and the 'lang' parameter, which leaves an agent guessing about two of seven behaviors.

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 60%, and the description compensates partially: it maps 'summary' to concrete contents (people, open leads, recent searches, problems) and 'record' to family and sources, which adds meaning beyond the enum. However it silently omits the 'workflow' and 'resources' enum values and never mentions the 'lang' parameter, so two documented gaps remain for a 5-parameter dispatcher.

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 names a specific verb (read) and enumerates what is read: project summary, a single record with family and sources, a text search, the search log, and tree checks. It is distinguishable from project_save and project_transfer, though it overlaps noticeably with the sibling project_log (it exposes a 'log' mode) without acknowledging that overlap.

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?

There is one explicit directive — "Start every session on an existing project with what='summary'" — which is genuinely useful. Beyond that, nothing tells the agent when to pick this tool over project_log, project_coverage, project_evidence, or audit_tree, nor when the record/search/checks modes are preferable to those siblings.

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

record_guideA
Read-only

How to read and find a kind of record: parish registers, confession lists, revision lists, household books, WWI and WWII records, repression files, passenger lists, censuses, European civil registration, Latin America, evaluating evidence — in English, Russian, Ukrainian, and partly Spanish, Portuguese, Polish, German. Without a topic — the list.

NameRequiredDescriptionDefault
langNoen, ru and uk: every guide; es, pt, pl, de: the guides most used in those countries (others fall back to English)en
topicNoOne of: metric_book, confession_list, revision_list, household_book, wwi, wwii, repression, passenger_list, census, civil_registration_europe, latin_america, evidence

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the closed-world read profile is covered. The description adds genuinely useful behavior: an empty topic returns the list of guides, and it discloses the language coverage (full in en/ru/uk, partial elsewhere). It does not describe the response shape, but an output schema exists.

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

Conciseness3/5

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

It is a single dense sentence with an em-dash clause; content is front-loaded with the guide's scope, but the long enumerated list and language tail make it heavier than needed and slightly redundant.

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 documenting returns and annotations covering safety, the description supplies the scope and topic vocabulary an agent needs. The main residual gap is explicit routing guidance relative to sibling research tools.

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?

Schema coverage is 100%, so baseline is 3, but the description earns more by giving natural-language topic names (parish registers, confession lists, repression files) that bridge to the enum values (metric_book, confession_list, repression), helping the agent map a user's wording to the correct enum. The lang fallback behavior is covered in the schema itself.

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 it is a guide covering how to read and find specific record types, listing concrete examples (parish registers, revision lists, WWI/WWII records, censuses, evidence evaluation). The intent is clear, but it does not distinguish itself from siblings like where_are_records or find_sources, and the phrasing 'a kind of record' is slightly awkward.

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 — consult this guide for record-type knowledge — and it notes that omitting the topic returns the list. However, it gives no explicit when-to-use versus where_are_records, find_sources, or glossary, leaving the agent to infer the boundary.

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

search_book_pagesA
Read-only

Find OCR excerpts inside one Gallica book using its ARK/document_id from search_online source='gallica'. Returns scan sequence numbers and stable page URLs, not verified facts or printed page numbers. Sends the query only to Gallica's documented ContentSearch API. start is a zero-based result offset. Access errors are incomplete checks, never no hits; no OCR hit does not prove absence from the scans.

NameRequiredDescriptionDefault
limitNo
queryYes
startNo
document_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial behavior beyond the readOnlyHint and openWorldHint annotations: it discloses that the query is sent only to Gallica's documented ContentSearch API, that start is a zero-based offset, that access errors are incomplete checks rather than no hits, and that absence of an OCR hit does not prove absence from the scans. These are meaningful operational caveats an agent needs.

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?

Four compact sentences with the core purpose and prerequisite front-loaded, followed by return-value and caveat details. No sentence is wasted, though the caveat cluster is slightly dense.

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?

Given an output schema exists, the description need not explain return fields, but it still usefully clarifies that results are scan sequence numbers and stable page URLs rather than verified facts or printed page numbers. It also covers the main access-error caveat. The only gap is that limit behavior is not described.

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 0%, so the description must compensate. It explains document_id's source and start's zero-based meaning, but leaves query and limit semantics to the bare schema titles with no added clarification.

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 ('Find OCR excerpts inside one Gallica book') and anchors the required document_id to its origin in search_online source='gallica'. This clearly distinguishes it from sibling tools that search across sources or retrieve metadata.

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

Usage Guidelines4/5

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

Explains that document_id comes from search_online with source='gallica', giving clear context for when this tool applies. It does not name an explicit alternative tool to use instead when the book is not from Gallica, but the prerequisite is unambiguous.

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

search_onlineA
Read-only

Search an open database live and get the matching records back (title, date, place, link, snippet). Sends the query to that one site only. Run it for each name form from name_variants; for FamilySearch, Geneteka, Find a Grave and other sites without an open API use search_links.

NameRequiredDescriptionDefault
givenNo
limitNo
placeNo
queryNoFree text instead of the name fields (e.g. a phrase for the full-text search)
startNoGallica only: one-based record offset; other providers require 1
sourceYesgallica: Gallica — OCR document search (BnF); search_book_pages gives page excerpts; internet_archive: Internet Archive — full text of digitised books, worldwide; chronicling_america: Chronicling America — US newspapers 1756–1963; wikitree: WikiTree — collaborative world tree; open_archives: Open Archives — Dutch, Belgian and other civil and church records; open_list: Открытый список — жертвы политических репрессий в СССР
surnameNo
year_toNo
year_fromNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety and external-call semantics are covered. The description adds genuinely new behavior: the call is live/one-site-only, it returns a defined record shape, and it should be repeated per name variant. It does not mention rate limits or what happens on a site failure/timeout, which is the remaining gap for a live external query 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?

Three short sentences, front-loaded with the action and return shape, then the enumeration rule, then the alternative-tool routing. No filler, though the parenthetical field list is slightly bulky and could have been dropped given the output schema exists.

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 explanation is not required, and the annotations cover the safety profile. However, for a 9-parameter search tool with low schema coverage, key calling details (name field vs free-text query, date range, pagination offset) are missing from both description and schema titles, leaving the definition adequate but incomplete.

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% and the description compensates for very little: it never explains given/surname vs the free-text 'query' parameter, the year_from/year_to range, limit, place, or the Gallica-only offset semantics of 'start'. Only the source selection is hinted at ('that one site only'). For a 9-parameter tool with undocumented required/optional semantics, this leaves the agent to rely on sparse schema titles.

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?

Specific verb plus resource ('Search an open database live'), plus an explicit list of the returned fields (title, date, place, link, snippet) that tells the agent what it gets back without opening the output schema. It also names the scope boundary ('Sends the query to that one site only'), which separates it from multi-site or link-generation siblings.

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

Usage Guidelines5/5

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

Explicit operational instruction ('Run it for each name form from name_variants') tells the agent how to loop this tool, and the exclusion clause names real alternatives ('for FamilySearch, Geneteka, Find a Grave and other sites without an open API use search_links'). Both when-to-use and when-not-to-use are stated rather than inferred.

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

source_detailsA
Read-only

Everything about one source from the catalogue (by id from find_sources): coverage, access, search tips.

NameRequiredDescriptionDefault
langNoen
source_idYes

Output Schema

NameRequiredDescription
resultYes

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 and openWorldHint=false, so safety and scope are covered. The description adds that the result spans coverage, access and search tips, but says nothing about permissions, rate limits, or coverage gaps; an output schema exists so return-value detail isn't required.

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 the resource scope front-loaded and the id-provenance hint in a compact parenthetical. 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?

With an output schema present, the return shape need not be described, and the description conveys what information the tool surfaces. The only real gap is the unaddressed lang parameter and the absence of any exclusion guidance against sibling guide tools.

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 0%, so the description must carry the burden, and it only partially does: 'by id from find_sources' gives useful semantics for source_id. The 'lang' parameter (enum en/ru, default en) is never mentioned, leaving localization behavior 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 resource and scope: 'Everything about one source from the catalogue', enumerating the content types (coverage, access, search tips). It implicitly separates itself from the lookup sibling find_sources by referring to it as the id provider, though it doesn't name an explicit contrasting alternative.

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

Usage Guidelines4/5

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

The parenthetical '(by id from find_sources)' gives a clear prerequisite: you must run find_sources first to obtain the id. That is real routing guidance, but there is no statement of when-not to use it or which sibling to prefer for other record/catalogue questions.

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

where_are_recordsA
Read-only

Which archives now hold the records (parish registers, revision lists, confession lists, civil records) of a province of the Russian Empire, the Kingdom of Poland, Galicia, Bukovina, East Prussia, the Baltics or the Caucasus — borders moved, so this is often not the archive of today's region. Also works from a modern region back to the historical provinces it was part of. With a year, says whose land it was then (southern Bessarabia — Cahul, Ismail, Bolgrad — was Moldavian/Romanian in 1857–1878, all Bessarabia Romanian in 1918–1940 and 1941–1944); with a village, which church kept its books (a village without a church was recorded in a neighbouring one).

NameRequiredDescriptionDefault
langNoen
yearNoThe year of the record: where borders moved (southern Bessarabia 1857–1878, Bessarabia 1918–1944) it decides the country, county and archive
placeYesA historical province or a modern region: «Тульская губерния», 'Volhynia', 'Бессарабия', 'Galicia', «Брянская область», 'Kyiv'; for southern Bessarabia also a district: 'Cahul', «Измаильский уезд», 'Bolgrad'
villageNoThe village: tells which church kept its registers, where that is known, and how to find out

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false (a safe, closed-domain lookup), so the bar is lower. The description nevertheless adds real behavioral context beyond them: that results are border-shift-aware rather than reflecting today's regions, that 1857–1878 southern Bessarabia is treated as Moldavian/Romanian, and that a village lacking its own church is reported via a neighbouring parish.

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

Conciseness3/5

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

The single dense paragraph is front-loaded with the core question and every clause carries content, but the heavy em-dash and parenthetical stacking (Bessarabia date spans, the church aside) makes it a run-on that is harder to parse than it needs to be. Content is not wasted, but structure is not earning its keep.

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-format details are rightly omitted, and the description covers both lookup directions, the year/village conditionals, and the border-change caveat for a genuinely complex domain. It is only missing fallback behavior for unrecognized or ambiguous place names.

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?

Schema coverage is 75% and the description meaningfully extends it: it explains why 'year' matters (it decides country/county/archive when borders moved, with concrete Bessarabia spans), what 'village' yields (which church kept the registers, and how to find out), and gives accepted place forms ('Volhynia', 'Бессарабия', 'Cahul', «Измаильский уезд»). 'lang' is left to its enum, which is a minor 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?

The description states a specific resource and outcome: mapping a province/region (of the Russian Empire, Congress Poland, Galicia, Bukovina, East Prussia, the Baltics, the Caucasus) to the archives that hold its records, and notes it runs in both directions (modern region → historical provinces). The verb is framed as a question rather than a clean verb+resource, and it never distinguishes itself from the overlapping sibling place_history, so it stops short of a 5.

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?

Conditional usage is described for the optional inputs ('with a year, says whose land it was then'; 'with a village, which church kept its books'), which tells the agent when the extra parameters matter. However nothing states when to reach for this tool over place_history or record_guide, and there are no exclusions — usage is implied rather than directed.

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. 9 tool updatesv0.7.0
    • Changeddraft_archive_request1 field changed
      • addedInput schema / properties / project
        Added value: +{
        +  "default": "",
        +  "title": "Project",
        +  "type": "string"
        +}
    • Changedplan_research2 fields changed
      • addedInput schema / properties / lead_id
        Added value: +{
        +  "default": "",
        +  "title": "Lead Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / project
        Added value: +{
        +  "default": "",
        +  "title": "Project",
        +  "type": "string"
        +}
    • Addedproject_evidence
    • Changedproject_log3 fields changed
      • addedInput schema / properties / lead_id
        Added value: +{
        +  "default": "",
        +  "title": "Lead Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / outcome
        Added value: +{
        +  "default": "checked",
        +  "enum": [
        +    "checked",
        +    "unavailable",
        +    "not_relevant"
        +  ],
        +  "title": "Outcome",
        +  "type": "string"
        +}
      • addedInput schema / properties / source_id
        Added value: +{
        +  "default": "",
        +  "title": "Source Id",
        +  "type": "string"
        +}
    • Addedproject_policy
    • Changedproject_save1 field changed
      • changedInput schema / properties / record / description
        Previous value: -"Fields. person: given_names, surname, sex (M/F), birth/death/burial {date, place_as_recorded, source_ids, note}, notes, research_status ('confirmed' | 'probable' | 'unlinked_candidate').\nfamily: partners [ids], children [ids], marriage {date, place_as_recorded, source_ids}, source_ids.\nsource: title, kind (parish_register, census, military, civil_record, family_document, photo, book, web…), locator (archive, fond, opis, delo, folio — or film/image), url, scope (what it says: transcription).\nlead: title (what to check), record (where), person_id, url, status ('open'|'closed'), resolution.\nPass \"id\" to update an existing record (a field set to null is removed)."New value: +"Fields. person: given_names, surname, sex (M/F), birth/death/burial {date, place_as_recorded, source_ids, note}, notes, research_status ('confirmed' | 'probable' | 'unlinked_candidate').\nfamily: partners [ids], children [ids], marriage {date, place_as_recorded, source_ids}, source_ids.\nsource: title, kind (parish_register, census, military, civil_record, family_document, photo, book, web…), locator (archive, fond, opis, delo, folio — or film/image), url, scope (what it says: transcription).\nlead: title, record (where), person_id, url, next (required specific next step), checked (ISO date or null),\nstatus (open|active|waiting_owner|reading_room|closed), blocked_by (owner task/missing document), resolution,\nstage (family|civil_registry|existing_documents|primary_records|secondary_sources), stage_result (required when advancing), expected_sources [source ids to check before advancing].\nPass \"id\" to update an existing record (a field set to null is removed)."
    • Changedproject_view1 field changed
      • changedInput schema / properties / what / enum
        Previous value: -[
        -  "summary",
        -  "record",
        -  "search",
        -  "log",
        -  "checks"
        -]New value: +[
        +  "summary",
        +  "record",
        +  "search",
        +  "log",
        +  "checks",
        +  "workflow",
        +  "resources"
        +]
    • Addedsearch_book_pages
    • Changedsearch_online4 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 15,
        +  "maximum": 50,
        +  "minimum": 1,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • changedInput schema / properties / source / description
        Previous value: -"internet_archive: Internet Archive — full text of digitised books, worldwide; chronicling_america: Chronicling America — US newspapers 1756–1963; wikitree: WikiTree — collaborative world tree; open_archives: Open Archives — Dutch, Belgian and other civil and church records; open_list: Открытый список — жертвы политических репрессий в СССР"New value: +"gallica: Gallica — OCR document search (BnF); search_book_pages gives page excerpts; internet_archive: Internet Archive — full text of digitised books, worldwide; chronicling_america: Chronicling America — US newspapers 1756–1963; wikitree: WikiTree — collaborative world tree; open_archives: Open Archives — Dutch, Belgian and other civil and church records; open_list: Открытый список — жертвы политических репрессий в СССР"
      • changedInput schema / properties / source / enum
        Previous value: -[
        -  "internet_archive",
        -  "chronicling_america",
        -  "wikitree",
        -  "open_archives",
        -  "open_list"
        -]New value: +[
        +  "internet_archive",
        +  "chronicling_america",
        +  "wikitree",
        +  "open_archives",
        +  "open_list",
        +  "gallica"
        +]
      • addedInput schema / properties / start
        Added value: +{
        +  "default": 1,
        +  "description": "Gallica only: one-based record offset; other providers require 1",
        +  "minimum": 1,
        +  "title": "Start",
        +  "type": "integer"
        +}
  2. 6 tool updatesv0.6.0
    • Addedestimate_birth_year
    • Addedfilm_reading_plan
    • Changedname_variants2 fields changed
      • addedInput schema / properties / name / description
        Added value: +"The name as found; for a surname also a pair from a register: «Мокану, он же Плеш», 'Mocanu zis Pleș'"
      • addedInput schema / properties / origin
        Added value: +{
        +  "default": "auto",
        +  "description": "moldovan: a surname from Moldova, Bessarabia or Romania (found by itself for Romanian letters and endings like -eanu, -escu, -ян, -яну)",
        +  "enum": [
        +    "auto",
        +    "moldovan"
        +  ],
        +  "title": "Origin",
        +  "type": "string"
        +}
    • Addedparent_hypothesis
    • Addedproject_coverage
    • Changedwhere_are_records3 fields changed
      • changedInput schema / properties / place / description
        Previous value: -"A historical province or a modern region: «Тульская губерния», 'Volhynia', 'Бессарабия', 'Galicia', «Брянская область», 'Kyiv'"New value: +"A historical province or a modern region: «Тульская губерния», 'Volhynia', 'Бессарабия', 'Galicia', «Брянская область», 'Kyiv'; for southern Bessarabia also a district: 'Cahul', «Измаильский уезд», 'Bolgrad'"
      • addedInput schema / properties / village
        Added value: +{
        +  "default": "",
        +  "description": "The village: tells which church kept its registers, where that is known, and how to find out",
        +  "title": "Village",
        +  "type": "string"
        +}
      • addedInput schema / properties / year
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "The year of the record: where borders moved (southern Bessarabia 1857–1878, Bessarabia 1918–1944) it decides the country, county and archive",
        +  "title": "Year"
        +}
  3. 24 tool updatesv0.5.1
    • First observedaudit_tree
    • First observedbirth_year_from_age
    • First observedcheck_match
    • First observedconvert_calendar
    • First observedcyrillic_numerals
    • First observeddna_match
    • First observeddraft_archive_request
    • First observedfeast_date
    • First observedfind_sources
    • First observedglossary
    • First observedkinship
    • First observedname_variants
    • First observednormalize_date
    • First observedplace_history
    • First observedplan_research
    • First observedproject_log
    • First observedproject_save
    • First observedproject_transfer
    • First observedproject_view
    • First observedrecord_guide
    • First observedsearch_links
    • First observedsearch_online
    • First observedsource_details
    • First observedwhere_are_records

TDQS

B3.4/5.0

Scored across 31 tools

Disambiguation4/5

Most tools target clearly different tasks, but there are notable overlaps: birth_year_from_age and estimate_birth_year both infer birth years, and plan_research, record_guide, find_sources, where_are_records, and film_reading_plan form a research-guidance cluster that requires careful reading to choose correctly. Descriptions help, but boundaries are not always immediate.

Naming Consistency3/5

All names use snake_case, which is consistent formatting, but the convention is mixed: some tools are verb-first (search_online, find_sources, check_match) while many are noun phrases (glossary, project_coverage, kinship, feast_date). It remains readable, but there is no single predictable verb_noun pattern.

Tool Count2/5

With 31 tools, the server is heavy for a single MCP surface, even for a broad genealogy domain. Many tools are individually useful, but the count increases selection burden and suggests the server could be split or consolidated.

Completeness4/5

The tool set covers the genealogy research lifecycle well: source discovery, live/search links, record guides, project and evidence management, date/calendar tools, DNA, kinship, tree auditing, and archive requests. Minor gaps remain, such as explicit delete/merge operations and direct film/image retrieval beyond Gallica OCR and FamilySearch planning.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Connect AI assistants to your Gramps Web family tree. Search and edit genealogy records, explore ancestors, descendants, relationships and timelines, and read document scans with vision-capable models. Includes guided research workflows, source citations, read-only mode, and privacy-aware media previews. Install with Docker or a Claude Desktop bundle.
    6
    32
    16
    AGPL 3.0
  • 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.
    2
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables users to read, search and edit GEDCOM (.ged) family-tree files from Ancestry.com and other genealogy software, letting an MCP client navigate relationships, explore ancestor and descendant trees, inspect sources and citations, and make safe, lossless edits that are written straight back to the file with a backup.
    19
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to query, validate, and safely update GEDCOM family-history files through a local MCP server with read-only tools and reviewable changesets.
    1
    MIT