stellenonline.de Jobsuche
Read-only search across current job listings on stellenonline.de (German job portal).
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"jobsearch": {
"url": "https://www.stellenonline.de/mcp"
}
}
}Puntos de conexión remotos
https://www.stellenonline.de/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (3)
🟢search_jobs(q, location, radius, working_plan, job_offer_type, ...)
Search for jobs in the STON job database. Returns structured JSON. Call this tool ONCE per user request, then present the returned `jobs` list to the user in whatever format fits (markdown list, table, plain text). Always include the apply link from the `url` field for each job. If `has_more` is true, mention `total_found` and ask whether to fetch more. NEVER call this tool multiple times in a row to collect all pages automatically. To count results without fetching full job data, prefer `count_jobs`. If a filter you need isn't on `count_jobs`, call this tool with `rows=1` and read `total_found` (the count is server-side and independent of `rows`). Args: q: Search keywords (German job market — examples: "Softwareentwickler Python", "Krankenpfleger") location: City, region or area, e.g. "München", "Ravensburg", "Bodensee", "Baden-Württemberg" radius: Search radius in km around the location, e.g. 25, 50 (default: server setting) working_plan: One of: "Vollzeit", "Teilzeit", "Minijob", "Homeoffice" (comma-separated for multiple) job_offer_type: One of: "Arbeitsplatz", "Ausbildung", "Praktikum", "Freiberuflich", "Werkstudent", "Trainee", "Duales-Studium" (comma-separated for multiple) min_salary: Minimum ANNUAL gross salary in EUR (optional), e.g. 60000. Filtered server-side. Jobs advertised per month/hour are normalised to a yearly figure first, so e.g. 5000/month matches min_salary=60000. Salary ranges match on OVERLAP, not containment: a job advertised as 30.000–45.000 € IS returned at min_salary=40000 (the ranges overlap), and is NOT returned at max_salary=25000. max_salary: Maximum annual gross salary in EUR (optional, same overlap semantics) has_salary: If True, return only jobs that advertise a salary at all (any amount); if False, only jobs without one. Leave unset to ignore. sort: "relevance" (default) or "date" (newest first) page: Page number starting at 1 rows: Results per page, 1-50 (default: 25) Returns: On success: { "total_found": int, "page": int, "rows": int, "total_pages": int, "has_more": bool, "salary_filter": null | {"min_salary": float|null, "max_salary": float|null}, "jobs": [ { "id": str, "title": str, "company_name": str, "location": str, "date": str (ISO-8601), "url": str, "salary": null | {"annual_eur": float, "monthly_eur": float, "currency": str, "min_annual_eur"?: float, "max_annual_eur"?: float, "data_quality"?: "suspect"} # implausibly high → likely a data error }, ... ] } On error: {"error": str}
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"radius": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"working_plan": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"job_offer_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"min_salary": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"max_salary": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"has_salary": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null
},
"sort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"page": {
"default": 1,
"type": "integer"
},
"rows": {
"default": 25,
"type": "integer"
}
}
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}🟢count_jobs(q, location, working_plan, job_offer_type, min_salary, ...)
Count how many jobs match a search without returning full results. Returns structured JSON. Use this when the user asks "how many jobs..." (in any language), including salary-constrained counts like "how many jobs pay at least 60k?" or "how many jobs advertise a salary at all?" (use has_salary=True). Args: q: Search keywords, e.g. "Softwareentwickler Python" location: City or region, e.g. "München", "Bodensee" working_plan: "Vollzeit", "Teilzeit", "Homeoffice", or "Minijob" job_offer_type: "Arbeitsplatz", "Ausbildung", "Praktikum", "Freiberuflich", "Werkstudent", "Trainee", "Duales-Studium" min_salary: Minimum ANNUAL gross salary in EUR (optional), e.g. 60000. Filtered server-side with the same semantics as search_jobs: monthly/hourly amounts are normalised to a yearly figure first, and salary ranges match on overlap. A job with range 30.000–45.000 € is counted at min_salary=40000 (ranges overlap). max_salary: Maximum annual gross salary in EUR (optional, same semantics). A job with range 30.000–45.000 € is NOT counted at max_salary=25000. has_salary: If True, count only jobs that advertise a salary at all (regardless of amount). If False, count only jobs WITHOUT a salary. Leave unset to ignore. Use this for "how many jobs have a salary?"; combine with min_salary/max_salary as needed. Returns: On success: {"count": int, "filters": {"q": str|null, "location": str|null, "working_plan": str|null, "job_offer_type": str|null, "min_salary": float|null, "max_salary": float|null, "has_salary": bool|null}} On error: {"error": str}
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"working_plan": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"job_offer_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"min_salary": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"max_salary": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"has_salary": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null
}
}
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}🟢get_total_jobs
Get the total number of jobs in the database (no filters). Returns structured JSON. Returns the complete job count. Use this to check the overall index size. Returns: On success: {"total_jobs": int} On error: {"error": str}
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}Comunidad
Evidencia