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.
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/mcpdo { action: "coupa.invoices.list", intent: "check which Coupa account is connected"}# Query invoices · read · 1 upstream call- 559actionsin one signed file
- 235readlook, never change
- 278writecreate and update
- 46wait for a yesdestructive, confirmed first
Set up
Connect Coupa in three steps.
- 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 - 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_idClient ID of a Coupa OAuth2/OpenID Connect client with grant type Client credentialsclient_secretClient secret of the same OAuth client (shown on the client's page)hostWhere your Coupa lives: your hostscopesYour Coupa scopes
account { op: "connections.requirements", service: "coupa" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "coupa.invoices.list" }# query invoices · read · 1 upstream callcheck { 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_idclient_secret- Setup fields
hostscopes- 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 2026compass.coupa.comcompass.coupa.com
- 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.
- 235readlook, never change
- 278writecreate and update
- 46destructivewait for a confirmation
Contracts
173 read · 14 write · 0 destructive
Create contract · /api/contracts/:id/create_published · Query contracts · Manually add an approver for a contract
Invoices
172 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
Requisitions
154 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
Purchase orders
112 read · 8 write · 1 destructive
Query purchase orders · Create purchase orders · Show purchase order · Update purchase order
Expense lines
92 read · 5 write · 2 destructive
Query expense lines · Create expense line · Show expense line · Update expense line
Integration runs
92 read · 7 write · 0 destructive
Create integration run with status of pending · Query integration runs · Set integration run status as failed · Show integration run
Receipt requests
92 read · 6 write · 1 destructive
List receipt requests · Add a user as an approver · Add a user as a watcher · Show receipt request
Asn headers
82 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.listQuery invoices | Query invoices. | read | finance.invoice.list101 connectors |
coupa.purchase_orders.listQuery purchase orders | Query purchase orders. | read | finance.purchase_order.list45 connectors |
coupa.users.listQuery users | Query users. | read | identity.user.list474 connectors |
coupa.invoices.createCreates an invoice in draft status | Creates an invoice in draft status. | write | finance.invoice.create74 connectors |
coupa.expense_reports.listQuery expense reports | Query expense reports. | read | finance.expense_report.list11 connectors |
coupa.purchase_orders.createCreate purchase orders | Create a purchase order as part of the external purchase orders feature. | write | finance.purchase_order.create43 connectors |
coupa.projects.listShow all of the Projects | Show all of the Projects. | read | work.project.list109 connectors |
coupa.users.createCreate user | Create user. | write | identity.user.create262 connectors |
coupa.suppliers.listQuery suppliers | Query suppliers. | read | asset.supplier.list41 connectors |
coupa.expense_reports.createCreate an expense report in draft status | Create an expense report in draft status. | write | finance.expense_report.create9 connectors |
coupa.invoices.voidVoid invoices | Void an approved invoice This can be used on Invoices only on approved and pending receipt Invoices. | destructive | finance.invoice.void22 connectors |
coupa.projects.createCreate a Project | Create a Project. | write | work.project.create102 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.
- Readread
Which Coupa invoices are more than 30 days overdue? Group them by customer with the total owed.
calls
coupa.invoices.list - Writewrite
Creates an invoice in draft status in Coupa. Show me exactly what you will send before you save it.
calls
coupa.invoices.create - Across systemsread
For each customer, how many invoices are in Coupa and how many tickets in ConnectWise PSA?
calls
coupa.invoices.listconnectwise_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, oncrm.company· ConnectWise PSAFor each customer, how many invoices are in Coupa and how many tickets in HubSpot CRM?
coupa.invoices.list+hubspot_crm.tickets.list, oncrm.company· HubSpot CRM
identity.user 517work.project 116finance.invoice 91asset.supplier 38hr.department 36finance.purchase_order 35finance.expense_report 5ask { 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"] } } ]}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.
Void invoices?
intent: the user asked me to void invoices
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: "[email protected]" }, { match: "coupa.purchase_orders.cancel", approver: "[email protected]" }, { match: "coupa.expense_lines.delete", approver: "[email protected]" } ]}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.
- 1upstream call per actionall 559 Coupa actions
- 559actions pageeach page of a long list is one call
- 234reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Coupa action.
559 actions by area: the id your agent calls, what it does, and its effect.
Contracts17
coupa.contracts.add_approverManually add an approver for a contractwritecoupa.contracts.createCreate contractwritecoupa.contracts.create_published/api/contracts/:id/create_publishedwritecoupa.contracts.listQuery contractsreadcoupa.contracts.ccc_signature_createdNotifies that a signature has been added in CCCwritecoupa.contracts.check_inCheck-in a legal documentwrite- and 11 more in this area
Invoices17
coupa.invoices.createCreates an invoice in draft statuswritecoupa.invoices.getShow invoicereadcoupa.invoices.listQuery invoicesreadcoupa.invoices.updateUpdate invoice Used to updated information on the Invoice using the APIwritecoupa.invoices.abandonAbandon invoicewritecoupa.invoices.add_approverManually add an approver for an invoicewrite- and 11 more in this area
Requisitions15
coupa.requisitions.add_to_cartAdd To Cartwritecoupa.requisitions.createCreate a requisition in draft status, which will then need to be submitted manuallywritecoupa.requisitions.current_cartSend current cart for user, if there is no current cart then create and sendreadcoupa.requisitions.listQuery requisitionsreadcoupa.requisitions.add_approverManually add an approver for a requisitionwritecoupa.requisitions.deleteDelete requisitiondestructive- and 9 more in this area
Purchase orders11
coupa.purchase_orders.createCreate purchase orderswritecoupa.purchase_orders.getShow purchase orderreadcoupa.purchase_orders.listQuery purchase ordersreadcoupa.purchase_orders.updateUpdate purchase orderwritecoupa.purchase_orders.cancelCanceldestructivecoupa.purchase_orders.closeClose a purchase orderwrite- and 5 more in this area
Expense lines9
coupa.expense_lines.createCreate expense linewritecoupa.expense_lines.getShow expense linereadcoupa.expense_lines.listQuery expense linesreadcoupa.expense_lines.updateUpdate expense linewritecoupa.expense_lines.assign_attendeeAssign attendee to expense linewritecoupa.expense_lines.calculate_mileageCalculate line total based on mileage datawrite- and 3 more in this area
Integration runs9
coupa.integration_runs.createCreate integration run with status of pendingwritecoupa.integration_runs.failSet integration run status as failedwritecoupa.integration_runs.getShow integration runreadcoupa.integration_runs.listQuery integration runsreadcoupa.integration_runs.pauseSet integration run status as pausedwritecoupa.integration_runs.pendingSet integration run status as pendingwrite- and 3 more in this area
Receipt requests9
coupa.receipt_requests.add_approverAdd a user as an approverwritecoupa.receipt_requests.add_watcherAdd a user as a watcherwritecoupa.receipt_requests.getShow receipt requestreadcoupa.receipt_requests.listList receipt requestsreadcoupa.receipt_requests.deleteDelete receipt requestdestructivecoupa.receipt_requests.remove_approvalRemove a user as an approverwrite- and 3 more in this area
Asn headers8
coupa.asn_headers.createCreate advance ship notice headerwritecoupa.asn_headers.getShow advance ship notice headerreadcoupa.asn_headers.listQuery advance ship notice headerreadcoupa.asn_headers.receiveReceive asn headerswritecoupa.asn_headers.receive_bulkAdd query parameter fully_consume=true to receivewritecoupa.asn_headers.updateUpdate advance ship notice headerwrite- and 2 more in this area
Integration history records8
coupa.integration_history_records.createCreate integration history recordwritecoupa.integration_history_records.create_alertCreate alert integration history recordswritecoupa.integration_history_records.create_alert_and_mark_exportedCreate alert and mark exported integration history recordswritecoupa.integration_history_records.listQuery integration history recordsreadcoupa.integration_history_records.acknowledgeAcknowledge integration history recordswritecoupa.integration_history_records.getShow integration history recordread- and 2 more in this area
Data file sources7
coupa.data_file_sources.createCreating data file source is not supportedwritecoupa.data_file_sources.listQuery data file sourcesreadcoupa.data_file_sources.load_from_coupa_file_serviceLoad from Coupa file servicewritecoupa.data_file_sources.load_from_sftpUpload flat file and process via data file sourcewritecoupa.data_file_sources.getShow data file sourcereadcoupa.data_file_sources.updateUpdating data file source is not supportedwrite- and 1 more in this area
Expense reports7
coupa.expense_reports.createCreate an expense report in draft statuswritecoupa.expense_reports.getShow expense reportreadcoupa.expense_reports.listQuery expense reportsreadcoupa.expense_reports.updateUpdate expense reportwritecoupa.expense_reports.add_approverManually add an approver for an expense reportwritecoupa.expense_reports.remove_approvalRemove an approver who was manually addedwrite- and 1 more in this area
Integration errors7
coupa.integration_errors.createCreate integration errorwritecoupa.integration_errors.create_alert/integration_errors/create_alertwritecoupa.integration_errors.getShow integration errorreadcoupa.integration_errors.listQuery integration errorsreadcoupa.integration_errors.resolveResolve integration errorwritecoupa.integration_errors.unresolveUnresolve resolved integration errorwrite- and 1 more in this area
Payable invoices7
coupa.payable_invoices.available_allocations/api/payables/invoices/available_allocationsreadcoupa.payable_invoices.exportMark Invoice Payable as Exportedwritecoupa.payable_invoices.getShow Invoice Payablereadcoupa.payable_invoices.listQuery Invoice Payablesreadcoupa.payable_invoices.pay_externallyMark Invoice Payable as Paid and stop tracking in Coupadestructivecoupa.payable_invoices.track_externallyStop Tracking Invoice Payable in Coupawrite- and 1 more in this area
Purchase order changes7
coupa.purchase_order_changes.add_approverManually add an approver for an order header changewritecoupa.purchase_order_changes.createCreate purchase order changeswritecoupa.purchase_order_changes.getShow purchase order changereadcoupa.purchase_order_changes.listQuery purchase order changesreadcoupa.purchase_order_changes.remove_approvalRemove an approver who was manually addedwritecoupa.purchase_order_changes.submit_for_approvalSubmit purchase order change for approvalwrite- and 1 more in this area
Purchase order lines7
coupa.purchase_order_lines.getShow purchase order linereadcoupa.purchase_order_lines.listQuery purchase order linesreadcoupa.purchase_order_lines.reopen_for_invoicingReopen for invoicingwritecoupa.purchase_order_lines.reopen_for_receivingReopen for receivingwritecoupa.purchase_order_lines.deleteDelete purchase order linedestructivecoupa.purchase_order_lines.soft_close_for_invoicingSoft close for invoicingwrite- and 1 more in this area
Supplier information easy form responses7
coupa.supplier_information_easy_form_responses.add_approverManually add an approver for an easy form responsewritecoupa.supplier_information_easy_form_responses.approvalSubmit an easy form response for approvalwritecoupa.supplier_information_easy_form_responses.getShow an easy form responsereadcoupa.supplier_information_easy_form_responses.listQuery easy form responsesreadcoupa.supplier_information_easy_form_responses.remove_approvalRemove an apporver who was manually addedwritecoupa.supplier_information_easy_form_responses.reviewReview an easy form responsewrite- and 1 more in this area
Suppliers7
coupa.suppliers.createCreate supplierwritecoupa.suppliers.getShow supplierreadcoupa.suppliers.listQuery suppliersreadcoupa.suppliers.updateUpdate supplierwritecoupa.suppliers.create_supplier_user_preferencesCreate supplier user preferenceswritecoupa.suppliers.logout_iframe_sessionLog out (CSP)iframe sessiondestructive- and 1 more in this area
User easy form responses7
coupa.user_easy_form_responses.add_approverManually add an approver for an easy form responsewritecoupa.user_easy_form_responses.approvalSubmit an easy form response for approvalwritecoupa.user_easy_form_responses.getShow an easy form responsereadcoupa.user_easy_form_responses.listQuery easy form responsesreadcoupa.user_easy_form_responses.remove_approvalRemove an apporver who was manually addedwritecoupa.user_easy_form_responses.reviewReview an easy form responsewrite- and 1 more in this area
Worker assignments7
coupa.worker_assignments.closeClose worker assignmentswritecoupa.worker_assignments.confirmConfirm worker assignmentswritecoupa.worker_assignments.getGet assignment data for a single workerreadcoupa.worker_assignments.listGet all worker assigmentsreadcoupa.worker_assignments.cancelCancel worker assignmentsdestructivecoupa.worker_assignments.show_historyGet the history for a worker assignmentread- and 1 more in this area
Accounts6
coupa.accounts.createCreate accountwritecoupa.accounts.getShow accountreadcoupa.accounts.listQuery accountsreadcoupa.accounts.updateUpdate accountwritecoupa.accounts.favoritesFavoritesreadcoupa.accounts.recentRecentread
Approvals6
coupa.approvals.approvePerform Approve action on an approvalwritecoupa.approvals.getShow approvalreadcoupa.approvals.holdPerform Hold action on an approvalwritecoupa.approvals.listQuery approvalsreadcoupa.approvals.rejectPerform Reject action on an approvalwritecoupa.approvals.updateUpdate approvalwrite
Order header confirmations6
coupa.order_header_confirmations.accept_headerAccept header order header confirmationswritecoupa.order_header_confirmations.getShow order confirmationsreadcoupa.order_header_confirmations.listQuery order confirmationsreadcoupa.order_header_confirmations.reject_headerReject header order header confirmationswritecoupa.order_header_confirmations.submitSubmit a line-level order confirmation that is in a draft statewritecoupa.order_header_confirmations.updateUpdate line-level order confirmationswrite
Payable allocations6
coupa.payable_allocations.create/api/payables/allocationswritecoupa.payable_allocations.export/api/payables/allocations/:id/exportwritecoupa.payable_allocations.getShow Payable Allocationreadcoupa.payable_allocations.listQuery Payable Allocationsreadcoupa.payable_allocations.reverseReverse payable allocationsdestructivecoupa.payable_allocations.update/api/payables/allocations/:idwrite
Receiving transactions6
coupa.receiving_transactions.createCreate receiving transactionwritecoupa.receiving_transactions.getShow receiving transactionreadcoupa.receiving_transactions.listQuery receiving transactionsreadcoupa.receiving_transactions.updateUpdate receiving transaction export flag onlywritecoupa.receiving_transactions.deleteDelete receiving transactiondestructivecoupa.receiving_transactions.voidPerform Void action on receiving transactiondestructive
Return requests6
coupa.return_requests.createCreate a return request in draft statuswritecoupa.return_requests.getQuery a return request by IDreadcoupa.return_requests.listQuery return requestsreadcoupa.return_requests.submitSubmit a return request for approvalwritecoupa.return_requests.deleteDelete a return request in draft status onlydestructivecoupa.return_requests.updateUpdate a return request that is in draft statuswrite
Supplier items6
coupa.supplier_items.createCreate supplier itemwritecoupa.supplier_items.getShow supplier itemreadcoupa.supplier_items.listQuery supplier itemsreadcoupa.supplier_items.searchAdvanced supplier item searchreadcoupa.supplier_items.deleteDelete supplier itemdestructivecoupa.supplier_items.updateUpdate supplier itemwrite
Workers6
coupa.workers.createCreate workerwritecoupa.workers.getShow a workerreadcoupa.workers.invite_workerInvite a workerwritecoupa.workers.listQuery workerreadcoupa.workers.updateShow a workerwritecoupa.workers.delete_avatarGet all worker assigmentsdestructive
Budget lines5
coupa.budget_lines.createCreate budget linewritecoupa.budget_lines.getShow budget linereadcoupa.budget_lines.listQuery budget linesreadcoupa.budget_lines.updateUpdate budget linewritecoupa.budget_lines.adjustCreate budget line adjustment for budget linewrite
Expense report expense lines5
coupa.expense_report_expense_lines.createCreate expense linewritecoupa.expense_report_expense_lines.getShow expense linereadcoupa.expense_report_expense_lines.listQuery expense linesreadcoupa.expense_report_expense_lines.updateUpdate expense linewritecoupa.expense_report_expense_lines.deleteDelete expense linedestructive
External payables5
coupa.external_payables.createCreate External Payablewritecoupa.external_payables.getShow External Payablereadcoupa.external_payables.listQuery External Payablesreadcoupa.external_payables.updateUpdate External Payablewritecoupa.external_payables.voidVoid External Payabledestructive
Project memberships 5Project tasks 5Quality inspections 5Quote request tasks 5Quote requests 5Quote responses 5Requisition attachments 5Supplier addresses 5Supplier information sites 5Supplier information supplier information sites 5Supplier supplier sites 5Tasks 5Uom translations 5Account types 4Account validation rules 4Addresses 4Asn lines 4Budget line budget line adjustments 4Business entities 4Business groups 4Commodities 4Contract attachments 4Contract contract terms 4Custom object object instances 4Cycle counts 4Departments 4Exchange rates 4Expense artifacts 4Expense line expense artifacts 4Expense report attachments 4Expense report expense line expense artifacts 4Financial counterparties 4Integrations 4Inventory adjustments 4Inventory consumptions 4Inventory transfers 4Invoice attachments 4Invoice remit to addresses 4Item supplier items 4Items 4Lookup values 4Order pad order pad lines 4Order pads 4Payable orders 4Payment terms 4Projects 4Purchase order attachments 4Quality inspection attachments 4Quality inspection characteristic attachments 4Shipping terms 4Supplier information 4Supplier information tax registrations 4Supplier risk aware feed 4Tax registrations 4User attachments 4User group memberships 4User group tasks 4User groups 4Users 4Contract legal documents 3Coupa pay payments 3Coupa pay statements 3Cycle count cycle count lines 3Default receiving locations 3Expense report comments 3Inventory transactions 3Invoice comments 3Payable order reconciliation lines 3Purchase order comments 3Quote request attachment attachments 3Quote request attachments 3Quote request line attachments 3Requisition comments 3Return to supplier transactions 3User comments 3Announcements 2Attachments 2Charges 2Contract templates 2Currencies 2Pick lists 2Quote request quote responses 2Work confirmation headers 2Delegations 1Easy form responses 1Expense delegations 1Graphql 1Inventory transaction attachments 1Matching allocations 1Order header confirmation integration approval rejected 1Quote suppliers 1Requisition line attachments 1Supplier remit to addresses 1
This index shows a sample of each area. All 559 actions, with their inputs and prices, are in the 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.
Give your agent Coupa today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.