_ registry / mcp + a2a https://modelcontextprotocol.io/specification/2026-07-28/basic/transports · checked 2h ago

duan-online

https://xn--s7y.xn--3ds443g

Registry code: 069c0cbb6c84c55a

api record

短.在线 remote MCP. Prefer short_url_ascii (punycode). Catalog: tools/list. resolve_short_url is a public read. begin_registration returns a browser signup URL only. Creating links requires a registered account (Bearer API key or OAuth). OAuth is authorization code + PKCE S256 for public clients (no client secret); grants are authorization_code and refresh_token; an omitted scope is links:read only. Sign in and accept terms in the browser. Metadata: /.well-known/oauth-protected-resource (also /.well-known/oauth-protected-resource/mcp) and /.well-known/oauth-authorization-server. Never paste…

endpoint
https://xn--s7y.xn--3ds443g/mcp
door code
4c90d9eedea408af
protocol
https://modelcontextprotocol.io/specification/2026-07-28/basic/transports ·1.0
authentication
bearer
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is duan-online live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is duan-online free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does duan-online have?
16 tools: List links, Connect account, Create a short link, QR image (PNG or SVG), Shorten URL, Batch shorten, Get link, Inspect short link, ….
Is duan-online safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 98.9%· all time 100%

latency
242ms

last good check

priced tools
0

of 16 tools

_ answered our checks, 90 days 276 checks · signed record
  • unknown → live
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • shorten a url
  • resolve a short link
  • create a qr code for a short link
takes → gives
text → text, images
tools
4 reads2 changes data
_ usage and payments 30 days

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

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 16 tools
16 auth-required 16 of 16 classified

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

  • get_links auth-required never probed

    List links this account owns. cursor and limit match GET /v1/links. Requires links:read.

    mcpget_links

  • begin_registration reads auth-required never probed

    Fallback when the client cannot start OAuth. Returns a browser registration link. Does not create an account, accept a password, or accept terms.

    mcpbegin_registration

  • createLink auth-required never probed

    Creates a short URL. Anonymous callers share rate limits with the web create form. Session cookie and API key are optional for basic create. With either, the link belongs to that account and counts toward its monthly limit. Verify your email to raise your limit. Request body must include **exactly one** of `url` or `longUrl` (OpenAPI `oneOf`). Optional `alias` / `customSlug`: if both are sent they must match (case-insensitive); otherwise **409** `FIELD_CONFLICT`. User aliases are folded to lowercase before persistence. A custom alias requires a verified email: session or user API key → **403** `EMAIL_UNVERIFIED` (`email_unverified`); anonymous → **403** `AUTH_REQUIRED` (`alias_requires_verified_account`). An OAuth access token is not an API key here: presenting one is 401 and does not fall through to anonymous create.

    restcreateLink

  • getLinkQr auth-required never probed

    Owner-only. Returns a QR code image that encodes the link's `qr_tracking_url` (tagged short URL; ASCII host in the matrix). Default format PNG size 512. `format=png|svg`. PNG `size` is 256, 512, or 1024 (SVG ignores size). Requires a session cookie or an API key with `links:read`. An OAuth access token is not accepted. Anon → 401. Other-user / unowned → 404. Destination is never fetched or encoded. Fetching it does not record a visit. MCP create_qr may also return a short-lived image_url. Returns the stored link's QR as PNG, or SVG when requested, with a short-lived image URL where available. The QR encodes qr_tracking_url. Where an image is not displayed, image_url (when present) or the short link reaches the same code.

    restgetLinkQr

  • shorten_url changes data auth-required never probed

    Create one HTTP or HTTPS short link. A registered account is required. Retry with the same idempotency_key.

    mcpshorten_url

  • shorten_urls changes data auth-required never probed

    Create several short links in one call, matched by client_ref. Partial success is allowed. A registered account is required.

    mcpshorten_urls

  • get_link reads auth-required never probed

    Fetch one owned link by id. A registered account is required. For a public status check, use resolve_short_url.

    mcpget_link

  • resolve_short_url reads auth-required never probed

    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.

    mcpresolve_short_url

  • create_qr reads auth-required never probed

    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.

    mcpcreate_qr

  • update_link auth-required never probed

    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.

    mcpupdate_link

  • disable_link auth-required never probed

    Disable a link you own: its short link and QR code stop redirecting. Requires links:disable and a verified email. Idempotent.

    mcpdisable_link

  • createLinksBatch auth-required never probed

    Sync batch create. Body `items` length 1–100. Each item requires `client_ref` (unique within the batch) plus destination (`url` XOR `longUrl`) and optional `alias`. Partial success: HTTP 200 envelope with per-item `ok` + `result` (ActiveLinkCreated | NonActiveLinkCreated) or `ok: false` + `problem` + `retryable`. Correlate by `client_ref` only — never by array index. Over 100 items → 400 BATCH_TOO_LARGE (`/problems/batch-too-large`). Whole-batch `Idempotency-Key` required (scoped as `batch:{key}`). Same auth / abuse / destination safety rules as single create. Missing scope → **403** `INSUFFICIENT_SCOPE`. Accepted credentials are anonymous access, a session cookie, or an API key with `batches:create`. An OAuth access token is not accepted.

    restcreateLinksBatch

  • listLinks auth-required never probed

    Returns short links owned by the authenticated account. Anonymous → **401**. Requires `links:read` on an API key, or a session cookie. An OAuth access token is not accepted on this route (401, not anonymous).

    restlistLinks

  • getLinkStatus auth-required never probed

    Public status lookup by short code. No authentication required. States: active | quarantined | disabled | blocked | expired. Destination, short_url, and short_url_ascii omitted unless state is active. Unknown/deleted codes → 404 with problem type /problems/link-not-found. User-alias lookup folds case to lowercase; system short codes remain case-sensitive as stored. No credential is required. A presented API key must be valid and include `links:read` (otherwise 403). Any other presented Bearer, including an OAuth access token, is 401 and is not treated as anonymous.

    restgetLinkStatus

  • updateLink auth-required never probed

    Update the title or destination of a link you own. API key scope `links:update`, or a session cookie. An OAuth access token is not accepted on this route. MCP update_link uses this handler. A destination change is screened again, needs a verified email and an account at least 7 days old, and is capped at 3 times per link and 20 times per account in any 24 hours. Disabled, quarantined, blocked, expired, and reported links cannot be changed. An update does not re-enable a link. Other users' / unowned → **404**.

    restupdateLink

  • disableLink auth-required never probed

    Stop serving a link you own. API key scope `links:disable`, or a session cookie. An OAuth access token is not accepted on REST (401). Another account's link, or an unknown id, is 404. Email must be verified (403). A link that is quarantined, blocked, expired, or in an abuse posture is refused (403 LINK_BLOCKED). An already owner-disabled link succeeds and changes nothing. The same edit rate limit as PATCH applies (429). Idempotency-Key is not used. A form body or a cross-site Origin is rejected before auth (`csrf_rejected`, not problem+json). Responses are `Cache-Control: private, no-store`. Shlink must confirm before `link_disabled` is emitted; if confirm fails the response is 503 and a retry is queued. MCP `disable_link` uses the same logic with scope `links:disable`.

    restdisableLink

_ try it over a2a through the hub, ceiling 0

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

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

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

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

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

_ for your README measured, not declared

measured by brick.blue

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

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

_ how we knowoff the mcp door
card completeness
100%

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

spec deviations
0

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

_ record

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

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

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