_ registry / mcp streamable-http

flyn

https://www.flyn.to

Registry code: c3e19ef03963bea8

api record

Flyn creates and manages short links (flyn.to) with click analytics. Use create_short_link to shorten a destination URL, update_link to re-point an existing short link without changing the printed URL, and get_link_analytics for click data. Click totals are available on every plan; country/device/referrer breakdowns, password protection, and click limits require Flyn Pro (https://www.flyn.to/pricing). Free accounts can create 25 links per month. For QR codes, prefer get_link_qr_code: it encodes a short link, so the destination can be re-pointed after the code is printed and every scan counts…

endpoint
https://www.flyn.to/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing
karma
0 · newcomer
reachable
unknown
uptime
—
latency
—

last good check

priced tools
0

of 8 tools

_ used through this hub 30 days

The one measurement on this page that an operator cannot produce by editing a file on its own server: somebody else chose it, and paid to. Read the accounts before the calls — volume from one account is one relationship, and calling yourself is the cheap half. Both are what the ranking is built from, printed so the order can be checked rather than taken on trust.

accounts
0

distinct, expensive to fake

calls served
0

successful, last 30 days

_ what it can do 8 tools
8 never probed 0 of 8 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • create_short_link unknown never probed

    Create a new Flyn short link that redirects to a destination URL. Returns the link id, slug, and full short URL. The destination is scanned with Google Safe Browsing before creation. Free accounts can create 25 links per calendar month; password protection, click limits, fallback URLs, weighted rotation, and conversion tracking require Flyn Pro.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "The destination URL to shorten (https:// is assumed if no protocol is given)."
        },
        "slug": {
          "type": "string",
          "description": "Optional custom slug (letters, numbers, hyphens, underscores; max 100 chars). A random slug is generated when omitted."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional tags for organizing links (Pro plan only)."
        },
        "title": {
          "type": "string",
          "description": "Optional human-readable title for the link."
        },
        "domain": {
          "type": "string",
          "description": "Optional custom domain to mint the link on (must be a verified domain you own; Pro plan only). Omit to use your account default domain."
        },
        "password": {
          "type": "string",
          "description": "Optional password required to open the link (Pro plan only)."
        },
        "rotation": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url",
              "weight"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Stable identifier for this destination, recorded as the click variant on each click. Omit it on a brand new destination and Flyn mints one. When editing, send every existing destination back with the id it already has: click history is attributed by id, so a changed id detaches that destination's past clicks and a reused id merges two destinations' stats. Never derive ids from list position."
              },
              "url": {
                "type": "string",
                "description": "Destination URL for this entry. Scanned with Google Safe Browsing like the primary destination."
              },
              "label": {
                "type": "string",
                "description": "Optional human-readable name for this destination. Cosmetic, it does not affect routing."
              },
              "weight": {
                "type": "number",
                "minimum": 0,
                "description": "Relative share of traffic, NOT a percentage. Weights are normalised across the list, so [3, 1] sends roughly three quarters of clicks to the first entry and equal weights give an even split. A weight of 0 keeps the destination in the list without ever serving it."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 12,
          "description": "Optional weighted rotation of destinations, one short link splitting traffic between several URLs (Pro plan only). Up to 12 destinations; sending more is rejected rather than truncated, so nothing is dropped without telling you. Each human visitor is sent to one destination drawn at random in proportion to its weight, so the split settles over many clicks rather than following a strict order. Bots and crawlers always get the primary url, which stays required. Each click records the id of the destination that served it, and that id, not the url and not the list position, is what per-destination stats are keyed on. The Flyn dashboard does report them: the link's own analytics page has a \"Destination Performance\" panel listing every destination with its click count, its actual share of clicks, and the share its weight intended, and it keeps showing a destination you later remove from the rotation. No API or MCP call returns that breakdown, or the per-click destination id, so send the user to that page rather than inventing a tool call for it. The panel counts clicks only, across the clicks that carry a destination id: no conversion or revenue split, and no winner declared. Every destination is Safe Browsing scanned before the link is created."
        },
        "expiresAt": {
          "type": "string",
          "description": "Optional ISO 8601 datetime after which the link stops redirecting."
        },
        "clickLimit": {
          "type": "integer",
          "minimum": 1,
          "description": "Optional maximum number of human clicks before the link stops redirecting (Pro plan only)."
        },
        "fallbackUrl": {
          "type": "string",
          "description": "Optional URL visitors are sent to after the click limit is reached (Pro plan only)."
        },
        "forwardParams": {
          "type": "boolean",
          "description": "Whether query parameters appended to the short link are forwarded to the destination. Defaults to true."
        },
        "conversionTracking": {
          "type": "boolean",
          "description": "Enable per-link conversion tracking (Pro plan only). The redirect then appends an unguessable click id to the destination URL, and the link reports conversions and total conversion value next to its clicks. Nothing is reported until the Flyn tag (or a server-to-server postback) is installed on the destination site, so tell the user that setup step is still theirs."
        }
      },
      "additionalProperties": false
    }
    arguments 89 lines
  • get_link unknown never probed

    Fetch one short link by its id, including destination, settings, total click count, and its conversion counters (conversionTracking, conversions, conversionValueCents).

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The link id (from create_short_link or list_links)."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • list_links unknown never probed

    List the account's short links with pagination, search, and filtering. Returns each link's id, slug, short URL, destination, click count, and settings, plus its conversion counters: conversionTracking (whether the link carries a click id), conversions, and conversionValueCents (total value reported for those conversions, in cents, not currency converted).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "tag": {
          "type": "string",
          "description": "Optional: only return links carrying this tag."
        },
        "page": {
          "type": "integer",
          "default": 1,
          "minimum": 1,
          "description": "Page number, starting at 1."
        },
        "sort": {
          "enum": [
            "created_at",
            "clicks",
            "slug",
            "title"
          ],
          "type": "string",
          "default": "created_at",
          "description": "Sort column."
        },
        "limit": {
          "type": "integer",
          "default": 20,
          "maximum": 100,
          "minimum": 1,
          "description": "Results per page (max 100)."
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "default": "desc",
          "description": "Sort direction."
        },
        "search": {
          "type": "string",
          "description": "Optional text search across slug, destination URL, and title."
        },
        "status": {
          "enum": [
            "active",
            "expired",
            "archived"
          ],
          "type": "string",
          "description": "Optional status filter."
        }
      },
      "additionalProperties": false
    }
    arguments 56 lines
  • update_link unknown never probed

    Update an existing short link. Can re-point the destination URL without changing the printed/shared short link, plus edit title, slug, tags, expiration, rotation destinations, and Pro settings. Only the provided fields are changed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The link id to update."
        },
        "url": {
          "type": "string",
          "description": "New destination URL."
        },
        "slug": {
          "type": "string",
          "description": "New slug (changes the short URL; the old slug stops working)."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Replacement tag list."
        },
        "title": {
          "type": "string",
          "description": "New title."
        },
        "status": {
          "enum": [
            "active",
            "archived"
          ],
          "type": "string",
          "description": "Link status."
        },
        "password": {
          "type": "string",
          "description": "Set a password (Pro plan only)."
        },
        "rotation": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url",
              "weight"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Stable identifier for this destination, recorded as the click variant on each click. Omit it on a brand new destination and Flyn mints one. When editing, send every existing destination back with the id it already has: click history is attributed by id, so a changed id detaches that destination's past clicks and a reused id merges two destinations' stats. Never derive ids from list position."
              },
              "url": {
                "type": "string",
                "description": "Destination URL for this entry. Scanned with Google Safe Browsing like the primary destination."
              },
              "label": {
                "type": "string",
                "description": "Optional human-readable name for this destination. Cosmetic, it does not affect routing."
              },
              "weight": {
                "type": "number",
                "minimum": 0,
                "description": "Relative share of traffic, NOT a percentage. Weights are normalised across the list, so [3, 1] sends roughly three quarters of clicks to the first entry and equal weights give an even split. A weight of 0 keeps the destination in the list without ever serving it."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 12,
          "description": "Replacement list of weighted rotation destinations (Pro plan only). This REPLACES the whole list, so read the link first and send back every destination you are keeping, each with the id it already has. Pass an empty array to stop rotating and serve the single url again. Up to 12 destinations; sending more is rejected rather than truncated, so nothing is dropped without telling you. Each human visitor is sent to one destination drawn at random in proportion to its weight, so the split settles over many clicks rather than following a strict order. Bots and crawlers always get the primary url, which stays required. Each click records the id of the destination that served it, and that id, not the url and not the list position, is what per-destination stats are keyed on. The Flyn dashboard does report them: the link's own analytics page has a \"Destination Performance\" panel listing every destination with its click count, its actual share of clicks, and the share its weight intended, and it keeps showing a destination you later remove from the rotation. No API or MCP call returns that breakdown, or the per-click destination id, so send the user to that page rather than inventing a tool call for it. The panel counts clicks only, across the clicks that carry a destination id: no conversion or revenue split, and no winner declared."
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "New ISO 8601 expiration, or null to remove."
        },
        "clickLimit": {
          "type": "integer",
          "minimum": 1,
          "description": "Maximum human clicks before the link stops (Pro plan only)."
        },
        "fallbackUrl": {
          "type": "string",
          "description": "URL served after the click limit is reached (Pro plan only)."
        },
        "forwardParams": {
          "type": "boolean",
          "description": "Forward appended query params to the destination."
        },
        "conversionTracking": {
          "type": "boolean",
          "description": "Enable or disable per-link conversion tracking (Pro plan only). Enabling only makes the redirect append a click id; conversions arrive from the Flyn tag or the server postback on the destination site."
        }
      },
      "additionalProperties": false
    }
    arguments 100 lines
  • delete_link unknown never probed

    Permanently delete a short link. The short URL immediately stops redirecting and this cannot be undone.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The link id to delete."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • get_link_analytics unknown never probed

    Fetch click events for a short link, newest first. Every plan sees timestamps and total counts; country, city, device, OS, browser, and referrer detail requires Flyn Pro (fields are null on the free plan). Free plans see the last 30 days of history. Click events carry no conversion data: for conversions and total conversion value, read the link itself with get_link or list_links.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The link id."
        },
        "page": {
          "type": "integer",
          "default": 1,
          "minimum": 1,
          "description": "Page number, starting at 1."
        },
        "limit": {
          "type": "integer",
          "default": 50,
          "maximum": 200,
          "minimum": 1,
          "description": "Click events per page (max 200 via MCP)."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • get_link_qr_code unknown never probed

    Render a scannable QR code for an existing Flyn short link. Because the code encodes the short link rather than the destination, you can repoint the link later and every printed code follows, and each scan is counted as a click. The image is returned as a PNG you can look at. Custom colours and SVG output require Flyn Pro.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "bg": {
          "type": "string",
          "description": "Background colour as 6-digit hex, default #FFFFFF. Requires Flyn Pro."
        },
        "fg": {
          "type": "string",
          "description": "Foreground colour as 6-digit hex, default Flyn green #14532D. Requires Flyn Pro."
        },
        "id": {
          "type": "string",
          "description": "The id of the link to render a QR code for."
        },
        "size": {
          "type": "integer",
          "maximum": 2048,
          "minimum": 64,
          "description": "Maximum width in pixels, 64 to 2048, default 512. The image is the largest whole-module square that fits, so the real width is usually slightly smaller and is reported back."
        },
        "level": {
          "enum": [
            "L",
            "M",
            "Q",
            "H"
          ],
          "type": "string",
          "description": "Error correction level: 'L', 'M' (default), 'Q' or 'H'. Higher levels survive more damage but make the symbol denser."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Output format: 'png' (default) or 'svg'. SVG requires Flyn Pro."
        },
        "margin": {
          "type": "integer",
          "maximum": 32,
          "minimum": 4,
          "description": "Quiet zone in modules. Minimum and default is 4, as required by ISO/IEC 18004; smaller values are raised to 4 because a short quiet zone is the most common cause of a printed code failing to scan."
        }
      },
      "additionalProperties": false
    }
    arguments 51 lines
  • create_qr_code unknown never probed

    Render a QR code for any of seven content types: a link, plain text, WiFi credentials, a v-card contact, a pre-filled email, a phone number, or a pre-filled SMS. The image is returned as a PNG you can look at. Nothing is stored, so this code is STATIC: it encodes the content directly and cannot be changed after it is printed. If the user wants a code they can repoint later, or wants to count scans, create a short link with create_short_link first and then call get_link_qr_code instead. Link, Text and WiFi work on every plan; V-card, E-mail, Call and SMS require Flyn Pro, as do custom colours and SVG output.

    mcp-tool

    {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "bg": {
          "type": "string",
          "description": "Background colour as 6-digit hex, default #FFFFFF. Requires Flyn Pro."
        },
        "fg": {
          "type": "string",
          "description": "Foreground colour as 6-digit hex, default Flyn green #14532D. Requires Flyn Pro."
        },
        "url": {
          "type": "string",
          "description": "For type 'url': the URL to encode."
        },
        "size": {
          "type": "integer",
          "maximum": 2048,
          "minimum": 64,
          "description": "Maximum width in pixels, 64 to 2048, default 512. The image is the largest whole-module square that fits, so the real width is usually slightly smaller and is reported back."
        },
        "text": {
          "type": "string",
          "description": "For type 'text': the plain text to show when scanned."
        },
        "type": {
          "enum": [
            "url",
            "text",
            "wifi",
            "vcard",
            "email",
            "phone",
            "sms"
          ],
          "type": "string",
          "description": "What to encode. 'url', 'text' and 'wifi' work on any plan. 'vcard', 'email', 'phone' and 'sms' require Flyn Pro."
        },
        "email": {
          "type": "string",
          "description": "For type 'email': the recipient address."
        },
        "level": {
          "enum": [
            "L",
            "M",
            "Q",
            "H"
          ],
          "type": "string",
          "description": "Error correction level: 'L', 'M' (default), 'Q' or 'H'. Higher levels survive more damage but make the symbol denser."
        },
        "phone": {
          "type": "string",
          "description": "For type 'phone': the number to dial. Include the country code, for example +15551234567, or the code only works for people dialling from the same country."
        },
        "vcOrg": {
          "type": "string",
          "description": "For type 'vcard': organisation or company."
        },
        "vcUrl": {
          "type": "string",
          "description": "For type 'vcard': website URL."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Output format: 'png' (default) or 'svg'. SVG requires Flyn Pro."
        },
        "margin": {
          "type": "integer",
          "maximum": 32,
          "minimum": 4,
          "description": "Quiet zone in modules. Minimum and default is 4, as required by ISO/IEC 18004; smaller values are raised to 4 because a short quiet zone is the most common cause of a printed code failing to scan."
        },
        "vcName": {
          "type": "string",
          "description": "For type 'vcard': the person's full name. Required for a v-card."
        },
        "smsBody": {
          "type": "string",
          "description": "For type 'sms': the pre-filled message. The sender still has to press send."
        },
        "vcEmail": {
          "type": "string",
          "description": "For type 'vcard': email address."
        },
        "vcPhone": {
          "type": "string",
          "description": "For type 'vcard': phone number. Include the country code, for example +15551234567."
        },
        "wifiEnc": {
          "enum": [
            "WPA",
            "WEP",
            "nopass"
          ],
          "type": "string",
          "description": "For type 'wifi': security type. Defaults to WPA."
        },
        "smsPhone": {
          "type": "string",
          "description": "For type 'sms': the number to text. Include the country code."
        },
        "wifiPass": {
          "type": "string",
          "description": "For type 'wifi': the password. Omit for an open network."
        },
        "wifiSsid": {
          "type": "string",
          "description": "For type 'wifi': the network name."
        },
        "emailBody": {
          "type": "string",
          "description": "For type 'email': pre-filled message body."
        },
        "wifiHidden": {
          "type": "boolean",
          "description": "For type 'wifi': true if the network does not broadcast its SSID."
        },
        "emailSubject": {
          "type": "string",
          "description": "For type 'email': pre-filled subject line."
        }
      },
      "additionalProperties": false
    }
    arguments 133 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/c3e19ef03963bea8/badge.svg)](https://brick.blue/agent/c3e19ef03963bea8)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Own the domain? Prove it and the listing carries a verified badge here too: passport.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.