WorkMCP
Uses the Algolia search API to query Hacker News for automation signals related to roles, tasks, and skills.
Retrieves job postings directly from public Greenhouse career-site feeds, including structured job-board metadata such as department, seniority, and employment type where available.
Exports the job knowledge graph as Neo4j Cypher so it can be loaded into Neo4j.
Retrieves job postings directly from public Personio career-site feeds, including structured job-board metadata such as department, seniority, and employment type where available.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WorkMCPget role context for Buchhalter in Berlin including salary and skills"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_extractionversioniert 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_sourcesprü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 workmcpMit 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 workmcpAus einem lokalen Klon:
git clone https://github.com/GodModeAI2025/WorkMCP.gitclaude mcp add workmcp -- uv --directory /pfad/zu/WorkMCP run workmcpZentral ü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 8000claude mcp add --transport http workmcp http://<server>:8000/mcpDer 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 .envdocker compose up -d --buildArchivy: http://localhost:5000 (Login aus
.env). Die Doku liegt im Ordner WorkMCP.WorkMCP:
http://localhost:8000/mcp, in Claude Code mitclaude 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
.envSpiegel-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:
check_sourcesprüft, ob alle Quellen erreichbar sind.import_reference_data('onet')lädt die O*NET-Aufgaben einmalig, die Version wird automatisch erkannt.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 |
Geänderter Datensatz | neue Version, alte Version bleibt erhalten, feldgenaues Diff ( |
Unveränderter Datensatz | nur „zuletzt gesehen“ und der Abrufzähler werden aktualisiert |
Anzeige nicht mehr abrufbar (404) | Status |
Wiederholte Anfrage innerhalb der TTL | Antwort aus dem Speicher ( |
Quelle nicht erreichbar | letzter gespeicherter Stand mit Warnung |
| frischer Abruf; das Delta zeigt |
Offline-Modus ( | 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 |
|
Berufe |
|
Gehalt |
|
Automatisierung |
|
Gedächtnis |
|
Daten und Betrieb |
|
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 |
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:
KldB-Systematik: BA-Statistik → KldB 2010 Fassung 2020 → Systematik-Verzeichnisse.
Umsteigeschlüssel KldB→ISCO-08: BA-Statistik → Arbeitsmittel.
ESCO↔O*NET: ESCO „Other crosswalks“ oder O*NET Crosswalk Files.
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 |
|
| Wissensdatenbank (SQLite) |
|
| nur Gedächtnis, keine Netzzugriffe |
| 6 / 24 / 24 | Gültigkeitsdauer für Stellen, Details und Signale |
| 30 | Gültigkeitsdauer für Berufe und Referenzdaten |
|
| Sprache für ESCO |
| – | z. B. |
| automatisch | z. B. |
| – | aktiviert Adzuna (kostenloser Key) |
|
| Kontaktfelder aus Stellenanzeigen speichern |
| – | Standardquellen für den Import |
| – | Archivy-Datenverzeichnis als Standardziel von |
| – | erlaubte Host-Header für streamable-http, kommagetrennt (wie |
| siehe | 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
/docsgedacht.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_sourcesausfü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_arbeitnowfiltert lokal, weil die API keine Suchparameter für Begriff und Ort hat.
Entwicklung
uv sync --extra devuv run pytestuv run ruff check src tests && uv run mypy srcLizenz
MIT, siehe LICENSE. Die abgerufenen Daten unterliegen den Bedingungen ihrer jeweiligen Quellen.
Available Tools
24 toolsadzuna_salaryAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| was | Yes | Jobtitel/Stichwort, z. B. 'data engineer' | |
| monate | No | ||
| standort | No | Standortpfad wie bei Adzuna, z. B. ['Deutschland', 'Berlin'] | |
| kategorie | No | Adzuna-Kategorie-Tag für den Gehaltsverlauf, z. B. 'it-jobs' | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_sourcesAIdempotent
Erreichbarkeit aller Datenquellen von diesem Rechner aus prüfen (HTTP-Status und Latenz je Quelle).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_lookupAIdempotent
Common-Crawl-Index nach archivierten Seiten (z. B. Karriereseiten) durchsuchen und optional Text laden.
| Name | Required | Description | Default |
|---|---|---|---|
| crawl | No | Crawl-ID wie 'CC-MAIN-2026-30', Standard: neuester | |
| limit | No | ||
| url_muster | Yes | URL-Muster für den Index, z. B. 'example.com/karriere/*' | |
| text_abrufen | No | Für die ersten N Treffer den Seitentext laden |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
crosswalkAIdempotent
Übersetzt Berufscodes zwischen KldB 2010, ISCO-08, ESCO, O*NET und BERUFENET (auch über mehrere Stufen).
| Name | Required | Description | Default |
|---|---|---|---|
| von | Yes | Ausgangssystem | |
| code | Yes | Code im Ausgangssystem (KldB 5-stellig, ISCO 4-stellig, ESCO-URI, O*NET-SOC, BERUFENET-ID) | |
| nach | Yes | Zielsystem | |
| sprache | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_knowledgeBIdempotent
Graph exportieren: JSON, Neo4j-Cypher, GraphML oder als Archivy-Wissensdatenbank (Markdown-Notizen).
| Name | Required | Description | Default |
|---|---|---|---|
| pfad | No | Zieldatei bzw. -ordner (Standard neben der Datenbank) | |
| format | No | cypher = Neo4j, graphml = NetworkX/Gephi, archivy = Notizen für Archivy | json |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_signalsCIdempotent
Automatisierungssignale aus Hacker News (Berichte, wie Tätigkeiten automatisiert wurden).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| aufgabe_id | No | Optional: Aufgaben-Knoten, der mit den Signalen verknüpft wird | |
| suchbegriff | Yes | Englisch funktioniert am besten, z. B. 'automated invoice processing' | |
| aktualisieren | No | ||
| zeitraum_tage | No | Nur Beiträge der letzten N Tage | |
| nur_kommentare | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_jobsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ats | No | ATS, falls bekannt; sonst wird automatisch erkannt | |
| ort | No | Filter auf Standort | |
| max_jobs | No | ||
| suchbegriff | No | Filter auf Titel/Abteilung/Beschreibung | |
| company_slug | Yes | Firmenkennung (z. B. 'personio') oder Karriereseiten-URL (z. B. 'https://jobs.lever.co/palantir', bei Workday zwingend die URL) | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_changesCRead-onlyIdempotent
Änderungsprotokoll des Gedächtnisses: was ist neu, geändert, verschwunden oder wieder aufgetaucht.
| Name | Required | Description | Default |
|---|---|---|---|
| art | No | ||
| seit | No | z. B. '24h', '7d', '2026-10-01' | |
| limit | No | ||
| quelle | No | ||
| ereignis | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_historyBRead-onlyIdempotent
Alle gespeicherten Versionen eines Datensatzes mit feldgenauen Änderungen.
| Name | Required | Description | Default |
|---|---|---|---|
| art | Yes | z. B. 'stelle_detail' | |
| quelle | Yes | z. B. 'ba_jobsuche' | |
| schluessel | Yes | z. B. die refnr |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_detailsAIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| refnr | Yes | Referenznummer aus search_jobs, z. B. '10000-1184867112-S' | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_occupationBIdempotent
Profil eines Berufs bzw. einer Berufsklasse mit Klassifikation, Aufgaben, Skills und Verknüpfungen.
| Name | Required | Description | Default |
|---|---|---|---|
| sprache | No | ||
| beruf_id | Yes | berufenet:<id>, kldb:<code>, isco:<code>, onet:<soc> oder ESCO-URI | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_contextAIdempotent
Rollenkontext in einem Aufruf: Zuordnung, Aufgaben (BERUFENET/O*NET), Skills (ESCO), Gehalt (Entgeltatlas) und Marktsignal (offene Stellen laut BA).
| Name | Required | Description | Default |
|---|---|---|---|
| ort | No | Optional: Ort/Bundesland für Marktsignal und Gehalt | |
| rolle | Yes | Rolle/Beruf, z. B. 'Buchhalter' | |
| sprache | No | ||
| mit_signalen | No | Zusätzlich Automatisierungssignale abrufen |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_salaryCIdempotent
Amtliche Medianentgelte (mit Quartilen) nach Beruf aus dem Entgeltatlas der BA.
| Name | Required | Description | Default |
|---|---|---|---|
| kldb | Yes | KldB-2010-Code mit 3–5 Ziffern, z. B. '72213' | |
| alter | No | gesamt, unter 25, 25 bis unter 55, ab 55 | |
| niveau | No | helfer, fachkraft, spezialist oder experte | |
| region | No | z. B. 'Deutschland', 'Bayern', 'München' | |
| branche | No | z. B. 'information und kommunikation' | |
| geschlecht | No | gesamt, männer oder frauen | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_skillsCIdempotent
Skills eines Berufs: ESCO essential/optional plus Häufigkeiten aus gespeicherten BA-Stellenanzeigen.
| Name | Required | Description | Default |
|---|---|---|---|
| beruf | Yes | Freitext, ESCO-URI, kldb:<code> oder berufenet:<id> | |
| limit | No | ||
| sprache | No | ||
| relation | No | ESCO-Relation | alle |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_tasksBIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| beruf | Yes | Freitext, berufenet:<id>, kldb:<code>, onet:<soc> oder ESCO-URI | |
| limit | No | ||
| quellen | No | Standard: beide | |
| sprache | No | ||
| nur_kern | No | Nur O*NET-Kernaufgaben (Core) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_neighborsBRead-onlyIdempotent
Nachbarn eines Knotens im Job-Graphen (Berufe, Aufgaben, Skills, Stellen, Branchen, Regionen ...).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| knoten | Yes | Knoten-ID (z. B. 'kldb:72213') oder Teil eines Labels | |
| richtung | No | beide | |
| kantentyp | No | z. B. ERFORDERT, TEIL_VON, ENTSPRICHT, AUTOMATISIERBAR_DURCH |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_dataAIdempotent
Referenzdaten importieren bzw. aktualisieren. Wiederholte Importe ergänzen neue/geänderte Einträge und markieren entfallene (z. B. zwischen O*NET-Releases).
| Name | Required | Description | Default |
|---|---|---|---|
| quelle | No | URL oder lokaler Pfad (xlsx/csv/zip/Ordner); bei onet optional | |
| datensatz | Yes | onet = O*NET-Berufe und Task Statements; kldb = KldB-2010-Systematik; kldb_isco = Umsteigeschlüssel KldB→ISCO-08; esco_onet = ESCO↔O*NET-Crosswalk | |
| onet_version | No | z. B. '31_0'; Standard: automatisch erkannt | |
| alternativtitel | No | O*NET Alternate Titles mit importieren |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotent
Überblick über das Gedächtnis: Datensätze je Quelle, Versionen, Graph-Knoten/-Kanten, letzte Abrufe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_extractionAIdempotent
Vom Modell oder von Fachexperten extrahierte Aufgaben, Skills und Automatisierungsbewertungen versioniert im Graphen speichern. Liefert Vorschläge passender kanonischer Aufgaben (Deduplizierung).
| Name | Required | Description | Default |
|---|---|---|---|
| bezug | Yes | Knoten-ID (z. B. 'stelle:ba:<refnr>', 'berufenet:<id>') oder BA-refnr | |
| quelle | No | Herkunft, z. B. 'llm' oder 'experte:<name>' | llm |
| skills | No | Extrahierte Skills | |
| aufgaben | No | Extrahierte Aufgaben | |
| automatisierungen | No | Bewertete Automatisierungsmöglichkeiten je Aufgabe |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
rememberAIdempotent
Eigene Daten (interne Rollenprofile, Expertenfeedback) versioniert im Gedächtnis speichern oder ergänzen.
| Name | Required | Description | Default |
|---|---|---|---|
| art | Yes | Art des Eintrags, z. B. 'rollenprofil', 'feedback', 'notiz' | |
| daten | Yes | Beliebige strukturierte Daten | |
| titel | No | ||
| quelle | No | Herkunft, z. B. 'eigene', 'kunde:<name>', 'experte:<name>' | eigene |
| schluessel | Yes | Eindeutiger Schlüssel innerhalb der Art |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_arbeitnowAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ort | No | Ort, z. B. 'Berlin' | |
| was | No | Stichwörter (alle müssen vorkommen), z. B. 'python backend' | |
| seiten | No | Seiten à bis zu 100 Stellen | |
| remote_only | No | Nur Remote-Stellen | |
| aktualisieren | No | ||
| visa_sponsorship | No | Nur Stellen mit Visa-Sponsoring |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_jobsAIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| wo | No | Ort oder PLZ, z. B. 'Berlin' | |
| was | No | Jobtitel/Stichwort, z. B. 'Buchhalter' | |
| seiten | No | Anzahl Ergebnisseiten | |
| groesse | No | Treffer pro Seite | |
| umkreis | No | Umkreis in km um 'wo' | |
| befristung | No | befristet oder unbefristet | |
| berufsfeld | No | Berufsfeld, z. B. 'Informatik' | |
| zeitarbeit | No | Zeitarbeitsfirmen einbeziehen (Standard der BA: ja) | |
| angebotsart | No | arbeit, ausbildung, praktikum oder selbstaendigkeit | arbeit |
| arbeitgeber | No | Arbeitgebername | |
| arbeitszeit | No | vollzeit, teilzeit, schicht, homeoffice, minijob | |
| aktualisieren | No | Frisch abrufen statt Speicher zu nutzen | |
| veroeffentlicht_seit | No | Nur Stellen der letzten N Tage |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_knowledgeBRead-onlyIdempotent
Offline-Suche im Gedächtnis (auch zur Zuordnung freier Aufgabentexte zu kanonischen Aufgaben).
| Name | Required | Description | Default |
|---|---|---|---|
| art | No | z. B. 'stelle', 'aufgabe', 'beruf', 'kldb', 'signal' | |
| limit | No | ||
| quelle | No | z. B. 'ba_jobsuche', 'onet', 'berufenet', 'ats' | |
| suchbegriff | Yes | Volltextsuche über alles Gespeicherte |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_occupationBIdempotent
Berufe finden: BERUFENET (mit KldB-Zuordnung), ESCO-Berufe, KldB-Systematik und O*NET-Titel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Berufsbezeichnung, z. B. 'Buchhalter' | |
| quellen | No | Standard: alle | |
| sprache | No | Sprache für ESCO, Standard 'de' | |
| kldb_code | No | Optional: KldB-2010-Code zum Nachschlagen | |
| aktualisieren | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.1.0- First observed
adzuna_salary - First observed
check_sources - First observed
commoncrawl_lookup - First observed
crosswalk - First observed
export_knowledge - First observed
find_automation_signals - First observed
get_ats_jobs - First observed
get_changes - First observed
get_history - First observed
get_job_details - First observed
get_occupation - First observed
get_role_context - First observed
get_salary - First observed
get_skills - First observed
get_tasks - First observed
graph_neighbors - First observed
import_reference_data - First observed
knowledge_stats - First observed
record_extraction - First observed
remember - First observed
search_arbeitnow - First observed
search_jobs - First observed
search_knowledge - First observed
search_occupation
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
Jobs, ads, SEO, keywords, YouTube and AliExpress data for AI agents. Runs on Apify.
Company brain for AI agents — temporal knowledge graph search, exploration, and durable memory.
Public job postings and market data for France, Germany, Spain and Latin America, as JSON.
Intelligent context infrastructure for AI teams: knowledge graph, sessions, tasks, documents.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables 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.1526 PyPIMIT
- AlicenseAqualityDmaintenanceEnables 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.91AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- FlicenseNot gradedqualityAmaintenanceEnables 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.-