1. Overview
Ask Claude about your workforce - ZenHR HR, payroll, compliance, and performance data, read-only.
The ZenHR Connector lets you bring your live ZenHR data into Claude so you can ask questions
in plain language and get answers grounded in your own HR system. It exposes a small,
curated set of read-only tools covering your employee directory, branches, and financial
transactions (summarized), Saudi Nitaqat / Saudization workforce analysis, CHRO-style HR
update metrics, and Performance & Evaluation (P&E) rating distributions.
ZenHR is a comprehensive HR and payroll platform for businesses across the MENA region. This
connector is built and operated by ZenHR. It runs through ZenHR's standard sign-in and
permission system, so Claude only ever sees the data you are already allowed to see in
ZenHR - and it can never change, add, or delete anything. Every connection is isolated to your company.
2. What you can ask
Example prompts and the tools they use:
Ask Claude… | Uses |
|---|---|
"What's my profile, and is my session still valid?" |
|
"List the branches I can access in Saudi Arabia." |
|
"Show me the first 20 employees in branch 4821." |
|
"Summarize this branch's deductions vs. allowances by quarter for 2026." |
|
"We're in Manufacturing - what's our Saudization rate across our KSA branches?" |
|
"Explain the Nitaqat Mutawar range formula and the Annex No. (1) activities." |
|
"Build a CHRO board update of Q2-2026 turnover, new hires, and retention." |
|
"Show the rating distribution / bell curve for our 2025 performance cycle." |
|
3. Prerequisites
An active ZenHR account.
Your access is governed by your ZenHR role. The connector returns only data your role
can already read in ZenHR. If your role can't see a certain area (e.g. financial
transactions), Claude won't be able to either.The Nitaqat tools are specific to Saudi Arabia (KSA).
4. Installation & connection
You add the connector in Claude as a custom connector pointing at your ZenHR endpoint.
In Claude, go to Settings → Connectors → Add custom connector.
Enter the Server URL:
https://app.zenhr.com/zen_mcpClaude automatically discovers how to sign you in.
Claude opens the ZenHR sign-in and consent screen. Sign in with your ZenHR account and
approve the read-only permissions listed in §5. There's no password or secret to copy
- The connection uses a secure OAuth flow.Once you approve, Claude connects, and the connector's tools become available. You're ready
to ask questions.
Your session can be ended at any time by disconnecting the connector in Claude.
5. Authentication & permissions
Sign-in method: OAuth 2.1 with PKCE - the same secure, browser-based sign-in flow used
across ZenHR. No client secret, no API key to manage. Sessions refresh automatically.Where you sign in: ZenHR's own authorization server. Claude discovers it via standard
OAuth metadata and registers itself automatically before the first sign-in.Per-company isolation: your connection is tied to your ZenHR user within your company.
Data never crosses company boundaries.
6. Tools
All tools are read-only - none of them changes, creates, or deletes data. Most list-style
tools accept page and limit for paging and an optional exclude_fields list to leave out
fields you don't need (which also keeps responses smaller). Tools draw on your live ZenHR data
through ZenHR's API, honoring your role's permissions on every call.
6.1 get_my_profile - My profile
Read-only. Returns your signed-in profile, authentication info, and token/expiry status.
Parameters: none.
Use it for: "Who am I signed in as?", "Is my session still valid?"
{ "method": "tools/call", "params": { "name": "get_my_profile", "arguments": {} } }{ "structuredContent": { "user_id": 90210, "employee_id": 33412, "name": "Sample User", "company_id": 771, "branch_id": 4821, "token_expires_at": "2026-06-23T18:40:00Z" } }6.2 list_branches - List branches
Read-only. Lists the branches you can access. Useful for finding branch IDs to pass to
other tools.
{ "method": "tools/call", "params": { "name": "list_branches", "arguments": { "country_id": 134, "limit": 5 } } }{ "structuredContent": { "branches": [ { "id": 4821, "name": "Riyadh HQ", "country": { "country_code": "SA" } }, { "id": 4822, "name": "Jeddah Office", "country": { "country_code": "SA" } } ], "pagination": { "page": 1, "total_pages": 1, "total": 2 }, "search_term": null } }6.3 list_employees - List employees
Read-only. Lists employees in a branch (defaults to your current branch).
Tip: employee records can include personal fields (e.g. passport number, national ID,
religion, contact details). If you only need basic fields, passexclude_fieldsto leave the
rest out.
{ "method": "tools/call", "params": { "name": "list_employees", "arguments": { "branch_id": 4821, "limit": 2, "exclude_fields": ["passport_number", "national_id", "religion"] } } }{ "structuredContent": { "employees": [ { "id": 33412, "name": "Sample Employee A", "employment_number": "E-1001", "nationality": ["Saudi Arabia"] }, { "id": 33413, "name": "Sample Employee B", "employment_number": "E-1002", "nationality": ["Jordan"] } ], "pagination": { "page": 1, "total_pages": 18, "total": 36 }, "branch_id": 4821, "search_term": null } }6.4 summarize_financial_transactions - Summarize financial transactions
Read-only. Aggregates a branch's financial transactions by currency → quarter →
transaction type, returning counts, total amounts, and percentages. It pages through the
data for you, so you don't passpage/limit.Note: it reads up to 1,500 transactions per request (30 pages × 50). If there are more,
the response setstruncated: trueso you know the totals are partial - narrow the date
window or filters to get a complete picture.
{ "method": "tools/call", "params": { "name": "summarize_financial_transactions", "arguments": { "branch_id": 4821, "direction": "deduction", "effective_date_from": "2026-01-01", "effective_date_to": "2026-06-30" } } }{ "structuredContent": { "summary": { "total_transactions": 84, "dropped_transactions": 0, "pages_fetched": 2, "total_pages": 2, "branch_id": 4821, "truncated": false, "window": { "from": "2026-01-01", "to": "2026-06-30" }, "filters": { "direction": "deduction" } }, "currencies": [ { "currency": "SAR", "count": 84, "amount_fils": 12500000, "quarters": [ { "quarter": "Q1 2026", "count": 40, "amount_fils": 6000000, "percentage_of_currency_total": 48.0, "types": [ { "name": "GOSI Deduction", "count": 40, "amount_fils": 6000000, "percentage_of_quarter": 100.0, "percentage_of_currency_total": 48.0 } ] } ] } ] } }6.5 get_nitaqat_workforce - KSA workforce data
Read-only. Returns active-employee counts and a Saudi vs. non-Saudi breakdown per KSA
branch, for Saudization / Nitaqat analysis. (An employee counts as Saudi when their
nationality includes "Saudi Arabia".)It does not compute your Nitaqat range itself - pair it with
get_nitaqat_guideline,
which provides the official formulas so the range can be calculated.Note:
economic_activityis required. If you don't know it, askget_nitaqat_guideline
for the valid activities in Annex No. (1).
{ "method": "tools/call", "params": { "name": "get_nitaqat_workforce", "arguments": { "economic_activity": "Manufacturing" } } }{ "structuredContent": { "economic_activity": "Manufacturing", "country_code": "SA", "nitaqat_official_source_url": "https://www.hrsd.gov.sa/.../E20210523.pdf", "nitaqat_resource_uri": "zenhr://compliance/nitaqat", "summary": { "ksa_branch_count": 2, "total_active_employees": 120, "total_saudi_employees": 78, "total_non_saudi_employees": 42, "saudization_rate_percent": 65.0 }, "branch_breakdown": [ { "id": 4821, "name": "Riyadh HQ", "country_code": "SA", "total_active_employees": 80, "total_saudi_employees": 56, "total_non_saudi_employees": 24, "saudization_rate_percent": 70.0 } ] } }6.6 get_nitaqat_guideline - Nitaqat guideline
Read-only. Returns the Nitaqat Mutawar Program guideline (v2.0) - Annex No. (1)
economic activities, the m/c coefficients, the range formulas (y = m · ln(x) + c), and the
ministry services by range color - sourced from the official HRSD document.Parameters: none.
Use it for: understanding Nitaqat rules, and (with
get_nitaqat_workforce) working out
your range.
{ "method": "tools/call", "params": { "name": "get_nitaqat_guideline", "arguments": {} } }6.7 get_hr_updates - HR updates
Read-only. Computes company HR metrics for a quarter, half, or full year - for CHRO
board decks and workforce reviews. Metrics include headcount (start/end/net), new hires,
separations, turnover (overall / voluntary / involuntary / first-year), retention,
disciplinary-action rate, and gender breakdown.This is a two-step tool. Call it with just
periodfirst; it replies with the choices to
confirm (all branches vs. a specific branch; per-branch breakdown; monthly vs. combined;
by-department for a specific branch). Then call it again with your selections.Note: per-branch breakdown is capped at 30 branches; if you can access more, pick a
specific branch or use the company total. Metrics your role can't read are listed underunavailablerather than returned.
{ "method": "tools/call", "params": { "name": "get_hr_updates", "arguments": { "period": "Q2-2026" } } }First reply (asks you to choose scope):
{ "structuredContent": { "status": "needs_selection", "missing": ["branch_scope"], "errors": [] } }Final reply (abbreviated):
{ "structuredContent": { "period": { "label": "Q2 2026" }, "grouping": { "branch": "all", "time": "combined", "org": "combined" }, "metrics_included": ["headcount_end_of_period", "new_hires", "overall_turnover_rate"], "segments": [ { "segment": "Company", "dimension": "company", "buckets": [ { "label": "Q2 2026", "metrics": { "new_hires": { "label": "New hires", "value": 12, "unit": "employees" } } } ] } ], "unavailable": {} } }6.8 get_pe_bell_curve_data - P&E cycles & bell curve
Read-only. Performance & Evaluation analysis, with two modes:
Discovery - call it without
evaluation_cycle_idto list the evaluation cycles you
can access (optionally filtered byyear) and find the one to analyze.Bell curve - call it with
evaluation_cycle_idto get that cycle's rating
distribution (per scale band) and summary statistics, across every branch the cycle spans
that you can access.
{ "method": "tools/call", "params": { "name": "get_pe_bell_curve_data", "arguments": { "evaluation_cycle_id": 512, "score_type": "final" } } }{ "structuredContent": { "meta": { "evaluation_cycle_id": 512, "evaluation_cycle_name": "2025 Annual", "year": 2025, "score_type": "final", "total_with_scores": 96, "total_in_cohort": 100, "branches_included": [ { "id": 4821, "name": "Riyadh HQ" } ] }, "distribution_by_scale": [ { "level": 1, "name": "Below Expectations", "count": 6, "percentage": 6.25 }, { "level": 2, "name": "Meets Expectations", "count": 70, "percentage": 72.92 }, { "level": 3, "name": "Exceeds Expectations", "count": 20, "percentage": 20.83 } ], "statistics": { "mean": 78.4, "median": 79.0, "std_dev": 8.1, "min": 55.0, "max": 96.0 } } }7. Companion skills
ZenHR also ships three ready-made skills that teach Claude how to turn the connector's
raw tool output into polished, decision-ready deliverables. You don't have to use them - the
tools work on their own - but the skills add expert structure (which questions to ask first,
how to chart the results, how to present numbers accurately) so you get a board-grade answer
instead of a JSON dump. Just ask Claude in plain language; when your request matches a skill,
it follows that playbook automatically.
7.1 P&E Bell-Curve Analysis
What it does: turns a Performance & Evaluation cycle into a clear bell-curve report -
finds the cycle, pulls its rating distribution, renders it as a chart, and compares actual
vs. your target distribution with a short narrative of the skew.Uses:
get_pe_bell_curve_data.Ask it: "Analyze the bell curve for our 2025 annual review", "How are ratings
distributed in the Riyadh performance cycle?", "Is our score spread on target?"Good to know: it resolves the cycle by name/year first (it won't guess a cycle id),
quotes every number verbatim from the tool, reports both the scored count and the full
cohort, and asks for your target distribution rather than inventing one. If you don't give a
target, it presents the distribution and skew without an "on/off target" verdict.
7.2 Off-Cycle Transactions Analyzer
What it does: answers questions about off-cycle (out-of-payroll) payments for a branch -
one-time bonuses, ad-hoc allowances/deductions, quarterly trends, single-employee or
income-vs-deduction breakdowns - and visualizes them as a year-overview bar chart plus
per-quarter pies and a table.Uses:
list_branchesandsummarize_financial_transactions(always withpayroll_status: out_of_payroll).Ask it: "What off-cycle transactions happened in 2025?", "Show the quarterly off-cycle
trend for the Amman branch", "Break down off-cycle payments for employee 123 this year",
"How do off-cycle income and deductions compare for Q3?"Good to know: it always confirms the branch and year first (no silent defaults), never
mixes currencies, and presents results in business language. Because the connector only
exposes summaries, ranked or single-row lists ("top 10 biggest bonuses", "show the last
5 transactions") aren't supported - the skill will say so rather than fabricate a ranking.
7.3 CHRO Board Presentation
What it does: builds a board-ready PowerPoint from live ZenHR HR metrics, filling a
PowerPoint template you provide with executive-quality slides, native editable charts, and
an executive narrative.Uses:
get_hr_updates.Ask it: attach a
.pptxtemplate and say "Prepare a CHRO board deck for Q2-2026 from
ZenHR", "Build our H1-2026 people review", "Make a quarterly workforce presentation."Good to know: it asks you to confirm scope (all branches vs. one, monthly vs. combined,
by-department) before pulling numbers, quotes every figure verbatim with period and units,
labels any metric your role can't see as "not available" instead of estimating, and matches
your template's branding. (Producing native editable charts requires a PowerPoint/code
capability in your Claude environment.)
These skills are provided by ZenHR alongside the connector. If they're not already available
in your workspace, ask your ZenHR administrator how to enable them.
8. Security
Your data stays yours: every request is tied to your verified ZenHR sign-in and your
company; data never crosses company boundaries.Read-only by design: connector sessions run under a permission set that is locked to
read-only access. Even if your ZenHR role has edit rights, the connector cannot use them -
it strips everything down to reading the allow-listed areas.Your role still applies: on every call the connector checks what your role can read, so
you never see more through Claude than you would in ZenHR.Rate limits: requests are limited per company (by default 100/hour and 500/day) to
protect the service.Secure transport & sign-in: served over HTTPS using OAuth 2.1 with PKCE; there are no
long-lived secrets to manage.Company-level availability: the connector is enabled per company and is otherwise
unreachable.
9. Limitations & things to know
Read-only: the connector cannot create, edit, or delete anything in ZenHR.
list_employeesincludes personal fields by default - passexclude_fieldsto omit
what you don't need.Financial summaries can be partial for very large date ranges:
summarize_financial_transactions
reads up to ~1,500 transactions and setstruncated: truewhen there's more. Narrow the
window or filters for complete totals.get_hr_updatesis a two-step tool and caps per-branch breakdowns at 30 branches.get_nitaqat_workforcerequireseconomic_activity(from Annex No. (1)).Permissions are all-or-nothing at connect time: you approve the full read-only
permission set once; your ZenHR role then governs what's actually visible per area.Availability is gated per company and the connector is currently pre-GA (being rolled
out company by company).
10. Troubleshooting / FAQ
Claude can't reach the connector / everything returns "not found" → the connector isn't
enabled for your company yet. Ask your ZenHR administrator to enable it.You keep getting asked to sign in, or see "Unauthorized" → re-run the sign-in/consent so
all read-only permissions are granted; your session may have expired."You are not authorized to do that" → your ZenHR role can't read that area, or you've hit
the rate limit (100/hour or 500/day per company)."No branch available" → pass a
branch_id, or make sure your account is linked to a
branch. Uselist_branchesto find IDs.get_nitaqat_workforcekeeps asking for the economic activity → it's required; askget_nitaqat_guidelinefor the valid Annex No. (1) activities.get_hr_updatesreplies withneeds_selection/needs_narrowing→ it's the two-step
flow: provide the requested choices and call again; pick one branch if you can access more
than 30.Some HR metrics show as "unavailable" → those metrics aren't permitted for your role.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article