Skip to main content
Glama
mikkmihkel

BambooHR MCP Server

by mikkmihkel

Employee report

bamboohr_employee_report
Read-onlyIdempotent

Creates a filtered employee report, pulling chosen fields for a specific department, location, division, or employee IDs, with automatic status and field validation.

Instructions

Pull chosen fields for a bounded group of employees in one call: e.g. hire date and a custom field such as shoe size for one department. Requires either employeeIds or a department, location or division filter (exact name, case-insensitive); company-wide reports are refused. At most the configured per-call record limit of rows is returned, otherwise the call is refused — narrow the filter. Only allow-listed and custom fields may be requested; pay, bank, birth date and similar fields are refused. id, displayName and status are always included. Inactive (terminated) employees are excluded unless includeInactive is true. missingFields lists fields BambooHR did not return, usually because the API key may not see them or the name is wrong; check names with bamboohr_list_fields.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to include.
divisionNoOnly employees in this division (exact name, case-insensitive).
locationNoOnly employees in this location (exact name, case-insensitive).
departmentNoOnly employees in this department (exact name, case-insensitive).
employeeIdsNoRestrict to these employee ids (at most the per-call record limit).
includeInactiveNoInclude employees whose status is not Active. Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv4.1.0
    • addedInput schema / properties / department
      Added value: +{
      +  "description": "Only employees in this department (exact name, case-insensitive).",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / division
      Added value: +{
      +  "$ref": "#/properties/department",
      +  "description": "Only employees in this division (exact name, case-insensitive)."
      +}
    • changedInput schema / properties / employeeIds / description
      Previous value: -"Restrict to these employee ids."New value: +"Restrict to these employee ids (at most the per-call record limit)."
    • addedInput schema / properties / location
      Added value: +{
      +  "$ref": "#/properties/department",
      +  "description": "Only employees in this location (exact name, case-insensitive)."
      +}
  2. First observedv3.0.0

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly and idempotent annotations, the description discloses important runtime behavior: calls are refused when the row limit is exceeded, sensitive fields are refused, inactive employees are excluded unless includeInactive is true, and missingFields indicates fields the API key could not return. This gives the agent a detailed failure model without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense but every sentence earns its place: purpose and example first, then filter requirements, limits, field restrictions, and edge cases in a logical sequence. No content is redundant with the schema or annotations, and the length is justified by the number of behavioral constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with no output schema, the description covers the essential invocation contract: filter prerequisites, hard refusals, the per-call record limit, always-included fields, inactive handling, and how to interpret missingFields. The agent has enough information to select parameters, anticipate failures, and validate field names using the named sibling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds mutually exclusive filter semantics ('Requires either employeeIds or a department, location or division filter') and notes that id, displayName and status are always included. It also explains that 'fields' refers to allow-listed or custom fields, and that employeeIds is capped by the per-call limit, materially enriching the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Pull chosen fields for a bounded group of employees in one call', illustrated with a concrete example (hire date plus a custom field for one department). It further distinguishes itself from company-wide or single-employee siblings by stating 'company-wide reports are refused' and requiring a bounded filter, so an agent can confidently select it over alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly defines when the tool can be used: requires employeeIds or a department/location/division filter, and explicitly says company-wide reports are refused. It also gives a when-not condition for sensitive fields ('pay, bank, birth date ... are refused') and directs the agent to bamboohr_list_fields for name validation, providing a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.