{"name":"io.github.chrischall/freshbooks-mcp","slug":"chrischall-freshbooks-mcp","title":null,"description":"FreshBooks invoicing for Claude — invoices, clients, estimates, and payments","url":"https://mcp.market/server/chrischall-freshbooks-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":26,"stars":0,"forks":0,"downloads_week":163,"last_push_at":"2026-09-17T23:33:17.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/chrischall/freshbooks-mcp","website":null,"version":"0.7.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@chrischall/freshbooks-mcp","version":"0.7.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"OAuth client ID from my.freshbooks.com/#/developer","isRequired":true,"format":"string","name":"FRESHBOOKS_CLIENT_ID"},{"description":"OAuth client secret","isRequired":true,"format":"string","isSecret":true,"name":"FRESHBOOKS_CLIENT_SECRET"},{"description":"OAuth refresh token from the one-time bootstrap (rotates on every use)","isRequired":true,"format":"string","isSecret":true,"name":"FRESHBOOKS_REFRESH_TOKEN"},{"description":"Registered redirect URI; required on refresh calls too (default https://localhost/callback)","format":"string","name":"FRESHBOOKS_REDIRECT_URI"},{"description":"Path for the rotating-refresh-token store (default ~/.freshbooks-mcp/session.json)","format":"string","name":"FRESHBOOKS_TOKEN_STORE"}]}],"tools":[{"name":"freshbooks_accept_estimate","description":"Accept an estimate on behalf of the account, by sending FreshBooks' action_accept on","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_auth_exchange","description":"Exchange a FreshBooks authorization code for a refresh token. Accepts the whole redirect URL you landed on, or the bare code. The authorization code is SINGLE-USE — if this fails, get a new one from freshbooks_auth_url rather than retrying.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_auth_url","description":"Get the FreshBooks consent URL to authorise this connection. Open it, approve, and you'll land on the redirect URL — pass that whole URL (or just its ?code= value) to freshbooks_auth_exchange. Read-only; contacts nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_create_client","description":"Create a client (customer) in FreshBooks. Requires confirm: true to execute; without it","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_create_expense","description":"Record an expense. Requires confirm: true to execute; without it returns a dry-run","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_create_invoice","description":"Create an invoice for a client. Created invoices start as drafts. Requires confirm: true","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_create_project","description":"Create a project. Requires confirm: true to execute; without it returns a dry-run","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_create_time_entry","description":"Log a time entry. Duration is in SECONDS. Requires confirm: true to execute; without","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_decline_estimate","description":"NOT SUPPORTED by the FreshBooks API — this tool always fails, and never sends a request.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_get_expense","description":"Get a single expense by its numeric id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_get_identity","description":"Resolve the authenticated FreshBooks user and their identifiers: accountId (alphanumeric,","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_get_project","description":"Get a single project by its numeric id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_get_record","description":"Get a single record from any FreshBooks accounting resource by name and id. Ids are","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_expense_categories","description":"List expense categories, which supply the categoryid used when creating an expense.","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_expenses","description":"List expenses for the account, newest-first by default. Supports pagination and raw","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_projects","description":"List projects for the business. Uses businessId (not accountId) and works even when","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_records","description":"List any FreshBooks accounting resource by name — the generic reader covering the","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_services","description":"List services (the billable work types available to projects and time entries).","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_list_time_entries","description":"List tracked time entries for the business. The response envelope also carries","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_record_payment","description":"Record a payment against an invoice. Requires confirm: true to execute; without it returns","write_action":false,"price_micros":0,"input_schema":null},{"name":"freshbooks_send_estimate","description":"Email an estimate to the client, by sending FreshBooks' action_email on the estimate","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_update_estimate","description":"Update an existing estimate. Only the supplied fields are sent; anything omitted is left","write_action":true,"price_micros":0,"input_schema":null},{"name":"freshbooks_update_invoice","description":"Update an existing invoice. Only the supplied fields are sent. Requires confirm: true to","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-19T19:22:03.859Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:22:03.856Z","components":{"code":{"score":25,"max":25,"notes":["23 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@chrischall/freshbooks-mcp","version":"0.7.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-09-17T23:35:23.113Z","repositoryUrl":"git+https://github.com/chrischall/freshbooks-mcp.git","weeklyDownloads":163}],"repo":{"found":true,"owner":"chrischall","repo":"freshbooks-mcp","archived":false,"pushedAt":"2026-09-17T23:33:17Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10564245?v=4","ownerCreatedAt":"2015-01-16T16:58:09Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":163,"license":"MIT","lastPushAt":"2026-09-17T23:33:17.000Z","score":26}}}},"grade_history":[{"kind":"downgrade","fromGrade":"A","toGrade":"B","reason":"score 83","createdAt":"2026-09-19T00:28:53.644Z"}],"reviews":[]}