SendLettersOnline UK MCP
Server Details
Let Claude or another MCP-compatible AI check your balance, look up orders, and send letters on your behalf
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool targets a distinct action, but create_letter_order (without confirmed) and preview_letter_price both return a price, creating minor functional overlap. Descriptions clarify the distinction, but an agent might briefly confuse which to call for a quote.
All tool names follow a consistent snake_case verb_noun pattern (create_letter_order, get_balance, get_order, list_orders, preview_letter_price). The convention is predictable throughout.
Five tools are well-scoped for a letter ordering service: price preview, order creation, balance check, and order retrieval. Each tool earns its place without redundancy or bloat.
The core workflow (preview, create, list, get, balance) is covered, but there is no tool to cancel, refund, or update an order. Since creation spends real money and cannot be undone, this is a notable gap for an ordering system.
Available Tools
5 toolscreate_letter_orderCreate and pay for a letter orderAInspect
Creates a letter order and immediately debits the customer's balance to pay for it - this spends real money and cannot be undone. Call it WITHOUT confirmed:true first: it will only return the price, without charging or creating anything. Only after the price has been shown to the human and they've agreed to it, call it again with confirmed: true and expectedTotalPence set to the exact totalPence you were quoted. If the recomputed price no longer matches expectedTotalPence, the order is rejected so you cannot accidentally confirm a stale price.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Number of content pages (excludes the address page). | |
| colour | No | Print in colour instead of black & white. | |
| content | No | Plain-text letter body. Required unless contentUploadPath is supplied. | |
| confirmed | No | Set to true only after the customer has explicitly agreed to the previewed price. | |
| senderName | No | ||
| doubleSided | No | Print double-sided (duplex). | |
| senderLine1 | No | ||
| serviceClass | Yes | Royal Mail service to send with. Domestic: SECOND_CLASS, FIRST_CLASS, SECOND_CLASS_SIGNED, SIGNED_FOR, SPECIAL_DELIVERY, TRACKED_48, TRACKED_24. International: INTERNATIONAL_STANDARD, INTERNATIONAL_TRACKED, INTERNATIONAL_TRACKED_SIGNED. | |
| recipientCity | Yes | ||
| recipientName | Yes | ||
| recipientLine1 | Yes | ||
| recipientLine2 | No | ||
| senderPostcode | No | ||
| recipientCountry | No | ISO 3166-1 alpha-2 country code, e.g. GB, US, FR. | GB |
| contentUploadPath | No | Path returned by the customer's own upload flow (POST /api/v1/uploads/request-url) for a pre-uploaded PDF/DOCX. The MCP server cannot upload files itself. | |
| recipientPostcode | Yes | ||
| expectedTotalPence | No | The totalPence you were quoted when confirmed is true. Required to actually place the order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so: it warns this spends real money, cannot be undone, that the preview call charges and creates nothing, and that a mismatched expectedTotalPence causes rejection. This is exactly the safety context an agent needs for an irreversible financial mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The irreversible-charge warning is front-loaded, followed by the two-step call sequence in logical order. Every sentence adds a distinct operational constraint with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-param irreversible mutation tool with no annotations and no output schema, the description supplies the critical missing context: the danger profile, the preview-then-confirm workflow, and the anti-stale-price guard. Nothing essential for correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 53% across 17 parameters, so the description must add value, and it does for the two highest-stakes params: confirmed (only after human agreement) and expectedTotalPence (set to the exact quoted total, required to place the order). It does not explain the recipient/sender/serviceClass fields, but the enum and per-field schema descriptions cover much of that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (creates a letter order) plus the consequential side effect (immediately debits the customer's balance). It also distinguishes itself from the sibling preview_letter_price by explaining that calling without confirmed:true acts as a price-only preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-call protocol: first without confirmed:true to fetch the price, then with confirmed:true and expectedTotalPence after the human agrees. It states the precondition (human agreement) and the rejection condition (stale price), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceGet account balanceAInspect
Returns the customer's current prepaid balance used to pay for letters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. The verb 'Returns' implies a read-only operation and the description states what value comes back, but it says nothing about authentication needs, account scoping, currency, or how a zero/missing balance is represented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the purpose and the meaning of the returned value are both stated in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no annotations, and no output schema, the description adequately explains what is retrieved. It could go slightly further by describing the shape of the returned balance (amount/currency) or scoping to the authenticated customer, but it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter surface for the description to clarify, and it correctly avoids inventing any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Returns) and a specific resource (customer's current prepaid balance), and adds the semantic context that it funds letters. It does not explicitly contrast with any sibling, but none of the siblings (create_letter_order, get_order, list_orders, preview_letter_price) overlap with balance lookup, so differentiation is largely unnecessary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent knows what the tool returns but not under what circumstances it should be chosen, though the narrow scope makes misuse unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderGet a letter orderBInspect
Fetches one of this customer's letter orders by ID, including its current status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses tenant scoping ('this customer's') and that status is part of the payload, but says nothing about authorization requirements, not-found/error behavior, or freshness of the status. Adequate but incomplete for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, scope, and return content all appear immediately. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no annotations, the description covers the basic contract but omits not-found behavior, permission requirements, and any indication of what else the order object contains. Minimum viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'id' has no format or example in the schema. The description only restates the parameter name with 'by ID', adding no format, source, or validity information, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetches) and resource (letter order) plus scope ('this customer's') and the key return field (current status). It does not explicitly differentiate itself from the sibling list_orders, which is the closest ambiguous alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies the usage context (single-record lookup when an ID is known) versus list_orders, but there is no explicit when-to-use or when-not-to-use guidance and no mention of prerequisites. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersList letter ordersCInspect
Lists this customer's letter orders, most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the sort order (most recent first), but says nothing about pagination behavior, result size limits, permissions, or what the returned records contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scoping and ordering facts come first. It is efficient, though its brevity partly reflects missing content rather than disciplined compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with two undocumented paging parameters, no annotations, and no output schema, the description should cover pagination and result shape. It leaves the agent without guidance on how many orders come back or how to page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions neither limit nor offset. The schema carries defaults and min/max bounds, but the meaning of these paging parameters and how to use them is documented nowhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (lists... letter orders) and adds useful scope ('this customer's') plus default ordering ('most recent first'). It is distinguishable from get_order (singular fetch) by implication, but never names the sibling or explicitly contrasts with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no mention of alternatives like get_order for a single order, and no note on when not to use it. Usage is only inferable from the verb 'Lists'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_letter_pricePreview letter priceAInspect
Calculates the exact price of a letter WITHOUT creating an order or charging anything. Always call this (or create_letter_order without confirming) before create_letter_order, and show the price to the user before sending money.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Number of content pages (excludes the address page). | |
| colour | No | Print in colour instead of black & white. | |
| content | No | Plain-text letter body. Required unless contentUploadPath is supplied. | |
| senderName | No | ||
| doubleSided | No | Print double-sided (duplex). | |
| senderLine1 | No | ||
| serviceClass | Yes | Royal Mail service to send with. Domestic: SECOND_CLASS, FIRST_CLASS, SECOND_CLASS_SIGNED, SIGNED_FOR, SPECIAL_DELIVERY, TRACKED_48, TRACKED_24. International: INTERNATIONAL_STANDARD, INTERNATIONAL_TRACKED, INTERNATIONAL_TRACKED_SIGNED. | |
| recipientCity | Yes | ||
| recipientName | Yes | ||
| recipientLine1 | Yes | ||
| recipientLine2 | No | ||
| senderPostcode | No | ||
| recipientCountry | No | ISO 3166-1 alpha-2 country code, e.g. GB, US, FR. | GB |
| contentUploadPath | No | Path returned by the customer's own upload flow (POST /api/v1/uploads/request-url) for a pre-uploaded PDF/DOCX. The MCP server cannot upload files itself. | |
| recipientPostcode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the critical trait: no order is created and nothing is charged. That is the highest-value behavioral fact for a pricing tool. It stops short of disclosing auth/permission needs, address-validation failure modes, or rate limits, so it is strong but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, and the most decision-relevant fact (no order, no charge) is front-loaded. The workflow instruction follows in a single tight sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with no annotations and no output schema, the description covers the safety profile and workflow but says nothing about the parameters or the shape of the returned price. It is adequate for choosing and sequencing the tool but thin on invocation detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 47% across 15 parameters, and the description adds no parameter meaning at all. It says nothing about serviceClass, the required recipient fields, content vs contentUploadPath, or the pages/colour/doubleSided pricing inputs, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Calculates the exact price of a letter') and immediately scopes it as a non-mutating preview, which cleanly separates it from create_letter_order. An agent can pick it out of the sibling list without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit imperative workflow: always call this (or create_letter_order without confirming) before create_letter_order, and show the price to the user before sending money. It names the alternative path and the ordering condition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
create_letter_order - First observed
get_balance - First observed
get_order - First observed
list_orders - First observed
preview_letter_price
Publisher details
- Operator
- Spark Labs FZ LLC
- Operator website
- https://sendlettersonline.co.uk
- Vendor relationship
- Not applicable
- Documentation
- https://sendlettersonline.co.uk/mcp
- Trust center
- Unknown
- Restrictions
- Credits availability
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1622 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs1114 npm40 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.