HR WORKS MCP by usefulapi

Read persons, organization units, absences, job postings and applications in HR WORKS.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
83%
Naming quality
77%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'hrworks_list_organization_units' name length outside 3-30 rangein hrworks_list_organization_units

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,286Tokens (tool definitions)
~1.8 KBTypical response size
Moderate attention impact (1.00% of 128k context)

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-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools