Freshbooks MCP logo

Freshbooks MCP

Connects Claude and other MCP clients to FreshBooks for OAuth, accounting records, invoicing, expenses, projects, and time tracking.

Install Freshbooks MCP

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "freshbooks-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/freshbooks-mcp"
      ],
      "env": {
        "FRESHBOOKS_CLIENT_ID": "YOUR_VALUE_HERE",
        "FRESHBOOKS_CLIENT_SECRET": "YOUR_VALUE_HERE"
      }
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Values are written into the snippet above so you can paste it as is. They never leave your browser.

Automated check passed— started and listed 34 tools correctly (Today).

Overview

The freshbooks-mcp MCP server exposes FreshBooks accounting operations as typed MCP tools for browsing records and performing confirmed writes. It uses FreshBooks OAuth2, with authorization helpers and local refresh-token storage instead of API keys or personal access tokens. Reach for it when an agent needs to inspect or update invoices, clients, estimates, payments, expenses, projects, or tracked time in FreshBooks. Writes use confirmation flows, while read tools cover both common resources and less frequently used accounting records.

Use cases

  • Browse FreshBooks invoices and payment history
  • Create and update invoices with confirmation
  • Review and send estimates to clients
  • Record expenses, projects, and tracked time
  • Inspect less common FreshBooks accounting records

Key features

  • FreshBooks OAuth2 authorization and token exchange
  • Invoice, client, estimate, payment, and item access
  • Expense, project, service, and time-entry tools
  • Confirmation-gated accounting writes
  • Refresh-token rotation with local persistence
  • Generic access to additional accounting records

Tools34

What Freshbooks MCP lets your agent do. Expand a tool for its parameters.

Verified live~7.7k tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 2d ago

Recent health check succeeded.

6/6 checks healthy over the last 45d

What it can do

From the 34 tools this server returned when we ran it; 34 declare their own safety hints.

Can delete or modify data · 11Handles credentials · 12Makes network requests · 34Read-only tools · 23
Network at startup3 connections
Files written at startupNone
Install scriptsNone
npm provenanceSigned build
Package age81 days
Maintainers1

Observed 2026-11-02 in an isolated sandbox. A description of reach, not a security audit.

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 14d ago via OSV.dev · @chrischall/freshbooks-mcp (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

npm downloads2kPackage downloads in the last 30 days.
Last commit5d agoMost recent push to the default branch.
Availability100%Our rolling endpoint + install checks that succeeded.
Install checkPassedOur sandbox started it and listed its tools.
Tools exposed34Callable tools this server registers over MCP.

How Freshbooks MCP works

What freshbooks-mcp does

The freshbooks-mcp MCP server connects an MCP-compatible agent to FreshBooks. It provides tools for resolving account and business identifiers, completing OAuth authorization, checking credential health, and working with accounting data.

Read operations cover invoices, clients, estimates, payments, catalogue items, expenses, expense categories, projects, time entries, and billable services. A generic records interface extends access to taxes, credit notes, invoice profiles, tasks, staff, gateways, bills, bill vendors, bill payments, and other income.

The server also supports selected writes: creating clients, invoices, expenses, projects, and time entries; updating invoices and estimates; recording payments; accepting or emailing estimates; and handling related FreshBooks actions. Write tools require confirmation. The estimate-decline tool does not perform a decline because FreshBooks does not provide that operation; it returns alternatives instead.

How it works

freshbooks-mcp uses FreshBooks OAuth2. There is no API key or personal access token flow. The server can generate a consent URL and exchange an authorization code or pasted redirect URL for a refresh token. It can also resolve the FreshBooks account and business identifiers needed by some operations and distinguish missing credentials, rejected credentials, and an unavailable FreshBooks service through its health check.

For local sessions, rotated refresh tokens are saved in the configured token store with restrictive file permissions. FreshBooks replaces the refresh token after each refresh, so the latest stored value takes precedence over an older environment value. A single token store should not be shared by separate tools.

Confirmation behavior depends on the client. Clients with prompt support can show the intended write directly. Other clients receive a preview and a single-use confirmation token before any network write occurs. Tokens can expire, cannot be reused, and become invalid if the arguments change.

Setup and configuration

Install the package globally with npm, then register an application in the FreshBooks developer area. The redirect URI must use HTTPS and cannot include a query string; https://localhost is an example supported by the project.

Set FRESHBOOKS_CLIENT_ID and FRESHBOOKS_CLIENT_SECRET, start the server, call freshbooks_auth_url, authorize in a browser, and pass the resulting URL to freshbooks_auth_exchange. Local sessions save the token in FRESHBOOKS_TOKEN_STORE. FRESHBOOKS_REFRESH_TOKEN can be used for an existing environment-based setup, while FRESHBOOKS_REDIRECT_URI and FRESHBOOKS_TOKEN_STORE customize the defaults.

If the FreshBooks user belongs to multiple businesses, set FRESHBOOKS_BUSINESS_ID. Some invoice and expense writes also need FRESHBOOKS_ACCOUNT_ID when FreshBooks does not return an account identifier for the selected business. Hosted deployments use MCP_DATA_DIR to identify their environment and return the refresh token to the host's secret-management flow.

Confirmation behavior can be adjusted with MCP_CONFIRM_MODE, MCP_CONFIRM_ELICITATION, MCP_CONFIRM_TTL_SECONDS, and MCP_CONFIRM_SECRET.

Tools and capabilities

  • Resolve FreshBooks identity and verify OAuth reachability.
  • Browse and fetch invoices, clients, estimates, payments, items, expenses, projects, and related records.
  • Create clients, invoices, expenses, projects, and time entries after confirmation.
  • Update invoices and estimates, record payments, accept estimates, and email estimates.
  • List time entries with logged and unbilled totals.
  • Access less common accounting resources through generic record tools.

Limitations and notes

The freshbooks-mcp MCP server cannot decline estimates because FreshBooks has no decline API operation. Estimate acceptance is an action rather than a writable status field and is idempotent; a previously accepted or invoiced estimate does not trigger another write.

Refresh tokens rotate on every refresh and the old token becomes invalid immediately. Losing the token store requires repeating authorization. After local reauthorization, restart local MCP processes that use the store. Changing the app credentials or redirect URI can also require a new sign-in.

When FreshBooks omits the account ID for a selected business, invoice and expense writes are refused until both business and account identifiers are supplied. Projects and time entries can still work in that situation.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Freshbooks MCP

freshbooks-mcp is an MCP server that connects AI clients to FreshBooks through OAuth2. Its main tools resolve account identity, check connectivity, browse invoices, clients, estimates, payments, expenses, projects, and time entries, and perform confirmation-gated writes such as creating invoices, recording payments, and logging expenses.

Install it globally with npm using the package name `@chrischall/freshbooks-mcp`. After installation, register a FreshBooks app, configure the OAuth client credentials, and complete the one-time browser authorization flow.

Authenticate with FreshBooks OAuth2, not an API key. Set the client ID and secret, call `freshbooks_auth_url`, authorize in a browser, then pass the returned URL to `freshbooks_auth_exchange`. Local sessions can save the refresh token to the configured token store.

Yes, invoice creation and other write operations are confirmation-gated. Depending on the client, the server either displays a confirmation prompt or returns a preview with a single-use token that must be supplied for the write.

FreshBooks does not expose a decline operation, so the decline tool always fails and provides alternatives. The server can instead update an estimate, accept it, or email it to the client.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewFreshbooks MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/freshbooks-mcp?style=directory)](https://allmcps.com/mcp/freshbooks-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/freshbooks-mcp"><img src="https://allmcps.com/api/badge/freshbooks-mcp?style=directory" alt="Freshbooks MCP on AllMCPs" /></a>