protogrid

Search / io.github.cyanheads/unhcr-refugees-mcp-server

unhcr-refugees-mcp-server

R0· no sign-in

Query UNHCR refugee, IDP, and stateless populations, asylum decisions, returns, and resettlement.

v0.2.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality84good
Trust94of 100
Uptime, 30 days100%
Latency p50226 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "unhcr-refugees-mcp-server": {
      "type": "http",
      "url": "https://unhcr-refugees.caseyjhand.com/mcp"
    }
  }
}
claude mcp add --transport http unhcr-refugees-mcp-server https://unhcr-refugees.caseyjhand.com/mcp
[mcp_servers.unhcr-refugees-mcp-server]
url = "https://unhcr-refugees.caseyjhand.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "unhcr-refugees-mcp-server": {
      "type": "remote",
      "url": "https://unhcr-refugees.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "unhcr-refugees-mcp-server": {
      "type": "http",
      "url": "https://unhcr-refugees.caseyjhand.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=unhcr-refugees-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdW5oY3ItcmVmdWdlZXMuY2FzZXlqaGFuZC5jb20vbWNwIn0%3D"
}
{
  "servers": {
    "unhcr-refugees-mcp-server": {
      "type": "http",
      "url": "https://unhcr-refugees.caseyjhand.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "unhcr-refugees-mcp-server": {
      "httpUrl": "https://unhcr-refugees.caseyjhand.com/mcp"
    }
  }
}
extensions:
  "unhcr-refugees-mcp-server":
    enabled: true
    name: "unhcr-refugees-mcp-server"
    type: streamable_http
    uri: "https://unhcr-refugees.caseyjhand.com/mcp"
    timeout: 300

Quality 84 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations8 of 8 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: unhcr_list_reference (destructiveHint); unhcr_get_asylum_decisions (destructiveHint); unhcr_get_solutions (destructiveHint); …
  • pass
    tools.token_costabout 6,873 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes7 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15

8 tools, about 6,873 tokens to load them all · tool set 974048b7795f · tools last changed 2026-10-20 · checked 2026-10-20 23:59 UTC

Tool changes

  • unhcr_dataframe_querychangeddescription, input schema, output schema
    before

    Run a single-statement SELECT against the dataframes staged by the unhcr_get_* tools. Check a dataframe’s columns with unhcr_dataframe_describe first. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, external-file functions, and system catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are rejected. Optional register_as saves the result as a new dataframe with a fresh TTL. Recompute rates from summed counts rather than averaging rate columns.

    after · 69% of words in common

    Run a single-statement SELECT against the dataframes staged by the unhcr_get_* tools. Check a dataframe’s columns with unhcr_dataframe_describe first. Writes, DDL, DROP, COPY, PRAGMA, ATTACH, file references, external-data functions, engine introspection, dynamic table lookup, and system catalogs are rejected; query() accepts only a single SQL string literal, checked by the same gate. Optional register_as saves the result as a new dataframe with a fresh TTL. Recompute rates from summed counts rather than averaging rate columns.

  • unhcr_dataframe_describechangedoutput schema
  • unhcr_get_solutionschangedinput schema
  • unhcr_get_asylum_decisionschangedinput schema
  • unhcr_get_asylum_applicationschangedinput schema
  • unhcr_get_demographicschangedinput schema
  • unhcr_get_populationchangedinput schema

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% +updated-1d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://unhcr-refugees.caseyjhand.com/mcp streamable-httpnoneyes100%226 ms2026-07-282026-10-21
packageregistryversionruntimesecrets
@cyanheads/unhcr-refugees-mcp-servernpm0.2.0npx
@cyanheads/unhcr-refugees-mcp-servernpm0.2.0npx

Tools (8)

unhcr_dataframe_describeread-onlyDescribe a dataframe (df_XXXXX_XXXXX) staged by the unhcr_get_* tools — any response carrying a dataset handle staged its full result here — or list them all where this deployment allows listing. Each entry gives the source tool, query parameters, creation and expiry time, row count, whether the upstream fetch was complete, and the column schema. Read the columns here before writing SQL for unhcr_dataframe_query.
unhcr_dataframe_queryread-onlyRun a single-statement SELECT against the dataframes staged by the unhcr_get_* tools. Check a dataframe’s columns with unhcr_dataframe_describe first. Writes, DDL, DROP, COPY, PRAGMA, ATTACH, file references, external-data functions, engine introspection, dynamic table lookup, and system catalogs are rejected; query() accepts only a single SQL string literal, checked by the same gate. Optional register_as saves the result as a new dataframe with a fresh TTL. Recompute rates from summed counts rather than averaging rate columns.
unhcr_get_asylum_applicationsread-onlyGet asylum applications lodged per year (2000 to the latest year) by country of origin and/or asylum, split by default into application stage — new, repeat, appeal, and the combined stages some countries report — so new claims are not added to appeals of old ones. Counts given as cases are never added to counts of persons; each row states its unit. Decode stage, authority, and decision-level codes with unhcr_list_reference (topic asylum_codes).
unhcr_get_asylum_decisionsread-onlyGet asylum decisions per year (2000 to the latest year) by country of origin and/or asylum: recognized as refugees, complementary protection, rejected, and otherwise closed, with UNHCR's Refugee Recognition Rate and Total Protection Rate computed over substantive decisions (otherwise-closed cases excluded). By default all decision levels are summed and each row lists the levels it includes; appeal-stage decisions can concern people already decided at first instance, so split_by decision_level or filter decision_levels to FI for first-instance rates. Cases and persons are never added together.
unhcr_get_demographicsread-onlyGet UNHCR year-end stocks (2001 to the latest year) broken down by population type, sex, and age band (0–4, 5–11, 12–17, 18–59, 60+, unknown age), by country of origin and/or asylum. Coverage is partial: each row gives the share of its total that UNHCR could disaggregate by sex, and age bands are null where no breakdown exists. These totals come from a separate collection and need not match unhcr_get_population.
unhcr_get_populationread-onlyGet UNHCR year-end displacement stocks (1951 to the latest year) by country of origin and/or asylum: refugees, asylum-seekers, other people in need of international protection, IDPs, stateless people, others of concern, and host communities, plus refugees and IDPs who returned during the year. Stocks count people in a situation on 31 December, not arrivals. Palestine refugees under UNRWA's mandate and IDMC's conflict-IDP estimate are separate series shown beside each row. Set include_nowcast for UNHCR's current-year estimate by asylum country; for sex and age breakdowns, use unhcr_get_demographics.
unhcr_get_solutionsread-onlyGet durable solutions per year (1959 to the latest year) by country of origin and/or asylum: refugees who returned home, refugees resettled to a third country, refugees naturalised, and IDPs who returned. The asylum country means something different per column: the country refugees returned from, the country they were resettled to, the country that naturalised them; IDP returns sit on the origin country itself. Null means the figure was not collected for that country and year, not zero.
unhcr_list_referenceread-onlyDecode the vocabulary the unhcr_* tools take as input: countries (ISO3, ISO2, UNHCR code, names, UNHCR and UN regions), UNHCR’s regional bureaus, each dataset’s first and latest year, population-type definitions, and the asylum authority, stage, decision-level, and unit codes. Filter countries with name_contains to turn a country name into the ISO3 code that origin and asylum take.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 140 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/unhcr-refugees-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://unhcr-refugees.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.2.0",
  "packages": [
    {
      "version": "0.2.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/unhcr-refugees-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "UNHCR_REQUESTS_PER_SECOND",
          "format": "number",
          "default": "4",
          "description": "Upstream request starts per second for the whole process (1–10)."
        },
        {
          "name": "UNHCR_MAX_ROWS",
          "format": "number",
          "default": "150000",
          "description": "Most upstream rows one tool call fetches (10000–500000); a larger result stops at the cap with complete: false."
        },
        {
          "name": "UNHCR_CACHE_MAX_MB",
          "format": "number",
          "default": "64",
          "description": "Response-cache budget in MB; 0 disables the cache."
        },
        {
          "name": "UNHCR_DATASET_TTL_SECONDS",
          "format": "number",
          "default": "86400",
          "description": "Per-table TTL for staged dataframes, in seconds (minimum 60)."
        },
        {
          "name": "UNHCR_DATAFRAME_DROP_ENABLED",
          "format": "boolean",
          "default": "false",
          "description": "Set to true to register unhcr_dataframe_drop; off by default, the per-table TTL reclaims staged tables."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    },
    {
      "version": "0.2.0",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/unhcr-refugees-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_TRANSPORT_TYPE",
          "value": "http",
          "format": "string",
          "description": "Selects the HTTP transport."
        },
        {
          "name": "UNHCR_REQUESTS_PER_SECOND",
          "format": "number",
          "default": "4",
          "description": "Upstream request starts per second for the whole process (1–10). Every caller of a hosted instance shares it."
        },
        {
          "name": "UNHCR_MAX_ROWS",
          "format": "number",
          "default": "150000",
          "description": "Most upstream rows one tool call fetches (10000–500000); a larger result stops at the cap with complete: false."
        },
        {
          "name": "UNHCR_CACHE_MAX_MB",
          "format": "number",
          "default": "64",
          "description": "Response-cache budget in MB; 0 disables the cache."
        },
        {
          "name": "UNHCR_DATASET_TTL_SECONDS",
          "format": "number",
          "default": "86400",
          "description": "Per-table TTL for staged dataframes, in seconds (minimum 60)."
        },
        {
          "name": "UNHCR_DATAFRAME_DROP_ENABLED",
          "format": "boolean",
          "default": "false",
          "description": "Set to true to register unhcr_dataframe_drop; off by default, the per-table TTL reclaims staged tables."
        },
        {
          "name": "MCP_HTTP_HOST",
          "format": "string",
          "default": "127.0.0.1",
          "description": "The hostname for the HTTP server."
        },
        {
          "name": "MCP_HTTP_PORT",
          "format": "string",
          "default": "3010",
          "description": "The port to run the HTTP server on."
        },
        {
          "name": "MCP_HTTP_ENDPOINT_PATH",
          "format": "string",
          "default": "/mcp",
          "description": "The endpoint path for the MCP server."
        },
        {
          "name": "MCP_AUTH_MODE",
          "format": "string",
          "default": "none",
          "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/unhcr-refugees-mcp-server",
    "source": "github"
  },
  "description": "Query UNHCR refugee, IDP, and stateless populations, asylum decisions, returns, and resettlement."
}