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).
- The AI client launches
thred-mcpas a subprocess and speaks MCP over stdio. - On the first tool call, the server exchanges your Partner UUID + API Key for an OAuth2 access token.
- The token is cached in memory and reused until ~5 minutes before expiry, then refreshed automatically.
- 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 vianpx.
Authentication
The server reads two environment variables and performs the OAuth2client_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.
Connecting an AI client
- Claude Desktop
- Cursor / VS Code
- Manual / debugging
Edit A hammer icon appears in the composer — click it to see the Thred tools.
~/Library/Application Support/Claude/claude_desktop_config.json (create it if missing), then fully restart Claude (Cmd+Q and reopen):Tool catalog
The server exposes 50 tools across 9 categories. Every tool requires abusiness_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.
Businesses (5)
Businesses (5)
Customers (6)
Customers (6)
Invoices (6)
Invoices (6)
Invoice Payments (5)
Invoice Payments (5)
Vendors (6)
Vendors (6)
Bills & Bill Payments (10)
Bills & Bill Payments (10)
Chart of Accounts (6)
Chart of Accounts (6)
Financial Reports (6)
Financial Reports (6)
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/DELETEon/v1/platform/.... - Errors: non-2xx responses are returned to the model as
Error: API error <status> on <method> <path>: <body>withisError: true, so the assistant can explain or retry. A204 No Contentresolves to an empty result.
Example prompts
Source & package
thred-mcp on npm · npx thred-mcp