Koskamo

b59.link MCP

An official MCP server for b59.link that allows AI agents to create short links, generate trackable QR codes, set up page-view trackers, and retrieve statistics. It supports authentication via API key or email OTP to manage owned resources.

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.

b59.link MCP logo, by b59.linkVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by b59.link
MCP endpoint (Streamable HTTP)
https://b59.link/api/mcp
Vendor documentation

What you can do with it

  • Shorten long URLs into trackable short links
  • Generate QR codes for URLs or other text data
  • Create page-view trackers for websites
  • Retrieve statistics and stats URLs for tracked items

Source and maintenance

Vendor evidenceRegistry 1.2.0

Protocol and capabilities

Server
b59.link 1.4.0
MCP protocol
2025-06-18
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

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

This server allows 10 requests a second. Call the auth tool (api_key, or email then email+otp) and send 'Authorization: Bearer <session_key>' to own the links and trackers you create.

Tools

9 advertised

auth — Sign in to b59.link
Advertised by the server during the last successful anonymous check.
Open-world

Sign in to b59.link to own what you create (and for 300 requests/minute on the REST API). Pass api_key to get a session key straight away. Or pass email to have a 6-digit code emailed, then call again with email and otp to get a session key (new emails are signed up and also get their api_key). Send the session key as the HTTP header 'Authorization: Bearer <session_key>'.

auth input schema
{
  "type": "object",
  "properties": {
    "otp": {
      "type": "string",
      "description": "The 6-digit code from the email."
    },
    "email": {
      "type": "string",
      "description": "Email to send a one-time code to."
    },
    "api_key": {
      "type": "string",
      "description": "The account's 256-character API key."
    }
  }
}
auth annotations
{
  "title": "Sign in to b59.link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
shorten_url — Shorten a URL
Advertised by the server during the last successful anonymous check.

Shorten a long URL and get a memorable b59.link short URL. Optionally specify a custom slug. Returns the short URL and a stats URL.

shorten_url input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL to shorten."
    },
    "slug": {
      "type": "string",
      "description": "Optional custom slug (letters, digits, hyphens, underscores, max 100 chars). A random slug is used if omitted."
    }
  }
}
shorten_url annotations
{
  "title": "Shorten a URL",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_qr — Make a tracked QR code
Advertised by the server during the last successful anonymous check.

Generate a trackable QR code for a URL. Creates a b59.link short URL at the same time so scans are counted. Returns the short URL, a stats URL, and the QR code as a base64-encoded PNG.

generate_qr input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL to generate a QR code for."
    }
  }
}
generate_qr annotations
{
  "title": "Make a tracked QR code",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_tracker — Create a page-view tracker
Advertised by the server during the last successful anonymous check.

Create a free page-view tracker for a website. Returns the tag image URL and ready-to-paste snippets for the site's pages, plus the stats URL where views, visitors, pages and referrers are shown. When signed in, the tracker belongs to the account; otherwise keep the manage_token to claim it later.

create_tracker input schema
{
  "type": "object",
  "required": [
    "site_url"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional display name for the tracker."
    },
    "site_url": {
      "type": "string",
      "description": "The site's address, e.g. example.com. Views are only counted on this domain and its subdomains."
    }
  }
}
create_tracker annotations
{
  "title": "Create a page-view tracker",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_stats_url — Find a stats page
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the stats page URL for anything b59.link tracks: a slug or short URL, the destination URL of a short link or QR code, a tracker id or tag URL, or any page URL / domain that has a tracker tag. Stats themselves are viewed on b59.link; this returns where.

get_stats_url input schema
{
  "type": "object",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Slug, short URL, page URL, domain, tracker id or tag URL."
    }
  }
}
get_stats_url annotations
{
  "title": "Find a stats page",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lookup_url — Look up an existing short link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether a URL already has a b59.link short URL. Handles variations: http/https, www prefix, trailing slash. Returns the existing short URL and QR code if found.

lookup_url input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The URL to look up."
    }
  }
}
lookup_url annotations
{
  "title": "Look up an existing short link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
make_qr_image — Make a QR code image
Advertised by the server during the last successful anonymous check.
Advertised read-only

Make a QR code image for any text (URL, Wi-Fi string, phone, email, plain text) without creating a short link. Supports colors, size and SVG. Returns the image plus a permanent image URL that can be embedded with <img src>. Use generate_qr instead when scans should be counted.

make_qr_image input schema
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "bg": {
      "type": "string",
      "description": "Background hex color, e.g. ffffff."
    },
    "fg": {
      "type": "string",
      "description": "Foreground hex color, e.g. 000000."
    },
    "data": {
      "type": "string",
      "description": "Text to encode (max 1500 chars)."
    },
    "size": {
      "type": "integer",
      "description": "Width/height in pixels, 64-1200 (default 300)."
    },
    "format": {
      "enum": [
        "png",
        "svg"
      ],
      "type": "string",
      "description": "Image format (default png)."
    }
  }
}
make_qr_image annotations
{
  "title": "Make a QR code image",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
watch_printed_links — Watch printed links
Advertised by the server during the last successful anonymous check.
Open-world

Watch up to 25 printed links (QR codes on menus, short links on flyers, posters, packaging, cards). Checks each one now and then once a day, and records the whole redirect chain. A link is flagged when it dies (fails twice, 6 hours apart), lands somewhere new, lands on a QR or short-link vendor's 'deactivated' page or a parked domain, changes how it redirects, or its certificate expires within 14 days. Returns the first results, page_url (a result page to hand to the person; shareable) and manage_url (private: edit, re-check, delete). No key needed.

watch_printed_links input schema
{
  "type": "object",
  "required": [
    "links"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Optional address for alerts; nothing is sent to it until it is confirmed with a code on the result page."
    },
    "links": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "The printed link, e.g. https://example.com/menu."
          },
          "label": {
            "type": "string",
            "description": "Where it is printed, e.g. 'menu table card'."
          }
        }
      },
      "maxItems": 25,
      "minItems": 1
    }
  }
}
watch_printed_links annotations
{
  "title": "Watch printed links",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_watch_report — Get a printed-link watch report
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the state of every link in a printed-link watch: working, dead, moved, deactivated page, redirect changed or certificate expiring, what changed since the first check, the latest redirect chain and the last 30 days.

get_watch_report input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The watch's slug or its page_url (b59.link/w/<slug>)."
    }
  }
}
get_watch_report annotations
{
  "title": "Get a printed-link watch report",
  "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
497 ms
95th percentile latency
497 ms

Maintenance history

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

  • · probe · passed · 497 ms · metadata changed · 9 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 b59-link-mcp https://b59.link/api/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 b59-link-mcp --url https://b59.link/api/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start b59-link-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "b59-link-mcp": {
      "type": "http",
      "url": "https://b59.link/api/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 b59-link-mcp https://b59.link/api/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": {
    "b59-link-mcp": {
      "url": "https://b59.link/api/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": {
    "b59-link-mcp": {
      "serverUrl": "https://b59.link/api/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run b59.link MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing