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:readandlinks:write(create, list, update, delete links)apps:readandapps:write(manage registered apps)analytics:read(view click analytics)keys:readandkeys:write(list, create, revoke API keys)domains:readanddomains:write(manage custom domains)org:read(view organization info and usage)money:readandmoney: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.
Add WarpLink from the Claude directory
WarpLink is listed in Claude's Connectors Directory, so you can connect it from Claude without copying a server URL:
- In claude.ai, open Customize > Connectors.
- Search the directory for WarpLink and choose it.
- 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.
Sign in with your browser (recommended)
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:
claude mcp add --transport http warplink https://api.warplink.app/mcp
This writes the entry below to your .mcp.json; you can also add it by hand:
{
"mcpServers": {
"warplink": {
"type": "http",
"url": "https://api.warplink.app/mcp"
}
}
}
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:
claude mcp add --transport http warplink https://api.warplink.app/mcp \
--header "Authorization: Bearer wl_live_YOUR_API_KEY"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):
{
"mcpServers": {
"warplink": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://api.warplink.app/mcp",
"--header", "Authorization:${WARPLINK_AUTH}"
],
"env": {
"WARPLINK_AUTH": "Bearer wl_live_YOUR_API_KEY"
}
}
}
}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):
{
"mcpServers": {
"warplink": {
"url": "https://api.warplink.app/mcp",
"headers": {
"Authorization": "Bearer wl_live_YOUR_API_KEY"
}
}
}
}Reload Cursor after saving.
Add this to your Windsurf MCP config (~/.codeium/windsurf/mcp_config.json). Windsurf uses serverUrl (not url) for remote servers:
{
"mcpServers": {
"warplink": {
"serverUrl": "https://api.warplink.app/mcp",
"headers": {
"Authorization": "Bearer wl_live_YOUR_API_KEY"
}
}
}
}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
| Tool | Description | Required Scopes |
|---|---|---|
create_link | Create a new deep link | links:write |
list_links | List links with filtering and pagination | links:read |
get_link | Get a single link by ID | links:read |
update_link | Update an existing link | links:write |
deactivate_link | Pause a link (reversible; keeps its analytics and slug) | links:write |
activate_link | Resume a paused link | links:write |
delete_link | Permanently delete a link and its clicks (to pause instead, use deactivate_link) | links:write |
get_link_analytics | Get click analytics for a link, in the org zone or a chosen timezone | analytics:read |
resolve_link | Debug a link by slug: see routing and status | links:read |
set_link_move_choice | For a link that cannot move with its slug: pick a new slug, keep it where it is, or clear the choice | links:write |
Analytics
| Tool | Description | Required Scopes |
|---|---|---|
query_analytics | Answer analytics questions: overview, one link, a breakdown, a trend, a summary with top movers, a link leaderboard, or a link comparison | analytics:read |
export_analytics | Create, check, and download a full click-data export | analytics:read |
list_installs | List install records with stable IDs and match details, one page at a time | analytics:read |
list_attribution_attempts | List attribution attempts, matched and unmatched, with the reason each one did not match | analytics:read |
Apps
| Tool | Description | Required Scopes |
|---|---|---|
list_apps | List registered apps with pagination | apps:read |
get_app | Get a single app by ID | apps:read |
create_app | Register a new app (iOS, Android, or both) | apps:write |
update_app | Update an app's configuration or rename its subdomain | apps:write |
delete_app | Delete a registered app | apps:write |
set_app_link_domain | Choose the default domain for an app's new links (existing links keep their addresses) | apps:write |
extend_subdomain_rename | Add 1 month to an app's rename period end date, up to 2 times (the previous subdomain keeps working) | apps:write |
list_link_moves | See which links still use an app's previous subdomain, and which would need a new slug on the app's subdomain because theirs is taken | links:read |
Keys
| Tool | Description | Required Scopes |
|---|---|---|
list_keys | List SDK and API keys | keys:read |
create_key | Create an SDK or API key (raw key returned once) | keys:write |
revoke_key | Revoke an SDK or API key | keys:write |
Custom Domains
| Tool | Description | Required Scopes |
|---|---|---|
list_domains | List custom domains with pagination | domains:read |
add_domain | Add a custom domain for branded links | domains:write |
get_domain_status | Check verification and SSL status | domains:read |
Organization
| Tool | Description | Required Scopes |
|---|---|---|
get_org_info | Get org info, plan, and usage stats | org:read |
list_orgs | List the organizations you can act on | none |
switch_org | Choose the active organization (OAuth connections) | none |
Money
| Tool | Description | Required Scopes |
|---|---|---|
query_money_inputs | List recorded money inputs (expenses) for the organization | money:read |
write_expense | Record, revise, or credit an expense entry | money:write |
export_money | Export the raw expense ledger as a downloadable file | money: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
What is the WarpLink MCP server?
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.
What does the WarpLink MCP server cost?
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.
Do the WarpLink SDKs need the MCP server?
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
- API Reference for the complete endpoint documentation
- Authentication for API key scopes and security best practices
- Quickstart to create your first deep link
Errors
The WarpLink API error response format, a reference of common error codes, and how to troubleshoot failed requests, including auth and rate limit errors.
API Overview
Reference for the WarpLink REST API: authentication, rate limiting, error handling, and the endpoints for links, apps, and attribution.