addrbookFor publishers
← The evidence ledger

Evidence row 580037

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 05eab58b-2dfd-45a6-87cc-e4f1cd7d70d0
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
0ec5f490a99b5789f0463c617c99efe06787bfa90710fe14483db107ac3b92ec
Leaf
0x8ba811a733ee4d4c5bfe418a57faefd0b06b84dfef2e9cd4cb7dc660e280db30

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Describe 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "One dataframe to describe, as df_XXXXX_XXXXX (uppercase letters and digits): the dataset.name a unhcr_get_* result returned, or a register_as name. Omit to list every staged dataframe; a deployment that serves unauthenticated callers over HTTP turns listing off, and there the name is required.",
            "maxLength": 14,
            "pattern": "^df_[A-Z0-9]{5}_[A-Z0-9]{5}$",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "unhcr_dataframe_describe"
    },
    {
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "preview": {
            "description": "Requested inline rows, 0–1000000. Values above row_limit are clamped to row_limit with disclosure. Omit to return every row up to row_limit; the serialized byte ceiling may withhold whole rows or metadata, preserving the result as lossless chunks.",
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer"
          },
          "register_as": {
            "description": "Save the result as a new dataframe under this name (df_ plus two groups of 5 uppercase letters or digits, e.g. df_ABCDE_12345) with a fresh TTL, to chain analyses. The name must not already be staged. The saved rows count toward the 1,000,000-row staging budget: the oldest other dataframes are evicted to make room, and a result larger than the budget is not saved.",
            "maxLength": 14,
            "pattern": "^df_[A-Z0-9]{5}_[A-Z0-9]{5}$",
            "type": "string"
          },
          "row_limit": {
            "default": 1000,
            "description": "Most rows the query materializes (1–10000, default 1000). When more match, row_count_capped is true; use register_as to keep the full result.",
            "maximum": 10000,
            "minimum": 1,
            "type": "integer"
          },
          "sql": {
            "description": "One DuckDB SELECT against df_XXXXX_XXXXX tables, at most 20,000 characters — joins, aggregates, window functions, and CTEs work. SUM and COUNT results come back as JSON strings (BIGINT); CAST(… AS DOUBLE) for inline arithmetic. Staged tables add origin/asylum UNHCR and UN region columns for regional GROUP BY.",
            "maxLength": 20000,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "sql"
        ],
        "type": "object"
      },
      "name": "unhcr_dataframe_query"
    },
    {
      "description": "Get 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).",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "asylum": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of asylum — where people sought or hold protection; for returns, the country they returned from — as ISO3 codes (DEU, TUR), case-insensitive, same rules as origin. At most 50 codes. Omit to sum every asylum country into one row, or set expand to list each."
          },
          "expand": {
            "default": "none",
            "description": "List every country, one row each, for a dimension that origin or asylum leaves unfiltered: origin, asylum, or both. Default none, where an unfiltered dimension is summed into one row. Expanding a dimension that origin or asylum already filters is rejected.",
            "enum": [
              "none",
              "origin",
              "asylum",
              "both"
            ],
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "Requested inline rows, 1–1000000 (default 100); values above 500 are clamped to 500 with disclosure. Sorting runs over the full result first; a larger result is staged as a dataframe where dataframes are enabled.",
            "maximum": 1000000,
            "minimum": 1,
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of origin — where people fled from — as ISO3 codes (SYR, AFG), case-insensitive. ISO 3166 alpha-2 codes (SY) are rewritten to ISO3 and echoed in applied_scope. UNHCR's own codes (GFR) are rejected with the ISO3 to pass instead, and country names are rejected: resolve a name with unhcr_list_reference (topic countries, name_contains). Each listed code returns its own rows; codes are never summed together. At most 50 codes. Omit to sum every origin into one row, or set expand to list each."
          },
          "sort_by": {
            "default": "year",
            "description": "Order of the full result before the inline cut. year (default) orders by year, then origin ISO3, then asylum ISO3; applied orders largest first, nulls last.",
            "enum": [
              "year",
              "applied"
            ],
            "type": "string"
          },
          "split_by": {
            "default": [
              "stage"
            ],
            "description": "Procedure dimensions kept as separate rows: authority (government, UNHCR, or joint), stage (new, repeat, appeal, …), decision_level. Every dimension left out is summed. Default [\"stage\"]; [] gives one total per year and scope for each unit. Unit is always kept separate.",
            "items": {
              "description": "A procedure dimension to keep separate.",
              "enum": [
                "authority",
                "stage",
                "decision_level"
              ],
              "type": "string"
            },
            "maxItems": 3,
            "type": "array"
          },
          "stage": {
            "default": false,
            "description": "Stage the full result as a dataframe even when it fits inline, e.g. to join it with another unhcr_get_* result in unhcr_dataframe_query. Where dataframes are unavailable it is ignored, and the notice says so.",
            "type": "boolean"
          },
          "stages": {
            "description": "Keep only these application stages before summing, case-insensitive: N new, R repeat, A appeal, NA new and appeal together, NR new and repeat together, FA first and appeal, J judiciary, BL backlog, SP subsidiary protection; V and RA appear in the data without a published definition. [\"N\"] gives new applications only, the basis of UNHCR's headline figure. Omit for every stage.",
            "items": {
              "description": "An application-stage code.",
              "enum": [
                "N",
                "R",
                "A",
                "NA",
                "NR",
                "FA",
                "J",
                "BL",
                "SP",
                "V",
                "RA"
              ],
              "type": "string"
            },
            "maxItems": 11,
            "type": "array"
          },
          "year_from": {
            "description": "First year of the window. When omitted, the window starts at the dataset's first year. A year before the dataset's first year is clamped to it and the clamp is reported; a window entirely outside the dataset's years is rejected.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "year_to": {
            "description": "Last year of the window. When omitted, the window runs to the latest published year (latest_year in the result). A year past the latest published year is clamped to it and the clamp is reported.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "unhcr_get_asylum_applications"
    },
    {
      "description": "Get 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "asylum": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of asylum — where people sought or hold protection; for returns, the country they returned from — as ISO3 codes (DEU, TUR), case-insensitive, same rules as origin. At most 50 codes. Omit to sum every asylum country into one row, or set expand to list each."
          },
          "decision_levels": {
            "description": "Keep only these decision levels before summing, case-insensitive: NA new applications, FI first instance, AR administrative review, RA repeat/reopened, IN US Citizenship and Immigration Services, EO US Executive Office for Immigration Review, JR judicial review, SP subsidiary protection, FA first instance and appeal, TP temporary protection, TA temporary asylum, BL backlog, TR temporary leave to remain, CA cantonal regulations (Switzerland). [\"FI\"] gives first-instance decisions. Omit for every level.",
            "items": {
              "description": "A decision-level code.",
              "enum": [
                "NA",
                "FI",
                "AR",
                "RA",
                "IN",
                "EO",
                "JR",
                "SP",
                "FA",
                "TP",
                "TA",
                "BL",
                "TR",
                "CA"
              ],
              "type": "string"
            },
            "maxItems": 14,
            "type": "array"
          },
          "expand": {
            "default": "none",
            "description": "List every country, one row each, for a dimension that origin or asylum leaves unfiltered: origin, asylum, or both. Default none, where an unfiltered dimension is summed into one row. Expanding a dimension that origin or asylum already filters is rejected.",
            "enum": [
              "none",
              "origin",
              "asylum",
              "both"
            ],
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "Requested inline rows, 1–1000000 (default 100); values above 500 are clamped to 500 with disclosure. Sorting runs over the full result first; a larger result is staged as a dataframe where dataframes are enabled.",
            "maximum": 1000000,
            "minimum": 1,
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of origin — where people fled from — as ISO3 codes (SYR, AFG), case-insensitive. ISO 3166 alpha-2 codes (SY) are rewritten to ISO3 and echoed in applied_scope. UNHCR's own codes (GFR) are rejected with the ISO3 to pass instead, and country names are rejected: resolve a name with unhcr_list_reference (topic countries, name_contains). Each listed code returns its own rows; codes are never summed together. At most 50 codes. Omit to sum every origin into one row, or set expand to list each."
          },
          "sort_by": {
            "default": "year",
            "description": "Order of the full result before the inline cut. year (default) orders by year, then origin ISO3, then asylum ISO3; a count field orders largest first, nulls last. Rates are not sortable, since rates on small rounded counts would crowd the top.",
            "enum": [
              "year",
              "total_decisions",
              "substantive_decisions",
              "recognized",
              "rejected"
            ],
            "type": "string"
          },
          "split_by": {
            "default": [],
            "description": "Procedure dimensions kept as separate rows: authority (government, UNHCR, or joint) and decision_level (first instance, administrative review, …). Every dimension left out is summed. Default [] sums all authorities and levels, as UNHCR does for its rates. Unit is always kept separate.",
            "items": {
              "description": "A procedure dimension to keep separate.",
              "enum": [
                "authority",
                "decision_level"
              ],
              "type": "string"
            },
            "maxItems": 2,
            "type": "array"
          },
          "stage": {
            "default": false,
            "description": "Stage the full result as a dataframe even when it fits inline, e.g. to join it with another unhcr_get_* result in unhcr_dataframe_query. Where dataframes are unavailable it is ignored, and the notice says so.",
            "type": "boolean"
          },
          "year_from": {
            "description": "First year of the window. When omitted, the window starts at the dataset's first year. A year before the dataset's first year is clamped to it and the clamp is reported; a window entirely outside the dataset's years is rejected.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "year_to": {
            "description": "Last year of the window. When omitted, the window runs to the latest published year (latest_year in the result). A year past the latest published year is clamped to it and the clamp is reported.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "unhcr_get_asylum_decisions"
    },
    {
      "description": "Get 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "asylum": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of asylum — where people sought or hold protection; for returns, the country they returned from — as ISO3 codes (DEU, TUR), case-insensitive, same rules as origin. At most 50 codes. Omit to sum every asylum country into one row, or set expand to list each."
          },
          "expand": {
            "default": "none",
            "description": "List every country, one row each, for a dimension that origin or asylum leaves unfiltered: origin, asylum, or both. Default none, where an unfiltered dimension is summed into one row. Expanding a dimension that origin or asylum already filters is rejected.",
            "enum": [
              "none",
              "origin",
              "asylum",
              "both"
            ],
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "Requested inline rows, 1–1000000 (default 100); values above 500 are clamped to 500 with disclosure. Sorting runs over the full result first; a larger result is staged as a dataframe where dataframes are enabled.",
            "maximum": 1000000,
            "minimum": 1,
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of origin — where people fled from — as ISO3 codes (SYR, AFG), case-insensitive. ISO 3166 alpha-2 codes (SY) are rewritten to ISO3 and echoed in applied_scope. UNHCR's own codes (GFR) are rejected with the ISO3 to pass instead, and country names are rejected: resolve a name with unhcr_list_reference (topic countries, name_contains). Each listed code returns its own rows; codes are never summed together. At most 50 codes. Omit to sum every origin into one row, or set expand to list each."
          },
          "population_types": {
            "description": "Keep only these population types, case-insensitive: REF refugees, ASY asylum-seekers, OIP other people in need of international protection, IDP internally displaced, STA stateless, OOC others of concern, HST host community, RET returned refugees, RDP returned IDPs. Decode them with unhcr_list_reference (topic population_types). Omit for every type.",
            "items": {
              "description": "A population-type code.",
              "enum": [
                "REF",
                "ASY",
                "OIP",
                "IDP",
                "STA",
                "OOC",
                "HST",
                "RET",
                "RDP"
              ],
              "type": "string"
            },
            "maxItems": 9,
            "type": "array"
          },
          "sort_by": {
            "default": "year",
            "description": "Order of the full result before the inline cut. year (default) orders by year, then origin ISO3, then asylum ISO3, then population type; total orders largest first, nulls last.",
            "enum": [
              "year",
              "total"
            ],
            "type": "string"
          },
          "stage": {
            "default": false,
            "description": "Stage the full result as a dataframe even when it fits inline, e.g. to join it with another unhcr_get_* result in unhcr_dataframe_query. Where dataframes are unavailable it is ignored, and the notice says so.",
            "type": "boolean"
          },
          "year_from": {
            "description": "First year of the window. When omitted, the window starts at the dataset's first year. A year before the dataset's first year is clamped to it and the clamp is reported; a window entirely outside the dataset's years is rejected.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "year_to": {
            "description": "Last year of the window. When omitted, the window runs to the latest published year (latest_year in the result). A year past the latest published year is clamped to it and the clamp is reported.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "unhcr_get_demographics"
    },
    {
      "description": "Get 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "asylum": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of asylum — where people sought or hold protection; for returns, the country they returned from — as ISO3 codes (DEU, TUR), case-insensitive, same rules as origin. At most 50 codes. Omit to sum every asylum country into one row, or set expand to list each."
          },
          "expand": {
            "default": "none",
            "description": "List every country, one row each, for a dimension that origin or asylum leaves unfiltered: origin, asylum, or both. Default none, where an unfiltered dimension is summed into one row. Expanding a dimension that origin or asylum already filters is rejected.",
            "enum": [
              "none",
              "origin",
              "asylum",
              "both"
            ],
            "type": "string"
          },
          "include_nowcast": {
            "default": false,
            "description": "Append UNHCR's latest monthly estimate of refugees and asylum-seekers by asylum country: one current-year snapshot, independent of the year window. The nowcast has no origin dimension, so it is skipped when origin lists codes. When origin lists no codes, a window entirely after the latest published year returns the nowcast alone instead of failing.",
            "type": "boolean"
          },
          "limit": {
            "default": 100,
            "description": "Requested inline rows, 1–1000000 (default 100); values above 500 are clamped to 500 with disclosure. Sorting runs over the full result first; a larger result is staged as a dataframe where dataframes are enabled.",
            "maximum": 1000000,
            "minimum": 1,
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of origin — where people fled from — as ISO3 codes (SYR, AFG), case-insensitive. ISO 3166 alpha-2 codes (SY) are rewritten to ISO3 and echoed in applied_scope. UNHCR's own codes (GFR) are rejected with the ISO3 to pass instead, and country names are rejected: resolve a name with unhcr_list_reference (topic countries, name_contains). Each listed code returns its own rows; codes are never summed together. At most 50 codes. Omit to sum every origin into one row, or set expand to list each."
          },
          "sort_by": {
            "default": "year",
            "description": "Order of the full result before the inline cut. year (default) orders by year, then origin ISO3, then asylum ISO3; a count field orders largest first, nulls last.",
            "enum": [
              "year",
              "refugees",
              "asylum_seekers",
              "oip",
              "idps",
              "stateless",
              "ooc",
              "hst",
              "returned_refugees",
              "returned_idps"
            ],
            "type": "string"
          },
          "stage": {
            "default": false,
            "description": "Stage the full result as a dataframe even when it fits inline, e.g. to join it with another unhcr_get_* result in unhcr_dataframe_query. Where dataframes are unavailable it is ignored, and the notice says so.",
            "type": "boolean"
          },
          "year_from": {
            "description": "First year of the window. When omitted, the window starts at the dataset's first year. A year before the dataset's first year is clamped to it and the clamp is reported; a window entirely outside the dataset's years is rejected.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "year_to": {
            "description": "Last year of the window. When omitted, the window runs to the latest published year (latest_year in the result). A year past the latest published year is clamped to it and the clamp is reported.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "unhcr_get_population"
    },
    {
      "description": "Get 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "asylum": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of asylum — where people sought or hold protection; for returns, the country they returned from — as ISO3 codes (DEU, TUR), case-insensitive, same rules as origin. At most 50 codes. Omit to sum every asylum country into one row, or set expand to list each."
          },
          "expand": {
            "default": "none",
            "description": "List every country, one row each, for a dimension that origin or asylum leaves unfiltered: origin, asylum, or both. Default none, where an unfiltered dimension is summed into one row. Expanding a dimension that origin or asylum already filters is rejected.",
            "enum": [
              "none",
              "origin",
              "asylum",
              "both"
            ],
            "type": "string"
          },
          "limit": {
            "default": 100,
            "description": "Requested inline rows, 1–1000000 (default 100); values above 500 are clamped to 500 with disclosure. Sorting runs over the full result first; a larger result is staged as a dataframe where dataframes are enabled.",
            "maximum": 1000000,
            "minimum": 1,
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "description": "One code, or several separated by commas or spaces, e.g. \"SYR\" or \"SYR, AFG\".",
                "maxLength": 1000,
                "type": "string"
              },
              {
                "description": "Codes as a list, e.g. [\"SYR\", \"AFG\"]; at most 50.",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              }
            ],
            "description": "Country of origin — where people fled from — as ISO3 codes (SYR, AFG), case-insensitive. ISO 3166 alpha-2 codes (SY) are rewritten to ISO3 and echoed in applied_scope. UNHCR's own codes (GFR) are rejected with the ISO3 to pass instead, and country names are rejected: resolve a name with unhcr_list_reference (topic countries, name_contains). Each listed code returns its own rows; codes are never summed together. At most 50 codes. Omit to sum every origin into one row, or set expand to list each."
          },
          "sort_by": {
            "default": "year",
            "description": "Order of the full result before the inline cut. year (default) orders by year, then origin ISO3, then asylum ISO3; a count field orders largest first, nulls last.",
            "enum": [
              "year",
              "returned_refugees",
              "resettlement",
              "naturalisation",
              "returned_idps"
            ],
            "type": "string"
          },
          "stage": {
            "default": false,
            "description": "Stage the full result as a dataframe even when it fits inline, e.g. to join it with another unhcr_get_* result in unhcr_dataframe_query. Where dataframes are unavailable it is ignored, and the notice says so.",
            "type": "boolean"
          },
          "year_from": {
            "description": "First year of the window. When omitted, the window starts at the dataset's first year. A year before the dataset's first year is clamped to it and the clamp is reported; a window entirely outside the dataset's years is rejected.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          },
          "year_to": {
            "description": "Last year of the window. When omitted, the window runs to the latest published year (latest_year in the result). A year past the latest published year is clamped to it and the clamp is reported.",
            "maximum": 2100,
            "minimum": 1900,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "unhcr_get_solutions"
    },
    {
      "description": "Decode 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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name_contains": {
            "description": "For topic countries only: keep countries whose names, in UNHCR’s English spelling, contain every word given, ignoring case, accents, and punctuation, or whose ISO3, ISO2, or UNHCR code equals a word (\"syria\", \"turkiye\", \"britain\", \"deu\"). Words match every name variant UNHCR records, including short and formal names the output does not list. No fuzzy matching.",
            "maxLength": 200,
            "type": "string"
          },
          "topic": {
            "description": "countries: every queryable country with its codes, names, and regions. regions: UNHCR's regional bureaus. coverage: first and latest year of each dataset, plus the current nowcast month. population_types: what each population type counts and which output column carries it. asylum_codes: asylum authority, application stage, decision level, and unit codes.",
            "enum": [
              "countries",
              "regions",
              "coverage",
              "population_types",
              "asylum_codes"
            ],
            "type": "string"
          }
        },
        "required": [
          "topic"
        ],
        "type": "object"
      },
      "name": "unhcr_list_reference"
    }
  ]
}

What the leaf hashes

{"body":"0ec5f490a99b5789f0463c617c99efe06787bfa90710fe14483db107ac3b92ec","id":580037,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793143589552934,"prev":null,"subject":"05eab58b-2dfd-45a6-87cc-e4f1cd7d70d0","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0x8ba80bd292de810daca7fc6c57afd393fb211c790ec4644abc36ce0facd91bb4
  2. 0x1c481f2c79e9209d425e339830963aeac46681b4e28a7daa67a71812e58fd825
  3. 0x2ceca307c2b326248ccc0cfe2262fb4904db505c599792846ea7f59351a96c8b
  4. 0x26e4856c04cb629cf77b58b42aa014b70daf639a78dcff33d9e47cad8696819e
  5. 0x18b413c05bccc0542e8387546dda618ca6195864eebade84c2046e95c947e1b8
  6. 0xca3521baa2bc74da23f187db505f30c1fab6a860c488b05ffcd68616132ab747
  7. 0xbc7426bef36be491784f9812740af70aa00b599825d450d7bcf528f1329b621d
  8. 0xf640fa04aeacab25ba1f4f0b80b913a260aa7031aa8701abe402b59ae1df7420
  9. 0x2d7d45ff680434190b8afaeac0e174794ab02d968b20c730968db76f8020c8e1
  10. 0x0ca30ec94337e2e0b4a0b00e9e5686108240f05cc6751241e417346db4380f8d
  11. 0xcdbeb854b5cb2391772ef949ab5c1e3c24cc8221d97cd112ccb987b02e3d89da
  12. 0xe9b891332733aa3fa69ace7f82b036df13816078968e2c10034f79c2255498d0
  13. 0xea3d566bf95ca7a3a7f6de9c4f77180bd8c5ffd160486a27d870e8a2fb6d0b9e
  14. 0x06e3b43165f5b3c31d850bc32f20b2e25b844564c4e042c141b9748c26a5a600
  15. 0xb4f7223140c8a36cb87a63d77cf617086d9968dc4658f03e102571ebe06e9ed6
  16. 0xfecf3d4646dd4984a13dd715499e842c3fde63692336d97394c2bfd8e877ca5d
  17. 0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON