Search / de.stellenonline/jobsearch
stellenonline.de Jobsuche
R0· no sign-inRead-only search across current job listings on stellenonline.de (German job portal).
v1.0.0 · active · website · descriptor JSON · versions
Search / de.stellenonline/jobsearch
R0· no sign-inRead-only search across current job listings on stellenonline.de (German job portal).
v1.0.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"jobsearch": {
"type": "http",
"url": "https://www.stellenonline.de/mcp"
}
}
}claude mcp add --transport http jobsearch https://www.stellenonline.de/mcp[mcp_servers.jobsearch]
url = "https://www.stellenonline.de/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jobsearch": {
"type": "remote",
"url": "https://www.stellenonline.de/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"jobsearch": {
"type": "http",
"url": "https://www.stellenonline.de/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=jobsearch&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vd3d3LnN0ZWxsZW5vbmxpbmUuZGUvbWNwIn0%3D"
}{
"servers": {
"jobsearch": {
"type": "http",
"url": "https://www.stellenonline.de/mcp"
}
}
}{
"mcpServers": {
"jobsearch": {
"httpUrl": "https://www.stellenonline.de/mcp"
}
}
}extensions:
"jobsearch":
enabled: true
name: "jobsearch"
type: streamable_http
uri: "https://www.stellenonline.de/mcp"
timeout: 300
protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length2 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations3 of 3 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 1,680 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes3 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageget_total_jobschangedtitle, annotationscount_jobschangedtitle, annotationssearch_jobschangedtitle, annotationsFull history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-100% +updated-11d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://www.stellenonline.de/mcp streamable-http | none | yes | 100% | 683 ms | 2025-11-25 | 2026-10-19 |
count_jobsread-only | 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} |
get_total_jobsread-only | 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} |
search_jobsread-only | 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} |
Schemas: list_tools.
{
"name": "de.stellenonline/jobsearch",
"title": "stellenonline.de Jobsuche",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://www.stellenonline.de/mcp",
"type": "streamable-http"
}
],
"version": "1.0.0",
"websiteUrl": "https://www.stellenonline.de",
"description": "Read-only search across current job listings on stellenonline.de (German job portal)."
}