# ExplorerHub MCP server

> Query the eight competence frameworks published on ExplorerHub from Claude Code, Cursor, VS Code, Windsurf or your own scripts through the Model Context Protocol. Free API key access, source attribution in every response.

Server address: `https://explorerhub.eu/api/mcp`

**The MCP server is not live yet: launch is planned by September 30, 2026. Until then the address answers 503 with the code "disabled" and key creation is not available. This page remains as documentation.**

## What it is

The Model Context Protocol (MCP) is the open standard through which assistants built on language models connect to external data sources. The ExplorerHub MCP server exposes, read-only, the structure, descriptors, levels and glossaries of DigComp, DigCompEdu, GreenComp, LifeComp, FinComp, DigCompConsumers, AILit and EntreComp, from the same data and in the same four languages as the website. The server is a product of IDCERT S.r.l. Società Benefit and is served from explorerhub.eu.

## The tools

- `explorerhub_list_frameworks`: Lists the published frameworks with id, publisher, year, languages, counts and licence.
- `explorerhub_get_framework`: Returns the structure of one framework: areas, competences, levels and, where the framework is split by audience, the available segments.
- `explorerhub_get_node`: Returns one area or competence with all its descriptors, grouped by level or by dimension.
- `explorerhub_get_levels`: Returns the proficiency levels of a framework, with description and the EQF/CEFR mappings the document states.
- `explorerhub_get_glossary`: Returns the glossary of a framework, filterable and paginated.
- `explorerhub_search`: Searches text or a document code in one framework or across all, with ranked results and page links. Takes limit and offset to page through the results and audience for frameworks with several audiences; says whether the list is truncated and where to resume.

## How to get a key

1. Create an ExplorerHub account, or sign in if you already have one.
2. In your account, open the "MCP access" section.
3. Give the key a name (for example the client that will use it) and accept the MCP terms of service: without acceptance the key is not created.
4. Press "Create key" and copy it right away: it is shown only once and cannot be recovered. If you lose it, revoke it and create another.
5. Pass the key to your MCP client in the Authorization header as a Bearer token, as in the examples below.

Keys start with ehk_ and are 47 characters long. The server stores only their cryptographic fingerprint: nobody, not even IDCERT, can read back a key once created.
You can have at most 5 active keys per account; revoked keys do not count.

### Revoking

In your account, next to each key, "Revoke" disables it immediately and permanently: clients using it get 401 from the next call. Revoke a key if you exposed it, if the device that used it is no longer yours or if you no longer need it, and create a new one when you need it.

## Configuration examples

Export the key into an environment variable, as in the first example, and leave it there. Project configuration files — .mcp.json, .cursor/mcp.json, .vscode/mcp.json — end up in the repository: that is why the examples reference the variable, or an editor input, and not the key. Never paste the key into a committed file and never share it.

### Environment variable (shell)

```bash
export EXPLORERHUB_API_KEY=ehk_YOUR_KEY_HERE
```

### Claude Code (command line)

```bash
claude mcp add --transport http explorerhub https://explorerhub.eu/api/mcp \
  --header "Authorization: Bearer ehk_YOUR_KEY_HERE"
```

### Claude Code (.mcp.json file)

```json
{
  "mcpServers": {
    "explorerhub": {
      "type": "http",
      "url": "https://explorerhub.eu/api/mcp",
      "headers": {
        "Authorization": "Bearer ${EXPLORERHUB_API_KEY}"
      }
    }
  }
}
```

### Cursor (mcp.json) — `.cursor/mcp.json`

```json
{
  "mcpServers": {
    "explorerhub": {
      "url": "https://explorerhub.eu/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:EXPLORERHUB_API_KEY}"
      }
    }
  }
}
```

### VS Code and GitHub Copilot (.vscode/mcp.json)

```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "explorerhub-key",
      "description": "ExplorerHub MCP API key",
      "password": true
    }
  ],
  "servers": {
    "explorerhub": {
      "type": "http",
      "url": "https://explorerhub.eu/api/mcp",
      "headers": {
        "Authorization": "Bearer ${input:explorerhub-key}"
      }
    }
  }
}
```

### Windsurf (mcp_config.json) — `~/.codeium/windsurf/mcp_config.json`

```json
{
  "mcpServers": {
    "explorerhub": {
      "serverUrl": "https://explorerhub.eu/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:EXPLORERHUB_API_KEY}"
      }
    }
  }
}
```

### Claude Desktop via mcp-remote (claude_desktop_config.json)

```json
{
  "mcpServers": {
    "explorerhub": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://explorerhub.eu/api/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer ehk_YOUR_KEY_HERE"
      }
    }
  }
}
```

The Claude Desktop app does not accept a static header in its connectors, but it connects through mcp-remote, a third-party open source bridge (npm package, MIT licence) that runs on your computer, talks to the app and passes the key to the server: the example above is the one from its README, and the key stays in the app's local configuration file, which never ends up in a repository. The claude.ai and ChatGPT connectors require OAuth and are not supported at the moment. The server answers any MCP client that uses the Streamable HTTP transport and sends the Authorization header.

## Tiers and limits

- **Free**: Included with an ExplorerHub account, for interactive use with an assistant: 60 requests per minute per key and 10,000 requests per calendar month per account.
- **Pro**: For integrations and bulk reads: 600 requests per minute per key and 500,000 requests per calendar month per account. Monthly or yearly subscription; online activation is not available yet: write to support@idcert.io.

### What happens at the limit

The limit is measured per minute and per key; without a valid key it applies per IP address and is consumed only by failed attempts. Beyond the limit the server answers 429 with a JSON body carrying error "rate_limited", scope (key or ip), limit and retryAfter, and with the Retry-After header in seconds. The X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers (seconds since the Unix epoch) accompany every authenticated response, so a client can slow down before being refused. Each account is also subject to a monthly quota across all its keys: 10,000 requests per calendar month (UTC) on the free tier, 500,000 on Pro. Once the quota is used up the server answers 429 with scope month and a Retry-After that reaches the first day of the next month; the X-RateLimit-Monthly-Limit, X-RateLimit-Monthly-Remaining and X-RateLimit-Monthly-Reset headers accompany every authenticated response alongside the per-minute ones. A request refused by the minute limit does not consume the monthly quota.

## Response codes

Every response carries Cache-Control: no-store. The server accepts POST only, which is the Streamable HTTP transport of the MCP protocol.

| Status | Body | Headers | Meaning |
|---|---|---|---|
| 200 | `JSON-RPC (MCP)` | `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `X-RateLimit-Monthly-Limit`, `X-RateLimit-Monthly-Remaining`, `X-RateLimit-Monthly-Reset`, `Cache-Control: no-store` | Authenticated request served. The X-RateLimit headers say how much of the minute's limit is left. |
| 401 | `{"error":"unauthorized","message":"…","docs":"https://explorerhub.eu/en/mcp"}` | `WWW-Authenticate: Bearer realm="ExplorerHub MCP"` | Key missing, malformed, unknown or revoked: the four conditions get the same response, on purpose. The docs field points to this page. |
| 405 | `—` | `Allow: POST` | Method other than POST. The response comes before authentication and consumes no limit. |
| 429 | `{"error":"rate_limited","scope":"key\|ip\|month","limit":60,"retryAfter":60}` | `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` | Limit exceeded: the minute, per key (scope key) or per IP address without a valid key (scope ip), or the account's monthly quota (scope month). Retry after the seconds given in Retry-After. |
| 503 | `{"error":"disabled"}` | `Retry-After: 300` | Service suspended by the administrator. Retry after the seconds given in Retry-After. |
| 503 | `{"error":"unavailable"}` | `Retry-After: 30` | The database is not responding. Retry after the seconds given in Retry-After; the attempt does not consume the per-IP limit. |

## The shape of responses

Every tool response carries, besides the requested data, two distinct blocks. attribution says whose the framework text is and under which title it is reused: licence or rights statement, citation, translation provenance in the requested language. service says who provided the service. On tools that read one framework attribution is an object; in explorerhub_list_frameworks and in a search across all frameworks it is an array with one element per framework. The two blocks are never merged, because IDCERT does not own the framework text.

```json
{
  "framework": {
    "id": "digcomp",
    "name": "DigComp",
    "version": "3.0"
  },
  "attribution": {
    "framework": {
      "id": "digcomp",
      "name": "DigComp",
      "version": "3.0",
      "producer": "JRC",
      "publisher": "Joint Research Centre, European Commission",
      "year": 2025,
      "citation": "Cosgrove, J., Cachia, R., DigComp 3.0: European Digital Competence Framework – Fifth Edition, EUR 40491, Publications Office of the European Union, Luxembourg, 2025, ISBN 978-92-68-32677-0, doi:10.2760/0001149, JRC144121.",
      "doi": "10.2760/0001149",
      "sourceUrl": "https://publications.jrc.ec.europa.eu/repository/handle/JRC144121"
    },
    "license": {
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "requiresAttribution": true
    },
    "rightsStatement": null,
    "translation": {
      "locale": "en",
      "provenance": [
        "original"
      ],
      "notice": null
    },
    "attributionPage": "https://explorerhub.eu/en/legal/attribution"
  },
  "service": {
    "name": "ExplorerHub MCP",
    "provider": "IDCERT S.r.l. Società Benefit",
    "url": "https://explorerhub.eu",
    "endpoint": "https://explorerhub.eu/api/mcp",
    "termsOfService": "https://explorerhub.eu/en/legal/mcp-terms",
    "notice": "Data obtained through ExplorerHub MCP (https://explorerhub.eu/api/mcp), a service of IDCERT S.r.l. Società Benefit. Framework content is reproduced from the official publication named in `attribution`, under that publication's own licence or rights statement: when you redistribute it, credit its publisher as that licence requires. Use of this service is governed by the ExplorerHub MCP terms of service (https://explorerhub.eu/en/legal/mcp-terms), which ask you to state that the data was obtained through ExplorerHub by IDCERT S.r.l. Società Benefit, in addition to the publisher's attribution."
  }
}
```

_Example generated by the same functions the server uses, for DigComp in the language of this page; the tool's own fields (tree, descriptors, hits) are omitted._

## How to cite

Whoever reuses the data credits the source of the text as the framework's licence requires and, alongside it, the service through which the data was obtained — never in place of the publisher. A ready-to-copy formula, for DigComp:

> Cosgrove, J., Cachia, R., DigComp 3.0: European Digital Competence Framework – Fifth Edition, EUR 40491, Publications Office of the European Union, Luxembourg, 2025, ISBN 978-92-68-32677-0, doi:10.2760/0001149, JRC144121. Data obtained through ExplorerHub MCP, a service of IDCERT S.r.l. Società Benefit (https://explorerhub.eu/api/mcp).

## Licences and attribution

The framework texts are publications of the European Commission, the Joint Research Centre (JRC) and the OECD, reproduced under their respective Creative Commons licences or reuse authorisations. Every server response carries the citation, the licence and the translation provenance: whoever redistributes that text must keep them. Use of the service is governed by the MCP terms, which ask you to state that the data was obtained through ExplorerHub by IDCERT S.r.l. Società Benefit, alongside the publisher's attribution. Translated editions edited by IDCERT are declared as such and are not official editions.

ExplorerHub and IDCERT are not affiliated with the European Commission, the JRC or the OECD.

- [Source attribution](https://explorerhub.eu/en/legal/attribution)
- [MCP terms of service](https://explorerhub.eu/en/legal/mcp-terms)
