Open Archives MCP
An MCP server providing access to the Open Archives genealogical search engine, allowing agents to search and retrieve Dutch and Belgian historical records including births, marriages, deaths, censuses, and full-text transcriptions of archival pages.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.openarchieven.nl/What its tools do
22 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (22)
search_recordsshow_recordmatch_recordget_births_years_agoget_birthsget_deathsget_marriagesget_archivesget_record_statsget_source_type_statsget_event_type_statsget_comment_statsget_family_name_statsget_first_name_statsget_profession_statsget_breakdownget_historical_weatherget_census_datasearch_transcriptionsbrowse_transcriptionsshow_transcriptionview_transcription
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
- Popularity 4 GitHub stars
What you can do with it
- Search genealogical records by name, place, or archive
- Retrieve specific birth, death, or marriage records
- Access historical weather data from KNMI
- Search and view full-text transcriptions of historical documents
Source and maintenance
- Last repository push
- Maintenance checked
Protocol and capabilities
- Server
- openarchieven 1.1.1
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 22 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Tools
22 advertised
search_records — Search Records
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` instead of `archive`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"lang": {
"enum": [
"nl",
"en"
],
"type": "string"
},
"name": {
"type": "string"
},
"sort": {
"enum": [
-6,
-5,
-4,
-3,
-2,
-1,
1,
2,
3,
4,
5,
6
],
"type": "number"
},
"start": {
"type": "integer",
"maximum": 10000,
"minimum": 0
},
"birthplace": {
"type": "string"
},
"eventplace": {
"type": "string"
},
"sourcetype": {
"type": "string"
},
"not_archive": {
"enum": [
0,
1
],
"type": "number"
},
"number_show": {
"type": "integer",
"maximum": 100
},
"archive_code": {
"type": "string"
},
"country_code": {
"type": "string"
},
"relationtype": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Search Records",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}show_record — Show Record
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.1 features improved JSON/XML output and adds N-Triples and Turtle formats.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"archive",
"identifier"
],
"properties": {
"lang": {
"enum": [
"nl",
"en"
],
"type": "string"
},
"archive": {
"type": "string"
},
"identifier": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Show Record",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}match_record — Match Record
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"birthyear"
],
"properties": {
"lang": {
"enum": [
"nl",
"en"
],
"type": "string"
},
"name": {
"type": "string"
},
"birthyear": {
"type": "integer"
}
},
"additionalProperties": false
}{
"title": "Match Record",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_births_years_ago — Births N Years Ago
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"years"
],
"properties": {
"years": {
"type": "integer"
},
"number_show": {
"type": "integer",
"maximum": 100
}
},
"additionalProperties": false
}{
"title": "Births N Years Ago",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_births — Find Births
Finds birth records
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"start": {
"type": "integer",
"maximum": 10000,
"minimum": 0
},
"eventyear": {
"type": "integer"
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer",
"maximum": 100
},
"eventprovince": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Find Births",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_deaths — Find Deaths
Finds death records
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"start": {
"type": "integer",
"maximum": 10000,
"minimum": 0
},
"eventyear": {
"type": "integer"
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer",
"maximum": 100
}
},
"additionalProperties": false
}{
"title": "Find Deaths",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_marriages — Find Marriages
Finds marriage records of couples (bride or groom)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name1",
"name2"
],
"properties": {
"name1": {
"type": "string"
},
"name2": {
"type": "string"
},
"start": {
"type": "integer",
"maximum": 10000,
"minimum": 0
},
"eventyear": {
"type": "integer"
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer",
"maximum": 100
}
},
"additionalProperties": false
}{
"title": "Find Marriages",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_archives — List Archives
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 ArchiefWiki links.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"title": "List Archives",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_record_stats — Record Stats
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 record counts. Note: version 1.1 uses `archive_code` instead of `archive`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"archive_code": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Record Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_source_type_stats — Source-Type Stats
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 uses `archive_code` instead of `archive`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"archive_code": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Source-Type Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_event_type_stats — Event-Type Stats
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_code` instead of `archive`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"archive_code": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Event-Type Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_comment_stats — Comment Stats
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 `archive`.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"archive_code": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Comment Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_family_name_stats — Family-Name Stats
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
},
"eventtype": {
"enum": [
0,
1,
2,
3,
6
],
"type": "number"
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer",
"maximum": 100
},
"eventyearend": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
},
"eventyearstart": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
}
},
"additionalProperties": false
}{
"title": "Family-Name Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_first_name_stats — First-Name Stats
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"eventplace",
"eventyear"
],
"properties": {
"eventyear": {
"type": "integer",
"maximum": 1960,
"minimum": 1600
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer",
"maximum": 100
}
},
"additionalProperties": false
}{
"title": "First-Name Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_profession_stats — Profession Stats
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
},
"eventplace": {
"type": "string"
},
"number_show": {
"type": "integer"
},
"eventyearend": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
},
"eventyearstart": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
}
},
"additionalProperties": false
}{
"title": "Profession Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_breakdown — Breakdown Stats
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 questions such as "how many Bidprentjes per archive?" or "how many marriages per year in Amsterdam?". The response includes the total filtered record count, the total number of distinct groups (capped at 750) and the top-N groups according to the chosen sort.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"group_by"
],
"properties": {
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
},
"sort": {
"enum": [
"count_desc",
"count_asc",
"name_asc"
],
"type": "string"
},
"group_by": {
"enum": [
"archive",
"sourcetype",
"eventtype",
"place",
"year"
],
"type": "string"
},
"year_end": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
},
"eventtype": {
"enum": [
0,
1,
2,
3,
6
],
"type": "number"
},
"min_count": {
"type": "integer",
"minimum": 1
},
"eventplace": {
"type": "string"
},
"sourcetype": {
"type": "string"
},
"year_start": {
"type": "integer",
"maximum": 1960,
"minimum": 1500
},
"number_show": {
"type": "integer",
"maximum": 500
},
"archive_code": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Breakdown Stats",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_historical_weather — Historical Weather
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 1901–2014. Note: this endpoint exposes several types of historical datasets, so measurement types and units can vary between records.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"date",
"longitude",
"latitude"
],
"properties": {
"date": {
"type": "string"
},
"lang": {
"enum": [
"nl",
"en"
],
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Historical Weather",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_census_data — Census Data (1795–1899)
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 Gemeentegeschiedenis.nl. Either `place` or `gg_uri` must be provided.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"year"
],
"properties": {
"year": {
"type": "integer",
"maximum": 1980,
"minimum": 1770
},
"place": {
"type": "string"
},
"gg_uri": {
"type": "string"
},
"province": {
"type": "string"
},
"richness": {
"enum": [
1,
2,
3
],
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Census Data (1795–1899)",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}search_transcriptions — Search Transcriptions
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 cannot be overridden) and are returned paginated. Each match includes a source citation, page identifier and up to five highlighted text fragments. The set of facets returned depends on the supplied filters.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
},
"start": {
"type": "integer"
},
"year_end": {
"type": "integer"
},
"year_start": {
"type": "integer"
},
"number_show": {
"type": "integer",
"maximum": 100
},
"archive_code": {
"type": "string"
},
"archive_number": {
"type": "string"
},
"inventory_number": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Search Transcriptions",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}browse_transcriptions — Browse Transcriptions
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 (descending). * `archive_code` — list of all archive numbers (archieftoegangen) within that archive, ordered by archive number. * `archive_code` + `archive_number` — list of all inventories within that archive number, ordered by inventory number. The order of items is fixed and cannot be overridden. Results are always returned in full (no paging).
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
},
"archive_code": {
"type": "string"
},
"archive_number": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Browse Transcriptions",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}show_transcription — Show Transcription
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"lang": {
"enum": [
"nl",
"en",
"de",
"fr"
],
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Show Transcription",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}view_transcription — View Transcription (IIIF deep-zoom)
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 a term in the transcript. Hosts without MCP Apps support receive a text summary plus inline preview images.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"description": "Transcription page identifiers, e.g. [\"NL-SdmGA_1504889_11\"]."
},
"highlight_term": {
"type": "string",
"description": "Optional term to highlight in the transcription text."
}
},
"additionalProperties": false
}{
"title": "View Transcription (IIIF deep-zoom)",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
Open Archieven IIIF viewer
Deep-zoom IIIF viewer with transcription overlay.
ui://openarchieven/viewer.html90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-02: 3 of 3 checks answered
- 2026-11-03: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1218 ms
- 95th percentile latency
- 1218 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · repository · passed · metadata changed · updated
- · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
- · probe · passed · 1218 ms · metadata changed · 22 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http open-archives-mcp https://mcp.openarchieven.nl/Codex
codex mcp add open-archives-mcp --url https://mcp.openarchieven.nl/Cursor
{
"mcpServers": {
"open-archives-mcp": {
"url": "https://mcp.openarchieven.nl/"
}
}
}Cline
{
"mcpServers": {
"open-archives-mcp": {
"type": "streamableHttp",
"url": "https://mcp.openarchieven.nl/",
"disabled": false
}
}
}VS Code
{
"servers": {
"open-archives-mcp": {
"type": "http",
"url": "https://mcp.openarchieven.nl/"
}
}
}Gemini CLI
gemini mcp add --transport http open-archives-mcp https://mcp.openarchieven.nl/Claude Desktop
{
"mcpServers": {
"open-archives-mcp": {
"url": "https://mcp.openarchieven.nl/"
}
}
}Windsurf
{
"mcpServers": {
"open-archives-mcp": {
"serverUrl": "https://mcp.openarchieven.nl/"
}
}
}Let your agent find its tools
Find servers like Open Archives MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.