Publish to a link from any MCP client

sendhey exposes publishing as two MCP tools over one Streamable HTTP endpoint: publish_page to host an HTML page or file bundle, and create_link to wrap an existing URL in a gated, tracked redirect. Connect any MCP-capable client — Claude Code, Claude Desktop/web, Cowork, ChatGPT developer mode, Cursor, Codex, or Langdock — and both tools work identically everywhere.

Connecting

The MCP endpoint is https://www.sendhey.app/mcp (Streamable HTTP + OAuth 2.1). The official MCP Registry name is app.sendhey/sendhey. Clients that support OAuth discovery find everything they need from https://www.sendhey.app/.well-known/oauth-protected-resource and https://www.sendhey.app/.well-known/oauth-authorization-server; dynamic client registration is supported for clients that use it. For copy-paste, per-client setup steps (including headless machine credentials and static API keys), see /connect.

publish_page

Publish an HTML page or a file bundle and get back a share URL. Key arguments: html (a single-page shortcut) or files (a map of relative path to content, for a multi-file bundle — include an index.html root when using multiple files), base64 (set true when files values are base64-encoded bytes instead of UTF-8 text), include_qr, label, title/description for the social-preview card, and policy for the access gate and analytics mode. It defaults to open access with no gate.

publish_page
{
  "name": "publish_page",
  "arguments": {
    "html": "<html>...</html>",
    "policy": {
      "audience": {
        "kind": "password",
        "value": "acme-2026",
        "delivery": "prompt"
      }
    }
  }
}

create_link

Wrap an external URL in a gated, tracked redirect instead of hosting content directly — useful for pointing a client at an existing dashboard, doc, or deployed app under sendhey's access control and analytics. Required arguments are url and mode (currently only "redirect"); it accepts the same policy, include_qr, and label as publish_page.

create_link
{
  "name": "create_link",
  "arguments": {
    "url": "https://example.com/client-dashboard",
    "mode": "redirect"
  }
}

url vs manageUrl vs ownerViewUrl

url is the public, tracked share link — send this to recipients. publish_page also returns manageUrl, the owner-only editor for that page's content on the app origin, gated behind your signed-in session; never share it. create_link has no editable content of its own, so it never returns a manageUrl. When a link is gated (anything other than open access), both tools also return ownerViewUrl — a session-authed preview of the page that skips the recipient's OTP/email gate, for the owner's own use only; never share this one either.

Reading activity back

Once a link exists, a connected agent can call get_activity for the view/gate rollup, get_link_history for the append-only change log, or list_links to page through everything a workspace owns.

Retrying safely

Pass a stable client_request_id (8-128 URL-safe characters) to publish_page when retrying after an unknown outcome — for example a timeout where the client can't tell if the call succeeded. Reusing the same id for the same intended publish returns the original link instead of creating a duplicate. publish_page can also return warnings — for example a missing asset in a file bundle, or a file that won't render as expected — treat those as real signals to fix and republish, not as noise to ignore.

Frequently asked

Which clients does this actually work from?

Any MCP client that supports Streamable HTTP and OAuth: Claude Code, Claude Desktop/web, Cowork, ChatGPT developer mode, Cursor, Codex, and Langdock all connect to the same endpoint and see the same two tools.

Do I need an API key instead of OAuth?

Only for headless agents that can't complete a browser sign-in — servers, CI, or scripted automation. Create a static API key or OAuth machine credentials under Settings → Developer access and use either as a Bearer token against the same endpoint.

The human flow

This page is a reference for building against the MCP contract directly. For the guided, three-step publishing flow a person or a general-purpose assistant would follow instead, see the publishing guide — it explains the same decisions (who can open it, what you're sharing, what you need back) without the tool-argument detail.

Try it free

Free 14-day Pro trial starts when you publish your first link. No card.

Connect your AI · Create a workspace instead

See pricing for plan limits.

Written by Marcel Seibold, founder of sendhey.

About · Privacy · Legal notice · Report illegal content · Terms · DSA