coret avatar

Open Archives

coret/openarchieven-mcp-server

Connects Claude to the Open Archives genealogical database covering Dutch births, deaths, marriages, censuses, and historical documents. Exposes 21 operations including record search, family matching, archive statistics, historical weather data from KNMI, and full-text transcription search. Auto-generated from the OpenAPI spec with built-in rate limiting, Redis caching, and automatic pagination for large result sets. Available as a hosted endpoint at mcp.openarchieven.nl or self-hosted via stdio. Useful for genealogy research, historical demographic analysis, or building family trees with proper source citations. Public dataset, no authentication required.

GitHub stars
4
tools
22
transport
HTTP
last updated
Jul 31, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.openarchieven.nl/ --name openarchieven

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http openarchieven https://mcp.openarchieven.nl/

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 22 tools

Verified live against the running server on Nov 6, 2026.

search_recordsSearch genealogical records Searches the genealogical dataset and returns found persons and records. Supports filtering by archive, source type, event place, birth place, relation type and country. Results are pageable and sortable. Note: version 1.1 uses `archive_code` instea...12 params

Search genealogical records Searches the genealogical dataset and returns found persons and records. Supports filtering by archive, source type, event place, birth place, relation type and country. Results are pageable and sortable. Note: version 1.1 uses `archive_code` instea...

Parameters* required
archive_codestring
birthplacestring
country_codestring
eventplacestring
langstring
one of nl · en
name*string
not_archivenumber
one of 0 · 1
number_showinteger
relationtypestring
sortnumber
one of -6 · -5 · -4 · -3 · -2 · -1
sourcetypestring
startinteger
show_recordShow a single genealogical record Returns one specific genealogical record in JSON format (UTF-8). The response conforms to the Archive 2 All (A2A) model. Also available as XML, GEDCOM, Turtle (TTL) and N-Triples (NT) by changing the file extension in the URL. Note: version 1....3 params

Show a single genealogical record Returns one specific genealogical record in JSON format (UTF-8). The response conforms to the Archive 2 All (A2A) model. Also available as XML, GEDCOM, Turtle (TTL) and N-Triples (NT) by changing the file extension in the URL. Note: version 1....

Parameters* required
archive*string
identifier*string
langstring
one of nl · en
match_recordMatch a person to birth and death records Searches the genealogical dataset by exact name and birth year and returns the Open Archives URIs of birth records, death records and registrations in which the person is mentioned.3 params

Match a person to birth and death records Searches the genealogical dataset by exact name and birth year and returns the Open Archives URIs of birth records, death records and registrations in which the person is mentioned.

Parameters* required
birthyear*integer
langstring
one of nl · en
name*string
get_births_years_agoList births that occurred a specified number of years ago Returns a list of birth records for people born exactly the specified number of years ago from today. Note: version 1.1 uses `archive_code` instead of `archive` and includes the archive name and record URL.2 params

List births that occurred a specified number of years ago Returns a list of birth records for people born exactly the specified number of years ago from today. Note: version 1.1 uses `archive_code` instead of `archive` and includes the archive name and record URL.

Parameters* required
number_showinteger
years*integer
get_birthsFinds birth records6 params

Finds birth records

Parameters* required
eventplacestring
eventprovincestring
eventyearinteger
name*string
number_showinteger
startinteger
get_deathsFinds death records5 params

Finds death records

Parameters* required
eventplacestring
eventyearinteger
name*string
number_showinteger
startinteger
get_marriagesFinds marriage records of couples (bride or groom)6 params

Finds marriage records of couples (bride or groom)

Parameters* required
eventplacestring
eventyearinteger
name1*string
name2*string
number_showinteger
startinteger
get_archivesList all archives with statistics Returns an array of all participating archives including their archive code (used in other API calls), name, homepage URL, Twitter handle, ISIL code and search URL on Open Archives. Note: version 1.1 adds ISIL codes and removes defunct Archief...

List all archives with statistics Returns an array of all participating archives including their archive code (used in other API calls), name, homepage URL, Twitter handle, ISIL code and search URL on Open Archives. Note: version 1.1 adds ISIL codes and removes defunct Archief...

No parameters. Call it with no arguments.

get_record_statsRecord count statistics per archive Returns record count statistics. When no archive is specified, all archives are listed with their total number of records. When an archive code is specified, the source types available for that archive are returned with their individual reco...1 params

Record count statistics per archive Returns record count statistics. When no archive is specified, all archives are listed with their total number of records. When an archive code is specified, the source types available for that archive are returned with their individual reco...

Parameters* required
archive_codestring
get_source_type_statsRecord count statistics per source type Returns statistics about source types. Without an archive_code all source types across the entire dataset are returned with total record counts. With an archive_code, only source types for that archive are returned. Note: version 1.1 use...1 params

Record count statistics per source type Returns statistics about source types. Without an archive_code all source types across the entire dataset are returned with total record counts. With an archive_code, only source types for that archive are returned. Note: version 1.1 use...

Parameters* required
archive_codestring
get_event_type_statsRecord count statistics per event type Returns statistics about event types. Without an archive_code all event types across the entire dataset are returned with total counts. With an archive_code, only event types for that archive are returned. Note: version 1.1 uses `archive_...1 params

Record count statistics per event type Returns statistics about event types. Without an archive_code all event types across the entire dataset are returned with total counts. With an archive_code, only event types for that archive are returned. Note: version 1.1 uses `archive_...

Parameters* required
archive_codestring
get_comment_statsComment count statistics Returns the total number of validated comments made on records. When no archive_code is provided, the global total is returned. When an archive code is provided, the count for that archive is returned. Note: version 1.1 uses `archive_code` instead of `...1 params

Comment count statistics Returns the total number of validated comments made on records. When no archive_code is provided, the global total is returned. When an archive code is provided, the count for that archive is returned. Note: version 1.1 uses `archive_code` instead of `...

Parameters* required
archive_codestring
get_family_name_statsFamily name frequency statistics Returns the number of times family names appear in events for the selected source types, place and period. Results are ordered by frequency. Open Archives uses this endpoint to power its family name frequency visualisation.6 params

Family name frequency statistics Returns the number of times family names appear in events for the selected source types, place and period. Results are ordered by frequency. Open Archives uses this endpoint to power its family name frequency visualisation.

Parameters* required
eventplacestring
eventtypenumber
one of 0 · 1 · 2 · 3 · 6
eventyearendinteger
eventyearstartinteger
langstring
one of nl · en · de · fr
number_showinteger
get_first_name_statsFirst name frequency statistics for a given place and year Returns the top-X list of first names in the specified place and year. When a person has multiple forenames, only the first is counted. Currently only Amsterdam is available as a place.3 params

First name frequency statistics for a given place and year Returns the top-X list of first names in the specified place and year. When a person has multiple forenames, only the first is counted. Currently only Amsterdam is available as a place.

Parameters* required
eventplace*string
eventyear*integer
number_showinteger
get_profession_statsProfession frequency statistics Returns the number of times professions appear in records for the selected period and place. Results are ordered by frequency. Open Archives uses this endpoint to power its profession frequency visualisation.5 params

Profession frequency statistics Returns the number of times professions appear in records for the selected period and place. Results are ordered by frequency. Open Archives uses this endpoint to power its profession frequency visualisation.

Parameters* required
eventplacestring
eventyearendinteger
eventyearstartinteger
langstring
one of nl · en · de · fr
number_showinteger
get_breakdownCross-tabulation aggregation grouped by one dimension Returns record counts filtered by any combination of archive, source type, event type, event place and year range, grouped by ONE chosen dimension (archive, sourcetype, eventtype, place or year). Use this endpoint to answer...11 params

Cross-tabulation aggregation grouped by one dimension Returns record counts filtered by any combination of archive, source type, event type, event place and year range, grouped by ONE chosen dimension (archive, sourcetype, eventtype, place or year). Use this endpoint to answer...

Parameters* required
archive_codestring
eventplacestring
eventtypenumber
one of 0 · 1 · 2 · 3 · 6
group_by*string
one of archive · sourcetype · eventtype · place · year
langstring
one of nl · en · de · fr
min_countinteger
number_showinteger
sortstring
one of count_desc · count_asc · name_asc
sourcetypestring
year_endinteger
year_startinteger
get_historical_weatherHistorical weather measurements for a date and location Returns historical weather measurements from the nearest Dutch weather station for the specified date and coordinates. Data sources are the Royal Netherlands Meteorological Institute (KNMI): measurements 1701–1905 and 190...4 params

Historical weather measurements for a date and location Returns historical weather measurements from the nearest Dutch weather station for the specified date and coordinates. Data sources are the Royal Netherlands Meteorological Institute (KNMI): measurements 1701–1905 and 190...

Parameters* required
date*string
langstring
one of nl · en
latitude*number
longitude*number
get_census_dataDutch census data for a place and year Retrieves census data for a Dutch place or municipality for the census year nearest to the specified year. Available census years: 1795, 1830, 1840, 1849, 1859, 1869, 1879, 1889, 1899. Data sources: Volkstellingen.nl (DANS) and Gemeentege...5 params

Dutch census data for a place and year Retrieves census data for a Dutch place or municipality for the census year nearest to the specified year. Available census years: 1795, 1830, 1840, 1849, 1859, 1869, 1879, 1889, 1899. Data sources: Volkstellingen.nl (DANS) and Gemeentege...

Parameters* required
gg_uristring
placestring
provincestring
richnessnumber
one of 1 · 2 · 3
year*integer
search_transcriptionsFull-text search across page transcriptions Performs a full-text search across the page transcriptions of historical documents indexed by Open Archives. Mirrors the search UI at `/transcripties/zoek.php`. Results are ordered by Elasticsearch relevance (the order is fixed and c...9 params

Full-text search across page transcriptions Performs a full-text search across the page transcriptions of historical documents indexed by Open Archives. Mirrors the search UI at `/transcripties/zoek.php`. Results are ordered by Elasticsearch relevance (the order is fixed and c...

Parameters* required
archive_codestring
archive_numberstring
inventory_numberstring
langstring
one of nl · en · de · fr
number_showinteger
q*string
startinteger
year_endinteger
year_startinteger
browse_transcriptionsBrowse transcriptions hierarchically Returns a hierarchical browse of available page transcriptions. Mirrors `/transcripties/lijst/`. Three modes, depending on the supplied filters: * No filter — top-level list of source archives ordered by total transcription count (descendin...3 params

Browse transcriptions hierarchically Returns a hierarchical browse of available page transcriptions. Mirrors `/transcripties/lijst/`. Three modes, depending on the supplied filters: * No filter — top-level list of source archives ordered by total transcription count (descendin...

Parameters* required
archive_codestring
archive_numberstring
langstring
one of nl · en · de · fr
show_transcriptionRetrieve a single transcription Returns the full transcript of a single page along with its source citation. Mirrors `/transcripties/toon/<id>`. AI-generated summaries are deliberately not returned by this endpoint.2 params

Retrieve a single transcription Returns the full transcript of a single page along with its source citation. Mirrors `/transcripties/toon/<id>`. AI-generated summaries are deliberately not returned by this endpoint.

Parameters* required
id*string
langstring
one of nl · en · de · fr
view_transcriptionOpen one or more transcribed document pages in an interactive deep-zoom viewer with the transcription text alongside. Pass page identifiers returned by search_transcriptions / browse_transcriptions (form <ISIL>_<archive>_<page>, e.g. NL-SdmGA_1504889_11). Optionally highlight...2 params

Open one or more transcribed document pages in an interactive deep-zoom viewer with the transcription text alongside. Pass page identifiers returned by search_transcriptions / browse_transcriptions (form <ISIL>_<archive>_<page>, e.g. NL-SdmGA_1504889_11). Optionally highlight...

Parameters* required
highlight_termstring
Optional term to highlight in the transcription text.
ids*array
Transcription page identifiers, e.g. ["NL-SdmGA_1504889_11"].

Sponsors

Readme

Open Archives MCP Server

Production-grade hybrid MCP + HTTP + SSE server generated from the Open Archives OpenAPI specification. Covers genealogical records (births, deaths, marriages, censuses), archive statistics, historical weather, and full-text page transcriptions of historical documents.

OpenAPI source used to generate tools:

../api/openapi.yaml   (local)
https://api.openarchieven.nl/openapi.yaml   (remote)

Overview

A schema-aware server that automatically converts the OpenAPI specification into callable tools and exposes them through multiple transports:

  • MCP Remote (JSON-RPC over StreamableHTTP)
  • HTTP JSON API
  • SSE streaming with auto-pagination
  • Chunked HTTP streaming with auto-pagination
  • Redis caching (optional)
  • Health checks

Video (Dutch): Help AI met jouw erfgoedservices (via MCP)


Use with Claude

Add as a custom connector

A hosted endpoint is available — no installation required.

In claude.ai or Claude Desktop:

  1. Open Settings → Connectors.
  2. Click Add custom connector.
  3. Enter the URL: https://mcp.openarchieven.nl/
  4. Save and approve when prompted.

View the full README on GitHub

Details

Repository
github.com/coret/openarchieven-mcp-server
Website
www.openarchieven.nl
Transport
HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026