bamboohr_create_ goalCreate a goal for an employee (201 returns the goal).
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
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_ goalCreate a goal for an employee (201 returns the goal).
bamboohr_list_ employee_ goalsList an employee's performance goals (returns {goals:[...]}).
bamboohr_update_ goalUpdate a goal (v1).
bamboohr_create_ employee_ training_ recordCreate a new training record for the specified employee (employeeId is a PATH param, not a body field).
bamboohr_list_ employee_ training_ recordsList all training records for a specific employee.
bamboohr_list_ training_ typesList all training types configured for the company.
bamboohr_add_ employeeCreate (add) a new employee.
bamboohr_get_ changed_ employeesList employee IDs that changed since a timestamp.
bamboohr_get_ employeeGet a single employee by ID.
bamboohr_get_ employee_ directoryGet the company employee directory: all employees the caller can see, with the set of fields enabled for the directory.
bamboohr_list_ employeesList employees as a cursor-paginated collection.
bamboohr_update_ employeeUpdate an existing employee (partial/PATCH-style).
bamboohr_add_ time_ off_ requestCreate a time off request for an employee (PUT, no trailing slash).
bamboohr_change_ time_ off_ request_ statusUpdate (approve/deny/cancel) the status of an existing time off request (PUT).
bamboohr_estimate_ time_ off_ balanceEstimate/calculate an employee's time off balances as of a date (the 'calculator' / future-balance projection).
bamboohr_get_ whos_ outGet a date-sorted list of who is out (employee time off) plus company holidays for a period.
bamboohr_list_ time_ off_ requestsList time off requests overlapping a date window.
bamboohr_change_ application_ statusUpdate the status of a job application.
bamboohr_get_ applicationGet 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_ idExecute a saved custom report by its integer id and return its data using the report's configured fields and filters.
bamboohr_list_ applicationsList job applications (candidates) in the ATS.
bamboohr_list_ company_ filesList all company file categories and the file metadata within each that the caller may see.
bamboohr_list_ custom_ reportsList saved custom reports available in the account.
bamboohr_list_ datasetsDEPRECATED v1.
bamboohr_list_ employee_ filesList an employee's file categories and the file metadata within each.
bamboohr_list_ jobsList job opening summaries from the ATS.
bamboohr_query_ datasetDEPRECATED v1 (v2 successor is POST /api/v2/datasets/{datasetName}/data, outside the /v1/ base — see notes).
bamboohr_list_ fieldsList every employee field available in the account (standard + custom).
bamboohr_list_ tablesList the tabular (history-table) fields available in the account, e.g.
bamboohr_list_ time_ off_ policiesList 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_ typesList the time off types configured in the account (e.g.
bamboohr_create_ webhookCreate a new event-based (permissioned) webhook.
bamboohr_list_ webhook_ monitor_ fieldsList the employee fields that can be monitored by a webhook (used to choose monitorFields when creating/updating).
bamboohr_list_ webhooksList all webhooks owned by the authenticated API user (event-based / permissioned webhooks).
bamboohr_add_ employee_ table_ rowAdd (append) a new row to a tabular employee data table by submitting field name/value pairs (JSON or XML).
bamboohr_get_ employee_ table_ rowsGet all rows of a tabular (two-dimensional / time-series) employee data table for one employee.
bamboohr_update_ employee_ table_ rowUpdate an existing row in a tabular employee data table by submitting the field name/value pairs to change (JSON or XML).
bamboohr_add_ hour_ recordAdd a single time tracking hour record (legacy Hours API).
bamboohr_adjust_ hour_ recordAdjust/edit an existing time tracking hour record (legacy Hours API).
bamboohr_assign_ employees_ break_ policyAssign (add) employees to a break policy without removing existing assignments.
bamboohr_bulk_ upsert_ hour_ recordsBulk add/edit time tracking hour records (legacy Hours API).
bamboohr_clock_ inClock in an employee (Time Tracking add-on timesheets).
bamboohr_clock_ outClock out a currently clocked-in employee (Time Tracking add-on timesheets).
bamboohr_create_ breakCreate a new break and associate it with the specified break policy.
bamboohr_create_ break_ policyCreate a break policy.
bamboohr_create_ break_ policy_ suggestionsGenerate AI break-policy recommendations.
bamboohr_create_ projectCreate a time tracking project.
bamboohr_create_ project_ taskCreate a new task on the specified time tracking project.
bamboohr_create_ shift_ differentialCreate a time tracking shift differential.
bamboohr_delete_ breakDelete a time tracking break by its UUID.
bamboohr_delete_ break_ policyDelete a break policy by its UUID.
bamboohr_delete_ clock_ entriesDelete one or more timesheet clock entries by ID (Time Tracking add-on).
bamboohr_delete_ hour_ entriesDelete one or more timesheet hour entries by ID (Time Tracking add-on).
bamboohr_delete_ hour_ recordDelete a time tracking hour record by its id (legacy Hours API).
bamboohr_delete_ projectDelete a time tracking project by its ID.
bamboohr_delete_ project_ taskDelete a time tracking task by its ID.
bamboohr_delete_ shift_ differentialDelete a time tracking shift differential by its ID.
bamboohr_get_ breakRetrieve a single time tracking break by its UUID.
bamboohr_get_ break_ policyRetrieve a single break policy by its UUID.
bamboohr_get_ hour_ recordRetrieve a single time tracking hour record by its ID (legacy Hours API).
bamboohr_get_ projectRetrieve a single time tracking project by its ID, including the list of assigned employees.
bamboohr_get_ project_ taskRetrieve a single time tracking task by its ID.
bamboohr_get_ shift_ differentialRetrieve a single time tracking shift differential by its ID.
bamboohr_list_ break_ assessmentsList break assessments (paginated).
bamboohr_list_ break_ policiesList all break policies (paginated).
bamboohr_list_ break_ policy_ breaksList the breaks belonging to a break policy (paginated).
bamboohr_list_ break_ policy_ employeesList employees assigned to a specific break policy (paginated).
bamboohr_list_ employee_ break_ availabilitiesRetrieve break availability information for an employee.
bamboohr_list_ employee_ break_ policiesRetrieve break policies assigned to a specific employee.
bamboohr_list_ project_ tasksList tasks for a time tracking project (paginated).
bamboohr_list_ projectsList time tracking projects (paginated).
bamboohr_list_ shift_ differentialsList time tracking shift differentials (paginated).
bamboohr_list_ timesheet_ entriesList timesheet entries for all employees or a filtered subset within a date range (Time Tracking add-on).
bamboohr_replace_ break_ policy_ breaksReplace all breaks for a break policy.
bamboohr_set_ break_ policy_ employeesSet (replace) the employee assignments for a break policy.
bamboohr_store_ clock_ entriesBulk create or update timesheet clock entries (Time Tracking add-on).
bamboohr_store_ hour_ entriesBulk create or update timesheet hour entries (Time Tracking add-on).
bamboohr_sync_ break_ policyFull replacement of a break policy and its related data (breaks and employee assignments).
bamboohr_unassign_ employees_ break_ policyUnassign the specified employees from a break policy (removes their assignments without affecting the policy or other employees).
bamboohr_update_ breakPartially update a time tracking break by its UUID (only provided fields change).
bamboohr_update_ break_ policyPartially update a break policy by its UUID (only provided fields change).
bamboohr_update_ projectPartially update a time tracking project by ID (only provided fields change).
bamboohr_update_ project_ taskPartially update a time tracking task by ID (at least one field required).
bamboohr_update_ shift_ differentialPartially update a time tracking shift differential by ID.
bamboohr_close_ goalClose a goal, moving it to closed status (201 returns the updated goal).
bamboohr_delete_ goal_ commentDelete a single comment from a goal.
bamboohr_get_ can_ create_ goalsCheck whether the current API user is permitted to create goals for this employee.
bamboohr_get_ goal_ aggregateGet 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_ optionsList the options a goal can be aligned with for this employee (company/team/manager goals).
bamboohr_get_ goal_ commentsList the comments on a goal.
bamboohr_get_ goal_ share_ optionsList the available people/options a goal can be shared with for this employee.
bamboohr_get_ goals_ aggregateGet 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_ goalReopen a previously closed goal, returning it to an active status.
bamboohr_update_ goal_ milestone_ progressUpdate the progress of a single milestone within a milestone-based goal.
bamboohr_update_ goal_ progressUpdate the completion percentage of a simple (non-milestone) goal.
bamboohr_update_ goal_ shared_ withUpdate who a goal is shared with.
bamboohr_create_ training_ categoryCreate a new training category.
bamboohr_create_ training_ typeCreate a new training type.
bamboohr_delete_ employee_ training_ recordDelete an existing employee training record by record ID (path takes the training record ID, not the employee ID; no 'employee/' segment).
bamboohr_delete_ training_ categoryDelete an existing training category by ID.
bamboohr_delete_ training_ typeDelete an existing training type by ID.
bamboohr_list_ training_ categoriesList all training categories for the company.
bamboohr_update_ employee_ training_ recordUpdate 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_ categoryUpdate the name of an existing training category by ID.
bamboohr_update_ training_ typeUpdate an existing training type by ID.
bamboohr_create_ employee_ dependentCreate an employee dependent.
bamboohr_delete_ employeePermanently delete an employee record and all associated data.
bamboohr_get_ employee_ dependentGet a single employee dependent by its numeric dependent ID.
bamboohr_list_ employee_ dependentsList employee dependents.
bamboohr_update_ employee_ dependentUpdate an employee dependent by numeric dependent ID (full replace).
bamboohr_add_ time_ off_ historyCreate a time off history item for an employee (used time or balance override).
bamboohr_adjust_ time_ off_ balanceAdd a balance adjustment for an employee's time off type (recorded as an override history item).
bamboohr_assign_ time_ off_ policiesAssign time off policies to an employee (PUT).
bamboohr_list_ employee_ time_ off_ policiesList the time off policies currently assigned to a specific employee.
bamboohr_add_ application_ commentAdd a comment to a job application.
bamboohr_add_ company_ file_ categoryCreate one or more company file categories (sections).
bamboohr_add_ employee_ file_ categoryCreate one or more employee file categories (sections).
bamboohr_delete_ company_ filePermanently delete a company file (irreversible).
bamboohr_delete_ employee_ filePermanently delete an employee file (irreversible).
bamboohr_get_ company_ reportDEPRECATED (BambooHR says use Custom Reports > Get Report by ID, i.e.
bamboohr_get_ dataset_ field_ optionsDEPRECATED v1.
bamboohr_get_ dataset_ fieldsDEPRECATED v1.
bamboohr_list_ application_ statusesList the applicant/application statuses configured for the company.
bamboohr_list_ company_ locationsList company locations available for use in job opening creation.
bamboohr_list_ hiring_ leadsList the employees who can be assigned as a hiring lead on a job opening.
bamboohr_request_ custom_ reportDEPRECATED (BambooHR says use Datasets > Get Data from Dataset, i.e.
bamboohr_update_ company_ fileUpdate metadata for an existing company file: rename it, move it to another category, or toggle employee visibility.
bamboohr_update_ employee_ fileUpdate metadata for an existing employee file: rename it, move it to another category, or toggle employee visibility.
bamboohr_list_ list_ field_ detailsGet details for all list/multi-select fields in the account.
bamboohr_list_ usersList all BambooHR users (login accounts) in the account, keyed by user id, with employeeId, firstName, lastName, email, status, and lastLogin.
bamboohr_update_ list_ field_ valuesAdd, update, or archive the option values of a single manageable list field.
bamboohr_delete_ webhookDelete a webhook by id.
bamboohr_get_ webhookGet 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_ coveragesList all benefit coverage levels configured in the company (e.g.
bamboohr_list_ benefit_ deduction_ typesList all payroll benefit deduction types available in the system.
bamboohr_list_ company_ benefitsList 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_ benefitsList 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_ eventsList benefit coverage events for all members (employees and dependents).
bamboohr_list_ member_ benefitsList 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_ webhookUpdate (full replacement) a webhook by id.
bamboohr_delete_ employee_ table_ rowDelete a specific row from an employee's tabular data table.
bamboohr_get_ changed_ employee_ table_ rowsGet tabular table data for all employees that has CHANGED since a given timestamp (an optimization to avoid downloading every employee's full table).
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.
your-company••••••••••••3f7aRead-only suits headcount reporting. With full access, turn on approval for writes so pay and job info edits, time off approvals and application status changes wait for a human. The rest of the catalog stays searchable.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your BambooHR credential never leaves the server.
app.popmcp.com/mcp/…Ask for something harmless before you turn writes on. Once it comes back clean, widen the tool set or switch the connection to full access.
Run the headcount by department report and tell me what changed since April
bamboohr_list_custom_reportsok
Then just ask for the work
“Run the headcount by department report and tell me what changed since April”
“Approve every pending time off request for the support team this month”
“Log the security onboarding training for everyone who finished it last week”
“Which of our open job applications are for roles whose hiring manager is out next week?”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting BambooHR behind an AI client.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Launch a hosted MCP endpoint for BambooHR, keep tool access under control, and start testing real workflow prompts right away.