Coupa for AI agents
Coupa manages business spend, covering procurement, invoicing, and expenses so a finance team can control purchasing across the whole company. Connect it once through Arc0, and your agent, or Claude, ChatGPT and Cursor, can use it through one MCP endpoint, limited to what each user approved.
What agents do in Coupa.
Check an invoice before approval
Check an invoice's details before deciding whether to approve or abandon it.
Add an approver to a requisition
Add an approver to a requisition so it routes correctly before purchase.
Confirm before abandoning an invoice
Confirm before abandoning an invoice, since it removes it from the approval pipeline.
384 Coupa actions, graded by risk.
Every Coupa action is tagged read, write or destructive, so one policy covers the whole app and new actions inherit the right default.
read
113Look things up. Allowed by default.
- coupa.get_itemGet Item
- coupa.get_as_nsGet ASN Headers
- coupa.get_api_docsGet API Documentation Modules
- coupa.get_commodityGet Commodity
- coupa.list_commentsList Comments
- coupa.query_lookupsQuery Lookups
- coupa.get_item_imageGet Item Image
- coupa.get_user_groupGet User Group
- coupa.get_budget_lineGet Budget Line
- coupa.get_delegationsGet Delegations
- coupa.get_cycle_countsGet Cycle Counts
- coupa.get_project_taskGet Project Task
- coupa.list_commoditiesList Commodities
- coupa.get_riskawarefeedGet Supplier Risk Aware Feed
- coupa.list_obj_commentsList Object Comments
- coupa.get_approval_by_idGet Approval by ID
write
228Create and change things. Allow, or ask the user first.
- coupa.create_taskCreate Task
- coupa.create_fxratesCreate FX Rate
- coupa.create_projectCreate Project
- coupa.update_invoicesUpdate Invoice
- coupa.create_commodityCreate Commodity
- coupa.add_contract_termAdd Contract Term
- coupa.create_user_groupCreate User Group
- coupa.update_user_groupUpdate User Group
- coupa.add_comments_to_poAdd Comment to Purchase Order
- coupa.create_budget_lineCreate Budget Line
- coupa.update_budget_lineUpdate Budget Line
- coupa.update_commoditiesUpdate Commodities
- coupa.update_requisitionUpdate Requisition
- coupa.add_user_to_a_groupAdd User To A Group
- coupa.create_lookup_valueCreate Lookup Value
- coupa.create_payment_termCreate Payment Term
destructive
43Delete, cancel or archive. Ask first, or deny outright.
- coupa.cancel_external_poCancel External PO
- coupa.delete_projects_tasksDelete Project Task
- coupa.delete_requisition_lineDelete Requisition Line
- coupa.remove_contract_approvalRemove Contract Approval
- coupa.delete_a_tax_registrationDelete Tax Registration
- coupa.delete_quote_request_taskDelete Quote Request Task
- coupa.delete_project_membershipsDelete Project Membership
- coupa.delete_specific_po_attachmentDelete Purchase Order Attachment
- coupa.remove_a_content_group_on_contractRemove Content Group from Contract
- coupa.delete_specific_contract_attachmentDelete Specific Contract Attachment
- coupa.remove_all_content_group_on_contractRemove All Content Groups from Contract
- coupa.remove_all_content_groups_on_supplierRemove All Content Groups on Supplier
- coupa.delete_specific_requisition_attachmentDelete Requisition Attachment
- coupa.remove_all_content_group_on_sim_recordRemove All Content Groups from SIM Record
- coupa.remove_specific_content_group_on_supplierRemove Content Group from Supplier
- coupa.remove_all_content_group_on_sim_site_recordRemove All Content Groups from SIM Site
Coupa in three steps.
- 01Your users connect CoupaThey sign in to Coupa on Arc0 Connect, under your brand, and approve the access you ask for.
- 02You set the rulesReads run, writes like “create Task” can wait for the user, and “delete Project Task” can be denied outright.
- 03Any agent can actYour agent calls Coupa through the Arc0 SDK or MCP, and so can Claude, ChatGPT and Cursor. Every call lands on the audit log.
await arc0.policies.set('coupa', { read: 'allow', write: 'ask', // create_task destructive: 'deny', // delete_projects_tasks }) # Claude Code: the same connection, one URL $ claude mcp add --transport http arc0 \ https://mcp.arc0.ai/u/u_8f2
How Coupa connects.
Users sign in to Coupa on Arc0 Connect and approve the scopes you request. Build with Arc0’s Coupa OAuth app, or bring your own so the Coupa consent screen names you. Tokens refresh automatically, and you can export them whenever you want.
The same Coupa connection serves your agent over MCP and your own backend over REST and the proxy, so a user connects once. How Arc0 handles credentials →
- AUTH
- OAuth 2.0
- CREDENTIALS
- Per-tenant encrypted vault
- MODEL SEES
- Results only, never credentials
- AUDIT LOG
- Every call, on every plan
Use Coupa from any agent.
More finance and accounting apps.
Coupa and Arc0, answered.
Can I use Coupa with Claude, ChatGPT or Cursor?
Yes. Connect Coupa to Arc0 once, then add your Arc0 MCP URL to Claude, ChatGPT, Cursor, Claude Code or any other remote-MCP client. Each assistant only gets the Coupa actions you allow.
How do users connect Coupa?
Users sign in to Coupa on Arc0 Connect and approve the scopes you request. Build with Arc0’s Coupa OAuth app, or bring your own so the Coupa consent screen names you. Tokens refresh automatically, and you can export them whenever you want.
Which Coupa actions can my agent take?
384 in total: 113 read, 228 write and 43 destructive, such as “create Task”. Your policies decide which of them each agent may call.
Can I stop my agent from deleting things in Coupa?
Yes. Actions like “delete Project Task” are graded destructive. Set destructive actions to deny, or to ask so the user approves each one, and blocked calls still show up on the audit log.
Can my own backend call Coupa too?
Yes. The same Coupa connection is available over REST and through the Arc0 proxy, so your product and your agent share one connection per user.
Plug Coupa into your agent.
Your users connect Coupa once, under your brand. Your agent gets 384 actions behind your policies, with every call on the record.
Free to build · MCP + REST · Audit log on every plan