短.在线
Server Details
Short links + QR codes for AI agents (EN/中文). Public beta. Docs public; most tools need an account.
- Status
- Healthy
- Uptime
- 99.0% over 50 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 9 tools
Each tool targets a distinct action: create one link vs. bulk create, read one link vs. list, public resolve vs. owner-scoped get, QR generation, update, disable, and registration fallback. Descriptions actively cross-reference the nearest neighbor (e.g. get_link points to resolve_short_url for public lookups), leaving little room for misselection.
Predominantly consistent snake_case verb_noun pattern (get_link, get_links, update_link, disable_link, resolve_short_url), with clean singular/plural pairs. Minor deviations: create_qr uses 'create' while link creation uses 'shorten', and begin_registration is a lifecycle-style verb, but the set remains highly readable.
Nine tools is well within a healthy range and every tool maps to a real operation in a URL shortener (single/bulk create, read, list, update, disable, resolve, QR, registration fallback). No filler or redundant entries.
Core lifecycle is covered (create, read, list, update title/destination, soft-disable, public resolve, QR), but there is no hard delete, no re-enable path after disabling, and no click/usage analytics despite that being central to a shortener. These are notable gaps an agent could not work around.
Available Tools
9 toolsbegin_registrationConnect account · 浏览器注册入口(短.在线)AInspect
客户端无法启动 OAuth 时的后备入口。返回浏览器注册链接。不创建账号,不接收密码,也不代用户同意条款。 Fallback when the client cannot start OAuth. Returns a browser registration link. Does not create an account, accept a password, or accept terms.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Blank is en. Does not rewrite URLs, translate parameter names, or use location. Rejects Traditional Chinese, EN, ZH-CN, and bare zh. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare hint flags (readOnlyHint=false, idempotentHint=false); the description adds the non-obvious behavioral facts that no account, password, or terms consent is handled here. It does not say whether a server-side registration session is created or how long the returned link stays valid, which matters given readOnlyHint=false and idempotentHint=false.
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?
Sentences are short and the fallback condition is front-loaded, but the entire text is duplicated verbatim in Chinese and English, doubling length without adding information for a given reader. The redundant clauses about password and terms are useful but slightly repetitive with 'does not create an account'.
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?
An output schema exists, so return-value detail is unnecessary, and the description covers both what is returned and what the tool deliberately does not do. Adequate for a one-optional-parameter tool; only link lifetime / single-use behavior is missing.
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 the single 'locale' parameter has an unusually detailed enum description including accepted and rejected values. The description adds nothing about locale, so 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: returns a browser registration link and serves as a fallback when OAuth cannot start. The negative clauses ('does not create an account, accept a password, or accept terms') further pin down what the tool actually is. Siblings (shorten_url, get_link, create_qr) are unrelated URL utilities, so no sibling differentiation is needed.
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 a clear triggering condition: use as a fallback when the client cannot start OAuth. That is enough context to choose it, though no explicit alternative is named (e.g. the primary OAuth tool it backs up), 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.
create_qrQR image · 二维码图片(短.在线)AIdempotentInspect
为已有短链返回二维码。需已注册的所有者。不新建短链,不抓取目标地址。编码带 ?s=qr 的 ASCII 短链,与 GET /v1/links/{id}/qr 相同。image_url 不是 API 密钥、OAuth 令牌或会话。 QR for an existing short link. Registered owner required. Does not create a link or fetch the destination. Encodes the ASCII short link with ?s=qr, same as GET /v1/links/{id}/qr. image_url is not an API key, OAuth token, or session.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Not with short_url | |
| size | No | PNG side. | |
| format | No | Default png 512. svg is not an image block and ignores size. | |
| short_url | No | Not with id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, destructive, idempotent, and open-world hints. The description adds useful behavior beyond annotations: owner authentication, no link creation, no destination fetch, the exact encoded target (`?s=qr`), endpoint equivalence, and a security note that `image_url` is not a credential. It does not explain why `readOnlyHint` is false or describe any side effects, so it is strong but not complete.
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 purpose and constraints are front-loaded, and every substantive sentence adds a restriction or security detail. However, the full content is duplicated in Chinese and English, which makes it less concise than it could be.
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?
An output schema exists, so return-value details are not required in the description, and the input schema covers all four parameters. The description supplies the important auth, no-side-effect, encoding, and security context, though it leaves the non-read-only hint somewhat unexplained.
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 documents the `id`/`short_url` exclusivity, `size`, and `format` behavior. The description adds the encoded target format but does not add parameter-level guidance 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 it returns a QR code for an existing short link, explicitly says it does not create a link or fetch the destination, and identifies the equivalent GET endpoint. This clearly separates it from siblings such as shorten_url, get_link, and resolve_short_url.
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?
Specifies the key preconditions: the short link must already exist and a registered owner is required. It also states when not to use it (not for creating links or fetching destinations), but it does not name sibling tools or explicitly route the agent to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_linkDisable link · 停用短链(短.在线)ADestructiveIdempotentInspect
停用你拥有的短链,停用后短链和二维码将停止跳转。需要 links:disable 与已验证邮箱。幂等。 Disable a link you own: its short link and QR code stop redirecting. Requires links:disable and a verified email. Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Short code or link id for a link you own. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | Yes | |
| code | No | |
| tool | No | |
| type | No | |
| error | No | |
| state | No | |
| title | No | |
| feature | No | |
| message | No | |
| retryable | No | |
| short_url | No | |
| created_at | No | |
| expired_at | No | |
| request_id | Yes | |
| status_url | No | |
| destination | No | |
| resend_path | No | |
| short_url_ascii | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the authorization scope, the verified-email requirement, and precisely what is affected (both short link and QR stop redirecting). It does repeat idempotency, which idempotentHint already declares, and does not say whether disabling is reversible via update_link, keeping it below 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?
The content is front-loaded with purpose, then requirements, then behavior, and every sentence carries information. The bilingual duplication doubles the length and the idempotency sentence restates what annotations already declare, a minor redundancy.
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 an output schema present and rich annotations covering safety and idempotency, the description supplies the remaining essentials: ownership, scope, verified email, and the user-visible effect. Only reversibility/enable-path information is missing for a destructive operation.
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 the single id parameter is already documented as a short code or link id. The description only reinforces the ownership constraint ('a link you own') and adds no format or edge-case detail 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?
The description names a specific verb and resource ('disable a link you own') and states the concrete effect (short link and QR code stop redirecting), which implicitly separates it from update_link. It does not explicitly name a sibling to contrast with, so it falls just short of 5.
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 states clear preconditions for use: the caller must own the link, hold the links:disable scope, and have a verified email. It gives no explicit when-not or alternative-path guidance (e.g., use update_link to change settings instead), so usage context is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linkGet link · 查询单条链接(短.在线)ARead-onlyIdempotentInspect
按 id 查询当前授权账号拥有的链接。需要已注册账号。公开状态查询用 resolve_short_url。 Fetch one owned link by id. A registered account is required. For a public status check, use resolve_short_url.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Short code or link id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful context beyond that: ownership scoping to the current authorized account and the registered-account authentication requirement. It does not discuss not-found behavior, but the output schema reduces that burden.
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 wastes little space, but the Chinese and English text duplicate the same information. That duplication is understandable for a bilingual tool but prevents a top score for conciseness.
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?
Given the simple one-parameter read operation, rich annotations, full schema coverage, and the presence of an output schema, the description contains everything an agent needs: purpose, ownership scope, auth requirement, and the alternative for public checks.
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?
There is only one parameter and schema description coverage is 100%, with the schema itself defining 'id' as 'Short code or link id.' The description reinforces that the lookup is by id and owned by the account but adds no syntax or format details 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 ('Fetch one owned link by id') and clearly scopes it to links owned by the current authorized account. It distinguishes itself from the sibling resolve_short_url by naming it as the public-status alternative.
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?
Explicitly states the prerequisite ('A registered account is required') and the alternative for a different use case ('For a public status check, use resolve_short_url'). This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linksList links · 列出链接(短.在线)ARead-onlyIdempotentInspect
列出当前账号拥有的短链。cursor 与 limit 同 GET /v1/links。需要 links:read。 List links this account owns. cursor and limit match GET /v1/links. Requires links:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, an integer from 1 to 100. Default 50. Same as GET /v1/links. | |
| cursor | No | Page cursor from next_cursor. Omit for the first page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| code | No | |
| tool | No | |
| type | No | |
| error | No | |
| items | Yes | |
| title | No | |
| feature | No | |
| message | No | |
| retryable | No | |
| request_id | Yes | |
| next_cursor | Yes | |
| resend_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by stating the required OAuth scope (links:read) and by pinning pagination semantics to GET /v1/links, which tells an agent the paging contract matches a known REST endpoint. It stops short of describing default page size or ordering, but the schema covers the default.
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?
Front-loaded with the resource scope, which is correct. However, the entire content is duplicated verbatim in Chinese and English, so roughly half the text is redundant for any given reader; the scope and pagination facts could be expressed in a single sentence per language without loss.
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?
This is a simple two-optional-parameter read tool with an output schema, so return values need not be explained. Scope, auth requirement, and pagination source are all present. Only the absence of sibling routing guidance keeps it from being fully complete.
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 both parameters already document their range, default, and cursor origin from next_cursor. The description's 'cursor and limit match GET /v1/links' adds a useful cross-reference for agents that know the REST contract, but nothing about the parameters that isn't already in the schema. Baseline 3 applies when the schema carries the load.
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+resource with scope: list short links owned by the current account. That scope phrase separates it from get_link (single link) and resolve_short_url, though neither sibling is named explicitly. An agent can identify what it returns 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?
Gives a concrete prerequisite (requires links:read) but no explicit routing guidance such as 'use get_link for a single link by id' or 'use resolve_short_url to expand a slug'. Usage is implied by the plural/enumeration nature rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_short_urlInspect short link · 查询本站短链(短.在线)ARead-onlyIdempotentInspect
查询本站短码或本站短链的已保存状态;仅 active 时返回目标地址。无需账号。不查询其他短链服务;结果不是安全结论。 Look up a 短.在线 code or short URL. Returns saved state, and the destination only when active. No account required. Does not look up other shorteners. Not a security verdict.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Not with code. | |
| code | No | Not with url. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real context: no authentication needed, the destination is suppressed unless the link is active, and the result is explicitly 'not a security verdict'. It does not enumerate the possible inactive states, but the presence of an output schema covers the return 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?
Front-loaded with the core action and the key conditional (destination returned only when active). The bilingual duplication roughly doubles the length, which is defensible for the audience but is still repeated content rather than new 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?
With annotations, full schema coverage, and an output schema, the description supplies what structure cannot: the active-only destination rule, the no-account fact, and the interpretation caveat. Only the set of non-active states is left unexplained, which the output schema plausibly covers.
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 mutual exclusion ('Not with code.' / 'Not with url.') lives in the schema itself. The description only maps the two accepted forms ('code or short URL') and adds no format, encoding, or precedence details beyond that, so 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: look up a 短.在线 code or short URL and return its saved state, with the destination only when active. It also scopes itself ('Does not look up other shorteners'), so an agent can separate it from shorten_url/shorten_urls even though get_link is never named.
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 a clear usage condition and an exclusion: use it to inspect state, no account required, and it will not resolve codes from other shorteners. It stops short of pointing at a sibling (e.g. get_link) for the cases this tool declines, so the routing half of the guidance is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorten_urlShorten URL · 缩短链接(短.在线)AIdempotentInspect
为 HTTP 或 HTTPS 目标地址创建一条短链。需要已注册账号。重试必须复用相同的 idempotency_key。 Create one HTTP or HTTPS short link. A registered account is required. Retry with the same idempotency_key.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTP or HTTPS. Do not send longUrl. | |
| alias | No | No customSlug; lowercased. | |
| title | No | Optional title. | |
| locale | No | en or zh-CN. Aliases zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans become zh-CN. Rejects Traditional Chinese, EN, ZH-CN, and bare zh. Blank is en. Does not rewrite URLs, names, or location. Routes stay /zh-cn. | |
| idempotency_key | Yes | Unique client key. Replays the stored result for 24h. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, so the description's added value is the auth requirement (registered account) and the operational instruction to reuse the key on retry. It does not cover alias-collision behavior, quotas, or what happens to an existing alias, which would be the remaining behavioral gaps for a write 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 parallel sentences (zh + en) that front-load the action, then prerequisites, then the retry rule. The bilingual duplication costs some space but each language block is tight and waste-free for its audience.
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?
An output schema exists, so return values need no explanation, and the description covers the two things an agent must know before calling: account requirement and idempotent retry. Missing only edge-case behavior such as alias conflicts and quota limits for a write operation.
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 url, alias, title, locale, and idempotency_key in detail (including locale alias normalization rules). The description only restates the url scheme constraint and key reuse, adding nothing the schema does not already carry.
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 HTTP or HTTPS short link'), and the word 'one' implicitly separates it from the plural sibling shorten_urls. It does not explicitly name the sibling, so the differentiation is inferable 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?
Gives a concrete prerequisite ('A registered account is required') and a retry rule ('Retry with the same idempotency_key'), which is actionable context for invoking it. It stops short of stating when to pick this over shorten_urls or create_qr, so no explicit exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorten_urlsBatch shorten · 批量短链(短.在线)AIdempotentInspect
按 client_ref 对应,一次创建多条短链,可部分成功。需已注册账号。 Create several short links in one call, matched by client_ref. Partial success is allowed. A registered account is required.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | One link each. | |
| idempotency_key | Yes | Unique client key. Replays the stored result for 24h. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the bar is lower, and the description still adds a genuinely important non-obvious trait: the operation can partially succeed rather than being all-or-nothing. The auth prerequisite is also disclosed. It omits that idempotency replay lasts 24h and the 100-item cap, both of which live in the 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?
Two compact sentences, front-loaded with the batch/partial-success semantics. The bilingual duplication doubles the length, which is defensible for a dual-language service but is still redundancy rather than added 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?
With a full output schema, four annotations, and 100% parameter coverage, the description only needs to carry the batch-level semantics an agent cannot infer — partial success, client_ref matching, and the account prerequisite — and it does exactly that.
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 the schema is unusually rich (client_ref character rules, locale normalization, idempotency replay window). The description only reiterates that results are matched by client_ref, adding nothing new. Baseline 3 applies when the schema does the heavy lifting.
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 with batch scope: 'Create several short links in one call'. The plural resource and 'in one call' implicitly distinguish it from the sibling shorten_url, though the contrast is never made explicit.
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?
Adds one real prerequisite — 'A registered account is required' — plus a hint that partial success is possible. But it never says when to pick this over the sibling shorten_url for a single link, nor any when-not condition; usage is only implied by the word 'several'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_linkUpdate link · 更新链接(短.在线)AInspect
修改自有短链的标题或目标地址。需要 links:update。未验证邮箱或注册未满 7 天只能改标题。不会重新启用短链。 Change the title or destination of a link you own. Requires links:update. Unverified email or an account under 7 days old can change the title only. Does not re-enable a link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Short code or link id you own. | |
| title | No | Title, at most 256 characters. Stored on the short link. | |
| destination | No | New http(s) destination. Refused when the email is unverified, the account is under 7 days old, the link is disabled, quarantined, or reported, or the 24 hour cap is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | Yes | |
| code | No | |
| tool | No | |
| type | No | |
| error | No | |
| state | No | |
| title | No | |
| feature | No | |
| message | No | |
| retryable | No | |
| short_url | No | |
| created_at | No | |
| expired_at | No | |
| request_id | Yes | |
| status_url | No | |
| destination | No | |
| resend_path | No | |
| short_url_ascii | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, open-world. The description adds auth scope requirements, account-age/verification gating rules, and the explicit limitation that a disabled link is not re-enabled. It does not describe rate-limit behavior or failure responses, which are covered elsewhere.
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?
Content is front-loaded with the core action and the constraints follow logically, with zero filler sentences. The bilingual duplication doubles the length for no informational gain, but each individual clause earns its place.
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 an output schema present, return values need not be explained, and parameter semantics are fully covered by the schema. The description covers permissions, eligibility restrictions, and the key non-behavior (no re-enable), leaving only edge-case error semantics unaddressed.
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 parameter meanings and limits (256/2048 char caps, refusal conditions) are already fully documented in the schema. The description only restates that title and destination are the mutable fields, adding no new parameter-level detail.
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 (change title or destination of a link you own) with scope qualifier '自有' (owned), which cleanly separates it from read-side siblings like get_link and get_links. An agent can identify the operation 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?
Gives concrete conditions: requires links:update scope, and unverified email or accounts under 7 days old may change the title only. It also states the negative case that it will not re-enable a link. It does not name an alternative sibling (e.g., create_qr, shorten_url) for related operations, so it stops short of explicit routing.
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.
1 tool update
- Added
disable_link
2 tool updates
- Added
get_links - Added
update_link
6 tool updates
- Changed
begin_registration1 field changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Browser signup page language. Does not accept email, password, or acceptance. API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn."New value: +"Blank is en. Does not rewrite URLs, translate parameter names, or use location. Rejects Traditional Chinese, EN, ZH-CN, and bare zh."
- Changed
create_qr5 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Image format. Default png. svg only when requested. SVG ignores size."New value: +"Default png 512. svg is not an image block and ignores size." - changed
Input schema / properties / id / descriptionPrevious value: -"Existing short code. Mutually exclusive with short_url."New value: +"Not with short_url" - changed
Input schema / properties / short_url / descriptionPrevious value: -"Existing short URL to tag for QR. Mutually exclusive with id."New value: +"Not with id" - changed
Input schema / properties / size / descriptionPrevious value: -"PNG square pixels. Default 512. Allowed: 256, 512, or 1024. Ignored when format is svg."New value: +"PNG side." - changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "host_display": { - "description": "Neutral summary of the returned QR: format, the encoded qr_tracking_url, and image_url availability.", - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": true, - "description": "True only when a PNG image block is included.", - "type": "boolean" - }, - "image_url": { - "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", - "type": "string" - }, - "image_url_expires_at": { - "description": "ISO-8601 expiry of image_url. Present only together with image_url.", - "type": "string" - }, - "mime_type": { - "const": "image/png", - "description": "image/png. A PNG image block is included.", - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "pixel_size": { - "anyOf": [ - { - "const": 256, - "type": "number" - }, - { - "const": 512, - "type": "number" - }, - { - "const": 1024, - "type": "number" - } - ], - "description": "PNG square pixels." - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "qr_tracking_url", - "status_url", - "host_display", - "mime_type", - "pixel_size", - "image_available" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "host_display": { - "description": "Neutral summary of the returned QR: format, the encoded qr_tracking_url, and image_url availability.", - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": false, - "description": "False for SVG. Hosts do not render an SVG image block. Use the SVG text, resource, or image_url.", - "type": "boolean" - }, - "image_url": { - "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", - "type": "string" - }, - "image_url_expires_at": { - "description": "ISO-8601 expiry of image_url. Present only together with image_url.", - "type": "string" - }, - "mime_type": { - "const": "image/svg+xml", - "description": "image/svg+xml. SVG is not sent as an image block.", - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "pixel_size": { - "description": "Null for SVG.", - "type": "null" - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "qr_tracking_url", - "status_url", - "host_display", - "mime_type", - "pixel_size", - "image_available" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": false, - "type": "boolean" - }, - "message": { - "type": "string" - }, - "ok": { - "const": false, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "state": { - "enum": [ - "quarantined", - "disabled", - "blocked", - "expired" - ], - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "message", - "type", - "title", - "code", - "retryable" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "host_display": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": true, + "type": "boolean" + }, + "image_url": { + "description": "Omitted if unsigned.", + "type": "string" + }, + "image_url_expires_at": { + "type": "string" + }, + "mime_type": { + "const": "image/png", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "anyOf": [ + { + "const": 256, + "type": "number" + }, + { + "const": 512, + "type": "number" + }, + { + "const": 1024, + "type": "number" + } + ] + }, + "qr_tracking_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "host_display": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "type": "boolean" + }, + "image_url": { + "description": "Omitted if unsigned.", + "type": "string" + }, + "image_url_expires_at": { + "type": "string" + }, + "mime_type": { + "const": "image/svg+xml", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "type": "null" + }, + "qr_tracking_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "type": "boolean" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "message", + "type", + "title", + "code", + "retryable" + ], + "type": "object" + } +]
- Changed
get_link1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Short code / link id"New value: +"Short code or link id."
- Changed
resolve_short_url2 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Short code. Mutually exclusive with url."New value: +"Not with url." - changed
Input schema / properties / url / descriptionPrevious value: -"Full short URL (Unicode or punycode). Mutually exclusive with code."New value: +"Not with code."
- Changed
shorten_url6 fields changed- changed
Input schema / properties / alias / descriptionPrevious value: -"Optional custom path segment (stored lowercase). Do not send customSlug."New value: +"No customSlug; lowercased." - changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Client-generated unique key for this create. Required. Replays within 24h."New value: +"Unique client key. Replays the stored result for 24h." - changed
Input schema / properties / locale / descriptionPrevious value: -"API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn."New value: +"en or zh-CN. Aliases zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans become zh-CN. Rejects Traditional Chinese, EN, ZH-CN, and bare zh. Blank is en. Does not rewrite URLs, names, or location. Routes stay /zh-cn." - changed
Input schema / properties / title / descriptionPrevious value: -"Optional link title, at most 256 characters."New value: +"Optional title." - changed
Input schema / properties / url / descriptionPrevious value: -"Destination HTTPS/HTTP URL to shorten. Required. Do not send longUrl."New value: +"HTTP or HTTPS. Do not send longUrl." - changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "created_at": { - "type": "string" - }, - "destination": { - "type": "string" - }, - "id": { - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "qr_tracking_url": { - "type": "string" - }, - "qr_url": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "destination", - "qr_tracking_url", - "qr_url", - "created_at", - "status_url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "created_at": { - "type": "string" - }, - "error": { - "const": "LINK_QUARANTINED", - "type": "string" - }, - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "state": { - "const": "quarantined", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "created_at", - "status_url", - "error", - "message" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "const": false, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "resend_path": { - "description": "Where to resend the verification email when verification would raise this account's limits.", - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "error", - "code", - "message", - "type", - "title", - "retryable" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ok": { - "const": true, - "type": "boolean" - }, - "replay": {}, - "request_id": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "replay" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "qr_tracking_url": { + "type": "string" + }, + "qr_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "destination", + "qr_tracking_url", + "qr_url", + "created_at", + "status_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "error": { + "const": "LINK_QUARANTINED", + "type": "string" + }, + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "state": { + "const": "quarantined", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "error", + "message" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "resend_path": { + "description": "Where to resend verification email if this would raise the account's limits.", + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ok": { + "const": true, + "type": "boolean" + }, + "replay": {}, + "request_id": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "replay" + ], + "type": "object" + } +]
- Changed
shorten_urls8 fields changed- changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Client-generated unique key for this create. Required. Replays within 24h."New value: +"Unique client key. Replays the stored result for 24h." - changed
Input schema / properties / items / descriptionPrevious value: -"Synchronous batch items (1 to 100). Each item creates one short link."New value: +"One link each." - changed
Input schema / properties / items / items / properties / alias / descriptionPrevious value: -"Optional custom path segment (stored lowercase). Do not send customSlug."New value: +"No customSlug; lowercased." - changed
Input schema / properties / items / items / properties / client_ref / descriptionPrevious value: -"Batch item correlation id. Do not join on array index. The link_created event stores client_ref only when it is 1 to 64 characters matching [A-Za-z0-9._:-]. Any other value is omitted from that event. link_create_failed uses the same rule."New value: +"Do not join on array index. The link_created event stores client_ref only when it is 1 to 64 characters matching [A-Za-z0-9._:-]. link_create_failed uses the same rule; any other value is omitted." - changed
Input schema / properties / items / items / properties / locale / descriptionPrevious value: -"API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn."New value: +"en or zh-CN. Aliases zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans become zh-CN. Rejects Traditional Chinese, EN, ZH-CN, and bare zh. Blank is en. Does not rewrite URLs, names, or location. Routes stay /zh-cn." - removed
Input schema / properties / items / items / properties / title / descriptionRemoved value: -"Optional link title, at most 256 characters." - changed
Input schema / properties / items / items / properties / url / descriptionPrevious value: -"Destination HTTPS/HTTP URL to shorten. Required. Do not send longUrl."New value: +"HTTP or HTTPS. Do not send longUrl." - changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "batch_id": { - "type": "string" - }, - "batch_mode": { - "const": "sync", - "type": "string" - }, - "fail_count": { - "type": "number" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "ok_count": { - "type": "number" - }, - "request_id": { - "type": "string" - }, - "results": { - "items": { - "additionalProperties": false, - "properties": { - "client_ref": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "problem": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "result": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "client_ref", - "ok" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "ok", - "request_id", - "batch_id", - "batch_mode", - "ok_count", - "fail_count", - "results" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "const": false, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "resend_path": { - "description": "Where to resend the verification email when verification would raise this account's limits.", - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "error", - "code", - "message", - "type", - "title", - "retryable" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ok": { - "const": true, - "type": "boolean" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "batch_id": { + "type": "string" + }, + "batch_mode": { + "const": "sync", + "type": "string" + }, + "fail_count": { + "type": "number" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "ok_count": { + "type": "number" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "client_ref": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "problem": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "result": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "client_ref", + "ok" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "ok", + "request_id", + "batch_id", + "batch_mode", + "ok_count", + "fail_count", + "results" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "resend_path": { + "description": "Where to resend verification email if this would raise the account's limits.", + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id" + ], + "type": "object" + } +]
1 tool update
- Changed
shorten_urls1 field changed- changed
Input schema / properties / items / items / properties / client_ref / descriptionPrevious value: -"Batch item correlation id (never use array index)."New value: +"Batch item correlation id. Do not join on array index. The link_created event stores client_ref only when it is 1 to 64 characters matching [A-Za-z0-9._:-]. Any other value is omitted from that event. link_create_failed uses the same rule."
1 tool update
- Changed
create_qr1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "host_display": { - "description": "Show the user the returned image or image_url. Do not generate, draw, or synthesize a QR code.", - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": true, - "description": "True only when a PNG image block is included.", - "type": "boolean" - }, - "image_url": { - "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", - "type": "string" - }, - "image_url_expires_at": { - "description": "ISO-8601 expiry of image_url. Present only together with image_url.", - "type": "string" - }, - "mime_type": { - "const": "image/png", - "description": "image/png. A PNG image block is included.", - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "pixel_size": { - "anyOf": [ - { - "const": 256, - "type": "number" - }, - { - "const": 512, - "type": "number" - }, - { - "const": 1024, - "type": "number" - } - ], - "description": "PNG square pixels." - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "qr_tracking_url", - "status_url", - "host_display", - "mime_type", - "pixel_size", - "image_available" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "host_display": { - "description": "Show the user the returned image or image_url. Do not generate, draw, or synthesize a QR code.", - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": false, - "description": "False for SVG. Hosts do not render an SVG image block. Use the SVG text, resource, or image_url.", - "type": "boolean" - }, - "image_url": { - "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", - "type": "string" - }, - "image_url_expires_at": { - "description": "ISO-8601 expiry of image_url. Present only together with image_url.", - "type": "string" - }, - "mime_type": { - "const": "image/svg+xml", - "description": "image/svg+xml. SVG is not sent as an image block.", - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "pixel_size": { - "description": "Null for SVG.", - "type": "null" - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "qr_tracking_url", - "status_url", - "host_display", - "mime_type", - "pixel_size", - "image_available" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": false, - "type": "boolean" - }, - "message": { - "type": "string" - }, - "ok": { - "const": false, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "state": { - "enum": [ - "quarantined", - "disabled", - "blocked", - "expired" - ], - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "message", - "type", - "title", - "code", - "retryable" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "host_display": { + "description": "Neutral summary of the returned QR: format, the encoded qr_tracking_url, and image_url availability.", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": true, + "description": "True only when a PNG image block is included.", + "type": "boolean" + }, + "image_url": { + "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", + "type": "string" + }, + "image_url_expires_at": { + "description": "ISO-8601 expiry of image_url. Present only together with image_url.", + "type": "string" + }, + "mime_type": { + "const": "image/png", + "description": "image/png. A PNG image block is included.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "anyOf": [ + { + "const": 256, + "type": "number" + }, + { + "const": 512, + "type": "number" + }, + { + "const": 1024, + "type": "number" + } + ], + "description": "PNG square pixels." + }, + "qr_tracking_url": { + "description": "ASCII tracking URL encoded in the image, including ?s=qr.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "host_display": { + "description": "Neutral summary of the returned QR: format, the encoded qr_tracking_url, and image_url availability.", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "description": "False for SVG. Hosts do not render an SVG image block. Use the SVG text, resource, or image_url.", + "type": "boolean" + }, + "image_url": { + "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", + "type": "string" + }, + "image_url_expires_at": { + "description": "ISO-8601 expiry of image_url. Present only together with image_url.", + "type": "string" + }, + "mime_type": { + "const": "image/svg+xml", + "description": "image/svg+xml. SVG is not sent as an image block.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "description": "Null for SVG.", + "type": "null" + }, + "qr_tracking_url": { + "description": "ASCII tracking URL encoded in the image, including ?s=qr.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "type": "boolean" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "message", + "type", + "title", + "code", + "retryable" + ], + "type": "object" + } +]
1 tool update
- Changed
create_qr1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "image_available": { - "const": true, - "type": "boolean" - }, - "mime_type": { - "description": "image/png or image/svg+xml.", - "enum": [ - "image/png", - "image/svg+xml" - ], - "type": "string" - }, - "ok": { - "const": true, - "type": "boolean" - }, - "pixel_size": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "PNG square pixels. Null for SVG." - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "const": "active", - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "id", - "state", - "short_url", - "short_url_ascii", - "qr_tracking_url", - "status_url", - "mime_type", - "pixel_size", - "image_available" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "const": false, - "type": "boolean" - }, - "message": { - "type": "string" - }, - "ok": { - "const": false, - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "state": { - "enum": [ - "quarantined", - "disabled", - "blocked", - "expired" - ], - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "ok", - "request_id", - "message", - "type", - "title", - "code", - "retryable" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "host_display": { + "description": "Show the user the returned image or image_url. Do not generate, draw, or synthesize a QR code.", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": true, + "description": "True only when a PNG image block is included.", + "type": "boolean" + }, + "image_url": { + "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", + "type": "string" + }, + "image_url_expires_at": { + "description": "ISO-8601 expiry of image_url. Present only together with image_url.", + "type": "string" + }, + "mime_type": { + "const": "image/png", + "description": "image/png. A PNG image block is included.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "anyOf": [ + { + "const": 256, + "type": "number" + }, + { + "const": 512, + "type": "number" + }, + { + "const": 1024, + "type": "number" + } + ], + "description": "PNG square pixels." + }, + "qr_tracking_url": { + "description": "ASCII tracking URL encoded in the image, including ?s=qr.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "host_display": { + "description": "Show the user the returned image or image_url. Do not generate, draw, or synthesize a QR code.", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "description": "False for SVG. Hosts do not render an SVG image block. Use the SVG text, resource, or image_url.", + "type": "boolean" + }, + "image_url": { + "description": "Short-lived URL for this QR image. Omitted when signing is not configured. Not an API key, OAuth token, or session.", + "type": "string" + }, + "image_url_expires_at": { + "description": "ISO-8601 expiry of image_url. Present only together with image_url.", + "type": "string" + }, + "mime_type": { + "const": "image/svg+xml", + "description": "image/svg+xml. SVG is not sent as an image block.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "description": "Null for SVG.", + "type": "null" + }, + "qr_tracking_url": { + "description": "ASCII tracking URL encoded in the image, including ?s=qr.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "host_display", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "type": "boolean" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "message", + "type", + "title", + "code", + "retryable" + ], + "type": "object" + } +]
6 tool updates
- Changed
begin_registration4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "expires_at": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "resume_token": { + "type": "string" + }, + "signup_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "signup_url", + "expires_at", + "resume_token" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "expires_at": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "resume_token": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "signup_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok" -]
- Changed
create_qr4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "image_available": { + "const": true, + "type": "boolean" + }, + "mime_type": { + "description": "image/png or image/svg+xml.", + "enum": [ + "image/png", + "image/svg+xml" + ], + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "pixel_size": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "PNG square pixels. Null for SVG." + }, + "qr_tracking_url": { + "description": "ASCII tracking URL encoded in the image, including ?s=qr.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "qr_tracking_url", + "status_url", + "mime_type", + "pixel_size", + "image_available" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_available": { + "const": false, + "type": "boolean" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "message", + "type", + "title", + "code", + "retryable" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_available": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "mime_type": { - "description": "image/png or image/svg+xml.", - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "pixel_size": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "PNG square pixels. Null for SVG." - }, - "qr_tracking_url": { - "description": "ASCII tracking URL encoded in the image, including ?s=qr.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "type": "string" - }, - "status_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok", - "request_id" -]
- Changed
get_link4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "short_url", + "short_url_ascii", + "destination" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "expired_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "status_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "type", + "title", + "code" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "code": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "destination": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "type": "string" - }, - "status_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok", - "request_id" -]
- Changed
resolve_short_url4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "short_url", + "short_url_ascii", + "destination" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "expired_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "state": { + "enum": [ + "quarantined", + "disabled", + "blocked", + "expired" + ], + "type": "string" + }, + "status_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "type", + "title", + "code" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "code": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "destination": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "request_id": { - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "type": "string" - }, - "status_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok", - "request_id" -]
- Changed
shorten_url4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "id": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "qr_tracking_url": { + "type": "string" + }, + "qr_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "short_url": { + "type": "string" + }, + "short_url_ascii": { + "type": "string" + }, + "state": { + "const": "active", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "short_url", + "short_url_ascii", + "destination", + "qr_tracking_url", + "qr_url", + "created_at", + "status_url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "created_at": { + "type": "string" + }, + "error": { + "const": "LINK_QUARANTINED", + "type": "string" + }, + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "state": { + "const": "quarantined", + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "id", + "state", + "created_at", + "status_url", + "error", + "message" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "resend_path": { + "description": "Where to resend the verification email when verification would raise this account's limits.", + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ok": { + "const": true, + "type": "boolean" + }, + "replay": {}, + "request_id": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "replay" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "code": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "destination": { - "type": "string" - }, - "error": { - "type": "string" - }, - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "qr_tracking_url": { - "type": "string" - }, - "qr_url": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "resend_path": { - "description": "Where to resend the verification email when verification would raise this account's limits.", - "type": "string" - }, - "retryable": { - "type": "boolean" - }, - "short_url": { - "type": "string" - }, - "short_url_ascii": { - "type": "string" - }, - "state": { - "type": "string" - }, - "status_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok", - "request_id" -]
- Changed
shorten_urls4 fields changed- removed
Output schema / additionalPropertiesRemoved value: -false - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "batch_id": { + "type": "string" + }, + "batch_mode": { + "const": "sync", + "type": "string" + }, + "fail_count": { + "type": "number" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "ok_count": { + "type": "number" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "additionalProperties": false, + "properties": { + "client_ref": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "problem": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "result": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "client_ref", + "ok" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "ok", + "request_id", + "batch_id", + "batch_mode", + "ok_count", + "fail_count", + "results" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + }, + "request_id": { + "type": "string" + }, + "resend_path": { + "description": "Where to resend the verification email when verification would raise this account's limits.", + "type": "string" + }, + "retryable": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id", + "error", + "code", + "message", + "type", + "title", + "retryable" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ok": { + "const": true, + "type": "boolean" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "ok", + "request_id" + ], + "type": "object" + } +] - removed
Output schema / propertiesRemoved value: -{ - "batch_id": { - "type": "string" - }, - "batch_mode": { - "const": "sync", - "type": "string" - }, - "code": { - "type": "string" - }, - "error": { - "type": "string" - }, - "fail_count": { - "type": "number" - }, - "message": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "ok_count": { - "type": "number" - }, - "request_id": { - "type": "string" - }, - "resend_path": { - "description": "Where to resend the verification email when verification would raise this account's limits.", - "type": "string" - }, - "results": { - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "retryable": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "ok", - "request_id" -]
5 tool updates
- Changed
begin_registration2 fields changed- added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +}
- Changed
create_qr10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / examplesPrevious value: -[ - { - "id": "example" - }, - { - "short_url": "https://xn--s7y.xn--3ds443g/example" - } -]New value: +[ + { + "id": "example" + }, + { + "short_url": "https://xn--s7y.xn--3ds443g/example" + }, + { + "format": "png", + "id": "example", + "size": 512 + } +] - removed
Input schema / oneOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "description": "Existing short code. Mutually exclusive with short_url.", - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "short_url": { - "description": "Existing short URL to tag for QR. Mutually exclusive with id.", - "maxLength": 2048, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "short_url" - ], - "type": "object" - } -] - added
Input schema / propertiesAdded value: +{ + "format": { + "description": "Image format. Default png. svg only when requested. SVG ignores size.", + "enum": [ + "png", + "svg" + ], + "type": "string" + }, + "id": { + "description": "Existing short code. Mutually exclusive with short_url.", + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "short_url": { + "description": "Existing short URL to tag for QR. Mutually exclusive with id.", + "maxLength": 2048, + "minLength": 1, + "type": "string" + }, + "size": { + "anyOf": [ + { + "const": 256, + "type": "number" + }, + { + "const": 512, + "type": "number" + }, + { + "const": 1024, + "type": "number" + } + ], + "description": "PNG square pixels. Default 512. Allowed: 256, 512, or 1024. Ignored when format is svg." + } +} - added
Output schema / properties / mime_typeAdded value: +{ + "description": "image/png or image/svg+xml.", + "type": "string" +} - added
Output schema / properties / pixel_sizeAdded value: +{ + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "PNG square pixels. Null for SVG." +} - added
Output schema / properties / qr_tracking_url / descriptionAdded value: +"ASCII tracking URL encoded in the image, including ?s=qr." - added
Output schema / properties / status_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +}
- Changed
resolve_short_url3 fields changed- added
Input schema / additionalPropertiesAdded value: +{} - removed
Input schema / oneOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "url": { - "description": "Full short URL (Unicode or punycode). Mutually exclusive with code.", - "maxLength": 2048, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "url" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "code": { - "description": "Short code. Mutually exclusive with url.", - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "code" - ], - "type": "object" - } -] - added
Input schema / propertiesAdded value: +{ + "code": { + "description": "Short code. Mutually exclusive with url.", + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "url": { + "description": "Full short URL (Unicode or punycode). Mutually exclusive with code.", + "maxLength": 2048, + "minLength": 1, + "type": "string" + } +}
- Changed
shorten_url4 fields changed- added
Output schema / properties / qr_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / resend_pathAdded value: +{ + "description": "Where to resend the verification email when verification would raise this account's limits.", + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +}
- Changed
shorten_urls3 fields changed- added
Output schema / properties / resend_pathAdded value: +{ + "description": "Where to resend the verification email when verification would raise this account's limits.", + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +}
7 tool updates
- Changed
begin_registration2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Browser signup language. Does not accept email, password, or acceptance."New value: +"Browser signup page language. Does not accept email, password, or acceptance. API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn." - changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "zh-CN" -]New value: +[ + "en", + "zh-CN", + "zh-cn", + "zh-Hans", + "zh-hans", + "zh_Hans", + "zh_hans" +]
- Removed
disable_link - Removed
get_link_analytics - Removed
get_links - Changed
shorten_url1 field changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Accepted values: en, zh-CN, and zh-cn (the only case fold of zh-CN). EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en."New value: +"API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn."
- Changed
shorten_urls1 field changed- changed
Input schema / properties / items / items / properties / locale / descriptionPrevious value: -"Accepted values: en, zh-CN, and zh-cn (the only case fold of zh-CN). EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en."New value: +"API language preference. Canonical values: en and zh-CN. Documented aliases normalized to the canonical value: zh-cn, zh-Hans, zh-hans, zh_Hans, zh_hans. Traditional Chinese is not supported. EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en. This preference does not rewrite URL bytes, translate parameter names, or use the caller's location. Website routes stay /zh-cn."
- Removed
update_link
2 tool updates
- Changed
create_qr3 fields changed- changed
Input schema / examplesPrevious value: -[ - { - "id": "example" - }, - { - "short_url": "https://example.com/example" - } -]New value: +[ + { + "id": "example" + }, + { + "short_url": "https://xn--s7y.xn--3ds443g/example" + } +] - added
Input schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "description": "Existing short code. Mutually exclusive with short_url.", + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "short_url": { + "description": "Existing short URL to tag for QR. Mutually exclusive with id.", + "maxLength": 2048, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "short_url" + ], + "type": "object" + } +] - removed
Input schema / propertiesRemoved value: -{ - "id": { - "description": "Existing short code", - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "short_url": { - "description": "Existing short URL to tag for QR", - "maxLength": 2048, - "minLength": 1, - "type": "string" - } -}
- Changed
resolve_short_url3 fields changed- changed
Input schema / examplesPrevious value: -[ - { - "url": "https://example.com/example" - }, - { - "code": "example" - } -]New value: +[ + { + "url": "https://xn--s7y.xn--3ds443g/example" + }, + { + "code": "example" + } +] - added
Input schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "url": { + "description": "Full short URL (Unicode or punycode). Mutually exclusive with code.", + "maxLength": 2048, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "code": { + "description": "Short code. Mutually exclusive with url.", + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + } +] - removed
Input schema / propertiesRemoved value: -{ - "code": { - "description": "Short code if URL not provided", - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "url": { - "description": "Full short URL (Unicode or punycode)", - "maxLength": 2048, - "minLength": 1, - "type": "string" - } -}
10 tool updates
- Changed
begin_registration1 field changed- added
Input schema / examplesAdded value: +[ + { + "locale": "en" + }, + { + "locale": "zh-CN" + } +]
- Changed
create_qr1 field changed- added
Input schema / examplesAdded value: +[ + { + "id": "example" + }, + { + "short_url": "https://example.com/example" + } +]
- Changed
disable_link2 fields changed- added
Input schema / examplesAdded value: +[ + { + "id": "example" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Short code / link id. disable_link is not available yet; this call does not disable the link."
- Changed
get_link1 field changed- added
Input schema / examplesAdded value: +[ + { + "id": "example" + } +]
- Changed
get_link_analytics2 fields changed- added
Input schema / examplesAdded value: +[ + { + "id": "example" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Short code / link id. get_link_analytics is not available yet; this call does not return analytics."
- Changed
get_links3 fields changed- added
Input schema / examplesAdded value: +[ + { + "cursor": "example", + "limit": 20 + } +] - added
Input schema / properties / cursor / descriptionAdded value: +"Optional page cursor. get_links is not available yet; this call does not list links." - added
Input schema / properties / limit / descriptionAdded value: +"Optional page size, an integer from 1 to 100. get_links is not available yet; this call does not list links."
- Changed
resolve_short_url1 field changed- added
Input schema / examplesAdded value: +[ + { + "url": "https://example.com/example" + }, + { + "code": "example" + } +]
- Changed
shorten_url3 fields changed- added
Input schema / examplesAdded value: +[ + { + "alias": "notes", + "idempotency_key": "example-create-1", + "locale": "en", + "title": "Notes", + "url": "https://example.com/notes" + } +] - added
Input schema / properties / locale / descriptionAdded value: +"Accepted values: en, zh-CN, and zh-cn (the only case fold of zh-CN). EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en." - added
Input schema / properties / title / descriptionAdded value: +"Optional link title, at most 256 characters."
- Changed
shorten_urls4 fields changed- added
Input schema / examplesAdded value: +[ + { + "idempotency_key": "example-batch-1", + "items": [ + { + "alias": "notes", + "client_ref": "item-1", + "locale": "zh-cn", + "title": "Notes", + "url": "https://example.com/notes" + } + ] + } +] - added
Input schema / properties / items / descriptionAdded value: +"Synchronous batch items (1 to 100). Each item creates one short link." - added
Input schema / properties / items / items / properties / locale / descriptionAdded value: +"Accepted values: en, zh-CN, and zh-cn (the only case fold of zh-CN). EN, ZH-CN, and bare zh are rejected. Omitted or blank defaults to en." - added
Input schema / properties / items / items / properties / title / descriptionAdded value: +"Optional link title, at most 256 characters."
- Changed
update_link4 fields changed- added
Input schema / examplesAdded value: +[ + { + "destination": "https://example.com/notes", + "id": "example", + "title": "Notes" + } +] - changed
Input schema / properties / destination / descriptionPrevious value: -"Destination HTTPS/HTTP URL to shorten. Required. Do not send longUrl."New value: +"Optional destination URL (lowercase http or https, no surrounding whitespace). update_link is not available yet; this call does not update the link." - added
Input schema / properties / id / descriptionAdded value: +"Short code / link id. update_link is not available yet; this call does not update the link." - added
Input schema / properties / title / descriptionAdded value: +"Optional link title, at most 256 characters. update_link is not available yet; this call does not update the link."
6 tool updates
- Added
begin_registration - Changed
create_qr11 fields changed- removed
Input schema / properties / formatRemoved value: -{ - "description": "Preferred image format (PNG always embedded; SVG via resource link)", - "enum": [ - "png", - "svg" - ], - "type": "string" -} - changed
Input schema / properties / id / descriptionPrevious value: -"Short code of a link you own"New value: +"Existing short code" - changed
Input schema / properties / short_url / descriptionPrevious value: -"Owned short URL (Unicode or punycode)"New value: +"Existing short URL to tag for QR" - removed
Input schema / properties / short_url_asciiRemoved value: -{ - "description": "Owned short URL in punycode form", - "maxLength": 2048, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / sizeRemoved value: -{ - "anyOf": [ - { - "const": 256, - "type": "number" - }, - { - "const": 512, - "type": "number" - }, - { - "const": 1024, - "type": "number" - } - ], - "description": "PNG pixel size: 256, 512 (default), or 1024" -} - removed
Output schema / properties / formatRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / image_mime_typeRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / qr_image_svg_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / qr_image_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / sizeRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / status_urlRemoved value: -{ - "type": "string" -}
- Changed
disable_link17 fields changed- removed
Input schema / properties / id / descriptionRemoved value: -"Short code / link id you own" - added
Output schema / properties / code / constAdded value: +"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / created_atRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / destinationRemoved value: -{ - "type": "string" -} - added
Output schema / properties / error / constAdded value: +"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / featureAdded value: +{ + "type": "string" +} - removed
Output schema / properties / idRemoved value: -{ - "type": "string" -} - added
Output schema / properties / ok / constAdded value: +false - added
Output schema / properties / retryable / constAdded value: +false - removed
Output schema / properties / short_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / short_url_asciiRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / status_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / titleRemoved value: -{ - "type": "string" -} - added
Output schema / properties / toolAdded value: +{ + "type": "string" +} - removed
Output schema / properties / typeRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "ok", - "request_id" -]New value: +[ + "ok", + "error", + "code", + "feature", + "tool", + "message", + "request_id", + "retryable" +]
- Changed
get_link_analytics22 fields changed- removed
Input schema / properties / fromRemoved value: -{ - "description": "Window start ISO8601 UTC (default last 7 days)", - "type": "string" -} - removed
Input schema / properties / granularityRemoved value: -{ - "description": "Set day to include daily series", - "type": "string" -} - removed
Input schema / properties / id / descriptionRemoved value: -"Short code / link id you own" - removed
Input schema / properties / includeRemoved value: -{ - "description": "Set all_traffic to add all_clicks", - "type": "string" -} - removed
Input schema / properties / toRemoved value: -{ - "description": "Window end ISO8601 UTC", - "type": "string" -} - removed
Output schema / properties / all_clicksRemoved value: -{ - "type": "number" -} - added
Output schema / properties / code / constAdded value: +"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / countriesRemoved value: -{ - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / devicesRemoved value: -{ - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / error / constAdded value: +"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / featureAdded value: +{ + "type": "string" +} - removed
Output schema / properties / human_clicksRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / link_idRemoved value: -{ - "type": "string" -} - added
Output schema / properties / ok / constAdded value: +false - removed
Output schema / properties / qr_tagged_visitsRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / referrersRemoved value: -{ - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / retryable / constAdded value: +false - removed
Output schema / properties / seriesRemoved value: -{ - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / short_codeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / toolAdded value: +{ + "type": "string" +} - removed
Output schema / properties / windowRemoved value: -{ - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "ok", - "request_id" -]New value: +[ + "ok", + "error", + "code", + "feature", + "tool", + "message", + "request_id", + "retryable" +]
- Changed
get_links11 fields changed- removed
Input schema / properties / cursor / descriptionRemoved value: -"Pagination cursor from previous next_cursor" - removed
Input schema / properties / limit / descriptionRemoved value: -"Page size (1–100, default 50)" - added
Output schema / properties / code / constAdded value: +"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / error / constAdded value: +"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / featureAdded value: +{ + "type": "string" +} - removed
Output schema / properties / itemsRemoved value: -{ - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / next_cursorRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / ok / constAdded value: +false - added
Output schema / properties / retryable / constAdded value: +false - added
Output schema / properties / toolAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "request_id" -]New value: +[ + "ok", + "error", + "code", + "feature", + "tool", + "message", + "request_id", + "retryable" +]
- Changed
update_link18 fields changed- changed
Input schema / properties / destination / descriptionPrevious value: -"New destination URL"New value: +"Destination HTTPS/HTTP URL to shorten. Required. Do not send longUrl." - removed
Input schema / properties / id / descriptionRemoved value: -"Short code / link id you own" - added
Output schema / properties / code / constAdded value: +"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / created_atRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / destinationRemoved value: -{ - "type": "string" -} - added
Output schema / properties / error / constAdded value: +"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / featureAdded value: +{ + "type": "string" +} - removed
Output schema / properties / idRemoved value: -{ - "type": "string" -} - added
Output schema / properties / ok / constAdded value: +false - added
Output schema / properties / retryable / constAdded value: +false - removed
Output schema / properties / short_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / short_url_asciiRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / stateRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / status_urlRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / titleRemoved value: -{ - "type": "string" -} - added
Output schema / properties / toolAdded value: +{ + "type": "string" +} - removed
Output schema / properties / typeRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "ok", - "request_id" -]New value: +[ + "ok", + "error", + "code", + "feature", + "tool", + "message", + "request_id", + "retryable" +]
1 tool update
- Removed
create_account
5 tool updates
- Changed
create_qr11 fields changed- added
Input schema / properties / formatAdded value: +{ + "description": "Preferred image format (PNG always embedded; SVG via resource link)", + "enum": [ + "png", + "svg" + ], + "type": "string" +} - changed
Input schema / properties / id / descriptionPrevious value: -"Existing short code"New value: +"Short code of a link you own" - changed
Input schema / properties / short_url / descriptionPrevious value: -"Existing short URL to tag for QR"New value: +"Owned short URL (Unicode or punycode)" - added
Input schema / properties / short_url_asciiAdded value: +{ + "description": "Owned short URL in punycode form", + "maxLength": 2048, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / sizeAdded value: +{ + "anyOf": [ + { + "const": 256, + "type": "number" + }, + { + "const": 512, + "type": "number" + }, + { + "const": 1024, + "type": "number" + } + ], + "description": "PNG pixel size: 256, 512 (default), or 1024" +} - added
Output schema / properties / formatAdded value: +{ + "type": "string" +} - added
Output schema / properties / image_mime_typeAdded value: +{ + "type": "string" +} - added
Output schema / properties / qr_image_svg_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / qr_image_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / sizeAdded value: +{ + "type": "number" +} - added
Output schema / properties / status_urlAdded value: +{ + "type": "string" +}
- Changed
disable_link17 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Short code / link id you own" - removed
Output schema / properties / code / constRemoved value: -"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / destinationAdded value: +{ + "type": "string" +} - removed
Output schema / properties / error / constRemoved value: -"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / featureRemoved value: -{ - "type": "string" -} - added
Output schema / properties / idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / ok / constRemoved value: -false - removed
Output schema / properties / retryable / constRemoved value: -false - added
Output schema / properties / short_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / short_url_asciiAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "type": "string" +} - added
Output schema / properties / status_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - removed
Output schema / properties / toolRemoved value: -{ - "type": "string" -} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "error", - "code", - "feature", - "tool", - "message", - "request_id", - "retryable" -]New value: +[ + "ok", + "request_id" +]
- Changed
get_link_analytics22 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "Window start ISO8601 UTC (default last 7 days)", + "type": "string" +} - added
Input schema / properties / granularityAdded value: +{ + "description": "Set day to include daily series", + "type": "string" +} - added
Input schema / properties / id / descriptionAdded value: +"Short code / link id you own" - added
Input schema / properties / includeAdded value: +{ + "description": "Set all_traffic to add all_clicks", + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "Window end ISO8601 UTC", + "type": "string" +} - added
Output schema / properties / all_clicksAdded value: +{ + "type": "number" +} - removed
Output schema / properties / code / constRemoved value: -"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / countriesAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / devicesAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / error / constRemoved value: -"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / featureRemoved value: -{ - "type": "string" -} - added
Output schema / properties / human_clicksAdded value: +{ + "type": "number" +} - added
Output schema / properties / link_idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / ok / constRemoved value: -false - added
Output schema / properties / qr_tagged_visitsAdded value: +{ + "type": "number" +} - added
Output schema / properties / referrersAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / retryable / constRemoved value: -false - added
Output schema / properties / seriesAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / short_codeAdded value: +{ + "type": "string" +} - removed
Output schema / properties / toolRemoved value: -{ - "type": "string" -} - added
Output schema / properties / windowAdded value: +{ + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "error", - "code", - "feature", - "tool", - "message", - "request_id", - "retryable" -]New value: +[ + "ok", + "request_id" +]
- Changed
get_links11 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor from previous next_cursor" - added
Input schema / properties / limit / descriptionAdded value: +"Page size (1–100, default 50)" - removed
Output schema / properties / code / constRemoved value: -"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / error / constRemoved value: -"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / featureRemoved value: -{ - "type": "string" -} - added
Output schema / properties / itemsAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / next_cursorAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / ok / constRemoved value: -false - removed
Output schema / properties / retryable / constRemoved value: -false - removed
Output schema / properties / toolRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "ok", - "error", - "code", - "feature", - "tool", - "message", - "request_id", - "retryable" -]New value: +[ + "ok", + "request_id" +]
- Changed
update_link18 fields changed- changed
Input schema / properties / destination / descriptionPrevious value: -"Destination HTTPS/HTTP URL to shorten. Required. Do not send longUrl."New value: +"New destination URL" - added
Input schema / properties / id / descriptionAdded value: +"Short code / link id you own" - removed
Output schema / properties / code / constRemoved value: -"FEATURE_NOT_AVAILABLE" - added
Output schema / properties / created_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / destinationAdded value: +{ + "type": "string" +} - removed
Output schema / properties / error / constRemoved value: -"FEATURE_NOT_AVAILABLE" - removed
Output schema / properties / featureRemoved value: -{ - "type": "string" -} - added
Output schema / properties / idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / ok / constRemoved value: -false - removed
Output schema / properties / retryable / constRemoved value: -false - added
Output schema / properties / short_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / short_url_asciiAdded value: +{ + "type": "string" +} - added
Output schema / properties / stateAdded value: +{ + "type": "string" +} - added
Output schema / properties / status_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - removed
Output schema / properties / toolRemoved value: -{ - "type": "string" -} - added
Output schema / properties / typeAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "ok", - "error", - "code", - "feature", - "tool", - "message", - "request_id", - "retryable" -]New value: +[ + "ok", + "request_id" +]
Related MCP Connectors
Short links, QR codes and page-view trackers for AI agents, with click stats and email-code sign-up.
Short links for AI agents: editable after sharing, with click counts and password-protected files.
Free, unlimited short links, QR codes and click analytics your AI agent can create and track.
Branded QR codes for AI agents: static or dynamic, re-pointable after printing, with scan counts.
Related MCP Servers
- AlicenseAqualityDmaintenanceGenerate styled QR codes, manage dynamic short links with click analytics, and publish micro-landing pages via AI agents.1957 npm1MIT
- AlicenseAqualityDmaintenanceDynamic QR code platform for AI agents. Create, customize, and track QR codes without regenerating images. 37 tools covering 11 QR types (URL, vCard, WiFi, event…).373MIT
- AlicenseNot gradedqualityCmaintenanceAI-native URL shortener and paste handoff service for agents. Create short links, publish handoff pastes, resolve prior slugs, generate QR links, and find tagged artifacts across sessions.MIT

esyURL MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to create, update, organize, and delete short links; render styled QR codes; route visitors by device or country; and read click and scan statistics. Agents can also manage groups and custom domains while changing destinations without breaking printed QR codes or shared short URLs.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.