Open Archives
by coret · remote · no sign-in to list tools · v1.1.1 · published by GitHub user coret
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
22 tools: 3 change things and 19 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things3Claude Code: ask: see these tools
- Only reads19Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http openarchieven https://mcp.openarchieven.nl/Findings
Matches of fixed checks, with the text they matched.
The server marks "get_comment_stats" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_comment_stats" says "get": a word for reading.
The server marks "view_transcription" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "view_transcription" says "view": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
22 tools
Changes things 3Claude Code: ask
get_comment_statsComment count statistics Returns the total number of validated comments made on records.1 finding
Why it is in this group
- The name "get_comment_stats" says "get": a word for reading.
- The description's first verb is "comment": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_comment_stats" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_comment_stats" says "get": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- title: Comment Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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 regi…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Match Record
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
view_transcriptionOpen one or more transcribed document pages in an interactive deep-zoom viewer with the transcription text alongside.1 finding
Why it is in this group
- The name "view_transcription" says "view": a word for reading.
- The description's first verb is "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "view_transcription" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "view_transcription" says "view": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: View Transcription (IIIF deep-zoom)
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
Only reads 19Claude Code: allow
browse_transcriptionsBrowse transcriptions hierarchically Returns a hierarchical browse of available page transcriptions.No findings
Why it is in this group
- The name "browse_transcriptions" says "browse": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- title: Browse Transcriptions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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 co…No findings
Why it is in this group
- The name "get_archives" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List Archives
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_birthsFinds birth recordsNo findings
Why it is in this group
- The name "get_births" says "get": a word for reading.
Description, as the server wrote it Finds birth records
Annotations the server declares
- title: Find Births
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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.No findings
Why it is in this group
- The name "get_births_years_ago" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Births N Years Ago
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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 …No findings
Why it is in this group
- The name "get_breakdown" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Breakdown Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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.No findings
Why it is in this group
- The name "get_census_data" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Census Data (1795–1899)
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_deathsFinds death recordsNo findings
Why it is in this group
- The name "get_deaths" says "get": a word for reading.
Description, as the server wrote it Finds death records
Annotations the server declares
- title: Find Deaths
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_event_type_statsRecord count statistics per event type Returns statistics about event types.No findings
Why it is in this group
- The name "get_event_type_stats" says "get": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- title: Event-Type Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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.No findings
Why it is in this group
- The name "get_family_name_stats" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Family-Name Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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.No findings
Why it is in this group
- The name "get_first_name_stats" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: First-Name Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
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.No findings
Why it is in this group
- The name "get_historical_weather" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Historical Weather
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_marriagesFinds marriage records of couples (bride or groom)No findings
Why it is in this group
- The name "get_marriages" says "get": a word for reading.
Description, as the server wrote it Finds marriage records of couples (bride or groom)
Annotations the server declares
- title: Find Marriages
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_profession_statsProfession frequency statistics Returns the number of times professions appear in records for the selected period and place.No findings
Why it is in this group
- The name "get_profession_stats" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Profession Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_record_statsRecord count statistics per archive Returns record count statistics.No findings
Why it is in this group
- The name "get_record_stats" says "get": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- title: Record Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
get_source_type_statsRecord count statistics per source type Returns statistics about source types.No findings
Why it is in this group
- The name "get_source_type_stats" says "get": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- title: Source-Type Stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
search_recordsSearch genealogical records Searches the genealogical dataset and returns found persons and records.No findings
Why it is in this group
- The name "search_records" says "search": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- title: Search Records
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
search_transcriptionsFull-text search across page transcriptions Performs a full-text search across the page transcriptions of historical documents indexed by Open Archives.No findings
Why it is in this group
- The name "search_transcriptions" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Search Transcriptions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
show_recordShow a single genealogical record Returns one specific genealogical record in JSON format (UTF-8).No findings
Why it is in this group
- The name "show_record" says "show": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Show Record
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
show_transcriptionRetrieve a single transcription Returns the full transcript of a single page along with its source citation.No findings
Why it is in this group
- The name "show_transcription" says "show": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Show Transcription
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http openarchieven https://mcp.openarchieven.nl/Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__openarchieven__search_records",
"mcp__openarchieven__show_record",
"mcp__openarchieven__get_births_years_ago",
"mcp__openarchieven__get_births",
"mcp__openarchieven__get_deaths",
"mcp__openarchieven__get_marriages",
"mcp__openarchieven__get_archives",
"mcp__openarchieven__get_record_stats",
"mcp__openarchieven__get_source_type_stats",
"mcp__openarchieven__get_event_type_stats",
"mcp__openarchieven__get_family_name_stats",
"mcp__openarchieven__get_first_name_stats",
"mcp__openarchieven__get_profession_stats",
"mcp__openarchieven__get_breakdown",
"mcp__openarchieven__get_historical_weather",
"mcp__openarchieven__get_census_data",
"mcp__openarchieven__search_transcriptions",
"mcp__openarchieven__browse_transcriptions",
"mcp__openarchieven__show_transcription"
],
"ask": [
"mcp__openarchieven__match_record",
"mcp__openarchieven__get_comment_stats",
"mcp__openarchieven__view_transcription"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as openarchieven. Review it before you use it.
