agentCLAWHUBUnverified

freshbooks-mcp

Query FreshBooks (invoices, clients, estimates, payments, expenses, projects, time tracking) from a shell with curl and a rotating OAuth token. Use when you want FreshBooks data without running the freshbooks-mcp server, in a script, or on a machine where the MCP isn't installed.

OpenClaw

Rank

62

Safety

84

Downloads

1.3k

Updated

Oct 10, 2026

Version

1.2.1

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.3K downloadsadoption · observed Oct 10, 2026
Latest release
1.2.1release · observed Oct 9, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:freshbooks-mcp
  1. Install using `clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:freshbooks-mcp` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/chrischall/freshbooks-mcp before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-freshbooks-mcp/snapshot"

Documentation

CLAWHUB

147,345 characters of source documentation, loaded on request.

Extracted files

4 files captured from the source.

SKILL.md

---
name: freshbooks-curl
description: Query FreshBooks (invoices, clients, estimates, payments, expenses, projects, time tracking) from a shell with curl and a rotating OAuth token. Use when you want FreshBooks data without running the freshbooks-mcp server, in a script, or on a machine where the MCP isn't installed.
---

# FreshBooks from the shell

FreshBooks has a real REST API reachable server-side — no browser bridge, no signed-in
tab, no `fpx`. Authentication is **OAuth2 only**: there is no API key and no personal
access token, so a one-time browser authorize flow is unavoidable.

## The two things that break naive clients

**1. Refresh tokens are single-use and rotate.** Every refresh returns a *new* refresh
token and kills the one you used. If the replacement is not written to disk before the
process ends, the account is locked out and the only recovery is re-running the browser
flow. Never hand-roll the refresh — use `fb_access_token` from
`references/fb-token.sh`, which persists the rotation before returning, and never point
two tools at the same state file.

**2. Three identifiers that are not interchangeable.** `accountId` (alphanumeric, e.g.
`xZNQ1X`), `businessId` (integer), `businessUuid`. Each URL family takes a different one
and answers a mismatch with a bare **404** that reads like a missing record. Always
resolve first with `fb_ids`.

| Family | Path | Identifier |
| --- | --- | --- |
| Accounting | `/accounting/account/{accountId}/…` | `accountId` |
| Payments | `/payments/account/{accountId}/…` | `accountId` |
| Accounting (business) | `/accounting/businesses/{businessUuid}/…` | `businessUuid` |
| Projects | `/projects/business/{businessId}/…` | `businessId` |
| Time tracking | `/timetracking/business/{businessId}/…` | `businessId` |

## One-time setup

Register an app at <https://my.freshbooks.com/#/developer>. The redirect URI must be
**HTTPS with no query string** — `https://localhost` works and never needs to
resolve. Put `FRESHBOOKS_CLIENT_ID` and `FRESHBOOKS_CLIENT_SECRET` somewhere loadable
(e.g. `~/.secrets`).

Then run the authorize flow once:

```sh
set -a; . ~/.secrets; set +a

# 1. Print the authorize URL, open it, click Allow.
node references/fb-bootstrap.mjs url "$FRESHBOOKS_CLIENT_ID"

# 2. The browser fails to load https://localhost?code=… — that is expected.
#    Copy the whole URL from the address bar and exchange it (the code is single-use
#    and expires within minutes).
node references/fb-bootstrap.mjs exchange "$FRESHBOOKS_CLIENT_ID" "$FRESHBOOKS_CLIENT_SECRET" \
  https://localhost 'https://localhost?code=PASTE_HERE'
```

Save the printed `refresh_token` as `FRESHBOOKS_REFRESH_TOKEN`. It seeds the state file
on first use; after that the state file is the source of truth and the env value is
ignored until you re-bootstrap.

## Core call pattern

```sh
set -a; . ~/.secrets; set +a
. references/fb-token.sh

fb_ids                                    # resolve accountId / businessId / businessUuid
ACCT=$(f

_meta.json

{
  "ownerId": "kn700jq4sjtf2anb0rk3ft4p7n856872",
  "slug": "freshbooks-mcp",
  "version": "1.2.1",
  "publishedAt": 1791588317058
}

references/recipes.md

# FreshBooks curl recipes

All examples assume:

```sh
set -a; . ~/.secrets; set +a
. references/fb-token.sh
ACCT=$(fb_account_id)
BIZ=$(fb_ids | jq -r .businessId)
```

Paths marked **(unverified)** are transcribed from the official
`freshbooks-python-sdk` source but have not been exercised against a live account.

## Identity

```sh
fb_curl /auth/api/v1/users/me | jq '.response | {identity_id, email}'
fb_ids   # accountId / businessId / businessUuid — run before anything else
```

## Invoices

```sh
# List (newest first via FreshBooks' own sort param)
fb_curl "/accounting/account/$ACCT/invoices/invoices?per_page=25&page=1" \
  | jq '.response.result | {page, pages, total,
        invoices: [.invoices[] | {id, invoice_number, organization, create_date,
                                  amount: .amount.amount, outstanding: .outstanding.amount, status}]}'

# One invoice, with line items expanded
fb_curl "/accounting/account/$ACCT/invoices/invoices/INVOICE_ID?include[]=lines" \
  | jq '.response.result.invoice'

# Outstanding only — v3_status is the useful status field
fb_curl "/accounting/account/$ACCT/invoices/invoices?search[v3_status]=overdue" \
  | jq '[.response.result.invoices[] | {id, invoice_number, outstanding: .outstanding.amount}]'

# Total outstanding across a page
fb_curl "/accounting/account/$ACCT/invoices/invoices?per_page=100" \
  | jq '[.response.result.invoices[].outstanding.amount | tonumber] | add'
```

Create **(unverified)** — money amounts are strings:

```sh
fb_curl "/accounting/account/$ACCT/invoices/invoices" -X POST \
  -H 'Content-Type: application/json' -d '{
  "invoice": {
    "customerid": 123,
    "create_date": "2026-08-12",
    "lines": [
      { "name": "Consulting", "description": "August retainer",
        "qty": 1, "unit_cost": { "amount": "1500.00", "code": "USD" } }
    ]
  }
}' | jq '.response.result.invoice | {id, invoice_number, amount}'
```

## Clients

```sh
fb_curl "/accounting/account/$ACCT/users/clients?per_page=100" \
  | jq '[.response.result.clients[] | {id: .userid, organization, fname, lname, email}]'

# Find a client by name
fb_curl "/accounting/account/$ACCT/users/clients?search[organization_like]=acme" \
  | jq '.response.result.clients'
```

Create **(unverified)**:

```sh
fb_curl "/accounting/account/$ACCT/users/clients" -X POST \
  -H 'Content-Type: application/json' \
  -d '{"client":{"email":"[email protected]","organization":"Example Co","fname":"Pat","lname":"Doe"}}' \
  | jq '.response.result.client | {userid, organization}'
```

## Payments

```sh
fb_curl "/accounting/account/$ACCT/payments/payments?per_page=50" \
  | jq '[.response.result.payments[] | {id, invoiceid, date, amount: .amount.amount, type}]'
```

Record a payment **(unverified)**:

```sh
fb_curl "/accounting/account/$ACCT/payments/payments" -X POST \
  -H 'Content-Type: application/json' \
  -d '{"payment":{"invoiceid":456,"amount":{"amount":"1500.00","code":"USD"},"date":"2026-08-12","type":"Check"}}'
```

## Estimates — 

skill-card.md

## Description:

Helps agents access FreshBooks accounting, project, and time-tracking data from a shell using OAuth-authenticated requests.

This skill is ready for commercial/non-commercial use.

## Publisher:

[chrischall](https://clawhub.ai/user/chrischall)

### License/Terms of Use:

MIT-0

## Use Case:

Developers and finance teams use this skill to query FreshBooks records from a shell without running an MCP server, and to prepare accounting updates when authorized.

### Deployment Geography for Use:

Global

## Known Risks and Mitigations:

Risk: Commands can create or change live accounting records and send estimates to customers.

Mitigation: Test with a FreshBooks test account first; review and explicitly authorize every POST or PUT command before execution.

Risk: OAuth tokens stored on disk or exposed in shell logs could allow unauthorized account access.

Mitigation: Keep the token state file private and avoid shell tracing or logging around token commands.

## Reference(s):

- [FreshBooks curl recipes](artifact/references/recipes.md)
- [FreshBooks developer portal](https://my.freshbooks.com/#/developer)
- [ClawHub skill release](https://clawhub.ai/chrischall/skills/freshbooks-mcp)

## Skill Output:

**Output Type(s):** [Shell commands, Guidance]

**Output Format:** [Markdown with shell examples]

**Output Parameters:** [1D]

**Other Properties Related to Output:** [Examples can include live FreshBooks write requests.]

## Skill Version(s):

1.2.1 (source: ClawHub release metadata)

## Ethical Considerations:

Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
Github ReposUpdated 1d agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/chrischall/skills/freshbooks-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/skills/freshbooks-mcp",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T16:23:36.063Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-freshbooks-mcp/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-freshbooks-mcp/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T16:23:36.063Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.3K downloads",
      "href": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T16:23:36.063Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "1.2.1",
      "href": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-09T23:25:17.058Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-freshbooks-mcp/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-freshbooks-mcp/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 1.2.1",
      "description": "freshbooks-mcp 1.2.1 - Removed skill-card.md, streamlining documentation. - Updated references/fb-token.sh. - No functional or user-facing changes; minor maintenance release.",
      "href": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/freshbooks-mcp",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-09T23:25:17.058Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to freshbooks-mcp and adjacent AI workflows.