_ registry / mcp streamable-http · checked 11h ago

tinyurl-mcp

https://tinyurl.usefulapi.io

Registry code: 1f0020b870204fb1

api record

Tools for TinyURL, hosted by usefulapi.io. Read-only tools never change data; ask the user before a tool that creates, changes or deletes TinyURL data. Free plan: 100 tool calls per month. Run tinyurl_usage_status to see the calls used this month. If the user asks for something none of these tools can do, tell the user and, with their OK, run tinyurl_request_feature to record the request. Pro (unlimited calls, $9/month or $90/year): when the user wants more calls or reaches the limit, run tinyurl_upgrade; it returns a Stripe Checkout link for the user to open. tinyurl_cancel_subscription…

endpoint
https://tinyurl.usefulapi.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is tinyurl-mcp live?
Yes — it answered the hub's last check (checked 11h ago). It answered 100% of checks over the last 30 days.
Is tinyurl-mcp free to use?
No — it asks for a key or a login before it will serve.
What tools does tinyurl-mcp have?
8 tools: tinyurl_update_link, tinyurl_count_links, tinyurl_list_links, tinyurl_get_analytics, tinyurl_get_link, tinyurl_create_link, tinyurl_change_destination, tinyurl_set_link_archived.
Is tinyurl-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
291ms

last good check

priced tools
0

of 8 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 8 tools
8 auth-required 8 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.

  • tinyurl_update_link auth-required never probed

    WRITE: change an existing short link's alias, tags, expiry, description or click-analytics switch. At least one new_* field is required. DESTRUCTIVE for what it replaces: new_tags REPLACES all existing tags, and renaming the alias (new_alias) makes the old short URL stop working. The destination URL is changed with tinyurl_change_destination. PATCH /update.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alias"
      ],
      "properties": {
        "alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "The link's current alias."
        },
        "domain": {
          "type": "string",
          "default": "tinyurl.com",
          "maxLength": 253,
          "minLength": 3,
          "description": "The short link's domain: tinyurl.com (default) or one of the account's branded domains."
        },
        "new_tags": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 45,
            "minLength": 1
          },
          "maxItems": 50,
          "description": "The complete new tag list; replaces the existing tags (an empty list removes them)."
        },
        "new_alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "New alias (5-30 characters on tinyurl.com). The old short URL stops working."
        },
        "new_stats": {
          "type": "boolean",
          "description": "true/false = turn click-analytics collection on/off."
        },
        "new_expires_at": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?|P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?)$",
              "description": "ISO 8601 date-time (or a duration such as P10DT4H)."
            },
            {
              "type": "null"
            }
          ],
          "description": "New ISO 8601 expiry; null = never expires."
        },
        "new_description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000,
              "minLength": 3
            },
            {
              "type": "null"
            }
          ],
          "description": "New description (null clears it)."
        }
      }
    }
    arguments 68 lines
  • tinyurl_count_links auth-required 11h ago

    How many short links the account has (active or archived), optionally within a creation date range or filtered by alias or tag. GET /urls/{type}/count.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "Only links created before this ISO 8601 date or date-time."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "Only links created after this ISO 8601 date or date-time."
        },
        "type": {
          "enum": [
            "available",
            "archived"
          ],
          "type": "string",
          "default": "available",
          "description": "available = active links, archived = archived links."
        },
        "search": {
          "type": "string",
          "pattern": "^(alias|tag):.{1,100}$",
          "description": "Filter: alias:<text> or tag:<text>."
        }
      }
    }
    arguments 30 lines
  • tinyurl_list_links auth-required 11h ago

    List the account's short links (type available = active, archived = archived), optionally created within a date range or filtered by alias or tag. The TinyURL API does not page this list: at most `limit` items (default 50, max 200) are returned together with the total, so narrow with from/to/search when truncated is true. GET /urls/{type}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "Only links created before this ISO 8601 date or date-time."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "Only links created after this ISO 8601 date or date-time."
        },
        "type": {
          "enum": [
            "available",
            "archived"
          ],
          "type": "string",
          "default": "available",
          "description": "available = active links, archived = archived links."
        },
        "limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Maximum links to return (default 50)."
        },
        "search": {
          "type": "string",
          "pattern": "^(alias|tag):.{1,100}$",
          "description": "Filter: alias:<text> or tag:<text>."
        }
      }
    }
    arguments 36 lines
  • tinyurl_get_analytics auth-required 11h ago

    Aggregated click analytics for the account, or for one link (alias) or one tag, from a start date. report: timeline (clicks over time; interval minute/hour/day/week/month), general (browsers, operating systems, devices), weekday and hour (popularity), top_sources (referrers), top_languages, location (countries, or the regions of one country via region = ISO 3166 alpha-2 code). Which reports are available depends on the account's TinyURL plan. Visitor-level raw logs are not exposed. GET /analytics/*.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "report",
        "from"
      ],
      "properties": {
        "to": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "End of the report (default: now)."
        },
        "tag": {
          "type": "string",
          "maxLength": 45,
          "minLength": 1,
          "description": "Only links with this tag."
        },
        "from": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$",
          "description": "Start of the report, ISO 8601 date or date-time (required)."
        },
        "alias": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "Only this short link, written domain/alias, e.g. tinyurl.com/myalias."
        },
        "region": {
          "type": "string",
          "pattern": "^([A-Za-z]{2}|world)$",
          "description": "location report only: world (default, lists countries) or a country code such as US (lists its regions)."
        },
        "report": {
          "enum": [
            "timeline",
            "general",
            "weekday",
            "hour",
            "top_sources",
            "top_languages",
            "location"
          ],
          "type": "string",
          "description": "Which analytics report."
        },
        "interval": {
          "enum": [
            "minute",
            "hour",
            "day",
            "week",
            "month"
          ],
          "type": "string",
          "description": "Bucket size, timeline report only."
        }
      }
    }
    arguments 61 lines
  • tinyurl_get_link auth-required never probed

    Details of one short link: destination URL, tiny_url, tags, created/expires dates, archived/deleted flags, analytics settings, total hits and owner. GET /alias/{domain}/{alias}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alias"
      ],
      "properties": {
        "alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "The alias, the part after the domain: https://tinyurl.com/<alias>."
        },
        "domain": {
          "type": "string",
          "default": "tinyurl.com",
          "maxLength": 253,
          "minLength": 3,
          "description": "The short link's domain: tinyurl.com (default) or one of the account's branded domains."
        }
      }
    }
    arguments 22 lines
  • tinyurl_create_link auth-required never probed

    WRITE: create ONE new short link for an http(s) destination URL. Optional custom alias (5-30 characters on tinyurl.com), domain (tinyurl.com or a branded domain), tags, expiry and description. Not idempotent: calling it again without an alias creates another link. Returns the new tiny_url. POST /create.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 2048,
          "minLength": 1,
          "description": "The long destination URL (absolute, http:// or https://)."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 45,
            "minLength": 1
          },
          "maxItems": 50,
          "description": "Tags to group the link (each up to 45 characters)."
        },
        "alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "Custom alias (5-30 characters on tinyurl.com, 1+ on a branded domain). A random one is generated when omitted."
        },
        "domain": {
          "type": "string",
          "maxLength": 253,
          "minLength": 3,
          "description": "Domain for the new link: tinyurl.com (default) or one of the account's branded domains."
        },
        "expires_at": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^(\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?|P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?)$",
              "description": "ISO 8601 date-time (or a duration such as P10DT4H)."
            },
            {
              "type": "null"
            }
          ],
          "description": "ISO 8601 expiry; omit or null for a link that never expires."
        },
        "description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000,
              "minLength": 3
            },
            {
              "type": "null"
            }
          ],
          "description": "Internal description of the link (3-1000 characters)."
        }
      }
    }
    arguments 63 lines
  • tinyurl_change_destination auth-required never probed

    WRITE: point an existing short link at a new destination. DESTRUCTIVE: everyone who opens the short link is sent to the new URL from now on and the old destination is overwritten. The new URL must be http(s). PATCH /change.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alias",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 2048,
          "minLength": 1,
          "description": "The new destination URL (absolute, http:// or https://)."
        },
        "alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "The link's alias."
        },
        "domain": {
          "type": "string",
          "default": "tinyurl.com",
          "maxLength": 253,
          "minLength": 3,
          "description": "The short link's domain: tinyurl.com (default) or one of the account's branded domains."
        }
      }
    }
    arguments 29 lines
  • tinyurl_set_link_archived auth-required never probed

    WRITE: archive an active short link (archived = true) or restore an archived one (archived = false). Archiving moves the link to the archived list; nothing is deleted and it can be restored. The API's archive endpoint is a toggle, so the link's current state is read first and nothing is changed when it already matches, and the state afterwards is checked. Do not run two archive calls for the same link at once. GET /alias/{domain}/{alias}, then PATCH /archive.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alias",
        "archived"
      ],
      "properties": {
        "alias": {
          "type": "string",
          "maxLength": 30,
          "minLength": 1,
          "description": "The alias, the part after the domain: https://tinyurl.com/<alias>."
        },
        "domain": {
          "type": "string",
          "default": "tinyurl.com",
          "maxLength": 253,
          "minLength": 3,
          "description": "The short link's domain: tinyurl.com (default) or one of the account's branded domains."
        },
        "archived": {
          "type": "boolean",
          "description": "true = archive the link, false = unarchive it."
        }
      }
    }
    arguments 27 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.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 1f0020b870204fb1.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/1f0020b870204fb1/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/1f0020b870204fb1/badge.svg)](https://brick.blue/agent/1f0020b870204fb1?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ 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.

_ also on usefulapi.io 131 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

123 more sit on this domain. All of them.