Skip to main content
Glama
ball2jh

familysearch-org-mcp

by ball2jh

familysearch-org-mcp

An MCP server for FamilySearch.org: the shared Family Tree (read, search, add people, facts, relationships, sources, notes, memories), historical record search and record reading, and standardized places. Companion to ancestry-com-mcp; both can be attached at once.

Unofficial. Not affiliated with or endorsed by FamilySearch. It authenticates with your own website session rather than a developer key, which FamilySearch may not sanction; the Family Tree is shared and public, so every write is visible to everyone. Use it with care, at your own risk.

How it works

FamilySearch has a documented platform API (GEDCOM X). Production developer keys are only issued to registered businesses, but the website's own session cookie (fssessionid) is accepted as an OAuth bearer token by api.familysearch.org, and plain Node requests are not bot-blocked there. So this server runs without a browser: all API calls go straight from Node with Authorization: Bearer <cookie>. Historical record search lives on www.familysearch.org/service/… behind Imperva bot protection and goes through a Chrome-impersonating client (impit) instead. Cookies are kept in .session.json (mode 600, git-ignored). The token expires after 24 h or 60 min idle, but the server mints a new one silently by replaying the website's OAuth login redirect with the saved identity cookies, so a real Chrome is needed only for the initial sign-in (pnpm login or the fs_session login tool action: opens a dedicated Chrome profile, waits for you to log in, saves the cookies, closes the window) and again if the identity session itself expires.

Requirements: Node 26+, pnpm, Google Chrome.

Related MCP server: Gramps MCP

Setup

git clone https://github.com/ball2jh/familysearch-org-mcp
cd familysearch-org-mcp
pnpm install
pnpm login            # one-time: opens Chrome to sign in, saves .session.json, closes Chrome
pnpm mcp-test         # read-only check

Claude Code / Claude Desktop config (stdio):

{ "mcpServers": { "familysearch": { "command": "node", "args": ["/absolute/path/to/familysearch-org-mcp/src/server.ts"] } } }

Tools

Tool

Actions

fs_session

status, login

person

get, search, ancestry, descendancy, changes, matches, create, update, delete_conclusion, delete

relationship

create_couple, create_child_parents, get_couple, get_child_parents, delete_couple, delete_child_parents

source

list_person, source_box, create, get, delete_description, attach, detach

note

list, add, delete

memory

list_person, list_mine, get, download, upload, attach, delete

record

search, get, download_image, collections

place

search, get

raw_request

any platform request (or a /service/ website request with viaSite)

Files: record.download_image (the scanned record image, full size or scaled) and memory.download write to a local outPath or return base64; memory.upload reads a local filePath.

The Family Tree is a single shared public tree. Every write is visible to everyone and attributed to the user, so the tools require a changeMessage/reason and the server instructions tell the model to be conservative and cite sources. Tests: pnpm mcp-test (read-only) and pnpm mcp-write-test (adds and removes a note, a fact, a source, a memory, and one unconnected test person on the user's own account).

Caveats

  • The session token expires (24 h / 60 min idle); the server renews it silently from the saved identity cookies. When that renewal fails too, tools report not logged in and fs_session login gets you back in.

  • FamilySearch throttles (HTTP 429); requests are spaced 120 ms apart.

  • Not covered: LDS ordinance data, user (private) trees, discussions, and the Source Box folder management.

  • .session.json, .profile/ and captures/ hold live session cookies and are gitignored. Never commit them.

Available Tools

9 tools
fs_sessionA
Read-only

FamilySearch login session. "status" reports whether the dedicated Chrome is signed in and who the user is; "open_login" opens the sign-in page for the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the tool read-only and non-destructive. The description adds useful context about the dedicated Chrome instance and what status reports, but it does not disclose side effects or return behavior of open_login, such as whether it opens a new browser page or returns immediately.

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 one compact sentence, front-loaded with the tool's domain and then covering both action options. Every clause earns its place and there is no redundant restating of schema 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?

For a single-parameter enum tool with read-only annotations and no output schema, this description is largely sufficient. It explains both actions and their purposes, but it could be more complete by clarifying what open_login returns or how the status result identifies the user.

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

Parameters5/5

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

The schema provides only an enum with no per-value descriptions (coverage 0%). The description fully compensates by explaining both allowed values: status checks login state and user identity, while open_login opens the sign-in page. An agent can select the correct action without additional inference.

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 identifies the tool's domain (FamilySearch login session) and gives each action a concrete behavior: status reports signed-in state and user identity, open_login opens the sign-in page. This is clear, though the overall purpose is expressed through the action descriptions rather than a single overarching verb+resource phrase.

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 action descriptions provide clear situational guidance: use status to check whether the dedicated Chrome is signed in, and use open_login to start the sign-in flow. It does not explicitly contrast with sibling tools like raw_request, but the dedicated-Chrome session scope makes the intended context reasonably clear.

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

memoryA
Destructive

Memories (photos, documents). Actions: list_person · list_mine · get (metadata + file url) · download (file to outPath, or base64) · upload (local file → my memories; then attach) · attach (memoryId → personId) · delete (memoryId).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
startNo
titleNo
actionYes
outPathNodownload: absolute local path to write
filePathNo
memoryIdNo
personIdNoTree person id, e.g. "KWZP-6X3"
personNameNo
descriptionNo

TDQS

A3.6/5.0
Behavior4/5

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

The annotations already flag the tool as non-read-only and destructive, and the description adds useful behavioral detail beyond that: download can write to outPath or return base64, upload moves a local file into memories, and delete removes a memory. It does not contradict 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.

Conciseness4/5

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

The description is intentionally compact and front-loads the resource type before the action list. The dot-separated action markup packs a great deal of information into one sentence, though the 'then attach' wording inside upload is slightly ambiguous and the dense punctuation requires careful parsing.

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

Completeness2/5

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

With seven actions, ten parameters, no output schema, and no return-value descriptions, the definition is not complete enough for safe invocation. The agent does not learn which parameters are required per action, what enum values mean in context, how pagination works, or what each action returns.

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 20%, so the description must compensate for many undocumented parameters, but it only clarifies outPath, memoryId, and personId indirectly per action. Parameters like count, start, title, description, filePath, and personName are left unexplained, leaving the agent to guess which action each belongs to and what values are expected.

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 the resource ('Memories (photos, documents)') and enumerates seven concrete actions with verbs and objects: list_person, list_mine, get, download, upload, attach, and delete. This makes the tool's purpose unambiguous and differentiates it from sibling tools like note or person, even without detailed prose.

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 context 'Memories (photos, documents)' and action list imply when the tool is relevant, but the description never explicitly says when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. The usage guidance is present only by implication, not by direct instruction.

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

noteA
Destructive

Notes on a Family Tree person. Actions: list · add (subject + text) · delete (noteId).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
actionYes
noteIdNo
subjectNo
personIdNoTree person id, e.g. "KWZP-6X3"
changeMessageNo

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already flag destructiveHint=true, and the description aligns by listing the delete action. However, the description does not go beyond the action list to explain side effects, prerequisites, or behaviors like requiring personId for certain actions. It adds minimal contextual value beyond what annotations and schema already provide.

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 description is a single sentence that front-loads the purpose and presents a compact action list. There is no filler or redundancy; it is extremely efficient.

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 6 parameters, no output schema, and low schema documentation, the description is only minimally sufficient. It lists actions and some parameter hints, but it does not specify required parameters per action (e.g., list likely needs personId), nor does it mention changeMessage. An agent may struggle to correctly invoke the tool without additional context or examples.

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 only 17% (only personId is described), so the description must compensate. It partially does by mapping actions to parameters: 'add (subject + text)' and 'delete (noteId)'. However, it does not explain the meaning of subject/text, nor does it clarify parameter requirements for list or the changeMessage field. The compensation is incomplete given the low schema 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?

The description clearly states the tool's resource ('Notes on a Family Tree person') and enumerates three concrete actions (list, add, delete), which distinguishes it from sibling tools like person or relationship. The scope is specific and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage by identifying the resource and actions, but it does not explicitly contrast with sibling tools or state when not to use this tool. There are no alternative routing criteria or exclusions, leaving the agent to infer when this is the right choice.

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

personA
Destructive

People in the FamilySearch Family Tree (one shared, collaborative tree — edits are public and attributed; always give a changeMessage/reason). Actions: get (names, facts with ids, relatives, couple and child-parent relationships; sources=true adds source descriptions) · search (tree persons by name/dates/places/relatives; q* fields; matching is fuzzy by default — name wildcards "?" = one character, "" = any length, up to 4 per name, at least 3 literal letters, may lead or trail: bou, Tlts*) · ancestry / descendancy (generations) · changes (change history) · matches (record hints; records=true) · create (unconnected new person; connect with relationship.create) · update (add or edit facts/name/gender; a fact with id edits, without id adds) · delete_conclusion (remove a fact/name/gender by id) · delete (remove a person you created; needs reason). Dates and places on facts should carry formalDate and placeId (see the fact fields) or the tree flags them as non-standardized. Living people you create are private to your account (invisible to other users) until marked deceased.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexNo
nameNo
countNo
factsNo
actionYes
genderNo
livingNo
offsetNo
reasonNo
recordsNomatches: record hints instead of tree duplicates
surnameNo
personIdNoTree person id, e.g. "KWZP-6X3"
givenNameNo
generationsNo
conclusionIdNo
birthLikeDateNoe.g. "1778" or "1770-1785"
changeMessageNo
deathLikeDateNo
fatherSurnameNo
motherSurnameNo
spouseSurnameNo
birthLikePlaceNo
deathLikePlaceNo
includeSourcesNo
spousePersonIdNo
fatherGivenNameNo
motherGivenNameNo
spouseGivenNameNo
marriageLikeDateNo
marriageLikePlaceNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as destructive, and the description goes well beyond that: it warns that edits are public and attributed, that living people created by the user are private, that non-standardized dates/places get flagged, and that delete only works on people the user created. This adds meaningful behavioral context not inferable from annotations or schema.

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 description is dense but well-organized as a compact action list with parentheticals, making ten actions scannable. It front-loads the most important operational warning about public, attributed edits and change reasons. It is long, but given the multi-action surface area, very little 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?

For a complex 30-parameter, multi-action tool with no output schema, the description covers action semantics, search syntax, edit conventions, and privacy/destructive behavior thoroughly. It does not detail response shapes or pagination/offset behavior, which remains a meaningful gap, but the description is complete enough for correct action selection and invocation in most cases.

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 only about 10% schema description coverage, the description does substantial compensating work: it explains fact id semantics for updates, formalDate/placeId standardization requirements, wildcard behaviors for name search, the records flag for matches, and the sources flag for get. Some parameters remain under-described (count, offset, includeSources, spouse-like fields), but the key behavioral parameters receive solid treatment.

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 clearly identifies the resource (people in the FamilySearch Family Tree) and enumerates the specific actions available: get, search, ancestry, descendancy, changes, matches, create, update, delete_conclusion, and delete. It also distinguishes itself from sibling tools by explicitly deferring to relationship.create for connecting people and place.search for place lookups.

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?

The description gives explicit usage conditions for each action: create is for unconnected persons, connect via relationship.create; updates with a fact id edit while without id they add; matches may return record hints; delete requires a reason. It also states a global rule that public, attributed edits always need a changeMessage/reason, which is exactly the kind of context an agent needs to invoke the tool safely.

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

placeB
Read-only

Standardized places. Actions: search (name → place ids, jurisdictions, coordinates) · get (place description by id).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
queryNo
actionYes
placeIdNo

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 destructiveHint=false, and the description is consistent with that. It adds useful behavioral context about results (place ids, jurisdictions, coordinates, description), but does not mention limitations, pagination, or other runtime behavior.

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

Conciseness4/5

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

The description is compact and front-loads the core concept before enumerating actions. The use of an arrow notation for search mapping is efficient, though a slightly more structured format could improve 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?

The description covers the primary use cases and return value hints, which is helpful given no output schema. But it omits the 'count' parameter and does not describe any edge cases or constraints, leaving the tool incompletely specified for an agent.

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?

With 0% schema coverage, the description must clarify parameter meaning, and it does for action, query (as 'name'), and placeId. However, the 'count' parameter is entirely undocumented, leaving one of four parameters unexplained.

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 clearly identifies the resource as 'places' and specifies two concrete actions, 'search' and 'get', with their input-to-output mappings. This distinguishes it from general-purpose siblings, though it does not explicitly name or contrast any sibling tool.

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

Usage Guidelines3/5

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

The description implies when to use each action: 'search' by name and 'get' by id. However, it provides no explicit guidance on when to choose this tool over sibling tools like 'person', 'relationship', or 'source'.

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

raw_requestA
Destructive

Escape hatch: any FamilySearch platform request with the session bearer token (path like "/platform/tree/persons/XXXX-XXX"; default Accept application/x-fs-v1+json). Set viaSite=true for www.familysearch.org /service/ endpoints that reject non-browser clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
acceptNo
methodNo
viaSiteNoSend to www.familysearch.org website services (Imperva-protected) instead of api.familysearch.org
jsonBodyNo
contentTypeNo

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses use of the session bearer token, the default Accept format, and the viaSite behavior, adding meaningful context beyond the annotations. DestructiveHint already signals potential harmful operations, and the description does not contradict it, but it omits any caution about arbitrary POST/DELETE requests or response/error behavior.

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

Conciseness5/5

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

Two dense sentences with no filler: the escape-hatch identity is front-loaded, and the route-specific exception for viaSite follows naturally. Every clause 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?

For a raw passthrough tool with no output schema and a destructive hint, the description gives enough to make a first call but omits response format, error behavior, and an explicit warning about mutating endpoints. The sibling context clarifies its role as the generic fallback, which helps, but the gaps remain notable.

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 only 17%, yet the description partially compensates by specifying the path pattern and default Accept header. The viaSite parameter is also explained in the schema. However, jsonBody, contentType, method, and accept are left largely to their names or enum values, so the semantics are not fully fleshed out.

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 clearly identifies a raw, escape-hatch HTTP request tool for FamilySearch, with a concrete path example and default Accept header. It is distinguishable from the specialized siblings as a generic fallback, though 'any FamilySearch platform request' is broad and could be more explicit about its boundaries.

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?

'Escape hatch' conveys that this is the fallback when no domain-specific tool applies, and the viaSite guidance gives a concrete routing instruction for a specific class of endpoints. It does not explicitly name sibling alternatives or state when not to use it, but the context signals are sufficient for an agent to decide.

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

recordA
Read-only

FamilySearch historical records. Actions: search (indexed records by name/dates/places/relatives/census role; collectionType narrows to a category; every field is fuzzy unless listed in exactFields; facets=true returns the site filter groups (collection, birth/marriage/death/residence place region and year range, sex) whose params can be passed back via extraParams; use offset/count to page; wildcards are rarely needed — "?" = one character, "" = any length, up to 4 per name, at least 3 literal letters, may lead or trail: Sm?th, bou, Tlts*) · get (full record by persona id or ark, with all persons on the record, their events, and the image ark) · download_image (the record's scanned image as JPEG to outPath or base64; maxWidth to scale) · collections (record collections). To cite a record on a tree person: source.create with about=the record ark, then source.attach.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexNo
raceNo
countNo
startNo
actionYes
facetsNoalso return facet groups (collection, place region, year range, sex) with counts and the filter param for each
offsetNo
outPathNo
surnameNo
anyPlaceNo
maxWidthNo
recordIdNopersona id like "XXXX-XXX", a record/image ark, or full ark URL
anyDateToNo
givenNameNo
filmNumberNo
anyDateFromNo
batchNumberNo
exactFieldsNofield names to match exactly instead of fuzzy, e.g. ["surname","birthLikeDate","birthLikePlace"]
extraParamsNoraw query params, e.g. a facet param like {"f.birthLikePlace0":"9"} or {"f.sex":"male"}
collectionIdNo
otherSurnameNo
fatherSurnameNo
motherSurnameNo
recordCountryNofilter, e.g. "United States"
spouseSurnameNo
birthLikePlaceNo
collectionTypeNorestrict to a collection category (the site Collection-type filter)
deathLikePlaceNo
otherGivenNameNoany other person on the record
residencePlaceNo
birthLikeDateToNo
deathLikeDateToNo
fatherGivenNameNo
motherGivenNameNo
residenceDateToNo
spouseGivenNameNo
birthLikeDateFromNo
deathLikeDateFromNo
marriageLikePlaceNo
residenceDateFromNo
marriageLikeDateToNo
relationshipToHeadNocensus: Head, Wife, Son, Daughter…
marriageLikeDateFromNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral detail beyond that: fuzzy-by-default matching, wildcard rules, facet return format, extraParams pass-back, image download output options (outPath/base64, maxWidth), and get's full-record semantics. No contradictions with annotations.

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 description is dense but organized by action with semicolon-separated clauses. It front-loads the resource identity and leads with the primary action (search). Though long, each clause contributes meaningful detail; minor formatting improvements (bullets per action) could enhance scannability, but nothing is 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?

For a tool with 43 parameters, four actions, and no output schema, the description is unusually thorough: it covers search semantics, fuzzy matching, wildcard syntax, pagination, facets, image download options, and the citation workflow. Small gaps remain, such as date formats and explicit return structure, but overall an agent has enough context to call the tool correctly.

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 description coverage is only 19%, so the description carries the burden of explaining parameters. It compensates by defining exactFields, facets, extraParams, collectionType, offset/count, recordId, outPath, maxWidth, and by stating the general rule that every field is fuzzy unless listed in exactFields. It does not individually document all 43 params, but it gives enough collective semantics to make most of them actionable.

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 opens with 'FamilySearch historical records' and enumerates four distinct actions (search, get, download_image, collections), each with a specific resource and purpose. It clearly differentiates this tool from siblings like person, source, and place by naming the exact resource domain and action set.

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 description provides extensive usage context: how to perform search, when to use exactFields vs fuzzy matching, how facets feed extraParams, and how to page with offset/count. It also routes citation workflow to source.create and source.attach. However, it doesn't explicitly state when not to use this tool in favor of siblings like raw_request or note.

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

relationshipA
Destructive

Family Tree relationships. Actions: create_couple (person1 + person2, optional marriage facts) · create_child_parents (child + parent1/parent2, lineage types BiologicalParent/AdoptiveParent/StepParent/FosterParent/GuardianParent) · get_couple / get_child_parents (by relationship id, from person.get) · delete_couple / delete_child_parents (needs reason).

ParametersJSON Schema
NameRequiredDescriptionDefault
childNo
factsNo
actionYes
reasonNo
parent1No
parent2No
person1No
person2No
changeMessageNo
parent1LineageNo
parent2LineageNo
relationshipIdNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already carry readOnlyHint=false and destructiveHint=true, and the description is consistent with these: it lists delete actions and adds that they 'need reason', which is useful behavioral context beyond the structured fields. It does not contradict the annotations, but it stops there — no mention of consequences of deletion, idempotency, or permission requirements, so it meets but does not exceed the lowered 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?

The description is a single information-dense paragraph, front-loaded with the domain phrase 'Family Tree relationships' followed by a compact action list using dot separators — every clause earns its place. It is slightly wall-of-text dense, but there is no filler and the structure effectively packages six actions plus parameter hints.

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 complex 6-action, 12-parameter dispatch tool with no output schema, the description covers the core action semantics and key constraints (required params per action, lineage types, delete reason) but leaves notable gaps: changeMessage is undocumented, the facts array structure is only glossed as 'optional marriage facts', and get actions give no hint of what they return. Adequate for basic invocation, incomplete for full agent autonomy.

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 schema description coverage at 0% across 12 top-level parameters, the description carries the full burden, and it compensates well: it maps person1/person2 to create_couple, child/parent1/parent2 to create_child_parents, relationshipId to the get actions, reason to deletes, and enumerates the lineage enum values (BiologicalParent/AdoptiveParent/StepParent/FosterParent/GuardianParent). It does not cover every parameter (changeMessage is absent), but the action-to-parameter mapping adds substantial meaning the bare schema lacks.

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 the resource ('Family Tree relationships') and enumerates six specific verb+resource actions (create_couple, create_child_parents, get_couple, get_child_parents, delete_couple, delete_child_parents), so an agent knows exactly what the tool operates on. However, it never distinguishes itself from the sibling 'person' tool, which is a natural alternative for family-tree data, so it misses the sibling-differentiation tier.

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 rather than explicit: the action list with its parameter hints shows which parameters are needed per action, and 'from person.get' hints at a workflow for obtaining relationship IDs. But it never states when to prefer this tool over siblings like 'person' or 'record', and gives no exclusions or alternative routing, so the guidance stays at the implied level.

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

sourceA
Destructive

Sources on FamilySearch. A source description lives in the user's Source Box; attaching it to a person creates a source reference (with optional tags = the fact types it supports). Actions: list_person (a person's attached sources) · source_box (my source descriptions) · create (title, citation, optional about URL/ark) · get · delete_description · attach (personId + descriptionId + tags) · detach (personId + sourceReferenceId).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
tagsNofact types this source supports: Name, Gender, Birth, Death, …
aboutNoURL the source is about, e.g. a record ark https://www.familysearch.org/ark:/61903/1:1:XXXX
countNo
startNo
titleNo
actionYes
citationNo
personIdNoTree person id, e.g. "KWZP-6X3"
changeMessageNo
descriptionIdNo
sourceReferenceIdNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=trueable, and the description reinforces this by listing delete_description and detach actions. It adds useful conceptual context about Source Box, source references, and tags, but it does not disclose effects like permanent deletion, permissions, or side effects. No contradiction with annotations.

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 description is compact and front-loaded, opening with the core concept and then listing actions in a compressed notation. The two-sentence structure plus action enumeration is dense but efficient, with no redundant filler.

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

Completeness2/5

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

With 12 parameters, 7 actions, no output schema, and destructive annotations, the tool is complex enough to require more context. While the action list gives partial parameter mappings, it omits expected return values, per-action required fields for actions like get and create, and behavioral caveats such as irreversibility or authorization needs.

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 25%, so the description carries extra weight. It adds meaningful semantics for tags ('fact types this source supports') and about ('URL/ark'), and maps some parameters to actions. However, it does not clarify note, count, start, or changeMessage, leaving four parameters effectively unexplained.

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 clearly identifies the resource: FamilySearch sources, source descriptions, and source references. It then enumerates the specific actions available (list_person, source_box, create, get, delete_description, attach, detach), making the tool's purpose and scope unambiguous even as a dispatcher-style tool.

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 provides implied usage context through the action list and parenthetical parameter hints, e.g., 'attach (personId + descriptionId + tags)'. However, it never explicitly states when to choose this tool over sibling tools like record or raw_request, nor does it exclude any alternatives.

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.3.0
    • First observedfs_session
    • First observedmemory
    • First observednote
    • First observedperson
    • First observedplace
    • First observedraw_request
    • First observedrecord
    • First observedrelationship
    • First observedsource

TDQS

A4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool maps to a clear, distinct resource type—person, relationship, source, record, memory, note, place, session, and raw request. Descriptions clearly separate overlapping concepts like person.search vs record.search or memory.attach vs source.attach. No two tools appear to do the same thing.

Naming Consistency5/5

All tool names are singular nouns representing domain entities, with compound names using underscores (fs_session, raw_request). This is a consistent, predictable pattern. No mixing of verb styles, casing, or conventions.

Tool Count5/5

9 tools is well within the ideal 3-15 range and appropriately scoped for FamilySearch. Each tool covers a distinct functional area without redundancy or bloat. The set feels balanced for the platform's core genealogy workflows.

Completeness4/5

Core lifecycles are well covered: person CRUD, relationship create/get/delete, source attach/detach, memory upload/attach, note add/delete, record search/get, and place lookup. Minor gaps like updating a note, source description, or relationship are workaroundable via delete/recreate, so slightly short of full CRUD completeness.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create, edit, and query genealogical data from GEDCOM files. Supports complex genealogy searches, automatic data enrichment from web sources, relationship analysis, and biography generation for individuals and families.
    16
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Gramps genealogy databases for intelligent family tree research and management. Provides comprehensive tools for searching family data, creating records, analyzing relationships, and tracking genealogy research through natural language.
    42
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search FamilySearch's Family Tree, view person details, explore ancestors and descendants, and search historical records using browser session authentication.
    1 npm
    1
    MIT