100+ integrations are ready to connect to your AI.Connect your first MCP

BambooHR MCP server for your AI

Pull the employee directory, check who's out, approve or deny time off requests, add training records, and move candidates through the hiring pipeline — without opening the HR tab.

PopMCPBambooHR

Run the headcount by department report and tell me what changed since April

Supported BambooHR tools

Every read and write call across employees, time off, time tracking, hiring, goals and reporting, plus the record changes you can watch for.

bamboohr_create_goal

Create a goal for an employee (201 returns the goal).

bamboohr_list_employee_goals

List an employee's performance goals (returns {goals:[...]}).

bamboohr_update_goal

Update a goal (v1).

bamboohr_create_employee_training_record

Create a new training record for the specified employee (employeeId is a PATH param, not a body field).

bamboohr_list_employee_training_records

List all training records for a specific employee.

bamboohr_list_training_types

List all training types configured for the company.

bamboohr_add_employee

Create (add) a new employee.

bamboohr_get_changed_employees

List employee IDs that changed since a timestamp.

bamboohr_get_employee

Get a single employee by ID.

bamboohr_get_employee_directory

Get the company employee directory: all employees the caller can see, with the set of fields enabled for the directory.

bamboohr_list_employees

List employees as a cursor-paginated collection.

bamboohr_update_employee

Update an existing employee (partial/PATCH-style).

bamboohr_add_time_off_request

Create a time off request for an employee (PUT, no trailing slash).

bamboohr_change_time_off_request_status

Update (approve/deny/cancel) the status of an existing time off request (PUT).

bamboohr_estimate_time_off_balance

Estimate/calculate an employee's time off balances as of a date (the 'calculator' / future-balance projection).

bamboohr_get_whos_out

Get a date-sorted list of who is out (employee time off) plus company holidays for a period.

bamboohr_list_time_off_requests

List time off requests overlapping a date window.

bamboohr_change_application_status

Update the status of a job application.

bamboohr_get_application

Get the full details of a single job application by ID: applicant info (name, contact, address, education, social profiles), job/position details, status with full change history, custom questions and answers, attachments metadata (resume, cover letter as file IDs), application history, ratings, comments, emails, events, references, and desired salary.

bamboohr_get_custom_report_by_id

Execute a saved custom report by its integer id and return its data using the report's configured fields and filters.

bamboohr_list_applications

List job applications (candidates) in the ATS.

bamboohr_list_company_files

List all company file categories and the file metadata within each that the caller may see.

bamboohr_list_custom_reports

List saved custom reports available in the account.

bamboohr_list_datasets

DEPRECATED v1.

bamboohr_list_employee_files

List an employee's file categories and the file metadata within each.

bamboohr_list_jobs

List job opening summaries from the ATS.

bamboohr_query_dataset

DEPRECATED v1 (v2 successor is POST /api/v2/datasets/{datasetName}/data, outside the /v1/ base — see notes).

bamboohr_list_fields

List every employee field available in the account (standard + custom).

bamboohr_list_tables

List the tabular (history-table) fields available in the account, e.g.

bamboohr_list_time_off_policies

List the time off policies configured in the account, each with its id, associated time-off type id, name, and accrual/eligibility configuration.

bamboohr_list_time_off_types

List the time off types configured in the account (e.g.

bamboohr_create_webhook

Create a new event-based (permissioned) webhook.

bamboohr_list_webhook_monitor_fields

List the employee fields that can be monitored by a webhook (used to choose monitorFields when creating/updating).

bamboohr_list_webhooks

List all webhooks owned by the authenticated API user (event-based / permissioned webhooks).

bamboohr_add_employee_table_row

Add (append) a new row to a tabular employee data table by submitting field name/value pairs (JSON or XML).

bamboohr_get_employee_table_rows

Get all rows of a tabular (two-dimensional / time-series) employee data table for one employee.

bamboohr_update_employee_table_row

Update an existing row in a tabular employee data table by submitting the field name/value pairs to change (JSON or XML).

bamboohr_add_hour_record

Add a single time tracking hour record (legacy Hours API).

bamboohr_adjust_hour_record

Adjust/edit an existing time tracking hour record (legacy Hours API).

bamboohr_assign_employees_break_policy

Assign (add) employees to a break policy without removing existing assignments.

bamboohr_bulk_upsert_hour_records

Bulk add/edit time tracking hour records (legacy Hours API).

bamboohr_clock_in

Clock in an employee (Time Tracking add-on timesheets).

bamboohr_clock_out

Clock out a currently clocked-in employee (Time Tracking add-on timesheets).

bamboohr_create_break

Create a new break and associate it with the specified break policy.

bamboohr_create_break_policy

Create a break policy.

bamboohr_create_break_policy_suggestions

Generate AI break-policy recommendations.

bamboohr_create_project

Create a time tracking project.

bamboohr_create_project_task

Create a new task on the specified time tracking project.

bamboohr_create_shift_differential

Create a time tracking shift differential.

bamboohr_delete_break

Delete a time tracking break by its UUID.

bamboohr_delete_break_policy

Delete a break policy by its UUID.

bamboohr_delete_clock_entries

Delete one or more timesheet clock entries by ID (Time Tracking add-on).

bamboohr_delete_hour_entries

Delete one or more timesheet hour entries by ID (Time Tracking add-on).

bamboohr_delete_hour_record

Delete a time tracking hour record by its id (legacy Hours API).

bamboohr_delete_project

Delete a time tracking project by its ID.

bamboohr_delete_project_task

Delete a time tracking task by its ID.

bamboohr_delete_shift_differential

Delete a time tracking shift differential by its ID.

bamboohr_get_break

Retrieve a single time tracking break by its UUID.

bamboohr_get_break_policy

Retrieve a single break policy by its UUID.

bamboohr_get_hour_record

Retrieve a single time tracking hour record by its ID (legacy Hours API).

bamboohr_get_project

Retrieve a single time tracking project by its ID, including the list of assigned employees.

bamboohr_get_project_task

Retrieve a single time tracking task by its ID.

bamboohr_get_shift_differential

Retrieve a single time tracking shift differential by its ID.

bamboohr_list_break_assessments

List break assessments (paginated).

bamboohr_list_break_policies

List all break policies (paginated).

bamboohr_list_break_policy_breaks

List the breaks belonging to a break policy (paginated).

bamboohr_list_break_policy_employees

List employees assigned to a specific break policy (paginated).

bamboohr_list_employee_break_availabilities

Retrieve break availability information for an employee.

bamboohr_list_employee_break_policies

Retrieve break policies assigned to a specific employee.

bamboohr_list_project_tasks

List tasks for a time tracking project (paginated).

bamboohr_list_projects

List time tracking projects (paginated).

bamboohr_list_shift_differentials

List time tracking shift differentials (paginated).

bamboohr_list_timesheet_entries

List timesheet entries for all employees or a filtered subset within a date range (Time Tracking add-on).

bamboohr_replace_break_policy_breaks

Replace all breaks for a break policy.

bamboohr_set_break_policy_employees

Set (replace) the employee assignments for a break policy.

bamboohr_store_clock_entries

Bulk create or update timesheet clock entries (Time Tracking add-on).

bamboohr_store_hour_entries

Bulk create or update timesheet hour entries (Time Tracking add-on).

bamboohr_sync_break_policy

Full replacement of a break policy and its related data (breaks and employee assignments).

bamboohr_unassign_employees_break_policy

Unassign the specified employees from a break policy (removes their assignments without affecting the policy or other employees).

bamboohr_update_break

Partially update a time tracking break by its UUID (only provided fields change).

bamboohr_update_break_policy

Partially update a break policy by its UUID (only provided fields change).

bamboohr_update_project

Partially update a time tracking project by ID (only provided fields change).

bamboohr_update_project_task

Partially update a time tracking task by ID (at least one field required).

bamboohr_update_shift_differential

Partially update a time tracking shift differential by ID.

bamboohr_close_goal

Close a goal, moving it to closed status (201 returns the updated goal).

bamboohr_delete_goal_comment

Delete a single comment from a goal.

bamboohr_get_can_create_goals

Check whether the current API user is permitted to create goals for this employee.

bamboohr_get_goal_aggregate

Get a single goal with its full detail in one request: the goal plus its comments, alignment options, and the list of all persons who are shared on the goal or have commented on it.

bamboohr_get_goal_alignment_options

List the options a goal can be aligned with for this employee (company/team/manager goals).

bamboohr_get_goal_comments

List the comments on a goal.

bamboohr_get_goal_share_options

List the available people/options a goal can be shared with for this employee.

bamboohr_get_goals_aggregate

Get aggregate goal info for an employee in one call: the list of all goals, type counts, goal comment counts, and employees shared with goals.

bamboohr_reopen_goal

Reopen a previously closed goal, returning it to an active status.

bamboohr_update_goal_milestone_progress

Update the progress of a single milestone within a milestone-based goal.

bamboohr_update_goal_progress

Update the completion percentage of a simple (non-milestone) goal.

bamboohr_update_goal_shared_with

Update who a goal is shared with.

bamboohr_create_training_category

Create a new training category.

bamboohr_create_training_type

Create a new training type.

bamboohr_delete_employee_training_record

Delete an existing employee training record by record ID (path takes the training record ID, not the employee ID; no 'employee/' segment).

bamboohr_delete_training_category

Delete an existing training category by ID.

bamboohr_delete_training_type

Delete an existing training type by ID.

bamboohr_list_training_categories

List all training categories for the company.

bamboohr_update_employee_training_record

Update an existing employee training record by record ID (NOTE: the path takes the training record ID, NOT the employee ID, and has no 'employee/' segment).

bamboohr_update_training_category

Update the name of an existing training category by ID.

bamboohr_update_training_type

Update an existing training type by ID.

bamboohr_create_employee_dependent

Create an employee dependent.

bamboohr_delete_employee

Permanently delete an employee record and all associated data.

bamboohr_get_employee_dependent

Get a single employee dependent by its numeric dependent ID.

bamboohr_list_employee_dependents

List employee dependents.

bamboohr_update_employee_dependent

Update an employee dependent by numeric dependent ID (full replace).

bamboohr_add_time_off_history

Create a time off history item for an employee (used time or balance override).

bamboohr_adjust_time_off_balance

Add a balance adjustment for an employee's time off type (recorded as an override history item).

bamboohr_assign_time_off_policies

Assign time off policies to an employee (PUT).

bamboohr_list_employee_time_off_policies

List the time off policies currently assigned to a specific employee.

bamboohr_add_application_comment

Add a comment to a job application.

bamboohr_add_company_file_category

Create one or more company file categories (sections).

bamboohr_add_employee_file_category

Create one or more employee file categories (sections).

bamboohr_delete_company_file

Permanently delete a company file (irreversible).

bamboohr_delete_employee_file

Permanently delete an employee file (irreversible).

bamboohr_get_company_report

DEPRECATED (BambooHR says use Custom Reports > Get Report by ID, i.e.

bamboohr_get_dataset_field_options

DEPRECATED v1.

bamboohr_get_dataset_fields

DEPRECATED v1.

bamboohr_list_application_statuses

List the applicant/application statuses configured for the company.

bamboohr_list_company_locations

List company locations available for use in job opening creation.

bamboohr_list_hiring_leads

List the employees who can be assigned as a hiring lead on a job opening.

bamboohr_request_custom_report

DEPRECATED (BambooHR says use Datasets > Get Data from Dataset, i.e.

bamboohr_update_company_file

Update metadata for an existing company file: rename it, move it to another category, or toggle employee visibility.

bamboohr_update_employee_file

Update metadata for an existing employee file: rename it, move it to another category, or toggle employee visibility.

bamboohr_list_list_field_details

Get details for all list/multi-select fields in the account.

bamboohr_list_users

List all BambooHR users (login accounts) in the account, keyed by user id, with employeeId, firstName, lastName, email, status, and lastLogin.

bamboohr_update_list_field_values

Add, update, or archive the option values of a single manageable list field.

bamboohr_delete_webhook

Delete a webhook by id.

bamboohr_get_webhook

Get the full configuration of a single webhook owned by the authenticated user, including name, url, format, monitored fields (monitorFields) and post fields (postFields) when applicable, events, creation datetime, and last-sent datetime.

bamboohr_list_benefit_coverages

List all benefit coverage levels configured in the company (e.g.

bamboohr_list_benefit_deduction_types

List all payroll benefit deduction types available in the system.

bamboohr_list_company_benefits

List all active (non-deleted) company benefit plans for the account with summary-level info: plan name, category/type, vendor and deduction IDs, effective dates, and catch-up eligibility flags.

bamboohr_list_employee_benefits

List current and scheduled-future benefit enrollment records grouped by employee: enrollment status, deduction date ranges, currency, occurrences per year, cost-sharing details, and annual maximums.

bamboohr_list_member_benefit_events

List benefit coverage events for all members (employees and dependents).

bamboohr_list_member_benefits

List a paginated set of benefit enrollment records for all company members (employees and dependents) for a given calendar year, showing plan enrollments and the date ranges/statuses during which each was held.

bamboohr_update_webhook

Update (full replacement) a webhook by id.

bamboohr_delete_employee_table_row

Delete a specific row from an employee's tabular data table.

bamboohr_get_changed_employee_table_rows

Get tabular table data for all employees that has CHANGED since a given timestamp (an optimization to avoid downloading every employee's full table).

Connect BambooHR to your AI

Credentials off one BambooHR screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

Paste your Company subdomain and an API key from BambooHR (click your name in the lower-left of any page → API Keys → Add New Key). No OAuth app or client secret, and the key scopes the connection to that one company.

Company subdomainyour-company
API key••••••••••••3f7a
ConnectionVerified

Then just ask for the work

  • Run the headcount by department report and tell me what changed since April

    • list_custom_reports
    • get_custom_report_by_id
    • get_changed_employees
  • Approve every pending time off request for the support team this month

    • list_time_off_requests
    • get_employee_directory
    • change_time_off_request_status
  • Log the security onboarding training for everyone who finished it last week

    • list_training_types
    • get_employee_directory
    • create_employee_training_record
  • Which of our open job applications are for roles whose hiring manager is out next week?

    • list_jobs
    • list_applications
    • get_whos_out

Use BambooHR from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

BambooHR MCP server questions

What teams ask before putting BambooHR behind an AI client.

Where do I find the API key, and do I need to set up an OAuth app?

There is no OAuth app, redirect URL or client secret to configure. Click your name in the lower-left of any BambooHR page, go to API Keys and choose Add New Key — BambooHR shows the key on one screen. Paste it into the API key field along with your Company subdomain; calls then run server-side over HTTPS using HTTP Basic with the key as the username, and there is nothing to re-authenticate later.

What can the agent change, not just read?

Writes run across most of the account: adding and updating employee records, appending or editing rows in tabular tables such as job info, compensation and employment status, submitting time off requests and approving, denying or cancelling them, creating and updating goals, logging training records, moving job applications to a new status, and creating webhooks. It can also estimate a time off balance as of a future date before a decision is made. If you want writes held for review, keep approval-required-for-writes on.

Does it see every employee, or only what the key's owner can see?

The key's own permissions set the ceiling. The directory tool returns the employees the caller can see with the fields enabled for the directory, and the company and employee file tools return only the file metadata the caller may see. Webhook listings are limited to webhooks owned by the authenticated API user. Generate the key from an account with the access you actually want the agent to have.

How many BambooHR operations does this cover, and do they all load into my AI client?

The server exposes 142 operations across 12 API modules — 66 read and 76 write — plus 15 triggers PopMCP can watch. Only 37 load into the client by default so the tool list stays workable; the rest stay searchable and are pulled in when a request needs them. The largest modules are time tracking, goals, training, employees and time off.

Are there BambooHR API quirks the server handles for me?

Yes — a few endpoints are shaped oddly and the server sends them correctly. Creating a time off request is a PUT with no trailing slash, and a training record takes employeeId as a path parameter rather than a body field. The v1 dataset tools (bamboohr_list_datasets and bamboohr_query_dataset) are deprecated, with the v2 successor sitting outside the /v1/ base, so saved custom reports are the more reliable route for pulling structured data.

How does my agent find out when something changes in BambooHR?

Triggers cover three mechanisms. Webhook triggers fire when an employee record is updated or a specific watched field changes, delivering the new value with the change. Polled triggers catch employees added or removed, job and pay detail changes, and new job applications. Change-detection triggers cover time off requests submitted, approved or denied, new job openings, who's out for the days ahead, timesheet entries, new time tracking projects and benefit enrollment changes.

Do I have to run or host the BambooHR MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server — Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

Why do only 37 of the 142 tools load by default?

Loading 142 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 37-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. You can switch a connection to the full catalog at any time.

What is the difference between a tool and a trigger?

A tool is something your AI calls — there are 142 here. A trigger is something PopMCP watches for you: 15 BambooHR events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into BambooHR.

Connect BambooHR to your AI in minutes

Launch a hosted MCP endpoint for BambooHR, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP