Skip to main content
Glama

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

generate_receipt

Renders the receipt PNG and returns it inline (image) plus verdict/headline (text + structured output).

readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false

describe_ship_receipt

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.mjs

Claude Desktop

Edit the desktop config:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.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-mcp

Stateless, no auth (public, read-only tool, no user data).

Environment variables (all optional)

Var

Default

Purpose

SHIP_RECEIPT_OUTPUT_DIR

unset

Also save each PNG to this folder (stdio use)

SHIP_RECEIPT_URL

https://ship-receipt.kevinnsue507.workers.dev

Link to the web tool shown in the reply

SHIP_RECEIPT_SITE_LABEL

Ship Receipt

Watermark text printed on the receipt

PORT

8787

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/list

Privacy

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 tools
describe_ship_receiptAbout Ship ReceiptA
Read-onlyIdempotent

Explain what Ship Receipt is, which fields a receipt takes, the paper styles, and the privacy model.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 receiptA
Read-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.

NameRequiredDescriptionDefault
costNoTotal cost
daysYesDays since launch
langNoReceipt languageen
noteNoOptional one-line note printed on the receipt
themeNoPaper stylethermal
visitsNoTotal visits
exampleNoMark as fictional example data
projectYesProject / product name (max 40 chars)
revenueNoTotal revenue
signupsNoTotal signups
currencyNoCurrency symbol$

Output Schema

NameRequiredDescription
fileNo
bytesYes
widthYes
heightYes
verdictYes
web_urlYes
headlineYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 2 tool updates
    • First observeddescribe_ship_receipt
    • First observedgenerate_receipt

TDQS

A4/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Instant Backend for SMBs — AI-callable MCP tools for generating business pages, Stripe payments, notifications, and invoice processing. No signup, no dashboard, just results.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Records 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.
    11
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides 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.
    4
    58 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to create cryptographically verifiable receipts of their delegated work, with capabilities for multi-party approval and offline verification.
    11
    94 npm
    Apache 2.0