# Workable MCP connector

Connect Workable to Elaichi and Claude, ChatGPT, Cursor or any MCP client can search jobs, review candidates, add new ones, move them through stages and update records, all within the signed-in person's own Workable access.

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

## Facts

| | |
| --- | --- |
| Application | Workable |
| Category | ATS |
| AI tools | 94 |
| Authentication | Connects over OAuth |
| Bring your own OAuth app | No |
| Native MCP | Yes. Workable builds and runs this MCP server. Elaichi adds sign-in, access controls and an audit log on top |
| Support for its tools | help.workable.com/hc/en-us/requests/new |
| 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 Workable is connected

- Which candidates moved to the offer stage this week?
- Show open jobs with nobody past the phone screen stage.
- Move Priya Shah to the interview stage for Account Executive.

## Connect Workable in Elaichi

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

1. Open Connections, choose Add connection, and pick Workable.
2. Optionally set Share with, then press Connect.
3. Approve it in Workable. Workable's own window opens. Whoever approves it decides what this connection can reach.

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

## Workable 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.

## Workable 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.

## Workable 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 Workable 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 Workable 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 Workable through Elaichi

### Catch a candidate up after a screen

Recruiting. Finish a phone screen, say what you learned, and the candidate's record in Workable is updated and moved to the next stage while it is still fresh.

### Give a strong runner-up another job

Recruiting. When a good candidate loses out on one role, copy or relocate them to a better matching open job in Workable instead of letting them go cold.

### See where a job's pipeline stands

Hiring managers. Ask how many candidates sit at each stage of your open role, who has been waiting longest, and what happened on it this week, without opening Workable.

### Add found profiles to the talent pool

Sourcing. Paste the details of someone promising and they land in the Workable talent pool or on a specific job, ready for the recruiter to pick up.

### Clear the queue of pending decisions

Recruiting coordinators. Advance the candidates the panel approved, disqualify the rest with a reason, and reverse a disqualification when a manager changes their mind.

### Check an offer before the start date

People Ops. Pull up a candidate's offer, their files and the activity on their application so onboarding begins with the right title, salary and start date.

## Elaichi vs Zapier MCP vs Composio for Workable

All three can connect Workable to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Workable tools | Allow or restrict single Workable tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Workable call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Workable to Claude?

Connect Workable in Elaichi first: Workable opens its own sign-in window, you log in as yourself and approve, and that is the whole step. There is no OAuth application to register and no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude signs you in through Elaichi and your Workable jobs and candidates are available.

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

Yes. Once Workable 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 Workable once and every client you use picks it up.

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

With Workable connected, an agent can find open jobs, read a job's stages, recruiters and application form, list the candidates in a pipeline and read their activity, files and offer. It can also add a candidate to a job or the talent pool, update a candidate, move them to another stage or job, and disqualify them or reverse that. Short, concrete asks such as "move Dana to the interview stage on the Account Executive job" work better than long instructions.

### Does connecting Workable give the AI access to every job and candidate?

No. Every request runs as the person who signed in, so an agent only sees the Workable jobs and candidates that person can already see, with Workable's own member and recruiter rules still applying. Elaichi can narrow that further, by team or by action, but it can never widen it beyond what Workable already allows.

### Can my team share one Workable connection?

Yes. One person connects Workable in Elaichi and shares it with a team, and nobody else ever handles a credential or sign-in detail. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person who moved or disqualified a candidate.

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

Yes. Restrictions in Elaichi apply per action, so you can allow reading Workable jobs and candidates while blocking moves, disqualifications or updates. A restricted action is never advertised to Claude, ChatGPT or any other client, so no prompt, however worded, can reach it.

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

Offboarding a person in Elaichi ends their access to Workable through every client at once. If they shared a Workable connection with the team, it keeps working for everyone else. Disconnecting Workable once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client at the same time.

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

Yes. Workable 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.

### Is Elaichi an alternative to Zapier MCP for Workable?

Yes. Both let Claude, ChatGPT or Cursor use Workable. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Workable call.

### How is Elaichi different from Composio for Workable?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Workable: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 94 Workable tools

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

- **Get accounts** (Get). List all Workable accounts accessible to the authenticated user. **Call this first** — use the returned `subdomain` as the `account` parameter on every other tool
- **Get jobs** (Get). List jobs filtered by state (`published`, `draft`, `archived`, `closed`)
- **Search jobs** (Search). Find jobs by a full or partial job title and get back each match's shortcode, title, state, and id. Use this when you have a job name but not its shortcode — the returned shortcode can be passed to other job-scoped tools (`get_candidates`, `get_job_stages`, `get_job_members`).…
- **Get job** (Get). Get full details for a specific job by shortcode
- **Get job activities** (Get). Get the activity log for a specific job
- **Get job application form** (Get). Get the application form questions for a job
- **Get job custom attributes** (Get). Get custom attributes configured for a job
- **Get job members** (Get). Get team members assigned to a job
- **Get job recruiters** (Get). Get external recruiters assigned to a job
- **Get job stages** (Get). Get the pipeline stages configured for a job
- **Get candidates** (Get). List candidates for a job with filtering by stage, email, and date
- **Get candidate** (Get). Get full profile details for a specific candidate
- **Get candidate activities** (Get). Get the activity log for a candidate (stage changes, comments, etc.)
- **Get candidate activity** (Get). Get details for a single candidate activity
- **Get candidate offer** (Get). Get the offer associated with a specific candidate
- **Get candidate files** (Get). List files attached to a candidate's profile — timeline attachments (`source: "Comment"`) and offer documents (`source: "Offer"`). Each file includes `name`, `preview_url` (temporary pre-signed link), `source`, and `kind`. Does **not** include the resume (use `resume_url` on…
- **Create candidate** (Create). Source a new candidate and attach them to a specific job (supports resume, social profiles, education, experience, and application answers)
- **Create talent pool candidate** (Create). Add a candidate to the talent pool without attaching to a specific job
- **Copy candidate** (Copy). Copy a candidate to another job, **keeping** the original record in the source job (duplicates profile, education, experience, resume, form answers, and tags). Returns the ID and URL of the new candidate record
- **Relocate candidate** (Action). Move a candidate to another job, **removing** them from the source job — only one record remains. Accepts an optional target stage (defaults to the target job's starting stage). Use this to redirect a candidate to a different role, versus `copy_candidate` for considering them…
- **Move candidate** (Move). Move a candidate to a different pipeline stage (supports requisition linking on hire)
- **Disqualify candidate** (Action). Disqualify a candidate with a reason (rejected or withdrew)
- **Revert disqualification** (Action). Revert a previously disqualified candidate, restoring them to active status on the job
- **Update candidate** (Update). Update an existing candidate's profile with a partial set of fields — only the fields you provide change. Writable fields include name (firstname/lastname), email, phone, address, headline, summary, notes, cover letter, skills, tags, social profiles, experience/education…
- **Add comment** (Add). Add a comment to a candidate with visibility controls
- **Add review** (Add). Add a rating/review to a candidate (thumbs, stars, or numeric scale)
- **Upsert candidate rating** (Upsert). Submit **or** update a candidate rating with upsert semantics — updates the existing rating for the member on the stage, otherwise creates one. Preferred over `add_review` for agent workflows. Scales and grade ranges: `thumbs` (0–2), `stars` (0–4), `numbers` (0–9). `stage_id`…
- **Update candidate tags** (Update). Replace the full set of tags on a candidate — the provided array overwrites all existing tags (pass `[]` to clear). To add a tag while keeping existing ones, fetch the candidate first and merge
- **Get offer** (Get). Get details for a specific offer by ID
- **Approve offer** (Approve). Approve an offer
- **Reject offer** (Reject). Reject an offer with an optional rejection reason
- **Get requisitions** (Get). List requisitions with filtering by state, job, and date
- **Get requisition** (Get). Get details for a specific requisition by code
- **Create requisition** (Create). Create a new headcount requisition with job title, owner, hiring manager, salary, and department
- **Update requisition** (Update). Update an existing requisition (employment type, experience, location, salary, reason, notes, plan date, hiring manager, owner). Partial updates supported — only provided fields change. Requisition code, linked job, and department cannot be modified. Updating an approved…
- **Approve requisition** (Approve). Approve a requisition by code
- **Reject requisition** (Reject). Reject a requisition with an optional rejection reason
- **Get members** (Get). List account members, filterable by role, status, email, and job
- **Invite member** (Invite). Invite a new person to the account, creating a pending invitation. Assign built-in roles (`ats.*` / `hris.*` / `workable.superadmin`) and/or custom permission sets, with optional collaboration rules and HRIS scopes. The email must not already belong to an existing member or a…
- **Update member** (Update). Update an existing member's roles, permission sets, or access scope. Partial update — only the fields you provide change. Returns the full updated member
- **Enable member** (Enable). Re-enable (restore) a previously deactivated member, reinstating their access. Idempotent — enabling an already-active member succeeds as a no-op
- **Delete member** (Delete). Remove (deactivate) a member, revoking their access — used for offboarding. A reversible deactivation (restore later with `enable_member`), not a hard delete
- **Get permission sets** (Get). List the custom permission sets defined on the account. Use the returned permission-set **names** in the `roles` array of `invite_member` / `update_member` (a member can hold both a built-in role and one or more permission sets)
- **Get stages** (Get). Get all available recruitment pipeline stages in the account
- **Get disqualification reasons** (Get). Get all configured disqualification reasons (required before disqualifying a candidate)
- **Get account custom attributes** (Get). Get all custom attributes configured at the account level
- **Get employees** (Get). List employees with search, status filtering, and ordering by department or division
- **Get employee** (Get). Get full details for a specific employee
- **Get employee documents** (Get). List documents attached to an employee's profile — each document includes its ID, file name, file type, upload date, and download URL. Respects existing Workable access permissions
- **Get orgchart** (Get). Get the organization chart, optionally scoped to a legal entity, department, or employee subtree
- ...and 44 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
