# `io.github.coret/openarchieven-mcp-server` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.coret/openarchieven-mcp-server
- JSON: https://anlyon.dev/api/v1/servers/io.github.coret/openarchieven-mcp-server
- Version: 1.1.1 (active)
- Publisher: io.github.coret (GitHub account)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/coret/openarchieven-mcp-server
- Metadata from the official MCP Registry, synced 2026-10-21T18:28:01.280Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Open Archives
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
```

Scanned 2026-10-21T19:07:22.464Z over streamable-http.

**22 tools: 3 change things and 19 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 3 | ask |
| Only reads | read | 19 | allow |

## Findings

- **warn** Annotations that disagree with the tool in `get_comment_stats` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

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

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

- **warn** Annotations that disagree with the tool in `view_transcription` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "view_transcription" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

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


## Changes things (3)

Creates or changes something that can be changed back. Claude Code: ask.

### `get_comment_stats`

- 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 annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
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`.
```

### `match_record`

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

```untrusted-server-text
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.
```

### `view_transcription`

- 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 annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
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.
```

## Only reads (19)

Looks things up and changes nothing. Claude Code: allow.

### `browse_transcriptions`

- The name "browse_transcriptions" says "browse": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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).
```

### `get_archives`

- The name "get_archives" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_births`

- The name "get_births" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Finds birth records
```

### `get_births_years_ago`

- The name "get_births_years_ago" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_breakdown`

- The name "get_breakdown" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_census_data`

- The name "get_census_data" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_deaths`

- The name "get_deaths" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Finds death records
```

### `get_event_type_stats`

- The name "get_event_type_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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`.
```

### `get_family_name_stats`

- The name "get_family_name_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_first_name_stats`

- The name "get_first_name_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_historical_weather`

- The name "get_historical_weather" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_marriages`

- The name "get_marriages" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Finds marriage records of couples (bride or groom)
```

### `get_profession_stats`

- The name "get_profession_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_record_stats`

- The name "get_record_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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`.
```

### `get_source_type_stats`

- The name "get_source_type_stats" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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`.
```

### `search_records`

- The name "search_records" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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`.
```

### `search_transcriptions`

- The name "search_transcriptions" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `show_record`

- The name "show_record" says "show": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `show_transcription`

- The name "show_transcription" says "show": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `openarchieven`:

```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": []
  }
}
```
