---
title: "Coupa MCP server for AI agents - actionlake"
description: "Give Claude 559 Coupa actions through one MCP server: contracts, invoices, requisitions. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/coupa
updated: 2026-10-23
---

Connectors · Accounting & finance

# Coupa MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Coupa and the rest of your systems. It gives your agent 559 Coupa actions (235 reads, 278 writes and 46 that wait for a confirmation) and holds the Coupa credential itself, so the agent never does. It paces Coupa's limits and records every call.

[Connect Coupa free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "coupa.invoices.list",
  intent: "check which Coupa account is connected"
}
# Query invoices · read · 1 upstream call
```

- 559 actions in one signed file
- 235 read look, never change
- 278 write create and update
- 46 wait for a yes destructive, confirmed first

Set up

## Connect Coupa in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Coupa.
   OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `client_id` Client ID of a Coupa OAuth2/OpenID Connect client with grant type Client credentials
   - `client_secret` Client secret of the same OAuth client (shown on the client's page)
   - `host` Where your Coupa lives: your host
   - `scopes` Your Coupa scopes
   ```
   account { op: "connections.requirements", service: "coupa" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "coupa.invoices.list" }
   # query invoices · read · 1 upstream call
   check { action: "coupa.invoices.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Coupa at a glance

**Sign-in**

OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.

**You provide**

`client_id` `client_secret`

**Setup fields**

`host` `scopes`

**Limits we pace to**

25 calls a second, per connection

**API covered**

Coupa Core API (REST, JSON), reference as published on Coupa Compass 2026-10, at your Coupa instance's API base URL, which you enter when connecting

**Built from**

Coupa's documentation, read 23 October 2026[compass.coupa.com](https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/resources) [compass.coupa.com](https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/oauth-2.0-and-oidc/openid-connect-clients)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

234 of 235 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

7, so ask can line Coupa up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Coupa.

559 actions in 123 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **235** read look, never change
- **278** write create and update
- **46** destructive wait for a confirmation

1. ### Contracts
   17
   3 read · 14 write · 0 destructive
   Create contract · /api/contracts/:id/create_published · Query contracts · Manually add an approver for a contract
2. ### Invoices
   17
   2 read · 14 write · 1 destructive
   Query invoices · Creates an invoice in draft status · Show invoice · Update invoice Used to updated information on the Invoice using the API
3. ### Requisitions
   15
   4 read · 10 write · 1 destructive
   Add To Cart · Create a requisition in draft status, which will then need to be submitted manually · Send current cart for user, if there is no current cart then create and send · Query requisitions
4. ### Purchase orders
   11
   2 read · 8 write · 1 destructive
   Query purchase orders · Create purchase orders · Show purchase order · Update purchase order
5. ### Expense lines
   9
   2 read · 5 write · 2 destructive
   Query expense lines · Create expense line · Show expense line · Update expense line
6. ### Integration runs
   9
   2 read · 7 write · 0 destructive
   Create integration run with status of pending · Query integration runs · Set integration run status as failed · Show integration run
7. ### Receipt requests
   9
   2 read · 6 write · 1 destructive
   List receipt requests · Add a user as an approver · Add a user as a watcher · Show receipt request
8. ### Asn headers
   8
   2 read · 4 write · 2 destructive
   Create advance ship notice header · Query advance ship notice header · Show advance ship notice header · Receive asn headers

**115 more areas · 464 actions**

- Integration history records **8**
- Data file sources **7**
- Expense reports **7**
- Integration errors **7**
- Payable invoices **7**
- Purchase order changes **7**
- Purchase order lines **7**
- Supplier information easy form responses **7**
- Suppliers **7**
- User easy form responses **7**
- Worker assignments **7**
- Accounts **6**
- Approvals **6**
- Order header confirmations **6**
- Payable allocations **6**
- Receiving transactions **6**
- Return requests **6**
- Supplier items **6**
- Workers **6**
- Budget lines **5**
- Expense report expense lines **5**
- External payables **5**
- Project memberships **5**
- Project tasks **5**
- Quality inspections **5**
- Quote request tasks **5**
- Quote requests **5**
- Quote responses **5**
- Requisition attachments **5**
- Supplier addresses **5**
- Supplier information sites **5**
- Supplier information supplier information sites **5**
- Supplier supplier sites **5**
- Tasks **5**
- Uom translations **5**
- Account types **4**
- Account validation rules **4**
- Addresses **4**
- Asn lines **4**
- Budget line budget line adjustments **4**
- Business entities **4**
- Business groups **4**
- Commodities **4**
- Contract attachments **4**
- Contract contract terms **4**
- Custom object object instances **4**
- Cycle counts **4**
- Departments **4**
- Exchange rates **4**
- Expense artifacts **4**
- Expense line expense artifacts **4**
- Expense report attachments **4**
- Expense report expense line expense artifacts **4**
- Financial counterparties **4**
- Integrations **4**
- Inventory adjustments **4**
- Inventory consumptions **4**
- Inventory transfers **4**
- Invoice attachments **4**
- Invoice remit to addresses **4**
- Item supplier items **4**
- Items **4**
- Lookup values **4**
- Order pad order pad lines **4**
- Order pads **4**
- Payable orders **4**
- Payment terms **4**
- Projects **4**
- Purchase order attachments **4**
- Quality inspection attachments **4**
- Quality inspection characteristic attachments **4**
- Shipping terms **4**
- Supplier information **4**
- Supplier information tax registrations **4**
- Supplier risk aware feed **4**
- Tax registrations **4**
- User attachments **4**
- User group memberships **4**
- User group tasks **4**
- User groups **4**
- Users **4**
- Contract legal documents **3**
- Coupa pay payments **3**
- Coupa pay statements **3**
- Cycle count cycle count lines **3**
- Default receiving locations **3**
- Expense report comments **3**
- Inventory transactions **3**
- Invoice comments **3**
- Payable order reconciliation lines **3**
- Purchase order comments **3**
- Quote request attachment attachments **3**
- Quote request attachments **3**
- Quote request line attachments **3**
- Requisition comments **3**
- Return to supplier transactions **3**
- User comments **3**
- Announcements **2**
- Attachments **2**
- Charges **2**
- Contract templates **2**
- Currencies **2**
- Pick lists **2**
- Quote request quote responses **2**
- Work confirmation headers **2**
- Delegations **1**
- Easy form responses **1**
- Expense delegations **1**
- Graphql **1**
- Inventory transaction attachments **1**
- Matching allocations **1**
- Order header confirmation integration approval rejected **1**
- Quote suppliers **1**
- Requisition line attachments **1**
- Supplier remit to addresses **1**

Top actions

## The Coupa API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 69 of Coupa's 69 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `coupa.invoices.list` Query invoices | Query invoices. | read | `finance.invoice.list` 101 connectors |
| `coupa.purchase_orders.list` Query purchase orders | Query purchase orders. | read | `finance.purchase_order.list` 45 connectors |
| `coupa.users.list` Query users | Query users. | read | `identity.user.list` 474 connectors |
| `coupa.invoices.create` Creates an invoice in draft status | Creates an invoice in draft status. | write | `finance.invoice.create` 74 connectors |
| `coupa.expense_reports.list` Query expense reports | Query expense reports. | read | `finance.expense_report.list` 11 connectors |
| `coupa.purchase_orders.create` Create purchase orders | Create a purchase order as part of the external purchase orders feature. | write | `finance.purchase_order.create` 43 connectors |
| `coupa.projects.list` Show all of the Projects | Show all of the Projects. | read | `work.project.list` 109 connectors |
| `coupa.users.create` Create user | Create user. | write | `identity.user.create` 262 connectors |
| `coupa.suppliers.list` Query suppliers | Query suppliers. | read | `asset.supplier.list` 41 connectors |
| `coupa.expense_reports.create` Create an expense report in draft status | Create an expense report in draft status. | write | `finance.expense_report.create` 9 connectors |
| `coupa.invoices.void` Void invoices | Void an approved invoice This can be used on Invoices only on approved and pending receipt Invoices. | destructive | `finance.invoice.void` 22 connectors |
| `coupa.projects.create` Create a Project | Create a Project. | write | `work.project.create` 102 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Coupa actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which Coupa invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `coupa.invoices.list`
2. Write write
   Creates an invoice in draft status in Coupa. Show me exactly what you will send before you save it.
   calls `coupa.invoices.create`
3. Across systems read
   For each customer, how many invoices are in Coupa and how many tickets in ConnectWise PSA?
   calls `coupa.invoices.list` `connectwise_manage.tickets.list`

Across your systems

## Coupa, joined to the rest of your business.

One `ask` fetches from Coupa and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- For each customer, how many invoices are in Coupa and how many tickets in ConnectWise PSA?
  `coupa.invoices.list` + `connectwise_manage.tickets.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- For each customer, how many invoices are in Coupa and how many tickets in HubSpot CRM?
  `coupa.invoices.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `identity.user` **517** `work.project` **116** `finance.invoice` **91** `asset.supplier` **38** `hr.department` **36** `finance.purchase_order` **35** `finance.expense_report` **5**

ask

```
ask {
  intent: "for each customer, how many invoices are in Coupa and how many tickets in ConnectWise PSA",
  steps: [
    { action: "coupa.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "inv",
        right: "tix",
        on: "crm.company",
        group_by: "inv.company_name",
        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Coupa

## Destructive actions wait for a yes.

46 Coupa actions are destructive. The first 10:

- Void invoices `coupa.invoices.void`
- Cancel `coupa.purchase_orders.cancel`
- Delete expense line `coupa.expense_lines.delete`
- Delete task `coupa.tasks.delete`
- Delete requisition `coupa.requisitions.delete`
- Log out (CSP)iframe session `coupa.suppliers.logout_iframe_session`
- Reverse payable allocations `coupa.payable_allocations.reverse`
- Mark Order as Ready to Pay `coupa.payable_orders.ready_to_pay`
- Mark Order as Paid Externally `coupa.payable_orders.pay_externally`
- Mark Invoice Payable as Paid and stop tracking in Coupa `coupa.payable_invoices.pay_externally`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do coupa.invoices.void confirm_policy: **human**

Void invoices?

**intent:** the user asked me to void invoices

run suspended · waiting for a named person · key _coupa-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "coupa-agent",
  allowed_actions: ["coupa.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "coupa.invoices.void", approver: "lead@example.com" },
    { match: "coupa.purchase_orders.cancel", approver: "lead@example.com" },
    { match: "coupa.expense_lines.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Coupa only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Coupa costs on actionlake.

Every Coupa action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Coupa refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 559 Coupa actions
- 559 actions page each page of a long list is one call
- 234 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Coupa action.

559 actions by area: the id your agent calls, what it does, and its effect.

**Contracts 17**

- `coupa.contracts.add_approver` Manually add an approver for a contract write
- `coupa.contracts.create` Create contract write
- `coupa.contracts.create_published` /api/contracts/:id/create_published write
- `coupa.contracts.list` Query contracts read
- `coupa.contracts.ccc_signature_created` Notifies that a signature has been added in CCC write
- `coupa.contracts.check_in` Check-in a legal document write
- and 11 more in this area

**Invoices 17**

- `coupa.invoices.create` Creates an invoice in draft status write
- `coupa.invoices.get` Show invoice read
- `coupa.invoices.list` Query invoices read
- `coupa.invoices.update` Update invoice Used to updated information on the Invoice using the API write
- `coupa.invoices.abandon` Abandon invoice write
- `coupa.invoices.add_approver` Manually add an approver for an invoice write
- and 11 more in this area

**Requisitions 15**

- `coupa.requisitions.add_to_cart` Add To Cart write
- `coupa.requisitions.create` Create a requisition in draft status, which will then need to be submitted manually write
- `coupa.requisitions.current_cart` Send current cart for user, if there is no current cart then create and send read
- `coupa.requisitions.list` Query requisitions read
- `coupa.requisitions.add_approver` Manually add an approver for a requisition write
- `coupa.requisitions.delete` Delete requisition destructive
- and 9 more in this area

**Purchase orders 11**

- `coupa.purchase_orders.create` Create purchase orders write
- `coupa.purchase_orders.get` Show purchase order read
- `coupa.purchase_orders.list` Query purchase orders read
- `coupa.purchase_orders.update` Update purchase order write
- `coupa.purchase_orders.cancel` Cancel destructive
- `coupa.purchase_orders.close` Close a purchase order write
- and 5 more in this area

**Expense lines 9**

- `coupa.expense_lines.create` Create expense line write
- `coupa.expense_lines.get` Show expense line read
- `coupa.expense_lines.list` Query expense lines read
- `coupa.expense_lines.update` Update expense line write
- `coupa.expense_lines.assign_attendee` Assign attendee to expense line write
- `coupa.expense_lines.calculate_mileage` Calculate line total based on mileage data write
- and 3 more in this area

**Integration runs 9**

- `coupa.integration_runs.create` Create integration run with status of pending write
- `coupa.integration_runs.fail` Set integration run status as failed write
- `coupa.integration_runs.get` Show integration run read
- `coupa.integration_runs.list` Query integration runs read
- `coupa.integration_runs.pause` Set integration run status as paused write
- `coupa.integration_runs.pending` Set integration run status as pending write
- and 3 more in this area

**Receipt requests 9**

- `coupa.receipt_requests.add_approver` Add a user as an approver write
- `coupa.receipt_requests.add_watcher` Add a user as a watcher write
- `coupa.receipt_requests.get` Show receipt request read
- `coupa.receipt_requests.list` List receipt requests read
- `coupa.receipt_requests.delete` Delete receipt request destructive
- `coupa.receipt_requests.remove_approval` Remove a user as an approver write
- and 3 more in this area

**Asn headers 8**

- `coupa.asn_headers.create` Create advance ship notice header write
- `coupa.asn_headers.get` Show advance ship notice header read
- `coupa.asn_headers.list` Query advance ship notice header read
- `coupa.asn_headers.receive` Receive asn headers write
- `coupa.asn_headers.receive_bulk` Add query parameter fully_consume=true to receive write
- `coupa.asn_headers.update` Update advance ship notice header write
- and 2 more in this area

**Integration history records 8**

- `coupa.integration_history_records.create` Create integration history record write
- `coupa.integration_history_records.create_alert` Create alert integration history records write
- `coupa.integration_history_records.create_alert_and_mark_exported` Create alert and mark exported integration history records write
- `coupa.integration_history_records.list` Query integration history records read
- `coupa.integration_history_records.acknowledge` Acknowledge integration history records write
- `coupa.integration_history_records.get` Show integration history record read
- and 2 more in this area

**Data file sources 7**

- `coupa.data_file_sources.create` Creating data file source is not supported write
- `coupa.data_file_sources.list` Query data file sources read
- `coupa.data_file_sources.load_from_coupa_file_service` Load from Coupa file service write
- `coupa.data_file_sources.load_from_sftp` Upload flat file and process via data file source write
- `coupa.data_file_sources.get` Show data file source read
- `coupa.data_file_sources.update` Updating data file source is not supported write
- and 1 more in this area

**Expense reports 7**

- `coupa.expense_reports.create` Create an expense report in draft status write
- `coupa.expense_reports.get` Show expense report read
- `coupa.expense_reports.list` Query expense reports read
- `coupa.expense_reports.update` Update expense report write
- `coupa.expense_reports.add_approver` Manually add an approver for an expense report write
- `coupa.expense_reports.remove_approval` Remove an approver who was manually added write
- and 1 more in this area

**Integration errors 7**

- `coupa.integration_errors.create` Create integration error write
- `coupa.integration_errors.create_alert` /integration_errors/create_alert write
- `coupa.integration_errors.get` Show integration error read
- `coupa.integration_errors.list` Query integration errors read
- `coupa.integration_errors.resolve` Resolve integration error write
- `coupa.integration_errors.unresolve` Unresolve resolved integration error write
- and 1 more in this area

**Payable invoices 7**

- `coupa.payable_invoices.available_allocations` /api/payables/invoices/available_allocations read
- `coupa.payable_invoices.export` Mark Invoice Payable as Exported write
- `coupa.payable_invoices.get` Show Invoice Payable read
- `coupa.payable_invoices.list` Query Invoice Payables read
- `coupa.payable_invoices.pay_externally` Mark Invoice Payable as Paid and stop tracking in Coupa destructive
- `coupa.payable_invoices.track_externally` Stop Tracking Invoice Payable in Coupa write
- and 1 more in this area

**Purchase order changes 7**

- `coupa.purchase_order_changes.add_approver` Manually add an approver for an order header change write
- `coupa.purchase_order_changes.create` Create purchase order changes write
- `coupa.purchase_order_changes.get` Show purchase order change read
- `coupa.purchase_order_changes.list` Query purchase order changes read
- `coupa.purchase_order_changes.remove_approval` Remove an approver who was manually added write
- `coupa.purchase_order_changes.submit_for_approval` Submit purchase order change for approval write
- and 1 more in this area

**Purchase order lines 7**

- `coupa.purchase_order_lines.get` Show purchase order line read
- `coupa.purchase_order_lines.list` Query purchase order lines read
- `coupa.purchase_order_lines.reopen_for_invoicing` Reopen for invoicing write
- `coupa.purchase_order_lines.reopen_for_receiving` Reopen for receiving write
- `coupa.purchase_order_lines.delete` Delete purchase order line destructive
- `coupa.purchase_order_lines.soft_close_for_invoicing` Soft close for invoicing write
- and 1 more in this area

**Supplier information easy form responses 7**

- `coupa.supplier_information_easy_form_responses.add_approver` Manually add an approver for an easy form response write
- `coupa.supplier_information_easy_form_responses.approval` Submit an easy form response for approval write
- `coupa.supplier_information_easy_form_responses.get` Show an easy form response read
- `coupa.supplier_information_easy_form_responses.list` Query easy form responses read
- `coupa.supplier_information_easy_form_responses.remove_approval` Remove an apporver who was manually added write
- `coupa.supplier_information_easy_form_responses.review` Review an easy form response write
- and 1 more in this area

**Suppliers 7**

- `coupa.suppliers.create` Create supplier write
- `coupa.suppliers.get` Show supplier read
- `coupa.suppliers.list` Query suppliers read
- `coupa.suppliers.update` Update supplier write
- `coupa.suppliers.create_supplier_user_preferences` Create supplier user preferences write
- `coupa.suppliers.logout_iframe_session` Log out (CSP)iframe session destructive
- and 1 more in this area

**User easy form responses 7**

- `coupa.user_easy_form_responses.add_approver` Manually add an approver for an easy form response write
- `coupa.user_easy_form_responses.approval` Submit an easy form response for approval write
- `coupa.user_easy_form_responses.get` Show an easy form response read
- `coupa.user_easy_form_responses.list` Query easy form responses read
- `coupa.user_easy_form_responses.remove_approval` Remove an apporver who was manually added write
- `coupa.user_easy_form_responses.review` Review an easy form response write
- and 1 more in this area

**Worker assignments 7**

- `coupa.worker_assignments.close` Close worker assignments write
- `coupa.worker_assignments.confirm` Confirm worker assignments write
- `coupa.worker_assignments.get` Get assignment data for a single worker read
- `coupa.worker_assignments.list` Get all worker assigments read
- `coupa.worker_assignments.cancel` Cancel worker assignments destructive
- `coupa.worker_assignments.show_history` Get the history for a worker assignment read
- and 1 more in this area

**Accounts 6**

- `coupa.accounts.create` Create account write
- `coupa.accounts.get` Show account read
- `coupa.accounts.list` Query accounts read
- `coupa.accounts.update` Update account write
- `coupa.accounts.favorites` Favorites read
- `coupa.accounts.recent` Recent read

**Approvals 6**

- `coupa.approvals.approve` Perform Approve action on an approval write
- `coupa.approvals.get` Show approval read
- `coupa.approvals.hold` Perform Hold action on an approval write
- `coupa.approvals.list` Query approvals read
- `coupa.approvals.reject` Perform Reject action on an approval write
- `coupa.approvals.update` Update approval write

**Order header confirmations 6**

- `coupa.order_header_confirmations.accept_header` Accept header order header confirmations write
- `coupa.order_header_confirmations.get` Show order confirmations read
- `coupa.order_header_confirmations.list` Query order confirmations read
- `coupa.order_header_confirmations.reject_header` Reject header order header confirmations write
- `coupa.order_header_confirmations.submit` Submit a line-level order confirmation that is in a draft state write
- `coupa.order_header_confirmations.update` Update line-level order confirmations write

**Payable allocations 6**

- `coupa.payable_allocations.create` /api/payables/allocations write
- `coupa.payable_allocations.export` /api/payables/allocations/:id/export write
- `coupa.payable_allocations.get` Show Payable Allocation read
- `coupa.payable_allocations.list` Query Payable Allocations read
- `coupa.payable_allocations.reverse` Reverse payable allocations destructive
- `coupa.payable_allocations.update` /api/payables/allocations/:id write

**Receiving transactions 6**

- `coupa.receiving_transactions.create` Create receiving transaction write
- `coupa.receiving_transactions.get` Show receiving transaction read
- `coupa.receiving_transactions.list` Query receiving transactions read
- `coupa.receiving_transactions.update` Update receiving transaction export flag only write
- `coupa.receiving_transactions.delete` Delete receiving transaction destructive
- `coupa.receiving_transactions.void` Perform Void action on receiving transaction destructive

**Return requests 6**

- `coupa.return_requests.create` Create a return request in draft status write
- `coupa.return_requests.get` Query a return request by ID read
- `coupa.return_requests.list` Query return requests read
- `coupa.return_requests.submit` Submit a return request for approval write
- `coupa.return_requests.delete` Delete a return request in draft status only destructive
- `coupa.return_requests.update` Update a return request that is in draft status write

**Supplier items 6**

- `coupa.supplier_items.create` Create supplier item write
- `coupa.supplier_items.get` Show supplier item read
- `coupa.supplier_items.list` Query supplier items read
- `coupa.supplier_items.search` Advanced supplier item search read
- `coupa.supplier_items.delete` Delete supplier item destructive
- `coupa.supplier_items.update` Update supplier item write

**Workers 6**

- `coupa.workers.create` Create worker write
- `coupa.workers.get` Show a worker read
- `coupa.workers.invite_worker` Invite a worker write
- `coupa.workers.list` Query worker read
- `coupa.workers.update` Show a worker write
- `coupa.workers.delete_avatar` Get all worker assigments destructive

**Budget lines 5**

- `coupa.budget_lines.create` Create budget line write
- `coupa.budget_lines.get` Show budget line read
- `coupa.budget_lines.list` Query budget lines read
- `coupa.budget_lines.update` Update budget line write
- `coupa.budget_lines.adjust` Create budget line adjustment for budget line write

**Expense report expense lines 5**

- `coupa.expense_report_expense_lines.create` Create expense line write
- `coupa.expense_report_expense_lines.get` Show expense line read
- `coupa.expense_report_expense_lines.list` Query expense lines read
- `coupa.expense_report_expense_lines.update` Update expense line write
- `coupa.expense_report_expense_lines.delete` Delete expense line destructive

**External payables 5**

- `coupa.external_payables.create` Create External Payable write
- `coupa.external_payables.get` Show External Payable read
- `coupa.external_payables.list` Query External Payables read
- `coupa.external_payables.update` Update External Payable write
- `coupa.external_payables.void` Void External Payable destructive

Project memberships **5** Project tasks **5** Quality inspections **5** Quote request tasks **5** Quote requests **5** Quote responses **5** Requisition attachments **5** Supplier addresses **5** Supplier information sites **5** Supplier information supplier information sites **5** Supplier supplier sites **5** Tasks **5** Uom translations **5** Account types **4** Account validation rules **4** Addresses **4** Asn lines **4** Budget line budget line adjustments **4** Business entities **4** Business groups **4** Commodities **4** Contract attachments **4** Contract contract terms **4** Custom object object instances **4** Cycle counts **4** Departments **4** Exchange rates **4** Expense artifacts **4** Expense line expense artifacts **4** Expense report attachments **4** Expense report expense line expense artifacts **4** Financial counterparties **4** Integrations **4** Inventory adjustments **4** Inventory consumptions **4** Inventory transfers **4** Invoice attachments **4** Invoice remit to addresses **4** Item supplier items **4** Items **4** Lookup values **4** Order pad order pad lines **4** Order pads **4** Payable orders **4** Payment terms **4** Projects **4** Purchase order attachments **4** Quality inspection attachments **4** Quality inspection characteristic attachments **4** Shipping terms **4** Supplier information **4** Supplier information tax registrations **4** Supplier risk aware feed **4** Tax registrations **4** User attachments **4** User group memberships **4** User group tasks **4** User groups **4** Users **4** Contract legal documents **3** Coupa pay payments **3** Coupa pay statements **3** Cycle count cycle count lines **3** Default receiving locations **3** Expense report comments **3** Inventory transactions **3** Invoice comments **3** Payable order reconciliation lines **3** Purchase order comments **3** Quote request attachment attachments **3** Quote request attachments **3** Quote request line attachments **3** Requisition comments **3** Return to supplier transactions **3** User comments **3** Announcements **2** Attachments **2** Charges **2** Contract templates **2** Currencies **2** Pick lists **2** Quote request quote responses **2** Work confirmation headers **2** Delegations **1** Easy form responses **1** Expense delegations **1** Graphql **1** Inventory transaction attachments **1** Matching allocations **1** Order header confirmation integration approval rejected **1** Quote suppliers **1** Requisition line attachments **1** Supplier remit to addresses **1**

This index shows a sample of each area. All 559 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The Coupa MCP server, answered.

**Is there a Coupa MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 559 Coupa actions across contracts, invoices, requisitions and purchase orders, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Coupa.

**What do I need to connect Coupa?**

Client ID of a Coupa OAuth2/OpenID Connect client with grant type Client credentials and Client secret of the same OAuth client (shown on the client's page). Plus your host and your scopes. The free call account { op: "connections.requirements", service: "coupa" } lists exactly what to paste.

**Can an AI agent delete or change things in Coupa?**

Only if its key allows it, and only with an explicit confirmation. 46 Coupa actions are destructive, including void invoices, cancel and delete expense line. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Coupa API limit?**

actionlake paces every call to the limits in the Coupa service file: 25 calls a second per connection. Repeated reads are answered from cache (234 Coupa actions can be), which never reaches Coupa.

**What does a Coupa action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (559 Coupa actions page). Cache hits, searches, dry runs and calls Coupa refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Coupa API does it cover?**

The Coupa Core API (REST, JSON), reference as published on Coupa Compass 2026-10 at your Coupa instance's API base URL, which you enter when connecting. It is built from Coupa's documentation as read on 23 October 2026. 559 actions in 123 areas, each one in the signed service file (version 1.0.0).

**Can I combine Coupa with my other systems?**

Yes. ask joins Coupa to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. Coupa maps work.project, which 116 other connectors also map.

**Does actionlake keep my Coupa data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Coupa credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Coupa

Shares the most action names with

- [Odoo 41](https://actionlake.com/connectors/odoo)
- [BILL 31](https://actionlake.com/connectors/bill)
- [Sage Intacct 28](https://actionlake.com/connectors/sage-intacct)
- [SAP Concur 24](https://actionlake.com/connectors/sap-concur)
- [Smokeball 24](https://actionlake.com/connectors/smokeball)
- [DoorLoop 23](https://actionlake.com/connectors/doorloop)

Joins with, on shared entities

- [HaloPSA 4](https://actionlake.com/connectors/halopsa)
- [Freshservice 4](https://actionlake.com/connectors/freshservice)
- [ConnectWise PSA 3](https://actionlake.com/connectors/connectwise-psa)
- [Teamwork 3](https://actionlake.com/connectors/teamwork)
- [Productive.io 3](https://actionlake.com/connectors/productive-io)
- [Zoho Inventory 3](https://actionlake.com/connectors/zoho-inventory)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Coupa; the name is the vendor's own. Counts are from the Coupa service file, version 1.0.0.

## Give your agent Coupa today.

[Connect Coupa free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/coupa
More: https://actionlake.com/llms.txt
