MCP.Market

esyURL MCP server

online · 100% uptime
by esyurl·io.github.esyurl/mcp·v0.2.0

Short links and trackable QR codes: editable after printing, device routing, scan stats.

A87/100grade A
What users say
No reviews yet
Be the first
Safety scan
A87/100

full report

Adoption
Growing

0 stars

Reviews

Write one

Nobody 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 posts
  • add_links_to_groupFree

    Add 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 actionFree

    Create 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 actionFree

    Create 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 actionFree

    Delete a group. Its links are NOT deleted; they just stop being members.

  • delete_short_linkwrite actionFree

    Permanently 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_domainFree

    Get 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_groupFree

    Fetch one group. To see its links use list_short_links with group = groupId.

  • get_group_visitsFree

    Combined 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_linkFree

    Fetch one short link by linkId, including its groupIds and lifetime visitCount.

  • get_short_link_visitsFree

    Visit 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_groupsFree

    List your groups (with linkCount), ordered by groupId. Page with cursor = nextCursor.

  • list_short_linksFree

    List 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_pageFree

    Render 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 actionFree

    Remove 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 actionFree

    Take one link out of a group. The link itself is untouched.

  • render_qr_codeFree

    Render 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_domainFree

    Serve 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_pageFree

    Choose 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_rulesFree

    Dry 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 actionFree

    Rename a group or change its description or color. Membership doesn't change here.

  • update_short_linkwrite actionFree

    Change 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

no findings
  • –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
Overall 87/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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
Add to Cursor

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 $KEY

Self-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.

  • OpenQR
    Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.
    B
  • PyMemoryEditor
    Read, write and scan process memory, Cheat Engine style, on Windows, Linux and macOS.
    A
  • Autopilot Jobhunt
    Agentic job hunt: scan careers pages, score against your resume, draft applications. Never applies.
    A
  • Solana Security Standard
    Scan Solana/Anchor code against the Solana Security Standard and serve the ruleset to MCP clients.
    A
  • Dep Scope
    Symbol-level npm dependency analysis: scan verdicts, native alternatives, migration prompts.
    A