{
  "slug": "io-github-chrischall-freshbooks-mcp",
  "name": "io.github.chrischall/freshbooks-mcp",
  "title": "freshbooks-mcp",
  "description": "FreshBooks invoicing for Claude — invoices, clients, estimates, and payments",
  "version": "1.2.2",
  "publishedAt": "2026-10-16T10:09:57.624981Z",
  "updatedAt": "2026-10-16T10:09:57.624981Z",
  "repoUrl": "https://github.com/chrischall/freshbooks-mcp",
  "websiteUrl": null,
  "namespace": {
    "type": "github",
    "owner": "chrischall"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@chrischall/freshbooks-mcp",
      "version": "1.2.2",
      "transport": "stdio",
      "runtimeHint": null
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "FRESHBOOKS_CLIENT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "OAuth client ID from my.freshbooks.com/#/developer"
    },
    {
      "name": "FRESHBOOKS_CLIENT_SECRET",
      "isSecret": true,
      "isRequired": false,
      "description": "OAuth client secret"
    },
    {
      "name": "FRESHBOOKS_REFRESH_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Optional for local sign-in, which saves tokens privately. Required for hosted or legacy environment-token setup."
    },
    {
      "name": "FRESHBOOKS_REDIRECT_URI",
      "isSecret": false,
      "isRequired": false,
      "description": "Registered redirect URI; required on refresh calls too (default https://localhost)"
    },
    {
      "name": "FRESHBOOKS_TOKEN_STORE",
      "isSecret": false,
      "isRequired": false,
      "description": "Path for the rotating-refresh-token store (default ~/.freshbooks-mcp/session.json)"
    },
    {
      "name": "FRESHBOOKS_BUSINESS_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "The integer businessId to work in when the authenticated identity belongs to several businesses. Without it, reads use the first business FreshBooks lists and writes are refused rather than landing in the wrong books."
    },
    {
      "name": "FRESHBOOKS_ACCOUNT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Overrides the account id normally resolved from /auth/api/v1/users/me. Set it explicitly when the authenticated identity belongs to no business membership and resolution fails, or, together with FRESHBOOKS_BUSINESS_ID, when FreshBooks reports no account_id for the chosen business (accounting writes are refused until the pairing is confirmed this way)."
    },
    {
      "name": "FRESHBOOKS_REQUEST_TIMEOUT_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Per-request deadline for API calls, in milliseconds (default 30000)"
    }
  ],
  "category": "finance",
  "subcategory": "payments",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/chrischall/freshbooks-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "info",
      "detail": "Asks for 2 secrets: FRESHBOOKS_CLIENT_SECRET, FRESHBOOKS_REFRESH_TOKEN"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account chrischall"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "@chrischall/freshbooks-mcp@1.2.2 runs nothing at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 28 files in @chrischall/freshbooks-mcp@1.2.2: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 28 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"freshbooks-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@chrischall/freshbooks-mcp@1.2.2\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 0,
  "archived": false,
  "pushedAt": "2026-10-28T12:56:22Z",
  "health": {
    "score": 69,
    "parts": {
      "popularity": 0.22887158433126978,
      "activity": 1,
      "issues": 1,
      "security": 1
    },
    "fail": 0,
    "warn": 0,
    "raw": {
      "stars": 0,
      "forks": 1,
      "downloads": 266,
      "hn": null,
      "issuesOpen": 0,
      "issuesClosed": 18,
      "prsMerged": 116,
      "commits90": 117,
      "release": "2026-10-16T10:07:33Z",
      "pushed": "2026-10-28T12:56:22Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:35:52.424Z"
  }
}
