esyURL MCP server
online · 100% uptimeio.github.esyurl/mcp·v0.2.0Short links and trackable QR codes: editable after printing, device routing, scan stats.
0 stars
Reviews
Write oneNobody has reviewed esyURL yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
esyURL tools (21, 8 write)
write = sends, deletes, buys or postsadd_links_to_groupFreeAdd up to 25 links to a group in one call. Idempotent: links already in the group are reported in alreadyMembers rather than failing. Fails with not_found if any linkId is unknown (nothing is added).
create_groupwrite actionFreeCreate a group to organise short links (e.g. a campaign or a venue). Groups are many-to-many: a link can be in up to 20 groups. Add links with add_links_to_group, or pass groupIds when creating/updating a link.
create_short_linkwrite actionFreeCreate a short link that redirects to targetUrl, or shows a link page (pass page instead of targetUrl). Returns the link, including linkId (use it with the other tools) and shortUrl (share this). Give a slug for a memorable URL, otherwise a random 8-character one is generated. Slugs are unique across all tenants and cannot be changed later (409 if taken; route names like "api", "admin", "health" are reserved).
delete_groupwrite actionFreeDelete a group. Its links are NOT deleted; they just stop being members.
delete_short_linkwrite actionFreePermanently delete a short link and remove it from its groups. Its short URL and any printed QR codes stop working (404) and the slug becomes free for anyone. Prefer update_short_link status "paused" if the link may come back.
get_custom_domainFreeGet this tenant's custom (alias) domain and advance its setup as far as DNS allows. Use it to check progress after creating a DNS record. Lifecycle: pending_validation (create the certificate_validation record, and the optional ownership_verification TXT if listed) → provisioning (automatic, seconds) → pending_dns (create the routing CNAME from the domain to `target`) → active. Nothing advances on its own: call get_custom_domain after each DNS change to move it along. The response always carries `dnsRecords` (exact name/type/value to create, with `done` once seen) and `instructions` saying what to do next.
get_groupFreeFetch one group. To see its links use list_short_links with group = groupId.
get_group_visitsFreeCombined visit analytics for a group's current member links: totals {visits, qr, direct, bot} and a zero-filled per-day breakdown (UTC). Links removed from the group no longer count.
get_short_linkFreeFetch one short link by linkId, including its groupIds and lifetime visitCount.
get_short_link_visitsFreeVisit analytics for one link: totals over the window ({visits, qr, direct, bot}; visits = qr + direct, bots such as link-preview crawlers are counted separately and excluded from visits), a zero-filled per-day breakdown (UTC, oldest first), and the most recent individual visits (newest first, with source, referrerHost, userAgent, country when known, and ruleId when a redirect rule decided it; kept 90 days). byRule splits the window's visits by rule (fallback = went to the link's targetUrl); daily entries carry byRule on days a rule matched. For link pages, byItem counts button clicks per item (daily entries carry clicks by item id).
list_groupsFreeList your groups (with linkCount), ordered by groupId. Page with cursor = nextCursor.
list_short_linksFreeList your short links, newest first. Filter by tag and/or groupId. A page can hold fewer than limit items even when more exist: keep calling with cursor = nextCursor until nextCursor is absent.
preview_link_pageFreeRender a link's page as HTML for a simulated visit, without recording anything: the saved page, or a draft (page) to try before saving (pictures given as data URLs are drawn inline; nothing is stored or charged). Returns the visible item ids (items with "when" conditions depend on the visit) and the HTML.
remove_custom_domainwrite actionFreeRemove this tenant's custom domain. Short links immediately stop resolving on it (QR codes printed with it break) and new short URLs use the platform domain. The DNS records can be deleted afterwards.
remove_link_from_groupwrite actionFreeTake one link out of a group. The link itself is untouched.
render_qr_codeFreeRender a QR code as a PNG image. Pass linkId to render a short link: the image encodes {shortUrl}?s=qr so scans are counted as qr visits, and the link's qrStyle is the default look. Or pass data to render any text (URL, Wi-Fi config, vCard...) as a static QR code that is not tracked. Returns the image plus a text line naming exactly what was encoded. Styles are free: module shapes, corner markers, a logo or a halftone photo. For SVG, use GET /v1/links/{linkId}/qr?format=svg.
set_custom_domainFreeServe all of this tenant's short links on a domain it controls, e.g. "go.acme.com" → https://go.acme.com/{slug}. Once active, new short URLs and QR codes use it; links keep working on the platform domain too. One domain per tenant: setting a different one replaces (and tears down) the current one. Setting the same one again is harmless, and restarts it if it failed. Two DNS records are needed at the domain's DNS provider, returned one at a time: first a record (TXT or CNAME) that proves control (for the TLS certificate), then a CNAME pointing the domain at the platform. Lifecycle: pending_validation (create the certificate_validation record, and the optional ownership_verification TXT if listed) → provisioning (automatic, seconds) → pending_dns (create the routing CNAME from the domain to `target`) → active. Nothing advances on its own: call get_custom_domain after each DNS change to move it along. The response always carries `dnsRecords` (exact name/type/value to create, with `done` once seen) and `instructions` saying what to do next. Self-signed-up tenants (see /auth.md) pay once per new domain with x402: without a payment the tool returns an error whose structuredContent is an x402 PaymentRequired (x402Version 2, exact scheme, USDC). Retry with the signed PaymentPayload in the request's _meta["x402/payment"] (the x402 MCP transport), or, if your client cannot set _meta, in the `payment` argument. The settlement comes back in _meta["x402/payment-response"]. Re-setting the current domain, reading and removing are free; tenants given a key by an operator never pay.
set_domain_home_pageFreeChoose the link that the root (/) of this tenant's custom domain shows: a link page becomes the domain's home page, a redirect link sends / there. Pass linkId null to clear it (/ answers 404 again). Has no effect on the platform domain.
test_redirect_rulesFreeDry run: which destination would a visit with these properties get from this link's rules? For a link page with no matching rule it returns page.itemIds (the buttons that visit would see) instead of targetUrl. Records no visit. Pass a real userAgent to test device routing, e.g. iPhone: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1", Android: "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Mobile Safari/537.36". Returns targetUrl, matchedRule (absent when the link's targetUrl is used) and the context the rules saw (os, device, browser, language, country, referrer, source, query, at).
update_groupwrite actionFreeRename a group or change its description or color. Membership doesn't change here.
update_short_linkwrite actionFreeChange a short link. Only the fields you pass change; tags, metadata, qrStyle and groupIds are replaced wholesale (pass the full new list; [] clears). Set targetUrl to send visitors somewhere else: the short URL and printed QR codes keep working. Set status "paused" to make the short URL answer 410, "active" to resume. The slug cannot be changed. page replaces the whole link page (a redirect becomes a page); page: null with a targetUrl turns a page back into a redirect.
Public scan report
scanner v0.1.10 · 2026-10-13 · same rubric, same numbers if you re-run it
- –Code scanremote-only server, no package to scann/a
- Live reliabilityremote reachable in 1519ms20/20
- Tool poisoning21 tool descriptions checked15/15
- Auth qualityAPI key sent as a header8/15
- Maintenancelast push 6 days ago15/15
- Maintainer identityregistry namespace matches repository owner7/10
How esyURL compares
Against every graded Security MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 87/100
- higher than 75% of 915 Security servers
- Tools
- 21
- the typical Security server has 6
- Tools that change things
- 38%
- typical: 0%. Fewer write tools means less an agent can break
- Uptime
- 100%
- of our recent checks; the typical remote Security server answers 100%
- Response time
- 396 ms
- faster than 28% of 547 Security servers
What its tools let an agent do: 10 read · 3 create · 4 change · 4 delete
Install esyURL in Claude Code, Cursor or VS Code
claude mcp add --transport http mcp https://esyurl.fyi/mcp
What the publisher says
From the esyURL repository's README, as published. We do not edit it. Read it on GitHub
esyURL MCP server
A hosted MCP server that lets AI agents create and manage short links and QR codes with esyURL: shorten URLs, render styled QR codes, change where a printed or shared link points, route visitors by device or country, and read click and scan stats. The agent can sign itself up; no human account is needed.
- Endpoint: https://esyurl.fyi/mcp (Streamable HTTP, stateless)
- Auth: Authorization: Bearer esy_...
There is nothing to install or run: this repository describes the hosted server. The server itself is not open source.
Get an API key
An agent without a key can create its own account and get one, following esyurl.fyi/auth.md:
BASE=https://esyurl.fyi
REG=$(curl -s $BASE/agent/identity -H 'content-type: application/json' -d '{"type":"anonymous"}')
KEY=$(curl -s $BASE/oauth2/token \
--data-urlencode grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer \
--data-urlencode assertion=$(echo "$REG" | jq -r .identity_assertion) | jq -r .access_token)
echo $KEYSelf-signed-up accounts get 100 links, 1000 once a human claims the account by email.
Connect
Claude Code:
claude mcp add --transport http esyurl https://esyurl.fyi/mcp \
--header "Authorization: Bearer esy_..."Cursor, VS Code and other clients (.mcp.json style):
{
"mcpServers": {
"esyurl": {
"type": "http",
"url": "https://esyurl.fyi/mcp",
"headers": { "Authorization": "Bearer esy_..." }
}
}
}Tools
Pricing
Links, QR codes and stats are free. Self-signed-up accounts pay once per new custom domain, in USDC with x402; setcustomdomain returns the payment requirements first.
More
(npx skills add esyurl/skills)
- esyurl.fyi/llms.txt: the API for agents
- esyurl.fyi/openapi.json: REST API
- esyurl/skills: the same, as agent skills
License
MIT, for the contents of this repository.
Nothing above is checked by us. What we check is on the safety report.
esyURL: common questions
- Is esyURL MCP server safe?
- Yes, by our scan: it is graded A (87/100). Read the esyURL safety report
- How do I install esyURL?
- It runs remotely at esyurl.fyi. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
- Does esyURL need an API key?
- Yes. The registry entry asks for
Authorization. - Is esyURL maintained?
- The last commit was 28 days ago (2026-10-07). The latest release is v0.2.0.
- Is esyURL up?
- 100% of our last 28 checks got an answer. We check remote servers about four times a day.
- What can I use instead of esyURL?
- Servers from other publishers that do the same job: OpenQR MCP server, PyMemoryEditor MCP server and Autopilot Jobhunt MCP server.
- How does esyURL compare with other Security MCP servers?
- safety score 87/100 (higher than 75% of 915 Security servers); tools 21 (the typical Security server has 6); tools that change things 38% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to esyURL
Same job from other publishers: the closest match first, then the best rated.
- OpenQRGenerate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.not reviewedGrowingB
- PyMemoryEditorRead, write and scan process memory, Cheat Engine style, on Windows, Linux and macOS.not reviewedEstablishedA
- Autopilot JobhuntAgentic job hunt: scan careers pages, score against your resume, draft applications. Never applies.not reviewedGrowingA
- Solana Security StandardScan Solana/Anchor code against the Solana Security Standard and serve the ruleset to MCP clients.not reviewedGrowingA
- Dep ScopeSymbol-level npm dependency analysis: scan verdicts, native alternatives, migration prompts.not reviewedGrowingA