BillDesk.

Tools reference

BillDesk for Claude

BillDesk is an MCP server — MCP is the open standard that lets Claude call tools in other apps. Connect it once and Claude can create, find, edit and approve bills for your company.

Demo connector URL

Connects to the Acme Labs demo company. Bills you create show up at /app (demo@billdesk.app / demo1234).

https://billdesk.totest.fyi/api/mcp/4cd61fb052787cafd4a85dc730c28146c08d4638

claude.ai

  1. Settings → Connectors
  2. Add custom connector
  3. Name it BillDesk, paste the URL, Add
  4. In a chat, open the tools menu and enable BillDesk

Claude Desktop

  1. Settings → Connectors
  2. Add custom connector
  3. Name it BillDesk, paste the URL
  4. Enable it from the tools menu in a chat

Claude Code

Run in your terminal:

claude mcp add --transport http billdesk https://billdesk.totest.fyi/api/mcp/4cd61fb052787cafd4a85dc730c28146c08d4638

Division of labour

What lives where

All the intelligence runs on your Claude plan. BillDesk is deliberately boring.

Claude doesBillDesk does
Reading invoice photos, PDFs and emailsStoring bills, line items and vendors
Extracting vendor, dates, line items, totalsApproval workflow with enforced status rules
Answering questions in plain EnglishEdits from the dashboard, locked once paid
Deciding which tool to callAudit trail: who did what, when
Public vendor status links
Multi-tenant: one connector URL per company

7 tools

The tools

Exactly what Claude sees. The description is sent to the model; everything else is for you.

create_bill

Turn an invoice Claude has read (photo, PDF, email) into a pending bill.

Create bill

Description sent to Claude

Create a new bill (vendor invoice) in BillDesk. Use after reading an invoice image/PDF/email: extract the vendor, invoice number, dates, currency, category and line items. The bill starts as 'pending' for a human to review and approve. Returns the bill ref (e.g. B-1006), a dashboard link for the approver, and a public status link for the vendor.

Parameters

NameTypeRequiredDescription
vendor_namestringrequiredWho sent the invoice
vendor_emailstringoptionalVendor billing email, if shown
bill_numberstringoptionalThe vendor's invoice number
issue_dateYYYY-MM-DDoptionalInvoice date
due_dateYYYY-MM-DDoptionalPayment due date
currencystringoptionalISO code, default USD
categorystringoptionale.g. Software, Rent, Hardware, Meals, Travel
notesstringoptionalAnything the approver should know
line_itemsarrayoptional[{ description, quantity, unit_price }] — total is computed from these
totalnumberoptionalOnly when there are no line items

You type

“Here's an invoice from Notion — add it to BillDesk.”

Claude calls

create_bill({
  "vendor_name": "Notion Labs",
  "bill_number": "NOT-20931",
  "issue_date": "2026-11-01",
  "due_date": "2026-11-15",
  "currency": "USD",
  "category": "Software",
  "line_items": [
    {
      "description": "Plus plan, 12 seats",
      "quantity": 12,
      "unit_price": 10
    }
  ]
})

list_bills

Find bills by status, vendor, due date or text search.

List bills

Description sent to Claude

List bills for this company. Filter by status (pending, approved, rejected, paid), vendor name (partial match), due_before date (YYYY-MM-DD, inclusive) or a free-text search over bill ref, invoice number and vendor. Pending bills are listed first, then by due date.

Parameters

NameTypeRequiredDescription
statuspending | approved | rejected | paidoptionalOnly this status
vendorstringoptionalPartial vendor name
due_beforeYYYY-MM-DDoptionalDue on or before this date
searchstringoptionalMatches ref, invoice number or vendor
limitnumberoptionalMax results (default 50)

You type

“What bills are still waiting for approval?”

Claude calls

list_bills({
  "status": "pending"
})

get_bill

Full details of one bill: line items and the complete history.

Get bill

Description sent to Claude

Get one bill with its line items and full activity history (who created, edited, approved it and when). Accepts the bill ref like 'B-1003' or its id.

Parameters

NameTypeRequiredDescription
billstringrequiredBill ref (B-1003) or id

You type

“Show me everything about B-1003.”

Claude calls

get_bill({
  "bill": "B-1003"
})

update_bill

Fix fields on a bill. Paid bills are locked.

Update bill

Description sent to Claude

Edit an existing bill. Only send the fields you want to change. Sending line_items replaces all line items and recomputes the total. Paid bills cannot be edited. Every edit is recorded in the bill's history.

Parameters

NameTypeRequiredDescription
billstringrequiredBill ref (B-1003) or id
…any create_bill field—optionalvendor_name, due_date, category, notes, line_items, total…

You type

“B-1005 is actually due on the 30th, and categorise it as Hardware.”

Claude calls

update_bill({
  "bill": "B-1005",
  "due_date": "2026-11-30",
  "category": "Hardware"
})

set_bill_status

Approve, reject, mark paid, or send back to pending.

Change bill status

Description sent to Claude

Move a bill through the approval flow. Allowed moves: pending → approved or rejected; approved → paid or back to pending; rejected → pending. Paid is final. Include a short note explaining why, especially for rejections. The vendor's public status page updates immediately.

Parameters

NameTypeRequiredDescription
billstringrequiredBill ref (B-1003) or id
statusapproved | rejected | paid | pendingrequiredNew status
notestringoptionalReason, shown in history

You type

“Reject B-1004, it's a duplicate charge.”

Claude calls

set_bill_status({
  "bill": "B-1004",
  "status": "rejected",
  "note": "Duplicate of BBC-0911"
})

list_vendors

Every vendor with bill count and open (unpaid) amount.

List vendors

Description sent to Claude

List all vendors for this company with how many bills each has and the total still open (pending + approved).

Parameters

None.

You type

“Who do we owe the most money to right now?”

Claude calls

list_vendors({})

spend_summary

Totals by status and category, plus bills due in the next 7 days.

Spend summary

Description sent to Claude

Summarise spend: totals and counts by status, totals by category (excluding rejected), and open bills due within the next 7 days. Optional from/to dates (YYYY-MM-DD) filter by invoice date.

Parameters

NameTypeRequiredDescription
fromYYYY-MM-DDoptionalInvoice date from
toYYYY-MM-DDoptionalInvoice date to

You type

“What's due this week and how much did we spend on software?”

Claude calls

spend_summary({})