Skip to main content
Glama

WorkMCP – Job-Graph Deutschland als MCP-Server

WorkMCP ist eine MCP-Kontextschicht für Rollen, Aufgaben und Automatisierung. Agent-Harnesses wie Claude Code, OpenCode oder Copilot Studio erhalten darüber Stellenanzeigen, Berufe, Aufgaben, Skills, Gehälter und Automatisierungssignale aus öffentlichen Quellen. Jeder Abruf wird lokal gemerkt. Neue und geänderte Daten werden versioniert ergänzt, nichts wird stillschweigend überschrieben.

Rechtlicher Hinweis: WorkMCP ist keine Rechtsberatung. Lizenzen und Nutzungsbedingungen der Datenquellen müssen Nutzende selbst prüfen. Eine Haftung für die Nutzung ist ausgeschlossen, soweit gesetzlich zulässig. Details stehen auf der Landingpage und im Rechtlichen Hinweis.

Was der Server kann

  • Stellenanzeigen aus drei sich ergänzenden Volltextquellen:

    • BA-Jobsuche als Deutschland-Kern.

    • Arbeitnow mit aggregierten ATS-Feeds, Remote- und Visa-Filter.

    • ATS-Karriereseiten direkt (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, SmartRecruiters, BambooHR, Workday) mit Abteilung, Seniority und Anstellungsart.

  • Berufe und Aufgaben:

    • BERUFENET mit Aufgaben, Tätigkeitsfeldern und KldB-Code.

    • ESCO mit essential/optional Skills und ISCO-Gruppe.

    • O*NET Task Statements (Core/Supplemental).

    • KldB 2010 inklusive Hierarchie als Jobfamilien.

  • Crosswalks KldB ↔ ISCO-08 ↔ ESCO ↔ O*NET ↔ BERUFENET, auch über mehrere Stufen.

  • Gehälter:

    • Amtliche Medianentgelte mit Quartilen aus dem Entgeltatlas der BA.

    • Optional Gehalts-Histogramme aus Adzuna (kostenloser Key).

  • Automatisierungssignale aus Hacker News. Aufgaben, Skills und Bewertungen speichert das Modell mit record_extraction versioniert im Graphen.

  • Rollenkontext in einem Aufruf (get_role_context): Zuordnung, Aufgaben, Skills, Gehalt und Marktsignal.

  • Job-Graph mit Knoten, Kanten und Herkunft, exportierbar als JSON, Neo4j-Cypher, GraphML oder als Archivy-Wissensdatenbank.

  • check_sources prüft die Erreichbarkeit aller Quellen vom eigenen Rechner aus.

Related MCP server: recht-mcp

Schnellstart

Voraussetzungen: Python ≥ 3.10 und uv.

Claude Code (stdio, lokal):

claude mcp add workmcp -- uvx --from git+https://github.com/GodModeAI2025/WorkMCP workmcp

Mit eigenem Speicherort der Wissensdatenbank:

claude mcp add --transport stdio workmcp --env WORKMCP_DB=$HOME/.workmcp/knowledge.db -- uvx --from git+https://github.com/GodModeAI2025/WorkMCP workmcp

Aus einem lokalen Klon:

git clone https://github.com/GodModeAI2025/WorkMCP.git
claude mcp add workmcp -- uv --directory /pfad/zu/WorkMCP run workmcp

Zentral über Streamable HTTP (ein Server für mehrere Harnesses):

uvx --from git+https://github.com/GodModeAI2025/WorkMCP workmcp --transport streamable-http --host 0.0.0.0 --port 8000
claude mcp add --transport http workmcp http://<server>:8000/mcp

Der HTTP-Modus hat keine eigene Authentifizierung. Betreibe ihn nur im internen Netz oder hinter einem Reverse Proxy mit Zugangsschutz. Mit --allowed-host mcp.firma.de (mehrfach möglich) oder WORKMCP_ALLOWED_HOSTS prüft der Server zusätzlich den Host-Header (Schutz vor DNS-Rebinding). Das Compose-Setup aktiviert diese Prüfung standardmäßig für localhost.

Docker: WorkMCP und Archivy zusammen (zentraler MCP-Server plus Wissensdatenbank mit vorinstallierter Doku):

cp .env.example .env
docker compose up -d --build
  • Archivy: http://localhost:5000 (Login aus .env). Die Doku liegt im Ordner WorkMCP.

  • WorkMCP: http://localhost:8000/mcp, in Claude Code mit claude mcp add --transport http workmcp http://localhost:8000/mcp.

  • export_knowledge('archivy') schreibt die gemerkten Berufe direkt in denselben Archivy-Ordner. Beide Container teilen sich das Archivy-Volume (WORKMCP_ARCHIVY_DIR=/archivy/data).

  • Beide Ports sind nur an 127.0.0.1 gebunden. Bei Docker-Hub-Rate-Limits lassen sich in .env Spiegel-Images setzen (ARCHIVY_PYTHON_IMAGE, WORKMCP_PYTHON_IMAGE).

  • Getestet am 29.10.2026 mit Docker 29.9 und Compose v5.6: Start ohne Assistent, Login, Doku-Notizen sichtbar, Export aus WorkMCP erscheint sofort in Archivy, Neustart idempotent.

Projektkonfiguration .mcp.json:

{
  "mcpServers": {
    "workmcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/GodModeAI2025/WorkMCP", "workmcp"],
      "env": { "WORKMCP_DB": "~/.workmcp/knowledge.db" }
    }
  }
}

OpenCode (opencode.json):

{
  "mcp": {
    "workmcp": {
      "type": "local",
      "command": ["uvx", "--from", "git+https://github.com/GodModeAI2025/WorkMCP", "workmcp"],
      "enabled": true
    }
  }
}

Erste Schritte im Harness:

  1. check_sources prüft, ob alle Quellen erreichbar sind.

  2. import_reference_data('onet') lädt die O*NET-Aufgaben einmalig, die Version wird automatisch erkannt.

  3. get_role_context('Buchhalter', ort='Berlin') liefert den ersten Rollenkontext.

Gedächtnis: merken und ergänzen

Situation

Verhalten

Neuer Datensatz

wird gespeichert (Version 1, Ereignis neu)

Geänderter Datensatz

neue Version, alte Version bleibt erhalten, feldgenaues Diff (geaendert)

Unveränderter Datensatz

nur „zuletzt gesehen“ und der Abrufzähler werden aktualisiert

Anzeige nicht mehr abrufbar (404)

Status verschwunden, wird nie gelöscht; taucht sie wieder auf: wieder_da

Wiederholte Anfrage innerhalb der TTL

Antwort aus dem Speicher (aus_speicher: true)

Quelle nicht erreichbar

letzter gespeicherter Stand mit Warnung

aktualisieren: true

frischer Abruf; das Delta zeigt neu, geaendert und nicht_mehr_enthalten gegenüber der letzten identischen Anfrage

Offline-Modus (WORKMCP_OFFLINE=1)

nur Gedächtnis, keine Netzzugriffe

Werkzeuge zum Gedächtnis:

  • get_changes(seit='7d'): Änderungsprotokoll.

  • get_history(...): alle Versionen eines Datensatzes.

  • search_knowledge(...): Volltextsuche offline.

  • knowledge_stats(): Überblick.

  • remember(...): eigene Daten wie interne Rollenprofile oder Expertenfeedback, ebenfalls versioniert.

Tools

Bereich

Tools

Stellen

search_jobs (BA), get_job_details, search_arbeitnow, get_ats_jobs, commoncrawl_lookup

Berufe

search_occupation, get_occupation, get_tasks, get_skills, crosswalk, get_role_context

Gehalt

get_salary (Entgeltatlas), adzuna_salary (optional)

Automatisierung

find_automation_signals, record_extraction

Gedächtnis

remember, search_knowledge, get_changes, get_history, knowledge_stats, graph_neighbors

Daten und Betrieb

import_reference_data, export_knowledge, check_sources

Dazu kommt der Prompt rollen_analyse(rolle, ort). Er führt durch den Ablauf Rolle → Aufgaben → Automatisierung. Die vollständige Referenz steht in docs/archivy/WorkMCP/910004-Tools-Referenz.md.

Datenquellen

Alle integrierten Quellen sind kostenlos. Kostenpflichtige APIs wie Apify werden bewusst nicht genutzt.

Quelle

Zugang

Hinweise zu Lizenz und Bedingungen (selbst prüfen!)

BA-Jobsuche, BERUFENET, Entgeltatlas

JSON-Backends der BA-Web-Apps, öffentliche Client-IDs

Keine offiziell angebotene API, dokumentiert von bundesAPI. Endpunkte können sich ändern. Entgeltatlas: „Statistik der Bundesagentur für Arbeit“ als Quelle angeben.

ESCO

Web-API der EU-Kommission

Nutzungsbedingungen des ESCO-Portals, Quellenangabe

O*NET

Datenbank-Download (Text)

CC BY 4.0, Namensnennung von USDOL/ETA erforderlich; O*NET® ist eine Marke von USDOL/ETA

KldB 2010, Umsteigeschlüssel KldB→ISCO-08

Datei der BA-Statistik (Import)

Quellenangabe Bundesagentur für Arbeit

ESCO↔O*NET-Crosswalk

Datei vom ESCO-Portal oder O*NET (Import)

Bedingungen der Herausgeber

Arbeitnow

kostenlose API ohne Key

Bedingungen von Arbeitnow

ATS-Job-Boards

öffentliche Karriereseiten-Feeds ohne Login

robots.txt und Bedingungen der Arbeitgeber und ATS-Anbieter, schonend abrufen

Adzuna (optional)

kostenloser Developer-Key

Adzuna-API-Bedingungen, u. a. Verlinkung über redirect_url

Hacker News

Algolia-Such-API

Inhalte gehören den Verfassenden

Common Crawl

URL-Index und WARC-Abruf

Common Crawl Terms of Use; Urheberrecht der Seitenbetreiber

Nicht integriert sind LinkedIn, Indeed, StepStone und XING: keine Lese-API, Scraping verbieten die AGB. Ebenso Interamt (keine Lese-API) und Apify (kostenpflichtig). Die Einordnung steht im Faktencheck.

Datenschutz: Stellenanzeigen können personenbezogene Daten enthalten. Felder mit Kontaktpersonen, Telefonnummern, E-Mail-Adressen und Bewerbungsangaben werden vor dem Speichern entfernt. Mit WORKMCP_STORE_PERSONAL_DATA=1 lässt sich das abschalten; dann ist DSGVO-Konformität selbst sicherzustellen.

Referenzdaten importieren

import_reference_data('onet')                                  # automatisch neueste Version, CC BY 4.0
import_reference_data('kldb', quelle='/pfad/kldb2010.xlsx')    # KldB-2010-Systematik (Fassung 2020)
import_reference_data('kldb_isco', quelle='/pfad/umsteiger.xlsx')
import_reference_data('esco_onet', quelle='/pfad/esco_onet.csv')

Herkunft der Dateien:

Die Spalten werden an Kopfzeilen und Wertformen erkannt, Titelzeilen stören nicht. Wiederholte Importe melden neue, geänderte und entfallene Einträge, etwa zwischen zwei O*NET-Releases.

Konfiguration

Variable

Standard

Bedeutung

WORKMCP_DB

~/.workmcp/knowledge.db

Wissensdatenbank (SQLite)

WORKMCP_OFFLINE

0

nur Gedächtnis, keine Netzzugriffe

WORKMCP_TTL_JOBS_HOURS / _DETAILS_HOURS / _SIGNALS_HOURS

6 / 24 / 24

Gültigkeitsdauer für Stellen, Details und Signale

WORKMCP_TTL_REFERENCE_DAYS

30

Gültigkeitsdauer für Berufe und Referenzdaten

WORKMCP_LANGUAGE

de

Sprache für ESCO

WORKMCP_ESCO_VERSION

–

z. B. v1.2.1 (sonst Standard der API)

WORKMCP_ONET_VERSION

automatisch

z. B. 31_0

WORKMCP_ADZUNA_APP_ID / _APP_KEY

–

aktiviert Adzuna (kostenloser Key)

WORKMCP_STORE_PERSONAL_DATA

0

Kontaktfelder aus Stellenanzeigen speichern

WORKMCP_KLDB_SOURCE, _KLDB_ISCO_SOURCE, _ESCO_ONET_SOURCE

–

Standardquellen für den Import

WORKMCP_ARCHIVY_DIR

–

Archivy-Datenverzeichnis als Standardziel von export_knowledge('archivy')

WORKMCP_ALLOWED_HOSTS

–

erlaubte Host-Header für streamable-http, kommagetrennt (wie --allowed-host)

WORKMCP_BA_*, WORKMCP_ESCO_BASE, WORKMCP_HN_BASE …

siehe src/workmcp/config.py

Endpunkte und Client-IDs überschreiben

Graph-Modell

  • Knoten: Beruf, Klassifikation (KldB/ISCO, Hierarchie als Jobfamilien), Aufgabe, Skill, Stellenanzeige, Arbeitgeber, Branche, Region, Automatisierung, Entgelt.

  • Kanten: STELLT_AN, ERFORDERT, TEIL_VON (mit O*NET Core/Supplemental), AUTOMATISIERBAR_DURCH (Bewertung, Anteil an der Wochenarbeitszeit), GEHOERT_ZU, FUER_BERUF, IN_REGION, AUSGESCHRIEBEN_VON, KLASSIFIZIERT_ALS, ENTSPRICHT, UNTERGRUPPE_VON, HAT_ENTGELT.

Details stehen in docs/archivy/WorkMCP/910007-Job-Graph-Modell.md. Für Neo4j: export_knowledge('cypher'), dann cypher-shell < graph.cypher.

Dokumentation

  • Landingpage, für GitHub Pages aus dem Ordner /docs gedacht.

  • Archivy-Dokumentation: Notizen mit YAML-Front-Matter, direkt in eine Archivy-Wissensdatenbank kopierbar. export_knowledge('archivy') schreibt auch die gemerkten Berufe als verlinkte Archivy-Notizen.

  • Faktencheck der zugrunde liegenden Recherche.

Bekannte Grenzen

  • Die Clients sind gegen dokumentierte Antwortformate getestet (bundesAPI-OpenAPI, ESCO-HAL, O*NET-Dateilayout, live verifizierte ATS-Referenz). Gegen die Live-APIs konnten sie in der Entwicklungsumgebung nicht laufen, deren Netzwerk-Policy die Hosts sperrt. Vor dem Produktiveinsatz check_sources ausführen und Ergebnisse stichprobenartig prüfen.

  • Die Aufgaben-Extraktion aus BERUFENET ist heuristisch (Abschnitte „Aufgaben und Tätigkeiten“). Die Rohantwort wird immer vollständig gespeichert.

  • ONET-Aufgaben sind englisch und beschreiben US-Berufe. Für die Zuordnung zu deutschen Berufen werden ESCO-URIs und der ESCO↔ONET-Crosswalk empfohlen.

  • search_arbeitnow filtert lokal, weil die API keine Suchparameter für Begriff und Ort hat.

Entwicklung

uv sync --extra dev
uv run pytest
uv run ruff check src tests && uv run mypy src

Lizenz

MIT, siehe LICENSE. Die abgerufenen Daten unterliegen den Bedingungen ihrer jeweiligen Quellen.

Available Tools

24 tools
adzuna_salaryA
Idempotent

Gehaltsverteilung (Histogramm), Top-Arbeitgeber und optional Gehaltsverlauf aus Adzuna-Inseraten.

Optional: braucht einen kostenlosen Adzuna-Developer-Key (WORKMCP_ADZUNA_APP_ID/_APP_KEY). Für amtliche Medianentgelte nach Beruf get_salary (Entgeltatlas) verwenden.

NameRequiredDescriptionDefault
wasYesJobtitel/Stichwort, z. B. 'data engineer'
monateNo
standortNoStandortpfad wie bei Adzuna, z. B. ['Deutschland', 'Berlin']
kategorieNoAdzuna-Kategorie-Tag für den Gehaltsverlauf, z. B. 'it-jobs'
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present, the description adds real context: it discloses the required Adzuna API credentials and that data comes from an open-world source (Adzuna ads), matching openWorldHint. However, readOnlyHint=false is left unexplained, and the aktualisieren/refresh behavior is not described, so an agent cannot tell why this appears non-read-only. Useful but incomplete beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what the tool returns, then the auth caveat, then the sibling alternative. No filler. Slightly compressed by the parenthetical key names, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers purpose, credential requirement, and the get_salary alternative. The remaining gap is the unexplained refresh/aktualisieren semantics and the readOnlyHint=false discrepancy, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, so the schema documents was, standort, and kategorie but leaves monate and aktualisieren undocumented. The description adds little beyond the schema — at most it hints that kategorie drives the Gehaltsverlauf. It does not compensate for the two undocumented parameters, so it sits at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource specifically (Gehaltsverteilung/Histogramm, Top-Arbeitgeber, optional Gehaltsverlauf) and its source (Adzuna-Inseraten), so an agent knows exactly what data it returns. It also distinguishes itself from the sibling get_salary by referencing that tool's domain (amtliche Medianentgelte, Entgeltatlas). It lacks an explicit action verb, phrasing everything as a noun list, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent to get_salary for official median wages by occupation, which is a clear when-to-use-alternative signal. It also surfaces the prerequisite (free Adzuna developer key via env vars). It does not spell out a full when-not-to-use matrix against the other siblings, so it stops at 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_sourcesA
Idempotent

Erreichbarkeit aller Datenquellen von diesem Rechner aus prüfen (HTTP-Status und Latenz je Quelle).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already specify openWorldHint=true, idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds useful behavioral context: it checks all data sources from the local machine and reports HTTP status and latency per source. It does not explain timeout behavior or whether failures are aggregated, but it adds more than the structured fields alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant phrasing. It immediately states the action, scope, and measured outputs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, rich annotations, and an output schema, the description is nearly complete. It clearly describes the diagnostic scope and metrics, though it omits explicit guidance about when to invoke it or how failures are represented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so parameter semantics are not applicable; the baseline for zero parameters is 4. The description does not need to document any input arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: checking reachability of all data sources from this machine. It also specifies the returned diagnostics (HTTP status and latency per source), making the tool's purpose clear. It does not explicitly differentiate itself from sibling tools, but the diagnostic purpose is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'von diesem Rechner aus' implies connectivity diagnostics, so usage is inferable. However, there is no explicit guidance on when to use this tool versus alternatives, nor any exclusion or prerequisite details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

commoncrawl_lookupA
Idempotent

Common-Crawl-Index nach archivierten Seiten (z. B. Karriereseiten) durchsuchen und optional Text laden.

NameRequiredDescriptionDefault
crawlNoCrawl-ID wie 'CC-MAIN-2026-30', Standard: neuester
limitNo
url_musterYesURL-Muster für den Index, z. B. 'example.com/karriere/*'
text_abrufenNoFür die ersten N Treffer den Seitentext laden

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true, idempotentHint=true and destructiveHint=false; the description adds that text fetching is optional and secondary to the index lookup. It does not disclose that text loading is capped at 5 hits, latency cost of fetching, or why readOnlyHint is false for an apparent search — those gaps matter since the non-read-only flag is surprising here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with the core action first and the optional side effect appended. No filler, though the example could be folded in more precisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description covers both the index search and the optional text fetch. Minor misses: no note on crawl selection behavior or result limits, but nothing that would lead an agent to call it incorrectly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents crawl IDs, the URL pattern format, and the text-fetch count with bounds. The description only echoes the optional text loading, adding no syntax or default guidance (e.g. newest crawl default) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource: it searches the Common Crawl index for archived pages and optionally loads page text. The 'z. B. Karriereseiten' example clarifies the intended domain, distinguishing it from the job/occupation lookup siblings by virtue of the archive source, though it doesn't name a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is useful (finding archived versions of pages, e.g. career pages) but gives no explicit when-not conditions and never mentions siblings like search_jobs that might cover live job data. Usage must be inferred from the example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crosswalkA
Idempotent

Übersetzt Berufscodes zwischen KldB 2010, ISCO-08, ESCO, O*NET und BERUFENET (auch über mehrere Stufen).

NameRequiredDescriptionDefault
vonYesAusgangssystem
codeYesCode im Ausgangssystem (KldB 5-stellig, ISCO 4-stellig, ESCO-URI, O*NET-SOC, BERUFENET-ID)
nachYesZielsystem
spracheNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotent, openWorld, non-destructive, and not read-only behavior. The description adds the useful multi-hop capability but does not explain what the non-read-only/open-world behavior entails, such as external lookup, caching, authentication, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It packs the verb, resource, supported systems, and multi-stage capability efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety-related behavior, the description supplies the essential systems and multi-stage scope. It is nearly complete, though it could clarify usage conditions for conversion workflows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the schema itself documents the code formats and the von/nach system enums. The description only restates the supported systems and does not add parameter-level meaning beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Übersetzt', and a clear resource, 'Berufscodes', then enumerates the supported systems. It also notes multi-stage translation, making the tool's purpose distinct from the search/get siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for occupational-code conversion and mentions multi-step translations, but it does not explicitly state when to use this tool versus alternatives or when not to use it. The guidance is therefore only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_knowledgeB
Idempotent

Graph exportieren: JSON, Neo4j-Cypher, GraphML oder als Archivy-Wissensdatenbank (Markdown-Notizen).

NameRequiredDescriptionDefault
pfadNoZieldatei bzw. -ordner (Standard neben der Datenbank)
formatNocypher = Neo4j, graphml = NetworkX/Gephi, archivy = Notizen für Archivyjson

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-destructive, idempotent, closed-world operation that is not read-only, so the safety profile is covered. The description adds that output is written to a file, which explains why readOnlyHint=false, but it does not say whether an existing file is overwritten, what permissions are needed, or how large graphs are handled. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the verb and resource lead, followed by the format enumeration. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the two parameters are fully documented in the schema. However, for a tool that writes files to disk, key operational details such as overwrite behavior and whether 'pfad' is a file or directory per format are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters, defaults and the enum semantics are already documented in the schema. The description restates the format options without adding syntax, path conventions or format-specific behavior beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Graph exportieren') and enumerates the four output formats, so the agent knows exactly what the tool produces. It does not explicitly differentiate from siblings such as search_knowledge or knowledge_stats, but no sibling overlaps with exporting, so confusion risk is low.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to choose this tool over alternatives, nor any prerequisites or caveats. The format list only hints at possible use cases; there is no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_automation_signalsC
Idempotent

Automatisierungssignale aus Hacker News (Berichte, wie Tätigkeiten automatisiert wurden).

NameRequiredDescriptionDefault
limitNo
aufgabe_idNoOptional: Aufgaben-Knoten, der mit den Signalen verknüpft wird
suchbegriffYesEnglisch funktioniert am besten, z. B. 'automated invoice processing'
aktualisierenNo
zeitraum_tageNoNur Beiträge der letzten N Tage
nur_kommentareNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=true and idempotentHint=true, so the agent knows this has side effects and reaches an external network, but the description never explains what those side effects are — nothing about caching/fetching from HN, persisting results, or linking to a task node via aufgabe_id. The one thing it does convey (external HN source) is already implied by openWorldHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with no filler, front-loading the resource and its source. It is not padded, but its brevity is achieved by omitting information rather than by tight editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, non-read-only, open-world tool that can persist links to task nodes, one sentence is not enough. An output schema exists so return values need not be explained, but the write behavior, refresh semantics and parameter meanings are all absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: suchbegriff and aufgabe_id are documented in the schema, but limit, aktualisieren, nur_kommentare and zeitraum_days carry titles only. The description compensates for none of these, so the agent is left guessing what 'aktualisieren' refreshes and how comment-only filtering interacts with the search.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Automatisierungssignale) and its source (Hacker News), plus a clarifying gloss that these are reports of how activities were automated. That is specific enough for an agent to know what it retrieves, though it never explicitly says it is a keyword search nor differentiates itself from siblings like search_knowledge or commoncrawl_lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the many sibling search/lookup tools (search_jobs, search_knowledge, commoncrawl_lookup, search_arbeitnow). No exclusions, no prerequisites, no mention of when the refresh or comment-only modes should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ats_jobsA
Idempotent

Offene Stellen direkt aus dem Bewerbermanagement eines Arbeitgebers (öffentliche Job-Board-APIs ohne Login).

Unterstützt Greenhouse, Lever, Ashby, Workable, Recruitee, Personio (XML), SmartRecruiters, BambooHR und Workday. Liefert Primärdaten wie Abteilung, Seniority, Anstellungsart. Das Delta zeigt neue und geschlossene Stellen seit dem letzten Abruf.

NameRequiredDescriptionDefault
atsNoATS, falls bekannt; sonst wird automatisch erkannt
ortNoFilter auf Standort
max_jobsNo
suchbegriffNoFilter auf Titel/Abteilung/Beschreibung
company_slugYesFirmenkennung (z. B. 'personio') oder Karriereseiten-URL (z. B. 'https://jobs.lever.co/palantir', bei Workday zwingend die URL)
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes meaningfully beyond the annotations by disclosing that only public, login-free endpoints are hit, that Personio returns XML, that Workday requires a URL, and that repeated calls yield a delta of new/closed postings since the last fetch — which explains the non-readOnly, idempotent annotation profile. Return-field hints (Abteilung, Seniority, Anstellungsart) are also useful, though rate limits and failure modes (unknown slug, unsupported ATS) are unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then the platform list, then the added-value details. The ATS enumeration is long but scannable; nothing is truly redundant, though it could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and annotations cover the safety profile. What it does provide — login-free sourcing, format quirks, delta semantics — is the right kind of context for a 6-parameter fetch tool; only the meaning of 'aktualisieren' and the max_jobs semantics are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and already documents ats auto-detection, ort, suchbegriff, and the company_slug URL/Workday requirement. The description adds essentially no parameter guidance — max_jobs and aktualisieren remain undocumented in both places, and the delta sentence only loosely implies what aktualisieren does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: fetching open job postings directly from an employer's applicant-tracking system via public, login-free job-board APIs, and enumerates the nine supported ATS platforms. It does not, however, distinguish itself from the sibling search_jobs or get_job_details, so an agent must infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'direkt aus dem Bewerbermanagement eines Arbeitgebers' implies the scenario (you know the employer/ATS slug and want their full board), and the delta note hints at polling. But there is no explicit when-to-use, when-not-to-use, or named alternative such as search_jobs for cross-employer keyword search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_changesC
Read-onlyIdempotent

Änderungsprotokoll des Gedächtnisses: was ist neu, geändert, verschwunden oder wieder aufgetaucht.

NameRequiredDescriptionDefault
artNo
seitNoz. B. '24h', '7d', '2026-10-01'
limitNo
quelleNo
ereignisNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent operation, so the safety profile is covered. The description adds the domain-level behavior that the tool reports a change log across four change types, but this information largely duplicates the `ereignis` enum already present in the schema. With annotations carrying the operational traits, a 3 is appropriate: some added context, but no disclosure of ordering, pagination, or scope detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or repetition. It immediately tells the agent what the tool is about without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has five optional parameters, no required fields, and an output schema exists, so return-value explanation is not needed. However, the description provides no meaning for most parameters and no guidance on default behavior or scope. An agent still cannot confidently invoke this tool with the correct filters without guessing what `art` or `quelle` represent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only `seit` has any description), and the description does nothing to explain the five parameters. It neither defines what `art`, `quelle`, `limit`, or `ereignis` mean nor how to combine them. Because low coverage requires the description to compensate and it does not, this scores a 1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource (a change log of the memory) and enumerates the kinds of changes it captures: newly added, changed, disappeared, or reappeared. This is specific enough that an agent can grasp what the tool returns. It does not, however, explicitly distinguish itself from sibling `get_history`, which likely overlaps in purpose, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains no when-to-use guidance, no exclusions, and no mention of alternatives. It says nothing about when `get_changes` should be preferred over `get_history` or `search_knowledge`. An agent is left to infer the appropriate context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_historyB
Read-onlyIdempotent

Alle gespeicherten Versionen eines Datensatzes mit feldgenauen Änderungen.

NameRequiredDescriptionDefault
artYesz. B. 'stelle_detail'
quelleYesz. B. 'ba_jobsuche'
schluesselYesz. B. die refnr

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false, and openWorldHint false, covering the safety profile. The description adds that changes are field-accurate, which provides useful context about return granularity, but does not disclose ordering, pagination, or authentication requirements beyond what annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It directly conveys the core purpose without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that annotations cover safety and an output schema exists, the description provides sufficient context by stating what is returned (all versions with field-level changes). It could be more complete by mentioning usage scenarios or record identification, but the structured fields compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters (quelle, art, schluessel). The description does not elaborate on parameter meaning or format beyond the schema, which is acceptable given the high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that it returns all stored versions of a record with field-level changes, which is a specific resource and output. However, it does not name or distinguish itself from sibling tools like get_changes, leaving ambiguity about when to choose this tool over a similar one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. The description only implies usage by stating what is returned, but an agent must infer the appropriate context without direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_detailsA
Idempotent

Volltext und Details einer BA-Stellenanzeige (Beschreibung, Branche, Fertigkeiten, Vergütung).

Nicht mehr vorhandene Anzeigen werden im Gedächtnis als 'verschwunden' markiert. Kontaktpersonen werden vor dem Speichern entfernt (Datenminimierung).

NameRequiredDescriptionDefault
refnrYesReferenznummer aus search_jobs, z. B. '10000-1184867112-S'
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses meaningful behavior beyond the annotations: unavailable postings are marked 'disappeared' in memory and contact persons are stripped before saving (data minimization). This memory-write side effect is consistent with readOnlyHint=false and adds genuine context. Return format is not described, but an output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences: content first, then side effects. Front-loaded with the payload description, no filler. Reasonably tight for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no elaboration, and the description still adds the memory/contact-handling behavior an agent should know. The only real gap is the undocumented aktualisieren flag, which is minor given the presence of the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The refnr parameter is documented in the schema with an example (derived from search_jobs). The 'aktualisieren' boolean has no documentation in either schema or description; the memory-marking sentence hints at refresh behavior but never ties it to the parameter, leaving the 50% coverage gap only partially bridged.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieves full text and details of a BA job posting, enumerating the returned fields (description, industry, skills, compensation). This clearly differentiates it as the detail-fetch counterpart to a search, though it never names search_jobs explicitly in the description itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description focuses on outputs and side effects; it offers no explicit guidance on when to call this versus siblings or the fact that refnr must originate from search_jobs (that hint lives only in the schema). Usage is left to be inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_occupationB
Idempotent

Profil eines Berufs bzw. einer Berufsklasse mit Klassifikation, Aufgaben, Skills und Verknüpfungen.

NameRequiredDescriptionDefault
spracheNo
beruf_idYesberufenet:<id>, kldb:<code>, isco:<code>, onet:<soc> oder ESCO-URI
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint, idempotentHint, and destructiveHint=false, so the bar is lower; the description usefully confirms the profile aggregates classification, tasks, skills, and links. However it says nothing about the unexplained `aktualisieren` (refresh/live network fetch) behavior, which is exactly the kind of trait the annotation set does not cover, and it sits oddly against readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity is part of why usage and parameter guidance are missing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value structure needn't be described. Still, two of three parameters are opaque and the relationship to closely related siblings (get_tasks, get_skills, search_occupation) is unaddressed, leaving gaps for a tool in a crowded namespace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%: beruf_id is documented in the schema (berufenet/kldb/isco/onet/ESCO identifier forms), but `sprache` and `aktualisieren` are undocumented in both schema and description. The description does not compensate at all, so the agent cannot tell what language selection or refresh actually do.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (an occupation or occupational class profile) and enumerates what the profile contains: classification, tasks, skills, and links. It is clearly a single-record fetch rather than a search, though it never explicitly contrasts itself with the sibling search_occupation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this instead of search_occupation, get_role_context, get_tasks, or get_skills, nor any prerequisite or exclusion. An agent must infer from the name alone that this is the single-occupation entry point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_role_contextA
Idempotent

Rollenkontext in einem Aufruf: Zuordnung, Aufgaben (BERUFENET/O*NET), Skills (ESCO), Gehalt (Entgeltatlas) und Marktsignal (offene Stellen laut BA).

NameRequiredDescriptionDefault
ortNoOptional: Ort/Bundesland für Marktsignal und Gehalt
rolleYesRolle/Beruf, z. B. 'Buchhalter'
spracheNo
mit_signalenNoZusätzlich Automatisierungssignale abrufen

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true, idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds useful context beyond that by naming the concrete external sources (BERUFENET/O*NET, ESCO, Entgeltatlas, BA open positions) and noting that the result is an aggregate; it does not discuss latency, fallback, or missing-data behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler; it front-loads the core purpose and then lists the included data domains. Nothing is repeated unnecessarily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, the description need not explain return values. It adequately covers the aggregate nature and data sources, though it omits mention of the sprache parameter and does not clarify signal behavior beyond the schema parameter name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%: rolle, ort, and mit_signalen are documented in the schema. The description does not add parameter-level meaning, and the sprache parameter remains undocumented in both schema and description. Baseline 3 is appropriate given the schema carries most parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource: a consolidated role context returned in one call, enumerating mapping/classification, tasks, skills, salary, and labor-market signal. This distinguishes it from granular siblings such as get_tasks, get_skills, and get_salary, though it relies on the title for an explicit verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in einem Aufruf' implies the tool should be used when the agent wants several role-related data points together instead of calling multiple granular tools. However, no alternatives are named explicitly and no when-not-to-use conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_salaryC
Idempotent

Amtliche Medianentgelte (mit Quartilen) nach Beruf aus dem Entgeltatlas der BA.

NameRequiredDescriptionDefault
kldbYesKldB-2010-Code mit 3–5 Ziffern, z. B. '72213'
alterNogesamt, unter 25, 25 bis unter 55, ab 55
niveauNohelfer, fachkraft, spezialist oder experte
regionNoz. B. 'Deutschland', 'Bayern', 'München'
brancheNoz. B. 'information und kommunikation'
geschlechtNogesamt, männer oder frauen
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful data-source context but does not explain the non-read-only behavior, any refresh/cache side effects, or how 'aktualisieren' affects execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted wording. It efficiently states the data type, statistics included, and source.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, open-world tool with a non-read-only annotation, the description is too sparse. Although an output schema exists and schema coverage is high, the description still lacks sibling routing and does not clarify the side-effect-related 'aktualisieren' parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 86%, so most parameter meaning already comes from the schema. The description adds only 'nach Beruf', implicitly mapping to the kldb parameter, and says nothing about filters such as alter, niveau, region, branche, geschlecht, or the undocumented 'aktualisieren' boolean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource: official median salaries with quartiles by occupation from the BA Entgeltatlas. It is more specific than the name alone and implicitly distinguishes the source from commercial salary siblings like adzuna_salary, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus adzuna_salary or other occupation-related siblings. It also does not state prerequisites, expected use cases, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_skillsC
Idempotent

Skills eines Berufs: ESCO essential/optional plus Häufigkeiten aus gespeicherten BA-Stellenanzeigen.

NameRequiredDescriptionDefault
berufYesFreitext, ESCO-URI, kldb:<code> oder berufenet:<id>
limitNo
spracheNo
relationNoESCO-Relationalle

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds nothing beyond the retrieval subject: no note on where the BA frequency data comes from, how fresh it is, whether results are cached, or what happens when the occupation cannot be resolved. Annotations oddly set readOnlyHint=false despite a 'get_' tool, and the description neither confirms nor resolves that ambiguity, leaving the agent with more questions than answers about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, opening directly on the resource and its two data sources. It is efficient, though it errs toward under-specification rather than excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is legitimately omitted, and the one-line scope statement covers the core query. But for a four-parameter tool with only 50% schema coverage and ambiguous annotations, the description leaves too much unexplained — notably the limit/paging behavior and the meaning of 'sprache'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Coverage is 50%: 'beruf' and 'relation' are documented in the schema, and the description usefully surfaces the essential/optional distinction that maps to the relation enum. However, 'limit' (default 40, max 200) and 'sprache' (nullable, default null) are undocumented in both places, and the description does not explain how free text in 'beruf' is resolved against the ESCO/kldb/berufenet identifier formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource and the operation precisely: skills for an occupation, combining ESCO essential/optional relations with frequencies derived from stored BA job postings. That is specific enough to distinguish it from get_tasks or get_occupation at a glance. What is missing is any explicit naming of the sibling it should be chosen over.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus search_occupation, get_occupation, get_tasks, or get_role_context, all of which sit in adjacent territory. The only implied usage cue is the required 'beruf' lookup key and the mention of ESCO relations. An agent must infer the routing decision entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tasksB
Idempotent

Kanonische Aufgabenliste eines Berufs: O*NET Task Statements (Core/Supplemental) und BERUFENET-Tätigkeiten.

Die Zuordnung läuft über BERUFENET→KldB→ISCO→ESCO→O*NET (Crosswalks müssen importiert sein).

NameRequiredDescriptionDefault
berufYesFreitext, berufenet:<id>, kldb:<code>, onet:<soc> oder ESCO-URI
limitNo
quellenNoStandard: beide
spracheNo
nur_kernNoNur O*NET-Kernaufgaben (Core)

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real value beyond the annotations by disclosing the data-resolution chain (BERUFENET→KldB→ISCO→ESCO→O*NET) and the hard prerequisite that crosswalks be imported. It does not say what happens when crosswalks are missing or when the chain breaks, which is the key failure mode for a resolution-dependent tool. Note readOnlyHint=false while the tool is a read/lookup operation — the description does not contradict this, but does not explain it either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences; the core purpose is front-loaded before the technical resolution chain. The parenthetical about crosswalks is dense but earns its place as a prerequisite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the resolution chain is described. Still missing: behavior on unresolvable occupations, what partial results look like when only one source resolves, and any note on the `sprache` parameter — relevant gaps for a 5-parameter crosswalk-dependent tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 60% schema coverage the schema carries the required `beruf` formats and defaults, so baseline applies. The description implicitly maps to two parameters — `quellen` (onet vs. berufenet are both named) and `nur_kern` ('Core') — but says nothing about `sprache` or `limit`, leaving those purely schema-driven.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (canonical task list for an occupation) and enumerates the two underlying data sources (O*NET task statements Core/Supplemental, BERUFENET activities). An agent can separate it from get_skills or get_occupation on substance, though the description never explicitly contrasts with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use / when-not-to-use statement and no sibling is named as an alternative. The only operational guidance is the prerequisite that crosswalks must be imported, which implies usage conditions without stating them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

graph_neighborsB
Read-onlyIdempotent

Nachbarn eines Knotens im Job-Graphen (Berufe, Aufgaben, Skills, Stellen, Branchen, Regionen ...).

NameRequiredDescriptionDefault
limitNo
knotenYesKnoten-ID (z. B. 'kldb:72213') oder Teil eines Labels
richtungNobeide
kantentypNoz. B. ERFORDERT, TEIL_VON, ENTSPRICHT, AUTOMATISIERBAR_DURCH

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds useful domain context by listing the entity types that exist in the graph, but says nothing about traversal depth, how the limit interacts with node degree, or whether results are ordered or deduplicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the core operation front-loaded and no filler. It is efficient, though its brevity is part of why the guidance gaps exist.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. However, for a graph traversal with direction and edge-type filters, the description leaves the agent without any model of what a traversal returns or how 'richtung' changes the result — a meaningful gap for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: 'knoten' and 'kantentyp' have descriptions, while 'limit' and 'richtung' (the direction enum, arguably the most consequential parameter for a traversal tool) are undocumented in both schema and description. The description's list of node types loosely clarifies what 'knoten' can refer to but adds nothing on direction or edge-type semantics, so it does not compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation on a specific resource: neighbors of a node in the job graph. The parenthetical enumeration of node types (occupations, tasks, skills, jobs, industries, regions) makes the graph's scope concrete. It does not explicitly contrast itself with graph-adjacent siblings like search_knowledge or crosswalk, but the traversal semantics are distinctive enough to identify it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as search_occupation or get_role_context, nor any prerequisites (e.g., needing a known node ID). The agent must infer from the word 'Nachbarn' that this is for graph exploration rather than search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_reference_dataA
Idempotent

Referenzdaten importieren bzw. aktualisieren. Wiederholte Importe ergänzen neue/geänderte Einträge und markieren entfallene (z. B. zwischen O*NET-Releases).

NameRequiredDescriptionDefault
quelleNoURL oder lokaler Pfad (xlsx/csv/zip/Ordner); bei onet optional
datensatzYesonet = O*NET-Berufe und Task Statements; kldb = KldB-2010-Systematik; kldb_isco = Umsteigeschlüssel KldB→ISCO-08; esco_onet = ESCO↔O*NET-Crosswalk
onet_versionNoz. B. '31_0'; Standard: automatisch erkannt
alternativtitelNoO*NET Alternate Titles mit importieren

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false; the description earns credit by explaining why — repeat runs merge and tombstone rather than wipe, which is the key behavioral fact for a write tool. It does not cover auth, permissions, or runtime/network cost despite openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and then the important re-import semantics; nothing is wasted. Minor deduction for the awkward line break and the missing explicit dataset/source hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, rich annotations, and full param coverage, the description only needs to add the import semantics — which it does. It leaves out error/precondition behavior (e.g. what happens if the source URL is unreachable) for an open-world tool, so not quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the enum values and the optional 'quelle' behavior are already fully documented. The description adds no parameter-level guidance beyond the schema, which is the correct baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (import/update) and resource (reference data), and adds that imports are incremental across releases. Sibling tools are all query-oriented, so confusion is unlikely, though it never explicitly distinguishes itself from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence about repeated imports adding new/changed entries and marking removed ones implicitly tells the agent this is safe to re-run and how to refresh data, but there is no explicit when-to-use, when-not-to-use, or prerequisite (e.g. which dataset to pick, source requirements).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_statsA
Read-onlyIdempotent

Überblick über das Gedächtnis: Datensätze je Quelle, Versionen, Graph-Knoten/-Kanten, letzte Abrufe.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description contributes the scope of the aggregates it returns, which is genuine added context, but says nothing about result volume or formatting (though an output schema exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence that lists exactly what the overview contains, with no filler or redundancy. Every clause names a concrete piece of returned data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument, read-only statistics tool with annotations and an output schema, the description covers what is reported. It stops short of explaining how the counts are scoped (all time? per workspace?), which would fully close the loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies. No parameter semantics are needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns an overview of the memory store, enumerating concrete contents (records per source, versions, graph nodes/edges, last retrievals). That is enough to tell it apart from typical search/read siblings, but it never names which sibling to prefer for detail (e.g. get_history, get_changes, graph_neighbors).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement about when to call this versus alternatives such as get_history, get_changes, or graph_neighbors, and no prerequisites or cost context. The agent must infer from the name that this is an inventory/summary call rather than a detail call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_extractionA
Idempotent

Vom Modell oder von Fachexperten extrahierte Aufgaben, Skills und Automatisierungsbewertungen versioniert im Graphen speichern. Liefert Vorschläge passender kanonischer Aufgaben (Deduplizierung).

NameRequiredDescriptionDefault
bezugYesKnoten-ID (z. B. 'stelle:ba:<refnr>', 'berufenet:<id>') oder BA-refnr
quelleNoHerkunft, z. B. 'llm' oder 'experte:<name>'llm
skillsNoExtrahierte Skills
aufgabenNoExtrahierte Aufgaben
automatisierungenNoBewertete Automatisierungsmöglichkeiten je Aufgabe

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioural context beyond them: writes are versioned in the graph, and the call returns canonical-task suggestions used for deduplication. It does not say how conflicts or duplicates are merged, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler. The write action and its versioned nature come first, and the return-value side effect follows. Every clause carries information an agent cannot get from the structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile; the description supplies the remaining essentials (what is stored, that it is versioned, provenance via quelle, dedup suggestions). A brief note on how re-recording the same extraction is handled (beyond idempotentHint) would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents bezug, quelle, skills, aufgaben and automatisierungen in detail. The description adds no extra semantics about parameter formats or interactions (e.g. how a kanonisch ID affects deduplication). Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (versioniert im Graphen speichern) and enumerates the exact resources written: Aufgaben, Skills, Automatisierungsbewertungen. It also names a secondary effect (returning canonical task suggestions for deduplication), which makes the tool's role distinct. It does not explicitly contrast itself with near neighbours like remember or import_reference_data, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'vom Modell oder von Fachexperten extrahiert' implies the usage context (recording an extraction result, with the quelle parameter distinguishing LLM vs expert provenance), but there is no explicit when-to-use/when-not statement and no pointer to alternatives such as remember or import_reference_data. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rememberA
Idempotent

Eigene Daten (interne Rollenprofile, Expertenfeedback) versioniert im Gedächtnis speichern oder ergänzen.

NameRequiredDescriptionDefault
artYesArt des Eintrags, z. B. 'rollenprofil', 'feedback', 'notiz'
datenYesBeliebige strukturierte Daten
titelNo
quelleNoHerkunft, z. B. 'eigene', 'kunde:<name>', 'experte:<name>'eigene
schluesselYesEindeutiger Schlüssel innerhalb der Art

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a non-read-only, non-destructive, idempotent, closed-world write operation, so the description's bar is lower. It adds that storage is 'versioniert' and can 'speichern oder ergänzen', but it does not explain versioning semantics, overwrite/append behavior, permissions, or how repeated writes are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, stating the core action before the parenthetical examples. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists and the annotations richly describe safety and idempotency, the description does not need to explain return values or the safety profile. It gives enough purpose for a write/upsert tool, though it omits sibling-routing guidance and precise versioning/upsert semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so most parameter meaning is already supplied by the schema. The description does not add format, constraints, or semantics for parameters such as art, schluessel, daten, or quelle; the role-profile/feedback examples only loosely suggest possible 'art' values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (versioned storing or supplementing in memory) and a specific resource (own data, internal role profiles, expert feedback). It is much clearer than the bare name 'remember', but it does not explicitly distinguish itself from sibling knowledge-ingestion tools such as record_extraction or import_reference_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples 'interne Rollenprofile' and 'Expertenfeedback' imply that this tool is for capturing internal/personal knowledge, which gives some usage context. However, it never states when to use it instead of sibling tools like search_knowledge, record_extraction, or import_reference_data, and it gives no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_arbeitnowA
Idempotent

Stellen von Arbeitnow (kostenlos, ohne Schlüssel; aggregiert ATS-Feeds wie Greenhouse, Personio, Recruitee).

Gefiltert wird lokal über die abgerufenen Seiten; alle abgerufenen Stellen werden gespeichert.

NameRequiredDescriptionDefault
ortNoOrt, z. B. 'Berlin'
wasNoStichwörter (alle müssen vorkommen), z. B. 'python backend'
seitenNoSeiten à bis zu 100 Stellen
remote_onlyNoNur Remote-Stellen
aktualisierenNo
visa_sponsorshipNoNur Stellen mit Visa-Sponsoring

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds important context beyond that: filtering is local over fetched pages, and all fetched jobs are stored, which explains the non-read-only side effect and the fetch-then-filter mechanics. It does not mention rate limits or response shape, but explains the key behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the source and access model, then the filtering/storage behavior. The parenthetical is information-dense but not wasteful, and no sentence is superfluous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained; annotations cover the safety profile; the description adds the storage side effect and local filtering caveat. The main remaining gap is routing guidance versus sibling search tools and the meaning of the aktualisieren parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (83%), so the schema already documents most parameters such as ort, was, seiten, remote_only, and visa_sponsorship. The description adds the meaningful caveat that filtering is local over fetched pages, which clarifies how seiten interacts with filters, but it does not explain the undocumented aktualisieren flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (Stellen von Arbeitnow) and source behavior (aggregiert ATS-Feeds wie Greenhouse, Personio, Recruitee). It is clearly a job search against a named aggregator, though it does not explicitly contrast itself with the sibling search_jobs tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful context — free, no key, ATS aggregation — which implies when this source is attractive, but it never states when to use this instead of search_jobs or get_ats_jobs, nor any exclusions. Usage is implied rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jobsA
Idempotent

Stellensuche in der Jobbörse der Bundesagentur für Arbeit (größter Stellenbestand in Deutschland).

Speichert jede Anzeige im Gedächtnis und meldet im Delta neue, geänderte und nicht mehr enthaltene Anzeigen gegenüber der letzten identischen Suche. Details mit get_job_details(refnr).

NameRequiredDescriptionDefault
woNoOrt oder PLZ, z. B. 'Berlin'
wasNoJobtitel/Stichwort, z. B. 'Buchhalter'
seitenNoAnzahl Ergebnisseiten
groesseNoTreffer pro Seite
umkreisNoUmkreis in km um 'wo'
befristungNobefristet oder unbefristet
berufsfeldNoBerufsfeld, z. B. 'Informatik'
zeitarbeitNoZeitarbeitsfirmen einbeziehen (Standard der BA: ja)
angebotsartNoarbeit, ausbildung, praktikum oder selbstaendigkeitarbeit
arbeitgeberNoArbeitgebername
arbeitszeitNovollzeit, teilzeit, schicht, homeoffice, minijob
aktualisierenNoFrisch abrufen statt Speicher zu nutzen
veroeffentlicht_seitNoNur Stellen der letzten N Tage

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the non-obvious side effect that every listing is persisted to memory and that repeat searches return a comparison against the previous identical search — this is precisely what explains readOnlyHint=false on a search tool. Combined with the 'aktualisieren' escape hatch for a fresh fetch instead of cache, the agent understands the stateful behavior annotations alone could not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: what it searches, how it behaves across calls, and where details live. Front-loaded with the source, zero filler, nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, zero-required search tool with an output schema and full schema coverage, the description covers the remaining gaps an agent would trip on: persistence, delta semantics, the refresh flag, and the handoff to get_job_details. Return-value shape is delegated to the output schema as expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds meaning the schema cannot: that results are cached per identical query, that deltas are reported relative to that query, and that refnr (an output field) is the key for get_job_details — useful cross-parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Stellensuche in der Jobbörse der Bundesagentur für Arbeit') and pins down the source, which is exactly what separates it from siblings like search_arbeitnow and get_ats_jobs. It also routes detail lookups to get_job_details(refnr), so an agent knows the division of labor immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that repeated identical searches yield a delta of new/changed/removed listings and that details belong to get_job_details. It stops short of stating when to prefer this over search_arbeitnow or the other job siblings, so the choice across sources is still inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_knowledgeB
Read-onlyIdempotent

Offline-Suche im Gedächtnis (auch zur Zuordnung freier Aufgabentexte zu kanonischen Aufgaben).

NameRequiredDescriptionDefault
artNoz. B. 'stelle', 'aufgabe', 'beruf', 'kldb', 'signal'
limitNo
quelleNoz. B. 'ba_jobsuche', 'onet', 'berufenet', 'ats'
suchbegriffYesVolltextsuche über alles Gespeicherte

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, destructiveHint=false, so the safety profile is fully covered. The description's 'Offline' wording is consistent with openWorldHint=false but adds little beyond it, and says nothing about result ordering or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly packed sentence with the primary purpose front-loaded. It is efficiently sized, though the heavy parenthetical makes the alternative use case read as an afterthought rather than structured guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and annotations cover safety. However, for a 4-parameter search tool with an untyped filter ('art', 'quelle') and no pagination/limit note, the description leaves the agent to infer filtering behavior entirely from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%: 'art', 'quelle' and 'suchbegriff' carry schema-level examples and the full-text semantics. The description adds no parameter meaning beyond that, and 'limit' is undocumented in both places, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Offline-Suche im Gedächtnis') and adds a concrete secondary use case (mapping free task texts to canonical tasks). It does not explicitly distinguish itself from siblings like search_jobs or search_occupation, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical gives one implied trigger (canonicalizing free-text tasks) and 'Offline' hints at local-only scope, but there is no explicit when-to-use vs. alternatives (e.g. search_occupation, remember) guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_occupationB
Idempotent

Berufe finden: BERUFENET (mit KldB-Zuordnung), ESCO-Berufe, KldB-Systematik und O*NET-Titel.

NameRequiredDescriptionDefault
limitNo
queryYesBerufsbezeichnung, z. B. 'Buchhalter'
quellenNoStandard: alle
spracheNoSprache für ESCO, Standard 'de'
kldb_codeNoOptional: KldB-2010-Code zum Nachschlagen
aktualisierenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (destructiveHint=false, idempotentHint=true, openWorldHint=true), and the description's source list is consistent with the openWorld flag. However, it never explains that readOnlyHint=false despite being a 'find' operation — plausibly because the 'aktualisieren' (refresh) parameter writes to a cache — and discloses nothing about cost, latency, or refresh semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence fragment with zero padding — efficient, but so terse that it stops short of carrying the behavioral and routing information the description should provide. No waste, yet also little substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, an output schema, and annotations already present, the description needn't explain return values or safety. It is still incomplete on the two highest-risk gaps: no when-to-use guidance against a crowded sibling set and no explanation of the caching/refresh behavior implied by readOnlyHint=false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so most parameters are documented structurally. The description's enumeration of the four sources maps directly onto the 'quellen' enum and thereby clarifies that parameter, but it adds no meaning for 'sprache', 'kldb_code', 'limit', or 'aktualisieren', whose semantics (especially the refresh flag) remain opaque outside the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ("Berufe finden") plus the resource and enumerates the four underlying sources (BERUFENET, ESCO, KldB, O*NET), so an agent knows this is a multi-source occupation lookup. It does not explicitly contrast with siblings like get_occupation or search_jobs, but the verb 'finden' vs 'get' carries implicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus get_occupation, search_jobs, crosswalk, or get_role_context, all of which live in the same space. The source list hints at coverage but gives no conditions or exclusions, leaving routing entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 24 tool updatesv0.1.0
    • First observedadzuna_salary
    • First observedcheck_sources
    • First observedcommoncrawl_lookup
    • First observedcrosswalk
    • First observedexport_knowledge
    • First observedfind_automation_signals
    • First observedget_ats_jobs
    • First observedget_changes
    • First observedget_history
    • First observedget_job_details
    • First observedget_occupation
    • First observedget_role_context
    • First observedget_salary
    • First observedget_skills
    • First observedget_tasks
    • First observedgraph_neighbors
    • First observedimport_reference_data
    • First observedknowledge_stats
    • First observedrecord_extraction
    • First observedremember
    • First observedsearch_arbeitnow
    • First observedsearch_jobs
    • First observedsearch_knowledge
    • First observedsearch_occupation

TDQS

B3.4/5.0

Scored across 24 tools

Disambiguation4/5

Tools mostly target distinct sources or actions: search_jobs (BA), search_arbeitnow, and get_ats_jobs are separated by source, and get_salary (official median) vs adzuna_salary (histogram) is explained in descriptions. Slight overlap remains between search_knowledge and get_changes/get_history, and between find_automation_signals and commoncrawl_lookup, but boundaries are mostly clear.

Naming Consistency4/5

Dominant verb_noun snake_case pattern (search_jobs, get_job_details, import_reference_data, export_knowledge) is applied consistently. Minor deviations exist with noun-first/source-prefixed names (adzuna_salary, commoncrawl_lookup, graph_neighbors, knowledge_stats) and single verbs (crosswalk, remember), but the convention stays readable.

Tool Count3/5

24 tools is heavy and sits in the borderline range, though the server spans several sub-domains (job search, occupation/task/skill data, salary, knowledge graph, change tracking, export). Each tool maps to a real operation, but the surface is large enough to burden tool selection.

Completeness4/5

Coverage is broad: multi-source job search and details, occupation/task/skill lookups, salary data, crosswalks, versioned memory storage, change/history tracking, graph traversal, export, and source health checks. Minor gaps like no explicit delete/forget tool for stored records and no direct occupation-to-job matching helper, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to prepare German freedom-of-information requests on FragDenStaat.de: identify the responsible authority with evidence, the applicable act and deadline, track requests, collect replies and attachments, and draft new requests locally before anything is sent.
    15
    26 PyPI
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to query German federal and state statutes, court decisions, and citation graphs, grounding citations, retrieving provision texts and versions, and understanding coverage limits through read-only tools.
    9
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to browse recent job postings from a keyless European (Germany-heavy) job board, keyword-search them client-side by title, company or tag, and fetch full HTML descriptions for individual listings, with pagination and remote-only filtering.
    272 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to search, filter, and apply across nine job boards in eight countries — including ~4,700 salary-transparent tech postings plus ~50,000 Swiss and ~9,000 Singapore IT listings — with salary, remote, tech, and date filters. It also tracks applications locally so already-applied jobs are returned as data rather than errors.
    -