# Planhat MCP connector

The Planhat connector brings companies, end users, invoices, campaigns and issues into Claude, ChatGPT, Cursor and any MCP client through one governed endpoint, where each person works inside their own Planhat access and every action is logged.

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

## Facts

| | |
| --- | --- |
| Application | Planhat |
| Category | CRM |
| AI tools | 97 |
| Authentication | Connects with an API key |
| Needs 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. 97 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Planhat is connected

- Which Planhat companies have open invoices over 30 days?
- Summarize campaign performance across our Planhat accounts this quarter.
- Create a Planhat company for the account we signed yesterday.

## Connect Planhat in Elaichi

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

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

## Connect Planhat to 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.

## Connect Planhat to 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.

## Connect Planhat to 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 Planhat 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 Planhat 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 Planhat through Elaichi

### Catch a company record up after a call

Customer Success. After a check-in, tell the agent what changed and it updates the Planhat company for you, so the account picture stays current without opening another tab.

### Log an issue while the customer is talking

Customer Success. Create a Planhat issue against the right company the moment a customer raises a problem, then update it as the fix moves along.

### See every end user at an account

Support. Before replying to a ticket, ask who the end users are at that company in Planhat and which issues are already open for them.

### Check invoices before a renewal conversation

Finance. Pull up the invoices on a Planhat company and spot anything overdue or missing before the account team walks into the renewal call.

### Set up and tidy customer campaigns

Marketing. Create a Planhat campaign, update its details as the plan changes, and list what is running so you know what customers are already receiving.

### Add new customers without retyping

Revenue Operations. When a deal closes, create the Planhat company and its end users from the handover notes in one ask, instead of copying fields by hand.

## Frequently asked questions

### How do I connect Planhat to Claude?

It takes two steps. In Elaichi, choose Planhat and paste in a Planhat API key; that is the whole sign-in, with no OAuth application to register and no client ID or secret to generate. Then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude signs you into Elaichi and your Planhat companies, end users, invoices, campaigns and issues are ready to work with.

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

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

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

With Planhat connected, an agent can look up a company and its end users, list open issues, check invoices, and review the campaigns a customer is part of. It can also create and update those records for you, such as adding a new end user or logging an issue after a call. Because Planhat has a large set of actions, short concrete asks like "show me open issues for Acme" work better than long paragraphs.

### Does connecting Planhat give the AI everything in my Planhat workspace?

No. Everything an agent does in Planhat runs inside the access of the person who signed in and the Planhat account whose key was connected, so it sees the same companies, invoices and issues that person could already open. Elaichi can narrow that further, for example to reading only, but it can never widen access beyond what Planhat itself allows.

### Can my team share one Planhat connection?

Yes. One person connects Planhat in Elaichi and shares the connection with a team, and nobody else ever handles the Planhat API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person who updated a company or created an issue, not a shared account.

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

Yes. Restrictions in Elaichi apply per action, so you can allow reading Planhat companies and issues while blocking deletes, or blocking any change to invoices. A blocked action is never advertised to Claude, ChatGPT or any other client, so no prompt, however worded, can reach it.

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

When you offboard a person in Elaichi, their access to Planhat through every connected client ends at once. If they had shared a Planhat connection with a team, it keeps working for everyone else on that team. If you want Planhat gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client at the same time.

## All 97 Planhat tools

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

- **List all Planhat campaigns** (List). List campaigns in Planhat. Returns an array of campaigns including _id, companyId, name, and campaignPurpose fields. Supports filtering, sorting, and pagination.
- **Get single Planhat campaign by ID** (Get). Get campaign by id in Planhat. Requires id. Returns key fields including _id, companyId, companyName, name, campaignPurpose, externalId, custom, and usage.
- **Update a Planhat campaign by ID** (Update). Update a specific campaign in Planhat using id. The response returns key fields including _id, name, campaignPurpose, companyId, externalId, companyName, __v, and sourceId.
- **Create a Planhat campaign** (Create). Create a campaign in Planhat. Requires name and companyId. The response includes _id, name, campaignPurpose, companyId, externalId, sourceId, custom fields, and companyName.
- **Delete a Planhat campaign by ID** (Delete). Delete a specific campaign in Planhat. Requires id. Returns fields n, ok, and deletedCount indicating the number of deleted items and operation status.
- **List all Planhat companies** (List). List companies in Planhat. Returns key fields including _id, name, status, phase, domains, tags, owner, externalId, and custom metrics.
- **Get single Planhat company by ID** (Get). Get a specific company in Planhat using id. Returns key fields including _id, name, phase, status, createDate, lastUpdated, owner, domains, custom fields, and sales details for the specified company.
- **Create a Planhat company** (Create). Create a new company in Planhat. Requires the name field. Returns company details including _id, name, status, externalId, phase, domains, and country.
- **Update a Planhat company by ID** (Update). Update a specific company in Planhat using its id. The response returns details including _id, name, status, externalId, phase, and key financial metrics such as mrrTotal and nrrTotal.
- **Delete a Planhat company by ID** (Delete). Delete a company in Planhat using id. Requires id. Returns fields n, ok, and deletedCount indicating the number of deleted records and success status.
- **List all Planhat invoices** (List). List invoices in Planhat. Returns fields such as _id, invoiceNo, amountDue, amountPaid, status, cId, cName, invoiceDate, dueDate, lineItems, amountTotal, and updatedAt for each invoice in the response.
- **Get single Planhat invoice by ID** (Get). Get a specific invoice by id in Planhat. Returns fields such as _id, invoiceNo, amountDue, amountPaid, status, cName, invoiceDate, dueDate, lineItems, and amountTotal. Requires id as a path parameter.
- **Create a Planhat invoice** (Create). Create an invoice in Planhat. Requires cId. Optionally include invoiceDate and currency for meaningful data. Returns fields such as _id, invoiceNo, amountTotal, status, dueDate, invoiceDate, currency, and lineItems in the response.
- **Update a Planhat invoice by ID** (Update). Update an existing invoice in Planhat using its id. Returns fields such as _id, invoiceNo, amountTotal, status, dueDate, currency, lineItems, cName, and updatedAt in the response.
- **Delete a Planhat invoice by ID** (Delete). Delete an invoice in Planhat using id. Requires id. Returns n, ok, and deletedCount fields indicating operation success and number of invoices removed.
- **List all Planhat endusers** (List). List endusers in Planhat. Returns fields such as _id, companyId, name, email, lastActive, relevance, experience, and custom attributes for each enduser.
- **Get single Planhat enduser by ID** (Get). Get details of a specific enduser in Planhat using id. Returns key fields such as _id, companyId, companyName, name, email, lastActive, and custom attributes.
- **Create a Planhat enduser** (Create). Create an enduser in Planhat. Requires companyId and at least one of email, externalId, or sourceId. Returns fields such as _id, email, firstName, lastName, companyId, companyName, name, createDate, and updatedAt.
- **Update a Planhat enduser by ID** (Update). Update an existing enduser in Planhat. Requires id. Returns fields such as _id, email, firstName, lastName, companyId, name, and updatedAt.
- **Delete a Planhat enduser by ID** (Delete). Delete a specific enduser in Planhat using id. Returns confirmation fields n, ok, and deletedCount indicating deletion status.
- **List all Planhat issues** (List). Get a list of issues in Planhat. Returns an array of issues with fields _id, companyIds, title, and status.
- **Get single Planhat issue by ID** (Get). Get a specific issue in Planhat by id. Returns fields such as _id, companyIds, title, status, createdAt, and updatedAt in the response.
- **Create a Planhat issue** (Create). Create a new issue in Planhat. Requires title. Optionally include companyIds or enduserIds. Returns fields such as _id, title, description, status, companyIds, enduserIds, createdAt, and updatedAt.
- **Update a Planhat issue by ID** (Update). Update an issue in Planhat using id. Requires id. Returns fields such as _id, title, description, status, companies, updatedAt, and createdAt to confirm the update.
- **Delete a Planhat issue by ID** (Delete). Delete an issue in Planhat. Requires id. Returns n, ok, and deletedCount fields indicating the result of the deletion operation.
- **List all Planhat licenses** (List). List licenses in Planhat. Returns an array of licenses with fields such as _id, companyId, value, and product.
- **Get single Planhat license by ID** (Get). Get a specific license in Planhat using id. Returns renewalStatus, renewalDate, mrr, companyName, sourceId, and currency details. Supports id, extid, or srcid as identifiers.
- **Create a Planhat license** (Create). Create a new license in Planhat. Requires companyId. Returns details such as renewalStatus, companyId, product, _currency, mrr, fromDate, toDate, and value.
- **Update a Planhat license by ID** (Update). Update a specific license in Planhat using id. Returns fields like renewalStatus, companyName, mrr, product, value, and renewalDate representing the updated license details.
- **Delete a Planhat license by ID** (Delete). Delete a specific license in Planhat. Requires id. Returns fields n, ok, and deletedCount indicating deletion result.
- **List all Planhat opportunities** (List). List opportunities in Planhat. Returns fields such as _id, title, and status for each opportunity. Supports filtering and sorting. Requires no parameters.
- **Get single Planhat opportunity by ID** (Get). Get a specific opportunity in Planhat using id. Returns fields such as _id (unique identifier), status (current state), companyId (related company), stageHistory (movement through stages), landingDate, comments, and companyName.
- **Create a Planhat opportunity** (Create). Create an opportunity in Planhat. Requires companyId. Returns fields such as _id, status, salesStage, dealDate, ownerId, _currency, companyId, title, mrr, nrr, and companyName representing the created opportunity details.
- **Update a Planhat opportunity by ID** (Update). Update an existing opportunity in Planhat using id or externalId. Requires id. Returns fields such as _id, status, salesStage, dealDate, companyId, companyName, mrr, nrr, and closeDate.
- **Delete a Planhat opportunity by ID** (Delete). Delete an opportunity in Planhat by id. Requires id. Returns fields n, ok, and deletedCount indicating the number of deleted records and operation success.
- **List all Planhat projects** (List). List projects in Planhat. Returns an array of projects with fields _id (unique project identifier), companyId (ID of associated company), and name (project name).
- **Get single Planhat project by ID** (Get). Get a specific project in Planhat by id. Returns fields including _id, companyId, companyName, name, startDate, custom attributes (e.g., Product, Renewal in days, Activity Count), and mrr.
- **Create a Planhat project** (Create). Create a new project in Planhat. Requires name and companyId. Returns project details including _id, companyId, name, currency, mrr, startDate, endDate, and companyName.
- **Update a Planhat project by ID** (Update). Update a project in Planhat using id. Returns project details such as _id, companyId, name, startDate, endDate, currency, mrr, and custom fields. The project id must be provided in the request URL.
- **Delete a Planhat project by ID** (Delete). Delete a specific project in Planhat. Requires id. Returns n, ok, and deletedCount indicating the deletion status and number of projects deleted.
- **List all Planhat tasks** (List). Get list of tasks in Planhat. Returns an array of tasks with fields such as _id, mainType, ownerId, companyId, companyName, createdAt, updatedAt, and action. Requires no parameters.
- **Get single Planhat task by ID** (Get). Get a specific task in Planhat by id. The response includes key fields such as mainType, status, companyName, ownerName, workflowName, and timestamps for createdAt and updatedAt.
- **Create a Planhat task** (Create). Create a new task in Planhat. Requires companyId. Returns fields such as mainType, action, status, companyId, ownerId, and timestamps (createdAt, updatedAt) representing the created task details.
- **Update a Planhat task by ID** (Update). Update a specific task in Planhat using id. Returns fields such as mainType, status, action, description, ownerId, companyId, createdAt, and updatedAt for the updated task.
- **Delete a Planhat task by ID** (Delete). Delete a specific task in Planhat. Requires id parameter in the request path. Returns n, ok, and deletedCount to confirm the deletion status.
- **List all Planhat tickets** (List). List tickets in Planhat. Returns fields such as _id, externalId, subject, snippet, status, email, url, companyId, companyName, createDate, and updateDate in the response.
- **Delete a Planhat ticket by ID** (Delete). Delete a specific ticket in Planhat using id. Requires id in the request URL. Returns key ticket fields such as _id, subject, status, source, and updateDate for confirmation after deletion.
- **List all Planhat users** (List). List all users in Planhat. Returns fields such as firstName, lastName, nickName, email, externalId, image, isHidden, removed, inactive, managers, teams, isExposedAsSenderOption, createdAt, updatedAt, and tzOffset.
- **Get single Planhat user by ID** (Get). Get a specific user in Planhat using id. Returns fields including _id, firstName, lastName, email, permissions, roles, and accountAccess.
- **Create a Planhat user** (Create). Create a new user in Planhat. Requires nickName, email, firstName, and lastName in the payload. Returns user details including firstName, lastName, notification preferences, and visibility flags.
- **Update a Planhat user by ID** (Update). Update a user in Planhat using id. The response returns fields such as _id, firstName, lastName, email, nickName, roles, and createDate showing the updated user details.
- **Delete a Planhat user by ID** (Delete). Delete a specific user in Planhat using id. Requires the id parameter in the URL. Returns an empty JSON object upon successful deletion.
- **List all Planhat conversations** (List). List conversations in Planhat. Returns fields such as date, subject, snippet, companyId, companyName, userIds, and endusers for each conversation.
- **Get single Planhat conversation by ID** (Get). Get a specific conversation in Planhat using id. Returns key fields such as type, subject, snippet, date, companyName, users, and endusers that describe the conversation content and participants.
- **Create a Planhat conversation** (Create). Create a new conversation in Planhat. Requires companyId. Returns conversation details including id, subject, description, date, companyName, users, and endusers.
- **Update a Planhat conversation by ID** (Update). Update a specific conversation in Planhat. Requires id. Returns fields such as _id, subject, description, users, endusers, companyId, companyName, date, and createDate with updated conversation details.
- **Delete a Planhat conversation by ID** (Delete). Delete a specific conversation in Planhat. Requires id. Returns conversation details including starred, pinned, isOpen, companyId, subject, description, users, and endusers fields before deletion.
- **List all Planhat custom fields** (List). Get a list of custom fields in Planhat. Returns fields such as _id, name, type, parent, and visibility properties including isFeatured, isHidden, and isLocked.
- **Get single Planhat custom field by ID** (Get). Get a specific custom field in Planhat by id. Requires id. Returns _id, isFeatured, listValues, parent, type, isHidden, and name fields with details about the custom field configuration.
- **Create a Planhat custom field** (Create). Create a custom field in Planhat. Requires name, parent, and type. Returns fields such as _id (unique identifier), name, parent, type, and display flags (isFeatured, isHidden, isLocked) that describe the created custom field.
- **Update a Planhat custom field by ID** (Update). Update a specific custom-field in Planhat. Requires id. Returns fields such as _id, isFeatured, isHidden, isShared, parent, type, and name indicating the updated field configuration.
- **Delete a Planhat custom field by ID** (Delete). Delete a specific custom field in Planhat using id. Returns fields n, ok, and deletedCount in the response indicating the deletion result.
- **List all Planhat assets** (List). List assets in Planhat. Returns an array of assets with fields _id, companyId, and name in the response.
- **Get single Planhat asset by ID** (Get). Get a specific asset in Planhat by id. The response includes fields such as _id (unique identifier), companyId (associated company), companyName (company name), name (asset name), custom (custom fields), externalId (external reference), and usage (usage metrics).
- **Create a Planhat asset** (Create). Create a new asset in Planhat. Requires name and companyId. Returns the created asset with fields such as _id, name, companyId, externalId, sourceId, custom fields, and companyName in the response.
- **Update a Planhat asset by ID** (Update). Update an asset in Planhat using the required id parameter. Returns _id, name, companyId, externalId, companyName, __v, and sourceId fields in the response.
- **Delete a Planhat asset by ID** (Delete). Delete a specific asset in Planhat. Requires id. Returns n, ok, and deletedCount fields indicating the number of deleted records and operation success.
- **List all Planhat churn** (List). List churn records in Planhat. Returns fields such as _id, licenseId, companyId, companyName, churnDate, products, currency, and value for each record.
- **Get single Planhat churn by ID** (Get). Get a specific churn record in Planhat using id. Requires id in the path. Returns _id, licenseId, companyId, companyName, churnDate, products, currency, value, and reasons.
- **Create a Planhat churn** (Create). Create a churn record in Planhat. Requires companyId and isChurn. Returns fields such as _id (record identifier), churnDate (date of churn), reasons (list of churn reasons), value (monetary impact), currency, comment, companyId, and companyName.
- **Update a Planhat churn by ID** (Update). Update a specific churn record in Planhat using id. The response returns fields such as _id, snoozed, products, reasons, churnDate, value, currency, comment, companyId, and companyName.
- **Delete a Planhat churn by ID** (Delete). Delete a specific churn record in Planhat. Requires id. Returns fields n, ok, and deletedCount indicating the number of records removed, operation success, and delete count.
- **List all Planhat nps** (List). List NPS records in Planhat. Returns fields such as _id, npsId, email, npsDate, nps score, npsComment, scoreType, and company identifiers (cId, campaignId) representing survey responses and their metadata.
- **Get single Planhat np by ID** (Get). Get a specific NPS in Planhat by id. Returns _id, npsId, email, npsDate, nps, scoreType, cId, campaignId, source, and sourceId fields to identify and track the NPS response.
- **Create a Planhat np** (Create). Create an NPS record in Planhat. Requires email and score. Returns _id, email, score, euId, cId, scoreType, dateSent, dateAnswered, and __v fields in the response.
- **Update a Planhat np by ID** (Update). Update an NPS record in Planhat by id. Requires id. Returns fields such as _id, campaignId, email, score, euId, cId, scoreType, dateSent, dateAnswered, and comment for the updated record.
- **Delete a Planhat np by ID** (Delete). Delete an NPS record in Planhat by specifying id in the request URL. Returns n (number of matched records), ok (operation status), and deletedCount (number of deleted records) in the response.
- **List all Planhat objective** (List). List objectives in Planhat. Returns an array of objectives with fields such as _id (objective identifier), companyId (associated company), name (objective name), and health (status indicator).
- **Get single Planhat objective by ID** (Get). Get a specific objective in Planhat by id. Requires id. Returns key fields such as _id, companyId, companyName, name, health, externalId, and custom metrics data.
- **Create a Planhat objective** (Create). Create a new objective in Planhat. Requires name and companyId (can reference company externalId or sourceId). Returns fields including _id, name, health, companyId, externalId, sourceId, custom, and companyName.
- **Update a Planhat objective by ID** (Update). Update an objective in Planhat using id. The response returns fields such as _id, name, health, companyId, externalId, companyName, and sourceId, representing the updated objective details.
- **Delete a Planhat objective by ID** (Delete). Delete an objective in Planhat using the required id. Returns n (number of matched documents), ok (operation success flag), and deletedCount (number of deleted objectives).
- **List all Planhat sales** (List). List sales in Planhat. Returns an array of sales objects including _id, product, value, and companyId fields.
- **Get single Planhat sale by ID** (Get). Get sale by id in Planhat. Requires id. Returns value, product, _currency, salesDate, companyId, and companyName fields in the response.
- **Create a Planhat sale** (Create). Create a sale in Planhat. Requires companyId. Returns id, value, product, _currency, salesDate, companyId, and companyName in the response.
- **Update a Planhat sale by ID** (Update). Update a specific sale in Planhat using id. The response returns fields such as _id, value, product, _currency, salesDate, companyId, and companyName. Requires id in the request URL.
- **Delete a Planhat sale by ID** (Delete). Delete a specific sale in Planhat. Requires id. Returns n, ok, and deletedCount fields indicating the number of records deleted and operation success.
- **List all Planhat time entries** (List). List time-entries in Planhat. Returns an array of time entries where each entry includes fields _id (unique identifier), hours (number of hours logged), and date (entry date).
- **Get single Planhat time entry by ID** (Get). Get a specific time entry in Planhat by id. Requires id. Returns fields such as timesheetStatus (status of the entry), assignedModel (assigned entity type), hours (worked hours), date (entry date), and description (work details).
- **Create a Planhat time entry** (Create). Create a new time entry in Planhat. Requires date and hours. Hours must be positive, between 0.1 and 24, and can be a decimal. Returns timesheetStatus, _id, hours, date, description, totalBilled, totalCost, createdAt, and updatedAt.
- **Update a Planhat time entry by ID** (Update). Update a specific time entry in Planhat using id. Returns fields such as _id, timesheetStatus, assignedModel, hours, date, description, totalBilled, totalCost, createdAt, and updatedAt.
- **Delete a Planhat time entry by ID** (Delete). Delete a specific time entry in Planhat using the required id parameter. Returns n (number of operations), ok (operation status), and deletedCount (number of deleted documents) in the response.
- **List all Planhat timesheet** (List). List timesheets in Planhat. Returns a list of timesheets with fields _id, dateFrom, and dateTo in the response.
- **Get single Planhat timesheet by ID** (Get). Get a specific timesheet in Planhat by id. Requires id. Returns timeEntries (list of entry IDs), status (submission state), assignedModel and assignedId (owner details), dateFrom and dateTo (date range), and timestamps for tracking creation and updates.
- **Create a Planhat timesheet** (Create). Create a new timesheet in Planhat. The timesheet is created with status 'submitted'. Returns fields such as timeEntries, status, assignedModel, _id, assignedId, dateFrom, dateTo, createdAt, and updatedAt.
- **Update a Planhat timesheet by ID** (Update). Update a specific timesheet in Planhat using id. Returns _id, timeEntries, status, assignedModel, assignedId, dateFrom, dateTo, createdAt, updatedAt, approvedBy, and dateOfApproval in the response.
- **Delete a Planhat timesheet by ID** (Delete). Delete a specific timesheet in Planhat. Requires id. Returns n (matched records), ok (operation status), and deletedCount (number of records deleted) in the response.
