MCP connector to the data

Everything the site shows, you can query yourself. An MCP server (Model Context Protocol) gives Claude, Codex, Kimi, GLM and your own scripts the same numbers as tools: the time series behind the index, every occupation with its tasks and Claude use, and every field of study. All of it is aggregate data that is already public. No login.

Connect

The endpoint is https://kiindeksen-mcp.fly.dev/mcp (Streamable HTTP, JSON-RPC 2.0).

Claude Code. One command:

claude mcp add --transport http kiindeksen https://kiindeksen-mcp.fly.dev/mcp

claude.ai. Settings, Connectors, Add custom connector. Paste the address above. Then ask Claude for, say, "the headline number with uncertainty for those under 31" or "compare occupations 4110 and 3312".

Your own script. client_example.py shows the whole exchange with the server and needs only Python, no packages:

python3 client_example.py

Other clients and models

The connector is open MCP over HTTP and is not tied to Claude. Any client that takes a URL can use it, and the URL is the same everywhere: https://kiindeksen-mcp.fly.dev/mcp.

ClientHow to add it
Codex CLI (OpenAI)codex mcp add kiindeksen --url https://kiindeksen-mcp.fly.dev/mcp, or in ~/.codex/config.toml: [mcp_servers.kiindeksen] with url = "https://kiindeksen-mcp.fly.dev/mcp"
Kimi Code CLI (Moonshot)kimi mcp add --transport http kiindeksen https://kiindeksen-mcp.fly.dev/mcp
GLM from Z.aiThe models are used through Claude Code, OpenCode, Cline or Kilo Code. Add the connector in the client you use; the Claude Code command is above.
OpenCodeIn opencode.json: "mcp": {"kiindeksen": {"type": "remote", "url": "https://kiindeksen-mcp.fly.dev/mcp", "enabled": true}}
Gemini CLIIn ~/.gemini/settings.json: "mcpServers": {"kiindeksen": {"httpUrl": "https://kiindeksen-mcp.fly.dev/mcp"}}
Cursor, VS Code, Cline and othersAdd a server of type HTTP (Streamable HTTP) with the URL above. Clients that only know the older SSE transport use https://kiindeksen-mcp.fly.dev/sse.
Clients that only launch local serversDownload server.py and register the command python3 server.py --stdio. It fetches the data from the site and needs no packages.

From code, with any provider

The OpenAI and Anthropic model APIs call the server directly, without an MCP client of your own. With OpenAI (Responses API) the tool is {"type": "mcp", "server_label": "kiindeksen", "server_url": "https://kiindeksen-mcp.fly.dev/mcp", "require_approval": "never"}. With Anthropic (Messages API, beta header mcp-client-2025-11-20) the server is {"type": "url", "url": "https://kiindeksen-mcp.fly.dev/mcp", "name": "kiindeksen"} in mcp_servers, and the tool is {"type": "mcp_toolset", "mcp_server_name": "kiindeksen"}.

Any other model with function calling, such as Kimi, GLM, Gemini or Mistral, can use the same tools as plain HTTP calls. Every tool exists as GET /tools/<name> with the arguments in the query string (lists comma-separated) or as POST with a JSON body. openapi.json describes them, so GPTs, Dify, Coze and similar platforms can import them. Try:

curl "https://kiindeksen-mcp.fly.dev/tools/get_headline?young=true&reference=claudecode"
curl "https://kiindeksen-mcp.fly.dev/tools/compare_occupations?codes=4110,3312&index_base=2025-02"

The tools

ToolWhat it returns
get_releaseRelease, period, normalisation month, number of occupations and fields of study, the headline number with uncertainty
list_packagesEvery time-series package: employment, new hires, pay, private and public sector, Eloundou and Mouchel quintiles, occupation cases, usage patterns
get_seriesSeries from a package, with a choice of specification (raw, sa, percap, percap_sa), facet, series, period, base month and smoothing
get_growthGrowth from a reference month to the last month for every series in a package, plus the gap quintile 5 minus quintile 1
get_headlineThe site's headline number: the index with bootstrap standard error and 95 % interval, per measure, reference and age group
get_compositionShare of employees per age group and quintile
search_occupationsSearch STYRK-08 occupations, Norwegian or English
get_occupationOne occupation: exposure, quintiles, Claude use per release, closest occupations, tasks with use and automation
get_occupation_seriesEmployment or pay for one occupation, monthly from 2021
compare_occupationsSeveral occupations side by side on a common base
list_education_levels, search_education, get_education_groupEducation: fields of study, the tasks in the jobs, the most common jobs
list_downloads, get_data_dictionaryThe release's CSV files and their documentation
get_studio_papersThe Studio reading list

Two resources (kiindeksen://om, kiindeksen://konvensjoner) and two prompts (analyser_yrkespar, maanedsrapport) come with it.

Conventions

Example: same exposure, different automation

The question: two occupations have almost the same AI exposure. Is AI used the same way in them, and does employment move the same way? This is what client_example.py does, and what Claude does if you ask for the prompt analyser_yrkespar with codes 4110 and 3312.

  1. get_release and get_headline. Release 2026-10 covers January 2021 to July 2026. The index for ages 21–60 with ChatGPT as reference is +1.5 percentage points, standard error 2.7. For ages 21–30 since Claude Code it is −2.9, standard error 2.0.
  2. get_growth on by_exposure with reference 2025-01 and three-month smoothing. From January 2025 to July 2026, seasonally adjusted: least exposed fifth −0.3 percent, most exposed −0.3 percent. The gap is −0.1 percentage points. The same call on age_by_exposure for ages 21–30: −1.8 in the least exposed, −4.6 in the most exposed.
  3. compare_occupations with codes 4110 and 3312, employment, seasonally adjusted, base month 2025-02:
    OccupationEloundouMouchelAutomation (Feb 2026)Employment July 2026
    4110 General office clerks0.59 (Q5)0.59 (Q5)67 %95.7
    3312 Credit and loans officers0.61 (Q5)0.62 (Q5)30 %96.5
  4. get_occupation for each occupation, platform claude_ai, gives the tasks. Office clerks: troubleshooting office equipment (1.26 percent of all Claude use, automation 60 percent), forms and expense reports (66 percent) and office machines (51 percent). Credit officers: recommending financial strategy (24 percent), explaining credit assessment and regulation (22 percent) and explaining loan types (27 percent).
  5. The interpretation is yours: the same exposure score, but in one occupation the work is ordered finished, in the other it is discussed. That is what the exposure measure does not see and the usage data shows.

The same exercise for a field of study: search_education with "økonomi" at bachelor level gives group 641 Business and administration. It has 101 315 employed, exposure 0.55, half in the most exposed fifth and automation 43 percent. get_education_group gives the ten most common tasks in the jobs and the most common jobs, accountants first.

All numbers above were read from the server on 15 October 2026 with release 2026-10. New releases give new numbers. Run the script again.

Operation and source code

The server fetches the JSON files from kiindeksen.no at start-up and every six hours, so it follows the monthly release without a new deployment. It is written in Python's standard library and runs as its own Fly.io app in Stockholm. The source is in dashboard/mcp/ in the project repository, and server.py can be downloaded here. You can run it locally against downloaded data files with python3 server.py --data-dir <folder> --port 8765.