Skip to content

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/mcp
the first call
do {  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.

  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_idClient ID of a Coupa OAuth2/OpenID Connect client with grant type Client credentials
    • client_secretClient secret of the same OAuth client (shown on the client's page)
    • hostWhere your Coupa lives: your host
    • scopesYour 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 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
  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.

ActionWhat it doesEffectSame name in
coupa.invoices.listQuery invoicesQuery invoices.readfinance.invoice.list101 connectors
coupa.purchase_orders.listQuery purchase ordersQuery purchase orders.readfinance.purchase_order.list45 connectors
coupa.users.listQuery usersQuery users.readidentity.user.list474 connectors
coupa.invoices.createCreates an invoice in draft statusCreates an invoice in draft status.writefinance.invoice.create74 connectors
coupa.expense_reports.listQuery expense reportsQuery expense reports.readfinance.expense_report.list11 connectors
coupa.purchase_orders.createCreate purchase ordersCreate a purchase order as part of the external purchase orders feature.writefinance.purchase_order.create43 connectors
coupa.projects.listShow all of the ProjectsShow all of the Projects.readwork.project.list109 connectors
coupa.users.createCreate userCreate user.writeidentity.user.create262 connectors
coupa.suppliers.listQuery suppliersQuery suppliers.readasset.supplier.list41 connectors
coupa.expense_reports.createCreate an expense report in draft statusCreate an expense report in draft status.writefinance.expense_report.create9 connectors
coupa.invoices.voidVoid invoicesVoid an approved invoice This can be used on Invoices only on approved and pending receipt Invoices.destructivefinance.invoice.void22 connectors
coupa.projects.createCreate a ProjectCreate a Project.writework.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.

  1. Readread

    Which Coupa invoices are more than 30 days overdue? Group them by customer with the total owed.

    callscoupa.invoices.list

  2. Writewrite

    Creates an invoice in draft status in Coupa. Show me exactly what you will send before you save it.

    callscoupa.invoices.create

  3. Across systemsread

    For each customer, how many invoices are in Coupa and how many tickets in ConnectWise PSA?

    callscoupa.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, on crm.company · 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

Also mapped by other connectorsidentity.user 517work.project 116finance.invoice 91asset.supplier 38hr.department 36finance.purchase_order 35finance.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 invoicescoupa.invoices.void
  • Cancelcoupa.purchase_orders.cancel
  • Delete expense linecoupa.expense_lines.delete
  • Delete taskcoupa.tasks.delete
  • Delete requisitioncoupa.requisitions.delete
  • Log out (CSP)iframe sessioncoupa.suppliers.logout_iframe_session
  • Reverse payable allocationscoupa.payable_allocations.reverse
  • Mark Order as Ready to Paycoupa.payable_orders.ready_to_pay
  • Mark Order as Paid Externallycoupa.payable_orders.pay_externally
  • Mark Invoice Payable as Paid and stop tracking in Coupacoupa.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.

docoupa.invoices.voidconfirm_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: "[email protected]" },    { match: "coupa.purchase_orders.cancel", approver: "[email protected]" },    { match: "coupa.expense_lines.delete", approver: "[email protected]" }  ]}
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.

  • 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

See pricing

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 contractwrite
  • coupa.contracts.createCreate contractwrite
  • coupa.contracts.create_published/api/contracts/:id/create_publishedwrite
  • coupa.contracts.listQuery contractsread
  • coupa.contracts.ccc_signature_createdNotifies that a signature has been added in CCCwrite
  • coupa.contracts.check_inCheck-in a legal documentwrite
  • and 11 more in this area
Invoices17
  • coupa.invoices.createCreates an invoice in draft statuswrite
  • coupa.invoices.getShow invoiceread
  • coupa.invoices.listQuery invoicesread
  • coupa.invoices.updateUpdate invoice Used to updated information on the Invoice using the APIwrite
  • coupa.invoices.abandonAbandon invoicewrite
  • coupa.invoices.add_approverManually add an approver for an invoicewrite
  • and 11 more in this area
Requisitions15
  • coupa.requisitions.add_to_cartAdd To Cartwrite
  • coupa.requisitions.createCreate a requisition in draft status, which will then need to be submitted manuallywrite
  • coupa.requisitions.current_cartSend current cart for user, if there is no current cart then create and sendread
  • coupa.requisitions.listQuery requisitionsread
  • coupa.requisitions.add_approverManually add an approver for a requisitionwrite
  • coupa.requisitions.deleteDelete requisitiondestructive
  • and 9 more in this area
Purchase orders11
  • coupa.purchase_orders.createCreate purchase orderswrite
  • coupa.purchase_orders.getShow purchase orderread
  • coupa.purchase_orders.listQuery purchase ordersread
  • coupa.purchase_orders.updateUpdate purchase orderwrite
  • coupa.purchase_orders.cancelCanceldestructive
  • coupa.purchase_orders.closeClose a purchase orderwrite
  • and 5 more in this area
Expense lines9
  • coupa.expense_lines.createCreate expense linewrite
  • coupa.expense_lines.getShow expense lineread
  • coupa.expense_lines.listQuery expense linesread
  • coupa.expense_lines.updateUpdate expense linewrite
  • coupa.expense_lines.assign_attendeeAssign attendee to expense linewrite
  • coupa.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 pendingwrite
  • coupa.integration_runs.failSet integration run status as failedwrite
  • coupa.integration_runs.getShow integration runread
  • coupa.integration_runs.listQuery integration runsread
  • coupa.integration_runs.pauseSet integration run status as pausedwrite
  • coupa.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 approverwrite
  • coupa.receipt_requests.add_watcherAdd a user as a watcherwrite
  • coupa.receipt_requests.getShow receipt requestread
  • coupa.receipt_requests.listList receipt requestsread
  • coupa.receipt_requests.deleteDelete receipt requestdestructive
  • coupa.receipt_requests.remove_approvalRemove a user as an approverwrite
  • and 3 more in this area
Asn headers8
  • coupa.asn_headers.createCreate advance ship notice headerwrite
  • coupa.asn_headers.getShow advance ship notice headerread
  • coupa.asn_headers.listQuery advance ship notice headerread
  • coupa.asn_headers.receiveReceive asn headerswrite
  • coupa.asn_headers.receive_bulkAdd query parameter fully_consume=true to receivewrite
  • coupa.asn_headers.updateUpdate advance ship notice headerwrite
  • and 2 more in this area
Integration history records8
  • coupa.integration_history_records.createCreate integration history recordwrite
  • coupa.integration_history_records.create_alertCreate alert integration history recordswrite
  • coupa.integration_history_records.create_alert_and_mark_exportedCreate alert and mark exported integration history recordswrite
  • coupa.integration_history_records.listQuery integration history recordsread
  • coupa.integration_history_records.acknowledgeAcknowledge integration history recordswrite
  • coupa.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 supportedwrite
  • coupa.data_file_sources.listQuery data file sourcesread
  • coupa.data_file_sources.load_from_coupa_file_serviceLoad from Coupa file servicewrite
  • coupa.data_file_sources.load_from_sftpUpload flat file and process via data file sourcewrite
  • coupa.data_file_sources.getShow data file sourceread
  • coupa.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 statuswrite
  • coupa.expense_reports.getShow expense reportread
  • coupa.expense_reports.listQuery expense reportsread
  • coupa.expense_reports.updateUpdate expense reportwrite
  • coupa.expense_reports.add_approverManually add an approver for an expense reportwrite
  • coupa.expense_reports.remove_approvalRemove an approver who was manually addedwrite
  • and 1 more in this area
Integration errors7
  • coupa.integration_errors.createCreate integration errorwrite
  • coupa.integration_errors.create_alert/integration_errors/create_alertwrite
  • coupa.integration_errors.getShow integration errorread
  • coupa.integration_errors.listQuery integration errorsread
  • coupa.integration_errors.resolveResolve integration errorwrite
  • coupa.integration_errors.unresolveUnresolve resolved integration errorwrite
  • and 1 more in this area
Payable invoices7
  • coupa.payable_invoices.available_allocations/api/payables/invoices/available_allocationsread
  • coupa.payable_invoices.exportMark Invoice Payable as Exportedwrite
  • coupa.payable_invoices.getShow Invoice Payableread
  • coupa.payable_invoices.listQuery Invoice Payablesread
  • coupa.payable_invoices.pay_externallyMark Invoice Payable as Paid and stop tracking in Coupadestructive
  • coupa.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 changewrite
  • coupa.purchase_order_changes.createCreate purchase order changeswrite
  • coupa.purchase_order_changes.getShow purchase order changeread
  • coupa.purchase_order_changes.listQuery purchase order changesread
  • coupa.purchase_order_changes.remove_approvalRemove an approver who was manually addedwrite
  • coupa.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 lineread
  • coupa.purchase_order_lines.listQuery purchase order linesread
  • coupa.purchase_order_lines.reopen_for_invoicingReopen for invoicingwrite
  • coupa.purchase_order_lines.reopen_for_receivingReopen for receivingwrite
  • coupa.purchase_order_lines.deleteDelete purchase order linedestructive
  • coupa.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 responsewrite
  • coupa.supplier_information_easy_form_responses.approvalSubmit an easy form response for approvalwrite
  • coupa.supplier_information_easy_form_responses.getShow an easy form responseread
  • coupa.supplier_information_easy_form_responses.listQuery easy form responsesread
  • coupa.supplier_information_easy_form_responses.remove_approvalRemove an apporver who was manually addedwrite
  • coupa.supplier_information_easy_form_responses.reviewReview an easy form responsewrite
  • and 1 more in this area
Suppliers7
  • coupa.suppliers.createCreate supplierwrite
  • coupa.suppliers.getShow supplierread
  • coupa.suppliers.listQuery suppliersread
  • coupa.suppliers.updateUpdate supplierwrite
  • coupa.suppliers.create_supplier_user_preferencesCreate supplier user preferenceswrite
  • coupa.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 responsewrite
  • coupa.user_easy_form_responses.approvalSubmit an easy form response for approvalwrite
  • coupa.user_easy_form_responses.getShow an easy form responseread
  • coupa.user_easy_form_responses.listQuery easy form responsesread
  • coupa.user_easy_form_responses.remove_approvalRemove an apporver who was manually addedwrite
  • coupa.user_easy_form_responses.reviewReview an easy form responsewrite
  • and 1 more in this area
Worker assignments7
  • coupa.worker_assignments.closeClose worker assignmentswrite
  • coupa.worker_assignments.confirmConfirm worker assignmentswrite
  • coupa.worker_assignments.getGet assignment data for a single workerread
  • coupa.worker_assignments.listGet all worker assigmentsread
  • coupa.worker_assignments.cancelCancel worker assignmentsdestructive
  • coupa.worker_assignments.show_historyGet the history for a worker assignmentread
  • and 1 more in this area
Accounts6
  • coupa.accounts.createCreate accountwrite
  • coupa.accounts.getShow accountread
  • coupa.accounts.listQuery accountsread
  • coupa.accounts.updateUpdate accountwrite
  • coupa.accounts.favoritesFavoritesread
  • coupa.accounts.recentRecentread
Approvals6
  • coupa.approvals.approvePerform Approve action on an approvalwrite
  • coupa.approvals.getShow approvalread
  • coupa.approvals.holdPerform Hold action on an approvalwrite
  • coupa.approvals.listQuery approvalsread
  • coupa.approvals.rejectPerform Reject action on an approvalwrite
  • coupa.approvals.updateUpdate approvalwrite
Order header confirmations6
  • coupa.order_header_confirmations.accept_headerAccept header order header confirmationswrite
  • coupa.order_header_confirmations.getShow order confirmationsread
  • coupa.order_header_confirmations.listQuery order confirmationsread
  • coupa.order_header_confirmations.reject_headerReject header order header confirmationswrite
  • coupa.order_header_confirmations.submitSubmit a line-level order confirmation that is in a draft statewrite
  • coupa.order_header_confirmations.updateUpdate line-level order confirmationswrite
Payable allocations6
  • coupa.payable_allocations.create/api/payables/allocationswrite
  • coupa.payable_allocations.export/api/payables/allocations/:id/exportwrite
  • coupa.payable_allocations.getShow Payable Allocationread
  • coupa.payable_allocations.listQuery Payable Allocationsread
  • coupa.payable_allocations.reverseReverse payable allocationsdestructive
  • coupa.payable_allocations.update/api/payables/allocations/:idwrite
Receiving transactions6
  • coupa.receiving_transactions.createCreate receiving transactionwrite
  • coupa.receiving_transactions.getShow receiving transactionread
  • coupa.receiving_transactions.listQuery receiving transactionsread
  • coupa.receiving_transactions.updateUpdate receiving transaction export flag onlywrite
  • coupa.receiving_transactions.deleteDelete receiving transactiondestructive
  • coupa.receiving_transactions.voidPerform Void action on receiving transactiondestructive
Return requests6
  • coupa.return_requests.createCreate a return request in draft statuswrite
  • coupa.return_requests.getQuery a return request by IDread
  • coupa.return_requests.listQuery return requestsread
  • coupa.return_requests.submitSubmit a return request for approvalwrite
  • coupa.return_requests.deleteDelete a return request in draft status onlydestructive
  • coupa.return_requests.updateUpdate a return request that is in draft statuswrite
Supplier items6
  • coupa.supplier_items.createCreate supplier itemwrite
  • coupa.supplier_items.getShow supplier itemread
  • coupa.supplier_items.listQuery supplier itemsread
  • coupa.supplier_items.searchAdvanced supplier item searchread
  • coupa.supplier_items.deleteDelete supplier itemdestructive
  • coupa.supplier_items.updateUpdate supplier itemwrite
Workers6
  • coupa.workers.createCreate workerwrite
  • coupa.workers.getShow a workerread
  • coupa.workers.invite_workerInvite a workerwrite
  • coupa.workers.listQuery workerread
  • coupa.workers.updateShow a workerwrite
  • coupa.workers.delete_avatarGet all worker assigmentsdestructive
Budget lines5
  • coupa.budget_lines.createCreate budget linewrite
  • coupa.budget_lines.getShow budget lineread
  • coupa.budget_lines.listQuery budget linesread
  • coupa.budget_lines.updateUpdate budget linewrite
  • coupa.budget_lines.adjustCreate budget line adjustment for budget linewrite
Expense report expense lines5
  • coupa.expense_report_expense_lines.createCreate expense linewrite
  • coupa.expense_report_expense_lines.getShow expense lineread
  • coupa.expense_report_expense_lines.listQuery expense linesread
  • coupa.expense_report_expense_lines.updateUpdate expense linewrite
  • coupa.expense_report_expense_lines.deleteDelete expense linedestructive
External payables5
  • coupa.external_payables.createCreate External Payablewrite
  • coupa.external_payables.getShow External Payableread
  • coupa.external_payables.listQuery External Payablesread
  • coupa.external_payables.updateUpdate External Payablewrite
  • coupa.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.