DEV Community

Nick Schäfer
Nick Schäfer

Posted on

I built an open MCP server for German employment law, every number with its source

I have worked in HR in Germany for more than seven years. I have run over 1,000 interviews and made more than 100 hires. In small companies, the same questions come up every week, usually from a founder who does HR next to everything else:

  • When does a notice have to arrive so the contract ends this month?
  • Someone has been sick for three weeks. How long do I keep paying?
  • What does a minijob cost me compared to a part-time hire?

People now ask these questions in Claude or ChatGPT. The text is usually fine. The numbers are the problem: a date or an amount that comes from model memory, with no way to check it. So I built Lintelly Open MCP (in the Claude directory: Lintelly HR Deutschland), an open MCP server for German employment and social insurance law.

What it is

An MCP server is a set of tools an assistant can call instead of answering from memory. This one covers Germany only, and it is meant for founders and small companies.

It has 38 tools in a few groups:

  • Workflows: ablauf returns a dated workflow for a situation, such as the first hire, onboarding, offboarding, sickness, maternity protection, parental leave, preparing a dismissal, end of probation, end of a fixed term and month-end payroll.
  • Deadlines: notice periods, the deadline for a dismissal claim, probation, fixed-term contracts, parental leave, maternity protection, retention periods, breaks.
  • Money: employer costs, minijobs, minimum wage check, continued pay during sickness, payment in lieu of holiday, a rule-of-thumb severance formula, the levy for unfilled disability quota.
  • Holiday, duties, letters, contracts: holiday entitlement, size thresholds, special dismissal protection, BEM duty, letters such as notices, warnings and references, a library of 126 contract clauses, and a register of 200+ legal values.

Every answer has the same shape: ergebnis (result), rechenweg (calculation steps), quellen (norm, official link, check date, status), fallen (common mistakes), naechster_schritt (next step) and hinweis (the disclaimer). Here is a shortened real response from kuendigungsfrist_rechnen for someone who started on 1 September 2023 and receives notice on 20 November 2026:

{
  "ergebnis": {
    "ende": "2026-12-31",
    "spaetester_zugang": "2026-11-30",
    "regel": "1 Monat zum Monatsende",
    "norm": "§ 622 Abs. 2 BGB"
  },
  "rechenweg": [
    "Betriebszugehörigkeit am Zugangstag: 3 volle Jahre.",
    "Gesetzliche Frist: 1 Monat zum Monatsende (§ 622 Abs. 2 BGB)."
  ],
  "quellen": [
    {
      "norm": "§ 622 Abs. 2 BGB",
      "url": "https://www.gesetze-im-internet.de/bgb/__622.html",
      "geprueft_am": "2026-10-10",
      "status": "bestätigt"
    }
  ],
  "hinweis": "Allgemeine Auskunft, keine Rechtsberatung im Einzelfall."
}
Enter fullscreen mode Exit fullscreen mode

The field names are German because the law is German. The assistant answers in the language of your question.

A few design choices:

  • The server only calculates. It never calls a model. Your assistant writes the text, the numbers come from the tool.
  • Each legal value has a norm, an official source and a check date. Values are checked against the official text every month. If a check is overdue, the answer says so, and values that are not yet confirmed carry the status "noch nicht bestätigt".
  • The tools have no fields for names. They take dates, hours, amounts and choices. Inputs are not stored or logged. Only calls per tool and day are counted, with coarse bands such as company size and federal state.

How to connect it

The remote server is https://hr.lintelly.com/mcp (Streamable HTTP). There is no account, no key and no sign-in.

Claude Code:

claude mcp add --transport http lintelly-hr-deutschland https://hr.lintelly.com/mcp
Enter fullscreen mode Exit fullscreen mode

Claude (web, desktop, mobile): Settings, Connectors, add a custom connector with the address https://hr.lintelly.com/mcp.

ChatGPT: Settings, Apps and Connectors, developer mode, create a connector with the address https://hr.lintelly.com/mcp, authentication: none.

Gemini CLI:

gemini extensions install https://github.com/Lintelly/lintelly-hr-deutschland
Enter fullscreen mode Exit fullscreen mode

Local over stdio, for example Claude Desktop or Cursor:

{ "mcpServers": { "lintelly-hr-deutschland": { "command": "npx", "args": ["-y", "@lintelly/hr-deutschland"] } } }
Enter fullscreen mode Exit fullscreen mode

Docker:

docker run -i --rm ghcr.io/lintelly/lintelly-hr-deutschland
Enter fullscreen mode Exit fullscreen mode

Questions you can ask

Ask the way you would ask an HR lead. If something is missing, the assistant should ask back instead of guessing.

  • "I'm hiring my first employee, 20 hours a week, starting 1 December. What do I need to do?"
  • "What does a minijob cost me, and what does a part-time employee on 1,800 gross cost?"
  • "Someone has been sick for three weeks. How long do I pay, and do I get anything back?"
  • "My employee is pregnant. What applies now?"
  • "How much holiday does someone with 3 days a week get, and does last year's leave expire?"
  • "From what size do I need a data protection officer or a works council?"
  • "What changes for me on 1 January?"

The limits

This is the part I care about most, as someone who does HR for a living.

  • It gives information, not legal advice. Every answer is general information, not advice for an individual case. For a dismissal, a warning or a dispute, a person should check whether it fits your case before anything is sent. The tools say this themselves in those answers. For a legal dispute you need an employment lawyer.
  • Germany only. It does not answer for Austria, Switzerland or anywhere else.
  • It is only as good as its values. That is why every value shows its source and check date, so you can verify it yourself.

Code and feedback

The code is MIT, the content is CC BY 4.0, and the repo is here: https://github.com/Lintelly/lintelly-hr-deutschland. Setup for every client is on https://lintelly.com/hr.

If you find a wrong number, a missing case or a bug, please open an issue or write to nick@lintelly.com. Reports of wrong values are the most useful thing you can send me.

Top comments (0)