Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://mcp.openarchieven.nl/ターミナルでこれを実行します
claude mcp add --transport http openarchieven https://mcp.openarchieven.nl/プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"openarchieven": {
"url": "https://mcp.openarchieven.nl/"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"openarchieven": {
"type": "http",
"url": "https://mcp.openarchieven.nl/"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://mcp.openarchieven.nl/メニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのツール一覧はまだ読み取っていません。エンドポイントは順番にチェックしています。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント coret で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
GitHubリポジトリの最終更新は–、最新バージョン(1.1.1)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Agent Data Tools: Utilities
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
103 tools: JSON repair, CSV, hashes, cron, dates, units, validators. 25 free calls.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Production-grade hybrid MCP + HTTP + SSE server generated from the Open Archives OpenAPI specification. Covers genealogical records (births, deaths, marriages, censuses), archive statistics, historical weather, and full-text page transcriptions of historical documents.
OpenAPI source used to generate tools:
../api/openapi.yaml (local)
https://api.openarchieven.nl/openapi.yaml (remote)
A schema-aware server that automatically converts the OpenAPI specification into callable tools and exposes them through multiple transports:
Video (Dutch): Help AI met jouw erfgoedservices (via MCP)
A hosted endpoint is available — no installation required.
In claude.ai or Claude Desktop:
https://mcp.openarchieven.nl/No authentication is required — Open Archives is a public dataset.
Once the connector is added you can ask Claude, for example:
Claude will call the matching tool (search_records, show_record, get_marriages, get_historical_weather, get_census_data, …) and return links to the corresponding record pages on https://www.openarchieven.nl.
The server speaks MCP over Streamable HTTP; there is no stdio distribution. To run your own instance:
git clone https://github.com/coret/openarchieven-mcp-server.git
cd openarchieven-mcp-server npm install npm run generate # builds generated/tools.json from openapi.yaml npm run build:viewer # builds dist/viewer.html (the MCP App) npm start # listens on http://localhost:3001/
Point your MCP client at http://localhost:3001/ (or your own public URL) the same way as the hosted endpoint above.
Every API operation becomes a tool automatically via generate.ts.
All 21 operations:
| Tool Name | Description |
|---|---|
search_records | Search genealogical records |
show_record | Show a single genealogical record |
match_record | Match a person to birth and death records |
get_births_years_ago | List births from N years ago |
get_births | Find birth records |
get_deaths | Find death records |
get_marriages | Find marriage records |
get_archives | List all archives with statistics |
get_record_stats | Record count per archive |
get_source_type_stats | Record count per source type |
get_event_type_stats | Record count per event type |
get_comment_stats | Comment count statistics |
get_family_name_stats | Family name frequency |
get_first_name_stats | First name frequency |
get_profession_stats | Profession frequency |
get_breakdown | Cross-tabulation grouped by archive, source type, event type, place or year |
get_historical_weather | Historical weather from KNMI |
get_census_data | Dutch census data 1795–1899 |
search_transcriptions | Full-text search across page transcriptions of historical documents |
browse_transcriptions | Hierarchically browse transcriptions by source archive, archive number or inventory |
show_transcription | Retrieve a single page transcription by id |
Note: The
callback(JSONP) parameter present in the upstream API is excluded from all tools — it is irrelevant in an MCP/JSON-RPC context.
Beyond the 21 auto-generated tools, the server registers one hand-written tool — `view_transcription` — that opens transcribed pages in an interactive IIIF deep-zoom viewer (OpenSeadragon) with the transcription text alongside, using the MCP Apps extension (io.modelcontextprotocol/ui).
| Tool Name | Description |
|---|---|
view_transcription | Open one or more transcribed pages (ids: ["NL-SdmGA_1504889_11", …]) in a deep-zoom IIIF viewer with the transcript; optional highlight_term |
ui://openarchieven/viewer.html) in a sandboxed iframe that loads images directly from the transcription image hosts (CSP-allowlisted as *.transkribus.eu, *.archief.nl, *.archieven.nl, *.memorix.nl). Transkribus and the archief.nl iipsrv server provide true IIIF deep zoom; the preserve*.archieven.nl thumbnail hosts render as flat images.The viewer is a single self-contained dist/viewer.html, bundled at build time with npm run build:viewer (vite + vite-plugin-singlefile); it is not listed by the REST GET /tools endpoint, only via MCP tools/list.
Uses actual OpenAPI parameter schemas. Validates:
POST / ← canonical public endpoint (mcp.openarchieven.nl)
POST /mcp ← local / legacy alias
Stateless JSON-RPC transport — a new MCP server instance is created per request.
Origin validation: Browser requests must come from
claude.ai,
claude.com, or any domain listed inALLOWED_ORIGINS. Requests with no
Originheader (native MCP clients,curl, server-to-server) are
accepted. Unknown origins receive HTTP 403.
GET /tools
POST /tools/:name
GET /events/:name
POST /stream/:name
/.well-known)Static, hand-editable JSON files served verbatim from well-known/:
GET /.well-known/mcp/server-card.json ← SEP-1649 MCP Server Card
GET /.well-known/mcp.json ← alias of the server card GET /.well-known/agent-card.json ← A2A v0.3 Agent Card GET /.well-known/agent.json ← alias of the agent card
Edit well-known/mcp-server-card.json and well-known/agent-card.json directly — no restart required (files are read on each request). Responses are sent with Content-Type: application/json; charset=utf-8 and Cache-Control: public, max-age=3600.
Streaming endpoints (/events/:name, /stream/:name) automatically paginate through results for endpoints that support a start offset:
start by number_show per page: heartbeat comment every 10 seconds to keep connections aliveOptional Redis support.
If Redis is running, upstream responses are cached with a per-tool TTL tuned to the data's volatility:
| Category | TTL | Tools |
|---|---|---|
| Immutable historical | never expires | get_historical_weather, get_census_data |
| Slowly-changing metadata | 7 days | get_archives |
| Stats aggregations | 1 day | get_record_stats, get_source_type_stats, get_event_type_stats, get_comment_stats, get_family_name_stats, get_first_name_stats, get_profession_stats, get_breakdown |
| Individual record lookups | 1 day | show_record, show_transcription |
| Search-style | 6 hours | search_records, match_record, get_births, get_deaths, get_marriages, search_transcriptions, browse_transcriptions |
| Date-bound | next UTC midnight | get_births_years_ago |
CACHE_TTL (default 3600) is the fallback for any tool not in the map above.
If Redis is unavailable:
The upstream API enforces 4 requests per second per IP. The server queues all upstream calls through a token-bucket rate limiter (configurable via RATE_LIMIT_RPS).
GET /health
generate.ts
server.ts tsconfig.json package.json .env.example generated/ tools.json spec.json
Copy .env.example to .env and adjust:
cp .env.example .env
| Variable | Default | Description |
|---|---|---|
PORT | 3001 | HTTP port |
OPENAPI_PATH | ../api/openapi.yaml | Path or URL to OpenAPI spec |
UPSTREAM_BASE | https://api.openarchieven.nl/1.1 | Upstream API base URL |
RATE_LIMIT_RPS | 4 | Upstream requests per second |
REDIS_URL | redis://localhost:6379/5 | Redis connection URL (db 5) |
CACHE_TTL | 3600 | Fallback cache TTL in seconds (used for tools not in the per-tool map; see Redis Cache) |
LOG_LEVEL | info | trace debug info warn error fatal |
NODE_ENV | _(unset)_ | Set to production for JSON logs (default: pretty-printed) |
ALLOWED_ORIGINS | _(empty)_ | Extra Origin headers allowed on the MCP endpoint (comma-separated). Claude domains and requests without an Origin header are always allowed. |
npm install
Run from local spec:
npx tsx generate.ts
Or from remote URL:
npx tsx generate.ts https://api.openarchieven.nl/openapi.yaml
Expected result:
Generated 21 tools
Output: generated/tools.json, generated/spec.json
Creates:
generated/tools.json
generated/spec.json
npx tsx server.ts
Expected startup (development — pretty-printed):
[12:00:00] INFO: Open Archieven MCP server started
port: 3001 tools: 21 upstream: "https://api.openarchieven.nl/1.1" rateLimit: "4 req/s" redis: "redis://localhost:6379/5" env: "development"
In production (NODE_ENV=production) each log line is a single JSON object.
Server binds to:
http://0.0.0.0:3001
curl http://localhost:3001/health
Expected:
{
"ok": true, "tools": 21, "redis": false, "uptime": 1.23 }
curl http://localhost:3001/tools
Expected:
[
"search_records", "show_record", "match_record", "get_births_years_ago", "get_births", "get_deaths", "get_marriages", "get_archives", "get_record_stats", "get_source_type_stats", "get_event_type_stats", "get_comment_stats", "get_family_n
冒頭だけを表示しています。続きはリポジトリで読めます