Koskamo

Jobroulette MCP

An MCP server that allows AI assistants to find jobs in Germany, Austria, and Switzerland that fit the user's resume and send job applications by email on the user's behalf.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Jobroulette MCP logo, by JobrouletteVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Jobroulette
You need:sign-in with OAuth
MCP endpoint (Streamable HTTP)
https://mcp.jobroulette.de/mcp
Vendor documentation

What you can do with it

  • Find jobs matching your resume
  • Send job applications by email
  • Connect AI assistants like Claude or Cursor

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
jobroulette 0.1.0
MCP protocol
2025-06-18
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Jobroulette finds jobs in Germany, Austria and Switzerland that fit the user’s resume (Lebenslauf) and wishes, and helps them apply (Bewerbung): with a link to the employer’s form, or by email on their behalf where accepted. Use it when the user wants jobs (Stellen) in Germany, Austria or Switzerland that match their resume, wants to apply for one of them, or asks about being introduced to an employer (Vermittlung). Start here: 1. Ask for the resume and call upload_resume with freitext or pdf. 2. Show the user the fields that were read, let them correct them, then call upload_resume with felder: that saves the resume and selects five job matches. 3. get_job_matches shows them; refresh_job_matches brings new ones once a day, only when asked. To apply: draft_job_application, show the draft, and send_job_application only on the user’s explicit wish. list_job_applications shows what was sent. list_employer_introductions shows offers to present the user to an employer. The user accepts one only on the Jobroulette website, on the page each offer names; decline_employer_introduction declines on their own decision and withdraw_employer_introduction takes a consent back.

Tools

9 advertised

upload_resume — Read and save your resume (CV, Lebenslauf)
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use this when the user is looking for a job (Stelle) and shares their resume, CV or Lebenslauf, or wants to change the one on file. Two steps with the same tool. First call it with freitext (the resume as text), pdf (a PDF, Base64) or datei (an attached PDF): the resume is only **read**, the extracted fields come back under `entwurf`, and nothing is saved yet — except that a PDF is kept as the user’s one resume document and replaces the previous one. Show the user these fields and let them correct whatever was misread. Then call this tool again with felder: only that saves the resume, and the first time it also selects five job matches — call get_job_matches to show them. Never save fields the user has not seen. Each user has exactly one resume; saving again updates it and brings no new job matches — those come only from refresh_job_matches. Jobroulette covers IT, sales, operations, engineering, marketing, finance and legal, and HR: if the saved resume carries `imZuschnitt` false, tell the user that their resume does not look like any of these fields and the matches will therefore probably not fit them. Before the first resume, the user has to consent to its processing themselves on the Jobroulette website; until then this tool fails with einwilligung_fehlt, quoting the consent text and the page where the user gives it. Show both to the user — you cannot consent on their behalf. Exactly one of freitext, pdf, datei, felder per call. Scope: cv:schreiben.

upload_resume input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "pdf": {
      "type": "string",
      "format": "base64",
      "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$",
      "maxLength": 6990508,
      "minLength": 1,
      "description": "The resume as a PDF with a text layer, Base64-encoded, at most 5 MiB. Scans are refused. It is only read, not saved.",
      "contentEncoding": "base64"
    },
    "datei": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "minLength": 1
        },
        "file_name": {
          "type": "string"
        },
        "mime_type": {
          "type": "string"
        },
        "download_url": {
          "type": "string",
          "minLength": 1
        }
      },
      "description": "The resume as an attached PDF file."
    },
    "felder": {
      "type": "object",
      "required": [
        "berufsbezeichnung",
        "berufsjahre",
        "kenntnisse"
      ],
      "properties": {
        "sprachen": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "default": []
        },
        "stationen": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "arbeitgeber",
              "rolle",
              "von",
              "bis"
            ],
            "properties": {
              "bis": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "von": {
                "type": "string",
                "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
              },
              "rolle": {
                "type": "string",
                "minLength": 1
              },
              "arbeitgeber": {
                "type": "string",
                "minLength": 1
              },
              "beschreibung": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "default": []
        },
        "ausbildung": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "default": []
        },
        "kenntnisse": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1
        },
        "berufsjahre": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0
        },
        "studienabschluss": {
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "berufsbezeichnung": {
          "type": "string",
          "minLength": 1
        }
      },
      "description": "The resume field by field, as the user has confirmed it — only this saves it. Required: job title, years of experience, at least one skill."
    },
    "wunsch": {
      "type": "string",
      "maxLength": 280,
      "description": "What the user is looking for that the resume does not say, in their own words, at most 280 characters — for example \"remote only, full-time, from March\". Workload, contract type, workplace, locations, seniority, industries, minimum salary, company size and excluded employers are read from it. Only together with felder; without it, the previous one stays."
    },
    "freitext": {
      "type": "string",
      "minLength": 1,
      "description": "The resume as text, as the user wrote or pasted it. It is only read, not saved."
    }
  }
}
upload_resume output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "entwurf": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "freitext",
            "felder"
          ],
          "properties": {
            "felder": {
              "type": "object",
              "required": [
                "berufsbezeichnung",
                "berufsjahre",
                "kenntnisse",
                "stationen",
                "ausbildung",
                "studienabschluss",
                "sprachen"
              ],
              "properties": {
                "sprachen": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "default": []
                },
                "stationen": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "arbeitgeber",
                      "rolle",
                      "von",
                      "bis"
                    ],
                    "properties": {
                      "bis": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "von": {
                        "type": "string",
                        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
                      },
                      "rolle": {
                        "type": "string",
                        "minLength": 1
                      },
                      "arbeitgeber": {
                        "type": "string",
                        "minLength": 1
                      },
                      "beschreibung": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "default": []
                },
                "ausbildung": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "default": []
                },
                "kenntnisse": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "default": []
                },
                "berufsjahre": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "maximum": 9007199254740991,
                      "minimum": 0
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "studienabschluss": {
                  "type": [
                    "boolean",
                    "null"
                  ],
                  "default": null
                },
                "berufsbezeichnung": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "freitext": {
              "type": "string",
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "After freitext, pdf or datei: the fields that were read. Nothing has been saved yet. Show them to the user, let them correct them, then call again with felder."
    },
    "angelegt": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "felder",
            "wunsch",
            "imZuschnitt"
          ],
          "properties": {
            "felder": {
              "type": "object",
              "required": [
                "berufsbezeichnung",
                "berufsjahre",
                "kenntnisse",
                "stationen",
                "ausbildung",
                "studienabschluss",
                "sprachen"
              ],
              "properties": {
                "sprachen": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "default": []
                },
                "stationen": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "arbeitgeber",
                      "rolle",
                      "von",
                      "bis"
                    ],
                    "properties": {
                      "bis": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "von": {
                        "type": "string",
                        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
                      },
                      "rolle": {
                        "type": "string",
                        "minLength": 1
                      },
                      "arbeitgeber": {
                        "type": "string",
                        "minLength": 1
                      },
                      "beschreibung": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "default": []
                },
                "ausbildung": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "default": []
                },
                "kenntnisse": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "minItems": 1
                },
                "berufsjahre": {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": 0
                },
                "studienabschluss": {
                  "type": [
                    "boolean",
                    "null"
                  ],
                  "default": null
                },
                "berufsbezeichnung": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "additionalProperties": false
            },
            "wunsch": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "imZuschnitt": {
              "type": "boolean",
              "description": "Whether the resume falls within the fields Jobroulette covers: IT; sales and business development; operations, strategy and projects; engineering and R&D outside IT; marketing, content and design; finance, legal and compliance; HR and recruiting. If false, tell the user that their resume does not look like any of these fields and the job matches will therefore probably not fit them; they may continue anyway."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "After felder: the saved resume. With the first one, five job matches are ready; get_job_matches shows them. A changed resume does not change them; new ones come only from refresh_job_matches."
    }
  },
  "additionalProperties": false
}
upload_resume annotations
{
  "title": "Read and save your resume (CV, Lebenslauf)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
get_job_matches — Show your job matches (Stellen)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks for jobs (Stellen) that fit them or wants to see their job matches again. Returns the five jobs currently matched to their resume. Nothing is recalculated: the selection stays until the user replaces it with refresh_job_matches, even if they change their resume; `erneuerbarAb` says from when that is possible. A job with `zustand` `verschwunden` is no longer advertised: tell the user so and do not offer to apply; from the next day on it is left out. Scope: cv:lesen.

get_job_matches input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_job_matches output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "vollstaendig",
    "hinweis",
    "erneuerbarAb",
    "stellen"
  ],
  "properties": {
    "hinweis": {
      "type": [
        "string",
        "null"
      ]
    },
    "stellen": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "stelleId",
          "titel",
          "arbeitgeber",
          "url",
          "standorte",
          "arbeitsort",
          "bewerbungsweg",
          "formularUrl",
          "begruendung",
          "umfang",
          "vertragsart",
          "beschaeftigungsstatus",
          "gehalt",
          "zustand"
        ],
        "properties": {
          "url": {
            "type": "string",
            "minLength": 1
          },
          "titel": {
            "type": "string",
            "minLength": 1
          },
          "gehalt": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "von",
                  "bis",
                  "waehrung",
                  "herkunft"
                ],
                "properties": {
                  "bis": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "von": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "herkunft": {
                    "enum": [
                      "anzeige",
                      "branche"
                    ],
                    "type": "string"
                  },
                  "waehrung": {
                    "enum": [
                      "EUR",
                      "CHF"
                    ],
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "umfang": {
            "anyOf": [
              {
                "enum": [
                  "vollzeit",
                  "teilzeit"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "zustand": {
            "enum": [
              "offen",
              "verschwunden"
            ],
            "type": "string",
            "default": "offen"
          },
          "stelleId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "standorte": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "arbeitsort": {
            "anyOf": [
              {
                "enum": [
                  "vor_ort",
                  "hybrid",
                  "fern"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "arbeitgeber": {
            "type": "string",
            "minLength": 1
          },
          "begruendung": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "dafuer",
                  "dagegen"
                ],
                "properties": {
                  "dafuer": {
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "treffer",
                            "gefordert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "skills"
                            },
                            "treffer": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1
                              },
                              "minItems": 1
                            },
                            "gefordert": {
                              "type": "integer",
                              "maximum": 9007199254740991,
                              "minimum": 1
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "stellenort",
                            "wunschort",
                            "entfernungKm"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "ort"
                            },
                            "wunschort": {
                              "type": "string",
                              "minLength": 1
                            },
                            "stellenort": {
                              "type": "string",
                              "minLength": 1
                            },
                            "entfernungKm": {
                              "type": "integer",
                              "maximum": 9007199254740991,
                              "minimum": 0
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "arbeitsort"
                            },
                            "wert": {
                              "enum": [
                                "vor_ort",
                                "hybrid",
                                "fern"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "orte"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "fern"
                            },
                            "orte": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1
                              },
                              "minItems": 1
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "umfang"
                            },
                            "wert": {
                              "enum": [
                                "vollzeit",
                                "teilzeit"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "vertragsart"
                            },
                            "wert": {
                              "enum": [
                                "befristet",
                                "unbefristet"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "stufe"
                            },
                            "wert": {
                              "enum": [
                                "praktikum",
                                "einstieg",
                                "junior",
                                "mittel",
                                "senior",
                                "lead",
                                "leitung"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "branche"
                            },
                            "wert": {
                              "enum": [
                                "software",
                                "it_dienstleistung",
                                "telekommunikation",
                                "finanzen",
                                "versicherung",
                                "krypto",
                                "handel",
                                "konsumgueter",
                                "gesundheit",
                                "pharma_biotech",
                                "industrie",
                                "automobil",
                                "luft_raumfahrt",
                                "ruestung",
                                "energie",
                                "logistik",
                                "immobilien_bau",
                                "medien",
                                "marketing",
                                "gaming",
                                "gluecksspiel",
                                "beratung",
                                "recht_steuern",
                                "personal",
                                "bildung_forschung",
                                "freizeit",
                                "oeffentlich_gemeinnuetzig"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "von",
                            "bis",
                            "waehrung",
                            "mindestens"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "gehalt"
                            },
                            "bis": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "maximum": 9007199254740991,
                                  "minimum": -9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "von": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "maximum": 9007199254740991,
                                  "minimum": -9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "waehrung": {
                              "enum": [
                                "EUR",
                                "CHF"
                              ],
                              "type": "string"
                            },
                            "mindestens": {
                              "type": "integer",
                              "maximum": 9007199254740991,
                              "exclusiveMinimum": 0
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "klassen"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "groesse"
                            },
                            "klassen": {
                              "type": "array",
                              "items": {
                                "enum": [
                                  "klein",
                                  "mittel",
                                  "gross",
                                  "konzern"
                                ],
                                "type": "string"
                              },
                              "minItems": 1
                            }
                          },
                          "additionalProperties": false
                        }
                      ]
                    }
                  },
                  "dagegen": {
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "fehlend",
                            "gefordert"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "skills_fehlen"
                            },
                            "fehlend": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1
                              },
                              "minItems": 1
                            },
                            "gefordert": {
                              "type": "integer",
                              "maximum": 9007199254740991,
                              "minimum": 1
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "keine_skills"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "wunsch"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "unscharf"
                            },
                            "wunsch": {
                              "type": "string",
                              "minLength": 1
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "kriterium"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "unbekannt"
                            },
                            "kriterium": {
                              "enum": [
                                "ort",
                                "arbeitsort",
                                "umfang",
                                "vertragsart",
                                "stufe",
                                "branche",
                                "groesse"
                              ],
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "required": [
                            "art",
                            "mindestens",
                            "schaetzung"
                          ],
                          "properties": {
                            "art": {
                              "type": "string",
                              "const": "gehalt_unbekannt"
                            },
                            "mindestens": {
                              "type": "integer",
                              "maximum": 9007199254740991,
                              "exclusiveMinimum": 0
                            },
                            "schaetzung": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "required": [
                                    "von",
                                    "bis",
                                    "waehrung",
                                    "herkunft"
                                  ],
                                  "properties": {
                                    "bis": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "maximum": 9007199254740991,
                                          "minimum": -9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "von": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "maximum": 9007199254740991,
                                          "minimum": -9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "herkunft": {
                                      "enum": [
                                        "anzeige",
                                        "branche"
                                      ],
                                      "type": "string"
                                    },
                                    "waehrung": {
                                      "enum": [
                                        "EUR",
                                        "CHF"
                                      ],
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "additionalProperties": false
                        }
                      ]
                    }
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "formularUrl": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "vertragsart": {
            "anyOf": [
              {
                "enum": [
                  "befristet",
                  "unbefristet"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "bewerbungsweg": {
            "anyOf": [
              {
                "enum": [
                  "mail",
                  "kontakt",
                  "formular"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "beschaeftigungsstatus": {
            "anyOf": [
              {
                "enum": [
                  "regulaer",
                  "werkstudent",
                  "praktikum",
                  "ausbildung",
                  "freiberuflich"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "additionalProperties": false
      }
    },
    "erneuerbarAb": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "vollstaendig": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
get_job_matches annotations
{
  "title": "Show your job matches (Stellen)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
refresh_job_matches — Get five new job matches
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use this only when the user explicitly asks for new or different jobs (neue Stellen) than the ones already matched. Replaces the current matches with up to five jobs never matched to this user before and says how many; call get_job_matches to show them. Once every 24 hours; an earlier call is refused with zu_frueh and names the time from which it works. Scope: cv:schreiben.

refresh_job_matches input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
refresh_job_matches output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "vollstaendig",
    "hinweis",
    "erneuerbarAb",
    "anzahl"
  ],
  "properties": {
    "anzahl": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0
    },
    "hinweis": {
      "type": [
        "string",
        "null"
      ]
    },
    "erneuerbarAb": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "vollstaendig": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
refresh_job_matches annotations
{
  "title": "Get five new job matches",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
draft_job_application — Draft a job application (Bewerbung) by email
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to apply for one of their matched jobs (Bewerbung). Drafts an application by email for that job: recipient from the posting, subject, cover letter and the stored resume document as attachment. Sends nothing. Show the user the draft, let them edit the cover letter and sign it with their name. If the posting asks for more (salary expectation, earliest start date, a cover letter, certificates), forderungen names each with a hint for the user; the cover letter then holds a line with [bitte eintragen] that must be filled in or removed before sending. If the posting names no email address for applications, the call is refused and names the posting. Scope: cv:lesen.

draft_job_application input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "stelleId"
  ],
  "properties": {
    "stelleId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  }
}
draft_job_application output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "stelleId",
    "titel",
    "arbeitgeber",
    "url",
    "empfaenger",
    "betreff",
    "anschreiben",
    "anhang",
    "forderungen"
  ],
  "properties": {
    "url": {
      "type": "string",
      "minLength": 1
    },
    "titel": {
      "type": "string",
      "minLength": 1
    },
    "anhang": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "dateiname",
            "groesse"
          ],
          "properties": {
            "groesse": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            "dateiname": {
              "type": "string",
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "betreff": {
      "type": "string",
      "minLength": 1
    },
    "stelleId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "empfaenger": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "anschreiben": {
      "type": "string",
      "minLength": 1
    },
    "arbeitgeber": {
      "type": "string",
      "minLength": 1
    },
    "forderungen": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "art",
          "hinweis"
        ],
        "properties": {
          "art": {
            "enum": [
              "gehaltsvorstellung",
              "eintrittstermin",
              "anschreiben",
              "zeugnisse"
            ],
            "type": "string"
          },
          "hinweis": {
            "type": "string",
            "minLength": 1
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
draft_job_application annotations
{
  "title": "Draft a job application (Bewerbung) by email",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
send_job_application — Send a job application (Bewerbung) by email
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Use this when the user has seen the draft of their job application (Bewerbung) and explicitly wants it sent. Sends exactly one email to the employer, with the cover letter and the user’s resume document or another PDF (anhang or datei) as attachment. The call is the user’s consent for exactly this job: make it only after they have seen the draft and explicitly asked to send it. A second call for the same job sends nothing and names the first application. Scope: bewerbung:senden.

send_job_application input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "stelleId",
    "anschreiben"
  ],
  "properties": {
    "datei": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "minLength": 1
        },
        "file_name": {
          "type": "string"
        },
        "mime_type": {
          "type": "string"
        },
        "download_url": {
          "type": "string",
          "minLength": 1
        }
      },
      "description": "The attachment as an attached PDF file."
    },
    "anhang": {
      "type": "object",
      "required": [
        "pdf",
        "dateiname"
      ],
      "properties": {
        "pdf": {
          "type": "string",
          "format": "base64",
          "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$",
          "maxLength": 2031616,
          "minLength": 1,
          "contentEncoding": "base64"
        },
        "dateiname": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1
        }
      }
    },
    "stelleId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "anschreiben": {
      "type": "string",
      "maxLength": 10000,
      "minLength": 1
    }
  }
}
send_job_application output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "stelleId",
    "titel",
    "arbeitgeber",
    "empfaenger",
    "betreff",
    "anhang",
    "zustellung",
    "gesendetAm"
  ],
  "properties": {
    "titel": {
      "type": "string",
      "minLength": 1
    },
    "anhang": {
      "type": "object",
      "required": [
        "dateiname",
        "groesse"
      ],
      "properties": {
        "groesse": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0
        },
        "dateiname": {
          "type": "string",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "betreff": {
      "type": "string",
      "minLength": 1
    },
    "stelleId": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "empfaenger": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "gesendetAm": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    },
    "zustellung": {
      "anyOf": [
        {
          "enum": [
            "abgelehnt",
            "angenommen",
            "zugestellt",
            "unzustellbar",
            "gesperrt"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "arbeitgeber": {
      "type": "string",
      "minLength": 1
    }
  },
  "additionalProperties": false
}
send_job_application annotations
{
  "title": "Send a job application (Bewerbung) by email",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
list_job_applications — List your job applications (Bewerbungen)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks about the job applications (Bewerbungen) they have sent. Returns each application: to whom, when, with which attachment and how far delivery has got; "angenommen" means on its way, not delivered. Scope: cv:lesen.

list_job_applications input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_job_applications output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "bewerbungen"
  ],
  "properties": {
    "bewerbungen": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "stelleId",
          "titel",
          "arbeitgeber",
          "empfaenger",
          "betreff",
          "anhang",
          "zustellung",
          "gesendetAm"
        ],
        "properties": {
          "titel": {
            "type": "string",
            "minLength": 1
          },
          "anhang": {
            "type": "object",
            "required": [
              "dateiname",
              "groesse"
            ],
            "properties": {
              "groesse": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": 0
              },
              "dateiname": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          "betreff": {
            "type": "string",
            "minLength": 1
          },
          "stelleId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "empfaenger": {
            "type": "string",
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "gesendetAm": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
          },
          "zustellung": {
            "anyOf": [
              {
                "enum": [
                  "abgelehnt",
                  "angenommen",
                  "zugestellt",
                  "unzustellbar",
                  "gesperrt"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "arbeitgeber": {
            "type": "string",
            "minLength": 1
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_job_applications annotations
{
  "title": "List your job applications (Bewerbungen)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_employer_introductions — List offers to introduce you to an employer (Vermittlung)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks whether Jobroulette wants to introduce them to an employer for a job (Vermittlung). Returns the introduction offers: at which employer Jobroulette would like to present the user, which job it is about and when the user was asked. Only the user can accept an offer, on the Jobroulette website: `zustimmungsseite` is the page where they do it — give them this link. Scope: cv:lesen.

list_employer_introductions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "nurOffene": {
      "type": "boolean",
      "default": true,
      "description": "Only the unanswered offers. false also returns the answered ones."
    }
  }
}
list_employer_introductions output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "vorschlaege"
  ],
  "properties": {
    "vorschlaege": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "arbeitgeber",
          "titel",
          "standorte",
          "url",
          "stelleGeloescht",
          "gefragtAm",
          "stand",
          "zustimmungsseite"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "url": {
            "type": "string",
            "minLength": 1
          },
          "stand": {
            "enum": [
              "offen",
              "abgelehnt",
              "zugestimmt",
              "widerrufen",
              "vorgestellt"
            ],
            "type": "string"
          },
          "titel": {
            "type": "string",
            "minLength": 1
          },
          "gefragtAm": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "standorte": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "arbeitgeber": {
            "type": "string",
            "minLength": 1
          },
          "stelleGeloescht": {
            "type": "boolean"
          },
          "zustimmungsseite": {
            "type": "string",
            "format": "uri"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_employer_introductions annotations
{
  "title": "List offers to introduce you to an employer (Vermittlung)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
decline_employer_introduction — Decline an introduction to an employer
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use this when the user does not want to be introduced to an employer for a job (Vermittlungsvorschlag ablehnen). Declines the offer on the user’s behalf. The first answer counts: a declined offer cannot be accepted later, and a second call changes nothing and says so. To accept, the user ticks the box themselves on the page named in list_employer_introductions. Scope: vermittlung:zustimmen.

decline_employer_introduction input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "The id of the offer from list_employer_introductions."
    }
  }
}
decline_employer_introduction output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "arbeitgeber",
    "titel",
    "standorte",
    "url",
    "stelleGeloescht",
    "gefragtAm",
    "stand"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "url": {
      "type": "string",
      "minLength": 1
    },
    "stand": {
      "enum": [
        "offen",
        "abgelehnt",
        "zugestimmt",
        "widerrufen",
        "vorgestellt"
      ],
      "type": "string"
    },
    "titel": {
      "type": "string",
      "minLength": 1
    },
    "gefragtAm": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "standorte": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "arbeitgeber": {
      "type": "string",
      "minLength": 1
    },
    "stelleGeloescht": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
decline_employer_introduction annotations
{
  "title": "Decline an introduction to an employer",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
withdraw_employer_introduction — Withdraw consent to an introduction to an employer
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use this when the user wants to take back their consent to be introduced to an employer for a job (Zustimmung zur Vermittlung widerrufen). Works until Jobroulette has presented the user; after that the employer handles the data on its own responsibility, and this tool fails and says so. A second call changes nothing. Scope: vermittlung:zustimmen.

withdraw_employer_introduction input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "The id of the offer from list_employer_introductions."
    }
  }
}
withdraw_employer_introduction output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "arbeitgeber",
    "titel",
    "standorte",
    "url",
    "stelleGeloescht",
    "gefragtAm",
    "stand"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "url": {
      "type": "string",
      "minLength": 1
    },
    "stand": {
      "enum": [
        "offen",
        "abgelehnt",
        "zugestimmt",
        "widerrufen",
        "vorgestellt"
      ],
      "type": "string"
    },
    "titel": {
      "type": "string",
      "minLength": 1
    },
    "gefragtAm": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "standorte": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "arbeitgeber": {
      "type": "string",
      "minLength": 1
    },
    "stelleGeloescht": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
withdraw_employer_introduction annotations
{
  "title": "Withdraw consent to an introduction to an employer",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
848 ms
95th percentile latency
848 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 848 ms · metadata changed · 9 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http jobroulette-mcp https://mcp.jobroulette.de/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add jobroulette-mcp --url https://mcp.jobroulette.de/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable jobroulette-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "jobroulette-mcp": {
      "url": "https://mcp.jobroulette.de/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "jobroulette-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.jobroulette.de/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start jobroulette-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "jobroulette-mcp": {
      "type": "http",
      "url": "https://mcp.jobroulette.de/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http jobroulette-mcp https://mcp.jobroulette.de/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "jobroulette-mcp": {
      "url": "https://mcp.jobroulette.de/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "jobroulette-mcp": {
      "serverUrl": "https://mcp.jobroulette.de/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Jobroulette MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Jobroulette MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing