Strait
NPM · @STRAITLINK/MCP · 2 COMPONENTS
Create, search and pause deep links; QR codes; analytics, taps, events; domains; webhooks.
Available components
Last scanned (18 hours ago)
Scores higher than 72% of npm servers
Category Marketing and SEO
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to strait-link/strait-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability80
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5407 tokens (~168/item across 32 items; 32 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability observed for 0 of 30 days with no destabilising changes; credit accrues until the full window elapses.Unverified
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 90% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 33 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 82
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed npm/@straitlink/mcp@0.6.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | strait-link/strait-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/strait-link/strait-mcp/.github/workflows/release.yml@refs/tags/v0.6.0 |
| Rekor log index | 3686504997 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:92353b122fb4f7601847aa947e472723697912d082056b9857af48aeec8642b58530a06c2f81a185761d8bbb525b53d7707bf996ba7d82db759396df6 |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_domain Add a custom domain ~135
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).
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to add it; omit or false to preview |
| hostname | string | yes | A subdomain you own, such as links.hilltop.example |
No output schema declared.
No examples provided.
batch_create_links Create links in bulk ~71
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.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | – |
No output schema declared.
No examples provided.
check_app_links Check App Links / Universal Links files ~119
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | A domain such as hilltop.strait.link or shop.hilltop.example (a full URL is reduced to its host) |
No output schema declared.
No examples provided.
check_link Check any deep link ~113
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.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | The full link, e.g. https://hilltop.page.link/abc |
No output schema declared.
No examples provided.
compare_analytics Compare two periods ~231
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.
| Name | Type | Req | Description |
|---|---|---|---|
| compareFrom | string | – | Start of the period to compare against; default: just before from |
| compareTo | string | – | End of the period to compare against; default: from |
| from | string | – | Inclusive start: 2026-10-01, an ISO date-time or epoch ms |
| group | string | – | Also compare row by row |
| limit | integer | – | Rows to compare with group, default 10 |
| link | string | – | Only this link (slug) |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
create_link Create a link ~338
Create one deep link (short link) in the workspace of STRAIT_SECRET_KEY. Returns the link with its shortUrl (https://<workspace>.strait.link/<slug>) 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.
| Name | Type | Req | Description |
|---|---|---|---|
| androidFallbackUrl | string | – | Android without the app (website mode): this page instead of longUrl |
| campaign | string | – | Campaign name for analytics; defaults to longUrl's utm_campaign |
| description | string | – | Social preview description |
| desktopUrl | string | – | Computers go here instead of longUrl |
| expiredAction | string | – | Where taps go after expiry: page (expired page), store (app store), url (expiredUrl) |
| expiredUrl | string | – | Required with expiredAction url |
| expiresAt | string|number | – | After this the link stops opening its destination. Omit for never. |
| imageUrl | string | – | Social preview image (https) |
| iosFallbackUrl | string | – | iPhone without the app: this page instead of longUrl |
| longUrl | string | yes | Where the link goes: an https URL on your app's domain. The app receives its path and query as the in-app route. |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
| tags | array | – | – |
| title | string | – | Social preview title |
No output schema declared.
No examples provided.
deactivate_link Deactivate a link ~134
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to deactivate; omit or false to preview |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
No output schema declared.
No examples provided.
get_analytics Read analytics ~138
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).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Inclusive start: 2026-09-01, an ISO date-time or epoch ms |
| group | string | – | – |
| link | string | – | Only this link (slug) |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
get_campaign_qr_zip Get a campaign's QR codes as a ZIP ~306
Read-only. Every live link of one campaign as print-ready QR codes in one ZIP (one file per link, `<slug>-qr.svg` or .png, sorted by slug), in the workspace's QR style or a saved style (preset; get_workspace lists them as qrStyles). SVG by default (vector, for print); PNG at most 1024 px and 50 links. Returns a summary and the ZIP as an embedded file. Scans add utm_source=qr by default. Limit: 3 ZIPs a minute per workspace. For very large campaigns use Dashboard -> Links -> filter by campaign -> QR ZIP.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Background colour as hex, overrides the style |
| campaign | string | yes | The links' campaign name, e.g. diwali_sale (case-insensitive, as in the dashboard's links filter) |
| color | string | – | Code colour as hex, overrides the style |
| format | string | – | svg (default) or png |
| logo | boolean | – | Put the app icon in the middle, overrides the style |
| preset | string | – | A saved QR style (its id from get_workspace qrStyles); color, background and logo still override it |
| size | integer | – | Width and height in pixels (default 1024; PNG at most 1024) |
| track | boolean | – | Add utm_source=qr so scans count as the qr channel (default true) |
No output schema declared.
No examples provided.
get_link Get a link ~63
Get one active link by slug: destination, fallbacks, tags, expiry and its shortUrl.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
No output schema declared.
No examples provided.
get_link_qr Get a QR code for a link ~286
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, or pass preset to use a saved style (get_workspace lists them). 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.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Background colour as hex, e.g. ffffff |
| color | string | – | Code colour as hex, e.g. 1f2937 |
| format | string | – | png (default) or svg |
| logo | boolean | – | Put the app icon in the middle (default: the workspace setting) |
| preset | string | – | A saved QR style (its id from get_workspace qrStyles); color, background and logo still override it |
| size | integer | – | Width and height in pixels, default 512 |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
| track | boolean | – | Add utm_source=qr so scans count as the qr channel (default true) |
No output schema declared.
No examples provided.
get_referrals Read the referral report ~119
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.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Inclusive start: 2026-10-01, an ISO date-time or epoch ms |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
get_top_links Rank the top links ~140
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).
| Name | Type | Req | Description |
|---|---|---|---|
| by | string | – | What to rank by, default taps |
| from | string | – | Inclusive start: 2026-10-01, an ISO date-time or epoch ms |
| limit | integer | – | Links to return, default 10 |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
get_usage Read this month's usage ~90
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_workspace Read the workspace and key ~114
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, what the key may do (full, links or read) and the saved QR styles (qrStyles: their id is the preset for get_link_qr and get_campaign_qr_zip). Call it first when you need the link domain (for check_app_links) or to know whether the key can write.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_domains List custom domains ~92
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".
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_events List recent events ~154
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).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Inclusive start: 2026-10-01, an ISO date-time or epoch ms |
| limit | integer | – | Events to return, default 20 |
| slug | string | – | Only events attributed to this link |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
list_links List links ~104
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).
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | nextCursor from the previous page |
| limit | integer | – | Page size, default 50 |
| status | string | – | active (default) or paused |
No output schema declared.
No examples provided.
list_taps List recent taps ~163
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).
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Inclusive start: 2026-10-01, an ISO date-time or epoch ms |
| limit | integer | – | Taps to return, default 20 |
| slug | string | – | Only taps on this link |
| to | string | – | Exclusive end, same formats; default now |
No output schema declared.
No examples provided.
list_webhook_deliveries List webhook deliveries ~169
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | nextCursor from the previous page |
| limit | integer | – | Page size, default 20 |
| webhookId | string | – | The webhook id; omit to list the webhooks first |
No output schema declared.
No examples provided.
list_webhooks List webhooks ~96
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
pause_link Pause a link ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to pause; omit or false to preview |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
No output schema declared.
No examples provided.
record_event Record a conversion event ~277
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.
| Name | Type | Req | Description |
|---|---|---|---|
| clickId | string | – | The tap this conversion came from |
| confirm | boolean | – | true to record it; omit or false to preview |
| currency | string | – | ISO currency, e.g. INR or USD |
| data | object | – | Up to 20 custom key-values for the app.event webhook (not stored with the event) |
| event | string | yes | Event name, e.g. purchase or signup |
| eventId | string | – | Idempotency id, e.g. ord_1001 |
| linkId | string | – | The link, when there is no clickId |
| platform | string | – | ios, android or web |
| value | number | – | Revenue amount, e.g. 499 |
No output schema declared.
No examples provided.
redeliver_webhook_delivery Redeliver a webhook delivery ~162
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to send it; omit or false to preview |
| deliveryId | string | yes | The delivery id, from list_webhook_deliveries |
No output schema declared.
No examples provided.
remove_domain Remove a custom domain ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to remove it; omit or false to preview |
| hostname | string | yes | A subdomain you own, such as links.hilltop.example |
No output schema declared.
No examples provided.
resume_link Resume a paused link ~142
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to resume; omit or false to preview |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
No output schema declared.
No examples provided.
search_docs Search the docs ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Sections to return, default 4 |
| query | string | yes | – |
No output schema declared.
No examples provided.
search_links Search links ~176
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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign | string | – | Only links in exactly this campaign |
| limit | integer | – | Links to return, default 20 |
| query | string | – | Text to find (case-insensitive) in slug, title, longUrl, campaign or tags |
| status | string | – | active (default), inactive (paused or disabled) or all |
| tag | string | – | Only links with exactly this tag |
No output schema declared.
No examples provided.
simulate_tap Simulate a tap ~153
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.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | – | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
| ua | string | yes | A preset (android, iphone, ipad, desktop, instagram-ios, instagram-android, facebook-android, whatsapp-android, bot) or a raw User-Agent |
| url | string | – | The full short link instead of slug |
No output schema declared.
No examples provided.
test_webhook Send a test webhook ~92
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.
| Name | Type | Req | Description |
|---|---|---|---|
| webhookId | string | yes | The webhook id |
No output schema declared.
No examples provided.
trace_tap Trace taps on a link ~182
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.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | – | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
| token | string | – | Demo trace token (st=…) instead of a link |
| url | string | – | – |
No output schema declared.
No examples provided.
update_link Update a link ~270
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true to apply the change; omit or false to preview it |
| expiredAction | – | – | – |
| expiredUrl | – | – | – |
| expiresAt | – | – | – |
| isActive | boolean | – | Alone: false pauses the link, true turns a paused link back on |
| longUrl | string | – | – |
| slug | string | yes | The link's slug: the part after the link domain, e.g. `summer` in https://hilltop.strait.link/summer |
| tags | array | – | – |
| title | string | – | – |
No output schema declared.
No examples provided.
How do I install the Strait MCP server?
Strait runs locally as an npm package, launched with npx -y @straitlink/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @straitlink/mcp
claude mcp add in-straitlink-mcp -- npx -y @straitlink/mcp
What is the Strait MCP server?
Strait is an MCP server listed in the public MCP registry as in.straitlink/mcp. Create, search and pause deep links; QR codes; analytics, taps, events; domains; webhooks. This page covers its npm package (@straitlink/mcp).
Is the Strait MCP server safe to use?
Strait scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Strait MCP server expose?
Strait exposes 32 tools: create_link, batch_create_links, get_link, list_links, update_link, and 27 more. Their descriptions and schemas cost roughly 4,951 tokens of context every time the server is loaded.
Is the Strait MCP server still maintained?
Strait is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Strait MCP server under?
Strait declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.