
FamilySearch
io.github.ianderso由 GitHub 帳號 ianderso 發布v1.4.0更新於 Oct 24, 2026
Genealogical research on FamilySearch: historical places, indexed records, page images, the tree.
概覽
在本機執行的 FamilySearch 族譜研究 MCP 伺服器,可查詢歷史地名、索引紀錄、頁面影像,並以唯讀方式存取共享家譜樹。
- 可以做什麼
- 解析歷史地名(包括指定年份當時的樣貌),並沿管轄鏈向上或向下追溯(不需權杖)。搜尋與讀取索引歷史紀錄、收藏集、欄位代碼與目錄條目,並瀏覽收藏集路徑點。找出紀錄對應的頁面影像,列出同一影像上的紀錄,並檢索手寫辨識全文。解析影像連結、依膠卷與影像編號找到頁面,並把頁面影像下載成本機檔案。讀取共享樹中的人物、親屬、來源、祖先與後代、回憶、變更紀錄與比對候選,並將自己的資料與檔案比對。
- 適用情境
- 適合需要助理查詢 FamilySearch 地名、紀錄、影像與家譜樹檔案,並把樹中的線索追溯到原始文獻的族譜研究工作。地名、收藏集與膠卷瀏覽等匿名工具在全新安裝、無需設定時即可使用。
- 執行需求
- 透過 stdio 在本機執行,以 uvx 啟動,需要 Python 與 uv。紀錄、影像、目錄條目與家譜樹工具需要來自你自己註冊的 FamilySearch 應用程式的存取權杖,透過 FS_ACCESS_TOKEN 提供,最好放在由 FS_ENV_FILE 指定的環境變數檔案中。可選 FS_CLIENT_ID、FS_ENVIRONMENT(production 或 integration 沙箱)與 FS_TIMEOUT。需要連線至 FamilySearch 的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 FamilySearch,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
familysearch-mcp
An MCP server for genealogical research on FamilySearch: a historical place gazetteer, indexed record search, the page images behind the records, and reads of the shared family tree.
Nothing here writes to FamilySearch. The shared tree is community-edited and conflations of same-named people are common, so a tree result is a hint: follow it to the underlying record and cite that.
This is an independent project. It is not made, endorsed or supported by FamilySearch.
Credentials
This package ships no client id and never handles a FamilySearch password. Records, images and the tree need an access token from your own registered FamilySearch application; docs/AUTH.md explains why, and how to get one.
The gazetteer, the collection catalogue and the film browser answer without a token, so they work on a fresh install with no setup at all.
Install
That runs the server over stdio, which is how an MCP client starts it. You normally put it in the client's configuration rather than running it yourself.
Claude Desktop
Point at an env file rather than pasting the token into env. A token that
lives in the client's config can only be replaced by editing it and
restarting; a token in the file is picked up mid-session. With no token at
all, leave env out and the anonymous tools still work.
Claude Code
Configuration
.env.example lists them with comments.
Tools
Twenty-eight tools. All of them read; download_image also writes the page
it fetches to a local file.
Places
FamilySearch's Places API answers anonymously.
Records and collections
Page images
Shared tree — a lead, never a source
Every tool here reads a community-edited profile, and says so in its own description.
Setup
How it behaves
- The tree is not evidence. The tree tools read profiles anyone can
edit. Use them to find records.
get_person_sourcesis the most useful of them because it leads out of the tree towards a document. - A comparison proposes; it never changes.
compare_persontakes your own names, events, relatives and sources for one person, reads the profile, and reports what agrees, what the profile lacks and what differs. Each proposed change comes as a packet: the source, the facts to tag it to, a draft reason with gaps for you to fill, and where on the website to make it. You make the change yourself, one at a time, after reading the record. It refuses anyone who may be living, and it never proposes combining profiles, removing anything, replacing a relationship or changing living status. See docs/COMPARE.md. - A persona is not the record. A search returns one person's summary of
what a record said;
get_recordreturns the indexed fields behind it, andget_record_imagethe document itself. Read down that chain before citing. - Jurisdictions move.
search_places_at_dateresolves a place as it was in a given year. Filing an 1820 record under the county that covers the ground today is a common and hard-to-spot error. - Record search uses the website's search service. The API's own record
search answers from a partial index that is almost all immigration
records.
search_recordsasks the service the FamilySearch website uses instead, with your token and a browser User-Agent, which that service requires. It is undocumented and FamilySearch can change or close it; docs/API-NOTES.md has the comparison. - Full-text search is a machine reading.
fulltext_searchasks the website's full-text service, on the same footing as record search: your token, a browser User-Agent, and an undocumented route. Its text is handwriting recognition, so names and numbers are often misread; each hit gives the passages that matched and the page's image ark, and the page is what to read and cite. Only some collections and volumes have been machine-read, so no result proves nothing. Every word must match unless you write OR, because the service otherwise matches any one of them. - The Catalog describes holdings, not records.
get_catalog_entryreads the entry the website's catalog page reads, on the same footing as record search. For each film it reports the DGS number, whichget_film_imageandfulltext_searchtake, and asks the image store whether your account may view it and how many images it holds. A DGS is not the microfilm number; a film may be restricted or never digitised; and a description is a cataloguer's summary, so read the images and cite them. - Search criteria filter, loosely unless
exact. FamilySearch treats a search term as a ranking hint unless told otherwise, so adding a death year to a name search only reorders it. This server asks for every criterion to match;loose=Truegoes back to ranking. Even required, a criterion leaves out only a record that contradicts it: a record giving no birth year still matches "born 1850", and a year matches five either side.exact=Truemakes each one present and matching, and holds a place to the county or state named. Every result'sfilterssays how each criterion was applied, so a nil result can be read as the negative it is, or is not. - Tokens expire, and a refreshed one is picked up. A token lasts about an
hour. On a 401 the server re-reads
FS_ACCESS_TOKENfrom the env file and retries once, so refreshing the file is enough.auth_statusreportstoken_accepted: falsewhen it is not. - Throttling is retried once. A 429 asking for a wait of up to 15 seconds
is waited out and retried. A longer wait, or a second 429, comes back as
rate_limitedwith the server'sRetry-After. - Unknown parameters are refused. A misspelt or invented argument is an error that lists the parameters the tool does take. It is not silently dropped, which would make a filtered search quietly return unfiltered results.
download_imageis careful with what it is given. It fetches only HTTPS URLs on FamilySearch hosts, because the request carries your token. It creates only image and PDF files, and never overwrites one.- Some routes are not publicly documented. FamilySearch's Historical
Records API is behind a login wall, so those routes and response shapes
were confirmed by live probing instead. A comment beside the code says
when, and docs/API-NOTES.md records what was found.
tests/live_check.pyasks again.
Development
uv run python -m tests.live_check re-asks FamilySearch the questions only
the live API can answer, with the token from your env file. See
CONTRIBUTING.md for what a change is expected to carry.
License
MIT.
來源:README.md,提交 7c7bc0a
工具
0版本歷史
5- v1.4.0最新Oct 11, 2026
- v1.3.0Oct 6, 2026
- v1.2.0Oct 6, 2026
- v1.1.0Oct 6, 2026
- v1.0.0Sep 30, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分