Koskamo

EatMePrint MCP

An MCP server for EatMePrint that allows AI agents to order custom-printed edible macarons. It supports tools to get pricing, preview a set of nine images, place an order with guest checkout, and check order status without requiring an account.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

EatMePrint MCP logo, by EatMePrintCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by EatMePrint
MCP endpoint (Streamable HTTP)
https://eatmeprint-mcp.eatmeprint.workers.dev/mcp
Vendor documentation

What you can do with it

  • Get pricing for a set of custom macarons
  • Preview a set of nine images for printing
  • Place an order for custom macarons
  • Check the status of an existing order

Source and maintenance

Community listingRegistry 1.10.0

Protocol and capabilities

Server
eatmeprint 1.10.1
MCP protocol
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

EatMePrint prints images in edible ink onto macarons and ships them across the US. Typical flow: get_pricing, then preview_set with nine image URLs, then place_order. place_order spends real money and ships to a real address — confirm the total, the address and the allergen warning with your human first. These are real macarons made to order and they contain almond, egg, milk. If you are ordering for someone else, confirm they can eat them before you place the order.

Tools

4 advertised

get_pricing — Get pricing, delivery and allergens
Advertised by the server during the last successful anonymous check.
Advertised read-only

Price, shipping cost, lead time and allergen information for an edible photo macaron set. Call this before ordering so you can tell the person what it costs and what is in it. Pass the delivery ZIP to get a firm shipping cost and total: it is the same live carrier rate place_order will book for that ZIP. Without a ZIP the reply is "$67 plus shipping".

get_pricing input schema
{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string",
      "description": "Five-digit US delivery ZIP, e.g. \"90028\". Optional; gives a firm shipping quote."
    },
    "state": {
      "type": "string",
      "description": "Two-letter US state code, e.g. \"CA\" or \"NY\". Optional; wording only."
    }
  },
  "additionalProperties": false
}
get_pricing annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
preview_set — Preview a 3x3 set from nine images
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Build a printable set from exactly nine public image URLs, in grid order (left to right, top to bottom). Returns thumbnail previews, the price, and a set_hash to pass to place_order. Images must be JPEG or PNG, up to 10 MB each, reachable over plain https with no redirect. Private or internal addresses are refused. Nothing is charged and no order is created.

preview_set input schema
{
  "type": "object",
  "required": [
    "images"
  ],
  "properties": {
    "images": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Public https URL to a JPEG or PNG."
      },
      "maxItems": 9,
      "minItems": 9,
      "description": "Exactly nine image URLs in grid order."
    }
  },
  "additionalProperties": false
}
preview_set annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
place_order — Place an order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Places a REAL order for physical macarons shipped to a real address, and returns a crypto deposit address to send funds to. Confirm the total, the delivery address and the allergen warning with the person you are acting for BEFORE calling this. Pass either `images` (nine URLs, simplest — the set is built for you) or the `set_hash` and `add_to_cart_fields` returned by a previous preview_set call. Returns an order id, a crypto deposit address and amount, and a status link that needs no account or password. The order only reaches the bakery after the payment confirms. A recipient phone number is REQUIRED - carriers need it to generate a label, so collect it before calling.

place_order input schema
{
  "type": "object",
  "required": [
    "email",
    "recipient"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Optional short message for the card in the box."
    },
    "email": {
      "type": "string",
      "description": "An address a human actually reads."
    },
    "images": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 9,
      "minItems": 9,
      "description": "Nine public https image URLs in grid order. Simplest route: the set is built and carted for you. Omit if passing set_hash + add_to_cart_fields instead."
    },
    "set_hash": {
      "type": "string",
      "description": "From preview_set. Requires add_to_cart_fields too."
    },
    "recipient": {
      "type": "object",
      "required": [
        "first_name",
        "street",
        "city",
        "state",
        "zip",
        "phone"
      ],
      "properties": {
        "zip": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "phone": {
          "type": "string",
          "description": "REQUIRED. Recipient phone number, any format. Carriers need it to generate a shipping label. Ask your human for it before calling this tool."
        },
        "state": {
          "type": "string",
          "description": "Two-letter US state code."
        },
        "street": {
          "type": "string",
          "description": "Full street address. Include any apartment, suite, floor or company line HERE - there is no second address line."
        },
        "last_name": {
          "type": "string",
          "description": "Optional."
        },
        "first_name": {
          "type": "string"
        }
      },
      "description": "Who receives the box, and where.",
      "additionalProperties": false
    },
    "shipping_id": {
      "type": "string",
      "description": "Optional: force a specific shipping-method instance id. Normally omit."
    },
    "pay_currency": {
      "type": "string",
      "description": "Crypto ticker to pay in, e.g. \"usdttrc20\". Optional; a default is chosen."
    },
    "max_total_usd": {
      "type": "number",
      "description": "Optional safety ceiling in USD. The shipping cost is only known once the order exists, so set this to the most your human agreed to pay. If the real total is higher, the order is still created but NO payment instruction is returned."
    },
    "reorder_nonce": {
      "type": "string",
      "description": "Set this ONLY to deliberately place a second, separate order with identical details (same set, same recipient). Any distinct value works. Without it, an identical repeat is treated as a retry and returns the original order."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional explicit key. If omitted, one is derived from the order details, so retrying the identical request is safe and will not create a duplicate."
    },
    "confirm_total_usd": {
      "type": "number",
      "description": "Confirm a total your human has approved. Use this to RESUME an order that already exists: after an over-ceiling result, or when a repeat call matched an existing order and the payment instruction was withheld. Set it to the exact total shown. This never creates a second order - it returns the existing one WITH its payment instruction. This is the correct way to proceed; do NOT use reorder_nonce for this."
    },
    "add_to_cart_fields": {
      "type": "object",
      "description": "The `add_to_cart.fields` object exactly as returned by preview_set. Required when using set_hash instead of images.",
      "additionalProperties": true
    }
  },
  "additionalProperties": false
}
place_order annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
check_order — Check order status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Look up the current state of an order using the id and code from the status link. Needs no account and no password. Use this to report progress back to the person who asked.

check_order input schema
{
  "type": "object",
  "required": [
    "order_id",
    "code"
  ],
  "properties": {
    "code": {
      "type": "string"
    },
    "order_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
check_order annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
603 ms
95th percentile latency
603 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 603 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http eatmeprint-mcp https://eatmeprint-mcp.eatmeprint.workers.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add eatmeprint-mcp --url https://eatmeprint-mcp.eatmeprint.workers.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable eatmeprint-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "eatmeprint-mcp": {
      "url": "https://eatmeprint-mcp.eatmeprint.workers.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "eatmeprint-mcp": {
      "type": "streamableHttp",
      "url": "https://eatmeprint-mcp.eatmeprint.workers.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start eatmeprint-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "eatmeprint-mcp": {
      "type": "http",
      "url": "https://eatmeprint-mcp.eatmeprint.workers.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http eatmeprint-mcp https://eatmeprint-mcp.eatmeprint.workers.dev/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "eatmeprint-mcp": {
      "url": "https://eatmeprint-mcp.eatmeprint.workers.dev/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "eatmeprint-mcp": {
      "serverUrl": "https://eatmeprint-mcp.eatmeprint.workers.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like EatMePrint MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.