Read Breathe HR employees, absences, sickness and leave; create and review leave requests.
Maintain this server? Claim it
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: approve a pending leave request; it becomes an absence and is deducted from the allowance. Recorded as done by the "API Employee". POST /leave_requests/{id}/approve.
Breathe leave request id (from breathehr_list_leave_requests).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: approve a pending leave request; it becomes an absence and is deducted from the allowance. Recorded as done by the "API Employee". POST /leave_requests/{id}/approve.
| Argument | Type | Description |
|---|---|---|
| leave_request_id* | integer | Breathe leave request id (from breathehr_list_leave_requests). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"leave_request_id"
],
"properties": {
"leave_request_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe leave request id (from breathehr_list_leave_requests).",
"exclusiveMinimum": 0
}
}
}WRITE: request leave for an employee (holiday by default, or other leave). It is created as a request, then follows the account's approval rules; the employee's approver is notified. Each call creates a new request. POST /employees/{id}/leave_requests.
| Argument | Type | Description |
|---|---|---|
| type | string | Holiday (default) or OtherLeave. |
| notes | string | Notes for the approver. |
| end_date* | string | Last day of leave (yyyy-mm-dd), same as start_date for one day. |
| half_end | boolean | The last day is a half day (default false). |
| half_start | boolean | The first day is a half day (default false). |
| start_date* | string | First day of leave (yyyy-mm-dd). |
| employee_id* | integer | Breathe employee id. |
| half_end_am_pm | string | Which half of the last day: am or pm (with half_end). |
| half_start_am_pm | string | Which half of the first day: am or pm (with half_start). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"employee_id",
"start_date",
"end_date"
],
"properties": {
"type": {
"enum": [
"Holiday",
"OtherLeave"
],
"type": "string",
"description": "Holiday (default) or OtherLeave."
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Notes for the approver."
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Last day of leave (yyyy-mm-dd), same as start_date for one day."
},
"half_end": {
"type": "boolean",
"description": "The last day is a half day (default false)."
},
"half_start": {
"type": "boolean",
"description": "The first day is a half day (default false)."
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day of leave (yyyy-mm-dd)."
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe employee id.",
"exclusiveMinimum": 0
},
"half_end_am_pm": {
"enum": [
"am",
"pm"
],
"type": "string",
"description": "Which half of the last day: am or pm (with half_end)."
},
"half_start_am_pm": {
"enum": [
"am",
"pm"
],
"type": "string",
"description": "Which half of the first day: am or pm (with half_start)."
}
}
}The Breathe HR account (company) this API key belongs to: id, name, domain and enabled modules. GET /account.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}One employee's record by id (personal and job details, contacts, manager, working pattern). Bank details and NI number are never returned. GET /employees/{id}.
| Argument | Type | Description |
|---|---|---|
| employee_id* | integer | Breathe employee id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"employee_id"
],
"properties": {
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe employee id.",
"exclusiveMinimum": 0
}
}
}An employee's holiday years: start/end, allowance, days or hours taken, booked and remaining. Pass for_date to get only the year that contains that date. GET /employees/{id}/employee_holiday_years.
| Argument | Type | Description |
|---|---|---|
| for_date | string | Only the holiday year that includes this date (yyyy-mm-dd), e.g. today. |
| employee_id* | integer | Breathe employee id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"employee_id"
],
"properties": {
"for_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only the holiday year that includes this date (yyyy-mm-dd), e.g. today."
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe employee id.",
"exclusiveMinimum": 0
}
}
}One leave request by id, with its status. GET /leave_requests/{id}.
| Argument | Type | Description |
|---|---|---|
| leave_request_id* | integer | Breathe leave request id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"leave_request_id"
],
"properties": {
"leave_request_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe leave request id.",
"exclusiveMinimum": 0
}
}
}List approved absences (holiday and other leave) with employee, dates, half days, days deducted and cancelled flag. Filter by employee, department, type, other-leave reason and dates. GET /absences.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| type | string | Holiday or OtherLeave. |
| end_date | string | Only absences up to this date (yyyy-mm-dd). |
| per_page | integer | Results per page, 1-100 (default 25). |
| start_date | string | Only absences on or after this date (yyyy-mm-dd). |
| employee_id | integer | Only this employee's absences. |
| department_id | integer | Only absences of employees in this department. |
| exclude_cancelled | boolean | Leave out cancelled absences. |
| other_leave_reason_id | integer |
List employee benefits (type, value, start/end) for the whole company, one employee or one department. GET /benefits, /employees/{id}/benefits or /departments/{id}/benefits.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's records. |
| department_id | integer | Only records of employees in this department. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's records.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only records of employees in this department.",
"exclusiveMinimum": 0
}
}
}List bonus records (amount, date, description) for the whole company, one employee or one department. GET /bonuses, /employees/{id}/bonuses or /departments/{id}/bonuses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's records. |
| department_id | integer | Only records of employees in this department. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's records.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only records of employees in this department.",
"exclusiveMinimum": 0
}
}
}List employee self-service change requests (field, requested value, approval state) for all employees or one employee. Requested values of bank and NI fields are redacted. GET /change_requests or /employees/{id}/change_requests.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's change requests. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's change requests.",
"exclusiveMinimum": 0
}
}
}List the company's departments (id, name). Use the ids to filter absences, leave, sickness and pay. GET /departments.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
}
}
}List the company's divisions (id, name). All of them are returned in one reply. GET /divisions.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List job history records (job title, start/end dates, department, location) for all employees or one employee. GET /employee_jobs.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's jobs. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's jobs.",
"exclusiveMinimum": 0
}
}
}List employees with job title, department, division, location, line manager, holiday approver, working pattern, join/leaving dates and status. Bank details and National Insurance numbers are never returned. GET /employees.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| filter | string | Only employees with this role: hr (HR managers), line_manager, either, or neither. |
| per_page | integer | Results per page, 1-100 (default 25). |
{
"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
},
"filter": {
"enum": [
"hr",
"line_manager",
"either",
"neither"
],
"type": "string",
"description": "Only employees with this role: hr (HR managers), line_manager, either, or neither."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
}
}
}List expense claims (employee, total, state, approver) filtered by employee and state. GET /employee_expense_claims.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| state | string | Only claims in this state. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's claims. |
{
"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
},
"state": {
"enum": [
"submitted",
"approved",
"completed",
"rejected"
],
"type": "string",
"description": "Only claims in this state."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's claims.",
"exclusiveMinimum": 0
}
}
}List individual expense items (date, description, type, amount, VAT, project). By default only unclaimed items; set include_claimed to see all. GET /employee_expenses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's expenses. |
| include_claimed | boolean | Also return expenses already part of a claim. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's expenses.",
"exclusiveMinimum": 0
},
"include_claimed": {
"type": "boolean",
"description": "Also return expenses already part of a claim."
}
}
}List the holiday allowance schemes (id, default flag, year_1 to year_10 = the allowance for each year of service, created_at, updated_at). All of them are returned in one reply. GET /holiday_allowances.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List leave requests (pending, approved, rejected and cancelling requests) with employee, dates, half days, type, status and notes. Filter by employee, department and start-date range. GET /leave_requests.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| end_date | string | Only requests starting on or before this date (yyyy-mm-dd). |
| per_page | integer | Results per page, 1-100 (default 25). |
| start_date | string | Only requests starting on or after this date (yyyy-mm-dd). |
| employee_id | integer | Only this employee's requests. |
| department_id | integer | Only requests of employees in this department. |
| exclude_cancelled | boolean | Leave out cancelled requests. |
{
"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
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only requests starting on or before this date (yyyy-mm-dd)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only requests starting on or after this date (yyyy-mm-dd)."
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's requests.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only requests of employees in this department.",
"exclusiveMinimum": 0
},
"exclude_cancelled": {
"type": "boolean",
"description": "Leave out cancelled requests."
}
}
}List the company's work locations (id, name). All of them are returned in one reply. GET /locations.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the reasons for non-holiday leave (e.g. compassionate, jury service). Use the ids to filter absences. All of them are returned in one reply. GET /other_leave_reasons.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List salary records (amount, basis, payment schedule, start date) for the whole company, one employee or one department. GET /salaries, /employees/{id}/salaries or /departments/{id}/salaries.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's records. |
| department_id | integer | Only records of employees in this department. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's records.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only records of employees in this department.",
"exclusiveMinimum": 0
}
}
}List sickness absence records (health data): employee, sickness type, dates, half days, days deducted, status (open, returned, closed…) and reason. Filter by employee, department and start-date range. GET /sicknesses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| end_date | string | Only sickness starting on or before this date (yyyy-mm-dd). |
| per_page | integer | Results per page, 1-100 (default 25). |
| start_date | string | Only sickness starting on or after this date (yyyy-mm-dd). |
| employee_id | integer | Only this employee's sickness. |
| department_id | integer | Only sickness of employees in this department. |
{
"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
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only sickness starting on or before this date (yyyy-mm-dd)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only sickness starting on or after this date (yyyy-mm-dd)."
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's sickness.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only sickness of employees in this department.",
"exclusiveMinimum": 0
}
}
}List employee training records (course name, type, status, dates, cost) for all employees or one employee. GET /employee_training_courses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
| employee_id | integer | Only this employee's training. |
{
"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
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's training.",
"exclusiveMinimum": 0
}
}
}List the working patterns (hours per weekday, total weekly hours, default flag). All of them are returned in one reply. GET /working_patterns.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}WRITE: reject a pending leave request with a reason the employee will see. Recorded as done by the "API Employee". POST /leave_requests/{id}/reject.
| Argument | Type | Description |
|---|---|---|
| leave_request_id* | integer | Breathe leave request id (from breathehr_list_leave_requests). |
| rejection_reason* | string | Why the request is rejected (shown to the employee). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"leave_request_id",
"rejection_reason"
],
"properties": {
"leave_request_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Breathe leave request id (from breathehr_list_leave_requests).",
"exclusiveMinimum": 0
},
"rejection_reason": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Why the request is rejected (shown to the employee)."
}
}
}| Only other leave with this reason (ids from breathehr_list_other_leave_reasons). |
{
"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
},
"type": {
"enum": [
"Holiday",
"OtherLeave"
],
"type": "string",
"description": "Holiday or OtherLeave."
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only absences up to this date (yyyy-mm-dd)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Only absences on or after this date (yyyy-mm-dd)."
},
"employee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this employee's absences.",
"exclusiveMinimum": 0
},
"department_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only absences of employees in this department.",
"exclusiveMinimum": 0
},
"exclude_cancelled": {
"type": "boolean",
"description": "Leave out cancelled absences."
},
"other_leave_reason_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only other leave with this reason (ids from breathehr_list_other_leave_reasons).",
"exclusiveMinimum": 0
}
}
}