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.

Finance and accountingOAuth 2.0MCP + RESTcoupa.com
AUDIT LOG · COUPAPOLICY: acme-support
09:41:07 · claude · u_8f2read
coupa.list_comments
List Comments✓ allowed · 212ms
09:41:08 · claude · u_8f2read
coupa.get_item
Get Item✓ allowed · 164ms
09:41:09 · claude · u_8f2write
coupa.create_task
Create Task✓ approved · approved by user
09:41:12 · claude · u_8f2destructive
coupa.delete_projects_tasks
Delete Project Task✕ blocked · policy: deny
EVERY COUPA CALL, ON THE RECORD
01 · USE CASES

What agents do in Coupa.

01

Check an invoice before approval

Check an invoice's details before deciding whether to approve or abandon it.

02

Add an approver to a requisition

Add an approver to a requisition so it routes correctly before purchase.

03

Confirm before abandoning an invoice

Confirm before abandoning an invoice, since it removes it from the approval pipeline.

02 · ACTIONS

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

113

Look things up. Allowed by default.

  • coupa.get_item
    Get Item
  • coupa.get_as_ns
    Get ASN Headers
  • coupa.get_api_docs
    Get API Documentation Modules
  • coupa.get_commodity
    Get Commodity
  • coupa.list_comments
    List Comments
  • coupa.query_lookups
    Query Lookups
  • coupa.get_item_image
    Get Item Image
  • coupa.get_user_group
    Get User Group
  • coupa.get_budget_line
    Get Budget Line
  • coupa.get_delegations
    Get Delegations
  • coupa.get_cycle_counts
    Get Cycle Counts
  • coupa.get_project_task
    Get Project Task
  • coupa.list_commodities
    List Commodities
  • coupa.get_riskawarefeed
    Get Supplier Risk Aware Feed
  • coupa.list_obj_comments
    List Object Comments
  • coupa.get_approval_by_id
    Get Approval by ID
+ 97 MORE

write

228

Create and change things. Allow, or ask the user first.

  • coupa.create_task
    Create Task
  • coupa.create_fxrates
    Create FX Rate
  • coupa.create_project
    Create Project
  • coupa.update_invoices
    Update Invoice
  • coupa.create_commodity
    Create Commodity
  • coupa.add_contract_term
    Add Contract Term
  • coupa.create_user_group
    Create User Group
  • coupa.update_user_group
    Update User Group
  • coupa.add_comments_to_po
    Add Comment to Purchase Order
  • coupa.create_budget_line
    Create Budget Line
  • coupa.update_budget_line
    Update Budget Line
  • coupa.update_commodities
    Update Commodities
  • coupa.update_requisition
    Update Requisition
  • coupa.add_user_to_a_group
    Add User To A Group
  • coupa.create_lookup_value
    Create Lookup Value
  • coupa.create_payment_term
    Create Payment Term
+ 212 MORE

destructive

43

Delete, cancel or archive. Ask first, or deny outright.

  • coupa.cancel_external_po
    Cancel External PO
  • coupa.delete_projects_tasks
    Delete Project Task
  • coupa.delete_requisition_line
    Delete Requisition Line
  • coupa.remove_contract_approval
    Remove Contract Approval
  • coupa.delete_a_tax_registration
    Delete Tax Registration
  • coupa.delete_quote_request_task
    Delete Quote Request Task
  • coupa.delete_project_memberships
    Delete Project Membership
  • coupa.delete_specific_po_attachment
    Delete Purchase Order Attachment
  • coupa.remove_a_content_group_on_contract
    Remove Content Group from Contract
  • coupa.delete_specific_contract_attachment
    Delete Specific Contract Attachment
  • coupa.remove_all_content_group_on_contract
    Remove All Content Groups from Contract
  • coupa.remove_all_content_groups_on_supplier
    Remove All Content Groups on Supplier
  • coupa.delete_specific_requisition_attachment
    Delete Requisition Attachment
  • coupa.remove_all_content_group_on_sim_record
    Remove All Content Groups from SIM Record
  • coupa.remove_specific_content_group_on_supplier
    Remove Content Group from Supplier
  • coupa.remove_all_content_group_on_sim_site_record
    Remove All Content Groups from SIM Site
+ 27 MORE
03 · HOW IT WORKS

Coupa in three steps.

  1. 01Your users connect CoupaThey sign in to Coupa on Arc0 Connect, under your brand, and approve the access you ask for.
  2. 02You set the rulesReads run, writes like “create Task” can wait for the user, and “delete Project Task” can be denied outright.
  3. 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.
POLICY.TS
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
04 · AUTH AND DATA

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
05 · WORKS WITH

Use Coupa from any agent.

Claude
ChatGPT
Cursor
Codex
VS Code
OpenAI Agents SDK
Claude Agent SDK
Vercel AI SDK
Mastra
LangGraph
07 · FAQ

Coupa and Arc0, answered.

Q01

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.

Q02

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.

Q03

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.

Q04

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.

Q05

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.

Get started

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