Skip to main content
Documentation

AI Access

Connect Claude, Cursor, Windsurf, or any MCP client to WarpLink, the deep linking MCP server for links, install attribution, and click analytics.

WarpLink provides an MCP server for managing links, analytics, apps, API keys, domains, expenses, and usage from AI tools like Claude, Claude Code, Cursor, and Windsurf. WarpLink is listed in Claude's Connectors Directory. Connect with a one-time browser sign-in (OAuth) or your existing API key, free on all plans, sharing the REST API's rate limit of 60 requests/minute per credential (API key or OAuth token).

Prerequisites

You need a WarpLink account. Most clients connect with the server URL and a one-time browser sign-in (OAuth), so there is no key to create. For CI or other non-interactive use, create an API key with these scopes:

  • links:read and links:write (create, list, update, delete links)
  • apps:read and apps:write (manage registered apps)
  • analytics:read (view click analytics)
  • keys:read and keys:write (list, create, revoke API keys)
  • domains:read and domains:write (manage custom domains)
  • org:read (view organization info and usage)
  • money:read and money:write (read and record link expenses, owner and admin only)

To create a key, go to Keys > API keys in the dashboard and click Create API key, or see the Authentication docs. The SDK key used by the mobile SDKs is a different credential: the MCP server refuses every SDK key, tied to one app or not, with 403 SDK_KEY_ROUTE_FORBIDDEN.

MCP Server

The WarpLink MCP server exposes 34 tools over the Model Context Protocol. Any MCP-compatible client can connect to it.

WarpLink is listed in Claude's Connectors Directory, so you can connect it from Claude without copying a server URL:

  1. In claude.ai, open Customize > Connectors.
  2. Search the directory for WarpLink and choose it.
  3. Connect, then sign in to WarpLink and approve the requested scopes.

The connection works in claude.ai, Claude Desktop, and the Claude mobile apps. On Team and Enterprise plans, an organization Owner adds WarpLink first, and each member then connects with their own WarpLink account.

Most MCP clients can connect with just the server URL and a one-time browser sign-in. No API key to paste, and you authenticate as yourself. On first use, the client opens a WarpLink sign-in and consent screen. Approve the requested scopes once and you're connected. If you belong to more than one organization, use the switch_org tool to choose which one you're working in.

Claude Code: add the server from the CLI, then run /mcp and choose Authenticate to finish the browser sign-in:

This writes the entry below to your .mcp.json; you can also add it by hand:

Claude Desktop: add WarpLink from the Claude directory. To add it by URL instead, open Settings > Connectors > Add custom connector, paste https://api.warplink.app/mcp, and sign in when prompted.

Cursor and Windsurf: add the server with just its URL (no Authorization header). When the client sees that WarpLink supports OAuth, it opens the browser sign-in automatically.

Configuration with an API key

For non-interactive use like CI, or if you prefer a static token, connect with an API key instead.

Add the server with your API key passed as a header:

Prefer the browser sign-in above unless you need non-interactive auth, such as CI.

Claude Desktop's config file only supports local (stdio) servers, so connect through the mcp-remote bridge. Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

The Authorization value is passed through env rather than inline to avoid a header-spacing bug in mcp-remote. Restart Claude Desktop after saving. For a no-config alternative, use Settings > Connectors with browser sign-in instead.

Add this to your Cursor MCP config (.cursor/mcp.json in your project root or ~/.cursor/mcp.json globally):

Reload Cursor after saving.

Add this to your Windsurf MCP config (~/.codeium/windsurf/mcp_config.json). Windsurf uses serverUrl (not url) for remote servers:

Reload Windsurf after saving.

Replace wl_live_YOUR_API_KEY with your actual API key. One API key works across every MCP client. Use an API key here, not an SDK key: both are prefixed wl_live_, but an SDK key is for a mobile app and the MCP server refuses it with 403 SDK_KEY_ROUTE_FORBIDDEN. Never commit a key to source control. Cursor and Windsurf support ${env:VAR} interpolation in the config (for example, "Authorization": "Bearer ${env:WARPLINK_KEY}") if you'd rather reference an environment variable.

Available Tools

Links

ToolDescriptionRequired Scopes
create_linkCreate a new deep linklinks:write
list_linksList links with filtering and paginationlinks:read
get_linkGet a single link by IDlinks:read
update_linkUpdate an existing linklinks:write
deactivate_linkPause a link (reversible; keeps its analytics and slug)links:write
activate_linkResume a paused linklinks:write
delete_linkPermanently delete a link and its clicks (to pause instead, use deactivate_link)links:write
get_link_analyticsGet click analytics for a link, in the org zone or a chosen timezoneanalytics:read
resolve_linkDebug a link by slug: see routing and statuslinks:read
set_link_move_choiceFor a link that cannot move with its slug: pick a new slug, keep it where it is, or clear the choicelinks:write

Analytics

ToolDescriptionRequired Scopes
query_analyticsAnswer analytics questions: overview, one link, a breakdown, a trend, a summary with top movers, a link leaderboard, or a link comparisonanalytics:read
export_analyticsCreate, check, and download a full click-data exportanalytics:read
list_installsList install records with stable IDs and match details, one page at a timeanalytics:read
list_attribution_attemptsList attribution attempts, matched and unmatched, with the reason each one did not matchanalytics:read

Apps

ToolDescriptionRequired Scopes
list_appsList registered apps with paginationapps:read
get_appGet a single app by IDapps:read
create_appRegister a new app (iOS, Android, or both)apps:write
update_appUpdate an app's configuration or rename its subdomainapps:write
delete_appDelete a registered appapps:write
set_app_link_domainChoose the default domain for an app's new links (existing links keep their addresses)apps:write
extend_subdomain_renameAdd 1 month to an app's rename period end date, up to 2 times (the previous subdomain keeps working)apps:write
list_link_movesSee which links still use an app's previous subdomain, and which would need a new slug on the app's subdomain because theirs is takenlinks:read

Keys

ToolDescriptionRequired Scopes
list_keysList SDK and API keyskeys:read
create_keyCreate an SDK or API key (raw key returned once)keys:write
revoke_keyRevoke an SDK or API keykeys:write

Custom Domains

ToolDescriptionRequired Scopes
list_domainsList custom domains with paginationdomains:read
add_domainAdd a custom domain for branded linksdomains:write
get_domain_statusCheck verification and SSL statusdomains:read

Organization

ToolDescriptionRequired Scopes
get_org_infoGet org info, plan, and usage statsorg:read
list_orgsList the organizations you can act onnone
switch_orgChoose the active organization (OAuth connections)none

Money

ToolDescriptionRequired Scopes
query_money_inputsList recorded money inputs (expenses) for the organizationmoney:read
write_expenseRecord, revise, or credit an expense entrymoney:write
export_moneyExport the raw expense ledger as a downloadable filemoney:read

Example Prompts

Once connected, you can use natural language in your MCP client:

  • "Create a WarpLink for https://example.com/promo with the tag summer-sale"
  • "Show me my last 10 links"
  • "How many clicks did my link abc123 get in the past 30 days?"
  • "Why did my clicks change this week, and which country or referrer drove it?"
  • "Show hourly clicks for the last 7 days next to the previous 7 days"
  • "Which of my links have had no clicks in the last 30 days?"
  • "Break down last month's clicks by country and compare to the month before"
  • "Export all clicks from the last 90 days as CSV"
  • "Update the destination URL of link xyz to https://example.com/new-page"
  • "Register a new iOS app with bundle ID com.example.myapp"
  • "What's my current plan and how much of my click quota have I used?"
  • "Add links.mybrand.com as a custom domain"
  • "Create a new API key called 'CI Pipeline' with links:read and links:write scopes"
  • "Debug the link at aplnk.to/promo and show me its routing"

Frequently Asked Questions

It is a remote MCP endpoint at https://api.warplink.app/mcp that exposes WarpLink's link infrastructure to AI clients. Once connected, an assistant can create and update deep links, register iOS and Android apps, read click analytics, debug how a link routes, manage API keys and custom domains, record and export link expenses, and report your plan and usage. Every call acts inside the organization the connection is authenticated for, and nowhere else.

Which MCP clients work with it?

Any client that speaks the Model Context Protocol over Streamable HTTP. The configuration examples above cover Claude Code, Claude Desktop, Cursor, and Windsurf. Clients that support OAuth connect with the server URL alone and open a browser sign-in. Clients that do not can send a WarpLink API key as a bearer header instead.

Nothing extra. MCP access is included on every plan, including Free, and shares the REST API's rate limit of 60 requests per minute per credential (API key or OAuth token). Your plan's limits on apps, links, members, and custom domains still apply to what the tools are able to create.

Should I use OAuth or an API key?

Prefer the browser sign-in for day to day work in an editor. There is nothing to paste, you act as yourself, and one connection spans every organization you belong to, with switch_org to move between them. Use an API key for non-interactive contexts such as CI, where no browser is available. A key is scoped to the organization it was created in, so switch_org does not apply to it. Both methods reach the same endpoint and resolve to the same permissions.

No. The iOS, Android, React Native, and Flutter SDKs talk to WarpLink directly, and your app works with no MCP client involved. The MCP server is a way to manage your link infrastructure from an AI client, not a dependency of the SDKs. The SDK key your app ships with is also a different credential: it is pre-scoped for a mobile app, and the MCP server refuses it with 403 SDK_KEY_ROUTE_FORBIDDEN.

Next Steps