Docs navigation: MCP serverHow the server works
Access methods

MCP server for AI agents

A remote MCP server with one tool per dataset. Agents look values up instead of guessing and cite the source.

How the server works

#

The MCP server at https://mcp.quellenkontor.dev/v1 is a remote server implementing the Model Context Protocol. It speaks Streamable HTTP: every request is a JSON-RPC call over POST, and the response comes back as JSON. It keeps no sessions; every request stands on its own.

  • There is one tool per dataset, named after the pattern hr_datensatz.
  • All tools are read-only. They are marked as read-only, non-destructive and idempotent, so many clients call them without asking for confirmation.
  • Every result starts with a ready-made sentence for citing, followed by the data as text and as a structured object with the same fields as the REST API.
  • The server gives the agent a set of rules: look up values instead of guessing, ask for missing inputs, cite the legal basis and source. The same text is available as the prompt quellenkontor_regeln, and below for copying.

Setup

#

You need a key from your account. It is sent as the header Authorization: Bearer qk_live_….

Claude Code

With one command in the terminal:

Terminal
$ claude mcp add --transport http quellenkontor \
    https://mcp.quellenkontor.dev/v1 \
    --header "Authorization: Bearer $QK_KEY"

Or as a file .mcp.json in the project. Claude Code substitutes ${QK_KEY} from your environment, so the key never appears in the file:

.mcp.json
{
  "mcpServers": {
    "quellenkontor": {
      "type": "http",
      "url": "https://mcp.quellenkontor.dev/v1",
      "headers": {
        "Authorization": "Bearer ${QK_KEY}"
      }
    }
  }
}

Cursor

In ~/.cursor/mcp.json. This file lives in your home directory, not in the project. Enter your key directly, and never put this file in a repository:

mcp.json
{
  "mcpServers": {
    "quellenkontor": {
      "url": "https://mcp.quellenkontor.dev/v1",
      "headers": {
        "Authorization": "Bearer qk_live_DEIN_SCHLUESSEL"
      }
    }
  }
}

VS Code

In .vscode/mcp.json. VS Code asks for the key on first launch and stores it securely:

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "quellenkontor-key",
      "description": "Quellenkontor-API-Schlüssel",
      "password": true
    }
  ],
  "servers": {
    "quellenkontor": {
      "type": "http",
      "url": "https://mcp.quellenkontor.dev/v1",
      "headers": {
        "Authorization": "Bearer ${input:quellenkontor-key}"
      }
    }
  }
}

Claude Desktop

Claude Desktop connects to remote servers with a fixed header through the mcp-remote bridge, which starts via npx (Node.js required). In Claude Desktop's configuration file:

claude_desktop_config.json
{
  "mcpServers": {
    "quellenkontor": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.quellenkontor.dev/v1",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer qk_live_DEIN_SCHLUESSEL"
      }
    }
  }
}

The header has no space after the colon; mcp-remote reads the key from the AUTH_HEADER variable. This file lives on your machine; never put it in a repository.

Other clients

We have tested Claude Code, Cursor and VS Code. Any other client that can connect to remote servers over Streamable HTTP with a custom header will work with just these two pieces of information: the address https://mcp.quellenkontor.dev/v1 and an Authorization header carrying your key.

The connectors in Claude in the browser and in ChatGPT don't send a fixed header. They sign in with OAuth, as described under Connect Claude.ai and ChatGPT.

Connect Claude.ai and ChatGPT (OAuth)

#

Claude in the browser, Claude Desktop, the Claude apps and ChatGPT add remote MCP servers as connectors. Instead of a key in the header, they use OAuth: you allow access once in the browser, and the application then queries with its own key for your account. You don't need a key from your account for this.

Claude

  1. In Claude, open the connectors and add your own connector (custom connector).
  2. Enter https://mcp.quellenkontor.dev/v1 as the address. Leave the client ID and client secret empty; Claude registers itself.
  3. If the dialog asks how people sign in, choose sign-in with OAuth, not access without sign-in.
  4. Click Connect. quellenkontor.dev opens: sign in, check the application, redirect and account, and click Allow.

The connector then works in Claude in the browser, in Claude Desktop and in the apps. In Team and Enterprise organizations, someone with admin rights adds it, and each member then connects their own account.

ChatGPT

  1. In ChatGPT, turn on developer mode in the settings under Apps and create your own app with an MCP server.
  2. Enter https://mcp.quellenkontor.dev/v1 as the address and choose OAuth as the authentication. ChatGPT registers itself; you don't need a client ID or secret.
  3. ChatGPT then opens quellenkontor.dev. Sign in and click Allow.

What happens when you sign in

  • The consent page shows the application's name, the address Quellenkontor sends you back to, your account and your plan. The application provides its own name, so rely on the address.
  • When you click Allow, Quellenkontor creates an API key named “MCP: application name” and hands it to the application. It appears in your account next to your other keys and counts toward your plan's maximum number of keys.
  • Tool calls through the connector use the same quota as any other request. initialize and tools/list also work without signing in; only a tool call needs the key.
  • The key doesn't expire. If you revoke it in your account, the server answers the next tool call with 401. Claude then asks you to sign in again; in ChatGPT, you reconnect the app.
  • Every connection creates its own key. When you reconnect an application, revoke the old key in your account, otherwise you'll quickly reach the maximum.

Technical details

ItemDetail
Protected resource metadata (RFC 9728)https://mcp.quellenkontor.dev/.well-known/oauth-protected-resource/v1
Authorization server (RFC 8414)https://mcp.quellenkontor.dev/.well-known/oauth-authorization-server
Endpoints/authorize, /token and /register on mcp.quellenkontor.dev, the consent page on quellenkontor.dev
Registration (RFC 7591)dynamic, as a public client without a secret (token_endpoint_auth_method none)
Redirect addresseshttps, or http only for localhost and 127.0.0.1, with any port
PKCE (RFC 7636)required, S256 only
resource (RFC 8707)the MCP server address, for example https://mcp.quellenkontor.dev/v1
Codevalid for 60 seconds and redeemable once. If it comes back a second time, Quellenkontor revokes the key issued for it.
Tokenan API key qk_live_…, token_type Bearer, no expiry and no refresh token
Response to the applicationincludes iss (RFC 9207)
For Claude Code, Cursor and VS Code, the key in the header remains the simplest way, as described under Setup.

All tools

#
ToolDatasetRequired arguments
hr_mindestlohnMinimum wage and mini-job limitnone
hr_mindestausbildungsverguetungApprentice minimum paynone
hr_pflegemindestlohnCare minimum wagenone
hr_rechengroessenSocial security reference valuesnone
hr_beitragssaetzeSocial security contribution ratesnone
hr_sachbezugswerteMeal and accommodation valuesnone
hr_pfaendungsfreigrenzenWage garnishment exemptionsnone
hr_uebergangsbereichMidi-job transition zonenone
hr_minijob_abgabenMini-job levies: flat-rate charges for employersnone
hr_kuenstlersozialabgabeArtists' social security levynone
hr_ausgleichsabgabeDisability compensatory levynone
hr_steuerfreie_betraegeTax-free amounts and employee expense allowancesnone
hr_reisekosten_inlandDomestic travel expensesnone
hr_sfn_zuschlaegeTax-free premiums for Sunday, holiday and night worknone
hr_dienstwagenCompany car tax: 1% rule and EV calculatorlistenpreis
hr_einkommensteuer_eckwerteIncome tax: basic allowance and bracket thresholdsnone
hr_kuendigungsfristNotice period calculatoreintritt, zugang
hr_urlaubsanspruchVacation entitlement calculatorarbeitstage_pro_woche
hr_mutterschutzMaternity protection calculatornone
hr_feiertagePublic holidaysnone
hr_arbeitstageWorking days calculatorvon, bis, land
hr_regelaltersgrenzeStatutory retirement age and pension startnone
hr_pausenRest breaks and working time limitsarbeitszeit_stunden
hr_verlaufHistory of a table since 2015, optionally with von, bis and bestandteildatensatz

The full input schema for each tool is in the dataset's reference page under "Schema for MCP". An agent gets it via tools/list.

Load only selected areas

#

A bot built for one topic rarely needs all 24 tools. With an addition to the address, tools/list returns only part of them, which saves tokens and prevents mix-ups:

AddressTools
https://mcp.quellenkontor.dev/v1?bereiche=fristen,kalenderjust the Employment law and deadlines and Calendar areas
https://mcp.quellenkontor.dev/v1?werkzeuge=hr_pausen,hr_arbeitstagejust these tools, plus hr_verlauf for their tables

The areas are called lohn (Wages and thresholds), sozialversicherung (Social security and levies), steuer (Tax and travel expenses), fristen (Employment law and deadlines), kalender (Calendar).

System prompt for your bot

#

Many chatbot frameworks do not pass the server's rules on to the model. In that case, copy them into your application's system prompt. The server's rules are written in German, since that is what it actually sends:

System prompt
Quellenkontor liefert amtliche HR-Werte und gesetzliche Berechnungen nur für Deutschland, Tabellen ab 2015 (Mindestausbildungsvergütung ab Ausbildungsbeginn 2020), Feiertage und Arbeitstage von 2015 bis 2035. Für Österreich, die Schweiz oder andere Länder gelten sie nicht. Rufe ein Werkzeug auf, sobald eine Antwort einen dieser Werte braucht, auch wenn du ihn zu kennen glaubst. Rechne relative Angaben wie „nächstes Jahr“ oder „ab Juli“ in ein Datum im Format JJJJ-MM-TT um und nenne es in der Antwort. Fehlen Angaben, von denen das Ergebnis abhängt, etwa Anschaffungsdatum, Geburtsdatum oder Jahrgang, Ausbildungsbeginn oder Bundesland, frag nach, statt sie zu raten. Fragt jemand nach einem ganzen Jahr, prüfe unterjährige Änderungen mit hr_verlauf und den Parametern von und bis. Übernimm das zitat, wenn es die Frage beantwortet, und nenne immer die Quelle mit URL. Geht es um einen einzelnen Bestandteil, etwa Aufmerksamkeiten oder den Pflegemindestlohn für Fachkräfte, frag mit dem Parameter bestandteil ab oder nimm Wert, gueltig_ab, rechtsgrundlage und quelle dieses Eintrags aus bestandteile. Steht vorlaeufig: true in der Antwort, sag, dass der Wert für diesen Stichtag noch nicht amtlich festgelegt ist. Meldet ein Werkzeug kein_wert, ist der Wert noch nicht verkündet: Sag das, statt zu schätzen. Gib warnungen und einschränkende hinweise weiter. Steuerfreie Höchstsätze begründen keinen Anspruch, und ein geldwerter Vorteil ist nicht die Steuer. Die Rechner wenden die gesetzliche Regel schematisch an und ersetzen keine Rechtsberatung.

A call in detail

#

This is what a tool call looks like on the wire. Normally your client handles this; for testing, curl also works:

Terminal
curl -X POST https://mcp.quellenkontor.dev/v1 \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $QK_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"hr_mindestlohn","arguments":{"datum":"2027-01-15"}}}'
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Gesetzlicher Mindestlohn in Deutschland am 15.01.2027: 14,60 Euro brutto je Stunde, gültig ab 01.01.2027. Minijob-Grenze: 633 Euro im Monat. Rechtsgrundlage: Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025, Stufe 2. Quelle: Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025 (BGBl. 2025 I Nr. 268), https://www.recht.bund.de/bgbl/1/2025/268/VO.html. Daten: Quellenkontor (quellenkontor.dev)."
      },
      {
        "type": "text",
        "text": "(the same data as structuredContent, as compact JSON)"
      }
    ],
    "structuredContent": {
      "datensatz": "mindestlohn",
      "datum": "2027-01-15",
      "mindestlohn_brutto_stunde": 14.6,
      "minijob_grenze_monat": 633,
      "gueltig_ab": "2027-01-01",
      "gueltig_bis": null,
      "rechtsgrundlage": "Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025 (BGBl. 2025 I Nr. 268), Stufe 2",
      "quelle": {
        "titel": "Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025 (BGBl. 2025 I Nr. 268)",
        "url": "https://www.recht.bund.de/bgbl/1/2025/268/VO.html"
      },
      "minijob_rechtsgrundlage": "§ 8 Abs. 1a SGB IV (Mindestlohn × 130 ÷ 3, aufgerundet auf volle Euro)",
      "minijob_quelle": {
        "titel": "Bekanntmachung der Geringfügigkeitsgrenze nach § 8 Absatz 1a SGB IV vom 7. November 2025 (BAnz AT 20.11.2025 B1)",
        "url": "https://www.bundesanzeiger.de/pub/publication/VaPRG6wPGXte9CM3jI4/content/VaPRG6wPGXte9CM3jI4/BAnz%20AT%2020.11.2025%20B1.pdf"
      },
      "vorheriger_wert": {
        "gueltig_ab": "2026-01-01",
        "mindestlohn_brutto_stunde": 13.9,
        "minijob_grenze_monat": 603
      },
      "naechster_wert": null,
      "hinweise": [
        "Die Minijob-Grenze gilt je Monat. Gelegentliches unvorhersehbares Überschreiten ist in engen Grenzen erlaubt (§ 8 Abs. 1b SGB IV).",
        "Die Pauschalabgaben des Arbeitgebers für Minijobs (Kranken- und Rentenversicherung, Pauschsteuer, Umlagen) liefert der Datensatz minijob-abgaben (/v1/hr/minijob-abgaben)."
      ],
      "lizenz": "Werte aus amtlichen Werken (§ 5 UrhG). Nutzung der Zusammenstellung nach den Nutzungsbedingungen von Quellenkontor.",
      "stand": "2026-09-23",
      "zitat": "Gesetzlicher Mindestlohn in Deutschland am 15.01.2027: 14,60 Euro brutto je Stunde, gültig ab 01.01.2027. Minijob-Grenze: 633 Euro im Monat. Rechtsgrundlage: Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025, Stufe 2. Quelle: Fünfte Mindestlohnanpassungsverordnung vom 5. November 2025 (BGBl. 2025 I Nr. 268), https://www.recht.bund.de/bgbl/1/2025/268/VO.html. Daten: Quellenkontor (quellenkontor.dev).",
      "datenstand": "2026-09-23.1"
    },
    "isError": false,
    "_meta": {
      "quellenkontor.dev/kontingent": {
        "limit": 1000,
        "verbraucht": 12,
        "tarif": "kostenlos"
      }
    }
  }
}

Quota

#

A tool call that returns a result counts like one REST API request. initialize, tools/list and calls with invalid arguments are free. You can find the state after every call in the result under _meta, in the key quellenkontor.dev/kontingent, with limit, usage and plan.

Errors

#
SituationServer response
An argument is missing, has the wrong format or is unknownResult with isError: true, a message and the affected parameter. The model can correct the call. Does not count.
No value for the effective dateResult with isError: true and the code kein_wert. Does not count.
Key missing or revokedHTTP 401 with the WWW-Authenticate header including resource_metadata, and JSON-RPC error -32001. OAuth clients use it to start sign-in.
Quota used upResult with isError: true and the code kontingent_erreicht, plus _meta with the current state
Unknown toolJSON-RPC error -32602
Unknown methodJSON-RPC error -32601
Unsupported protocol version in the MCP-Protocol-Version headerHTTP 400 with the list of supported versions

Protocol and limits

#
  • Supported protocol versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. The server responds with the version the client requests, otherwise with the latest.
  • Methods: initialize, ping, tools/list, tools/call, prompts/list and prompts/get (prompt quellenkontor_regeln). resources/list returns an empty list.
  • No server-sent stream: a GET on the address gets a 405 from the server; notifications without an id get 202.
  • No sessions: the Mcp-Session-Id header is not needed.

Testing with the MCP Inspector

#

The MCP Inspector is the protocol's official testing tool. It shows every tool with its schema and lets you run calls by hand:

Terminal
npx @modelcontextprotocol/inspector

In the Inspector, choose the Streamable HTTP transport, enter the address https://mcp.quellenkontor.dev/v1, and under Authentication set the Authorization header to Bearer qk_live_….

Sample questions for an agent

#
QuestionTool
What is the minimum wage from January 1, 2027, and what does that mean for the mini-job limit?hr_mindestlohn
Employment started March 1, 2017; the employer's notice of termination was received on November 10, 2026. When does the employment end?hr_kuendigungsfrist
How many working days does January 2027 have in Bavaria?hr_arbeitstage
Which contribution ceiling applies in 2026 for pension insurance?hr_rechengroessen
How much vacation is statutorily owed for a three-day work week?hr_urlaubsanspruch
What is the taxable benefit for my electric company car worth €62,000? (The agent asks for the acquisition date.)hr_dienstwagen
My employee works on May 1, 2027, base pay €20. How much of the premium is tax-free?hr_sfn_zuschlaege
What is the basic tax allowance (Grundfreibetrag) for 2027? (The answer is provisional until the tax law is promulgated.)hr_einkommensteuer_eckwerte
When does the 1962 birth cohort reach the statutory retirement age?hr_regelaltersgrenze

A good agent states the legal basis and source from the result, asks about missing inputs and says when a value is still provisional. If your application gives the model its own instructions, add that HR values may only come from the tools.

Something missing or unclear? Write to us and we will extend the docs.