Koskamo

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.

Open Archives MCP logo, by Coret GenealogyCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Coret Genealogy
MCP endpoint (Streamable HTTP)
https://mcp.openarchieven.nl/
Vendor documentation

What its tools do

22 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

22 of 22 have a description · 22 of 22 declare behavior hints · 1 of 21 with parameters document them all

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

Community listingRegistry 1.1.1
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
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

22 advertised

search_records — Search Records
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_records input schema
{
  "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
}
search_records annotations
{
  "title": "Search Records",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
show_record — Show Record
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_record input schema
{
  "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
}
show_record annotations
{
  "title": "Show Record",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
match_record — Match Record
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

match_record input schema
{
  "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
}
match_record annotations
{
  "title": "Match Record",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_births_years_ago — Births N Years Ago
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_births_years_ago input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "years"
  ],
  "properties": {
    "years": {
      "type": "integer"
    },
    "number_show": {
      "type": "integer",
      "maximum": 100
    }
  },
  "additionalProperties": false
}
get_births_years_ago annotations
{
  "title": "Births N Years Ago",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_births — Find Births
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Finds birth records

get_births input schema
{
  "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
}
get_births annotations
{
  "title": "Find Births",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_deaths — Find Deaths
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Finds death records

get_deaths input schema
{
  "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
}
get_deaths annotations
{
  "title": "Find Deaths",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_marriages — Find Marriages
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Finds marriage records of couples (bride or groom)

get_marriages input schema
{
  "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
}
get_marriages annotations
{
  "title": "Find Marriages",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_archives — List Archives
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_archives input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_archives annotations
{
  "title": "List Archives",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_record_stats — Record Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_record_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "archive_code": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_record_stats annotations
{
  "title": "Record Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_source_type_stats — Source-Type Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_source_type_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "archive_code": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_source_type_stats annotations
{
  "title": "Source-Type Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_event_type_stats — Event-Type Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_event_type_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "archive_code": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_event_type_stats annotations
{
  "title": "Event-Type Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_comment_stats — Comment Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

get_comment_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "archive_code": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_comment_stats annotations
{
  "title": "Comment Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_family_name_stats — Family-Name Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_family_name_stats input schema
{
  "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
}
get_family_name_stats annotations
{
  "title": "Family-Name Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_first_name_stats — First-Name Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_first_name_stats input schema
{
  "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
}
get_first_name_stats annotations
{
  "title": "First-Name Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_profession_stats — Profession Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_profession_stats input schema
{
  "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
}
get_profession_stats annotations
{
  "title": "Profession Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_breakdown — Breakdown Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_breakdown input schema
{
  "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
}
get_breakdown annotations
{
  "title": "Breakdown Stats",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_historical_weather — Historical Weather
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_historical_weather input schema
{
  "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
}
get_historical_weather annotations
{
  "title": "Historical Weather",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_census_data — Census Data (1795–1899)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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_census_data input schema
{
  "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
}
get_census_data annotations
{
  "title": "Census Data (1795–1899)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
search_transcriptions — Search Transcriptions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_transcriptions input schema
{
  "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
}
search_transcriptions annotations
{
  "title": "Search Transcriptions",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
browse_transcriptions — Browse Transcriptions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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

browse_transcriptions input schema
{
  "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
}
browse_transcriptions annotations
{
  "title": "Browse Transcriptions",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
show_transcription — Show Transcription
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

show_transcription input schema
{
  "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
}
show_transcription annotations
{
  "title": "Show Transcription",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
view_transcription — View Transcription (IIIF deep-zoom)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

view_transcription input schema
{
  "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
}
view_transcription annotations
{
  "title": "View Transcription (IIIF deep-zoom)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

Open Archieven IIIF viewer

Advertised by the server during the last successful anonymous check.

Deep-zoom IIIF viewer with transcription overlay.

Open Archieven IIIF viewer URI
ui://openarchieven/viewer.html

MIME type: text/html;profile=mcp-app

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

Too few checks for a percentage yet (5 of 5 answered).

  1. 2026-11-02: 3 of 3 checks answered
  2. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http open-archives-mcp https://mcp.openarchieven.nl/

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add open-archives-mcp --url https://mcp.openarchieven.nl/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable open-archives-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "open-archives-mcp": {
      "url": "https://mcp.openarchieven.nl/"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "open-archives-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.openarchieven.nl/",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start open-archives-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "open-archives-mcp": {
      "type": "http",
      "url": "https://mcp.openarchieven.nl/"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http open-archives-mcp https://mcp.openarchieven.nl/

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "open-archives-mcp": {
      "url": "https://mcp.openarchieven.nl/"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.