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 of the environment you select (https://api.thredfi.com in production).
  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.
THRED_ENV=development requires thred-mcp@0.10.0 or later. Versions 0.4.0 to 0.9.4 do not recognise development and fail every tool call, and versions before 0.4.0 send any environment name they do not know to production. If your client keeps running a cached older version, use "args": ["-y", "thred-mcp@latest"].

Authentication

Request development credentials (a Partner UUID and API Key) from Thred at partners@thredfi.com. Production credentials are issued separately, and each set works only in its own environment. The server reads these environment variables and performs the OAuth2 client_credentials flow for you: 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 has no default environment: every tool call fails until THRED_ENV or THRED_BASE_URL is set, so it never reaches production by accident. Write tools mutate data in the selected environment. Keep development credentials separate from production credentials and do not point one environment’s credentials at the other environment’s URL. Development is continuously deployed and uses provider test modes (Plaid sandbox, Stripe test). Data may be reset; never send real customer data.

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):
A hammer icon appears in the composer — click it to see the Thred tools.

Tool catalog

The server exposes 50 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.

Tested Payloads

These payloads match the current MCP contract tests and Friday Partner API behavior.

Create business

Update business

update_business sends only mutable Friday fields. country, external_id, and base_currency are not sent by this tool.

Create invoice with tax code

Financial summary

get_financial_summary requires explicit dates; missing start_date or end_date is rejected before the API call.

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:

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

Source & package

thred-mcp on npm · npx thred-mcp