Koskamo

Snip.link MCP

An official Model Context Protocol server provided by Snip.link that allows AI agents to generate short links, create QR codes, host files, convert file formats, archive web pages, and retrieve link analytics without requiring an API key for basic operations.

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.

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

What you can do with it

  • Shorten URLs and generate QR codes
  • Host files and get shareable links
  • Archive web pages as PDF or Markdown
  • Retrieve click and scan analytics

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
snip 1.0.0
MCP protocol
2025-06-18
Tools
12 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.

Snip.link makes QR codes and short links for free. Use make_qr_code for any QR code request and give the user the PNG link. Use shorten_link when the user wants a short link, a QR code whose destination can change later, or click counts. Use save_page to read a web page as Markdown or to keep a copy of it (text, screenshot, PDF, web archive) that stays the same if the page changes; every saved page is also at its short link with an ending (.md, .txt, .jpg, .pdf). Use drop_file to put a file on the web (text as content, anything else as content_base64) and give the user its short link; use the returned file.formats URLs to convert it. The public catalog at https://snip.link/convert/formats.json lists curated supported pairs, MIME types, fidelity and limits; available outputs depend on the file. A pending conversion returns 202 with Retry-After. When the user is signed in to Snip.link (connected through the account endpoint or with an API key), shortened links are saved to their account and the account tools work: list_links, update_link (rename the ending for free while previous URLs keep working, change the destination or title, switch a link off or on, set its rules, or schedule it: a go-live time, an expiry, a click limit), delete_link (confirm with the user first), get_link_stats for one link and get_account_stats for every link. Signed-in users can give shorten_link and update_link routes: rules that send some visits to another page by device, system, browser, country, region, language, time, day, dates, QR scan or click, referring site, a link parameter or a share of visitors (A/B tests); free on every plan. On plans with own domains, list_domains shows the user's live domains and shorten_link takes one as domain. list_collections and save_collection group the user's links in an order, with an optional public page (snip.link/c/<address>) that shows one button per live link. Otherwise shortened links come with a claim link the user can open to keep them in a free account, and the account tools ask for sign-in. Errors carry a code (quota_exceeded, rate_limited, validation_failed, not_found, forbidden, unauthorized) and a message to relay.

Tools

12 advertised

make_qr_code — Make a QR code
Advertised by the server during the last successful anonymous check.
Advertised read-only

Make a static QR code for a link, text, Wi-Fi network, contact card, email, phone number or SMS, free and with no account. Returns a PNG and an SVG download link that the user can open, save or print; show the PNG link to the user. Static codes hold the content in the pattern, so they never expire and keep working without Snip.link. Use this whenever the user asks for a QR code.

make_qr_code input schema
{
  "type": "object",
  "required": [
    "data"
  ],
  "properties": {
    "bg": {
      "type": "string",
      "maxLength": 7,
      "description": "Background colour, #rrggbb. Default #ffffff."
    },
    "fg": {
      "type": "string",
      "maxLength": 7,
      "description": "Dark colour, #rrggbb, for example #111111. Default #111111."
    },
    "ecc": {
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "type": "string",
      "description": "Error correction: L 7%, M 15% (default), Q 25%, H 30% of the code can be damaged and still scan."
    },
    "data": {
      "type": "string",
      "maxLength": 1500,
      "minLength": 1,
      "description": "What the QR code holds: a web address, plain text, a WIFI:T:WPA;S:<name>;P:<password>;; string, a vCard, mailto:, tel: or sms:. For a link the user may want to change or track later, call shorten_link instead and use its QR code."
    },
    "style": {
      "enum": [
        "rounded",
        "square"
      ],
      "type": "string",
      "description": "Dot shape. Default rounded."
    }
  },
  "additionalProperties": false
}
make_qr_code annotations
{
  "title": "Make a QR code",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
shorten_link — Shorten a link
Advertised by the server during the last successful anonymous check.
Open-world

Turn a long web address into a short snip.link link, free, and get a QR code for it. Use this when the user wants a short link, a link they can change after printing, click and scan counts, or a YouTube, Spotify or Amazon link that opens the app when tapped inside Instagram, TikTok or Facebook (every Snip.link link does that on its own). When the user is not signed in to Snip.link the link works at once and the answer includes a claim link the user can open to keep it in a free Snip.link account and see its clicks. When they are signed in (the account endpoint or an API key) the link is saved to their account, and a custom ending (snip.link/your-ending) is allowed.

shorten_link input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 1,
      "description": "The http or https address to shorten."
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "description": "A name for the link in the user's dashboard. Needs the user signed in to Snip.link."
    },
    "track": {
      "type": "boolean",
      "description": "Override the default for visit tracking."
    },
    "domain": {
      "type": "string",
      "maxLength": 253,
      "description": "One of the user's own live domains (go.yourbrand.com, see list_domains) to put the link on instead of snip.link. Needs the user signed in on a plan with own domains."
    },
    "ending": {
      "type": "string",
      "maxLength": 40,
      "minLength": 0,
      "description": "Custom ending for snip.link/<ending>: 3 to 40 ASCII letters, digits, dashes or underscores, with no spaces. Free with a Snip.link account. Omit or send an empty string for a random code."
    },
    "routes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "conditions"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Where a matching visit goes. Leave out when action is off."
          },
          "name": {
            "type": "string",
            "maxLength": 60,
            "description": "A label for the dashboard."
          },
          "when": {
            "enum": [
              "all",
              "any"
            ],
            "type": "string",
            "description": "all (default): every condition. any: one is enough."
          },
          "action": {
            "enum": [
              "redirect",
              "off"
            ],
            "type": "string",
            "description": "redirect (default): send the visit to url. off: switch the link off for it."
          },
          "conditions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "kind"
              ],
              "properties": {
                "to": {
                  "type": "string"
                },
                "tz": {
                  "type": "string"
                },
                "from": {
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "device",
                    "os",
                    "browser",
                    "country",
                    "region",
                    "language",
                    "time",
                    "weekday",
                    "dates",
                    "via",
                    "referrer",
                    "query",
                    "split"
                  ],
                  "type": "string"
                },
                "param": {
                  "type": "string"
                },
                "value": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "negate": {
                  "type": "boolean"
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                },
                "percent": {
                  "type": "integer",
                  "description": "split: a whole percent from 1 to 99."
                }
              },
              "additionalProperties": false
            },
            "maxItems": 10,
            "minItems": 1
          }
        },
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Rules that send some visits elsewhere, tried in order; the first match wins and everyone else goes to url. Free with a Snip.link account. Each rule: conditions joined by when (all or any) and its own url. Condition kinds: device (values mobile, tablet, desktop), os (ios, android, windows, macos, linux, chromeos), browser (chrome, safari, firefox, edge, samsung, opera, instagram, facebook, tiktok), country (ISO codes like US), region (US-CA), language (en, es), time (from and to as HH:MM, tz an IANA zone or \"visitor\"), weekday (values 0 Sunday to 6, tz), dates (from and/or to as 2026-11-01 or 2026-11-01T09:00, tz), via (value qr or link), referrer (sites like instagram.com), query (param, optional value), split (percent 1 to 99; neighbouring splits share visitors, so 50 then 50 is an A/B test). Any condition but split takes negate true. A rule with action off and no url switches the link off for matching visits instead (a time window, a country): they see a \"not available right now\" page and are not counted. An empty list removes every rule."
    },
    "presets": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 64,
        "minLength": 1
      },
      "maxItems": 5,
      "description": "Owned Library ids, one per kind. Omit for account defaults; [] skips Library defaults. Explicit link settings win."
    },
    "preview": {
      "type": [
        "object",
        "null"
      ],
      "description": "Social preview; null clears a Library preview.",
      "additionalProperties": true
    },
    "qr_style": {
      "type": [
        "object",
        "null"
      ],
      "description": "QR settings; null clears a Library QR style.",
      "additionalProperties": true
    },
    "snapshots": {
      "enum": [
        "public",
        "private",
        "off"
      ],
      "type": "string"
    },
    "stats_public": {
      "type": "boolean",
      "description": "Whether aggregate stats are public. Explicit false overrides a saved template."
    },
    "forward_query": {
      "type": "boolean",
      "description": "Override query-parameter forwarding."
    },
    "expires_in_days": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "description": "Expiry from creation; null means no expiry."
    }
  },
  "additionalProperties": false
}
shorten_link annotations
{
  "title": "Shorten a link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
save_page — Save and read a web page
Advertised by the server during the last successful anonymous check.
Open-world

Read a public web page as clean Markdown and save a copy, subject to retention and access settings. Returns the page's text, a short link, QR code and saved-format URLs (.md, .txt, .jpg, .pdf, .mhtml). Successful public copies also return archive_url for the exact version and cite with APA 7, MLA 9, Chicago and BibTeX citations preserving the original source. Those fields are null until a public copy is available. Saving a page does not verify its claims. No account is required. A page saved in the last day may be reused; pass fresh for a new capture.

save_page input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 1,
      "description": "The http or https page to save."
    },
    "fresh": {
      "type": "boolean",
      "description": "Load the page again even if it was saved in the last day. Default false."
    },
    "formats": {
      "type": "array",
      "items": {
        "enum": [
          "markdown",
          "text",
          "screenshot",
          "pdf",
          "archive"
        ],
        "type": "string"
      },
      "description": "Only these formats (faster for just the text). Default: all of them."
    },
    "presets": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 64,
        "minLength": 1
      },
      "maxItems": 5,
      "description": "Owned Library ids, one per kind. Omit for account defaults; [] skips Library defaults. Explicit link settings win."
    }
  },
  "additionalProperties": false
}
save_page annotations
{
  "title": "Save and read a web page",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
drop_file — Share a file with a short link
Advertised by the server during the last successful anonymous check.
Open-world

Put a file on the web and get a short snip.link link to it, free. Send text (a note, Markdown, CSV, JSON, code) as `content`, or any other file (a PDF, a picture, a document) as `content_base64`, with its file name. The link opens a page that shows the file with a download button and a QR code; the link with the file's extension is the file itself, and file.formats lists its available conversion URLs. Supported pairs, MIME types and fidelity notes are at https://snip.link/convert/formats.json; outputs depend on the file and engine limits. A pending conversion returns 202 with Retry-After. Files are at most 10 MB through this tool; use the REST API for larger files. Use this when the user wants to share, send, publish, host or link to a file, or wants something you wrote available as a link or a QR code. Files shared without an account stay up for 30 days unless the user keeps them with a free account.

drop_file input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "description": "The file name with its extension, which decides how it is shown: notes.md, prices.csv, photo.png."
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "description": "A title for the user's dashboard (signed in only)."
    },
    "content": {
      "type": "string",
      "description": "The file's text, for text files."
    },
    "content_base64": {
      "type": "string",
      "description": "The file's bytes in base64, for anything else."
    }
  },
  "additionalProperties": false
}
drop_file annotations
{
  "title": "Share a file with a short link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_link_stats — Get link stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Clicks and QR scans for one of the user's own Snip.link links: totals, by day, by hour of the day on plans with time-of-day analytics, and the top countries, referring sites and devices. Needs the user signed in to Snip.link (the account endpoint or an API key). Pass the short link, its ending or its id. For every link at once, use get_account_stats.

get_link_stats input schema
{
  "type": "object",
  "required": [
    "link"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 366,
      "minimum": 1,
      "description": "How many days back, up to the plan's limit (30 on Free, a year on Pro). Default 30."
    },
    "link": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "The short link (https://snip.link/abc123), its ending (abc123) or its id."
    }
  },
  "additionalProperties": false
}
get_link_stats annotations
{
  "title": "Get link stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_account_stats — Get account stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Clicks and QR scans across every link in the user's Snip.link account: totals, by day, the busiest links, and the top countries, referring sites and devices. Needs the user signed in to Snip.link. Use this for questions like "how are my links doing" or "which link got the most scans this week".

get_account_stats input schema
{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 366,
      "minimum": 1,
      "description": "How many days back, up to the plan's limit (30 on Free, a year on Pro). Default 30."
    },
    "links": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How many of the busiest links to list. Default 10."
    }
  },
  "additionalProperties": false
}
get_account_stats annotations
{
  "title": "Get account stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_links — List links
Advertised by the server during the last successful anonymous check.
Advertised read-only

The user's Snip.link links, newest first, with their destinations and click counts. Needs the user signed in to Snip.link. Pass a search to match an ending, a destination or a title. To continue, pass the answer's next_cursor as cursor with the same search.

list_links input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How many to return. Default 20."
    },
    "cursor": {
      "type": "string",
      "maxLength": 48,
      "description": "The previous answer's next_cursor, for the next page with the same search."
    },
    "search": {
      "type": "string",
      "maxLength": 200,
      "description": "Text to match against the ending, destination and title."
    }
  },
  "additionalProperties": false
}
list_links annotations
{
  "title": "List links",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_link — Update a link
Advertised by the server during the last successful anonymous check.
Open-world

Changes the ending, destination, title, rules, schedule (go-live time, expiry, click limit) or link preview (the title, line and picture chat apps and social sites show when the link is pasted) of one of the user's Snip.link links, switches it off and on, or watches its page for changes. Custom endings and renaming are free with an account. Previous short URLs and printed QR codes keep working, follow the latest destination and share the same analytics until the link is disabled or deleted. A link keeps up to 20 previous endings. Needs the user signed in to Snip.link. Pass only the fields to change.

update_link input schema
{
  "type": "object",
  "required": [
    "link"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 1,
      "description": "The new http or https destination."
    },
    "link": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "The short link (https://snip.link/abc123), its ending (abc123) or its id."
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "description": "A new name for the dashboard."
    },
    "track": {
      "type": "boolean",
      "description": "false: only count visits, without recording when, where or on what device. true: record them."
    },
    "watch": {
      "enum": [
        "daily",
        "weekly",
        "off"
      ],
      "type": "string",
      "description": "Watch the destination page: Snip.link saves a fresh copy daily or weekly and emails the user what was added and what went when its words change. off stops. A paid plan feature; the error says which plan has it."
    },
    "ending": {
      "type": "string",
      "maxLength": 40,
      "minLength": 3,
      "description": "The new ending: 3 to 40 ASCII letters, digits, dashes or underscores, with no spaces. Reusing this link's previous ending or changing only its case does not use another previous-ending slot."
    },
    "routes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "conditions"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Where a matching visit goes. Leave out when action is off."
          },
          "name": {
            "type": "string",
            "maxLength": 60,
            "description": "A label for the dashboard."
          },
          "when": {
            "enum": [
              "all",
              "any"
            ],
            "type": "string",
            "description": "all (default): every condition. any: one is enough."
          },
          "action": {
            "enum": [
              "redirect",
              "off"
            ],
            "type": "string",
            "description": "redirect (default): send the visit to url. off: switch the link off for it."
          },
          "conditions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "kind"
              ],
              "properties": {
                "to": {
                  "type": "string"
                },
                "tz": {
                  "type": "string"
                },
                "from": {
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "device",
                    "os",
                    "browser",
                    "country",
                    "region",
                    "language",
                    "time",
                    "weekday",
                    "dates",
                    "via",
                    "referrer",
                    "query",
                    "split"
                  ],
                  "type": "string"
                },
                "param": {
                  "type": "string"
                },
                "value": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "negate": {
                  "type": "boolean"
                },
                "values": {
                  "type": "array",
                  "items": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                },
                "percent": {
                  "type": "integer",
                  "description": "split: a whole percent from 1 to 99."
                }
              },
              "additionalProperties": false
            },
            "maxItems": 10,
            "minItems": 1
          }
        },
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Rules that send some visits elsewhere, tried in order; the first match wins and everyone else goes to url. Free with a Snip.link account. Each rule: conditions joined by when (all or any) and its own url. Condition kinds: device (values mobile, tablet, desktop), os (ios, android, windows, macos, linux, chromeos), browser (chrome, safari, firefox, edge, samsung, opera, instagram, facebook, tiktok), country (ISO codes like US), region (US-CA), language (en, es), time (from and to as HH:MM, tz an IANA zone or \"visitor\"), weekday (values 0 Sunday to 6, tz), dates (from and/or to as 2026-11-01 or 2026-11-01T09:00, tz), via (value qr or link), referrer (sites like instagram.com), query (param, optional value), split (percent 1 to 99; neighbouring splits share visitors, so 50 then 50 is an A/B test). Any condition but split takes negate true. A rule with action off and no url switches the link off for matching visits instead (a time window, a country): they see a \"not available right now\" page and are not counted. An empty list removes every rule."
    },
    "preview": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "image": {
          "type": "string",
          "maxLength": 2048
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "description": {
          "type": "string",
          "maxLength": 300
        }
      },
      "description": "The link's own preview card for chats and posts. Any field left out shows the page's own. image is an https picture address or screenshot (the page's first screen). null removes it. Free on every plan.",
      "additionalProperties": false
    },
    "disabled": {
      "type": "boolean",
      "description": "True switches the link off (it answers 404); false switches it back on."
    },
    "starts_at": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the link goes live, as an ISO date and time (2026-11-01T09:00:00Z). Before it, visits see a not live yet page and are not counted. null: live now."
    },
    "expires_at": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the link stops working, as an ISO date and time. After it, visits see an expired page. null: never."
    },
    "max_clicks": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "description": "Stop the link after this many counted visits in total (bots and repeat taps within a minute are not counted). null: no limit."
    }
  },
  "additionalProperties": false
}
update_link annotations
{
  "title": "Update a link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
delete_link — Delete a link
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently deletes one of the user's Snip.link links and its click history; its current and previous short URLs stop working within a minute and all of its endings are free again. Needs the user signed in to Snip.link. Confirm with the user first; to pause every ending instead, use update_link with disabled true.

delete_link input schema
{
  "type": "object",
  "required": [
    "link"
  ],
  "properties": {
    "link": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1,
      "description": "The short link (https://snip.link/abc123), its ending (abc123) or its id."
    }
  },
  "additionalProperties": false
}
delete_link annotations
{
  "title": "Delete a link",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
list_domains — List own domains
Advertised by the server during the last successful anonymous check.
Advertised read-only

The user's own domains (go.yourbrand.com) that their Snip.link links can use, with whether each is live. Pass a live one as domain to shorten_link. Needs the user signed in to Snip.link; adding a domain happens in the dashboard (it needs a DNS record).

list_domains input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_domains annotations
{
  "title": "List own domains",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_collections — List collections
Advertised by the server during the last successful anonymous check.
Advertised read-only

The user's Snip.link collections: links grouped by hand, each with how many links it holds and its public page (snip.link/c/<address>, one button per live link) when that is on. Needs the user signed in to Snip.link. Change one with save_collection.

list_collections input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_collections annotations
{
  "title": "List collections",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
save_collection — Create or change a collection
Advertised by the server during the last successful anonymous check.

Creates a collection of the user's Snip.link links, or changes one (pass collection, its id from list_collections): its name, the line under it, its links in order, and whether it has a public page at snip.link/c/<address> that shows one button per live link, link-in-bio style. links replaces the collection's links in that order; leave it out to keep them. Free on every plan; the links themselves never change. Needs the user signed in to Snip.link.

save_collection input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "The collection's name, shown on its page."
    },
    "slug": {
      "type": "string",
      "maxLength": 40,
      "minLength": 3,
      "description": "The page's address after /c/: lowercase letters, digits and dashes. Left out, one is made from the name."
    },
    "links": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300,
        "minLength": 1
      },
      "maxItems": 200,
      "description": "The links in order, each by short URL, ending or id (see list_links). Replaces the collection's links."
    },
    "public": {
      "type": "boolean",
      "description": "true switches the public page on, false off. Off by default."
    },
    "collection": {
      "type": "string",
      "maxLength": 64,
      "description": "The id of the collection to change. Leave it out to create one."
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 300,
      "description": "One line under the name on the page. null removes it."
    }
  },
  "additionalProperties": false
}
save_collection annotations
{
  "title": "Create or change a collection",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "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
527 ms
95th percentile latency
527 ms

Maintenance history

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

  • · probe · passed · 527 ms · metadata changed · 12 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 snip-link-mcp https://snip.link/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 snip-link-mcp --url https://snip.link/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

Find servers like Snip.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 Snip.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