# Justworks MCP connector

The Justworks connector brings members, payrolls, paystubs, deductions and time off requests into Elaichi, so Claude, ChatGPT, Cursor or the Elaichi Agent can answer questions and update records inside each person's own Justworks access.

Source: https://elaichi.ai/connectors/justworks/

## Facts

| | |
| --- | --- |
| Application | Justworks |
| Category | HRIS |
| AI tools | 24 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | Yes |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Justworks is connected

- Which time off requests are still waiting on approval this week?
- Show me payroll fees for the latest payroll run.
- Update Maria Lopez's title to Senior Account Manager.

## Connect Justworks in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Justworks.
2. Optionally set Share with, then press Connect.
3. Supply your own Justworks app, then approve. Justworks needs an OAuth app you register yourself, so bring its client ID and secret. One person does this once for the organization.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Justworks tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Justworks MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Justworks MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Justworks MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Justworks to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Justworks tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Justworks through Elaichi

### Catch a member record up after a change

HR. Someone moves teams, changes title or updates a home address, and HR asks the agent to update the Justworks member record from a plain sentence, then confirms what changed.

### Check a payroll run before it closes

Payroll. Pull the latest Justworks payroll, its fees and the paystubs behind it, and ask which members look different from last cycle before anyone signs off.

### Reconcile payroll fees against the bank account

Finance. List Justworks payrolls and payroll fees for the month alongside the company bank account details so month-end close starts from live figures rather than exports.

### Set up and correct deductions in bulk

Benefits. Create a new deduction for a member, update a batch of deductions when a plan changes, or cancel one that was entered twice, all from Justworks deduction types you already use.

### Answer who is out and what they have left

People ops. See open Justworks time off requests for the week, check them against each policy, and run a time off balance report before approving a long leave.

### Get a headcount picture by jurisdiction

Leadership. Ask how many Justworks members sit in each state or jurisdiction, which custom fields are filled in, and what the company business info currently says.

## Frequently asked questions

### How do I connect Justworks to Claude?

Connect Justworks in Elaichi first: Justworks asks you to register an OAuth application inside Justworks itself, so one person brings that client ID and secret into Elaichi once, and nobody has to do it again. Then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Claude signs you in to Elaichi and Justworks appears alongside your other connected applications.

### Does Justworks work with ChatGPT and Cursor as well as Claude?

Yes. Once Justworks is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Justworks once and every client you use picks it up.

### What can an AI agent actually do with my Justworks data?

With Justworks connected, an agent can look up members and their custom field values, update a member record, list payrolls, payroll fees and paystubs, create, update or cancel deductions, and show time off requests, policies and balance reports. It can also read company details such as jurisdictions, business info and bank account information. Short concrete asks work best, like asking for open time off requests this week rather than a long paragraph.

### Does connecting Justworks give the AI access to everyone's pay and tax details?

No. Every call into Justworks runs as the person who signed in, so the agent sees only the members, paystubs and deductions that person can already see in Justworks. Elaichi can narrow that access further with roles and restrictions, and it can never widen it beyond what Justworks itself allows.

### Can my team share one Justworks connection?

Yes. One person connects Justworks in Elaichi and shares the connection with a team, so nobody else ever handles the client ID or secret. Each teammate still signs in to Elaichi as themselves, so every payroll lookup or member update in the audit log carries their own name.

### Can I stop an agent from deleting or changing things in Justworks?

Yes. In Elaichi you restrict Justworks actions individually, so a team can be allowed to read payrolls and paystubs while updating members or cancelling deductions is switched off. A restricted action is never advertised to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to a Justworks connection when someone leaves?

When a person is offboarded in Elaichi, their access to Justworks through every client ends at once. A Justworks connection they shared keeps working for everyone else on the team. If you want it gone entirely, disconnecting Justworks once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client together.

### Does the Justworks MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Justworks is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

## All 24 Justworks tools

Every tool below is callable through https://api.elaichi.ai/mcp once Justworks is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Justworks company** (List). Get the Justworks company that authorized this connection (every token is scoped to one company), returned as a single-item list.
Includes id, display_name, country_data, addresses, phones, departments, offices, created_at and updated_at. legal_name, tax_id and office addresses are present only when the company.detail:read scope was granted; empty single-value fields are omitted.
- **List all Justworks company bank account** (List). Get the bank account on file for the connected Justworks company, returned as a single-item list with account_type, bank_name, account_number_tail (last four digits only) and routing_number. Fields without a value are omitted. Requires the company.bank_account:read scope.
- **List all Justworks company business info** (List). Get the connected Justworks company's verified business information, returned as a single-item list: officers (name and titles) and entity_identifiers (state, issue_date, file_number). Requires the company.detail:read scope.
- **List all Justworks company custom fields** (List). List the custom fields defined for the connected Justworks company: id, label, category, type (text, selection or unknown), cardinality and, for selection fields, the allowed options. Not paginated. A member's values for these fields come from member_custom_field_values list. Requires the company.detail:read scope.
- **List all Justworks company jurisdictions** (List). List the jurisdictions (e.g. US states) of the connected Justworks company; each item has a zone_code. Not paginated. Requires both the company.detail:read and member.detail:read scopes.
- **List all Justworks members** (List). List the members (employees, contractors, owners and other types) of the connected Justworks company. Cursor-paginated, up to 100 per page.
Filters: status (active or terminated); updated_at, updated_at_gt, updated_at_gte, updated_at_lt, updated_at_lte, updated_at_ne (YYYY-MM-DD).
Scope-gated fields are omitted without their scope: type, emails, phones, addresses, manager (member.detail:read); date_of_birth (member.dob:read); sex_assigned_at_birth (member.sex:read); pay fields (member.pay:read); employment fields (member.employment:read). Empty values are omitted.
- **Get single Justworks member by ID** (Get). Get one member of the connected Justworks company; id is the member ID (member_...).
Returns name, type, active, job_title, emails, phones, addresses, department, office, manager, current_pay, pay_history, current_employment, employment_history and dates. Fields behind optional scopes (member.detail:read, member.dob:read, member.sex:read, member.pay:read, member.employment:read) are omitted when the scope was not granted, as are empty values. pay_rate is in cents.
- **Update a Justworks member by ID** (Update). Update a member of the connected Justworks company (id is the member ID): send only the fields to change among job_title, department_id (dept_...) and manager_id (member_...). Requires the member:write scope. Returns 204 No Content (an empty result) on success.
- **List all Justworks member custom field values** (List). List one member's custom field values. Requires member_id (member_...). Each item has id (the custom field ID from company_custom_fields list) and values (an array of strings). Not paginated. Requires the member.detail:read scope.
- **Get single Justworks member tax ID by ID** (Get). Get a member's US Social Security number; id is the member ID (member_...). Returns US.ssn. Domestic members only: international_contractor members return 400, and employee_eor or international_employee members return 404 (no SSN on file). Requires the member.tax_id:read scope.
- **List all Justworks payrolls** (List). List payrolls of the connected Justworks company processed between start_date and end_date (both required, YYYY-MM-DD). Cursor-paginated, up to 100 per page.
Each payroll has id, debit_date, pay_date, payment_method, currency and totals in cents (4500 = $45.00): company_debit, gross_pay, net_pay, employee_taxes, employer_taxes. Pass id as payroll_id to payroll_fees list and paystubs list.
- **List all Justworks payroll fees** (List). List the fees charged for one payroll. Requires payroll_id (from payrolls list). Cursor-paginated, up to 100 per page. Each fee has name, amount (in cents), currency and, when set, type, member_id, reference_type (member or paystub) and reference_id.
- **List all Justworks paystubs** (List). List the paystubs of one payroll. Requires payroll_id (from payrolls list). Cursor-paginated, up to 100 per page. Each item has paystub_id, member_id, pay_period_start, pay_period_end, pay_date, currency, gross_pay and net_pay (in cents) and pay_group. Use paystubs get for the line items.
- **Get single Justworks paystub by ID** (Get). Get one paystub; id is the paystub_id from paystubs list. Returns member_id, pay_period_start, pay_period_end, pay_date, currency, gross_pay, net_pay and pay_group plus the earnings, employee_deductions and employer_contributions line items.
All amounts are integers in cents (4500 = $45.00). Requires the paystub:read scope.
- **List all Justworks deduction types** (List). List the deduction types available to the connected Justworks company. Each item has a code and a description; pass code as deduction_type_code when creating deductions. Not paginated. Requires the deductions:read scope.
- **List all Justworks deductions** (List). List payroll deductions of the connected Justworks company. Cursor-paginated, up to 100 per page. Optional filters: member_id, deduction_type, frequency, description.
Each deduction has id, member_id, deduction_type_code, frequency, description, currency, amount_type (fixed or percent), amount, start_date and end_date. Fixed amounts are in cents (4500 = $45.00); percent amounts carry 4 decimal places (37000 = 3.7%).
- **Create a Justworks deduction** (Create). Create one or more deductions in one call. Body: items, an array whose entries need member_id, deduction_type_code, frequency, description, amount_type (fixed or percent), amount and start_date (currency too when fixed; end_date and operation_id optional).
Returns 201 with items: one result per entry with deduction_id, member_id, success and error_message. A 201 can still contain failed entries, so check success on each. Amounts: fixed in cents (4500 = $45.00), percent with 4 decimals (37000 = 3.7%).
- **Justworks deductions bulk update** (Update). Update one or more existing deductions in one call. Body: items, an array whose entries need deduction_id plus any of deduction_type_code, frequency, description, amount_type, currency, amount, start_date, end_date.
Returns items: one result per entry with deduction_id, member_id, success and error_message. A 200 can still contain failed entries, so check success on each. Amounts: fixed in cents, percent with 4 decimals (37000 = 3.7%).
- **Justworks deductions cancel** (Cancel). Cancel one or more deductions: send deduction_ids (an array of deduction IDs). Returns items with one result per ID (deduction_id, member_id, success, error_message); a 200 can still contain failed entries, so check success on each. Requires the deductions:write scope.
- **List all Justworks subscriptions** (List). List the Justworks product subscriptions of the connected company (e.g. PEO, Payroll PEPM, Payroll Base). Expired subscriptions are left out unless include_expired=true. Not paginated.
Each subscription has id, company_id, product_name, status (ACTIVE, EXPIRED or PENDING), start_date, end_date, prices, discounts and add_ons (child subscriptions with the same fields).
- **List all Justworks time off requests** (List). List time off requests of the connected Justworks company. start_date and end_date (YYYY-MM-DD) are required; member_id, policy_id and status (requested, approved, declined, cancelled, deleted, manual) are optional filters. Cursor-paginated, up to 100 per page.
Each request has id, member_id, policy_id, start_date, end_date, amount with its unit_type (minutes, hours or days), status, notes, created_at and updated_at.
- **List all Justworks time off policies** (List). List the time off policies of the connected Justworks company, optionally filtered by status (active or inactive). Cursor-paginated, up to 100 per page. Each policy has id, name, status, type (vacation, sick_leave, other or international), effective_date and deactivation_date.
- **Create a Justworks time off balance report** (Create). Start an asynchronous time off balances report. Body fields are all optional: as_of_date (YYYY-MM-DD, the date to calculate balances as of), member_id and policy_id (filters).
Returns report_id; then poll time_off_balance_reports get with that ID until status is ready. Requires the time_off:read scope.
- **Get single Justworks time off balance report by ID** (Get). Get a time off balances report; id is the report_id returned by time_off_balance_reports create. status is pending, ready or error: poll until it is ready, then read items (member_id, policy_id, available, used, unit_type); message explains the status or error. Requires the time_off:read scope.
