Skip to content
Agentmart
Submit a tool

FamilySearch

Genealogical research on FamilySearch: historical places, indexed records, page images, the tree.

Connector by ianderso · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Chalk Labs

Need help deploying FamilySearch?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/ianderso-familysearch-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Genealogical research on FamilySearch: historical places, indexed records, page images, the tree.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
18 read · 1 write · 0 delete
Secrets
1 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Python package

Tools by what they do 19

Read from the source code; the running server may list different tools.

Read 18 · Look things up without changing anything.

  • auth_status
  • browse_waypoints
  • fulltext_search
  • get_catalog_entry
  • get_collection
  • get_collection_fields
  • get_film_image
  • get_image_links
  • get_place
  • get_place_children
  • get_place_jurisdictions
  • get_record
Show 6 more tools
  • get_record_image
  • get_records_on_image
  • search_collections
  • search_places
  • search_places_at_date
  • search_records

Write 1 · Create, change, send or run things.

  • download_image

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • FS_ACCESS_TOKEN

Other settings (environment variables or headers).

  • FS_CLIENT_ID
  • FS_ENVIRONMENT
  • FS_ENV_FILE
  • FS_TIMEOUT

Network hosts it talks to 7

  • api-integ.familysearch.org · found in code
  • api.familysearch.org · found in code
  • familysearch.org · found in code
  • gedcomx.org · found in code
  • github.com · found in code
  • integration.familysearch.org · found in code
  • sg30p0.familysearch.org · found in code

Files it touches

  • /tmp/1880-census-p12.jpg
  • Your home directory (~)
  • Any path the agent passes to its tools

Tools (19)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • auth_status

    Report whether credentials are configured, and what is missing. With a token configured, also asks FamilySearch whether it is still accepted (`token_accepted`): `authenticated` only means one is set, and a token lasts about an hour. This server ships no client id. Production access needs your own registered FamilySearch application; see docs/AUTH.md.

  • browse_waypoints

    Browse a collection's structure — its places, volumes and images. The way to reach a page the index never covered: collection, then county, volume or date range, then images. An image's ark opens with get_image_links. Start with a collection_id. To descend, pass a child's waypoint_id and the same collection_id: FamilySearch refuses a waypoint without its collection. A collection with nothing to browse says so. Works without a token.

  • download_image

    Download a document image to a local file so it can be read. This is the step that turns a citation into evidence. The image is written to disk rather than returned inline: a full page scan runs to megabytes, which is not something to push through a tool result. Only FamilySearch image URLs are fetched, because the request carries your access token. Images are copyrighted or access-restricted in some collections. Treat a downloaded file as a working copy for reading, not as something to redistribute.

  • fulltext_search

    Search the machine-read text of page images: deeds, wills, probate, court files. Finds a name or phrase anywhere on a page, including the witnesses, heirs and neighbours no index names. Each hit is one page image, with the passages that matched. The text is handwriting recognition, a machine reading: open the image with get_image_links, read it yourself, and cite the image, never the text. Coverage is partial, so no result proves nothing. Each hit gives the citation path: collection, record title and image ark. Requires an access token.

  • get_catalog_entry

    Read a FamilySearch Catalog entry: title, authors, places, notes, and its films. The Catalog lists the library's holdings. An entry for a county's probate files or deed books lists each film or DGS (digital image group) with a description: volume, case numbers, years. Some run to thousands, so use contains. Each item returned gives its image count and whether this account can view it; open a page with get_film_image(dgs, image). An entry describes holdings, not a record: cite the image you read. Some films are restricted or were never digitised. A DGS number is not the microfilm number. Give…

  • get_collection

    Read one record collection: what it covers, and how much of it there is. Worth reading before trusting a nil result. The counts say how many records, people and images the collection holds, and a collection whose image count is far below its record count was indexed from film that was largely never published. Works without a token.

  • get_collection_fields

    Decode the field codes a collection's indexed records use. An indexed record labels its values with codes rather than words — `PR_FTHR_NAME`, `EVENT_PLACE`, `PR_NAME_SURN_ORIG`. The codes are per-collection, and this is the dictionary that turns them into "Father's Name", "Event Place" and so on. Read it before interpreting a record from a collection you have not worked with. Works without a token.

  • get_film_image

    Reach a page image by film and image number instead of by ark. Citations often name a film (DGS) and an image rather than an ark: get_record_image reports them for an indexed record, and get_catalog_entry lists a volume's DGS numbers and image counts. Checks the thumbnail first, so a wrong film or image number is a clear answer, not a URL that fails later. The thumbnail needs no token; the full page does.

  • get_image_links

    Resolve a document image to its actual, fetchable URLs. A record read does not carry image links; the image resource does, and this is it. Returns the storage node, the deep-zoom descriptor, thumbnails at several sizes, and `dist` — the full-resolution page. Also returns the neighbouring pages. A pension file or a passenger manifest runs to many images, and the entry you want is often not the one the index pointed at. With a token it gives the film (image group) and image number, which a citation to the page needs.

  • get_place

    Read one place: its jurisdictional chain, type, coordinates and dates. The dates are the ones that matter for research. A place description records the span over which that jurisdiction existed, so you can check whether the county a record names was the county in being on the date the record was made. Works without credentials.

  • get_place_children

    List the places directly inside a jurisdiction. The downward walk, complementing get_place_jurisdictions' upward one. Use it to find the right sub-jurisdiction when a record names a town you cannot place, or to see what a county contained at the time. Works without a token.

  • get_place_jurisdictions

    Walk a place's containment chain upward to the country. This is what turns "Kaskaskia" into "Kaskaskia, Randolph, Illinois, United States". The chain is returned innermost first, each level carrying its own id, type and the span over which it existed, so you can see at which level the naming changed. Works without credentials.

  • get_record

    Read one indexed record in full. A search returns a persona: one person's summary of what a record said. This returns the record, which is more: every person named on it, and the indexed fields behind each of them, labelled with the box on the original form each value was read from. The fields are where a search summary loses things -- the informant, the witness, the enumerator's spelling, the age that contradicts the birth year. Each fact gives its value, date and place as FamilySearch reads them, and under original what the indexer transcribed ("M" for "Married"). A date or place with no …

  • get_record_image

    Find the document image an indexed record was taken from. The persona is somebody's reading of the record. The image is the record. Indexers mis-read hands, skip columns, normalise spellings and guess at ages, so anything that matters should be checked against the film. Returns whatever the record offers as a route to the image: image and waypoint links, and the digital film (DGS) and image numbers indexed against it. Many records carry no image link at all, in which case this says so rather than inventing one -- a great deal of the archive was indexed from microfilm that has never been publ…

  • get_records_on_image

    List every record indexed from one image. The reverse of get_record_image. A passenger manifest page carries thirty people and a census page forty; finding one of them tells you where the others are. Use it to pick up a household, or to check whether the person you want was indexed at all from a page you are already reading. Requires an access token.

Show 4 more tools
  • search_collections

    Find a record collection, so a search can be scoped to one. A collection is one register, census or index. Scoping search_records to its id turns a fishing expedition into a lookup, and a nil result into something that means anything. Each result carries a coverage statement: record types, place, years. Read it: a collection covering 1850 to 1900 cannot answer for 1840. Every word must match a whole word of the title; titles where one only matches inside a word ("Indian" in "Indiana") follow, marked. The first call reads the whole catalogue and caches it; catalogue says how many collections…

  • search_places

    Look up a place in the FamilySearch gazetteer. Resolves a bare place name to its full jurisdictional form and coordinates, which is what a properly-formed place record needs. Each result carries a place id you can pass to get_place or get_place_jurisdictions. If the place name comes from a record with a date on it, prefer search_places_at_date: jurisdictions change, and the modern answer is often the wrong one. Works without credentials.

  • search_places_at_date

    Resolve a place as it existed in a particular year. Jurisdictions are not stable. Counties are created, split, renamed and abolished, so a record naming a county that no longer exists is ordinary rather than an error. Filing that record under the modern county that now covers the ground is a common mistake, and an invisible one: the place name still looks plausible, but it sends the next search to the wrong courthouse and the wrong record set. Give it the name as the record spells it and the year of the record. Each result carries the span over which that jurisdiction existed, so you can see…

  • search_records

    Search historical records by name, events, relatives, type or collection. Relationship criteria find a man by his wife's or father's name when his own was misindexed. Scoping to a record type or one collection searches one register instead of the whole archive. Every criterion filters, loosely: a record lacking that field still matches, names match variants, years match within 5, places widen. With exact, each must be on the record and match. The result's filters says which criteria were applied exactly, relaxed or ignored, and how: read it before calling a nil result a negative. Pass at le…

Signals

Stars
0
Forks
0
Open issues
0
Weekly downloads
90
Last commit
Oct 11, 2026 (22 days ago)
Last release
Oct 11, 2026 (22 days ago)
Last package publish
Oct 11, 2026 (22 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.ianderso/familysearch-mcp
Version
1.4.0
Auth
API key
Packages
pypi familysearch-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ianderso

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get FamilySearch running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying FamilySearch?

CallGet help
Cite this page

FamilySearch MCP server. Agent Mart. https://agentmart.dev/connectors/ianderso-familysearch-mcp (last updated 2026-10-24)