Ship Receipt
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Ship Receipt MCP
Ship Receipt MCP lets an AI assistant print a launch receipt (visits, signups, revenue, cost, and an honest verdict) as a 1200×675 PNG, right inside the chat. It runs the same renderer as the Ship Receipt website, on your machine.
No account. No API key. No network calls. Numbers are self-reported, rendered locally, and never stored or sent.
Works with any MCP client (Claude Desktop, Cursor, Claude Code, VS Code, and others).
Demo
Watch the demo: an assistant calls generate_receipt and the PNG comes back in the chat.
Related MCP server: AI Proof of Us MCP Server
Tools
Tool | What it does | Annotations |
| Renders the receipt PNG and returns it inline (image) plus verdict/headline (text + structured output). |
|
| Explains fields, paper styles, languages and privacy. | read-only |
generate_receipt inputs: project (≤40 chars), days (1–9999), visits, signups, revenue, cost, currency ($/€/£), note (≤120 chars, optional), theme (thermal/midnight/riso), lang (en/es), example (bool).
Verdicts: PROFITABLE · PRE-REVENUE · TUITION PAID · BREAK-EVEN · EXPERIMENT.
Install
Install from a clone of this repository. Node.js 18 or newer is required. Use the absolute path to src/server.mjs in the client config.
git clone https://github.com/kdnsue/ship-receipt-mcp.git
cd ship-receipt-mcp
npm install
node src/server.mjsClaude Desktop
Edit the desktop config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"ship-receipt": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/ship-receipt-mcp/src/server.mjs"]
}
}
}Replace the path with the clone on your machine, then restart Claude Desktop. generate_receipt and describe_ship_receipt show up as tools.
Cursor
For one project, add .cursor/mcp.json at the project root. For every project, use ~/.cursor/mcp.json.
{
"mcpServers": {
"ship-receipt": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/ship-receipt-mcp/src/server.mjs"]
}
}
}Reload MCP servers from Cursor Settings after saving the file.
Remote (Streamable HTTP)
PORT=8787 node src/server.mjs --http # POST http://host:8787/mcp , GET /health
docker build -t ship-receipt-mcp . && docker run -p 8787:8787 ship-receipt-mcpStateless, no auth (public, read-only tool, no user data).
Environment variables (all optional)
Var | Default | Purpose |
| unset | Also save each PNG to this folder (stdio use) |
|
| Link to the web tool shown in the reply |
|
| Watermark text printed on the receipt |
|
| HTTP mode port |
Test
npm test # real MCP client over stdio AND Streamable HTTP: list tools, 3 receipts, PNG validity, bad input
npx @modelcontextprotocol/inspector --cli node src/server.mjs --method tools/listPrivacy
See PRIVACY.md. Short version: the server does not log, store, or transmit the numbers you give it. Rendering stays on the machine that runs the server. A PNG is written to disk only if you set SHIP_RECEIPT_OUTPUT_DIR.
Support is through GitHub Issues.
License
MIT. Copyright (c) 2026 Kevin Daniel. See LICENSE.
Fonts (JetBrains Mono, Space Grotesk, Instrument Serif) are under the SIL Open Font License.
Available Tools
2 toolsdescribe_ship_receiptAbout Ship ReceiptARead-onlyIdempotent
Explain what Ship Receipt is, which fields a receipt takes, the paper styles, and the privacy model.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful scope detail by enumerating the content the response will contain (fields, paper styles, privacy model), but does not describe the response shape or whether the answer is static documentation versus a live data query.
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 sentence that front-loads the core purpose and then lists the covered topics. No filler, no restatement of the title beyond what is needed to convey scope.
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 zero-parameter, read-only reference tool with full annotation coverage, the description gives enough to know what knowledge it returns. The only remaining gap is that no output schema exists and the description doesn't indicate how the explanation is structured or whether it's static text.
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 no parameters, so there is nothing for the description to disambiguate; baseline for zero-param tools applies. The description correctly implies no input is needed to retrieve this reference material.
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 ('Explain') plus the exact subject matter: what Ship Receipt is, its fields, paper styles, and privacy model. It is clearly distinguishable from the sibling generate_receipt (this informs, that produces), though it doesn't explicitly name the sibling to reinforce the contrast.
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?
Usage is implied rather than stated: an agent can infer this is the reference lookup to call before or instead of generate_receipt, but there is no explicit 'use this when...' instruction or exclusion. Adequate for a zero-parameter informational tool, but the routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_receiptGenerate launch receiptARead-onlyIdempotent
Print a 1200x675 'launch receipt' PNG for a product launch (visits, signups, revenue, cost) with an honest verdict (PROFITABLE, PRE-REVENUE, TUITION PAID, BREAK-EVEN, EXPERIMENT). Returns the image inline so the user can save it or post it on X. Numbers are self-reported by the user and the receipt says so. Nothing is stored or sent anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| cost | No | Total cost | |
| days | Yes | Days since launch | |
| lang | No | Receipt language | en |
| note | No | Optional one-line note printed on the receipt | |
| theme | No | Paper style | thermal |
| visits | No | Total visits | |
| example | No | Mark as fictional example data | |
| project | Yes | Project / product name (max 40 chars) | |
| revenue | No | Total revenue | |
| signups | No | Total signups | |
| currency | No | Currency symbol | $ |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| bytes | Yes | |
| width | Yes | |
| height | Yes | |
| verdict | Yes | |
| web_url | Yes | |
| headline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description adds genuinely new behavior: the image is returned inline, the figures are user-supplied and the receipt labels them as such, and nothing is stored or transmitted. That privacy and data-provenance disclosure is exactly the kind of context annotations cannot convey; only the verdict-derivation rules are left implicit.
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?
Four compact sentences, front-loaded with the output format and pixel dimensions, then behavior, then the privacy caveat. Each sentence carries information; the only redundancy is restating the metric list already present in the schema.
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 an 11-parameter, closed-world render tool with an output schema and full annotation coverage, the description supplies the missing narrative: what gets rendered, the verdict taxonomy, and the no-storage guarantee. Minor styling parameters are left entirely to the schema, which is acceptable given full description coverage there.
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 100%, so every parameter is already documented, and the description only echoes the four headline metrics while explaining the verdict tiers they feed into. It adds a little semantic value about how inputs become output but nothing on theme, lang, currency, note, or example beyond the schema.
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?
The description states a concrete verb and artifact ('Print a 1200x675 launch receipt PNG') and even enumerates the metrics printed (visits, signups, revenue, cost) plus the verdict outcomes. It is unmistakable what the tool produces, but it never mentions the sibling describe_ship_receipt, so an agent gets no explicit differentiation between the two.
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?
Usage context is only implied by 'so the user can save it or post it on X', which suggests a user-facing artifact rather than a programmatic API call. There is no statement of when to prefer this over describe_ship_receipt, no prerequisites, and no exclusions.
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.
2 tool updates
- First observed
describe_ship_receipt - First observed
generate_receipt
This server cannot be deployed
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: generate_receipt produces an image, while describe_ship_receipt provides explanatory documentation. An agent can easily tell which to call based on whether the user wants output or information.
Both tools use consistent snake_case with a verb_noun structure (generate_receipt, describe_ship_receipt). The inclusion of the server name in describe_ship_receipt is a harmless, readable variation.
Only two tools exist, which is slightly thin but justified by the narrow, single-purpose scope of generating a launch receipt PNG. The describe tool complements the generator without adding unnecessary surface area.
The domain is fully covered: one tool generates the receipt and the other explains fields, styles, and privacy. Since nothing is stored, CRUD operations are not needed, and there are no obvious dead ends.
Maintenance
Related MCP Connectors
Issue signed receipts for AI agent actions; verify any receipt offline - free, no account.
Make PDF invoices from your AI chat: clients, numbering, VAT, overdue reports. All data is local.
Ship, discover and review vibe-coded projects on Shipyard, the invite-only feed for AI-built apps.
Capture and organize receipts from your AI chat: totals, categories, ledgers.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceInstant Backend for SMBs — AI-callable MCP tools for generating business pages, Stripe payments, notifications, and invoice processing. No signup, no dashboard, just results.-
- AlicenseAqualityBmaintenanceRecords privacy-preserving receipts for AI-assisted tasks and enables optional onchain reward claiming via AIPOU tokens. Integrates with MCP-compatible clients like Claude and Cursor.114MIT
- AlicenseAqualityCmaintenanceProvides tools to issue, verify, and export cryptographically signed receipts for AI agent actions, enabling tamper-proof audit trails for compliance with regulations like the EU AI Act.458 npm1MIT
- AlicenseAqualityCmaintenanceEnables AI agents to create cryptographically verifiable receipts of their delegated work, with capabilities for multi-party approval and offline verification.1194 npmApache 2.0