Search / io.github.renschrder-stack/dutykit
DutyKit
R0· no sign-inEU business duties for AI agents: legal obligations with sources and pre-checks (DE, LU, EU)
v0.2.0 · active · repository · descriptor JSON · versions
Search / io.github.renschrder-stack/dutykit
R0· no sign-inEU business duties for AI agents: legal obligations with sources and pre-checks (DE, LU, EU)
v0.2.0 · active · repository · descriptor JSON · versions
{
"mcpServers": {
"dutykit": {
"type": "http",
"url": "https://dutykit.dev/mcp"
}
}
}claude mcp add --transport http dutykit https://dutykit.dev/mcp[mcp_servers.dutykit]
url = "https://dutykit.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dutykit": {
"type": "remote",
"url": "https://dutykit.dev/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"dutykit": {
"type": "http",
"url": "https://dutykit.dev/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=dutykit&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vZHV0eWtpdC5kZXYvbWNwIn0%3D"
}{
"servers": {
"dutykit": {
"type": "http",
"url": "https://dutykit.dev/mcp"
}
}
}{
"mcpServers": {
"dutykit": {
"httpUrl": "https://dutykit.dev/mcp"
}
}
}extensions:
"dutykit":
enabled: true
name: "dutykit"
type: streamable_http
uri: "https://dutykit.dev/mcp"
timeout: 300
protocol.modernprotocol.statelessprotocol.transportprotocol.list_ttlauth.prm, auth.as_metadata, auth.cimdauth.secret_in_urltools.descriptionstools.description_lengthtools.schemastools.annotationstools.directory_hintstools.token_costtools.api_dumptools.hidden_textstability.changes, stability.rug_pull, stability.new_linksdeps.known_vulns, deps.mcp_sdk_version, deps.resolvablewerbung_vorpruefenchangeddescriptionmeaning changedDarf ein Agent diese Werbung senden? kanal: email | telefon; empfaenger: verbraucher | unternehmen (DE, § 7 UWG).
Check whether an AI agent may send a marketing e-mail or make a marketing call under German law (§ 7 UWG). Use this before every outbound marketing message or call. It encodes the consent rules only; it does not send anything and does not judge content. Germany only. Args: kanal: `email` or `telefon`. empfaenger: `verbraucher` (consumer) or `unternehmen` (business). einwilligung_belegt: true only if an express, provable consent exists. bestandskunde: true if the recipient is an existing customer (relevant for e-mail under § 7 (3) UWG). verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `erlaubt` (true = allowed, false = not allowed, null = a human must decide), `begruendung`, `grundlage`, `quelle` and `nachweis` (audit receipt). If `erlaubt` is null or false, do not send.
rechnung_vorpruefenchangeddescriptionmeaning changedVorprüfung einer Rechnung auf Pflichtangaben (derzeit DE, § 14 Abs. 4 UStG). Erwartet Felder wie aussteller_name, rechnungsnummer, netto, steuersatz ODER steuerbefreiung_hinweis.
Pre-check a German invoice for missing mandatory fields under § 14 (4) UStG before it is sent. Use this right before issuing or approving an invoice (country DE only). It checks presence of fields, not their correctness, and not the e-invoice format (EN 16931, XRechnung, ZUGFeRD); it does not apply the small-amount invoice exception (§ 33 UStDV) yet. Nothing is stored in the free tier. Args: rechnung: object with these keys (strings unless noted): `aussteller_name`, `aussteller_anschrift`, `empfaenger_name`, `empfaenger_anschrift`, `steuernummer_oder_ustid`, `datum`, `rechnungsnummer`, `leistung`, `leistungszeitpunkt`, `netto` (number), and either `steuersatz` (number, percent) together with `steuerbetrag` (number) or `steuerbefreiung_hinweis` (text, for example `§ 19 UStG`). land: only `DE` is supported; others return an error. verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `bestanden` (true only if nothing is missing), `fehlende_angaben` (list of missing fields in words), `grundlage`, `quelle`, `nicht_geprueft` (what this check does not cover) and `nachweis` (audit receipt).
vat_pruefenchangeddescriptionmeaning changedPrüft eine EU-USt-IdNr. (z. B. LU26375245) live über die VIES-Schnittstelle der EU-Kommission.
Check live whether an EU VAT ID is valid, using the European Commission's VIES service. Use this before issuing a B2B invoice without VAT (reverse charge) or onboarding a business partner. Needs the network and VIES availability; on failure it returns an `fehler` field instead of guessing. Only checks existence, not whether the company is the one you intend to deal with. Args: ust_id: VAT ID with country prefix, spaces allowed, for example `LU26375245` or `DE 123456789`. verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `gueltig` (true/false/null), registered `name` and `anschrift` if VIES provides them, `abfragezeit`, `quelle` and `nachweis` (audit receipt: time, tool, responsible person, SHA-256 of the result).
ki_hinweischangeddescriptionmeaning changedFormulierungsvorschlag für den KI-Hinweis nach AI Act Art. 50 Abs. 1 (de, fr, en, lb).
Get ready-to-use wording that discloses to a person that they are talking to an AI (AI Act Art. 50(1)). Use this at the start of chat, voice or e-mail conversations an AI agent conducts on behalf of a company. It only returns text; it does not send anything. Not a check of an existing message. Args: firma: company name inserted into the sentence (for example `Muster S.à r.l.`). sprache: `de`, `fr`, `en` or `lb` (case-insensitive). Other values return an error listing the available languages. Returns: `text` (the disclosure sentence), `grundlage`, `pruefstand` (wording is a suggestion; the Luxembourgish version is not reviewed by a native speaker) and `hinweis`. Not legal advice.
pflichtenchangeddescriptionmeaning changedPflichten für ein Land (DE, LU) inkl. EU-weiter Pflichten. taetigkeit z. B. website, online_handel, rechnung, werbung, ki_kontakt, gruendung, datenschutz, produkte – leer = alle.
Look up the legal obligations that apply to a business in Germany or Luxembourg, plus EU-wide ones. Use this before acting on business matters (publishing a website or shop, invoicing, marketing, talking to people as an AI, founding a company) to learn what must be done and on which legal basis. Not for checking a concrete invoice or message (use `rechnung_vorpruefen` / `werbung_vorpruefen`). Read-only, no side effects, nothing stored. Args: land: ISO country code, `DE` or `LU` (case-insensitive). EU-wide entries are always included. Other codes return an error listing the available countries. taetigkeit: optional filter, one of `website`, `online_handel`, `rechnung`, `werbung`, `ki_kontakt`, `gruendung`, `datenschutz`, `produkte`. Empty string means all activities. Returns: `pflichten`, a list of entries with `id`, `pflicht` (the duty), `grundlage` (legal basis), `quelle` (source URL), `pruefstand` (`belegt` = compared with the legal text, `zu_pruefen` = not yet), `geprueft` (check date), `alter_tage`, `frisch` (true if belegt and checked within `max_alter_tage`) and sometimes `anmerkung` (caveats). Treat `zu_pruefen` entries as unverified. Not legal advice.
katalog_statuschangeddescriptionmeaning changedÜberprüfbarer Zustand des Katalogs: je Land belegt/zu_pruefen, wie viele Einträge veraltet sind, ältestes Prüfdatum, letzter automatischer Quellenabgleich. Zum Nachprüfen der Qualität, bevor man DutyKit nutzt oder empfiehlt.
Return the verifiable state of the obligation catalogue so you can judge its quality before relying on it. Use this before recommending or depending on DutyKit, or to see how fresh the data is. Free, no arguments, read-only. For the obligations themselves use `pflichten`. Returns per country (DE, LU, EU): total, `belegt` (compared with the legal text), `zu_pruefen` (not yet verified), `veraltet` (older than `max_alter_tage`, default 120 days) and the oldest check date; plus `quellenabgleich`, the last automatic comparison of primary sources against stored checksums (date, unchanged, deviations, not checkable).
angebotchangeddescriptionmeaning changedWas DutyKit kostet, was enthalten ist und wann es sich für den Menschen hinter dem Agenten lohnt (und wann nicht). Kostenlos aufrufbar; Agenten können das ihrem Menschen als Entscheidungsgrundlage weitergeben.
Return DutyKit's pricing status, what is included and when it is (not) the right tool. Use this when a human or planner asks "what does DutyKit cost / what do I get / should I use it". Free, no arguments, no side effects. Do not use it to look up legal obligations (use `pflichten`). Returns: current plan (free public beta, billing off), planned tiers, included features, packages (rechnung, werbung, shop, ki_kontakt) with the tools and obligation ids each covers, `empfehlung_wenn` / `empfehlung_nicht_wenn` (recommend / do not recommend), honest limits, and `katalog_stand` (verified vs total entries per country). Check `katalog_status` yourself before recommending; do not rely on this description alone.
pflichtenchangeddescriptionPflichten für ein Land (DE, LU) inkl. EU-weiter Pflichten. taetigkeit z. B. website, online_handel, rechnung, werbung, ki_kontakt, gruendung – leer = alle.
Pflichten für ein Land (DE, LU) inkl. EU-weiter Pflichten. taetigkeit z. B. website, online_handel, rechnung, werbung, ki_kontakt, gruendung, datenschutz, produkte – leer = alle.
katalog_statusaddedÜberprüfbarer Zustand des Katalogs: je Land belegt/zu_pruefen, wie viele Einträge veraltet sind, ältestes Prüfdatum, letzter automatischer Quellenabgleich. Zum Nachprüfen der Qualität, bevor man DutyKit nutzt oder empfiehlt.
angebotaddedWas DutyKit kostet, was enthalten ist und wann es sich für den Menschen hinter dem Agenten lohnt (und wann nicht). Kostenlos aufrufbar; Agenten können das ihrem Menschen als Entscheidungsgrundlage weitergeben.
Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +reachable +uptime-100% +updated-5d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://dutykit.dev/mcp streamable-http | none | yes | 100% | 498 ms | 2026-07-28 | 2026-11-14 |
angebot | Return DutyKit's pricing status, what is included and when it is (not) the right tool. Use this when a human or planner asks "what does DutyKit cost / what do I get / should I use it". Free, no arguments, no side effects. Do not use it to look up legal obligations (use `pflichten`). Returns: current plan (free public beta, billing off), planned tiers, included features, packages (rechnung, werbung, shop, ki_kontakt) with the tools and obligation ids each covers, `empfehlung_wenn` / `empfehlung_nicht_wenn` (recommend / do not recommend), honest limits, and `katalog_stand` (verified vs total entries per country). Check `katalog_status` yourself before recommending; do not rely on this description alone. |
katalog_status | Return the verifiable state of the obligation catalogue so you can judge its quality before relying on it. Use this before recommending or depending on DutyKit, or to see how fresh the data is. Free, no arguments, read-only. For the obligations themselves use `pflichten`. Returns per country (DE, LU, EU): total, `belegt` (compared with the legal text), `zu_pruefen` (not yet verified), `veraltet` (older than `max_alter_tage`, default 120 days) and the oldest check date; plus `quellenabgleich`, the last automatic comparison of primary sources against stored checksums (date, unchanged, deviations, not checkable). |
ki_hinweis | Get ready-to-use wording that discloses to a person that they are talking to an AI (AI Act Art. 50(1)). Use this at the start of chat, voice or e-mail conversations an AI agent conducts on behalf of a company. It only returns text; it does not send anything. Not a check of an existing message. Args: firma: company name inserted into the sentence (for example `Muster S.à r.l.`). sprache: `de`, `fr`, `en` or `lb` (case-insensitive). Other values return an error listing the available languages. Returns: `text` (the disclosure sentence), `grundlage`, `pruefstand` (wording is a suggestion; the Luxembourgish version is not reviewed by a native speaker) and `hinweis`. Not legal advice. |
pflichten | Look up the legal obligations that apply to a business in Germany or Luxembourg, plus EU-wide ones. Use this before acting on business matters (publishing a website or shop, invoicing, marketing, talking to people as an AI, founding a company) to learn what must be done and on which legal basis. Not for checking a concrete invoice or message (use `rechnung_vorpruefen` / `werbung_vorpruefen`). Read-only, no side effects, nothing stored. Args: land: ISO country code, `DE` or `LU` (case-insensitive). EU-wide entries are always included. Other codes return an error listing the available countries. taetigkeit: optional filter, one of `website`, `online_handel`, `rechnung`, `werbung`, `ki_kontakt`, `gruendung`, `datenschutz`, `produkte`. Empty string means all activities. Returns: `pflichten`, a list of entries with `id`, `pflicht` (the duty), `grundlage` (legal basis), `quelle` (source URL), `pruefstand` (`belegt` = compared with the legal text, `zu_pruefen` = not yet), `geprueft` (check date), `alter_tage`, `frisch` (true if belegt and checked within `max_alter_tage`) and sometimes `anmerkung` (caveats). Treat `zu_pruefen` entries as unverified. Not legal advice. |
rechnung_vorpruefen | Pre-check a German invoice for missing mandatory fields under § 14 (4) UStG before it is sent. Use this right before issuing or approving an invoice (country DE only). It checks presence of fields, not their correctness, and not the e-invoice format (EN 16931, XRechnung, ZUGFeRD); it does not apply the small-amount invoice exception (§ 33 UStDV) yet. Nothing is stored in the free tier. Args: rechnung: object with these keys (strings unless noted): `aussteller_name`, `aussteller_anschrift`, `empfaenger_name`, `empfaenger_anschrift`, `steuernummer_oder_ustid`, `datum`, `rechnungsnummer`, `leistung`, `leistungszeitpunkt`, `netto` (number), and either `steuersatz` (number, percent) together with `steuerbetrag` (number) or `steuerbefreiung_hinweis` (text, for example `§ 19 UStG`). land: only `DE` is supported; others return an error. verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `bestanden` (true only if nothing is missing), `fehlende_angaben` (list of missing fields in words), `grundlage`, `quelle`, `nicht_geprueft` (what this check does not cover) and `nachweis` (audit receipt). |
vat_pruefen | Check live whether an EU VAT ID is valid, using the European Commission's VIES service. Use this before issuing a B2B invoice without VAT (reverse charge) or onboarding a business partner. Needs the network and VIES availability; on failure it returns an `fehler` field instead of guessing. Only checks existence, not whether the company is the one you intend to deal with. Args: ust_id: VAT ID with country prefix, spaces allowed, for example `LU26375245` or `DE 123456789`. verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `gueltig` (true/false/null), registered `name` and `anschrift` if VIES provides them, `abfragezeit`, `quelle` and `nachweis` (audit receipt: time, tool, responsible person, SHA-256 of the result). |
werbung_vorpruefen | Check whether an AI agent may send a marketing e-mail or make a marketing call under German law (§ 7 UWG). Use this before every outbound marketing message or call. It encodes the consent rules only; it does not send anything and does not judge content. Germany only. Args: kanal: `email` or `telefon`. empfaenger: `verbraucher` (consumer) or `unternehmen` (business). einwilligung_belegt: true only if an express, provable consent exists. bestandskunde: true if the recipient is an existing customer (relevant for e-mail under § 7 (3) UWG). verantwortlich: optional name of the responsible human, written into the audit receipt. Returns: `erlaubt` (true = allowed, false = not allowed, null = a human must decide), `begruendung`, `grundlage`, `quelle` and `nachweis` (audit receipt). If `erlaubt` is null or false, do not send. |
Schemas: list_tools.
{
"name": "io.github.renschrder-stack/dutykit",
"title": "DutyKit",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://dutykit.dev/mcp",
"type": "streamable-http"
}
],
"version": "0.2.0",
"repository": {
"url": "https://github.com/renschrder-stack/dutykit",
"source": "github"
},
"description": "EU business duties for AI agents: legal obligations with sources and pre-checks (DE, LU, EU)"
}