External genealogy source search for Claude Code via MCP
Search newspapers, WikiTree, Open Archives, and Find A Grave for family history research through Claude's Model Context Protocol.
- ποΈ Chronicling America - Search Library of Congress newspapers (1789-1963)
- π³ WikiTree - Collaborative genealogy tree integration
- π Open Archives - Dutch, Belgian, and French historical records
- β°οΈ Find A Grave - Cemetery and burial records via FamilySearch collection
- π Cross-Reference - Search all sources in parallel
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"research-sources": {
"command": "node",
"args": ["/path/to/research-sources-mcp-standalone/dist/index.js"]
}
}
}docker run -it research-sources-mcpgit clone https://github.com/ibarrajo/research-sources-mcp
cd research-sources-mcp
npm install
npm run build| Tool | Description |
|---|---|
search_newspapers |
Search Chronicling America newspapers by query, state, and date range |
get_newspaper_page |
Get full OCR text from a specific newspaper page |
search_wikitree |
Search WikiTree collaborative genealogy tree |
get_wikitree_person |
Get detailed WikiTree profile for a person |
search_open_archives |
Search European historical records (Dutch, Belgian, French) |
search_findagrave_via_fs |
Search Find A Grave burial records via FamilySearch collection |
cross_reference_person |
Search ALL sources in parallel for comprehensive research |
Ask Claude Code:
Search for obituaries for "John Smith" in California newspapers between 1920-1930
Claude will use:
search_newspapers({
query: "John Smith obituary",
state: "California",
start_date: "1920-01-01",
end_date: "1930-12-31"
})Ask Claude Code:
Search all available sources for Maria Garcia, born 1845 in Jalisco, Mexico
Claude will use:
cross_reference_person({
given_name: "Maria",
surname: "Garcia",
birth_year: "1845",
birth_place: "Jalisco, Mexico",
sources_to_search: ["all"]
})Ask Claude Code:
Find the grave for Antonio Lopez who died in San Diego around 1950
Claude will use:
search_findagrave_via_fs({
given_name: "Antonio",
surname: "Lopez",
death_place: "San Diego",
death_year: "1950"
})# Clone repository
git clone https://github.com/ibarrajo/research-sources-mcp
cd research-sources-mcp
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Lint
npm run lint
# Format code
npm run format- TypeScript - Type-safe development with strict mode
- MCP SDK - Official Model Context Protocol integration
- SQLite - Local caching of search results for performance
- External APIs - No authentication required for most sources
- Chronicling America API (Library of Congress)
- WikiTree API
- OpenArch.nl API
- FamilySearch Collections (Find A Grave index)
Claude Code
β
MCP Protocol (stdio)
β
research-sources-mcp
β
βββββββββββββββ¬βββββββββββββββ¬βββββββββββββ¬βββββββββββββββ
β Chronicling β WikiTree β Open β Find A Grave β
β America β β Archives β (via FS) β
βββββββββββββββ΄βββββββββββββββ΄βββββββββββββ΄βββββββββββββββ
β
SQLite Cache (sources-cache.sqlite)
Search Chronicling America newspaper collection.
Parameters:
query(required): Search terms (name, keywords)state(optional): US state abbreviation (e.g., "CA", "NY")start_date(optional): Start date (YYYY-MM-DD)end_date(optional): End date (YYYY-MM-DD)page(optional): Results page number
Returns: Array of newspaper articles with title, date, page, OCR text snippet, and URL
Get full OCR text from a newspaper page.
Parameters:
lccn(required): Library of Congress Control Numberdate(required): Issue date (YYYY-MM-DD)edition(optional): Edition numberpage(required): Page number
Returns: Full OCR text and metadata
Search WikiTree collaborative genealogy tree.
Parameters:
first_name(optional): Given namelast_name(required): Surnamebirth_date(optional): Birth year (YYYY)birth_location(optional): Birth placedeath_date(optional): Death year (YYYY)death_location(optional): Death place
Returns: Array of matching WikiTree profiles with IDs and basic info
Get detailed WikiTree profile.
Parameters:
wikitree_id(required): WikiTree person ID (e.g., "Smith-12345")
Returns: Full profile with biography, relationships, sources, photos
Search European historical records.
Parameters:
first_name(optional): Given namelast_name(required): Surnamebirth_year(optional): Birth yearcountry_code(optional): Country (NL, BE, FR)source_type(optional): civil_registration, church_records, notarial_records
Returns: Array of matching records with links to images
Search Find A Grave burial records.
Parameters:
given_name(optional): Given namesurname(required): Surnamebirth_year(optional): Birth yeardeath_year(optional): Death yearburial_place(optional): Cemetery location
Returns: Array of Find A Grave memorial records with photos and GPS
Search all sources in parallel.
Parameters:
given_name(required): Given namesurname(required): Surnamebirth_year(optional): Birth yearbirth_place(optional): Birth placedeath_year(optional): Death yeardeath_place(optional): Death placesources_to_search(optional): Array of source names or ["all"]
Returns: Aggregated results from all requested sources
Contributions are welcome! Please see CONTRIBUTING.md for development guidelines.
MIT License - see LICENSE file for details.
Built as part of the FamilySearch genealogy research system. Part of a suite of MCP servers for comprehensive genealogy research:
- familysearch-mcp - FamilySearch API integration
- tree-analyzer-mcp - Family tree analysis and error detection
- research-sources-mcp - External source search (this repository)