TinyURL MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TinyURL MCPshorten https://example.com/pricing to the alias pricing-page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TinyURL MCP
A local stdio Model Context Protocol server for managing individual TinyURL aliases through the authenticated TinyURL API. It supports exact-alias link creation and changes, archive and expiration controls, analytics reports and settings, raw analytics logs, and bounded typed bulk operations.
It requires Node.js 20 or newer and has zero runtime dependencies. All calls
use the fixed tinyurl.com domain and the fixed https://api.tinyurl.com API
origin; callers cannot supply an arbitrary host, path, or endpoint.
Requirements
Node.js 20 or newer.
A TinyURL API token with the permissions needed for the tools you enable.
A private directory for the configuration, token, and server state.
Related MCP server: Linkly MCP Server
Setup
From a checkout, no dependency installation is required:
npm testThe tests use Node's built-in test runner and provider mocks; they do not need a TinyURL token.
1. Create private files
Use real absolute paths in place of the /path/to/... placeholders. The token
file must be a regular file with mode 0600. The state directory and its
immediate parent must be real directories with mode 0700.
mkdir -p /path/to/private/tinyurl-state
chmod 700 /path/to/private /path/to/private/tinyurl-state
printf '%s\n' '<your-tinyurl-api-token>' > /path/to/private/tinyurl-api-token
chmod 600 /path/to/private/tinyurl-api-token
cp config.example.json /path/to/private/tinyurl-config.json
chmod 600 /path/to/private/tinyurl-config.json
$EDITOR /path/to/private/tinyurl-config.jsonThe token file may contain a raw token or JSON using either token or
apiToken:
{ "token": "<your-tinyurl-api-token>" }2. Configure the server
config.example.json uses placeholders only:
{
"tokenFile": "/path/to/private/tinyurl-api-token",
"stateDir": "/path/to/private/tinyurl-state",
"timeoutMs": 4000
}Field | Required | Description |
| Yes | Absolute path to the private token file. The file must be a regular, non-symlink file with mode |
| Yes | Absolute path to the private state directory. It must be a real, non-symlink directory with mode |
| No | API request timeout from |
The config file itself must be a regular, non-symlink file with mode 0600,
no larger than 64 KiB, and its path must be absolute. Do not commit the config
file, token file, or state directory.
3. Token permissions
TinyURL applies permissions to API tokens. The server uses one token, so grant the permissions required by the tools you expose. The tools declare these TinyURL token permissions:
TinyURL token permission | Tools |
|
|
No separate scope shown by TinyURL |
|
|
|
|
|
| Expiration fields in |
|
|
|
|
|
|
|
|
|
|
None required |
|
tinyurl_status checks only whether the token file and state directory appear
usable. It does not enumerate or validate token scopes. A token that lacks a
required permission is rejected by TinyURL when the relevant tool runs,
typically as an api_rejected error. Use least privilege and grant only the
permissions needed by the tool set you intend to use.
4. Register with an MCP client
Set TINYURL_CONFIG_FILE to the absolute path of the private config file. Use
Node.js 20 or newer to launch the server:
{
"mcpServers": {
"tinyurl": {
"command": "node",
"args": ["/path/to/tinyurl-mcp/main.mjs"],
"env": {
"TINYURL_CONFIG_FILE": "/path/to/private/tinyurl-config.json"
}
}
}
}The server communicates over stdin/stdout using MCP JSON-RPC. It is intended to be launched by an MCP client; running it directly starts a silent server that waits for protocol messages:
TINYURL_CONFIG_FILE=/path/to/private/tinyurl-config.json npm startTools
Every call is restricted to the fixed API origin. Link tools address one exact
tinyurl.com alias; the optional domain field, where accepted, may only be
tinyurl.com. Analytics reports are selected from a fixed set, and analytics
date ranges, pages, and bulk IDs are validated.
Link management
Tool | Access | Purpose |
| Write | Creates one short link for an exact URL, with an optional alias and expiration. A verified prior result may be reused for the same exact operation. |
| Read-only | Reads one exact alias and returns its destination and available metadata. |
| Write | Updates metadata or renames one exact alias. It cannot change the destination. |
| Write | Changes the destination of one exact alias, redirecting existing traffic to the new URL. |
| Destructive write | Permanently deletes one exact alias. |
| Write | Toggles, archives, or unarchives one exact alias and verifies the resulting archive state. |
| Write | Sets or clears the expiration of one exact alias. |
Analytics
Tool | Access | Purpose |
| Read-only | Reads one fixed analytics report: |
| Read-only, sensitive | Reads a bounded page of raw analytics JSON over a date range. |
| Write | Enables or disables analytics collection for one exact alias. |
| Write, privacy-sensitive | Enables or disables public analytics sharing for one exact alias. |
Bulk operations
Tool | Access | Purpose |
| Bulk write | Submits 1-100 typed |
| Read-only | Reads the status of one bulk request. |
| Read-only | Reads a bounded page of one bulk request report. |
Server status
Tool | Access | Purpose |
| Read-only | Checks whether the configuration, token, and state directory appear usable. Does not call TinyURL or write state. |
Inputs
tinyurl_createrequiresurland accepts optionalaliasandexpires_at.expires_atis an ISO 8601 date-time or duration accepted by TinyURL, ornullfor no expiration.tinyurl_readrequiresalias.tinyurl_updaterequiresaliasand at least one ofnew_alias,new_stats,new_tags,new_expires_at, ornew_description.tinyurl_change_destinationrequiresaliasandurl.tinyurl_deleterequiresalias.tinyurl_archiverequiresaliasandaction(toggle,archive, orunarchive).togglealways performs one toggle;archiveandunarchiveread the current state first and skip a no-op write.tinyurl_set_expirationrequiresaliasandnew_expires_at(an ISO 8601 date-time/duration, ornullto clear the expiration).tinyurl_analytics_reportrequiresreportandfrom. Optional filters areto,alias,tag, anddomain.intervalis valid only fortimelineand acceptsminute,hour,day,week, ormonth.regionis valid only forlocationand acceptsworldor a two-letter country code.tinyurl_analytics_raw_logsrequiresfromand accepts optionalto,alias,tag,domain,offset(0-50000), andlimit(1-1000, default 100). The report returnstotal,returned,hasMore, andnextOffset.tinyurl_analytics_statusrequiresaliasand booleanenabled.tinyurl_analytics_sharingrequiresaliasand booleanpublic.tinyurl_bulk_createrequires between 1 and 100 items.createrequiresurl;updaterequiresaliasand at least onenew_*change;changerequiresaliasandurl;delete,archive, andunarchiverequirealias. Items may include up to 20 primitivemetadatavalues.tinyurl_bulk_statusrequires a positive integerbulkRequestId.tinyurl_bulk_reportrequires a positive integerbulkRequestIdand acceptsoffset(0-100000) andlimit(1-500, default 100).tinyurl_statustakes no arguments.
Examples
Placeholder values only. Replace them with the exact values you intend to use.
Create an alias with an optional expiration:
{
"url": "https://example.com/page",
"alias": "example-alias",
"expires_at": "2030-01-01T00:00:00Z"
}Read an alias:
{ "alias": "example-alias" }Update metadata without changing the destination:
{
"alias": "example-alias",
"new_description": "Example description",
"new_tags": ["example-tag"]
}Change the destination of an existing alias:
{
"alias": "example-alias",
"url": "https://example.com/new-page"
}Archive an alias:
{
"alias": "example-alias",
"action": "archive"
}Set an expiration, or use null to clear it:
{
"alias": "example-alias",
"new_expires_at": "2030-01-01T00:00:00Z"
}Read a timeline analytics report:
{
"report": "timeline",
"from": "2026-01-01",
"to": "2026-01-31",
"interval": "day",
"alias": "example-alias"
}Read a page of raw analytics logs:
{
"from": "2026-01-01",
"to": "2026-01-31",
"alias": "example-alias",
"offset": 0,
"limit": 100
}Enable analytics collection and disable public sharing:
{ "alias": "example-alias", "enabled": true }{ "alias": "example-alias", "public": false }Submit a bulk batch:
{
"items": [
{
"operation": "create",
"url": "https://example.com/one",
"alias": "example-one"
},
{
"operation": "archive",
"alias": "example-two"
}
]
}Read bulk status and a report page:
{ "bulkRequestId": 12345 }{ "bulkRequestId": 12345, "offset": 0, "limit": 100 }Delete an alias permanently:
{ "alias": "example-alias" }Safety
Writes affect live TinyURL state. There is no dry-run mode.
Confirm before every write. Check the exact alias, URLs, expiration value, analytics flags, and every bulk item before calling a write tool. MCP clients should ask the user for explicit confirmation, with extra scrutiny for deletion, destination changes, expiration changes, public analytics, and bulk batches.
Deletion is permanent.
tinyurl_deleteanddeleteitems insidetinyurl_bulk_createremove short links and cannot be undone. Do not call them on production aliases without confirmation.Bulk batches can combine destructive operations. A single
tinyurl_bulk_createcall may contain up to 100 changes, includingchange,delete, andarchiveitems. Review the entire batch before submission.Destination changes redirect live traffic.
tinyurl_change_destinationandchangebulk items are security-sensitive. Verify the new URL before applying them.Archive and expiration change link availability. Confirm the intended archive action and expiration. Use
nullonly when the link should never expire.Analytics sharing can expose data.
tinyurl_analytics_sharingwithpublic: truemakes analytics publicly accessible. Review whether that is appropriate before changing it.Raw analytics logs are sensitive.
tinyurl_analytics_raw_logscan return IP addresses, referrers, devices, languages, countries, browser/OS data, and URLs. This is read-only data, but it should be handled as sensitive personal data and kept out of logs and source control.Ambiguous writes are not retried automatically. On a timeout, network failure, server error, or unreadable provider response, a write may have been applied. The server reports
write_outcome_unknownand leaves a private pending marker for the affected alias. Do not retry blindly or clear the state directory. Reconcile the exact alias first, then follow the reported next action.Bulk ambiguity blocks further bulk submissions. A bulk submission is serialized and checkpointed before it is sent. If its outcome is unknown, a private bulk barrier blocks all later bulk submissions until an operator reconciles the batch. An exact repeat of a verified submission returns the stored
bulkRequestId; do not submit a modified batch as a retry.Preserve the state directory. It contains durable operation receipts, alias locks, bulk receipts, and mutation-outcome markers. Losing or editing it can make a retry unsafe.
Fixed access boundary. The server does not accept a caller-supplied host, path, API endpoint, or analytics endpoint. Reports are selected from a fixed set, aliases and bulk IDs are validated, and there is no anonymous fallback. Destinations must be absolute
httporhttpsURLs.Protect the token and use least privilege. The token is read from the private token file and is sent only as a bearer credential to
https://api.tinyurl.com. Grant only the scopes needed for the tools you expose, and keep the token out of environment variables, command lines, logs, and source control.File modes are not a complete security boundary. Processes running as the same OS user may still access private files. Restrict host access, mount the configuration read-only where possible, or run the server under a separate identity.
Development
npm testThe implementation is plain ESM using Node.js built-in modules. There is no build step and no dependency installation step.
License
MIT © 2026 Marco Cecconi
Available Tools
15 toolstinyurl_analytics_raw_logsA
Read bounded raw analytics JSON over GET /analytics/raw/json. from is required; to, alias, domain and tag are passed to the vendor. offset and limit bound the returned page and the report discloses total, returned, hasMore and nextOffset. Token permission: Analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Optional report end; omit for now. | |
| tag | No | ||
| from | Yes | Report start, ISO 8601 date or date-time. | |
| alias | No | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| limit | No | ||
| domain | No | Fixed tinyurl.com domain. | |
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load well: it discloses the HTTP method (read-only GET), the required Analytics token permission, the bounded nature of the result set, and the pagination envelope (total, returned, hasMore, nextOffset). It stops short of rate limits or error behavior, but the safety and auth profile are clearly conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense clauses, front-loaded with the operation and endpoint, then the parameter contract, then the permission requirement. No sentence is redundant and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the return envelope's fields and pagination signals; no annotations exist, and it compensates with GET semantics and the token scope. Remaining gaps are minor (no error or rate-limit behavior), so it is nearly complete for a 7-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 57%, yet the description adds functional meaning for the undocumented parameters: offset/limit 'bound the returned page' and tag/alias/domain are 'passed to the vendor'. The required-ness of 'from' is reinforced. It does not explain format or interactions between filter and paging, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read bounded raw analytics JSON') plus the underlying endpoint, which unambiguously identifies a raw-log read operation. It implicitly contrasts with the aggregated tinyurl_analytics_report sibling via the word 'raw', but never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does say 'from is required' and that the other filters are 'passed to the vendor', which gives practical invocation context, and it names the required token permission. However there is no explicit when-to-use-this vs tinyurl_analytics_report guidance or any exclusion for when raw logs are inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_analytics_reportB
Read one fixed TinyURL analytics report over GET /analytics/*. report selects timeline, general, weekday, hour, top_sources, top_languages or location. from is required; to, interval, alias, domain, tag and location region are validated and bounded. Token permission: Analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Optional report end; omit for now. | |
| tag | No | Only links with this tag. | |
| from | Yes | Report start, ISO 8601 date or date-time (for example 2021-08-10T10:00:00-0800). | |
| alias | No | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| region | No | Location report only: world (default) or a two-letter ISO 3166-1 country code. | |
| report | Yes | Fixed report endpoint; no arbitrary path is accepted. | |
| interval | No | Timeline bucket size only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses the read-only GET nature, the required 'Analytics' token permission, and that optional parameters are 'validated and bounded'. It stops short of return shape, pagination, error behavior, or rate limits, which matter for an analytics endpoint with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the verb, resource, and endpoint. The dense phrasing ('to, interval, alias, domain, tag and location region are validated and bounded') is efficient, though slightly telegraphic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers endpoint, auth scope, required inputs, and validation, which is solid for a request-side definition. However, with eight parameters, no annotations, and no output schema, an agent still has no picture of what a report returns or how large it might be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all eight parameters are already documented in the schema, including the 'Timeline bucket size only' and 'Location report only' scoping notes. The description largely restates that scoping rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one fixed TinyURL analytics report over GET /analytics/*') and enumerates the seven concrete report types, which separates it from sibling tinyurl_analytics_raw_logs and tinyurl_analytics_status. It does not name those siblings explicitly, so differentiation is implicit rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes that report is the selector and that from is required, and it hints at per-report applicability ('location region'). But it never says when to pick this over tinyurl_analytics_raw_logs or tinyurl_analytics_status, nor what happens when an inapplicable parameter is supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_analytics_sharingA
Enable or disable public analytics sharing for one exact TinyURL through PATCH /analytics/sharing. Requires alias and public. Uses the durable alias mutation barrier and invalidates create receipts. Token permission: Update TinyURL or Analytics settings.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| public | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious traits: it is a mutation via PATCH, it goes through the durable alias mutation barrier, it invalidates create receipts, and it requires a specific token permission. Missing only failure/idempotency behavior and the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and target, then preconditions and side effects. Nothing is repeated and nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no annotations and no output schema, the description covers endpoint, permissions, and side effects well. It omits error cases and whether repeated calls are idempotent, which would matter for retry logic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and alias/domain are already documented inline, so the schema does most of the work. The description adds only 'Requires alias and public' and never explains the boolean's direction (public=true enables, false disables), which is the one semantic an agent could misread.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (enable/disable) and resource (public analytics sharing) scoped to 'one exact TinyURL', plus the underlying endpoint. This clearly separates it from siblings like tinyurl_analytics_report, tinyurl_analytics_status, and the bulk variants without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'one exact TinyURL' phrasing and the required alias/public pair give a clear picture of when this applies, and the stated token permission (Update TinyURL or Analytics settings) is a usable precondition. It stops short of naming an alternative tool or stating what to do when the alias doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_analytics_statusA
Enable or disable analytics collection for one exact TinyURL through PATCH /analytics/status. Requires alias and enabled. Uses the durable alias mutation barrier and invalidates create receipts. Token permission: Update TinyURL or Analytics settings.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| enabled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does so well: it names the HTTP method/path, states that it goes through a 'durable alias mutation barrier,' warns that it invalidates create receipts, and specifies the OAuth scope required. Missing only idempotency and reversibility/edge-case behavior (e.g., invalid alias, already-disabled state) to reach a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the operation stated first, then side effects, then auth. No filler; the mutation-barrier/receipt language is terse but earns its space as the only source of that behavioral fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param mutation with no annotations and no output schema, the description supplies the side effects, auth scope, and endpoint that an agent otherwise could not infer. It stops short of describing the response shape or what an invalid/disabled alias returns, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, just under the threshold where the schema fully carries the load. The description restates the two required params but adds no meaning: 'enabled' is undocumented in both places (what does false do to existing data?), and the fixed 'domain' parameter is never acknowledged.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (enable/disable) plus the exact resource (analytics collection on one TinyURL) and even the backing endpoint. It is clearly distinguishable from the analytics siblings (report, raw logs, sharing) which are all read/share oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one exact TinyURL' implies single-alias scope and implicitly rules out bulk usage, and the token permission line gives context on required auth. However, it never names an alternative or states when-not to call it (e.g., what to do for multiple aliases, or whether this affects reporting retroactively).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_archiveA
Toggle, archive or unarchive one exact TinyURL through PATCH /archive. The vendor body is only domain+alias, so the endpoint toggles; this tool reads the current state first and toggles only when archive/unarchive requires a change. action=toggle always sends one toggle. Verifies the resulting archived boolean. Token permission: Archive TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| action | Yes | toggle flips once; archive/unarchive are idempotent and skip the write when already in that state. | |
| domain | No | Fixed tinyurl.com domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the internal read-then-write sequence caused by the vendor's domain+alias-only body, states verification of the resulting archived boolean, and names the required token permission (Archive TinyURL). It stops short of describing behavior when the alias doesn't exist or what errors surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and resource before the explanation. The clause on action=toggle partially restates the schema's enum description, a minor redundancy, but otherwise every sentence carries information about behavior the agent would otherwise get wrong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description fills most of the gap by explaining the read-first/toggle/verify flow and the permission requirement. It omits what the returned payload looks like beyond the verified archived boolean and how failures (unknown alias) are reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already defines alias format, the three-value action enum with idempotency semantics, and the fixed domain. The description only adds backstory on why toggle vs archive differ at the API level, so it sits at the baseline rather than adding new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb set (toggle, archive, unarchive) applied to a precisely scoped resource (one exact TinyURL) and even names the underlying endpoint PATCH /archive. That distinguishes it cleanly from tinyurl_update, tinyurl_delete, and tinyurl_change_destination without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when each action mode applies: archive/unarchive skip the write when already in that state, while toggle always sends one toggle. It does not explicitly route away from siblings (e.g. use tinyurl_update for other field changes), so the when-not-to-use guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_bulk_createA
Submit one bounded batch through POST /bulk (1-100 typed create/update/change/delete/archive/unarchive items). The request is serialized, checkpointed to a durable barrier before sending, and keyed by the canonical payload. A crash or unknown outcome blocks all further bulk submissions until an operator reconciles the batch; an exact repeat of a verified submission returns the stored bulkRequestId. Token permission: Bulk Requests.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Typed bulk operations; fields match the vendor BulkRequestItem variants. | |
| domain | No | Fixed tinyurl.com domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses serialization, durable checkpointing, canonical payload keying, idempotent repeat behavior, and a strong failure mode where unknown outcomes block future submissions until reconciliation. It also states the required token permission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four dense sentences with zero filler, front-loading the operation scope before explaining reliability and permission behavior. Each sentence contributes distinct and necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex bulk mutation tool with no annotations or output schema, the description covers operational scope, failure semantics, idempotency, and permissions well. It does not explain the normal success response or direct the agent to tinyurl_bulk_status/tinyurl_bulk_report for results, which leaves a small contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the items and domain parameters thoroughly. The description adds useful context by restating the allowed operation types and batch size, but it does not add new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: submitting a bounded batch through POST /bulk. It names the exact item types (create/update/change/delete/archive/unarchive) and the 1-100 bound, making it straightforward to distinguish from single-operation siblings like tinyurl_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'bounded batch' and the 1-100 item limit, but the description never explicitly says when to use this tool versus tinyurl_create or how to check results via tinyurl_bulk_status/tinyurl_bulk_report. It gives operational constraints rather than direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_bulk_reportA
Read a bounded page of one bulk request report through GET /bulk/{bulkRequestId}/report. Requires a positive integer bulkRequestId; offset and limit bound the returned items and the response discloses total, returned, hasMore and nextOffset. Token permission: Bulk Requests.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| bulkRequestId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: 'Read' signals a non-mutating operation, the pagination behavior is disclosed (offset and limit bound returned items), and the required token permission ('Bulk Requests') is stated. It stops short of describing rate limits or error behavior for unknown/incomplete bulkRequestId values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense sentence group with zero filler; the resource and endpoint come first, followed by the parameter and permission facts. Slightly overloaded by cramming pagination response fields and permissions into one sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated report endpoint with no output schema, the description supplies what an agent needs: the path, required ID constraint, paging inputs, the response fields (total, returned, hasMore, nextOffset), and the auth scope. The main missing piece is its relationship to the sibling bulk status/report tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partly does: it explains that bulkRequestId must be a positive integer and that offset and limit bound the returned items. It omits the defaults (100/0) and the maximums (500, 100000) that the schema enforces and gives no meaning for offset beyond paging, so it does not fully cover the three params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a bounded page of one bulk request report') and ties it to the concrete endpoint GET /bulk/{bulkRequestId}/report, so an agent knows exactly what is fetched. It does not explicitly differentiate from the sibling tinyurl_bulk_status, leaving that distinction to be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'one bulk request report' plus the required bulkRequestId implies usage after a bulk request exists, and the token permission requirement is stated. However, there is no explicit guidance on when to use this rather than tinyurl_bulk_status or tinyurl_bulk_create, and no stated preconditions such as whether the bulk request must be complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_bulk_statusA
Read one bulk request status through GET /bulk/{bulkRequestId}/status. Requires a positive integer bulkRequestId. Token permission: Bulk Requests.
| Name | Required | Description | Default |
|---|---|---|---|
| bulkRequestId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does add real value by disclosing the HTTP method (GET, i.e. read-only) and the required token permission ('Bulk Requests'). It says nothing about error behavior for unknown IDs, whether status transitions are terminal, or any rate limits, which matters for a polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, with the parameter constraint and permission requirement following. Nothing is padded, though the endpoint path restates what the name already implies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema and no annotations, the description covers the mechanics (endpoint, ID, token scope) but leaves the return shape unspecified — an agent cannot know what status values to expect or how to interpret them. Adequate but with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema itself has no field description, so the description must compensate; it does by explaining that bulkRequestId is a positive integer identifying one bulk request, going slightly beyond the raw type/minimum constraint. It still does not say where the ID comes from (e.g., the tinyurl_bulk_create response).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one bulk request status') plus the underlying endpoint, which clearly separates it from tinyurl_bulk_create and tinyurl_bulk_report by name alone. It stops short of explicitly contrasting itself with those siblings, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the polling/status-check call for a bulk job, but the description never says when to use it versus tinyurl_bulk_report or tinyurl_status, nor mentions polling or terminal-state behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_change_destinationA
Change the destination of one exact TinyURL alias through PATCH /change. Requires alias and the exact new absolute http(s) url. Token permission: Update TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Exact new absolute http(s) destination URL, preserved byte-for-byte. | |
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it discloses the HTTP verb/endpoint and the required token permission, which help an agent reason about auth and mutation semantics. It does not say whether the previous destination is recoverable, whether the alias must already exist, or what a failure response looks like for a destructive-in-effect operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then requirements, then permission. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with complete schema coverage and no output schema, the description covers action, scope, required inputs, and auth. Only edge-case behavior (nonexistent alias, reversibility) is unaddressed, which is a minor gap given no annotations to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so alias format, url byte-preservation, and the fixed domain enum are already fully documented. The description only restates 'alias' and 'exact new absolute http(s) url', adding nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and field-level resource: changing the destination of one exact TinyURL alias, plus the underlying PATCH /change endpoint. The 'one exact alias' scoping is precise. It does not, however, explicitly distinguish itself from the sibling tinyurl_update, which an agent could reasonably read as also modifying an alias.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prerequisites are given (needs alias plus exact absolute http(s) url, and token permission 'Update TinyURL'), which implies when the call is valid. But there is no explicit when-to-use-this-vs-tinyurl_update guidance, and no statement about what happens if the alias does not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_createA
Create one exact TinyURL short link through POST /create. Requires url; domain is fixed to tinyurl.com; alias and expires_at are optional. Reuses durable operation results and never retries an ambiguous write blindly. Token permission: Create TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Exact absolute http(s) destination URL, preserved byte-for-byte. | |
| alias | No | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| expires_at | No | ISO 8601 date-time or duration accepted by TinyURL, or null for never. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the required token permission ('Create TinyURL'), the idempotent/durable-result reuse behavior, and the no-blind-retry policy on ambiguous writes. It does not state what happens on alias collision or rate limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and endpoint, then requirements, then behavioral caveats. Every clause carries information an agent cannot get from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no annotations and no output schema, it covers method, required inputs, auth, and idempotency semantics well. Only the shape of the returned link object is unaddressed, which is a minor gap given the simplicity of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already fully documented; the description only restates that url is required and domain is fixed, which duplicates the single-value enum. No extra format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create one exact TinyURL short link') plus the underlying endpoint POST /create. The word 'one exact' scopes it against tinyurl_bulk_create, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The single-link framing implicitly excludes bulk creation, and 'Reuses durable operation results and never retries an ambiguous write blindly' tells the agent how to behave on retry. It stops short of naming siblings for follow-up operations (update, change_destination, set_expiration), so the when-not guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_deleteB
Delete one exact TinyURL alias through DELETE /alias/{domain}/{alias}. Requires alias; domain is fixed to tinyurl.com. Token permission: Delete TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden; it does disclose the auth requirement (Delete TinyURL token permission) and the exact-match, single-alias scope, which is real value. However, it never says the deletion is permanent/irreversible or what the response looks like, which are the critical behavioral facts for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the action and endpoint, then appends the permission constraint. Nothing is wasted, though the endpoint path is arguably redundant with the prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, annotation-free mutation with no output schema, the description covers identity, scope, and auth, but leaves out irreversibility, error behavior for missing aliases, and any return value. An agent could invoke it correctly but not predict its consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented there (alias format 1-30 chars, domain enum fixed to tinyurl.com). The description only restates required-ness and the fixed domain, adding no syntax or semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete one exact TinyURL alias') plus the underlying endpoint, so the agent knows precisely what happens. It separates cleanly from tinyurl_create/read/update, but it never contrasts itself with the sibling tinyurl_archive, which is the most likely confusion point for a destructive operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires alias; domain is fixed to tinyurl.com' plus the required token permission ('Delete TinyURL') tells the agent the preconditions for calling it. There is no guidance on when to prefer tinyurl_archive instead of a hard delete, or what to do when the alias does not exist, so usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_readB
Read one exact TinyURL alias through GET /alias/{domain}/{alias}. Requires alias; domain is fixed to tinyurl.com. Token permission: Read TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does disclose useful behavior: it is a GET-based single-record read and it requires the 'Read TinyURL' token permission, which is real operational context. It does not say what happens on a missing/expired alias, whether the response includes metadata or only the destination, or anything about rate limits — notable gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and endpoint, then the constraint and permission. No filler, though the endpoint path partially duplicates information the schema already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, one required, no nesting), but there is no output schema and no annotations, so the description should ideally say what a successful read returns and how a nonexistent alias is signaled. Auth/permission and fixed-domain context are present; return-value and error semantics are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are self-documented in the schema (alias format 1-30 chars, domain enum fixed to tinyurl.com). The description restates the same facts ('requires alias', 'domain is fixed') without adding syntax, case-sensitivity, or format meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Read one exact TinyURL alias' — plus the underlying endpoint GET /alias/{domain}/{alias}, which makes the single-record scope unambiguous against bulk/analytics siblings. It never names a sibling explicitly, so differentiation is inferred from the verb rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires alias; domain is fixed to tinyurl.com' gives preconditions but no when-to-use vs alternatives guidance (e.g., vs tinyurl_analytics_report or tinyurl_bulk_status). Usage is implied by 'read one exact alias' rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_set_expirationB
Set or clear one exact TinyURL expiration through PATCH /update using new_expires_at, then verify the returned or re-read expiry. Requires alias and new_expires_at (string or null). Token permission: Update TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| new_expires_at | Yes | ISO 8601 date-time or duration accepted by TinyURL, or null for never. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the endpoint (PATCH /update), required token permission ('Update TinyURL'), and a verification step after the write. However, it does not describe mutation side effects, error behavior if the alias is missing, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and efficient, using two sentences with no wasted framing. There is minor redundancy in restating required parameters already covered by the schema, but overall it stays concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must compensate. It explains the operation and verification step but does not describe the return payload or error cases, leaving gaps for an agent invoking a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description repeats the two required parameters but adds no extra semantics, and it does not mention the domain parameter at all beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: setting or clearing TinyURL expiration via PATCH /update. It is clearly about expiration rather than general update, though it does not explicitly distinguish itself from the sibling tinyurl_update tool beyond the expiration focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when setting or clearing an expiration, but it does not explicitly state when to use this versus tinyurl_update or other sibling tools. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_statusA
Read-only check for TinyURL connector configuration, token and private state directory. Does not create a link or write state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full load and it does disclose the critical trait: no link is created and no state is written, i.e. zero side effects. It does not say whether it performs a network/token validation call or what it reports when the token or directory is missing, so a little behavioral surface is left uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler. The positive scope statement comes first and the negative/guardrail statement second, which is the right front-loading for a status check.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument status tool with no output schema, the description gives the agent enough to know it is safe and non-mutating. It could note what a successful vs. failed check looks like (since no output schema exists), which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is an empty object, so there is nothing for the description to add at the parameter level. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete read-only check covering exactly what it inspects: connector configuration, token, and the private state directory. The closing clause ('Does not create a link or write state') explicitly separates it from the sibling set, all of which are link-mutating operations. An agent can route to it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only/no-write framing makes the usage context (verify setup or auth before invoking tinyurl_create or other link tools) clear by contrast. It stops short of an explicit 'call this first when configuration is unknown' instruction or naming a specific alternative, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinyurl_updateA
Update metadata or rename one exact TinyURL alias through PATCH /update. Requires alias and at least one new_* field. Never changes the destination; use tinyurl_change_destination. Token permission: Update TinyURL.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| domain | No | Fixed tinyurl.com domain. | |
| new_tags | No | ||
| new_alias | No | Exact alias: 1-30 letters, digits, underscore or hyphen. | |
| new_stats | No | Enable or disable click analytics collection. | |
| new_expires_at | No | ISO 8601 date-time or duration accepted by TinyURL, or null for never. | |
| new_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries real weight: it names the HTTP method, states the at-least-one-new-field rule, discloses the required token permission ("Update TinyURL"), and rules out destination mutation. It does not say whether the response echoes the updated record or whether new_tags replaces versus merges the existing tag set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler: what it does, what it requires, what it does not do plus the alternative, then the permission. The routing hint is front-loaded where an agent will see it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and no output schema, the description covers the essentials: endpoint, precondition, permission, and the main sibling boundary. Remaining gaps are the replace-vs-merge semantics of new_tags and the overlap with tinyurl_set_expiration for new_expires_at, both of which could cause misfires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema marks only alias as required, but the description supplies the critical cross-parameter constraint ("at least one new_* field") that the schema does not encode, and "rename" ties new_alias to its purpose. This is meaning that exists nowhere in the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update metadata / rename) and a specific resource (one exact TinyURL alias), plus the underlying endpoint PATCH /update. It also explicitly distinguishes itself from tinyurl_change_destination, so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion ("Never changes the destination; use tinyurl_change_destination") and a precondition (alias plus at least one new_* field). The gap is that new_expires_at overlaps with the sibling tinyurl_set_expiration, and the description never says which to prefer, nor references tinyurl_read before updating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v1.0.0- First observed
tinyurl_analytics_raw_logs - First observed
tinyurl_analytics_report - First observed
tinyurl_analytics_sharing - First observed
tinyurl_analytics_status - First observed
tinyurl_archive - First observed
tinyurl_bulk_create - First observed
tinyurl_bulk_report - First observed
tinyurl_bulk_status - First observed
tinyurl_change_destination - First observed
tinyurl_create - First observed
tinyurl_delete - First observed
tinyurl_read - First observed
tinyurl_set_expiration - First observed
tinyurl_status - First observed
tinyurl_update
TDQS
Scored across 15 tools
Each tool has a clearly distinct target action: create/read/update/delete alias operations are separated, and update explicitly excludes destination and expiration changes. Analytics report vs raw logs vs status/sharing are distinct, and bulk create/status/report are cleanly scoped. No pair appears interchangeable.
All tools use a consistent tinyurl_ prefix followed by snake_case action/resource names. The naming pattern is predictable throughout, including analytics and bulk subdomains.
Fifteen tools fit the server's scope well: core alias lifecycle, analytics administration, bulk operations, and connector status. Each tool maps to a meaningful operation rather than redundant surface.
The tool surface covers TinyURL alias creation, reading, metadata updates, destination changes, deletion, archiving, expiration, analytics collection/sharing/reporting, and bulk operations with status/report retrieval. No obvious lifecycle or administrative gap is apparent for the stated purpose.
Maintenance
Related MCP Connectors
Create and manage TinyURL short links: aliases, destinations, tags, archive, click analytics.
Create and manage short links, track clicks, and automate URL management
Create branded short links and QR codes, and pull click analytics by country, device and referrer.
Short links with branded domains, cookie-less analytics and QR codes. Sign in with OAuth or a token
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to create, manage, and analyze short URLs through complete URL shortening functionality. Supports batch operations, custom domains, click statistics, and comprehensive link management.66 npm1MIT
- AlicenseAqualityAmaintenanceEnables interaction with Linkly's URL shortener and link management platform. Supports creating and managing short links, viewing analytics, configuring custom domains and webhooks, and exporting click data.2025 npm1MIT
- AlicenseAqualityBmaintenanceEnables users to shorten links, bulk create URLs, generate QR codes, manage and disable links, and retrieve click analytics from MCP clients like Claude, ChatGPT, Cursor, and n8n.9MIT
- AlicenseBqualityBmaintenanceEnables users to shorten links, bulk-create URLs, generate QR codes, and retrieve click analytics through MCP clients such as Claude, ChatGPT, Cursor, and n8n.936 npmMIT