Strait MCP server
OfficialStrait MCP server is an MCP server for creating, managing, and analyzing Strait deep links, with diagnostics, webhook/domain management, and docs search.
Create single or bulk deep links; get, list, search, update, pause, resume, and deactivate links.
Generate link QR codes and inspect where links/taps go.
Read analytics for taps, app opens, installs, conversions, and revenue; compare periods, rank top links, list recent taps/events, and record conversion events.
Simulate or trace taps and check App Links / Universal Links files or any vendor's deep link.
Manage webhooks: list, inspect deliveries, send tests, and redeliver failed deliveries.
Manage custom link domains and inspect workspace, key access, usage, and referrals.
Search Strait docs; some read-only checks work without a key, while writes require a secret key and usually confirmation.
Checks Android App Links configuration via assetlinks.json and reports Android install attribution using the Play Install Referrer.
Checks Apple Universal Links configuration via apple-app-site-association and helps diagnose and fix setup issues.
Traces and simulates how a Strait link is handled when tapped inside Facebook, including preview and bot behavior.
Traces and simulates how a Strait link is handled when tapped inside Instagram, including in-app browser and preview behavior.
Supports iPhone/iOS deferred deep linking through beta install matching, with workspace-configurable device matching or paste handoff.
Traces how a Strait link is handled when opened in Safari, including browser behavior on iPhone and iPad.
Traces and simulates how a Strait link is handled when tapped inside WhatsApp, including preview and in-app browser behavior.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Strait MCP server create a deep link to my app's spring sale page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@straitlink/mcp (preview)
claude mcp add strait --env STRAIT_SECRET_KEY=st_live_your_key -- npx -y @straitlink/mcpUse Strait from AI tools such as Claude Code, Cursor and Claude Desktop: create, find, pause and resume deep links, get their QR codes, read and compare analytics, see recent taps and conversion events, manage custom link domains, look after webhooks (list, deliveries, test, redeliver), check App Links / Universal Links files or any vendor's link, see where taps on a link go and search the Strait docs.
It is a local stdio server with 34 tools. Eleven of them write (create_link, batch_create_links, update_link,
pause_link, resume_link, deactivate_link, record_event, add_domain, remove_domain, test_webhook,
redeliver_webhook_delivery); the other twenty-three only read. check_app_links, check_link, search_docs and demo
trace_tap work without a key; every other tool needs your secret key. Other deep-link vendors also ship MCP servers
that can create links, so this README makes no "first" or "only" claim; it describes what this server does today.
iPhone links: live · install matching: opt-in. iPhone links (Universal Links) are live. iPhone install matching (deferred deep linking on iOS) is opt-in: off until your workspace chooses a method in Dashboard → Settings → iPhone installs (device matching, paste handoff, both or neither), which the SDK reads at runtime. Device matching is off for new workspaces, and iPhone matches are labelled Estimated until measured. Android uses the Play Install Referrer.
Hosted server. The same tools are served at
https://strait.link/mcp(Streamable HTTP, since 24 Oct 2026):claude mcp add --transport http strait https://strait.link/mcp --header "Authorization: Bearer st_live_your_key". It takes a secret key in theAuthorizationheader (60 requests burst, then 1 a second, per key); OAuth sign-in is not there yet. The engine serves it with this package'screateStraitServer()(library entry, 0.3.0).
Tools
A read-only secret key (Dashboard → Settings → Keys, access "Read only") is offered only the tools that read (0.5.1; the hosted server already did this). Full and links-only keys see every tool; the API still refuses anything outside the key's access.
Tool | What it does | Key needed |
| Create one link and get its | secret |
| Create up to 500 links in one call (safe to re-run: existing slugs are per-item 409s) | secret |
| Read one link by slug | secret |
| List links, one page at a time. | secret |
| Change destination, title, tags or expiry, or | secret |
| Taps, app opens, installs, conversions and revenue, by day / channel / link / platform / campaign / country / UTM tag ( | secret |
| Check a domain's | none |
| Dry-run one tap from one device or app (nothing recorded or billed) | secret |
| Walk a link through WhatsApp, Instagram, Facebook, Chrome, Safari, iPad, computer and preview bots; or read a Live Tap Trace from the website demo | secret (link) / none (demo token) |
| Who the key is: workspace, link domain, custom domains, plan, the key's access (full / links / read) and the saved QR styles ( | secret |
| This month's taps and new links against the plan, | secret |
| The app setup Strait has: Android package, signing fingerprints and scheme; iPhone Team ID, bundle ID and App ID; each link domain's | secret (read or full) |
| Every setup check as pass / warn / fail / unknown / skip with a fix (app details, both files on each link domain fetched live, SDK connected and current, link opens, webhooks); | secret (read or full) |
| Referral report: taps and referred installs per code ( | secret |
| A webhook's deliveries (status, attempts, last HTTP status, next retry; no payloads). Without | secret |
| Send one | secret |
| Send a failed delivery again (same | secret |
| Turn a link off: taps then get the "link not found" page. Asks for | secret |
| Pause a link (taps get the "link not found" page until it is resumed). Asks for | secret |
| Turn a paused link back on. Asks for | secret |
| Find links by text in slug, title, destination, campaign or tags, or by exact tag or campaign; active, inactive or all (0.3.0) | secret (owner/admin) |
| A link's QR code as a PNG image or SVG, in the workspace's QR style or a saved style ( | secret |
| Every live link of a campaign as QR codes in one ZIP (SVG, or PNG up to 1024 px), handed back as an embedded file; 3 a minute per workspace ( | secret |
| Two periods side by side (default: the one just before), totals and per channel / platform / link, with % change (0.3.0) | secret |
| Top links by taps, app opens, installs or conversions, with each one's share (0.3.0) | secret |
| Recent taps, newest first, with where each was sent and the open/install it led to (default: last hour) (0.3.0) | secret (owner/admin) |
| Recent conversion and revenue events, newest first (default: last 7 days) (0.3.0) | secret (owner/admin) |
| Record a server-side conversion ( | secret |
| Custom link domains with status and the DNS records to add (0.3.0) | secret |
| Add a custom link domain and get its DNS records (Scale and Enterprise). Asks for | secret |
| Remove a custom link domain. Asks for | secret |
| The workspace's webhooks: id, receiver site (host only), events, on/off (0.3.0) | secret |
| Check any vendor's deep link (Firebase page.link, Branch, Strait): where it goes and what to fix (0.3.0) | none |
| Search the live Strait docs (refreshed hourly; bundled copy offline) | none |
Every tool carries MCP annotations (readOnlyHint, destructiveHint, …) and the descriptions of the 0.2 and 0.3
tools start with "Read-only." or "Write.". update_link, pause_link, deactivate_link and remove_domain are
destructive. Every write except create_link, batch_create_links and test_webhook shows a preview first and acts
only with confirm: true. create_link and
batch_create_links write new links but never change existing ones. There is no delete tool: a deactivated link
keeps its history.
Related MCP server: ULink MCP Server
Prompts
Clients that show MCP prompts (Claude Code: type /) offer six starters. All but get_started and migrate_firebase_links only read, and those two create links only after you answer yes:
Prompt | What it does |
| Zero to a working link: checks the key with |
| This week against last week (totals and channels), the top links by installs, and anything down more than 30 % |
| Why a link opens the browser: the setup checks ( |
| Every setup check with its fix ( |
| Maps your Firebase Dynamic Links (long links, export rows or short links checked with |
| Why a link opened the store, browser or nothing: the setup checks ( |
Keys
The server needs a secret key (st_live_…) from Dashboard → Settings → Keys. A secret key can change your
links, so:
Create a separate key for your AI tools, so you can revoke it on its own.
Keep it in the MCP client's config or environment, never in app or website code.
A publishable key (
st_pub_live_…) does not work here: it is for the SDKs in your apps.The server sends the key only as an
Authorization: Bearerheader toSTRAIT_API_URL, never logs it, and replaces anything shaped like a secret key in tool output or errors withst_…[redacted].
Without a key, check_app_links, search_docs and demo trace_tap still work.
Variable | Meaning |
| Your secret key ( |
| Engine URL. Default |
|
|
Install
Claude Code plugin (hosted server + skills)
/plugin install strait --marketplace strait-link/strait-mcp(On older Claude Code: /plugin marketplace add strait-link/strait-mcp, then /plugin install strait@strait-link.) It asks
for a secret key when you enable it and keeps it in your system's credential store. It connects to the hosted server
https://strait.link/mcp and adds four skills: strait-setup (sets Strait up in an app), strait-troubleshoot,
strait-events (tracks an in-app event) and strait-migration (from Firebase Dynamic Links or Branch). Privacy:
https://straitlink.in/legal/privacy/
Claude Code
claude mcp add strait --env STRAIT_SECRET_KEY=st_live_your_key -- npx -y @straitlink/mcpCursor
~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project; don't commit a key):
{
"mcpServers": {
"strait": {
"command": "npx",
"args": ["-y", "@straitlink/mcp"],
"env": { "STRAIT_SECRET_KEY": "st_live_your_key" }
}
}
}Claude Desktop
Settings → Developer → Edit config, then add the same "strait" entry under mcpServers and restart.
From a checkout
cd mcp-server && npm ci && npm run build
claude mcp add strait --env STRAIT_SECRET_KEY=st_live_your_key -- node "$PWD/dist/stdio.js"In Cursor or Claude Desktop use "command": "node", "args": ["/absolute/path/to/mcp-server/dist/stdio.js"].
Try it
"Create a Strait link
summerto https://shop.hilltop.example/summer with the title Summer sale.""Which channel brought the most installs last month?"
"My links open the browser instead of the app. Check hilltop.strait.link and shop.hilltop.example."
"What happens when someone taps
summerinside Instagram on an iPhone?""How do I receive links in Expo Router?"
"How much of this month's plan have we used?"
"My webhook stopped firing. Show me its last deliveries, send it a test, and resend the failed ones."
"Turn off the
spring-salelink." (you'll see a preview first)"Which referral codes brought the most installs in October?"
"How did this week do against last week, by channel?"
"Which links point at /summer? Pause the old ones."
"Did my test tap on
summerjust now get recorded, and did it open the app?""Give me a QR code for
summerin dark grey.""Is links.hilltop.example set up yet? Which DNS records are missing?"
"Check https://hilltop.page.link/abc before we migrate it."
Hilltop Shoes (hilltop.strait.link, *.hilltop.example) is a made-up shop used in examples.
Contributing
Building, testing and releasing this package: docs/MAINTAINERS.md.
Licence
MIT. See LICENSE.
Claude Code skills
skills/strait-setup/SKILL.md teaches Claude Code how to add Strait to an app (React Native / Expo, Flutter,
Android, iOS, Unity, Capacitor, web, and a Node server). Copy the folder into ~/.claude/skills/ or a project's
.claude/skills/, or download it from https://straitlink.in/ai/strait-setup/SKILL.md.
Docs and support
Docs: straitlink.in/docs/ · platform status · troubleshooting
Talk to the Strait team: support@straitlink.in (replies within 1 working day, IST) or call +91 81218 61890.
Bugs and feature requests: open an issue on this repo.
Security: never in a public issue. Write to security@straitlink.in.
Available Tools
31 toolsadd_domainAdd a custom domainAInspect
Write. Adds a custom link domain (a subdomain you own, e.g. links.hilltop.example) and returns the DNS records to add at your DNS provider: a CNAME to Strait, a TXT record proving ownership and a TXT record for the HTTPS certificate. Scale and Enterprise only, at most 5 per workspace. Needs confirm: true; without it nothing changes and you get a preview (plan, limit, domains already added).
Inputs: hostname (required), confirm.
batch_create_linksCreate links in bulkAIdempotentInspect
Create up to 500 links in one call (imports, migrations, campaigns). Each item is checked like create_link and gets its own result; a slug that already exists is a per-item 409, so re-running an import is safe. Read results[i].ok.
Inputs: links (required).
check_app_linksCheck App Links / Universal Links filesARead-onlyIdempotentInspect
Check a domain's App Links (Android, /.well-known/assetlinks.json) and Universal Links (iPhone, apple-app-site-association) files: each finding has a severity (ok / warn / error) and a fix. Use it when links open the browser instead of the app. It checks the files the domain serves, not how one particular phone behaves. No key needed.
Inputs: domain (required).
check_linkCheck any deep linkARead-onlyIdempotentInspect
Read-only. Checks any deep link, from any vendor (a Firebase Dynamic Link on page.link, Branch app.link, a Strait link, a plain URL): where it goes on Android, iPhone and computers, whether it still works, and what to fix. Use it before migrating links or when an old link stopped working. Only public https links. No key needed; a few checks a minute per network.
Inputs: url (required).
compare_analyticsCompare two periodsARead-onlyIdempotentInspect
Read-only. Compares two periods: taps, app opens, installs, conversions and revenue now against before, with the change and the percent change (null when before was 0). By default "before" is the period of the same length just before. With group (channel, platform or link) it compares each row too, biggest first. Use it for "how did this week do against last week" or "why did installs drop". Days are UTC; each period at most 92 days.
Inputs: to, from, link, group, +3 more.
create_linkCreate a linkAInspect
Create one deep link (short link) in the workspace of STRAIT_SECRET_KEY. Returns the link with its shortUrl (https://.strait.link/) to share. The link opens the app when installed (App Links / Universal Links), otherwise the store or website, and keeps the destination through an install. For more than a few links use batch_create_links.
Inputs: slug (required), longUrl (required), tags, title, +9 more.
deactivate_linkDeactivate a linkADestructiveIdempotentInspect
Write. Turns a link off: afterwards every tap on it gets the "link not found" page instead of the app, store or website. Its history stays in analytics, and it can be turned back on with update_link with isActive: true. This needs confirm: true; without it nothing changes and you get a preview of the link to show the user first.
Inputs: slug (required), confirm.
get_analyticsRead analyticsARead-onlyIdempotentInspect
Taps, app opens, installs, conversions and revenue for the workspace (or one link) over a date range, optionally grouped by day, channel (whatsapp, instagram, gmail, direct…), link or platform. Same definitions as the dashboard; days are UTC; at most 92 days per call (default: the last 30 days).
Inputs: to, from, link, group.
get_linkGet a linkARead-onlyIdempotentInspect
Get one active link by slug: destination, fallbacks, tags, expiry and its shortUrl.
Inputs: slug (required).
get_link_qrGet a QR code for a linkARead-onlyIdempotentInspect
Read-only. A print-ready QR code for a link, in the workspace's QR style (Dashboard → Settings → QR codes); the options override it for this one code. Returns the image (PNG, or SVG markup) and the exact URL in the code. By default scans add utm_source=qr, so they show as the qr channel in analytics. Refused (400) if the colours have under 3:1 contrast.
Inputs: slug (required), logo, size, color, +3 more.
get_referralsRead the referral reportARead-onlyIdempotentInspect
Read-only. The referral report (a preview): for each referral code in a date range, the taps that carried it and the referred installs, most conversions first. Days are UTC; at most 92 days per call (default: the last 30 days). If referrals are not switched on for the workspace yet, says so instead of failing.
Inputs: to, from.
get_top_linksRank the top linksARead-onlyIdempotentInspect
Read-only. The workspace's top links over a date range, ranked by taps, app opens, installs or conversions, with each link's share of the total. Use it for "which links brought the most installs this month". Days are UTC; at most 92 days (default: the last 30).
Inputs: by, to, from, limit.
get_usageRead this month's usageARead-onlyIdempotentInspect
Read-only. This calendar month's usage (UTC) against the workspace's plan: billed taps used and included, new links created and included (null = no limit), level (ok, warn from 80 % of included taps, over from 100 %) and new_links_paused. Going over never stops a redirect; new_links_paused means create_link answers 402 until an upgrade or the month ends.
Inputs: no named parameters.
get_workspaceRead the workspace and keyARead-onlyIdempotentInspect
Read-only. Who this secret key is: the workspace name, its link domain (the host every shortUrl uses, e.g. hilltop.strait.link or a verified custom domain), custom domains, the plan, and what the key may do (full, links or read). Call it first when you need the link domain (for check_app_links) or to know whether the key can write.
Inputs: no named parameters.
list_domainsList custom domainsARead-onlyIdempotentInspect
Read-only. The workspace's custom link domains (e.g. links.hilltop.example) with each one's status (pending_dns until the DNS records are in place, then live; verified once ownership is proven) and the exact DNS records to add. Also says whether custom domains are switched on and allowed on this plan (Scale and Enterprise) and the limit. Use it for "is my domain set up yet".
Inputs: no named parameters.
list_eventsList recent eventsARead-onlyIdempotentInspect
Read-only. Recent conversion and revenue events (from the SDKs' track calls or record_event), newest first: name, value, currency, platform, the link and tap they are attributed to, and that tap's channel and campaign. Default: the last 7 days. Use it to check that purchases or sign-ups arrive. Reads the events export (an owner's or admin's key).
Inputs: to, from, slug, limit.
list_linksList linksARead-onlyIdempotentInspect
List links, newest first, one page at a time. Pass nextCursor back as cursor until it is null. status: active (default) or paused (turned off, and can be turned back on with update_link isActive: true; links disabled for abuse are not listed).
Inputs: limit, cursor, status.
list_tapsList recent tapsARead-onlyIdempotentInspect
Read-only. Recent individual taps, newest first: when, which link, platform, channel, in-app browser, where Strait sent it (sent_to), and the app open and install it led to (opened_at, open_kind, installed_at, match_method). Default: the last hour. Use it to check that a test tap was recorded and what happened to it. Reads the taps export (an owner's or admin's key).
Inputs: to, from, slug, limit.
list_webhook_deliveriesList webhook deliveriesARead-onlyIdempotentInspect
Read-only. A webhook's delivery history, newest first (kept 30 days): each event sent, its status (pending = waiting for a retry, delivered, failed = gave up after 6 attempts), attempts, last HTTP status or error and the next retry time. A permanent error (e.g. unsafe_target) fails at once. Payloads are never returned. Without webhookId it lists the workspace's webhooks (id, receiver site, events, active) so you can pick one. Use it when a webhook seems to have stopped.
Inputs: limit, cursor, webhookId.
list_webhooksList webhooksARead-onlyIdempotentInspect
Read-only. The workspace's webhooks: id, receiver site (the host only: receiver URLs often carry a secret), the events each one gets (link.clicked, app.opened, install.matched, app.event, referral.converted) and whether it is on. Never returns signing secrets. Use the id with list_webhook_deliveries or test_webhook. Webhooks are added in Dashboard → Settings → Webhooks.
Inputs: no named parameters.
pause_linkPause a linkADestructiveIdempotentInspect
Write. Pauses a link: until it is resumed, every tap gets the "link not found" page instead of the app, store or website. Its history stays in analytics. Needs confirm: true; without it nothing changes and you get a preview of the link to show the user. Undo with resume_link.
Inputs: slug (required), confirm.
record_eventRecord a conversion eventAInspect
Write. Records one conversion or revenue event from your server side (trusted: sentWith secret_key), the same as POST /v1/event. It counts in analytics and revenue and is sent to webhooks subscribed to app.event, so it needs confirm: true; without it nothing is recorded and you get a preview. clickId ties it to the tap it came from (apps get it from the SDK). eventId (e.g. your order id) makes retries safe: the same eventId is stored once. Apps should send events with the SDKs, not this tool.
Inputs: event (required), data, value, linkId, +5 more.
redeliver_webhook_deliveryRedeliver a webhook deliveryAInspect
Write. Sends one past webhook delivery again, right away, to the webhook's current URL, with the same X-Strait-Delivery id (receivers that de-duplicate on it are safe); its retry schedule starts over. For failed deliveries. This re-sends a real event into the receiving system, so it needs confirm: true; without it nothing is sent. Refused (409) when already delivered or being sent right now. A paused webhook must be turned back on first (Dashboard → Settings → Webhooks), otherwise the redelivery fails at once.
Inputs: deliveryId (required), confirm.
remove_domainRemove a custom domainADestructiveIdempotentInspect
Write. Removes a custom link domain: links stop working on it at once (they keep working on the workspace's strait.link address). Afterwards delete its CNAME and TXT records at your DNS provider. Needs confirm: true; without it nothing changes and you get a preview.
Inputs: hostname (required), confirm.
resume_linkResume a paused linkAIdempotentInspect
Write. Turns a paused link back on: taps follow it again within about 30 seconds. Needs confirm: true; without it nothing changes and you get a preview (it looks the link up among paused links). A link disabled for breaking the acceptable use policy cannot be resumed, and if another active link now uses the slug, pause or rename that one first. list_links with status: paused lists paused links.
Inputs: slug (required), confirm.
search_docsSearch the docsARead-onlyIdempotentInspect
Search the Strait documentation (SDK setup for React Native / Expo, Flutter, Android, iOS, Unity, web and Node; App Links and Universal Links; deferred deep linking; analytics; REST API; webhooks; migrating from Firebase Dynamic Links or Branch; troubleshooting). Returns the closest-matching sections as Markdown with their URLs. Works offline.
Inputs: query (required), limit.
search_linksSearch linksARead-onlyIdempotentInspect
Read-only. Finds links by text across slug, title, destination (longUrl), campaign and tags, or by an exact tag or campaign, including paused and inactive links (status: all). Use it for "which links point at /summer", "every link tagged diwali" or "links in the spring campaign". Reads the workspace's links export, so it needs an owner's or admin's secret key.
Inputs: tag, limit, query, status, +1 more.
simulate_tapSimulate a tapARead-onlyIdempotentInspect
Dry-run one tap on a link from one kind of device or app and see exactly what Strait would do (redirect, in-app-browser escape page, store, preview card) and why. Nothing is recorded or billed. ua is a preset or a raw User-Agent string.
Inputs: ua (required), url, slug.
test_webhookSend a test webhookAInspect
Write. Sends one test event (event: ping) to a webhook right now, even if it is paused, and returns whether the receiver accepted it, its HTTP status and the time taken (never its response body). The ping is not stored or retried and changes nothing in Strait. Get the id from list_webhook_deliveries without webhookId.
Inputs: webhookId (required).
trace_tapTrace taps on a linkARead-onlyIdempotentInspect
Explain where taps on a link go. With slug or url: walks the link through the common channels (Android Chrome, WhatsApp, Instagram and Facebook in-app browsers, iPhone Safari and Instagram, iPad, computer, preview bot) and returns one row per channel with the decision, where the tap is sent and the reason. A simulation: nothing is recorded. With token: reads a Live Tap Trace from the straitlink.in demo (the st value of a demo.strait.link/try link), i.e. what happened to a real tap.
Inputs: url, slug, token.
update_linkUpdate a linkADestructiveIdempotentInspect
Change a link: its destination, title, tags or expiry, or turn it off or back on with isActive. People who tap the link afterwards get the change, so this needs confirm: true. Without it nothing changes: you get a preview of the current and proposed values to show the user first. null clears expiresAt / expiredAction / expiredUrl. isActive is sent on its own: false pauses the link (taps get the "link not found" page), true turns a paused link back on (taps follow within about 30 seconds). A link disabled for breaking the acceptable use policy cannot be turned back on, and if another active link now uses the slug, pause or rename that one first.
Inputs: slug (required), tags, title, confirm, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 31 tools
Most tools target distinct resources, but link state control is muddled: pause_link, deactivate_link, and update_link with isActive all turn a link off, while resume_link and update_link isActive:true both turn it back on. simulate_tap and trace_tap also overlap as diagnostics, though their scopes differ enough to be distinguishable.
All tools follow a consistent snake_case verb_noun pattern (create_link, list_links, get_analytics, check_app_links, etc.). Singular/plural noun differences reflect the operation and do not break predictability.
The 31-tool surface is broad but reflects a multi-feature deep linking platform (links, analytics, webhooks, domains, diagnostics, docs). Still, it is heavy for an agent, and some tools are redundant or could be consolidated.
Core link CRUD, analytics, diagnostics, domains, and webhook inspection/retry are well covered. Minor gaps remain: webhooks cannot be created or updated via tools (dashboard-only), and there is no permanent link deletion operation.
Related MCP Connectors
Access and search Branch's official API documentation directly within any AI agent or client.
Link infrastructure for developers and AI agents: deep links, attribution, real-time analytics.
Make, find, pause and track short links and QR codes from your AI assistant. Create short links with an optional custom address, title and tags; find links and QR codes; update, pause, resume, archive or restore them; and read click analytics (clicks, unique visitors, countries, referrers, devices, browsers) for a link, a QR code or the whole account. Sign in with OAuth and choose what the assistant may do. Every change can be undone; nothing is ever permanently deleted. Works on every plan, including Free.
Short-link service embedded in your AI workflow — shorten links, track campaigns, read stats.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to create, update, and manage short links through your Dub.co account, allowing for creation, modification, and deletion of custom shortened URLs.448 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to manage ULink deep linking projects, including creating smart links, configuring domains, and viewing analytics.24360 npmMIT

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- AlicenseNot gradedqualityCmaintenanceEnables AI assistants and agents to create and manage branded short links, dynamic QR codes, Link-in-Bio profiles, responsive landing pages, domains, campaigns, A/B tests, and marketing analytics through natural language.21 npmMIT