Skip to content

Breathe HR MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.4.3 · published by io.usefulapi

Read Breathe HR employees, absences, sickness and leave; create and review leave requests.

Deletes · 3

25 tools: 3 can delete or cancel things and 22 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http breathe-hr https://breathe-hr.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

25 tools

Deletes or cancels 3Claude Code: deny
  • breathehr_approve_leave_requestWRITE: approve a pending leave request; it becomes an absence and is deducted from the allowance.No findings

    Why it is in this group

    • The name "breathehr_approve_leave_request" says "approve": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote 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.

    Annotations the server declares

    • title: Approve leave request
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • breathehr_create_leave_requestWRITE: request leave for an employee (holiday by default, or other leave).No findings

    Why it is in this group

    • The name "breathehr_create_leave_request" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Create leave request
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • breathehr_reject_leave_requestWRITE: reject a pending leave request with a reason the employee will see.No findings

    Why it is in this group

    • The name "breathehr_reject_leave_request" says "reject": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Reject leave request
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Only reads 22Claude Code: allow
  • breathehr_get_accountThe Breathe HR account (company) this API key belongs to: id, name, domain and enabled modules.No findings

    Why it is in this group

    • The name "breathehr_get_account" says "get": a word for reading.
    Description, as the server wrote it
    The Breathe HR account (company) this API key belongs to: id, name, domain and enabled modules. GET /account.

    Annotations the server declares

    • title: Get account
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_get_employeeOne employee's record by id (personal and job details, contacts, manager, working pattern).No findings

    Why it is in this group

    • The name "breathehr_get_employee" says "get": a word for reading.
    Description, as the server wrote it
    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}.

    Annotations the server declares

    • title: Get employee
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_get_holiday_yearsAn employee's holiday years: start/end, allowance, days or hours taken, booked and remaining.No findings

    Why it is in this group

    • The name "breathehr_get_holiday_years" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get holiday years
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_get_leave_requestOne leave request by id, with its status.No findings

    Why it is in this group

    • The name "breathehr_get_leave_request" says "get": a word for reading.
    Description, as the server wrote it
    One leave request by id, with its status. GET /leave_requests/{id}.

    Annotations the server declares

    • title: Get leave request
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_absencesList approved absences (holiday and other leave) with employee, dates, half days, days deducted and cancelled flag.No findings

    Why it is in this group

    • The name "breathehr_list_absences" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List absences
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_benefitsList employee benefits (type, value, start/end) for the whole company, one employee or one department.No findings

    Why it is in this group

    • The name "breathehr_list_benefits" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List benefits
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_bonusesList bonus records (amount, date, description) for the whole company, one employee or one department.No findings

    Why it is in this group

    • The name "breathehr_list_bonuses" says "list": a word for reading.
    Description, as the server wrote it
    List bonus records (amount, date, description) for the whole company, one employee or one department. GET /bonuses, /employees/{id}/bonuses or /departments/{id}/bonuses.

    Annotations the server declares

    • title: List bonuses
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_change_requestsList employee self-service change requests (field, requested value, approval state) for all employees or one employee.No findings

    Why it is in this group

    • The name "breathehr_list_change_requests" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List change requests
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_departmentsList the company's departments (id, name).No findings

    Why it is in this group

    • The name "breathehr_list_departments" says "list": a word for reading.
    Description, as the server wrote it
    List the company's departments (id, name). Use the ids to filter absences, leave, sickness and pay. GET /departments.

    Annotations the server declares

    • title: List departments
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_divisionsList the company's divisions (id, name).No findings

    Why it is in this group

    • The name "breathehr_list_divisions" says "list": a word for reading.
    Description, as the server wrote it
    List the company's divisions (id, name). All of them are returned in one reply. GET /divisions.

    Annotations the server declares

    • title: List divisions
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_employee_jobsList job history records (job title, start/end dates, department, location) for all employees or one employee.No findings

    Why it is in this group

    • The name "breathehr_list_employee_jobs" says "list": a word for reading.
    Description, as the server wrote it
    List job history records (job title, start/end dates, department, location) for all employees or one employee. GET /employee_jobs.

    Annotations the server declares

    • title: List employee jobs
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_employeesList employees with job title, department, division, location, line manager, holiday approver, working pattern, join/leaving dates and status.No findings

    Why it is in this group

    • The name "breathehr_list_employees" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List employees
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_expense_claimsList expense claims (employee, total, state, approver) filtered by employee and state.No findings

    Why it is in this group

    • The name "breathehr_list_expense_claims" says "list": a word for reading.
    Description, as the server wrote it
    List expense claims (employee, total, state, approver) filtered by employee and state. GET /employee_expense_claims.

    Annotations the server declares

    • title: List expense claims
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_expensesList individual expense items (date, description, type, amount, VAT, project).No findings

    Why it is in this group

    • The name "breathehr_list_expenses" says "list": a word for reading.
    Description, as the server wrote it
    List individual expense items (date, description, type, amount, VAT, project). By default only unclaimed items; set include_claimed to see all. GET /employee_expenses.

    Annotations the server declares

    • title: List expenses
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_holiday_allowancesList the holiday allowance schemes (id, default flag, year_1 to year_10 = the allowance for each year of service, created_at, updated_at).No findings

    Why it is in this group

    • The name "breathehr_list_holiday_allowances" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List holiday allowances
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_leave_requestsList leave requests (pending, approved, rejected and cancelling requests) with employee, dates, half days, type, status and notes.No findings

    Why it is in this group

    • The name "breathehr_list_leave_requests" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List leave requests
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_locationsList the company's work locations (id, name).No findings

    Why it is in this group

    • The name "breathehr_list_locations" says "list": a word for reading.
    Description, as the server wrote it
    List the company's work locations (id, name). All of them are returned in one reply. GET /locations.

    Annotations the server declares

    • title: List locations
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_other_leave_reasonsList the reasons for non-holiday leave (e.g.No findings

    Why it is in this group

    • The name "breathehr_list_other_leave_reasons" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List other leave reasons
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_salariesList salary records (amount, basis, payment schedule, start date) for the whole company, one employee or one department.No findings

    Why it is in this group

    • The name "breathehr_list_salaries" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List salaries
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_sicknessesList sickness absence records (health data): employee, sickness type, dates, half days, days deducted, status (open, returned, closed…) and reason.No findings

    Why it is in this group

    • The name "breathehr_list_sicknesses" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List sickness records
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_training_coursesList employee training records (course name, type, status, dates, cost) for all employees or one employee.No findings

    Why it is in this group

    • The name "breathehr_list_training_courses" says "list": a word for reading.
    Description, as the server wrote it
    List employee training records (course name, type, status, dates, cost) for all employees or one employee. GET /employee_training_courses.

    Annotations the server declares

    • title: List training courses
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • breathehr_list_working_patternsList the working patterns (hours per weekday, total weekly hours, default flag).No findings

    Why it is in this group

    • The name "breathehr_list_working_patterns" says "list": a word for reading.
    Description, as the server wrote it
    List the working patterns (hours per weekday, total weekly hours, default flag). All of them are returned in one reply. GET /working_patterns.

    Annotations the server declares

    • title: List working patterns
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.4.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http breathe-hr https://breathe-hr.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__breathe-hr__breathehr_get_account",
      "mcp__breathe-hr__breathehr_list_departments",
      "mcp__breathe-hr__breathehr_list_divisions",
      "mcp__breathe-hr__breathehr_list_locations",
      "mcp__breathe-hr__breathehr_list_working_patterns",
      "mcp__breathe-hr__breathehr_list_holiday_allowances",
      "mcp__breathe-hr__breathehr_list_other_leave_reasons",
      "mcp__breathe-hr__breathehr_list_employees",
      "mcp__breathe-hr__breathehr_get_employee",
      "mcp__breathe-hr__breathehr_get_holiday_years",
      "mcp__breathe-hr__breathehr_list_absences",
      "mcp__breathe-hr__breathehr_list_leave_requests",
      "mcp__breathe-hr__breathehr_get_leave_request",
      "mcp__breathe-hr__breathehr_list_sicknesses",
      "mcp__breathe-hr__breathehr_list_salaries",
      "mcp__breathe-hr__breathehr_list_bonuses",
      "mcp__breathe-hr__breathehr_list_benefits",
      "mcp__breathe-hr__breathehr_list_employee_jobs",
      "mcp__breathe-hr__breathehr_list_training_courses",
      "mcp__breathe-hr__breathehr_list_expense_claims",
      "mcp__breathe-hr__breathehr_list_expenses",
      "mcp__breathe-hr__breathehr_list_change_requests"
    ],
    "ask": [],
    "deny": [
      "mcp__breathe-hr__breathehr_create_leave_request",
      "mcp__breathe-hr__breathehr_approve_leave_request",
      "mcp__breathe-hr__breathehr_reject_leave_request"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as breathe-hr. Review it before you use it.