HR WORKS MCP by usefulapi
Read persons, organization units, absences, job postings and applications in HR WORKS.
Should I use this
Quality & Safety
Findings (1)
- LOWin hrworks_list_organization_units
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"hrworks": {
"url": "https://hrworks.usefulapi.io/mcp"
}
}
}Remote endpoints
https://hrworks.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢hrworks_list_persons(organizationUnits, identifierType, onlyActive, onlyActiveOrganizationUnits)
List the persons in the company, or in the given organization units, grouped by organization unit. Use it to find a person identifier. HR WORKS API: GET /v2/persons.
Input Schema
{
"type": "object",
"properties": {
"organizationUnits": {
"description": "Organization unit identifiers (numbers by default, see identifierType). Only persons in these units are returned.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"identifierType": {
"description": "Type of the organizationUnits identifiers: number (default) or uuid.",
"type": "string",
"enum": [
"number",
"uuid"
]
},
"onlyActive": {
"description": "Only active records (default true). Set false to include records of people who have left the company.",
"type": "boolean"
},
"onlyActiveOrganizationUnits": {
"description": "Only persons in active organization units (default true). Set false to include persons without an active unit.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢hrworks_get_person(personIdentifier, personIdentifierType)
Get the base data of one person (names, personnel number, uuid, external ids). HR WORKS API: GET /v2/persons/{personIdentifier}.
Input Schema
{
"type": "object",
"properties": {
"personIdentifier": {
"type": "string",
"minLength": 1,
"description": "The person identifier. personIdentifierType says which kind of value this is."
},
"personIdentifierType": {
"description": "Kind of personIdentifier (default personnelNumber).",
"type": "string",
"enum": [
"personId",
"personnelNumber",
"personLicenseNumber",
"uuid",
"personIdentifierForKiosk"
]
}
},
"required": [
"personIdentifier"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢hrworks_list_organization_units
List the active organization units (departments, locations) with their number, uuid and name. HR WORKS API: GET /v2/organization-units.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢hrworks_list_absences(persons, usePersonnelNumbers, beginDate, endDate, types, ...)
List the absences (vacation, sickness and other absence types) of persons in a date interval. The interval may be one year at most. Paged: use nextPage. HR WORKS API: GET /v2/absences.
Input Schema
{
"type": "object",
"properties": {
"persons": {
"description": "Person identifiers: HR WORKS usernames by default, personnel numbers when usePersonnelNumbers is true.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"usePersonnelNumbers": {
"description": "Set true when the persons list holds personnel numbers instead of HR WORKS usernames.",
"type": "boolean"
},
"beginDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD, e.g. 2026-11-01."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD, e.g. 2026-11-01."
},
"types": {
"description": "Only absences of these absence type keys. Keys come from the absence types of the company.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"statusFilter": {
"description": "Only return records with one of these status values.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"onlyActive": {
"description": "Only active records (default true). Set false to include records of people who have left the company.",
"type": "boolean"
},
"page": {
"description": "Result page, starting at 1 (default 1). Pass the nextPage value of the previous answer to get more.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"beginDate",
"endDate"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢hrworks_list_posts(onlyActive, page)
List the job postings (posts) of the company. Active posts are the open job postings; each post lists its offers with publicationDate and validUntilDate. Paged: use nextPage. HR WORKS API: GET /v3/applicant-management/posts.
Input Schema
{
"type": "object",
"properties": {
"onlyActive": {
"description": "Only active records (default true). Set false to include records of people who have left the company.",
"type": "boolean"
},
"page": {
"description": "Result page, starting at 1 (default 1). Pass the nextPage value of the previous answer to get more.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢hrworks_list_job_applications(posts, statusFilter, page)
List the job applications, optionally for given posts and status values. Each page holds 50 applications. Paged: use nextPage. HR WORKS API: GET /v2/applicant-management/job-applications.
Input Schema
{
"type": "object",
"properties": {
"posts": {
"description": "Post identifiers to return applications for (from hrworks_list_posts).",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"statusFilter": {
"description": "Only return records with one of these status values.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"page": {
"description": "Result page, starting at 1 (default 1). Pass the nextPage value of the previous answer to get more.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence