Better Proposals for AI agents

Better Proposals is web-based software for building and sending client proposals, used by agencies and freelancers to track which proposals are opened, signed, and paid. 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 accountingAPI keyMCP + RESTbetterproposals.io
AUDIT LOG · BETTER PROPOSALSPOLICY: acme-support
09:41:07 · claude · u_8f2read
better_proposals.get_quote
Get Quote✓ allowed · 212ms
09:41:08 · claude · u_8f2read
better_proposals.get_company
Get Company✓ allowed · 164ms
09:41:09 · claude · u_8f2write
better_proposals.create_company
Create Company✓ approved · approved by user
09:41:12 · claude · u_8f2destructive
better_proposals.list_merge_tags
List Merge Tags✕ blocked · policy: deny
EVERY BETTER PROPOSALS CALL, ON THE RECORD
01 · USE CASES

What agents do in Better Proposals.

01

Check which proposals are still open

Get the list of sent and opened proposals to see which client hasn't responded yet.

02

Draft a proposal for a client

Create a proposal from a template with a cover page and leave it as a draft for review.

03

Confirm payment status before follow-up

Get the count and status of signed proposals as a read-only check before finance follows up on payment.

02 · ACTIONS

23 Better Proposals actions, graded by risk.

Every Better Proposals action is tagged read, write or destructive, so one policy covers the whole app and new actions inherit the right default.

read

19

Look things up. Allowed by default.

  • better_proposals.get_quote
    Get Quote
  • better_proposals.get_company
    Get Company
  • better_proposals.get_currency
    Get Currency
  • better_proposals.get_proposal
    Get Proposal
  • better_proposals.get_settings
    Get Settings
  • better_proposals.get_template
    Get Template Details
  • better_proposals.get_all_quotes
    Get All Quotes
  • better_proposals.get_all_companies
    Get All Companies
  • better_proposals.get_all_proposals
    Get All Proposals
  • better_proposals.get_all_templates
    Get All Templates
  • better_proposals.get_new_proposals
    Get New Proposals
  • better_proposals.get_all_currencies
    Get All Currencies
  • better_proposals.get_brand_settings
    Get Brand Settings
  • better_proposals.get_paid_proposals
    Get Paid Proposals
  • better_proposals.get_proposal_count
    Get Proposal Count
  • better_proposals.get_sent_proposals
    Get Sent Proposals
+ 3 MORE

write

3

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

  • better_proposals.create_company
    Create Company
  • better_proposals.create_document_type
    Create Document Type
  • better_proposals.create_proposal_cover
    Create Proposal Cover

destructive

1

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

  • better_proposals.list_merge_tags
    List Merge Tags
03 · HOW IT WORKS

Better Proposals in three steps.

  1. 01Your users connect Better ProposalsThey add their Better Proposals api key on Arc0 Connect, under your brand. It goes straight into the vault.
  2. 02You set the rulesReads run, writes like “create Company” can wait for the user, and “list Merge Tags” can be denied outright.
  3. 03Any agent can actYour agent calls Better Proposals 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('better_proposals', {
  read: 'allow',
  write: 'ask',        // create_company
  destructive: 'deny',  // list_merge_tags
})

# 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 Better Proposals connects.

Users add their Better Proposals api key on Arc0 Connect. It is encrypted in the vault, never shown to the model, and each user can rotate or revoke it at any time.

The same Better Proposals 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
API key
CREDENTIALS
Per-tenant encrypted vault
MODEL SEES
Results only, never credentials
AUDIT LOG
Every call, on every plan
05 · WORKS WITH

Use Better Proposals from any agent.

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

Better Proposals and Arc0, answered.

Q01

Can I use Better Proposals with Claude, ChatGPT or Cursor?

Yes. Connect Better Proposals 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 Better Proposals actions you allow.

Q02

How do users connect Better Proposals?

Users add their Better Proposals api key on Arc0 Connect. It is encrypted in the vault, never shown to the model, and each user can rotate or revoke it at any time.

Q03

Which Better Proposals actions can my agent take?

23 in total: 19 read, 3 write and 1 destructive, such as “create Company”. Your policies decide which of them each agent may call.

Q04

Can I stop my agent from deleting things in Better Proposals?

Yes. Actions like “list Merge Tags” 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 Better Proposals too?

Yes. The same Better Proposals connection is available over REST and through the Arc0 proxy, so your product and your agent share one connection per user.

Get started

Plug Better Proposals into your agent.

Your users connect Better Proposals once, under your brand. Your agent gets 23 actions behind your policies, with every call on the record.

Free to build · MCP + REST · Audit log on every plan