familysearch
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@familysearchshow me my ancestors four generations back"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
familysearch-mcp
CLI + servidor MCP para a árvore da sua conta no FamilySearch: ler pessoas, famílias, ancestrais, descendentes e o histórico de alterações; pesquisar registros históricos, lugares e as sugestões que o próprio FamilySearch faz; comparar duas pessoas lado a lado e mesclar duplicatas; corrigir fatos, ligar pais e cônjuges, anexar fontes e escrever notas. A sua linhagem vai para um cache local, de onde saem a lista do que falta pesquisar e a exportação em GEDCOM, sem bater no FamilySearch a cada pergunta.
Por dentro, ele fala a API documentada do FamilySearch
(https://www.familysearch.org/platform/...), autenticado pelo token da sua
sessão no navegador (o cookie fssessionid, enviado como Bearer), sem chave
de desenvolvedor. A árvore do FamilySearch é uma só, compartilhada pelo mundo
todo, então este projeto escreve nela de verdade. Por isso toda escrita passa
por uma pergunta na tela que só você responde: sem a sua aprovação, nada é
enviado.
Sumário
Related MCP server: familysearch-org-mcp
Instalação
Requer Bun ≥ 1.3 (o cache usa bun:sqlite) e macOS para as
escritas pelo CLI e para importar a sessão do navegador. O login pela janela
usa o Google Chrome.
Tudo de uma vez (Claude Code)
git clone https://github.com/maxwellmezadre/familysearch-mcp.git
cd familysearch-mcp
bun install
bun run setupsetup compila o binário para ~/.local/bin/familysearch, registra o servidor
MCP familysearch no escopo de usuário do seu ~/.claude.json e instala a
Skill em ~/.claude/skills/familysearch-mcp/. Se o Dia estiver instalado, o
registro já leva FAMILYSEARCH_IMPORT_BROWSER=dia; outro navegador vai por
bun run setup --import-browser=chrome. --dry-run mostra o que seria feito
sem alterar nada.
npm
npm i -g @maxwellmezadre/familysearch-mcp # instala `familysearch` e `familysearch-mcp` no PATH
familysearch --versionO pacote roda com o Bun (bun:sqlite), então o Bun precisa estar instalado. Ele
fica disponível no npm a partir da primeira versão publicada.
Binário único
bun run build:binary # gera ./familysearch, sem precisar de runtime instalado
./familysearch --versionO binário roda tudo, inclusive o login: o playwright-core vai embutido e o
Chrome vem do sistema.
Login
A senha nunca passa por aqui. Na produção, o caminho normal é importar a sessão do navegador em que você já usa o FamilySearch:
familysearch login --from-browser dia # dia, arc, chrome, chromium, brave ou edge (macOS)
familysearch login # usa FAMILYSEARCH_IMPORT_BROWSER, ou abre o ChromeA importação lê o cookie fssessionid do banco de cookies do navegador, com a
chave que ele guarda no Keychain (o macOS pede permissão uma vez), e confere o
token com GET /platform/users/current antes de gravar. Sem navegador
configurado, familysearch login abre uma janela do Chrome num perfil dedicado
e espera você entrar.
O ambiente beta (FAMILYSEARCH_ENV=beta) entra sempre pela janela do Chrome
dedicado. Produção e beta usam o mesmo cookie no domínio .familysearch.org,
então entrar no beta pelo navegador do dia a dia desconectaria a produção.
A sessão fica cifrada com AES-256-GCM em
~/.config/familysearch-mcp/session.production.enc (ou session.beta.enc),
modo 0600. Detalhes, o que é gravado e como revogar:
docs/LOGIN.md.
Uso — CLI
familysearch status --verify # a sessão ainda vale?
familysearch doctor # o que quebrou, camada a camada
familysearch search --given Giulia --surname Rossi --birth 1890
familysearch person KWCB-AAA --sources # fatos, datas e fontes
familysearch family KWCB-AAA # pais, cônjuges e filhos
familysearch ancestors KWCB-AAA --generations 4
familysearch duplicates KWCB-AAA # o que o FamilySearch acha que é duplicata
familysearch records --surname Rossi --birth-place "Treviso, Itália"
familysearch compare KWCB-AAA KWCB-BBB # lado a lado, só lê
familysearch sync # baixa a sua linhagem para o cache
familysearch gaps # o que falta pesquisar
familysearch export --format gedcom
familysearch link-parents KWCB-CCC --father KWCB-AAA --reason "Certidão de nascimento de 1921" --preview
familysearch merge KWCB-AAA KWCB-BBB --fingerprint "<do compare>" --reason "Mesma pessoa, mesmos pais" --previewTodo comando de tool aceita --json e imprime exatamente o que o cliente MCP
receberia. Os comandos que escrevem aceitam --preview, que mostra o plano sem
perguntar nem escrever. Referência completa em docs/CLI.md.
Uso — MCP
O setup já registra o servidor. Manualmente:
claude mcp add -s user familysearch --env FAMILYSEARCH_IMPORT_BROWSER=dia -- /Users/você/.local/bin/familysearch mcpOu, à mão, em ~/.claude.json:
{
"mcpServers": {
"familysearch": {
"type": "stdio",
"command": "/Users/você/.local/bin/familysearch",
"args": ["mcp"],
"env": { "FAMILYSEARCH_IMPORT_BROWSER": "dia" }
}
}
}Use o caminho absoluto: clientes MCP não herdam o PATH do seu shell. As
escritas precisam de um cliente com suporte a elicitation (a pergunta na tela);
o Claude Code tem. Num cliente sem esse suporte, as leituras funcionam e toda
escrita é recusada, como erro de tool. Depois é só perguntar: "quem são os meus bisavós?", "essas
duas pessoas são a mesma?", "o que falta pesquisar na minha árvore?".
Variáveis de ambiente
Todas opcionais. A tabela completa está em
docs/CONFIGURATION.md.
Variável | Default | Para quê |
|
| Onde ficam sessão, chave, cache e registro de escritas |
|
|
|
| — | Chave AES em base64 de 32 bytes; sem ela, uma é gerada em |
|
| O único diretório onde |
|
| Não registra as 14 tools que gravam algo (escritas, |
| — |
|
|
|
|
|
| Intervalo mínimo entre requisições |
|
| Variação aleatória somada ao intervalo |
|
| Intervalo mínimo antes de cada escrita |
|
| Aprova toda escrita sem perguntar. O registro local e o snapshot continuam, e o |
Só FAMILYSEARCH_AUTO_APPROVE=1 desliga a pergunta de aprovação (ADR-0012). Sem sessão, os comandos falham na
hora da chamada com uma mensagem que diz o que fazer, não no boot.
Tools
São 30, iguais no MCP e no CLI. Referência gerada:
docs/TOOLS.md.
Tool | Comando | Rede |
|
| 0 (1 com |
|
| — |
|
| até 3 |
|
| em blocos (1 + 4 por pessoa) |
|
| 1 |
|
| 1 (+1 por seção extra) |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 10 (11 se der para mesclar, 8 com pessoa viva) |
|
| 0 |
|
| 0 |
|
| 1 + 1 escrita + 1 |
|
| 1 + escritas + 1 |
|
| até 1 + 1 escrita + 1 |
|
| até 3 + 1 escrita + 1 |
|
| 2 + 1 escrita + 1 |
|
| até 3 + 1 escrita + 1 |
|
| 2 escritas + 1 |
|
| 2 + 2 escritas + 1 |
|
| 1 escrita + 1 |
|
| 14 + 1 escrita + até 2 |
|
| 1 + 1 escrita + 1 |
|
| 1 |
Nas escritas, a conta é: leituras antes da pergunta, as escritas aprovadas e a releitura que confere o resultado. Nenhuma delas foi provada ainda num uso real em produção, e a descrição de cada uma avisa isso.
Como funciona
O login guarda só o token
fssessionide o User-Agent do navegador que o gerou, cifrados. Toda requisição vai para o host do ambiente configurado, uma por vez, com intervalo e variação aleatória, e espera mais antes de cada escrita. Num 401 na produção, seFAMILYSEARCH_IMPORT_BROWSERestiver definido, a sessão é reimportada do navegador uma vez, em silêncio. Escritas nunca são repetidas sozinhas.As leituras da árvore são sempre ao vivo, porque outras pessoas editam a árvore o tempo todo. O cache local serve à análise:
syncbaixa a linhagem (ancestrais e cônjuges até 8 gerações) e, para cada pessoa, a família e as contagens de fontes, sugestões e possíveis duplicatas. Ele trabalha em blocos e retoma de onde parou.find_gapseexportleem só dali, sem rede.Datas genealógicas são guardadas como foram escritas, ao lado da forma padronizada do FamilySearch quando ela existe. Nenhuma vira um
Date.Antes de qualquer mesclagem vem
compare_persons: fatos de cada lado, conflitos, sinais de que não são a mesma pessoa, a ordem que o FamilySearch aceita e o que a mesclagem levaria. A mesclagem confere que nada mudou desde a comparação, exige confirmar o id da duplicata, salva as duas pessoas num snapshot local logo antes de enviar e relê o resultado.
A trava de aprovação
Toda escrita monta um plano, pergunta e só então envia. A pergunta começa pelo motivo, que vai para o histórico público da pessoa. No servidor MCP a pergunta é uma elicitation: o cliente mostra um formulário a você e a resposta volta para o servidor, sem passar pelo modelo. No CLI é um diálogo nativo do macOS, com "Cancelar" como botão padrão, que não aceita resposta pela entrada padrão. A aprovação vira um ticket de uso único que cobre exatamente as escritas do plano, e a camada HTTP recusa qualquer escrita que não esteja nele.
O que ela protege: nenhuma escrita acontece pelas tools do MCP ou pelos comandos
do CLI deste projeto sem uma resposta à pergunta na tela, nem por erro ou
excesso de iniciativa do modelo. Sessões sem interface (claude -p, um CLI fora do macOS
ou sem sessão gráfica) cancelam a pergunta, e nada é escrito. Não existe
variável nem opção que desligue a trava.
O que ela não protege: um modelo decidido a contorná-la. Com Bash livre e um
terminal com permissão de Acessibilidade no macOS, um osascript com System
Events consegue clicar em "Aprovar" no diálogo e escolher o id pedido, e teclas
enviadas ao terminal preenchem o formulário de elicitation. Quem tem acesso
livre à sua máquina também pode ler a sessão e chamar a API direto, sem passar
por este projeto. Hooks de Elicitation no Claude Code (nas configurações ou
nos plugins) também poderiam responder no seu lugar; o doctor avisa quando
encontra algum. Os detalhes estão no SECURITY.md.
O risco de termos de uso
Usar o token da sessão do navegador na API, sem uma aplicação registrada no FamilySearch, é zona cinza. O FamilySearch não dá chave de desenvolvedor para projeto pessoal, e este é o caminho que sobra. Uso pessoal, sobre a sua própria conta e em ritmo humano, reduz o risco, mas não o elimina. Se o FamilySearch bloquear ou mudar o caminho de autenticação, o projeto para de funcionar.
Arquitetura em detalhe: docs/ARCHITECTURE.md. O que a
API não expõe: docs/DATA-MODEL.md.
Troubleshooting
Sintoma | O que fazer |
|
|
| Abra o FamilySearch no navegador e rode |
| O navegador guarda um cookie só para os dois ambientes. Entre em |
| Clique em "Permitir" na janela do macOS e tente de novo |
Escrita volta com | O cliente não tem elicitation. Use o Claude Code numa sessão interativa, ou o CLI no macOS |
Escrita volta | A sessão não tem interface ( |
| A escrita pode ter acontecido. Releia a pessoa antes de tentar de novo; nada é repetido sozinho |
| Rode |
| Inverta sobrevivente e duplicata e confira a prévia de novo |
| Ligue os filhos à versão pública com |
| Costuma ser bloqueio anti-bot. Abra o FamilySearch no navegador, espere alguns minutos e tente de novo |
| Pare e espere alguns minutos |
| É o esperado: ele trabalha em blocos. Chame de novo até |
|
|
Chrome não abre no login | Instale o Google Chrome, ou |
Algo mudou na API |
|
Documentação
Arquivo | Conteúdo |
Camadas, fluxo de leitura e de escrita, as regras que as separam | |
Todas as variáveis e os arquivos em disco | |
Do zero à primeira resposta | |
Todos os comandos | |
Referência das tools (gerada) | |
Como o login funciona, o que grava, como revogar | |
O modelo, as regras de datas, o cache e o que não existe | |
Os endpoints usados, os cabeçalhos e as armadilhas | |
O que fazer quando o FamilySearch mudar | |
As decisões de projeto e por quê |
Licença
MIT. Uso pessoal, sobre a sua própria conta e em ritmo humano. Não use isto como serviço multiusuário nem para escrever em massa na árvore compartilhada.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only A2Me family context tools for AI assistants (members, dates, activity, relationships)
MCP server for Gramps genealogy via the Gramps Web API: CRUD, search, merge, timelines, DNA.
Household health records with source attribution. Read and add records with OAuth approval.
Read your workouts, history, and stats; create and schedule new workouts. Writes are additive only.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables 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.191MIT
- AlicenseAqualityBmaintenanceEnables direct interaction with FamilySearch.org's shared Family Tree and historical records, including reading and adding people, facts, relationships, sources, notes, memories, record search, and image downloads, without needing a browser.9MIT
- AlicenseAqualityBmaintenanceLets an AI assistant do everything you would do on Ancestry.com by hand: search records, read and edit trees (people, facts, sources, citations, notes, tags, media), review hints, attach records, look at DNA matches, and read or send messages.131MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to read and write a self-hosted Gramps Web family tree through the REST API, creating facts with citations attached and auditing unsourced or duplicate data with 83 evidence-disciplined tools. It also exposes legacy GEDCOM exports as a read-only reference layer of untrusted hints, with living-person privacy filtering on by default.9755 PyPIMIT