freeagent-cloudflare-mcp

freeagent-cloudflare-mcp

Gives Claude access to a FreeAgent company, enabling read and write operations on contacts, projects, invoices, bills, and bank transactions with journaled undo support.

Category
Visit Server

README

FreeAgent → Claude Connector

A remote, serverless MCP connector that gives Claude access to a FreeAgent company — running entirely on a Cloudflare Worker, with nothing on your own machine. Built for the Williams of Hay rentals (properties are modelled as FreeAgent projects), but generic to any FreeAgent company.

Connect it once in claude.ai (web, desktop, phone) or Claude Code and it follows you everywhere: "which bank transactions are unexplained?", "list open invoices for 1 Lion Street", "explain that £120 payment as Repairs".

Design

Follows the Monzo → Claude connector pattern:

  • @cloudflare/workers-oauth-provider front door — the Worker is a full OAuth server that Claude speaks to; grants live in an OAUTH_KV namespace.
  • Upstream bridge/authorize redirects to FreeAgent's approval page, /callback exchanges the code (Basic-auth token endpoint) and completes the grant.
  • TokenStore Durable Object — the single authority for the FreeAgent token chain: all refreshes serialise through it, and a 6-hourly cron keeps the chain warm.
  • Owner lock — the first FreeAgent identity to authorize owns the deployment, permanently. Anyone else is rejected before a grant exists.
  • Secrets (FREEAGENT_CLIENT_ID/SECRET, COOKIE_ENCRYPTION_KEY) are Wrangler secrets — never in this repo.

Writes: journalled and undoable

Instead of a human-approval gate, safety comes from reversibility:

Guard How
Whitelist Only contacts, projects, invoices, bills, bank_transaction_explanations are writable
No delete tool Deletion only happens by undoing a journalled create
Before-images update_record snapshots the prior state into the journal first
Undo undo_change deletes a created record / restores an updated one
Audit trail list_changes shows every write this connector ever made
Drafts only Invoices are created as drafts — the connector cannot send/email anything
Confirm flag Every write tool requires confirm: true and instructs Claude to show the user first

Tools

Read: get_company, list_contacts, list_projects (= properties), list_invoices, list_bills, list_bank_accounts, list_bank_transactions, list_bank_transaction_explanations, list_categories, get_resource, connection_status.

Write: create_record, update_record, list_changes, undo_change.

Deploy

You need a (free) Cloudflare account and a FreeAgent dev app (dev.freeagent.com — note the OAuth identifier + secret).

npm install
./setup.sh     # creates the KV namespace, prompts for secrets, deploys

Then:

  1. At dev.freeagent.com, add the Worker's callback as a Redirect URI: https://<your-worker>.workers.dev/callback (keep http://localhost:3000/callback too if the local Python pipeline still uses it).
  2. claude.ai → Settings → Connectors → Add custom connectorhttps://<your-worker>.workers.dev/mcp — approve the FreeAgent login when bounced.
  3. Claude Code: claude mcp add --transport http freeagent https://<your-worker>.workers.dev/mcp

Sandbox first? Set FREEAGENT_API_BASE=https://api.sandbox.freeagent.com as a Wrangler var and authorize with a sandbox account.

Ops

# token freshness + journal size (COOKIE_ENCRYPTION_KEY as bearer)
curl -s -H "Authorization: Bearer $KEY" https://<worker>/admin/status
# force a keep-alive tick
curl -s -X POST -H "Authorization: Bearer $KEY" https://<worker>/admin/cron

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured