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).
  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.

Authentication

The server reads two 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 connects to production (api.thredfi.com) unless THRED_ENV=sandbox or THRED_BASE_URL is set. Write tools mutate data in the selected environment. Keep sandbox credentials separate from production credentials and do not point one environment’s credentials at the other environment’s URL.

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