MCP.Market

Surfing Dog Inbox MCP server

online · 100% uptime
by surfingdog.ai·ai.surfingdog/inbox·v0.2.0

Message, ask for a quote or book a call with Surfing Dog, through its open-source inbox.

B77/100grade B
What users say
No reviews yet
Be the first
Safety scan
B77/100

full report

Adoption
Growing

0 stars

Reviews

Write one

Nobody has reviewed Surfing Dog Inbox yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Surfing Dog Inbox tools (19, 4 write)

write = sends, deletes, buys or posts
  • accept_offerFree

    Accept another time the business proposed for a booking, its quote, its changes to an order, or a change it asks for to a confirmed booking or an accepted order (offer.kind change: the promise moves). This binds your person, so send terms_sha — offer.terms_sha from get_item_status — only after they said yes to offer.human, and offer_id (offer.id) so an answer to an offer since replaced does nothing. Without terms_sha nothing is booked: you get the terms to show them. An accepted quote becomes a confirmed booking or order (linked). A yes to a change that can no longer be made online goes to a person there instead (passed_on), and what was agreed stands.

  • acknowledge_receiptFree

    Counter-sign a receipt this item earned, so both sides hold it: a promise, a change both sides agreed to it (kind amended), how it ended, or a refund's. Read the item to find its receipts; then send a compact JWS signed with your own Ed25519 key — header {alg:'EdDSA', typ:'sdi-receipt-ack+jws', jwk:<your public jwk>}, payload {rcp:<receipt id>, sha:<base64url(SHA-256(receipt jws))>, iat:<unix seconds>}. The instance verifies it against the key you carry and keeps it. Acknowledging twice is harmless.

  • cancel_itemwrite actionFree

    Cancel an item you created. After the business's cancellation window, a confirmed booking is cancelled late where the business records late cancellations (it may count against the customer), and refused where it does not. A confirmed stay answers first with the fee under its policy and what is owed back (confirm): send its fee_sha once your person said yes.

  • check_availabilityFree

    Free start times for a service between two instants (at most 14 days). A time that has started, or that starts within the business's minimum notice, is not offered.

  • create_bookingwrite actionFree

    Request a service at a time. Check availability first. endTime and reservationFor.name may be left out: they follow from the service (its length, its name). A fixed-price service costs the business's price from list_services; a different totalPrice you send is only noted for the business. A priced booking binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes. Returns the item and, if you have no account, an access_token.

  • create_orderwrite actionFree

    Order products. Prices are in minor units. A line naming a product (productId or sku) costs the business's price from list_products, and the total follows; a different price you send is only noted for the business. A line naming no product waits for the business to price it. A priced order binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes.

  • decline_offerFree

    Say no to another time or to changes the business proposed (the booking request or the order is closed) or to its quote. To a change it asks for to a confirmed booking or an accepted order, no keeps what was agreed; on a change your person asked for (requested_change), it takes that back. Add reason (and reason_code) for anything your person wants the business to know.

  • get_business_profileFree

    Name, time zone, currency, languages and the item types this business accepts, and where it takes any other kind instead (doors_elsewhere: each with its URL, and the platform it is on when there is one).

  • get_item_statusFree

    The current state of an item you created, in the business's words: what it proposed and waits for your person to answer (offer, with its terms_sha), who it waits on, what they can do next, and the conversation so far (thread: the business's replies and your person's messages).

  • list_productsFree

    Orderable products with prices in minor units, each with its barcode (gtin, 14 digits) where it has one and whether it is in stock. ids: read the live price of products a network showed you, before your person agrees; gtin: the products with that barcode, in any of its lengths. The price here is the one that counts.

  • list_servicesFree

    Bookable services with duration and price. A price per person (price.per = person) is for each person in the booking: send partySize, and the total is the price times it.

  • make_offerFree

    Answer what the business proposed with only what your person would change: another start_time (a booking: one of the free times check_availability lists; a quote request: the time it is for), other quantities for the lines of changes it suggested to an order (by index in offer.terms.lines; 0 drops one), another delivery_when, or how many (quantity) for a quote request. It goes back to the business as their request. On a confirmed booking or an accepted order it asks for a change to what was agreed (lines by index in the order's orderedItem), which stands until the business says yes. A price of their own is their answer only where get_business_profile says price_negotiable: total_price for a time it proposed (start_time optional), unit_price on lines of changes to an order; it goes back to the business, which takes it or answers. Otherwise — a price where the business sets its prices, on a quote, on something it does not haggle, or asked too often — it goes to a person there as their message, as do a note alone and a suggestion after a few rounds (passed_on): never refused, and what the business proposed, or what was agreed, still stands.

  • provide_detailsFree

    Answer what the business asked about an item (get_item_status says it needs a detail). The item moves on; on any other item your details are kept as a message for the business.

  • request_quoteFree

    Ask for a price on something custom. Creates a quote_request item.

  • request_returnFree

    Once an order's goods reached your person: ask to send them back. reason faulty, not_as_described or wrong_item (the legal guarantee: it costs them nothing), or changed_mind (a withdrawal while the period runs, agreed at once; after it, a return the business answers under its own policy). lines: which, by index in orderedItem, and how many; all when left out. The return comes back as linked; get_item_status lists it under refunds.

  • send_messagewrite actionFree

    Start a conversation, or reply on an item you own.

  • suggest_timeFree

    Instead of the time the business proposed, ask for another: start_time must be one of the free times check_availability lists (the end follows the service's length). The business confirms it or proposes again. On a confirmed booking it asks the business to move it (the end keeps the booking's length), and the booking stays as agreed until the business says yes. After a few rounds, or past the changes a booking may have, a person there answers it instead (passed_on).

  • verify_customerFree

    When a result says identity.recognised is weak, the person gave the email of a customer the business knows. Call this with item_id and access_token to email them six digits; ask the person for the code and call it again with code. Then the business recognises them.

  • withdraw_from_contractFree

    Your person withdraws from their booking (one they paid for) or order, within the period the business states (withdrawal on get_item_status). Two steps: without confirm_withdrawal nothing is sent and you get the statement to show them (confirm.statement); send confirm_withdrawal: true on their yes. Before the goods went out the order ends and what was paid is refunded; once they reached your person, the goods come back (lines: only some of them) and are refunded. The business emails a copy. Never refused: past the period, or for something that cannot be returned, it goes to a person there instead (passed_on), or becomes a return under the business's own policy.

Public scan report

scanner v0.1.10 · 2026-11-03 · same rubric, same numbers if you re-run it

1 high
  • –Code scanremote-only server, no package to scann/a
  • Live reliabilityremote reachable in 2944ms17/20
  • Tool poisoning19 tool descriptions checked15/15
  • Auth qualityopen endpoint exposes 4 write-action tools with no auth3/15
  • Maintenancelast push 1 days ago15/15
  • Maintainer identityendpoint served from the registry-verified namespace domain8/10

Findings (1)

  • highWrite-action tools reachable without authenticationauth.open-write
Overall 77/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Surfing Dog Inbox compares

Against every graded Email MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
77/100
higher than 50% of 916 Email servers
Tools
19
the typical Email server has 7
Tools that change things
21%
typical: 25%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote Email server answers 100%
Response time
597 ms
faster than 22% of 609 Email servers

What its tools let an agent do: 14 read · 3 create · 1 delete · 1 send or post

Release history: 2 versions in the registry since 2026-09-23, latest 2026-10-31, typically one every 38 days.

Install Surfing Dog Inbox in Claude Code, Cursor or VS Code

claude mcp add --transport http inbox https://inbox.surfingdog.ai/mcp
Add to Cursor

What the publisher says

From the Surfing Dog Inbox repository's README, as published. We do not edit it. Read it on GitHub

Surfing Dog Inbox

An open-source, self-hostable typed inbox for businesses. It receives messages, quote requests, orders and bookings from people and from AI agents — through email, a web form, REST and MCP (and every agent protocol we can reasonably speak) — and turns them into structured items with a lifecycle that can be handled by rules, by the owner, or by the owner's own AI.

Status: 0.1, in production on our own instance. The core, the REST and MCP doors, email in, sessions, OAuth for the owner's AI, the owner app and its setup wizard, webhooks, feeds, signed receipts and network membership all work on both runtimes. An instance runs at https://inbox.surfingdog.ai and the network at https://network.surfingdog.ai. Read the decision records in docs/adr/ first.

  • apps/inbox — the product: a Hono server + React SPA that runs on Cloudflare Workers and on Node/Bun.
  • packages/core — domain model, state machines, rules, receipts (AGPL-3.0).
  • packages/platform — the five runtime interfaces (Db, Blob, Jobs, MailIn, MailOut) and their adapters.
  • packages/spec — manifest, receipt and review formats with test vectors (MIT).
  • packages/sdk — typed client for the public and owner APIs (MIT).
  • packages/ui — design tokens, glass utilities and the kit page.
  • docs/ — ADRs and plans.

Licence: AGPL-3.0 for the server and app; MIT for packages/spec, packages/sdk and the connector SDK.

Run it

pnpm install
pnpm dev            # Node, SQLite in ./data/inbox.db, http://localhost:8787
pnpm dev:workers    # the same app on workerd (D1, Queues, cron)
pnpm test           # every test on Node and on Workers

The Node build is one file: pnpm --filter @surfingdog/inbox build:server writes apps/inbox/dist/server.mjs. Run it with node server.mjs and these variables:

CLI: node server.mjs create-owner-key prints an owner API key, seed-demo adds a demo bike shop to an empty instance, seed-showcase the same shop with a week of items, network-ping reports to every network that is on now. pnpm --filter @surfingdog/inbox shots captures the owner app for the website.

Sign in at /login with an address from INBOXOWNEREMAIL (a link is emailed; in development the mail is printed to the console, so set INBOXOWNEREMAIL=you@example.com pnpm dev and copy the link) or with an owner key.

Email in

Every instance accepts raw MIME at POST /v1/email/inbound with the shared secret from Settings (email.inboundSecret) in X-Inbox-Email-Secret. Point a Mailgun route, a Postmark/SES inbound webhook or a forwarder at it. On Cloudflare, Email Routing delivers straight to the Worker's email() handler, no webhook needed. Messages are threaded by In-Reply-To/References, by a plus address (inbox+@…) or by a [SDI-] subject token, and deduplicated on Message-ID.

Join networks

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Surfing Dog Inbox: common questions

Is Surfing Dog Inbox MCP server safe?
Mostly: it is graded B (77/100). Read the Surfing Dog Inbox safety report
How do I install Surfing Dog Inbox?
It runs remotely at inbox.surfingdog.ai. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does Surfing Dog Inbox need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Surfing Dog Inbox maintained?
The last commit was in the last day (2026-11-02). The latest release is v0.2.0.
Is Surfing Dog Inbox up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
What can I use instead of Surfing Dog Inbox?
Servers from other publishers that do the same job: Inbox Zero MCP server, Atomic Mail MCP server and Email Inbox API + Sending by Sendmux MCP server.
How does Surfing Dog Inbox compare with other Email MCP servers?
safety score 77/100 (higher than 50% of 916 Email servers); tools 19 (the typical Email server has 7); tools that change things 21% (typical: 25%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Surfing Dog Inbox

Same job from other publishers: the closest match first, then the best rated.

  • Inbox Zero
    Search Gmail and Outlook, save drafts, manage email rules, and view email stats.
    A
  • Atomic Mail
    Programmable email inbox for AI agents — JMAP, PoW auth, stdio MCP server.
    A
  • Email Inbox API + Sending by Sendmux
    AI email inbox and sending tools with attachments, search, live events, and webhooks.
    A
  • three.ws Notifications
    Read the inbox, mark items read, manage delivery preferences, and register Web Push devices.
    B
  • Agenticmail
    Real email and SMS for AI agents — send mail, receive verification codes, drive a real inbox.
    B