# ChartHop MCP connector

The ChartHop connector brings your orgs, people, jobs, groups and job codes into Claude, ChatGPT, Cursor and the Elaichi Agent, so each person can look up and update headcount records within their own ChartHop access, with every change logged.

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

## Facts

| | |
| --- | --- |
| Application | ChartHop |
| Category | HRIS |
| AI tools | 101 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| 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 ChartHop is connected

- Which jobs in the Engineering group are still open?
- Move Priya Shah to the Customer Success group and update her manager.
- Create a job code for Staff Data Engineer.

## Connect ChartHop in Elaichi

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

1. Open Connections, choose Add connection, and pick ChartHop.
2. Optionally set Share with, then press Connect.
3. Paste a ChartHop API key. One person generates a token in ChartHop and pastes it once. Everyone else works through Share with, and never sees it.

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

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

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

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

### Catch a person's record up after a change

People Ops. After a promotion or a team move, update the person's title, manager and job in ChartHop from a chat instead of clicking through the profile. The change is recorded against whoever asked for it.

### Check open jobs against the headcount plan

Finance. List every job in ChartHop, see which are filled and which are still open, and total them by group before the planning review.

### Open a job the moment it is approved

Recruiting. Create the job in ChartHop with the right job code and group as soon as the requisition clears, so the org chart shows the opening the same day.

### Answer who sits where without the chart

Managers. Ask which people are in a group, who leads it and which jobs are unfilled, and get the answer from live ChartHop records.

### Keep groups current as teams reorganize

Operations. Add people to a new group, remove them from the old one, and rename or retire groups in ChartHop that no longer match how the company works.

### Reconcile people and jobs before provisioning

IT. Pull the list of ChartHop people and their jobs to check against your directory before onboarding and offboarding runs, then fix mismatches in ChartHop directly.

## Frequently asked questions

### How do I connect ChartHop to Claude?

Connect ChartHop in Elaichi first: ChartHop connects with an API key, so you paste the key from your ChartHop settings and the connection is live. Then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. There is no OAuth application to register and no client ID or secret to generate, and the whole setup takes a few minutes.

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

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

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

An agent can look up people, jobs, groups, orgs and job codes in ChartHop, create new ones, update existing ones, and add or remove people from groups. In practice that means asking who is in a group, opening a job with the right job code, or moving a person to a new team, all from a chat. Short, concrete asks such as "list open jobs in Engineering" work better than long paragraphs.

### Does connecting ChartHop give the AI access to everyone's records?

No. Each person signs in to Elaichi as themselves, so an agent working in ChartHop only sees and changes what that person could already see and change. Elaichi can narrow that further with restrictions per team, and it never widens what ChartHop itself allows.

### Can my team share one ChartHop connection?

Yes. One person connects ChartHop with the API key and shares the connection with a team, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who created a job or moved a person, not the account that connected ChartHop.

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

Yes. Restrictions in Elaichi work per action, so you can allow reading people and jobs in ChartHop while blocking deletes or updates. A restricted action is never advertised to Claude, ChatGPT, Cursor or any other client, so no prompt, however worded, can reach it.

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

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

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

Yes. ChartHop 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 101 ChartHop tools

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

- **List all ChartHop orgs** (List). List all visible Charthop orgs, paginated by name. Returns: id, customerId, name, slug, type, industry, estEmployees, estRevenue, foundedYear, address, phone, email, url, domains, status, imagePath, currencies, locales, dataResidency, stock, timezone, appTimes, fiscalStart, headJobId, unassignedManagerJobId, portfolioParentOrgId, startDate, options, internalOptions, onboarding,…
- **Get single ChartHop org by ID** (Get). Get a single Charthop org by id (accepts either id or slug). Returns: id, name, slug, type, customerId, createAt, activeAt. Required: id.
- **Create a ChartHop org** (Create). Create a new Charthop org. Returns: id, type. Required: name, type, estEmployees, status, currencies, dataResidency, timezone, options, onboarding.
- **Update a ChartHop org by ID** (Update). Update an existing Charthop org by id (accepts either id or slug). Returns an empty 204 response on success. Required: id.
- **List all ChartHop people** (List). List persons in a Charthop organization with search, date filtering, and configurable field selection. Returns: id, name, startDate, attributes. Max 100 per page. Required: org_id.
- **Get single ChartHop person by ID** (Get). Get a single person by id in Charthop. Returns: id, name, startDate, attributes. Required: id, org_id.
- **Create a ChartHop person** (Create). Create a new person in Charthop. Returns the created person object including id, name, startDate, and additional org-specific fields. Required: org_id.
- **Update a ChartHop person by ID** (Update). Update a person in ChartHop by id. Returns an empty 204 response on success. The optional scenario_id and date parameters control which scenario and effective date the update applies to. Required: id, org_id.
- **Delete a ChartHop person by ID** (Delete). Delete a person in ChartHop by id. Returns an empty 204 response on success. ChartHop documents no query parameters for this operation. Required: id, org_id.
- **List all ChartHop jobs** (List). List jobs in a Charthop organization with support for date-based filtering, full-text search, scenario-specific queries, and configurable field selection. Returns job records with org-specific fields including id and attributes. Max 100 per page. Required: org_id.
- **Get single ChartHop job by ID** (Get). Get a single Charthop job by id. Returns the job object with org-specific fields including id and attributes. Required: id, org_id.
- **Create a ChartHop job** (Create). Create a job in a Charthop organization, optionally within a scenario and with an effective date. Returns the created job object with org-specific fields including id and attributes. A request body containing job field values is required. Required: org_id.
- **Update a ChartHop job by ID** (Update). Update a job in Charthop by id. Returns a 202 response with no content body, indicating the snapshot is currently building. Required: id, org_id.
- **Delete a ChartHop job by ID** (Delete). Delete a job in Charthop by id. Returns an empty 204 response on success. Required: id, org_id.
- **List all ChartHop groups** (List). List groups in a Charthop organization, optionally filtered by type, date, or search string. Returns: id, name, code, type. Max 100 per page. Required: org_id.
- **Get single ChartHop group by ID** (Get). Get a single Charthop group by id. Returns: id, name, code, type. Required: id, org_id.
- **Create a ChartHop group** (Create). Create a new group in Charthop of the specified type. Returns a 202 accepted response with no content; the snapshot is currently building. Required: org_id, type.
- **Update a ChartHop group by ID** (Update). Update an existing Charthop group by id. Returns a 202 accepted response with no content; the snapshot is currently building. Required: id, org_id, type.
- **Delete a ChartHop group by ID** (Delete). Delete a Charthop group by id. Returns an empty 204 response on success. Required: id, org_id.
- **ChartHop groups add members** (Add). Add members to a ChartHop group. Accepts a required request body specifying the members to add. Returns an empty 204 response on success. Required: org_id, group_id, jobIds.
- **ChartHop groups remove members** (Delete). Remove members from a ChartHop group. Returns an empty 204 response on success. Optional: scenario_id to target a specific scenario, and date to set the effective date of member removals. Required: org_id, group_id, jobIds.
- **List all ChartHop job codes** (List). List all job codes in a Charthop organization, paginated by cursor. Returns: id, orgId, title, code, notes, color, image, fieldValues, createId, createBehalfId, createAttribution, createAt, updateId, updateBehalfId, updateAttribution, updateAt, deleteId, deleteBehalfId, deleteAttribution, deleteAt. Required: org_id.
- **Get single ChartHop job code by ID** (Get). Get a single Charthop job code by id. Returns: id, fieldValues. Required: id, org_id.
- **Create a ChartHop job code** (Create). Create a new job code in a Charthop organization. Returns: id. Required: org_id, orgId, title, code.
- **Update a ChartHop job code by ID** (Update). Update an existing Charthop job code by id. Returns an empty 204 response on success. Required: id, org_id, orgId, title, code.
- **Delete a ChartHop job code by ID** (Delete). Delete a Charthop job code by id. Returns an empty 204 response on success. Required: id, org_id.
- **List all ChartHop fields** (List). List all fields in a Charthop organization with cursor pagination. Filter by table, table type, form, specific field ids, or field origin (builtin/custom). Returns: id, orgId, name, label, labelTr, description, inUse, expr, exprType, type, plural, values, defaultValue, options, entityType, isUnique, isRequired, isEffectiveDated, aliases, groupTypeId, calc, classification, sensitive, hideExpr,…. Required: org_id.
- **Get single ChartHop field by ID** (Get). Get a single Charthop field by id. Returns: id, attributes. Required: id, org_id.
- **Create a ChartHop field** (Create). Create a custom field in a ChartHop organization. Returns the created field object including its id, name, and type. Required: org_id, name, label, type, entityType, sensitive, isUnique, isRequired.
- **Update a ChartHop field by ID** (Update). Update an existing field in ChartHop by field id. Returns an empty 204 response on success. Required: id, org_id.
- **Delete a ChartHop field by ID** (Delete). Delete a field in ChartHop by id. Returns an empty 204 response on success. Required: id, org_id.
- **List all ChartHop bands** (List). List compensation bands in a Charthop organization, optionally filtered by job tier, job level, or effective date. Returns: id, orgId, label, color, baseCompMax, baseCompMid, baseCompMin, baseSpread, baseInterval, baseTargetPay, baseTargetPayPercentile, jobTierOneField, jobTierTwoField, jobTierThreeField, jobLevel, equityTargetShares, equityTargetPercentOfBase, equityTargetValue,…. Required: org_id.
- **Get single ChartHop band by ID** (Get). Get a single compensation band by id in Charthop as of an effective date. Returns: id, label, baseCompMin, baseCompMax, jobTierOne, jobTierTwo, jobTierThree, jobLevel. Required: id, org_id.
- **Create a ChartHop band** (Create). Create a compensation band in Charthop. Returns an empty 202 response indicating the snapshot is currently building. Required: org_id, label, color, baseInterval, jobLevel.
- **Update a ChartHop band by ID** (Update). Update a compensation band by id in Charthop. Returns an empty 202 response indicating the snapshot is currently building. Required: id, org_id, label, color, baseInterval.
- **Delete a ChartHop band by ID** (Delete). Delete a compensation band by id in Charthop with an optional effective date. Returns a 202 Accepted response with no body, indicating the snapshot is currently building. Required: id, org_id.
- **ChartHop bands bulk delete** (Delete). Delete all comp bands in a ChartHop organization on an effective date. Returns a Process object including processId, status, results, and state for tracking the async deletion. Required: org_id.
- **List all ChartHop users** (List). List ChartHop users within an org or across orgs, with optional filtering by invite status, role, policy, and search query. Returns: id, appId, name, email, password, orgs, imagePath, status, type, options, internalOptions, bundleInstall, secrets, activeAt, loginAt, appRunCheckAt, loginCount, sessionCount, loginFailCount, title, remoteIp, createId, createBehalfId, createAttribution, createAt,…
- **Get single ChartHop user by ID** (Get). Get a single ChartHop user by id. Returns: id, name, email, inviteStatus, activeAt, updateAt. Required: id.
- **Create a ChartHop user** (Create). Create a new user in ChartHop. Returns: id. Required: orgs.
- **Update a ChartHop user by ID** (Update). Update an existing ChartHop user by id. Returns an empty 204 response on success. Required: id.
- **List all ChartHop timeoffs** (List). List time off requests in ChartHop, filterable by person and date range. Returns: id, orgId, personId, externalId, startDate, startDatePartialDay, startDatePartialDayPeriod, endDate, endDatePartialDay, endDatePartialDayPeriod, days, hours, typeDescription, timeOffPolicyId, note, approval, approvalAt, approvalUserId, createId, createBehalfId, createAttribution, createAt, updateAt, updateId,…. Required: org_id.
- **Get single ChartHop timeoff by ID** (Get). Get a single time off request by id in ChartHop. Returns: id, personId, createdAt, updatedAt. Required: id, org_id.
- **Create a ChartHop timeoff** (Create). Create a new time off request in ChartHop. Returns: id, createdAt, updatedAt. Required: org_id, orgId, personId, startDate, endDate.
- **Update a ChartHop timeoff by ID** (Update). Update an existing time off request in ChartHop. Returns an empty 204 response on success. Required: id, org_id.
- **Delete a ChartHop timeoff by ID** (Delete). Delete a time off request in ChartHop. Returns an empty 204 response on success. Required: id, org_id.
- **ChartHop timeoffs approve** (Approve). Approve a pending time off request in ChartHop. Returns an empty 204 response on success. Optionally pass target_approver_job_id to act as an approval delegate for another approver. Required: org_id, timeoff_id.
- **ChartHop timeoffs reject** (Reject). Reject a pending time off request in ChartHop. Returns an empty 204 response on success. Optionally pass target_approver_job_id to act as an approval delegate for another approver. Required: org_id, timeoff_id.
- **List all ChartHop timeoff policies** (List). List all time off policies in a Charthop organization. Returns: id, orgId, name, displayName, description, guidelines, color, emoji, type, status, allocationType, annualAllocation, accrualConfig, maxConsecutiveDaysPerRequest, minBalance, enableCarryOverBalance, maxCarryOverBalance, carryOverExpirationDate, carryOverExpirationMonths, enablePartialDayRequests, partialDayGranularity,…. Required: org_id.
- **Get single ChartHop timeoff policy by ID** (Get). Get a single Charthop time off policy by id. Returns: id, attributes. Required: id, org_id.
- ...and 51 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
