intelliHR MCP by usefulapi
io.usefulapi/intellihrusefulapi.iostreamable-httpv1.0.0Scanned
Read intelliHR people, jobs, leave, skills and training; create and update people records.
22 tools: 1 can delete or cancel things, 1 do something that can't be undone, 2 change things and 18 only read.
- Reads private data · 3
- Reads text others write · 22
- Can send data out · 1
- 1 finding
Anlyon alternative
4 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
22 tools
Deletes or cancels 1Claude Code: deny
intellihr_update_personWRITE: change fields on an existing person (only the fields you pass change): names, date of birth, gender, employee number, title and emergency contact.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_update_person" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it WRITE: change fields on an existing person (only the fields you pass change): names, date of birth, gender, employee number, title and emergency contact. Contact details, addresses and jobs are not changed by this tool. PATCH /people/{id}.
Annotations the server declares
- title: Update person
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Can't be undone 1Claude Code: ask
intellihr_list_pay_gradesThe pay grades and their rates, optionally as at a date.Reads text others write1 finding
Why it is in this group
- The name "intellihr_list_pay_grades" says "list": a word for reading.
- The description's first verb is "pay": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "intellihr_list_pay_grades" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "intellihr_list_pay_grades" says "list": a word for reading.
Description, as the server wrote it The pay grades and their rates, optionally as at a date. GET /pay-grades.
Annotations the server declares
- title: List pay grades
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
Changes things 2Claude Code: ask
intellihr_create_extended_leaveWRITE: record extended leave (parental, long service, unpaid, etc.) on an existing job.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_create_extended_leave" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it WRITE: record extended leave (parental, long service, unpaid, etc.) on an existing job. It changes the person's employment record and can trigger intelliHR workflows. The leave is created with the end date you give as expected; finalise it in intelliHR when the person returns. Find leave types with list_reference_data kind extended_leave_types. POST /extended-leave.
Annotations the server declares
- title: Create extended leave
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
intellihr_create_personWRITE: create a new person record in intelliHR (last name required).Reads text others writeCan send data outNo findings
Why it is in this group
- The name "intellihr_create_person" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a destination (input.phone): what the tool writes goes there.
Description, as the server wrote it WRITE: create a new person record in intelliHR (last name required). It creates the person only: no job, no user account and no welcome email is sent. A job is added separately in intelliHR. Check with list_people first to avoid duplicates. POST /people.
Annotations the server declares
- title: Create person
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 18Show 18 read-only tools
intellihr_get_jobOne job by id with its person, position title, location, business unit, supervisor, pay grade, remuneration and dates.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_get_job" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One job by id with its person, position title, location, business unit, supervisor, pay grade, remuneration and dates. GET /jobs/{id}.
Annotations the server declares
- title: Get job
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_get_job_timelineThe upcoming changes and current information about a job (scheduled changes, end date).Reads text others writeNo findings
Why it is in this group
- The name "intellihr_get_job_timeline" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The upcoming changes and current information about a job (scheduled changes, end date). GET /jobs/{jobId}/timeline.
Annotations the server declares
- title: Get job timeline
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_get_personOne person's full record by id: names, date of birth, gender, employee number, contact details, addresses, emergency contact, employment status, jobs, work rights, user account and…Reads private dataReads text others writeNo findings
Why it is in this group
- The name "intellihr_get_person" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "contact": it reads contacts.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it One person's full record by id: names, date of birth, gender, employee number, contact details, addresses, emergency contact, employment status, jobs, work rights, user account and custom fields. Health information is never returned. GET /people/{id}.
Annotations the server declares
- title: Get person
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_business_entitiesThe organisation's business entities (legal employers).Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_business_entities" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The organisation's business entities (legal employers). GET /business-entities.
Annotations the server declares
- title: List business entities
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_business_unitsThe organisation's business units (departments, teams).Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_business_units" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The organisation's business units (departments, teams). Filter by name or identifier. GET /business-units.
Annotations the server declares
- title: List business units
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_custom_field_definitionsThe custom fields defined in intelliHR (what each field on a person, job or location means and its type).Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_custom_field_definitions" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The custom fields defined in intelliHR (what each field on a person, job or location means and its type). GET /custom-field-definitions.
Annotations the server declares
- title: List custom field definitions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_jobsList jobs (roles people hold, past, current and future) as at today: person, position title, location, business unit and entity, supervisor, work type, FTE, remuneration schedule, …Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_jobs" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it List jobs (roles people hold, past, current and future) as at today: person, position title, location, business unit and entity, supervisor, work type, FTE, remuneration schedule, start/end dates and status. Filter by person, job title, status (Current Job, Future Job, Ending Job, Past Job), work type, primary job, or upcoming/recent end dates. GET /jobs.
Annotations the server declares
- title: List jobs
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_locationsThe organisation's locations (sites) with parent location, code, address, enabled flag and representatives.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_locations" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The organisation's locations (sites) with parent location, code, address, enabled flag and representatives. GET /locations.
Annotations the server declares
- title: List locations
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_peopleList the people (employees) in intelliHR as at today: name, employee number, email, phone, addresses, emergency contact, employment status, their jobs (summary) and custom fields.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "intellihr_list_people" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List the people (employees) in intelliHR as at today: name, employee number, email, phone, addresses, emergency contact, employment status, their jobs (summary) and custom fields. Filter by name (matches any part of the name), email, employee number, job id, recently updated, or who is on extended leave. Health information is never returned. GET /people.
Annotations the server declares
- title: List people
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_person_documentsThe documents stored on a person's record (file name, type, size, upload status and a download link).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "intellihr_list_person_documents" says "list": a word for reading.
What it can reach
- private-dataThe name "intellihr_list_person_documents" says "list" and "document": it reads documents.
- private-dataThe description's first sentence says "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The documents stored on a person's record (file name, type, size, upload status and a download link). Contents are not read. GET /people/{personId}/documents.
Annotations the server declares
- title: List a person's documents
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_person_skillsThe skills assigned to a person (with their level and review details as intelliHR returns them).Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_person_skills" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "review": it reads comments, which other people can write.
Description, as the server wrote it The skills assigned to a person (with their level and review details as intelliHR returns them). The whole list comes back at once. GET /people/{personId}/skills.
Annotations the server declares
- title: List a person's skills
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_person_tasksTasks (forms, reviews, check-ins, onboarding steps) for a person, by tab: DUE (default), ABOUT_ME, ABOUT_OTHERS, DONE or IGNORED.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_person_tasks" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "review": it reads comments, which other people can write.
Description, as the server wrote it Tasks (forms, reviews, check-ins, onboarding steps) for a person, by tab: DUE (default), ABOUT_ME, ABOUT_OTHERS, DONE or IGNORED. GET /people/{personId}/tasks.
Annotations the server declares
- title: List a person's tasks
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_position_titlesThe position titles (job names) defined in intelliHR.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_position_titles" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The position titles (job names) defined in intelliHR. Filter by name. GET /position-titles.
Annotations the server declares
- title: List position titles
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_qualificationsQualification records held by people (licences, certificates) with status and dates.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_qualifications" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Qualification records held by people (licences, certificates) with status and dates. Filter by person, employee number or library item. GET /qualifications.
Annotations the server declares
- title: List qualifications
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_reference_dataLook up one of intelliHR's reference lists: employment_conditions, work_classes, work_types, work_rights, recruitment_sources, extended_leave_types, job_change_reasons, skill_disci…Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_reference_data" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Look up one of intelliHR's reference lists: employment_conditions, work_classes, work_types, work_rights, recruitment_sources, extended_leave_types, job_change_reasons, skill_disciplines, training_types, training_providers, qualification_types, qualification_library_items, onboarding_templates, permission_groups or representative_types. Use it to find the ids and names other tools need.
Annotations the server declares
- title: List reference data
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_skillsThe skills catalogue, optionally only business-critical skills or one discipline.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_skills" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The skills catalogue, optionally only business-critical skills or one discipline. GET /skills.
Annotations the server declares
- title: List skills
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_trainingsTraining records completed or booked by people, with provider, type and dates.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_trainings" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Training records completed or booked by people, with provider, type and dates. Filter by training name, provider, type, employee number or email. GET /trainings.
Annotations the server declares
- title: List trainings
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
intellihr_list_usersThe user accounts that can sign in to intelliHR: username, enabled flag, permission groups and the linked person.Reads text others writeNo findings
Why it is in this group
- The name "intellihr_list_users" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it The user accounts that can sign in to intelliHR: username, enabled flag, permission groups and the linked person. GET /users.
Annotations the server declares
- title: List users
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
66 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data3
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write22
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- intellihr_create_extended_leave
- intellihr_create_person
- intellihr_get_job
- intellihr_get_job_timeline
- intellihr_get_person
- intellihr_list_business_entities
- intellihr_list_business_units
- intellihr_list_custom_field_definitions
- intellihr_list_jobs
- intellihr_list_locations
- intellihr_list_pay_grades
- intellihr_list_people
- and 10 more
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__intellihr__intellihr_create_person"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "intellihr_list_pay_grades" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "intellihr_list_pay_grades" says "list": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http intellihr https://intellihr.usefulapi.io/mcpclaude mcp add --transport http intellihr https://intellihr.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__intellihr__intellihr_list_people",
"mcp__intellihr__intellihr_get_person",
"mcp__intellihr__intellihr_list_person_documents",
"mcp__intellihr__intellihr_list_person_skills",
"mcp__intellihr__intellihr_list_person_tasks",
"mcp__intellihr__intellihr_list_jobs",
"mcp__intellihr__intellihr_get_job",
"mcp__intellihr__intellihr_get_job_timeline",
"mcp__intellihr__intellihr_list_locations",
"mcp__intellihr__intellihr_list_business_units",
"mcp__intellihr__intellihr_list_business_entities",
"mcp__intellihr__intellihr_list_position_titles",
"mcp__intellihr__intellihr_list_users",
"mcp__intellihr__intellihr_list_custom_field_definitions",
"mcp__intellihr__intellihr_list_reference_data",
"mcp__intellihr__intellihr_list_skills",
"mcp__intellihr__intellihr_list_qualifications",
"mcp__intellihr__intellihr_list_trainings"
],
"ask": [
"mcp__intellihr__intellihr_list_pay_grades",
"mcp__intellihr__intellihr_create_person",
"mcp__intellihr__intellihr_create_extended_leave"
],
"deny": [
"mcp__intellihr__intellihr_update_person"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as intellihr. Review it before you use it.
Capability tags behind 22 rules
- mcp__intellihr__intellihr_list_people private-data, untrusted-input
- mcp__intellihr__intellihr_get_person private-data, untrusted-input
- mcp__intellihr__intellihr_list_person_documents private-data, untrusted-input
- mcp__intellihr__intellihr_list_person_skills untrusted-input
- mcp__intellihr__intellihr_list_person_tasks untrusted-input
- mcp__intellihr__intellihr_list_jobs untrusted-input
- mcp__intellihr__intellihr_get_job untrusted-input
- mcp__intellihr__intellihr_get_job_timeline untrusted-input
- mcp__intellihr__intellihr_list_locations untrusted-input
- mcp__intellihr__intellihr_list_business_units untrusted-input
- mcp__intellihr__intellihr_list_business_entities untrusted-input
- mcp__intellihr__intellihr_list_position_titles untrusted-input
- mcp__intellihr__intellihr_list_pay_grades untrusted-input
- mcp__intellihr__intellihr_list_users untrusted-input
- mcp__intellihr__intellihr_list_custom_field_definitions untrusted-input
- mcp__intellihr__intellihr_list_reference_data untrusted-input
- mcp__intellihr__intellihr_list_skills untrusted-input
- mcp__intellihr__intellihr_list_qualifications untrusted-input
- mcp__intellihr__intellihr_list_trainings untrusted-input
- mcp__intellihr__intellihr_create_person untrusted-input, outbound
- mcp__intellihr__intellihr_update_person untrusted-input
- mcp__intellihr__intellihr_create_extended_leave untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.usefulapi/intellihr/verify?hash=2523a510f34d370799a4f3118e6a2aac8d783018697707cf73884ee13d23bdef" | jq -e '.changed == false'Pinned hash 2523a510f34d, from Oct 24, 2026, 13:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.usefulapi/intellihr/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.usefulapi/intellihr)Source: MCP Registry · repository. Synced Oct 24, 2026, 13:18 UTC.