ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Ilostat MCP Server

โดย cyanheadsรุ่น 0.3.0i★ –iบนเครื่องหรือคลาวด์
ชื่อใน registryio.github.cyanheads/ilostat-mcp-server

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Search ILOSTAT labour indicators, query and compare series, build country profiles, run SQL.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: บนเครื่องหรือคลาวด์
  • ช่องทาง (transport): stdio, Streamable HTTP
  • หมวด: ค้นข้อมูลและความจำของ AI

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ต้องเตรียมก่อน

  • รันบนคลาวด์ไม่ต้องลงโปรแกรมเพิ่ม ต่อผ่านอินเทอร์เน็ตได้เลย
  • npmติดตั้ง Node.js (มีคำสั่ง npx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:

  1. เปิด Settings → Connectors
  2. กด Add custom connector
  3. วางที่อยู่ด้านล่างแล้วกด Add
  4. ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
SettingsConnectors1+ Add2https://…3
https://ilostat.caseyjhand.com/mcp

หรือรันในเครื่องคุณ

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "ilostat": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ilostat-mcp-server"
      ],
      "env": {
        "ILOSTAT_CATALOG_REFRESH_HOURS": "ใส่ค่าของคุณ",
        "ILOSTAT_MAX_ROWS": "ใส่ค่าของคุณ",
        "ILOSTAT_PREVIEW_CHARS": "ใส่ค่าของคุณ",
        "ILOSTAT_CACHE_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATASET_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
        "CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
        "MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add --transport http ilostat https://ilostat.caseyjhand.com/mcp

หรือรันในเครื่องคุณ

claude mcp add ilostat --env ILOSTAT_CATALOG_REFRESH_HOURS='ใส่ค่าของคุณ' --env ILOSTAT_MAX_ROWS='ใส่ค่าของคุณ' --env ILOSTAT_PREVIEW_CHARS='ใส่ค่าของคุณ' --env ILOSTAT_CACHE_TTL_SECONDS='ใส่ค่าของคุณ' --env ILOSTAT_DATASET_TTL_SECONDS='ใส่ค่าของคุณ' --env ILOSTAT_DATAFRAME_DROP_ENABLED='ใส่ค่าของคุณ' --env CANVAS_PROVIDER_TYPE='ใส่ค่าของคุณ' --env MCP_LOG_LEVEL='ใส่ค่าของคุณ' -- npx -y @cyanheads/ilostat-mcp-server

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "ilostat": {
      "url": "https://ilostat.caseyjhand.com/mcp"
    }
  }
}

หรือรันในเครื่องคุณ

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "ilostat": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ilostat-mcp-server"
      ],
      "env": {
        "ILOSTAT_CATALOG_REFRESH_HOURS": "ใส่ค่าของคุณ",
        "ILOSTAT_MAX_ROWS": "ใส่ค่าของคุณ",
        "ILOSTAT_PREVIEW_CHARS": "ใส่ค่าของคุณ",
        "ILOSTAT_CACHE_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATASET_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
        "CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
        "MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "ilostat": {
      "type": "http",
      "url": "https://ilostat.caseyjhand.com/mcp"
    }
  }
}

หรือรันในเครื่องคุณ

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "ilostat": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ilostat-mcp-server"
      ],
      "env": {
        "ILOSTAT_CATALOG_REFRESH_HOURS": "ใส่ค่าของคุณ",
        "ILOSTAT_MAX_ROWS": "ใส่ค่าของคุณ",
        "ILOSTAT_PREVIEW_CHARS": "ใส่ค่าของคุณ",
        "ILOSTAT_CACHE_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATASET_TTL_SECONDS": "ใส่ค่าของคุณ",
        "ILOSTAT_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
        "CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
        "MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:

  1. เปิด ChatGPT บนเว็บ → Settings → Connectors (Apps)
  2. กด Create หรือ Add (บางแพ็กเกจต้องเปิด Developer mode ใน Advanced ก่อน)
  3. วางที่อยู่ด้านล่าง ตั้งชื่อ แล้วบันทึก
  4. ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
SettingsConnectors1+ Create2https://…3
https://ilostat.caseyjhand.com/mcp

ชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • ILOSTAT_CATALOG_REFRESH_HOURS env
    Hours between checks of the ILOSTAT tables of contents (1–168).
  • ILOSTAT_MAX_ROWS env
    Ceiling on the rows one query may return or stage (1,000–1,000,000).
  • ILOSTAT_PREVIEW_CHARS env
    Inline preview budget in serialized characters; a larger query or comparison result is staged as a dataframe, and a dataframe SQL result returns only the leading rows that fit.
  • ILOSTAT_CACHE_TTL_SECONDS env
    Seconds a small upstream data response stays cached (0 disables the cache).
  • ILOSTAT_DATASET_TTL_SECONDS env
    Per-table TTL for staged dataframes, in seconds (at least 60).
  • ILOSTAT_DATAFRAME_DROP_ENABLED env
    Set to true to expose ilostat_dataframe_drop; staged dataframes otherwise expire on their TTL.
  • CANVAS_PROVIDER_TYPE env
    DataCanvas engine for staged dataframes: duckdb (default) or none to turn dataframes off.
  • MCP_LOG_LEVEL env
    Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

ชื่อและคำอธิบายเครื่องมือตามที่ server ตอบมาเมื่อ 7 พ.ย. 2569 ผู้ทำเป็นคนเขียน ไม่ใช่เรา แสดงเป็นข้อความล้วน

  • ilostat_search_indicators

    Search ILOSTAT's catalog of labour-statistics indicators by plain-language terms and filters. Each hit is one indicator with its datasets — one per available frequency (annual, quarterly, monthly) — plus breakdowns, coverage years, number of reference areas, source database, and

  • ilostat_describe_indicator

    Explain one ILOSTAT dataset before comparing numbers: its definition, unit and multiplier, frequency variants and coverage, the sex and breakdown codes in use across its frequencies (the total code of each breakdown marked), the reference areas it covers, whether it carries World

  • ilostat_query_indicator

    Fetch observations for up to 3 ILOSTAT datasets per call, filtered by reference area or area group, sex, breakdown codes (classif1, classif2), source, and period; datasets past the first 3 come back as remaining_dataset_ids for another call. Rows keep their source, observation st

  • ilostat_get_country_profile

    Build a headline labour-market profile for one reference area: labour force participation, employment-to-population ratio, unemployment and youth unemployment rates, youth NEET rate, informal employment rate, employment level, labour income share, and working poverty rate. Each i

  • ilostat_compare_geographies

    Compare reference areas on one ILOSTAT dataset and one slice — a sex code plus breakdown codes, defaulting to the dataset's totals — giving each area's value at a common period or at its latest non-projected period, optional change over N years, and a rank, with each value's peri

  • ilostat_list_reference

    Decode ILOSTAT's code vocabulary: reference areas (ISO3 countries and X-coded aggregates, with World Bank income group and ILO region), the groups that area_group accepts (X01 for every country, ILO regions and subregions, World Bank income groups; exact-code lookups list their m

  • ilostat_dataframe_query

    Run a single-statement SELECT against the df_ dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by an earlier register_as. Inspect a dataframe with ilostat_dataframe_describe first; its column schema is what the SQL has to match. Read-only: wr

  • ilostat_dataframe_describe

    Describe the df_ dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by ilostat_dataframe_query register_as: the tool and parameters that produced each, the datasets it holds (label, last update, and the unit with its measure, type, and multipli

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub cyanheads ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • ✓ ผ่าน

    endpoint ตอบ

    ตอบกลับใน 255 ms (HTTP 200)

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ไม่ต้องล็อกอิน

  • ✓ ผ่าน

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    อ่านคำอธิบายเครื่องมือ 8 ตัวแล้ว ไม่พบคำสั่งแอบแฝงถึง AI

เทียบกับตัวอื่นในหมวด ค้นข้อมูลและความจำของ AIi

  • ดาวมากกว่า 0% ของอีก 5654 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 82% ของอีก 5654 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 5654 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Ilostat MCP Server ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.0) เข้า registry 9 วันที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Context7, Codebase Memory, Exa

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Context7

โดย upstash

ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว

บนเครื่องหรือคลาวด์★ 64,224MITอัปเดต เมื่อวาน
ติดตั้ง

Codebase Memory

โดย DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

รันบนเครื่อง★ 48,148MITอัปเดต 21 วันที่ผ่านมา
ติดตั้ง

Exa

โดย exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

รันบนคลาวด์★ 5,213MITอัปเดต 2 เดือนที่ผ่านมา
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

@cyanheads/ilostat-mcp-server Search ILOSTAT labour indicators, query and compare series, build country profiles, run SQL via MCP. STDIO or Streamable HTTP. 9 Tools • 1 Skill

Public Hosted Server: https://ilostat.caseyjhand.com/mcp


Overview

Labour statistics from ILOSTAT, the International Labour Organization's database. Find an indicator, pull observations for countries, regions, and income groups, compare areas, and build a labour-market profile, with every value marked as reported, modelled, or projected. No API key required.

Tools
ToolDescription
ilostat_search_indicatorsSearch the indicator catalog by plain-language terms and filters; each hit lists a dataset ID per available frequency
ilostat_describe_indicatorExplain one dataset: definition, unit and multiplier, breakdown codes in use, covered areas, and how its values are classed
ilostat_query_indicatorFetch observations for up to 3 datasets per call, filtered by area or area group, sex, breakdown codes, source, and period
ilostat_get_country_profileHeadline labour-market figures for one area: latest reported value and latest ILO modelled estimate, side by side
ilostat_compare_geographiesRank areas on one slice of one dataset at a common or latest period, with optional change over N years
ilostat_list_referenceDecode ILOSTAT's code vocabulary: areas, area groups, databases, subjects, sexes, breakdowns, sources, status flags, notes
ilostat_dataframe_describeDescribe a staged df_ dataframe by name, or list them all (off under HTTP with auth none), with provenance, coverage, basis counts, and column schema
ilostat_dataframe_queryRun one read-only SQL SELECT over staged dataframes, optionally storing the result as a new one
ilostat_dataframe_dropDrop a staged dataframe before its TTL

ilostat_dataframe_drop is off unless ILOSTAT_DATAFRAME_DROP_ENABLED=true, and CANVAS_PROVIDER_TYPE=none turns off all three dataframe tools.

Skill
SkillDescription
ilostat-guideGates for answering labour-market questions with these tools: choosing reported or ILO modelled data, finding a population group as a breakdown code, one classification version per sum, rates that do not add, source changes and breaks in trends, and SQL over staged dataframes

Ships in skills/ for plugin installs, the npm package, the Docker image, and the .mcpb bundle, and is served over MCP as skill://ilostat-guide/SKILL.md.

Capability reference

ilostat_search_indicators tool
  • Plain-language query (every term must match a word or word prefix; a term no catalog word starts with matches by its stem, so informality finds informal and disabled finds disability; female, women, male, and men match every indicator broken down by sex, and the notice names the sex filter for ilostat_query_indicator; case, accents, and labour/labor folded) plus frequency, database, subject, breakdown, measure, and aggregates_only filters; omit query to browse by filters
  • Up to 50 hits per page (default 10; a larger limit is applied as 50, with a notice), continued with next_cursor; each hit is one indicator with a dataset_id per frequency, coverage years, n_ref_area, last_update, and has_aggregates, and facets count the whole match set
  • An unrecognized database, subject, breakdown, or measure code fails as unknown_filter_code

ilostat_describe_indicator tool
  • One dataset_id (UNE_DEAP_SEX_AGE_RT_A) or a bare indicator code, which describes every frequency; an unknown code returns found: false with guidance
  • Definition, unit and its multiplier, frequency variants, breakdowns (sex codes, plus classif1 / classif2 codes with totals marked is_total), default_slice, covered ref_areas, basis_rule, and the first 20 related_datasets with related_total
  • When the SDMX API can't answer, structure_status is unavailable and breakdowns, unit, and areas are absent rather than the call failing

ilostat_query_indicator tool
  • Up to 100 dataset_ids; the first 3 distinct datasets are queried and the rest come back as remaining_dataset_ids for another call. Filter by ref_areas (up to 300) and/or an area_group, sex, classif1, classif2, sources, and period: one exact time, a time_from / time_to year window, latest_only, or both
  • latest_only keeps each series' own latest period; a request whose full history is too large to read in one call falls back to the latest period per area and dataset, and applied_filters.latest_mode and the notice say so
  • source_selection is best by default, all, or secondary; rows carry source, obs_status, notes, and basis, decoded in legend, and applied_filters echoes every parameter sent
  • A result past the inline preview stages in full as a df_ dataframe; a request over ILOSTAT_MAX_ROWS fails as request_too_broad (unfiltered) or result_too_large (filtered)

ilostat_get_country_profile tool
  • One ref_area with annual data, an ISO3 country (KEN) or an X-coded aggregate (X01 World, regions, income groups), and sex (SEX_T by default, SEX_M, or SEX_F)
  • Nine headline indicators (labour force participation, employment-to-population ratio, unemployment, youth unemployment, youth NEET, informal employment, employment, labour income share, working poverty), each with its latest reported value for that slice and, separately, its latest non-projected modelled estimate
  • A missing reported value stays missing and is listed in reported_missing; aggregates carry modelled values only

ilostat_compare_geographies tool
  • One dataset_id and one slice (sex, classif1, classif2, defaulting to the dataset's totals); areas from ref_areas (up to 300), an area_group, or both, and at least one is required
  • period puts every area at one period; without it, each area gets its latest value within lookback_years (default 10), projections excluded unless include_projections; change_years (1–30) adds each value's change over that span
  • A change carries the earlier value's source, basis, status, and notes, with source_changed, basis_changed, and break_in_series flags; the notice counts the changes that are not like-for-like
  • Rows carry rank, value, period, basis, and source; areas without a value land in missing with a reason, and comparability reports mixed_periods, basis_counts, and distinct_sources

ilostat_list_reference tool
  • topic: ref_areas, area_groups, databases, subjects, sexes, classifications, classification_types, sources, obs_status, notes, or frequencies
  • A text filter or up to 100 exact codes (misses in not_found; exact area_groups lookups list member countries); ref_area narrows sources, and classification_type narrows classifications
  • Up to 500 entries per page (default 50; a larger limit is applied as 500, with a notice), continued with next_cursor

ilostat_dataframe_describe tool
  • Pass one df_XXXXX_XXXXX, or omit name to list every staged dataframe, newest first (listing is off under HTTP with auth none; use the exact name)
  • Each entry carries the producing source_tool and its query_params, datasets, coverage, basis_counts, attribution, created_at / expires_at, row_count, and the column_schema to write SQL against
  • Each dataset keeps its full unit beside unit: unit_measure, unit_type, unit_type_label, unit_multiplier, and unit_multiplier_label; values are never rescaled

ilostat_dataframe_query tool
  • One DuckDB SELECT (joins, aggregates, window functions, CTEs) over df_ tables, up to 20,000 characters; writes, DDL, multi-statement SQL, file references and file-reading functions, engine-setting reads, and system catalogs are rejected
  • row_limit caps the rows materialized (default 1,000; capped at 10,000 per call, with row_count_capped flagging a hit) and preview the rows returned inline, which also stop at ILOSTAT_PREVIEW_CHARS; applied_limits echoes the values applied, and BIGINT values arrive as strings
  • register_as stores the full result as a new dataframe with a fresh TTL; a result over 1,000,000 rows fails as register_as_too_large, and evicted names any older dataframes dropped to make room

ilostat_dataframe_drop tool
  • Drops one staged dataframe by name before its TTL; idempotent, with dropped: false when nothing matched
  • Listed only when ILOSTAT_DATAFRAME_DROP_ENABLED=true and dataframes are on; it is the only destructive tool

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

ILOSTAT-specific:

  • Two keyless ILO APIs: the ILOSTAT data API serves the catalog, the code dictionaries, and observations; the ILO SDMX API serves each dataset's breakdown codes, default slice, and unit
  • The catalog and code dictionaries are held in memory and rechecked every ILOSTAT_CATALOG_REFRESH_HOURS; every code a tool takes is validated against them before a request goes upstream
  • A request pacer per upstream host; a 429 or challenge page reaches the caller as a retryable upstream_busy carrying retryAfter. Data responses of up to 5,000 rows are cached for ILOSTAT_CACHE_TTL_SECONDS
  • Dataframes on by default: a query or comparison larger than `IL

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx