Back to docs
MCP server

Connect AI tools to your links

Sinkto.Link speaks the Model Context Protocol, so Claude Code, Claude.ai, Cursor, and any other MCP client can shorten URLs, manage your links, generate QR codes, and read click analytics on your behalf. Nothing to install — it's one hosted endpoint and an API key.

Endpoint

https://www.sinkto.link/api/mcp

What this is

MCP is the standard way an AI assistant talks to an outside service. Instead of you copying links between a chat window and your dashboard, the assistant calls Sinkto.Link directly — so "shorten these five URLs for the launch and tag them for Twitter" becomes one instruction rather than fifteen clicks.

The server is hosted by us at the endpoint above and speaks Streamable HTTP. There is no package to install and no version to keep up to date.

Get an API key

  1. Open Teams → API keys.
  2. Switch to the team the key should act on, using the team switcher in the sidebar. A key can only ever reach that one team.
  3. Choose permissions. Start with Read links and Read analytics; add Manage links only when you want the assistant to create or delete things.
  4. Choose an expiry, then create the key.
  5. Copy the key immediately. It is shown once and never again. If you lose it, revoke it and make a new one.

Keys look like sk_live_… and should be treated like a password: never commit one to a repository or paste it into a shared document.

Connect your client

Replace sk_live_... with your key in each snippet below.

Claude Code

claude mcp add --transport http sinkto https://www.sinkto.link/api/mcp \
  --header "Authorization: Bearer sk_live_..."

Cursor, VS Code, or any client using .mcp.json

{
  "mcpServers": {
    "sinkto": {
      "type": "http",
      "url": "https://www.sinkto.link/api/mcp",
      "headers": {
        "Authorization": "Bearer sk_live_..."
      }
    }
  }
}

Claude.ai

  1. Settings → Connectors → Add custom connector.
  2. Paste https://www.sinkto.link/api/mcp as the URL.
  3. Add a header: name Authorization, value Bearer sk_live_...

Verify the connection with curl

curl -X POST https://www.sinkto.link/api/mcp \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Always use the www host. sinkto.link permanently redirects to www.sinkto.link, and some clients drop the request body when they follow a redirect on POST.

Tools

Tools your key lacks the scope for are hidden entirely, so an assistant never offers something it will be refused for.

ToolScopeWhat it does
whoamianyWhich team, plan, scopes, and limits this key has. Call it first.
list_linkslinks:readList and search the team's links, with paging and sorting.
get_linklinks:readOne link's full detail, addressed by alias.
generate_qrlinks:readRender a QR code as PNG or SVG, from an alias or any URL.
create_linklinks:writeShorten a URL, optionally with a custom alias, expiry, or password.
bulk_create_linkslinks:writeShorten several URLs in one call; each row succeeds or fails on its own.
update_linklinks:writeChange destination, alias, title, expiry, password, or active state.
delete_linklinks:writePermanently delete a link. Requires an explicit confirm flag.
get_link_analyticsanalytics:readClicks and breakdowns by source, device, browser, OS, country, city, or UTM.
get_overview_statsanalytics:readHeadline team numbers and top links by traffic.
get_recent_clicksanalytics:readThe most recent individual clicks, with country, device, and browser.

Links are addressed by alias — the part after the domain — not by internal id, so you can say "update the launch-2026 link" and it works.

Resources & prompts

Three resources let a client pull context without spending a tool call:

  • sinkto://team — plan, members, custom domains, link and click totals.
  • sinkto://links — the 50 most recent links with click counts.
  • sinkto://links/{alias} — one link's detail plus a 7-day click summary.

And three prompts for the jobs people actually run:

  • campaign_links — a UTM-tagged link set across channels, with a consistent alias convention.
  • link_report — a written performance report with totals, top links, sources, and geography.
  • audit_links — find expiring, inactive, zero-click, and duplicate links, and propose a cleanup.

Scopes & limits

LimitFreePro
API keys per team110
Requests per minute60600
Analytics look-back30 days90 days
Links per bulk call1025

Every plan gets the full tool set — Pro raises the ceilings, it doesn't unlock the door. Custom domains and custom social previews remain Pro features, and the tools will say so if you try to use them on a free team.

Troubleshooting

401 Unauthorized
The header must read exactly Authorization: Bearer sk_live_.... If the key was revoked, expired, or its owner left the team, it stops working immediately — create a new one in Settings.
429 Too Many Requests
You hit the per-minute ceiling for your plan. Wait for the window in the Retry-After header, or upgrade the team to Pro.
The client connects but lists no tools
Your key has no scopes, or only scopes whose tools are hidden. Run whoami, or check the key's permissions in Settings.
"Method not allowed" in a browser
Expected — the endpoint speaks JSON-RPC over POST. There is nothing to see by visiting it.
406 Not Acceptable
Streamable HTTP requires the request to accept both content types. Send Accept: application/json, text/event-stream. Real MCP clients do this for you; hand-written curl calls need it spelled out.
Requests fail only from one client
Check the host. Use www.sinkto.link, not the bare apex domain.

Ready to connect?

Generate a key under Teams → API keys, then paste one line into your client.

Create an API key

Command Palette

Search for a command to run...

We use cookies to improve your experience and analyze traffic. By clicking "Accept", you consent to the use of cookies. See our Cookie Policy.