# TalentHR MCP by usefulapi (remote · talenthr.usefulapi.io)

Read employees, leave, recruiting and reports; book or decide leave and add applicant notes.

- Trust score: 18/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `talenthr.usefulapi.io`: 18/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr.md), [page](https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr)

## Channel facts

- Endpoint: `https://talenthr.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.7.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the TalentHR MCP by usefulapi server?

TalentHR MCP by usefulapi is a hosted endpoint at https://talenthr.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-talenthr 'https://talenthr.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-talenthr": {
      "url": "https://talenthr.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-talenthr": {
      "type": "http",
      "url": "https://talenthr.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-talenthr]
url = "https://talenthr.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-talenthr": {
      "type": "remote",
      "url": "https://talenthr.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-talenthr --url 'https://talenthr.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-talenthr:
    url: "https://talenthr.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-talenthr": {
      "Transport": "http",
      "Url": "https://talenthr.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-talenthr -t streamable-http -u 'https://talenthr.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-talenthr": {
      "type": "http",
      "url": "https://talenthr.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-02 (score 18, −47)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.03 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-11-01 (score 65, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-31 (score 65)

First indexed and scored.

## MCP tools (29)

### `talenthr_list_employees` (~238 tokens)

List employees (directory)

List the company's employees from the TalentHR directory with name, e-mail, job title, department, division, location, employment status, manager id, hire date and phone. Paged (limit max 100): use next_offset to continue. Filter by location, department, division or employment status (emp_state) with `filter`; get the ids from talenthr_get_directory_filters. Use `custom_fields` to add extra field slugs (from the company's custom fields). Returns personal data; summarize only what the user asked for.

Input parameters:

- `custom_fields` (string): Comma-separated custom field slugs to include, e.g. address,city,custom-field-001.
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.

### `talenthr_get_directory_filters` (~50 tokens)

Get directory filters

List the valid filter options (departments, divisions, locations, employment statuses) with their ids, to build the `filter` argument of talenthr_list_employees and talenthr_get_calendar.

### `talenthr_get_employee` (~95 tokens)

Get an employee

Get one employee's profile: birth date, hire and termination date, personal e-mail, work phone, address, nationality, gender, job title, department, division, location, role, seniority and custom fields. Contains sensitive personal data (it can include the SSN); only fetch it when the user asked about that person.

Input parameters:

- `employee_id` (integer, required): The employee id (from talenthr_list_employees).

### `talenthr_get_employee_job` (~71 tokens)

Get an employee's job history

Get one employee's job information: employment status history, manager records, job records (title, department, location over time), compensation records and benefits. Compensation is sensitive; only fetch it when the user asked.

Input parameters:

- `employee_id` (integer, required): The employee id (from talenthr_list_employees).

### `talenthr_get_organization_chart` (~37 tokens)

Get the organization chart

List all current employees with their manager (reports_to_employee_id), job title and role, to answer who reports to whom.

### `talenthr_list_departments` (~37 tokens)

List departments

List all departments of the company with their ids (the ids are what talenthr_list_employees filters and employee records refer to).

### `talenthr_list_divisions` (~37 tokens)

List divisions

List all divisions of the company with their ids (the ids are what talenthr_list_employees filters and employee records refer to).

### `talenthr_list_locations` (~43 tokens)

List locations

List all locations (with address and remote flag) of the company with their ids (the ids are what talenthr_list_employees filters and employee records refer to).

### `talenthr_list_job_titles` (~38 tokens)

List job titles

List all job titles of the company with their ids (the ids are what talenthr_list_employees filters and employee records refer to).

### `talenthr_list_time_off_types` (~57 tokens)

List time off types

List the time off types (vacation, sick leave, ...) with id, yearly budget, whether approval is needed and whether it is paid. The id is needed to book a request with talenthr_create_time_off_request.

### `talenthr_list_employee_time_off_requests` (~134 tokens)

List an employee's time off requests

List one employee's time off requests (dates, type, days, approved or pending, canceled). Paged: use next_offset to continue. A request with approved=null is still pending.

Input parameters:

- `employee_id` (integer, required): The employee id (from talenthr_list_employees).
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `sort` (string): Column to sort by: id, timeoff_type_name, created_at.

### `talenthr_get_employee_time_off_budgets` (~115 tokens)

Get an employee's time off balances

Get one employee's time off budgets per type and cycle: budget, original budget, used days and accrual figures, i.e. how many days they have left. Optionally limit to the current cycle (active) or one cycle id.

Input parameters:

- `active` (boolean): true = only the currently active time off cycle.
- `employee_id` (integer, required): The employee id (from talenthr_list_employees).
- `time_off_cycle_id` (integer): Limit to one time off cycle id.

### `talenthr_get_calendar` (~199 tokens)

Get the time off calendar

Who is off when: employees with their time off requests and the holidays for a date range. Without end_date the range runs to the end of the start month (max 2 years). Without a filter it includes every employee (also terminated). Filter with keys time_off (pending, approved), department, division, location, emp_state and time_off_type (e.g. time_off=pending,approved;department=6), or one employee with employee_id.

Input parameters:

- `employee_id` (integer): Only this employee's calendar.
- `end_date` (string): Last day, yyyy-mm-dd (default: end of the start month).
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `start_date` (string, required): First day, yyyy-mm-dd.

### `talenthr_list_holidays` (~52 tokens)

List holidays

List the company holidays of a year (current year by default) with date and who they apply to.

Input parameters:

- `year` (integer): Year, e.g. 2026 (default: this year).

### `talenthr_list_benefits` (~110 tokens)

List benefits

List the company's benefits with category, cost, dates and who they are required for. Optional `filter` with keys location, department, division, job_title, emp_state and employee (e.g. location=36;emp_state=1,2).

Input parameters:

- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.

### `talenthr_get_employee_benefits` (~47 tokens)

Get an employee's benefits

List the benefits one employee has (category, cost, start and end date).

Input parameters:

- `employee_id` (integer, required): The employee id (from talenthr_list_employees).

### `talenthr_list_assets` (~221 tokens)

List company assets

List the company's assets (laptops, phones, subscriptions, memberships) with status, category, serial number, cost, purchase and warranty dates. Paged: use next_offset to continue. `search` matches name, description or category; `filter` takes status and category ids (e.g. status=1,2;category=19).

Input parameters:

- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `order` (string): Sort direction.
- `search` (string)
- `sort` (string): Column to sort by: created_at, name, category, location, department, division, used_by, serial_number, warranty_end_date.

### `talenthr_get_employee_assets` (~128 tokens)

Get an employee's assets

List the assets (inventory and memberships) assigned to one employee. Paged: use next_offset to continue.

Input parameters:

- `employee_id` (integer, required): The employee id (from talenthr_list_employees).
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `order` (string): Sort direction.
- `sort` (string): Column to sort by: assing_date, name, category, type, serial_number.

### `talenthr_list_job_positions` (~48 tokens)

List job positions

List the company's job positions (open and closed) with title, status, location, department, publish date and the hiring steps. The id is used to list a position's applicants.

### `talenthr_list_job_position_applicants` (~153 tokens)

List applicants of a job position

List the applicants of one job position with contact data, current hiring step and whether they are disqualified. Paged: use next_offset to continue. `search` matches first name, last name and e-mail.

Input parameters:

- `job_position_id` (integer, required): The job position id (from talenthr_list_job_positions).
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `order` (string): Sort direction.
- `search` (string)
- `sort` (string): Column to sort by: name, created_at.

### `talenthr_list_applicants` (~149 tokens)

List all applicants

List every candidate across all job positions with contact data and the number of applications. Paged: use next_offset to continue. `search` matches first name, last name and e-mail; `starred_only` returns only the starred candidates (the talent pool).

Input parameters:

- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `order` (string): Sort direction.
- `search` (string)
- `sort` (string): Column to sort by: name, created_at.
- `starred_only` (boolean)

### `talenthr_get_applicant` (~66 tokens)

Get an applicant

Get one candidate with contact data, description, CV info and all applications with the hiring step each one is in. The application ids are used by talenthr_create_applicant_note.

Input parameters:

- `applicant_id` (integer, required): The applicant id (from talenthr_list_applicants).

### `talenthr_get_headcount_report` (~188 tokens)

Get the headcount report

Headcount per month over a period (total and optionally grouped by gender, location, department, division, ...), plus the current headcount.

Input parameters:

- `end_date` (string): Custom range end, yyyy-mm-dd.
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `group_by` (string): Break the headcount down by this dimension.
- `period` (string): Reporting period: l12m (last 12 months) or a 4-digit year (the current or the previous calendar year). Alternatively pass start_date and end_date (max 36 months).
- `start_date` (string): Custom range start, yyyy-mm-dd (use with end_date instead of period).

### `talenthr_get_hires_leaves_report` (~160 tokens)

Get the hires and leaves report

Hires, terminations and attrition rate per month over a period.

Input parameters:

- `end_date` (string): Custom range end, yyyy-mm-dd.
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `period` (string): Reporting period: l12m (last 12 months) or a 4-digit year (the current or the previous calendar year). Alternatively pass start_date and end_date (max 36 months).
- `start_date` (string): Custom range start, yyyy-mm-dd (use with end_date instead of period).

### `talenthr_get_time_off_report` (~167 tokens)

Get the time off report

Approved, non-canceled time off summarized per month and per weekday, split by time off type, for a period.

Input parameters:

- `end_date` (string): Custom range end, yyyy-mm-dd.
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `period` (string): Reporting period: l12m (last 12 months) or a 4-digit year (the current or the previous calendar year). Alternatively pass start_date and end_date (max 36 months).
- `start_date` (string): Custom range start, yyyy-mm-dd (use with end_date instead of period).

### `talenthr_list_time_tracking_entries` (~271 tokens)

List time tracking entries

List time tracking entries across all employees (start, end, duration, tags) for a period or date range. Paged: use next_offset to continue. working_now=true lists only running timers. Needs a key whose user may see everyone's time tracking.

Input parameters:

- `end_date` (string): Range end, yyyy-mm-dd.
- `filter` (string): Filter: key=comma-separated ids, keys separated by ';', e.g. location=36;emp_state=1,2,3. Valid keys and ids come from talenthr_get_directory_filters.
- `limit` (integer): Rows per page, 1-100 (default 10).
- `offset` (integer): Row offset, 0-based (default 0). Use next_offset from the previous reply.
- `order` (string): Sort direction.
- `period` (string): Preset period (default today when no dates are given). Alternatively pass start_date and end_date (max 36 months).
- `search` (string)
- `sort` (string): Column to sort by: time, started_at, ended_at, name, tag, location.
- `start_date` (string): Range start, yyyy-mm-dd.
- `working_now` (boolean): true = only entries that are running right now.

### `talenthr_create_time_off_request` (~323 tokens)

Book a time off request

WRITE: book a time off request for an employee (talenthr_list_time_off_types gives the type id). Unless preapproved=true, TalentHR automatically E-MAILS THE EMPLOYEE'S MANAGER to approve or reject it. preapproved=true auto-approves it when the key's user is allowed to (so no manager decides): only use it when the user explicitly said the time off is already approved. Dates must be within one year from today and inside a time off cycle. Optionally give amount_options (days per date: 1, 0.5, 0 for non-working days; every date from start to end needs a value); when omitted TalentHR works it out. Cannot be undone through this server.

Input parameters:

- `amount_options` (object): Per-day amounts keyed by yyyy-mm-dd, e.g. {"2026-11-02":1,"2026-11-03":0.5}. Must cover every date from start_date to end_date.
- `employee_id` (integer, required): The employee id (from talenthr_list_employees).
- `end_date` (string, required): Last day off (inclusive), yyyy-mm-dd.
- `note` (string): Note for the approver (max 255 characters).
- `preapproved` (boolean): true = auto-approve (no manager e-mail decision). Default false.
- `start_date` (string, required): First day off, yyyy-mm-dd.
- `timeoff_type_id` (integer, required): Time off type id (from talenthr_list_time_off_types).

### `talenthr_reply_time_off_request` (~134 tokens)

Approve or reject a time off request

WRITE: approve (accept=true) or reject (accept=false) a pending time off request. TalentHR automatically E-MAILS THE EMPLOYEE the decision. A request that was already answered or canceled cannot be answered again. Only do this when the user explicitly asked for that decision on that request (find ids with talenthr_list_employee_time_off_requests or talenthr_get_calendar).

Input parameters:

- `accept` (boolean, required): true = approve, false = reject.
- `employee_id` (integer, required): The id of the employee who made the request.
- `time_off_request_id` (integer, required): The time off request id.

### `talenthr_create_applicant_note` (~127 tokens)

Add a note to a job application

WRITE: add an internal note to a job application (visible to the hiring team in TalentHR; no one is e-mailed). Needs the job position id and the application id (talenthr_get_applicant lists an applicant's applications with their job_position_id). Notes cannot be edited or deleted through this server.

Input parameters:

- `application_id` (integer, required): The application id (from talenthr_get_applicant).
- `job_position_id` (integer, required): The job position id of the application.
- `note_text` (string, required): The note text (max 30000 characters).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr#diagnostics

## Score history

- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 65
- 2026-10-31: 65

## Common questions

### What is the TalentHR MCP by usefulapi server?

TalentHR MCP by usefulapi is listed in the public MCP registry as io.usefulapi/talenthr. Read employees, leave, recruiting and reports; book or decide leave and add applicant notes. This page covers its hosted endpoint (https://talenthr.usefulapi.io/mcp).

### Is the TalentHR MCP by usefulapi server safe to use?

TalentHR MCP by usefulapi scores 18 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the TalentHR MCP by usefulapi server expose?

TalentHR MCP by usefulapi exposes 29 tools: talenthr_list_employees, talenthr_get_directory_filters, talenthr_get_employee, talenthr_get_employee_job, talenthr_get_organization_chart, and 24 more. Their descriptions and schemas cost roughly 3,495 tokens of context every time the server is loaded.

### Does the TalentHR MCP by usefulapi server require authentication?

Its publisher declares no required credentials for TalentHR MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the TalentHR MCP by usefulapi server still maintained?

TalentHR MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the TalentHR MCP by usefulapi server?

VerifyMCP ran 4 checks on TalentHR MCP by usefulapi, covering TLS certificate, HSTS header, DNSSEC and Transport. 7 items could not be completed, a gap on our side rather than a finding about TalentHR MCP by usefulapi: Authorization, HTTPS, Schema quality, Stability and 3 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://talenthr.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/talenthr/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-talenthr/talenthr
