Create and manage TinyURL short links: aliases, destinations, tags, archive, click analytics.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The new destination URL (absolute, http:// or https://).
The link's alias.
The short link's domain: tinyurl.com (default) or one of the account's branded domains.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
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.
| Argument | Type | Description |
|---|---|---|
| url* | string | The new destination URL (absolute, http:// or https://). |
| alias* | string | The link's alias. |
| domain | string | The short link's domain: tinyurl.com (default) or one of the account's branded domains. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| to | string | Only links created before this ISO 8601 date or date-time. |
| from | string | Only links created after this ISO 8601 date or date-time. |
| type | string | available = active links, archived = archived links. |
| search | string | Filter: alias:<text> or tag:<text>. |
{
"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>."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| url* | string | The long destination URL (absolute, http:// or https://). |
| tags | array | Tags to group the link (each up to 45 characters). |
| alias | string | Custom alias (5-30 characters on tinyurl.com, 1+ on a branded domain). A random one is generated when omitted. |
| domain | string | Domain for the new link: tinyurl.com (default) or one of the account's branded domains. |
| expires_at | any | ISO 8601 expiry; omit or null for a link that never expires. |
| description | any | Internal description of the link (3-1000 characters). |
{
"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)."
}
}
}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/*.
| Argument | Type | Description |
|---|---|---|
| to | string | End of the report (default: now). |
| tag | string | Only links with this tag. |
| from* | string | Start of the report, ISO 8601 date or date-time (required). |
| alias | string | Only this short link, written domain/alias, e.g. tinyurl.com/myalias. |
| region | string | location report only: world (default, lists countries) or a country code such as US (lists its regions). |
| report* | string | Which analytics report. |
| interval | string | Bucket size, timeline report only. |
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}.
| Argument | Type | Description |
|---|---|---|
| alias* | string | The alias, the part after the domain: https://tinyurl.com/<alias>. |
| domain | string | The short link's domain: tinyurl.com (default) or one of the account's branded domains. |
{
"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."
}
}
}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}.
| Argument | Type | Description |
|---|---|---|
| to | string | Only links created before this ISO 8601 date or date-time. |
| from | string | Only links created after this ISO 8601 date or date-time. |
| type | string | available = active links, archived = archived links. |
| limit | integer | Maximum links to return (default 50). |
| search | string | Filter: alias:<text> or tag:<text>. |
{
"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>."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| alias* | string | The alias, the part after the domain: https://tinyurl.com/<alias>. |
| domain | string | The short link's domain: tinyurl.com (default) or one of the account's branded domains. |
| archived* | boolean | true = archive the link, false = unarchive it. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| alias* | string | The link's current alias. |
| domain | string | The short link's domain: tinyurl.com (default) or one of the account's branded domains. |
| new_tags | array | The complete new tag list; replaces the existing tags (an empty list removes them). |
| new_alias | string | New alias (5-30 characters on tinyurl.com). The old short URL stops working. |
| new_stats | boolean | true/false = turn click-analytics collection on/off. |
| new_expires_at | any | New ISO 8601 expiry; null = never expires. |
| new_description | any | New description (null clears it). |
{
"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."
}
}
}{
"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)."
}
}
}