Unhrdb
FreeNot checkedModel Context Protocol server for source-exact UNHRDB and UHRI+ search and lookup
About
Model Context Protocol server for source-exact UNHRDB and UHRI+ search and lookup
README
MCP Node License: PolyForm Noncommercial
Model Context Protocol server for two UN human-rights corpora, exposed as four read-only tools over one connector:
- UNHRDB paragraphs — a paragraph-level corpus of UN Treaty Body General Comments, individual-communication jurisprudence, and Special Procedures reports (≈203,000 paragraphs across ≈4,900 documents, citable to the paragraph number).
- UHRI recommendations — ≈267,000 recommendations and observations addressed to individual UN Member States by the Universal Periodic Review, Treaty Bodies and Special Procedures (2006–present), citable by UN document symbol.
The two corpora are never blended — each tool queries exactly one backend, so a recommendations search can't return a General Comment and vice versa. Ask in plain language ("search the recommendations for…" / "in General Comments only") and the tool descriptions route it.
It runs as a stdio (or HTTP) process and is a thin wrapper over the live HTTP APIs: it adds no index of its own, it just re-exposes the search backends over MCP so any client (Claude Desktop, Claude Code, Cowork) can query them natively.
Companion to the UNHRD search interface and the UHRI+ analytics dashboard.
Try it instantly — no token, no deployment. The server ships pointed at the live public API, so
npm installand the Claude Desktop config below are all you need to start querying the corpus. (Self-hosting your own token-gated route is optional — see deploy/RUNBOOK.md.)
Tools
Paragraph corpus (General Comments / jurisprudence / Special Procedures):
| Tool | Description |
|---|---|
search_paragraphs |
Full-text search with scope (gc / jur / sp / all), committee and year filters. Returns verbatim paragraphs with UN signature + ¶ number. |
lookup_by_citation |
Resolve a citation such as CRC/C/GC/25 ¶12 or A/HRC/61/42 para 10 to its verbatim paragraph. Omit the ¶ number to get document metadata. |
UHRI recommendations corpus (State-directed recommendations & observations):
| Tool | Description |
|---|---|
search_recommendations |
Faceted full-text search over ≈267k recommendations. Filters: query, countries, bodies, themes, affected_persons, sdgs, annotation_type, year_start/year_end, page, limit. Returns each item verbatim with UN symbol + body + country + year + annotation_id. |
lookup_recommendation |
Fetch the full verbatim record for one recommendation by its annotation_id (from a search result) — complete text plus every theme / affected-person / SDG / region label. |
list_uhri_facets |
List valid filter values (country names, body codes, regions, annotation types, year span). Call it first for exact spellings. |
Every result is a verbatim UN paragraph or recommendation with its signature/symbol — no paraphrase, no synthesised text — so answers stay citable to the original UN document.
Two transports
| Transport | Entry | Use it for |
|---|---|---|
| stdio | src/index.js (npm start) |
Claude Code, Claude Desktop — the client spawns it locally |
| HTTP (Streamable HTTP) | src/http.js (npm run start:http) |
Remote clients — Claude Cowork, claude.ai, the connector registry — reach it at a URL |
Local clients can't add a URL and remote clients can't spawn a local process, so which transport you need depends on the client. See Remote / HTTP hosting for the URL setup.
Requirements
- Node.js ≥ 18
- Network access to the UNHRDB API
Install
git clone <repo-url> mcp-unhrdb
cd mcp-unhrdb
npm install
Run (standalone test)
node src/index.js
# listens on stdin/stdout; diagnostics on stderr
Or run the end-to-end smoke test (spawns the server, lists tools, calls both):
node test-smoke.js
Configuration (env)
| Variable | Default | Notes |
|---|---|---|
UNHRDB_API_BASE |
https://150.254.115.204/unhrdb-api/api |
Base URL of the paragraph API. Point at …/unhrdb-mcp/api to use the token-gated, independently rate-limited route (see deploy/RUNBOOK.md). |
UNHRDB_API_KEY |
(empty) | Optional token sent as the X-API-Key header. Required by the hardened /unhrdb-mcp/ route; ignored by the public /unhrdb-api/ route. |
UHRI_API_BASE |
https://150.254.115.204/uhri-api/api |
Base URL of the UHRI recommendations API. Public route needs no key; co-located self-hosting uses http://127.0.0.1:8001/api. |
UHRI_API_KEY |
(empty) | Optional token for the UHRI API (X-API-Key). The public route ignores it. |
UNHRDB_INSECURE_TLS |
1 |
1 accepts the VM's self-signed certificate (applies to both APIs). Set to 0 once the APIs are behind a trusted certificate. The relaxed TLS is scoped to this server's own HTTPS agent — it does not weaken TLS globally. |
Wire into Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"unhrdb": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/mcp-unhrdb/src/index.js"]
}
}
}
Replace /ABSOLUTE/PATH/TO/ with the directory where you cloned this repo
(e.g. the output of pwd from inside it).
Claude Code
claude mcp add-json -s user unhrdb \
'{"command":"node","args":["/ABSOLUTE/PATH/TO/mcp-unhrdb/src/index.js"]}'
Use -s user for all your projects, or -s local for the current one. To
point at a self-hosted token-gated route, add an env block:
{"UNHRDB_API_BASE":"https://<host>/unhrdb-mcp/api","UNHRDB_API_KEY":"<token>"}.
Restart Claude Desktop; the two tools appear under the 🔌 menu.
Remote / HTTP hosting
Remote clients (Claude Cowork, claude.ai, the connector registry) connect to a
URL, not a local process — so the server has to be hosted. The HTTP entry
(src/http.js) serves the same two tools over MCP's Streamable HTTP transport.
Run it with Docker (host networking, so it reaches a co-located UNHRDB API on
127.0.0.1:8002 and listens on 127.0.0.1:8004):
MCP_AUTH_TOKEN=<your-token> docker compose up -d --build
curl -s http://127.0.0.1:8004/health # {"status":"ok",…}
Front it with TLS + a public path. The repo ships an nginx block at
deploy/unhrdb-mcp-rpc.location.conf
that exposes it at https://<host>/unhrdb-mcp-rpc/mcp. Clients authenticate
with Authorization: Bearer <MCP_AUTH_TOKEN>.
Add that URL as a custom remote connector where your client supports one. The
endpoint is stateless (POST /mcp); GET/DELETE return 405.
Notes & limits
search_paragraphsandsearch_recommendationsreturn up tolimit(≤20) from the requestedpage; paginate withpagefor more.lookup_by_citationmatches on the printed paragraph number (¶N), falling back to internal index, so lettered sub-items resolve correctly.search_recommendationsaccepts clean body codes (CAT,CCPR,UPR) and country names as spelled bylist_uhri_facets; multiple values in a filter are OR-combined.themes/affected_persons/sdgstake exact long labels.- Five read-only tools over two corpora.
lookup_recommendationcurrently resolves anannotation_id; lookup by UN symbol needs asymbolfilter on the records API (pending a backend pass). Candidate next tools:get_document(full paragraph text),find_related(embedding neighbours).
License
PolyForm Noncommercial 1.0.0. Research, education, non-profit, and personal use are permitted; commercial use requires a separate licence. See LICENSE. The UNHRDB and UHRI corpora have separate terms.
Citation
Szoszkiewicz, Ł. (2026). mcp-unhrdb: MCP server for UNHRDB and UHRI+ (Version 0.3.1) [Computer software].
Machine-readable citation metadata is available in CITATION.cff.
Install Unhrdb in Claude Desktop, Claude Code & Cursor
unyly install unhrdbInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add unhrdb -- npx -y github:lszoszk/mcp-unhrdbStep-by-step: how to install Unhrdb
FAQ
Is Unhrdb MCP free?
Yes, Unhrdb MCP is free — one-click install via Unyly at no cost.
Does Unhrdb need an API key?
No, Unhrdb runs without API keys or environment variables.
Is Unhrdb hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Unhrdb in Claude Desktop, Claude Code or Cursor?
Open Unhrdb on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzMCP-Agent
A simple, composable framework to build agents using Model Context Protocol by [LastMile AI](https://www.lastmileai.dev)
by lastmile-aiSpring AI MCP Client
Provides auto-configuration for MCP client functionality in Spring Boot applications.
mcp.natoma.ai
A Hosted MCP Platform to discover, install, manage and deploy MCP servers by [Natoma Labs](https://www.natoma.ai)
MCPHub
Website to list high quality MCP servers and reviews by real users. Also provide online chatbot for popular LLM models with MCP server support.
MCP Servers Rating and User Reviews
Website to rate MCP servers, write authentic user reviews, and [search engine for agent & mcp](http://www.deepnlp.org/search/agent)
mkinf
An Open Source registry of hosted MCP Servers to accelerate AI agent workflows.
Compare Unhrdb with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
