# Coupa MCP connector

Connecting Coupa to Elaichi lets Claude, ChatGPT, Cursor and any MCP client look up requisitions, purchase orders, suppliers and invoices, and raise new requisitions, inside each person's own access and fully logged.

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

## Facts

| | |
| --- | --- |
| Application | Coupa |
| Category | Accounting |
| AI tools | 62 |
| Authentication | App credentials |
| 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 Coupa is connected

- Show me open requisitions waiting for a purchase order
- Which suppliers invoiced us this month and for how much?
- Create a requisition for 20 standing desks from Steelcase

## Connect Coupa in Elaichi

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

1. Open Connections, choose Add connection, and pick Coupa.
2. Optionally set Share with, then press Connect.
3. Paste your Coupa app credentials. Coupa authenticates the app rather than a person. One person supplies the credentials once, and everyone else works through Share with.

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

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

## Coupa MCP connector for Claude Code

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

1. In a terminal, run `claude mcp add` with the endpoint.
2. Start Claude Code and run `/mcp`.
3. Pick elaichi, then sign in and approve in the browser.

```bash
claude mcp add --transport http elaichi --scope user https://api.elaichi.ai/mcp
```

Use `--scope project` instead to share it with the repository through `.mcp.json`.

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

## Coupa 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 Coupa 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

Every scope the client asks for starts ticked except "Delete data and remove access", which you tick yourself. Calling a Coupa tool needs "Run your connected tools". 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. Think hard before granting Run your connected tools, which can also delete in connected apps and cannot be undone.

## What teams do with Coupa through Elaichi

### Raise a requisition from a team's request

Procurement. Turn a request for new laptops into a Coupa requisition with the right items and supplier, without opening the form yourself.

### Match an invoice to its purchase order

Accounts payable. Pull up a supplier's invoice and the purchase order behind it side by side to check quantities and amounts before it is paid.

### See what is committed with each supplier

Finance. List open purchase orders by supplier and currency to understand spend commitments before month end close.

### Onboard a supplier and keep details current

Supplier management. Add a new supplier to Coupa and update contact or payment details when they change, straight from the chat.

### Find the right catalog item before ordering

Operations. Search Coupa items and supplier items to check what is already on contract and at what price.

### Check where a requisition is stuck

Office management. Ask which requisitions are still waiting and who raised them, then chase the right person.

## Elaichi vs Zapier MCP vs Composio for Coupa

All three can connect Coupa 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 Coupa tools | Allow or restrict single Coupa 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 Coupa 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 Coupa to Claude?

Connect Coupa in Elaichi first: Coupa uses app credentials, so you paste the credentials your Coupa administrator issues, with no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste the endpoint https://api.elaichi.ai/mcp. Claude asks you to sign in to Elaichi, and from then on it can work with your Coupa requisitions, purchase orders, suppliers and invoices.

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

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

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

It can look up Coupa requisitions, purchase orders, invoices, suppliers, catalog items and accounts, and answer questions like which invoices arrived from a supplier this month or which requisitions are still open. It can also raise a new requisition or purchase order, add a supplier, and update a supplier's details or an open requisition. Short, concrete asks work best, such as 'list open requisitions over 5,000' rather than a long paragraph.

### Does connecting Coupa give the AI every purchase order and invoice in the company?

No. The connection carries the access of the Coupa app credentials it was set up with, and each person signs in to Elaichi as themselves, so an agent sees only the Coupa requisitions, orders, suppliers and invoices that access allows. Elaichi can narrow that further by team or by action, and it can never widen it beyond what Coupa itself permits.

### Can my team share one Coupa connection?

Yes. One person connects Coupa in Elaichi and shares the connection with a team, and nobody else ever handles the app credentials. Each teammate still signs in as themselves, so every Coupa call in the audit log names the person who made it, not the person who connected it.

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

Yes. Restrictions in Elaichi work per action, so you can allow reading Coupa invoices and purchase orders while blocking the ability to delete a requisition or change a supplier. A restricted action is left out of the AI client's tool list entirely, so it cannot be called no matter how the prompt is phrased.

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

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

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

Yes. Coupa 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 Coupa?

Yes. Both let Claude, ChatGPT or Cursor use Coupa. 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 Coupa call.

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

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 Coupa: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 62 Coupa tools

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

- **List all Coupa accounts** (List). List Coupa accounts. Returns: id, created_at, created_by, updated_at, updated_by, created-at, updated-at, status, notes, deactivate-from-user-after-reassignment, requested-reassignments, from-user, to-user, created-by, updated-by. Coupa recommends filtering large data sets with criteria.
- **Get single Coupa account by ID** (Get). Get a single Coupa account by id. Returns the full account object including id, name, code, active, account_type, segments 1-20, created_at, and updated_at. Required: id.
- **Create a Coupa purchase order** (Create). Create an external purchase order in Coupa as part of the external purchase orders feature. Returns the created purchase order with id, po_number, status, supplier, and order_lines. Required: po_number, supplier, ship_to_user, order_lines, version. Not for Coupa-based POs.
- **List all Coupa purchase orders** (List). Query purchase orders in Coupa. Returns purchase order records with id, po_number, status, supplier, and order_lines. Limit large result sets with filter criteria.
- **Get single Coupa purchase order by ID** (Get). Get a purchase order in Coupa by its id. Returns the full order record including id, po-number, status, supplier, order-lines, total, currency, and created-at / updated-at timestamps. Required: id (Coupa's internal purchase order ID).
- **Create a Coupa requisition** (Create). Create a Coupa requisition and submit it for approval or buyer action in one step. Returns: id, status, total, currency, requisition-lines, line-count, requested-by, ship-to-address, ship-to-attention, need-by-date, req_title, justification, buyer-note, department, and 22 more. Required: requester, requisition-lines, ship-to-address, created-by.
- **List all Coupa requisitions** (List). List Coupa requisitions. Returns: id, status, created-at, created-by, updated-at, updated-by, notes, deactivate-from-user-after-reassignment, requested-reassignments, from-user, to-user.
- **Get single Coupa requisition by ID** (Get). Get a single Coupa requisition by id. Returns: id, status, total, currency, requisition-lines, line-count, requested-by, ship-to-address, ship-to-attention, need-by-date, req_title, justification, buyer-note, department, pcard, approvals, current-approval, current-parallel-approvals, attachments, and 17 more. Required: id (Coupa unique identifier).
- **Update a Coupa requisition by ID** (Update). Update a Coupa requisition by id. Returns: id, status, total, currency, requisition-lines, line-count, requested-by, ship-to-address, ship-to-attention, need-by-date, req_title, justification, buyer-note, department, pcard, approvals, current-approval, current-parallel-approvals, attachments, and 17 more. Required: id (Coupa unique identifier).
- **Delete a Coupa requisition by ID** (Delete). Delete a Coupa requisition by id. Returns an empty 204 response on success. Required: id (Coupa unique identifier).
- **List all Coupa users** (List). List Coupa users. Returns user records including id, login, firstname, lastname, email, active, roles, and created-at.
- **Get single Coupa user by ID** (Get). Get a single Coupa user by id. Returns the full user record including id, login, firstname, lastname, email, active, manager, and roles. Required: id (Coupa unique identifier).
- **List all Coupa items** (List). List Coupa items (query items). Returns item records including id, item-number, name, description, commodity, uom, active, and created-at/updated-at timestamps.
- **Get single Coupa item by ID** (Get). Get a single Coupa item by id. Returns the item record including id, item-number, name, description, commodity, uom, active, and created-at/updated-at timestamps. Required: id.
- **List all Coupa suppliers** (List). Query Coupa suppliers. Returns supplier records with id, name, display-name, number, status, payment-method, and updated-at. Use a filter such as name, number, or updated-from/updated-to to limit large result sets.
- **Get single Coupa supplier by ID** (Get). Get a single Coupa supplier by id. Returns the supplier object with id, name, number, status, payment-method, primary-address, and updated-at. Required: id (Coupa internal ID).
- **Create a Coupa supplier** (Create). Create a Coupa supplier. Returns the created supplier object with id, name, number, status, payment-method, and created-at. Required: name, payment-method, invoice-matching-level, online-store, primary-address, primary-contact, po-change-method, price-amount. Status defaults to draft and payment-method to invoice if omitted.
- **Update a Coupa supplier by ID** (Update). Update a Coupa supplier by id. Returns the updated supplier object with id, name, number, status, payment-method, and updated-at. Required: id (Coupa internal ID). The primary address and primary contact are updated in place and cannot be swapped for different IDs.
- **List all Coupa supplier items** (List). List supplier items associated with an item in Coupa. Returns: id, supplier, item, supplier_part_num, supplier_aux_part_num, price, price_change, price_tier_1, price_tier_2, price_tier_3, price_tier_4, price_tier_5, price_tier_6, price_tier_7, price_tier_8, price_tier_9, currency, preferred, created_at, and 23 more. Required: item_id.
- **Get single Coupa supplier item by ID** (Get). Get a single supplier item in Coupa by id. Returns the full record including id, supplier, item, supplier_part_num, price, currency, preferred, and created_at. Required: id.
- **List all Coupa currencies** (List). List currencies in Coupa. Returns each currency with its id, code, name, symbol, decimals, created-by, and updated-by.
- **Get single Coupa currency by ID** (Get). Get a single Coupa currency by id. Returns the currency record including id, code, name, symbol, decimals, enabled-flag, created-by, and updated-by. Required: id (Coupa unique identifier).
- **List all Coupa invoices** (List). List Coupa invoices. Returns invoice records including id, payments (with check_number, amount_paid, notes, payment_date), paid, payment_date, and payment_notes.
- **Get single Coupa invoice by ID** (Get). Get a single Coupa invoice by id. Returns the invoice's id and payment details: payments (with check_number, amount_paid, notes, payment_date), paid, payment_date, and payment_notes. Required: id.
- **List all Coupa payments** (List). List Coupa Pay payments in Coupa. Returns payment records including id, created-at, and updated-at; the remaining payment fields follow Coupa's Payments API reference.
- **Get single Coupa payment by ID** (Get). Get a single Coupa Pay payment by id in Coupa. Returns: id, payments, paid, payment_date, payment_notes. Required: id.
- **List all Coupa expense reports** (List). List Coupa expense reports. Returns: id, title, status, total, currency, created-at, updated-at, created-by, updated-by, expensed-by, submitted-at, submitted-by, approvals, expense-lines, expense-policy-violations, expense-violations, events, comments, reconciliation-lines, payment, payment-channel, reimbursable-total-amount, and 18 more.
- **Get single Coupa expense report by ID** (Get). Get a single Coupa expense report by id. Returns the full record including id, title, status, total, expense-lines, and approvals. Required: id.
- **List all Coupa departments** (List). List Coupa departments. Returns each department's id, name, active, created_at, updated_at, and the created_by/updated_by users.
- **Get single Coupa department by ID** (Get). Get a single Coupa department by id. Returns: id, name, active, created_at, updated_at, created_by, updated_by. Required: id.
- **Create a Coupa department** (Create). Create a department in Coupa. Returns the created department including id, name, active, created_at, updated_at, and created_by. Required: name.
- **List all Coupa business entities** (List). List Coupa business entities. Returns: id, status, created-at, updated-at, created-by, updated-by, notes, deactivate-from-user-after-reassignment, requested-reassignments, from-user, to-user.
- **Get single Coupa business entity by ID** (Get). Get a single Coupa business entity by id (the Coupa internal integer ID). Returns: id, name, display-name, formation-type, status, primary-address, primary-contact, addresses, business-entity-account-owners, business-entity-relationships, business-entity-alternate-names, created-at, updated-at, and 4 more. Required: id.
- **List all Coupa purchase order lines** (List). List purchase order lines in Coupa. Returns each line with id, line-num, description, status, price, quantity, total, order-header-id, and supplier details.
- **Get single Coupa purchase order line by ID** (Get). Get a single purchase order line by id in Coupa. Returns the line with id, line-num, description, status, price, quantity, total, supplier, and account details. Required: id.
- **List all Coupa addresses** (List). List Coupa addresses (query addresses). Returns each address with its id, name, city, state, postal-code, country, active, created-at, and updated-at, plus related content-groups, purposes, and tax-registrations.
- **List all Coupa payment terms** (List). List Coupa payment terms. Returns payment term objects with id, code, days-for-net-payment, days-for-discount-payment, discount-rate, and type.
- **Get single Coupa payment term by ID** (Get). Get a single Coupa payment term by id. Returns the payment term with id, code, days-for-net-payment, discount-rate, and type. Required: id.
- **Create a Coupa payment term** (Create). Create a payment term in Coupa. Returns the created payment term including id, code, days-for-net-payment, discount-rate, and type. Required: code, days-for-discount-payment, days-for-net-payment, discount-due-month, net-due-month, net-due-day, and type.
- **Create a Coupa draft requisition** (Create). Create a requisition in Coupa in draft status, which will then need to be submitted manually for approval. Returns the created requisition object with id plus attributes whose fields are defined by the Requisitions API Elements documentation.
- **List all Coupa account types** (List). List charts of accounts (account types) in Coupa. Returns: id, name, active, currency, legal-entity-name, primary-address, primary-contact, created-at, created-by, updated-at, updated-by, dynamic_flag, status, notes, deactivate-from-user-after-reassignment, requested-reassignments, from-user, to-user.
- **Get single Coupa account type by ID** (Get). Get a single chart of accounts (account type) by id in Coupa. Returns: id, name, active, currency, legal-entity-name, primary-address, created-at, created-by, updated-at, updated-by. Required: id.
- **List all Coupa groups** (List). List Coupa user groups. Returns each group's id, name, description, mention-name, active, can-approve, owner, and member users.
- **Get single Coupa group by ID** (Get). Get a single Coupa user group by id. Returns: id, name, description, mention-name, active, can-approve, open, owner, users, created-at, updated-at, created-by, updated-by, avatar-thumb-url. Required: id.
- **Create a Coupa group** (Create). Create a Coupa user group. Returns the created group with id, name, description, mention-name, active, owner, and users. Required: name.
- **Update a Coupa group by ID** (Update). Update a Coupa user group by id; send only the fields to change. Returns: id, name, description, mention-name, active, can-approve, open, owner, users, created-at, updated-at, created-by, updated-by, avatar-thumb-url. Required: id.
- **List all Coupa supplier information** (List). List Coupa supplier information (SIM) records. Returns each record with id, name, status, supplier_id, supplier_name, and created_at. Responses may include a harmless Ruby code snippet that can be disregarded.
- **Get single Coupa supplier information by ID** (Get). Get a single Coupa supplier information (SIM) record by id. Returns: id, name, status, supplier_id, supplier_name, supplier_number, display_name, duns_number, website, industry, supplier_region, organization_type, created_at, updated_at, and 90 more. Required: id. Responses may include a harmless Ruby code snippet that can be disregarded.
- **Create a Coupa supplier information** (Create). Create a Coupa supplier information (SIM) record. Returns the created record including id, name, status, supplier_id, and created_at. Required: name, status. When supplier_id is omitted, an associated Supplier record is automatically created.
- **Update a Coupa supplier information by ID** (Update). Update a Coupa supplier information (SIM) record by id. Returns the updated record including id, name, status, supplier_id, and updated_at. Required: id, name, status.
- ...and 12 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
