officient-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OFFICIENT_BASE_URL | No | Override base URL for sandboxes/proxies | https://api.officient.io |
| OFFICIENT_TIMEOUT_MS | No | Per-request timeout in milliseconds | 30000 |
| OFFICIENT_ACCESS_TOKEN | Yes | Bearer token for Officient API; the server refuses to start without it |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| officient_list_endpointsA | Discover Officient API endpoints from the bundled spec (no network call, no scope needed). Returns compact one-liners: operationId | METHOD path | summary | required scope | read/WRITE. Filter by tag, HTTP method or free text, then feed an operationId into officient_describe_endpoint or officient_request. READ-ONLY. |
| officient_describe_endpointA | Full detail for one Officient endpoint from the bundled spec (no network call, no scope needed): path/query parameters, request body schema and a worked example, the required OAuth scope, the documentation prose and the doc URL. Use before calling officient_request. READ-ONLY. |
| officient_requestA | Escape hatch that reaches every one of the documented Officient endpoints by operationId. Input is validated against the bundled spec before anything is sent. Required scope depends on the endpoint — officient_describe_endpoint tells you which one, and whether it writes. CAN WRITE: this tool will happily fire POST/PATCH/PUT/DELETE endpoints, so check the endpoint first. Pagination is zero-indexed (page=0 is the first page). Prefer the dedicated officient_* tools when one exists. |
| officient_get_own_accountA | Information about the account behind the current access token (company, user, locale). Required scope: basics:read. READ-ONLY. |
| officient_list_peopleA | List employees, 30 per page. Pagination is zero-indexed: page 0 is the first page. Required scope: basics:read. READ-ONLY. |
| officient_search_peopleA | Find people by name, work email or national number. Supply at least one criterion. Required scope: personal.info:read. READ-ONLY. |
| officient_get_personA | Full detail for one employee: personal data, contract summary, team, manager and more. Required scope: personal.info:read. READ-ONLY. |
| officient_get_person_custom_fieldsA | Custom field values configured on one employee (text, number, date, money, email, select_option). Required scope: personal.info.custom.fields:read. READ-ONLY. |
| officient_get_weekly_scheduleA | The employee’s current weekly working schedule (scheduled minutes per weekday). Required scope: weekly.schedules:read. READ-ONLY. |
| officient_list_teamsA | All teams in the account. Returns id and name only — despite what the upstream docs imply, the response carries NO member list (verified live 2026-07). There is no team-detail endpoint either, so team membership is not readable over the API. To reconstruct the org structure, walk officient_list_people and call the "person-manager" operation per person via officient_request instead. Required scope: basics:read. READ-ONLY. |
| officient_get_day_calendarA | Time off, overtime and scheduled minutes for a single person on a single date. Required scope: calendar:read. READ-ONLY. |
| officient_get_month_calendarA | Time off, overtime and scheduled minutes for a single person for one month. Required scope: calendar:read. READ-ONLY. |
| officient_get_year_calendarA | Every day of the year for one person, each with scheduled_minutes and any events. Use days_with_events to keep the response small. Required scope: calendar:read. READ-ONLY. |
| officient_list_event_typesA | Custom event types (holiday, remote work, overtime types, …) available in a given year, with the custom_day_off_type_id needed to add a "custom" calendar event. Required scope: calendar:read. READ-ONLY. |
| officient_list_days_off_requestsA | Calendar (days off) requests across the account, 30 per page, zero-indexed pagination. Required scope: calendar:read. READ-ONLY. |
| officient_add_calendar_eventA | Add one or more events (day off, sick day, education, overtime, …) to a person’s calendar. All events in one call must fall in the same year. Set type="custom" together with custom_day_off_type_id from officient_list_event_types; omit that id for sick_day / education. duration_minutes may be the string "all_day". Required scope: calendar:write. WRITES DATA in Officient. |
| officient_overwrite_calendar_eventA | Idempotent upsert of a single event of a given type on a given date: overwrites the existing event of that type or creates it. Handy for syncing time tracking. The event type itself cannot be changed. CAVEAT (observed live 2026-07): when an event of that type already exists on that date with the same duration_minutes, the API returns {"success":1,"info":"no action taken"} and changes NOTHING — it does not compare start_time_minutes. To move an existing event's start time, delete it with officient_delete_calendar_event and re-add it with officient_add_calendar_event. Always read the calendar back to confirm the change actually landed. Required scope: calendar:write. WRITES DATA in Officient. |
| officient_delete_calendar_eventA | Permanently remove one calendar event (e.g. a day off) from a person’s calendar. Get the event_id from a calendar read tool first. Required scope: calendar:write. WRITES DATA in Officient. |
| officient_list_contractsA | All employment contracts in the account, 30 per page, zero-indexed pagination. Required scope: contracts:read. READ-ONLY. |
| officient_list_expensesA | Expenses for a whole year, or for one month when |
| officient_list_documentsA | Documents attached to an employee, asset or car. Zero-indexed pagination. Use officient_request with operationId "download-document" to get a download URL. Required scope: documents.read. READ-ONLY. |
| officient_list_vehiclesA | Vehicles in the fleet, optionally only those assigned to one person. Zero-indexed pagination. Required scope: basics:read. READ-ONLY. |
| officient_list_assetsA | Company assets (laptops, phones, badges, …), optionally filtered by owner. Zero-indexed pagination. Required scope: basics:read. READ-ONLY. |
| officient_list_webhooksA | Webhook subscriptions configured on the account. Officient POSTs {account, event_type, related_object_id} to the target URL and retries on non-200. Required scope: webhooks:read. READ-ONLY. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Every tool has a clearly distinct purpose, with no overlap. Even the calendar-related tools (get_day_calendar, get_month_calendar, add_calendar_event, etc.) are well-differentiated by granularity and action.
All tools follow a consistent 'officient_verb_noun' snake_case pattern. Verbs like list, get, search, add, overwrite, delete are used predictably, with no mixed conventions.
24 tools is appropriate for a comprehensive HR API covering people, calendar, expenses, contracts, and more. Each tool addresses a distinct operation, and the meta-tools (list_endpoints, describe_endpoint, request) add valuable discoverability without bloat.
The tool set covers most core HR workflows (people, calendar, expenses, contracts, etc.) with dedicated tools. Minor gaps exist (e.g., no create/update for people, no webhook management beyond listing), but the officient_request escape hatch mitigates these, and the surface handles primary use cases well.