Skip to content

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.

Changes · 3

22 tools: 3 change things and 19 only read.

Scanned Oct 21, 2026

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.

2 warn
  • The server marks "get_comment_stats" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_comment_stats" says "get": a word for reading.

    What this check looks for
  • The server marks "view_transcription" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "view_transcription" says "view": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_comment_stats" says "get": a word for reading.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "view_transcription" says "view": a word for reading.

      What this check looks for
    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.

.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.