Skip to main content
The Thred MCP server exposes the Thred Partner API as a set of Model Context Protocol tools, so AI assistants like Claude and ChatGPT can read and write a business’s accounting data in plain language — no custom integration code required. It is published on npm as thred-mcp and runs locally over stdio.

Ask

Read-only questions about the business — overview, cash flow, AR/AP, reports.

Do

Write actions — create invoices, record payments, manage customers, vendors & bills.

Watch

Proactive alerts (overdue, cash-low, unusual transactions). Roadmap — not yet shipped.

How it works

The MCP server is a thin, stateless adapter. It does not store data — every tool call is translated into a single authenticated request against the Partner API (https://api.thredfi.com).
AI assistant (Claude / ChatGPT)
      │  MCP (stdio, JSON-RPC)

thred-mcp  ──►  POST /v1/platform/oauth2/token/   (client_credentials, cached)

      └──────►  https://api.thredfi.com/v1/platform/...   (Bearer token)
  1. The AI client launches thred-mcp as a subprocess and speaks MCP over stdio.
  2. On the first tool call, the server exchanges your Partner UUID + API Key for an OAuth2 access token.
  3. The token is cached in memory and reused until ~5 minutes before expiry, then refreshed automatically.
  4. Each tool maps to one Partner API endpoint; the JSON response is returned to the model.
The MCP server is channel-agnostic and runs entirely on the user’s machine. Your Partner credentials never leave the local process, and no Thred data is persisted by the server.

Installation

Requires Node.js 18+. No global install needed — clients run it via npx.
npx thred-mcp

Authentication

The server reads two environment variables and performs the OAuth2 client_credentials flow for you:
VariableRequiredDescription
THRED_PARTNER_UUIDYesYour Partner UUID from the Partner Portal
THRED_API_KEYYesYour Partner API Key
Credentials are sent as HTTP Basic auth to POST /v1/platform/oauth2/token/; the returned access_token is then used as a Bearer token on every API call. See Authentication for the underlying token model.
The MCP server connects to production (api.thredfi.com). Write tools mutate real data. The AI assistant is instructed to confirm high-risk actions (create / void / delete) before executing, but treat the credentials you provide as production-scoped.

Connecting an AI client

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (create it if missing), then fully restart Claude (Cmd+Q and reopen):
{
  "mcpServers": {
    "thred": {
      "command": "npx",
      "args": ["-y", "thred-mcp"],
      "env": {
        "THRED_PARTNER_UUID": "your-partner-uuid",
        "THRED_API_KEY": "your-api-key"
      }
    }
  }
}
A hammer icon appears in the composer — click it to see the Thred tools.

Tool catalog

The server exposes 49 tools across 9 categories. Every tool requires a business_id (resolve it first with list_businesses). Tools are tagged R (read) or W (write); write tools should be confirmed with the user before execution.
ToolTypePurpose
list_businessesRList all businesses under the partner — the entry point for resolving business_id
get_businessRFetch a single business
create_businessWOnboard a new business
update_businessWUpdate business details
archive_businessWArchive a business
ToolTypePurpose
list_customersRList / search customers — used to match a name to a customer_id
get_customerRFetch a single customer
create_customerWCreate a customer (company_name for businesses, individual_name for people)
update_customerWUpdate a customer
archive_customerWArchive a customer
unarchive_customerWRestore an archived customer
ToolTypePurpose
list_invoicesRList invoices, filterable by status (draft, sent, paid, overdue, void)
get_invoiceRFetch a single invoice
create_invoiceWCreate an invoice for a customer
update_invoiceWUpdate an invoice
void_invoiceWVoid an invoice (irreversible)
ToolTypePurpose
list_invoice_paymentsRList payments recorded against invoices
get_invoice_paymentRFetch a single payment
create_invoice_paymentWRecord a payment against an invoice
update_invoice_paymentWUpdate a recorded payment
delete_invoice_paymentWDelete a payment (reverts invoice to unpaid)
ToolTypePurpose
list_vendorsRList / search vendors — used to match a name to a vendor_id
get_vendorRFetch a single vendor
create_vendorWCreate a vendor
update_vendorWUpdate a vendor
archive_vendorWArchive a vendor
unarchive_vendorWRestore an archived vendor
ToolTypePurpose
list_billsRList bills (accounts payable / vendor spend)
get_billRFetch a single bill
create_billWRecord a bill from a vendor
update_billWUpdate a bill
void_billWVoid a bill
list_bill_paymentsRList payments made against bills
get_bill_paymentRFetch a single bill payment
create_bill_paymentWRecord a payment against a bill
update_bill_paymentWUpdate a bill payment
delete_bill_paymentWDelete a bill payment
ToolTypePurpose
list_chart_of_accountsRList all ledger accounts
get_chart_of_accounts_hierarchyRGet the account tree (preferred for categorization)
get_accountRFetch a single account
create_accountWCreate a ledger account
update_accountWUpdate an account
archive_accountWArchive an account
ToolTypePurpose
get_profit_and_lossRP&L over a date range (start_date, end_date)
get_balance_sheetRBalance sheet as of a date (as_of_date)
get_cash_flowRCash flow statement over a date range
get_ar_agingRAccounts receivable aging
get_ap_agingRAccounts payable aging
get_financial_summaryRHigh-level financial insights over a date range

Composed capabilities

Several product experiences are not single endpoints — the AI assistant orchestrates multiple atomic tools and composes the narrative, emails, or layout around the returned data:
CapabilityHow it’s composed
Board packget_profit_and_loss (current + prior period) + get_cash_flow + get_balance_sheet, synthesized into a summary with runway
Natural-language dashboardReport tools called with date ranges derived from the user’s phrasing (“last 6 months”), optionally across multiple periods for comparison
Payment reminderslist_invoices (status overdue) → match customer → AI-composed reminder email
Vendor outreachlist_vendors / list_bills → identify missing document → AI-composed request

Behavioral model

Tool descriptions are written to steer the model toward safe, useful behavior:
1

Confirmation

High-risk writes (create_*, void_*, delete_*) prompt for explicit user confirmation before executing.
2

Slot-filling

Missing required fields (amount, due date, line items) trigger follow-up questions rather than guesses.
3

Name matching

Customer/vendor names are resolved to IDs via the list_* tools — the model never fabricates an ID.
4

Action chaining

After an action, the next logical step is offered (e.g. invoice created → “send it?”).

Request lifecycle & errors

  • Transport: JSON-RPC over stdio (@modelcontextprotocol/sdk).
  • Auth caching: one token per process, refreshed ~5 minutes before expires_in.
  • Methods: tools map to GET / POST / PATCH / PUT / DELETE on /v1/platform/....
  • Errors: non-2xx responses are returned to the model as Error: API error <status> on <method> <path>: <body> with isError: true, so the assistant can explain or retry. A 204 No Content resolves to an empty result.
See Error Handling, Pagination, and Idempotency for API-level behavior that applies to every tool call.

Example prompts

"List the businesses in my Thred account."
"How is Acme Ltd doing this month?"
"Who is more than 30 days overdue, and send them a reminder."
"Create an invoice for Acme — €5,000, net 30."
"What did we spend per vendor last quarter?"
"Reconcile the €2,400 that just came in from Acme."
"Build my Q1 board pack — P&L vs. prior quarter, cash position, and runway."

Source & package

thred-mcp on npm · npx thred-mcp