UK bookkeepers: chase clients for Making Tax Digital quarterly records, upload links, reminders.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Adds Clients (people the practice does MTD quarterly updates for) from a pasted list; matches existing Clients by email, else exact name. confirm:false (default) shows what would be added, skipped as duplicates, or rejected, and the plan-limit effect; confirm:true saves. Max 500. Use this when: setting up or adding MTD clients from a spreadsheet or accounting-software export, or a typed list. Not for: changing one Client (update_client).
false (default) = dry run: shows what would happen, changes nothing. true = do it.
Optional; reuse when retrying so the change happens once.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mtd-chase https://mtd-chase.smallwright.com/mcp
Adds Clients (people the practice does MTD quarterly updates for) from a pasted list; matches existing Clients by email, else exact name. confirm:false (default) shows what would be added, skipped as duplicates, or rejected, and the plan-limit effect; confirm:true saves. Max 500. Use this when: setting up or adding MTD clients from a spreadsheet or accounting-software export, or a typed list. Not for: changing one Client (update_client).
| Argument | Type | Description |
|---|---|---|
| clients* | array | |
| confirm | boolean | false (default) = dry run: shows what would happen, changes nothing. true = do it. |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"clients"
],
"properties": {
"clients": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"ref": {
"type": "string",
"description": "your own client reference"
},
"name": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"type": "string"
},
"mobile": {
"type": "string"
},
"period_type": {
"enum": [
"standard",
"calendar"
],
"type": "string",
"description": "standard = periods end on the 5th; calendar = month-end"
}
}
},
"maxItems": 500
},
"confirm": {
"type": "boolean",
"default": false,
"description": "false (default) = dry run: shows what would happen, changes nothing. true = do it."
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Archives a Client who has left: their open Chases become skipped and their links stop working; they stop counting towards the plan limit. confirm:false (default) shows what would change. unarchive:true brings them back. Use this when: a Client leaves the practice or comes back.
| Argument | Type | Description |
|---|---|---|
| client* | string | Client name, email or your own reference |
| confirm | boolean | false (default) = dry run: shows what would happen, changes nothing. true = do it. |
| unarchive | boolean | |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client"
],
"properties": {
"client": {
"type": "string",
"description": "Client name, email or your own reference"
},
"confirm": {
"type": "boolean",
"default": false,
"description": "false (default) = dry run: shows what would happen, changes nothing. true = do it."
},
"unarchive": {
"type": "boolean",
"default": false
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Exports everything the practice holds in MTD Chase (Clients, Chases with history, Nudges sent, Records list, requests) as one JSON file; returns a download link for the signed-in practitioner. Use this when: they want a copy of their data or are leaving.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Returns each Client's personal records link for a Quarter and a ready-to-paste message for a messaging app or text. Use this when: the practitioner wants to send a link themselves (no email on file, or they prefer a messaging app or text).
| Argument | Type | Description |
|---|---|---|
| clients | array | |
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"clients": {
"type": "array",
"items": {
"type": "string"
}
},
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
}
}
}Returns a Client's Chases across Quarters — when they finished and how many days early or late against the date they were asked to send by (and whether before or after the HMRC deadline) — with a one-line summary. Without a client, returns every active Client ranked by how late they usually are. Use this when: asked whether a Client is usually late, how they did last time, or who's always late. Not for: who hasn't sent records this Quarter (whos_outstanding).
| Argument | Type | Description |
|---|---|---|
| client | string | Client name, email or your own reference |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"client": {
"type": "string",
"description": "Client name, email or your own reference"
}
}
}Returns the four MTD for Income Tax quarterly update periods for a tax year (standard and calendar period ends), each deadline, the final declaration date, and days until the next deadline. Works without signing in. Use this when: someone asks when the next quarterly update is due or what a Quarter covers. Not for: whether a particular Client has sent records (whos_outstanding).
| Argument | Type | Description |
|---|---|---|
| tax_year | string | e.g. "2026-27". Default: the current tax year. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tax_year": {
"type": "string",
"description": "e.g. \"2026-27\". Default: the current tax year."
}
}
}Returns the practice's setup and current position: plan and active Clients vs limit, Clients, open Chases per Quarter, settings still unset, and the next few things the practitioner can say. Use this when: the practitioner asks where they're up to or what to do next.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Lists Clients with contact details, period type, tags and the status of their Chase for the current Quarter. Use this when: looking up who the practice has or finding a Client's details.
| Argument | Type | Description |
|---|---|---|
| tag | string | |
| text | string | |
| period_type | string | |
| include_archived | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tag": {
"type": "string"
},
"text": {
"type": "string"
},
"period_type": {
"enum": [
"standard",
"calendar"
],
"type": "string"
},
"include_archived": {
"type": "boolean"
}
}
}Lists the practice's feature requests with status (open, planned, live, declined), how many times each was asked for, the workaround meanwhile, and for declined ones the reason. Use this when: asked what happened to something they asked for. Not for: asking for something new (request_feature) or what's recently live for everyone (whats_new).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Lists the files (name, size, received) a Client sent through their link for a Quarter — or for every Client in a Quarter — with download links valid 24 hours for the signed-in practitioner, and the Client's note marked as written by the Client. Use this when: asked what a Client sent or to download it.
| Argument | Type | Description |
|---|---|---|
| client | string | Client name, email or your own reference |
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"client": {
"type": "string",
"description": "Client name, email or your own reference"
},
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
}
}
}Sets one Client's Chase for a Quarter to ready, partial, nothing_to_report, skipped or back to waiting, with an optional note; Nudges stop for ready/nothing_to_report/skipped and resume for waiting/partial. The change is recorded in the Client's history. Use this when: records arrived another way (office, post, email) or a Client should be skipped this Quarter.
| Argument | Type | Description |
|---|---|---|
| note | string | |
| client* | string | Client name, email or your own reference |
| status* | string | |
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
| recount | boolean | |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client",
"status"
],
"properties": {
"note": {
"type": "string",
"maxLength": 300
},
"client": {
"type": "string",
"description": "Client name, email or your own reference"
},
"status": {
"enum": [
"waiting",
"partial",
"ready",
"nothing_to_report",
"skipped"
],
"type": "string"
},
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
},
"recount": {
"type": "boolean"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Stops all Nudges to one Client until a date (YYYY-MM-DD) or until resumed; resume:true restarts them. The result warns if the pause runs past a deadline. Use this when: a Client is ill, away or has asked for no reminders for now. Not for: a Client who has left (archive_client) or has sent their records (mark_chase).
| Argument | Type | Description |
|---|---|---|
| until | string | YYYY-MM-DD |
| client* | string | Client name, email or your own reference |
| resume | boolean | |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client"
],
"properties": {
"until": {
"type": "string",
"description": "YYYY-MM-DD"
},
"client": {
"type": "string",
"description": "Client name, email or your own reference"
},
"resume": {
"type": "boolean",
"default": false
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Files a request with MTD Chase when the user asks for something none of the other tools can do, or adds a vote to a matching open request; returns its ID, status and any workaround with existing tools. No date is promised. Use this when: the practitioner wants a capability MTD Chase doesn't have. Not for: reporting a single Client's problem.
| Argument | Type | Description |
|---|---|---|
| urgency* | string | blocking = they can't do the job today; nice_to_have = a workaround exists |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
| what_the_user_wanted* | string | their own words |
| closest_existing_tool | string | |
| what_they_were_trying_to_achieve* | string | the job behind it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"what_the_user_wanted",
"what_they_were_trying_to_achieve",
"urgency"
],
"properties": {
"urgency": {
"enum": [
"blocking",
"nice_to_have"
],
"type": "string",
"description": "blocking = they can't do the job today; nice_to_have = a workaround exists"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
},
"what_the_user_wanted": {
"type": "string",
"description": "their own words"
},
"closest_existing_tool": {
"type": "string"
},
"what_they_were_trying_to_achieve": {
"type": "string",
"description": "the job behind it"
}
}
}Sends a Nudge email now to Clients who haven't finished sending records for a Quarter (waiting or partial), at most one per Client per day. confirm:false (default) lists who would get one and who is excluded (no email, nudged today, paused); confirm:true sends. Use this when: the practitioner wants an extra reminder outside the plan.
| Argument | Type | Description |
|---|---|---|
| clients | array | |
| confirm | boolean | false (default) = dry run: shows what would happen, changes nothing. true = do it. |
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
| only_status | string | |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"clients": {
"type": "array",
"items": {
"type": "string"
}
},
"confirm": {
"type": "boolean",
"default": false,
"description": "false (default) = dry run: shows what would happen, changes nothing. true = do it."
},
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
},
"only_status": {
"enum": [
"waiting",
"partial"
],
"type": "string"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Sets when Nudges (reminder emails) go out for every Chase, including ones already running, counted from the date Clients are asked to send by (the ask-by date): days before it, on the day, and days after it, sent at 09:00 UK time on weekdays. A value left out keeps its current setting. Returns the plan in words and this Quarter's remaining nudge dates. Use this when: the practitioner wants reminders on different days. Not for: one extra reminder now (send_nudges_now), one Client (pause_nudges), or the ask-by date itself (update_practice).
| Argument | Type | Description |
|---|---|---|
| days_after | array | 1–60, up to 6 values: days after it |
| on_the_day | boolean | |
| days_before | array | 1–60, up to 6 values: days before the date clients are asked to send by |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days_after": {
"type": "array",
"items": {
"type": "number"
},
"description": "1–60, up to 6 values: days after it"
},
"on_the_day": {
"type": "boolean"
},
"days_before": {
"type": "array",
"items": {
"type": "number"
},
"description": "1–60, up to 6 values: days before the date clients are asked to send by"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Starts chasing Clients for their records for a Quarter: each gets a personal link (no login, works on a phone) and a first email; then Nudges go out on the practice's plan until they send their records. confirm:false (default) shows who would be chased, who has no email, the checklist and the dates (the date Clients are asked to send by, and the HMRC deadline); confirm:true starts it. Safe to repeat: Clients already being chased are left alone. Use this when: a Quarter needs records collected, for everyone or some Clients. Not for: reminding Clients already being chased (send_nudges_now).
| Argument | Type | Description |
|---|---|---|
| clients* | any | "all", or Client names/emails/tags |
| confirm | boolean | false (default) = dry run: shows what would happen, changes nothing. true = do it. |
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
| checklist | array | what to send: 1–8 items |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"clients"
],
"properties": {
"clients": {
"anyOf": [
{
"type": "string",
"const": "all"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "\"all\", or Client names/emails/tags"
},
"confirm": {
"type": "boolean",
"default": false,
"description": "false (default) = dry run: shows what would happen, changes nothing. true = do it."
},
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
},
"checklist": {
"type": "array",
"items": {
"type": "string"
},
"description": "what to send: 1–8 items"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Changes one Client's name, email, mobile, period type (standard/calendar), tags or reference. Returns before → after. Use this when: a Client's details change. Not for: stopping chasing someone (archive_client) or pausing nudges (pause_nudges).
| Argument | Type | Description |
|---|---|---|
| ref | string | |
| name | string | |
| tags | array | |
| string | ||
| client* | string | Client name, email or your own reference |
| mobile | string | |
| period_type | string | |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client"
],
"properties": {
"ref": {
"type": "string"
},
"name": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"type": "string"
},
"client": {
"type": "string",
"description": "Client name, email or your own reference"
},
"mobile": {
"type": "string"
},
"period_type": {
"enum": [
"standard",
"calendar"
],
"type": "string"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
}
}
}Changes what Clients see and how MTD Chase behaves for this practice: name shown to Clients, reply-to email, sign-off, phone shown on the Client's page, how many days before the HMRC deadline Clients are asked to send by (0–30, default 10; applies to Chases started afterwards), how many days after a deadline files are kept (30–365), daily summary email on/off, and the default checklist new Chases ask Clients for (1–8 items; running Chases keep theirs). Returns before → after. Use this when: the practitioner changes their details, the date clients are asked to send by, their default checklist, or retention.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| phone | string | |
| sign_off | string | |
| ask_by_days | number | 0–30: days before the HMRC deadline that clients are asked to send by |
| daily_summary | boolean | |
| reply_to_email | string | |
| retention_days | number | 30–365: days after the HMRC deadline that files are kept |
| idempotency_key | string | Optional; reuse when retrying so the change happens once. |
| default_checklist | array | 1–8 items, each up to 120 characters |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string"
},
"phone": {
"type": "string"
},
"sign_off": {
"type": "string"
},
"ask_by_days": {
"type": "number",
"description": "0–30: days before the HMRC deadline that clients are asked to send by"
},
"daily_summary": {
"type": "boolean"
},
"reply_to_email": {
"type": "string"
},
"retention_days": {
"type": "number",
"description": "30–365: days after the HMRC deadline that files are kept"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"description": "Optional; reuse when retrying so the change happens once."
},
"default_checklist": {
"type": "array",
"items": {
"type": "string"
},
"description": "1–8 items, each up to 120 characters"
}
}
}Lists changes that went live recently in MTD Chase, and which of this practice's requests are now live, with the date each went live and what to say to try it. Use this when: the practitioner asks what's new, or whether something they asked for is live yet.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Returns the Clients who haven't finished sending records for a Quarter (waiting or partial), with days to/after the date they were asked to send by, last Nudge, whether they opened their link, and counts per status. Use this when: asked who's still outstanding, who's sent what, or how the Quarter is going.
| Argument | Type | Description |
|---|---|---|
| quarter | string | Quarter like "2026-27 Q3". Default: the Quarter whose HMRC deadline is next. |
| late_last_quarter | boolean | only those who were late last Quarter |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"quarter": {
"type": "string",
"description": "Quarter like \"2026-27 Q3\". Default: the Quarter whose HMRC deadline is next."
},
"late_last_quarter": {
"type": "boolean",
"description": "only those who were late last Quarter"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 4, 2026.