# Sesame MCP connector

Connect Sesame to Elaichi and Claude, ChatGPT, Cursor and the Elaichi Agent can look up employees, departments, offices and job charges and keep them current, with every person working inside their own Sesame access.

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

## Facts

| | |
| --- | --- |
| Application | Sesame |
| Category | HRIS |
| AI tools | 297 |
| 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 Sesame is connected

- List employees in the Barcelona office with their departments
- Update Ana García's job charge to Senior Account Manager
- Which Sesame departments have no office assigned yet?

## Connect Sesame in Elaichi

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

1. Open Connections, choose Add connection, and pick Sesame.
2. Optionally set Share with, then press Connect.
3. Paste a Sesame API key. One person generates a token in Sesame 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 Sesame tools are exposed, rename them, or freeze arguments before anyone points a client at it.

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

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

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

### Catch an employee record up after onboarding

HR. Ask for a new hire's Sesame record and have the department, office and job charge filled in from the offer letter, without opening five screens.

### Answer who sits in which department

People Ops. Pull the list of Sesame employees for a department or office and get it as a clean table when a manager asks for it.

### Keep offices and locations current

Office management. When a team moves floors or a new site opens, add or update the Sesame office and location and move the affected employees over in one go.

### Check headcount by office before budgeting

Finance. Count Sesame employees per office and department to sanity check the headcount plan against what is actually in the system.

### Find a team member's details fast

Managers. Look up an employee in Sesame by name and get their job charge, department and office without asking HR to dig it out.

### Create the employee record on day one

IT. Create the Sesame employee when the account request comes in, so the record exists before the laptop is handed over.

## Frequently asked questions

### How do I connect Sesame to Claude?

First, connect Sesame in Elaichi by pasting an API key from your Sesame account, which takes about a minute. Then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. There is no client ID or secret to generate, and Claude will ask you to sign in to Elaichi as yourself.

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

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

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

It can list and look up Sesame employees, departments, offices, locations and job charges, create new ones, and update or remove existing ones. Ask for the employees in an office, update a job charge after a promotion, or add a department when a team is formed. Short, concrete asks work better than long paragraphs.

### Does connecting Sesame give the AI access to every employee record?

No. Every call to Sesame runs as the person who signed in, so the AI only sees the employees, departments and offices that person already has access to in Sesame. Elaichi can narrow that access further with roles and restrictions, and it can never widen it.

### Can my team share one Sesame connection?

Yes. One person connects Sesame with their API key and shares the connection with a team in Elaichi, and nobody else ever handles the key. Each teammate still signs in as themselves, so the audit log names the actual person behind every Sesame change.

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

Yes. Restrictions in Elaichi apply per action, so you can allow reading Sesame employees while blocking deleting employees, departments or offices. A restricted action is never advertised to Claude, ChatGPT or Cursor, so no prompt can reach it.

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

Offboarding that person in Elaichi ends their access to Sesame through every client at once. If they shared a Sesame connection, it keeps working for everyone else on the team. Disconnecting Sesame once in Elaichi removes it from Claude, ChatGPT, Cursor and the Elaichi Agent together.

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

Yes. Sesame 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 297 Sesame tools

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

- **List all Sesame info** (List). Get the Sesame company that owns the API token (Show Token Info). Truto calls it after connecting to check the token and to label the account with the company name; several create calls, such as employees.create and offices.create, require this company id.
Not paginated: the endpoint documents no page or limit. Each record has: company.
- **List all Sesame employees** (List). List Sesame employees. Sesame returns only active employees unless you pass status[in]=active,inactive (or status[in]=inactive). Filter by code, dni or email, or by departmentIds, officeIds or entityGroupIds (comma-separated UUIDs), and sort with orderBy ("field1 asc, field2 desc").
Paginated by Truto (page/limit, 100 records per page). Each record has: id, firstName, lastName, secondLastName, email, workStatus, workStatusUpdatedAt, imageProfileURL, code, pin (+43 more).
- **Get single Sesame employee by ID** (Get). Get one Sesame employee by id.
Returns: id, firstName, lastName, secondLastName, email, workStatus, workStatusUpdatedAt, imageProfileURL, code, pin (+43 more). Required: id.
- **Create a Sesame employee** (Create). Create a Sesame employee. companyId is the company id returned by info.list. Set invitation to true to email an invitation to the address in email. Requests use personalEmail and childrenCount where responses use personalMail and children; nationality and professionalCategoryCode are deprecated (use nationalities and contributionGroupId).
Returns the whole Sesame body: data (id, firstName, lastName, secondLastName, email, workStatus, workStatusUpdatedAt, imageProfileURL, code, pin (+43 more)) and meta. Required: companyId, firstName, lastName, invitation, status.
- **Update a Sesame employee by ID** (Update). Update a Sesame employee by id (HTTP PUT). Sesame requires firstName, lastName and status on every update. Requests use personalEmail and childrenCount where responses use personalMail and children.
Returns the whole Sesame body: data (id, firstName, lastName, secondLastName, email, workStatus, workStatusUpdatedAt, imageProfileURL, code, pin (+43 more)) and meta. Required: id, firstName, lastName, status.
- **Delete a Sesame employee by ID** (Delete). Delete a Sesame employee by id.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **Update a Sesame company by ID** (Update). Update the Sesame company by id (the company id returned by info.list).
Returns: id, name, notificationEmail, language, createdAt, updatedAt. Required: id, name, notificationEmail, language.
- **List all Sesame job charges** (List). List Sesame job charges (core job titles). Filter by name and sort with orderBy.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, name, editable.
- **Create a Sesame job charge** (Create). Create a Sesame job charge.
Returns: id, name, editable. Required: name.
- **Get single Sesame job charge by ID** (Get). Get one Sesame job charge by id.
Returns: id, name, editable. Required: id.
- **Update a Sesame job charge by ID** (Update). Update a Sesame job charge by id.
Returns: id, name, editable. Required: id, name.
- **Delete a Sesame job charge by ID** (Delete). Delete a Sesame job charge by id.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **List all Sesame departments** (List). List Sesame departments. Filter by name or by archived state (archivedAt[null] / archivedAt[not_null]) and sort with orderBy.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, name.
- **Create a Sesame department** (Create). Create a Sesame department.
Returns: id, name. Required: name.
- **Update a Sesame department by ID** (Update). Update a Sesame department by id.
Returns: id, name. Required: id, name.
- **Delete a Sesame department by ID** (Delete). Delete a Sesame department by id.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **List all Sesame offices** (List). List Sesame offices. Filter by name or by archived state (archivedAt[null] / archivedAt[not_null]) and sort with orderBy.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, name, address, coordinates, description, radio, defaultEmployeesDateTimeZone, isDeleted, archivedAt, isArchived.
- **Create a Sesame office** (Create). Create a Sesame office. companyId is the company id returned by info.list.
Returns: id, name, address, coordinates, description, radio, defaultEmployeesDateTimeZone, isDeleted, archivedAt, isArchived. Required: companyId, name.
- **Get single Sesame office by ID** (Get). Get one Sesame office by id.
Returns: id, name, address, coordinates, description, radio, defaultEmployeesDateTimeZone, isDeleted, archivedAt, isArchived. Required: id.
- **Update a Sesame office by ID** (Update). Update a Sesame office by id.
Returns: id, name, address, coordinates, description, radio, defaultEmployeesDateTimeZone, isDeleted, archivedAt, isArchived. Required: id, name.
- **Delete a Sesame office by ID** (Delete). Delete a Sesame office by id.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **List all Sesame locations** (List). List the geofence locations of the Sesame company, ordered by name by default.
Paginated by Truto (page/limit, 20 records per page). Each record has: id, companyId, name, address, coordinates, radius, createdAt, updatedAt.
- **Create a Sesame location** (Create). Create a Sesame geofence location. radius is in meters (10-1000).
Returns: id, companyId, name, address, coordinates, radius, createdAt, updatedAt. Required: name, coordinates, radius.
- **Get single Sesame location by ID** (Get). Get one Sesame geofence location by id.
Returns: id, companyId, name, address, coordinates, radius, createdAt, updatedAt. Required: id.
- **Update a Sesame location by ID** (Update). Update a Sesame geofence location by id. Every field except address is required.
Returns: id, companyId, name, address, coordinates, radius, createdAt, updatedAt. Required: id, name, coordinates, radius.
- **Delete a Sesame location by ID** (Delete). Soft-delete a Sesame location by id and remove its assignations. Deleting it again returns 404.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **List all Sesame custom fields** (List). List the Sesame custom field definitions. Sort with orderBy.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, companyId, name, slug, type, createdAt, updatedAt.
- **Create a Sesame custom field** (Create). Create a Sesame custom field definition. companyId is the company id returned by info.list.
Returns: id, companyId, name, slug, type, createdAt, updatedAt. Required: companyId, name, type.
- **Update a Sesame custom field by ID** (Update). Update a Sesame custom field definition by id.
Returns: id, companyId, name, slug, type, createdAt, updatedAt. Required: id, name.
- **Delete a Sesame custom field by ID** (Delete). Delete a Sesame custom field definition by id.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: id.
- **List all Sesame entity groups** (List). List Sesame entity groups (organisational groups). Filter by entityGroupId, employeeId, name[contains] or parentId.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, name, groupId, parentId, description, showGroup, costCenter, employeesCount.
- **Create a Sesame entity group** (Create). Create a Sesame entity group.
Returns only the id of the new record. Required: name.
- **Update a Sesame entity group by ID** (Update). Update a Sesame entity group by id. Only name is required; other fields are optional.
Returns no content (HTTP 204). Required: id, name.
- **Delete a Sesame entity group by ID** (Delete). Permanently delete a Sesame entity group by id. This cannot be undone.
Returns no content (HTTP 204). Required: id.
- **Sesame entity groups update no content** (Update). Update an entity group (PUT /core/v3/entity-groups/{entityGroupId}, the same endpoint as entity_groups.update). Sesame answers 204 No Content; this variant has no response_path, so the empty response is returned as {} instead of nothing. Pass the entity group id as the entity_group_id query parameter.
- **List all Sesame roles** (List). List the roles defined in Sesame.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, name.
- **List all Sesame roles assignations** (List). List the role assignations of one Sesame employee (employee_id).
Paginated by Truto (page/limit, 100 records per page). Each record has: id, role, affectedEntityType, affectedEntityId. Required: employee_id.
- **Create a Sesame roles assignation** (Create). Assign a Sesame role to an employee for an affected entity.
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: roleId, employeeId, entityAffectedId.
- **Sesame roles assignations bulk delete** (Delete). Unassign a Sesame role by role assignation id (assignationId in the JSON body).
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: assignationId.
- **List all Sesame employee managers** (List). List one employee's managers (clock and leave validators) from the Sesame v4 API, flagging automatic (generated on the fly) versus manual (explicitly assigned) entries. This replaces the deprecated core_employee_managers.list.
Not paginated: the endpoint documents no page or limit. Each record has: id, manager, employee, permission, order, automatic, createdAt, updatedAt. Required: employee_id.
- **List all Sesame employee department assignations** (List). List Sesame employee-to-department assignations. Filter by employeeId or departmentId.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, employee, department, createdAt, updatedAt.
- **Create a Sesame employee department assignation** (Create). Assign a Sesame employee to a department.
Returns: id, employee, department, createdAt, updatedAt. Required: employeeId, departmentId.
- **Sesame employee department assignations bulk delete** (Delete). Unassign a Sesame employee from a department (employeeId and departmentId in the JSON body).
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: employeeId, departmentId.
- **List all Sesame employee office assignations** (List). List Sesame employee-to-office assignations. Filter by employeeId or officeId.
Paginated by Truto (page/limit, 100 records per page). Each record has: id, employee, office, createdAt, updatedAt, isMainOffice.
- **Create a Sesame employee office assignation** (Create). Assign a Sesame employee to an office.
Returns: id, employee, office, createdAt, updatedAt, isMainOffice. Required: employeeId, officeId.
- **Update a Sesame employee office assignation by ID** (Update). Set whether a Sesame employee office assignation is the main office (isMainOffice), by assignation id.
Returns: id, employee, office, createdAt, updatedAt, isMainOffice. Required: id, isMainOffice.
- **Sesame employee office assignations bulk delete** (Delete). Unassign a Sesame employee from an office (employeeId and officeId in the JSON body).
Returns no content: Sesame answers HTTP 200 with an empty data value. Required: employeeId, officeId.
- **Create a Sesame entity group assignation** (Create). Assign one or more Sesame employees to an entity group.
Returns no content (HTTP 204). Required: entityGroupId, employeeIds.
- **Sesame entity group assignations bulk delete** (Delete). Unassign a Sesame employee from an entity group (IDs in the JSON body).
Returns no content (HTTP 204). Required: entityGroupId, employeeId.
- **List all Sesame location assignations** (List). List the assignations of Sesame locations to offices, departments and entity groups, ordered by entityType by default.
Paginated by Truto (page/limit, 20 records per page). Each record has: id, locationId, entityReference.
- ...and 247 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
