Read Homerun vacancies, applications, notes and tags; move an application to a stage or add a note.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: add ONE note (1-2000 characters) to one application. It becomes visible to the hiring team in Homerun and cannot be removed with this server. display_name is free text shown as the author. Nothing is sent to the candidate. POST /job-applications/{job_application_id}/notes (scope job-application-notes:write).
The note text, 1-2000 characters.
Application id.
Author name shown on the note (default "AI assistant").
Mark the note as sensitive (restricts who can read it in Homerun).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: add ONE note (1-2000 characters) to one application. It becomes visible to the hiring team in Homerun and cannot be removed with this server. display_name is free text shown as the author. Nothing is sent to the candidate. POST /job-applications/{job_application_id}/notes (scope job-application-notes:write).
| Argument | Type | Description |
|---|---|---|
| note* | string | The note text, 1-2000 characters. |
| display_name | string | Author name shown on the note (default "AI assistant"). |
| is_sensitive | boolean | Mark the note as sensitive (restricts who can read it in Homerun). |
| job_application_id* | string | Application id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_application_id",
"note"
],
"properties": {
"note": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "The note text, 1-2000 characters."
},
"display_name": {
"type": "string",
"maxLength": 192,
"minLength": 1,
"description": "Author name shown on the note (default \"AI assistant\")."
},
"is_sensitive": {
"type": "boolean",
"description": "Mark the note as sensitive (restricts who can read it in Homerun)."
},
"job_application_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Application id."
}
}
}One job application in full: contact details (name, e-mail, phone, city, country), links, experience/education, current stage, rating, sources and file names (notes: use homerun_list_notes). Date of birth, photo URL and file download links are never returned. Optionally include the answers to the application-form questions. Personal data: fetch only the candidate you need. GET /job-applications/{job_application_id} (scope job-applications:read).
| Argument | Type | Description |
|---|---|---|
| include_answers | boolean | Also return the application-form questions and the candidate's answers. |
| job_application_id* | string | Application id, e.g. ap_D3kCkoClbG6n6KlqD0ob. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_application_id"
],
"properties": {
"include_answers": {
"type": "boolean",
"description": "Also return the application-form questions and the candidate's answers."
},
"job_application_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Application id, e.g. ap_D3kCkoClbG6n6KlqD0ob."
}
}
}One vacancy by id with description, location, department, hiring stages (id + name), salary indication, candidate count and the public job and application-form URLs. GET /vacancies/{vacancy_id} (scope vacancies:read).
| Argument | Type | Description |
|---|---|---|
| vacancy_id* | string | Vacancy id, e.g. job_SnhUsAg1QwTRFIRNUfM6. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"vacancy_id"
],
"properties": {
"vacancy_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Vacancy id, e.g. job_SnhUsAg1QwTRFIRNUfM6."
}
}
}The tags attached to one application. GET /job-applications/{job_application_id}/tags (scope job-application-tags:read).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| perPage | integer | Results per page, 1-100 (default 15). |
| job_application_id* | string | Application id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_application_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"perPage": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 15).",
"exclusiveMinimum": 0
},
"job_application_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Application id."
}
}
}List job applications, newest page first as the API orders them. Each item has name, e-mail, vacancy id, current stage (id + name), rating, created/hired dates and disqualified flag. Personal data: no phone number, date of birth, photo or files are returned here; ask for one application with homerun_get_application. Filter by vacancy, stage name or disqualified state and page through; do not use it to export all candidates. GET /job-applications (scope job-applications:read).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| stage | string | Only applications in the hiring stage with this name (stage names belong to a vacancy, so combine with vacancy_id). |
| perPage | integer | Results per page, 1-100 (default 15). |
| vacancy_id | array | Only applications of these vacancy ids (filter[vacancy_id]). |
| hired_after | string | Only applicants hired after this date, yyyy-mm-dd. |
| disqualified | boolean | true = only disqualified, false = only not disqualified. |
| include_sources | boolean | Also return the sources (e.g. Homerun Career Page, Indeed) of each application. |
List the notes on one application: id, author display name, text, sensitive flag and timestamps. GET /job-applications/{job_application_id}/notes (scope job-application-notes:read).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| perPage | integer | Results per page, 1-100 (default 15). |
| job_application_id* | string | Application id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_application_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"perPage": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 15).",
"exclusiveMinimum": 0
},
"job_application_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Application id."
}
}
}List the company's candidate tags (id + name). GET /tags (scope tags:read).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| perPage | integer | Results per page, 1-100 (default 15). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"perPage": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 15).",
"exclusiveMinimum": 0
}
}
}List job vacancies (draft, private, public, ...) with title, status, type, location type and expiry. Optionally include location, department, hiring stages (their ids are what homerun_move_application_to_stage needs), salary indication and the candidate count. GET /vacancies (scope vacancies:read).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| status | array | Only vacancies in these statuses, e.g. ["public","private"] or ["draft"]. |
| include | array | Extra data to include. Use stages to see the hiring stage ids. |
| perPage | integer | Results per page, 1-100 (default 15). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"status": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z_]{2,30}$"
},
"maxItems": 6,
"description": "Only vacancies in these statuses, e.g. [\"public\",\"private\"] or [\"draft\"]."
},
"include": {
"type": "array",
"items": {
"enum": [
"location",
"department",
"stages",
"salaryIndication",
"total_candidate_count"
],
"type": "string"
},
"maxItems": 5,
"description": "Extra data to include. Use stages to see the hiring stage ids."
},
"perPage": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 15).",
"exclusiveMinimum": 0
}
}
}WRITE: move ONE application to another hiring stage of its vacancy (PATCH with only the stage id; nothing else on the application changes). Get stage ids from homerun_get_vacancy. Homerun's own automations for that stage may run (for example automatic e-mails configured in Homerun); this tool sends no e-mail itself and does not reject or delete anyone. PATCH /job-applications/{job_application_id} (scope job-applications:write).
| Argument | Type | Description |
|---|---|---|
| stage_id* | string | Hiring stage id from the vacancy's stages (homerun_get_vacancy). |
| job_application_id* | string | Application id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_application_id",
"stage_id"
],
"properties": {
"stage_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Hiring stage id from the vacancy's stages (homerun_get_vacancy)."
},
"job_application_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Application id."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"stage": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only applications in the hiring stage with this name (stage names belong to a vacancy, so combine with vacancy_id)."
},
"perPage": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 15).",
"exclusiveMinimum": 0
},
"vacancy_id": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Vacancy id"
},
"maxItems": 20,
"description": "Only applications of these vacancy ids (filter[vacancy_id])."
},
"hired_after": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only applicants hired after this date, yyyy-mm-dd."
},
"disqualified": {
"type": "boolean",
"description": "true = only disqualified, false = only not disqualified."
},
"include_sources": {
"type": "boolean",
"description": "Also return the sources (e.g. Homerun Career Page, Indeed) of each application."
}
}
}