Remote MCP server for read-only FreeAgent analysis on Cloudflare Workers.
FreeAgent MCP exposes 51 tools with consistent naming (verb_noun pattern: get_*, list_*, switch_*) and basic descriptions. All tools have input schemas with type definitions. However, descriptions are often generic or minimal (many under 100 chars), parameter descriptions lack depth, and output schemas are not documented. Error handling guidance is absent. The server is read-only (50/51 tools), which simplifies safety but limits utility. Tool composition is sound, list/get pairs are well-structured with pagination support. No tool annotations (readOnlyHint, idempotentHint) despite being read-only.
Get the current authentication status of the session.
Balance sheet as at a date. All rows are fetched and concatenated.
Get a specific bank account by ID.
Get a specific bank transaction by ID.
Get a specific bill by ID.
Get a specific capital asset by ID.
Historic cash movement between two dates. It does NOT project: a range in the future returns a total of 0, which means 'not supported', not 'no cash expected'. Incoming and outgoing totals are both positive; balance is incoming minus outgoing.
Generic descriptions on 35+ tools lack LLM-optimized guidance. Many are under 60 chars (e.g., 'Get a specific X by ID') and do not explain when to use the tool or what it returns.
Output schemas are not documented. LLMs cannot infer what fields each tool returns, forcing them to guess at response structure and plan downstream calls blindly.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint) despite 50/51 tools being read-only. Annotations help LLMs reason about safety and retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Get a specific category by ID.
Get the company context for the current session.
Get a specific contact by ID.
Get a specific credit note by ID.
Get a specific estimate by ID.
Get a specific expense by ID.
Filing metadata for an accounting period (dates, filing status, filed reference). This FreeAgent resource carries NO financial figures — for prior-year numbers use get_profit_and_loss, get_balance_sheet, or get_trial_balance_summary with the period dates returned here.
Get a specific invoice by ID.
Get the timeline of events for a specific invoice.
Get the current user profile including principal ID, mode, and user profile information.
Get the practice context. Only available when FreeAgent is configured in practice mode.
Get a specific price list item by ID.
Profit and loss summary. WITH NO DATES IT RETURNS THE CURRENT ACCOUNTING YEAR TO DATE, not a full year — pass fromDate/toDate for a complete period. Ranges must be 12 months or less, or contained within one accounting year. Note the response carries several profit figures: use operating_profit or retained_profit for this period; retained_profit_carried_forward is a cumulative balance, not the period result.
Get a specific project by ID.
Get a specific recurring invoice by ID.
Get a specific task by ID.
Get a specific timeslip by ID.
Get a specific transaction by ID.
Get opening balances for the trial balance.
Full trial balance for the period. Every nominal code is fetched and concatenated, so the result is complete rather than a first page. With no dates it reports as at today. Each row carries both `display_nominal_code` (e.g. 750-1, what the FreeAgent UI shows) and `nominal_code` (e.g. 750-123456, whose suffix is the underlying resource id) — quote display_nominal_code to a human, and use nominal_code when cross-referencing another endpoint.
Get a specific user by ID.
Get a specific VAT return by period end date.
FreeAgent MCP is online in read-only mode.
List bank accounts with pagination support.
List bank transactions with pagination support.
List bills with pagination support.
List capital assets with pagination support.
List categories with pagination support.
List all clients in practice mode with the active subdomain.
List contacts with pagination support.
List credit notes with pagination support.
List estimates with pagination support.
List expenses with pagination support.
List all final accounts reports.
List invoices with pagination support.
List price list items with pagination support.
List projects with pagination support.
List recurring invoices with pagination support.
List tasks with pagination support.
List timeslips with pagination support.
List transactions with pagination support.
List users with pagination support.
List all VAT returns.
Switch the active client context to a different subdomain in practice mode.
Error handling guidance is absent. No recovery hints, retryability classification, or actionable error messages documented.
Pagination parameters (page, perPage) lack constraints. No documented min/max values, defaults, or guidance on when to use offset vs cursor-based pagination.