ULink MCP Server
ULink MCP Server lets AI assistants authenticate with ULink and manage deep-linking projects, links, domains, API keys, billing, usage, and onboarding.
Check authentication status and authenticate via browser sign-in or API key.
Check project onboarding status and guide setup steps.
List, get, create, update projects, and configure iOS/Android deep-link settings.
Create, list, get, update, and delete smart links with unified/dynamic routing, platform URLs, metadata, parameters, idempotency, and query passthrough.
Retrieve link click analytics by time period with platform/country/referrer breakdowns.
List, add, verify, and delete shared/custom domains.
List, create, and revoke project API keys.
Get subscription details, list available plans, and view project usage statistics.
Configures Android deep link settings for Ulinkly projects, including package name, deeplink URI scheme, and SHA-256 fingerprints for App Links verification, and supports creating smart links with Android-specific URLs and fallback URLs.
Configures iOS deep link settings for Ulinkly projects, including bundle identifier, deeplink URI scheme, and Apple Developer Team ID, and supports creating smart links with iOS-specific URLs and fallback URLs.
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., "@ULink MCP Server Create a new smart link for my app"
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.
Ulinkly MCP Server
Connect your Ulinkly deep linking projects to Claude Code, Cursor, Windsurf, and other AI assistants.
The Model Context Protocol (MCP) standardizes how Large Language Models (LLMs) talk to external services like Ulinkly. It connects AI assistants directly with your Ulinkly account and allows them to perform tasks like managing projects, creating smart links, configuring domains, and more. See the full list of tools.
Setup
1. Install the MCP server
Choose your MCP client and run the corresponding command:
Claude Code:
claude mcp add ulink -- npx -y @ulinkly/mcp-server@latestCursor:
Open Settings > MCP > Add new MCP server, or add to .cursor/mcp.json:
{
"mcpServers": {
"ulink": {
"command": "npx",
"args": ["-y", "@ulinkly/mcp-server@latest"]
}
}
}Windsurf:
Open Settings > MCP > Add new MCP server, or add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"ulink": {
"command": "npx",
"args": ["-y", "@ulinkly/mcp-server@latest"]
}
}
}If you don't see your MCP client listed above, check your client's MCP documentation and use the following server command:
npx -y @ulinkly/mcp-server@latest2. Authenticate
The MCP server shares authentication with the Ulinkly CLI. If you've already logged in via ulink login, the MCP server will use those tokens automatically — no extra login needed.
Otherwise, your MCP client will open a browser window for authentication on first use. Tokens are saved to ~/.ulink/config.json and shared with the CLI. The session persists and tokens refresh automatically.
API Key (alternative)
For CI environments or headless servers, set the ULINK_API_KEY environment variable to skip the browser flow:
Claude Code:
claude mcp add ulink -e ULINK_API_KEY=your-api-key -- npx -y @ulinkly/mcp-server@latestManual config:
{
"mcpServers": {
"ulink": {
"command": "npx",
"args": ["-y", "@ulinkly/mcp-server@latest"],
"env": {
"ULINK_API_KEY": "your-api-key"
}
}
}
}You can generate an API key from the Ulinkly dashboard under Project Settings > API Keys, or by using the create_api_key tool.
3. Start building
Once connected, your AI assistant can manage your Ulinkly projects directly. Try asking it to:
"List my Ulinkly projects"
"Create a new smart link for my app"
"Show click analytics for my latest link"
"Add a custom domain to my project"
Related MCP server: DWZ Short URL MCP Server
Tools
The following Ulinkly tools are available to the LLM, organized by category.
Project Management
list_projects: Lists all Ulinkly projects owned by or shared with the authenticated user.get_project: Gets detailed information about a specific project, including configuration and membership.create_project: Creates a new project with a name and default fallback URL.update_project: Updates the name or default URL of an existing project.configure_project: Sets platform-specific configuration (iOS bundle ID, Android package name, deeplink schemas, SHA-256 fingerprints).
Link Management
create_link: Creates a unified or dynamic smart link with platform-specific URLs, parameters, and metadata. SupportsallowQueryPassthrough(see below).list_links: Lists all links in a project with pagination.get_link: Gets detailed information about a specific link.update_link: Updates a link's URLs, parameters, or metadata. SupportsallowQueryPassthrough(see below).delete_link: Permanently deletes a link. This is irreversible.get_link_analytics: Gets click analytics for a link, including total clicks and breakdowns by platform, country, and referrer.
Query Passthrough
Both create_link and update_link accept an allowQueryPassthrough boolean field (default: false). When enabled, query parameters appended to the link URL at click time (e.g. https://go.example.com/abc?orderId=123&ref=email) are merged into the resolved link's parameters and override any stored parameter with the same key. Parameter values always arrive as strings. The feature works on both immediate app open and after a deferred install — no SDK change is required.
Validation rules for passthrough parameters: keys must match [A-Za-z0-9_-]{1,64}, a maximum of 25 parameters are allowed, each value must be ≤ 1 024 characters, the total payload must be ≤ 4 KB, and the key debug is reserved.
Domain Management
list_domains: Lists all domains (shared and custom) associated with a project.add_domain: Adds a custom domain to a project. Requires DNS configuration and verification.verify_domain: Triggers DNS verification for a custom domain.delete_domain: Removes a custom domain from a project. Links using this domain will stop working.
API Keys
list_api_keys: Lists all API keys for a project (metadata only, not the key value).create_api_key: Creates a new API key. The full key is only returned once — store it securely.revoke_api_key: Permanently revokes an API key. Applications using this key will immediately lose access.
Account & Billing
get_subscription: Gets a project's subscription plan, status, and renewal date. Accepts an optionalprojectId.list_plans: Lists all available subscription plans with pricing and limits. Accepts an optionalbillingPeriod(monthly/yearly).get_usage: Gets a project's usage statistics for the current billing period (clicks, links, API calls). Accepts an optionalprojectId.
Environment Variables
Variable | Default | Description |
| — | API key for authentication (skips browser OAuth flow) |
Requirements
Node.js 18 or later
Resources
Ulinkly Documentation: Learn more about Ulinkly's deep linking platform.
AI-assisted setup: Use this server with the Ulinkly setup skill and CLI.
Migrating from Firebase Dynamic Links: Move FDL links and app config to Ulinkly.
Model Context Protocol: Learn more about MCP and its capabilities.
License
MIT
Available Tools
24 toolsadd_domainAdd DomainA
Add a custom domain to a ULink project. After adding, you must configure DNS records and verify the domain before it can be used for links.
Inputs: host (required), projectId (required).
authenticateAuthenticateA
Authenticate with ULink by opening a browser window for sign-in or sign-up. No existing account required — new users can create a free account during this flow. This is the first tool to call if check_auth_status reports no valid credentials. After success, all other ULink tools become usable.
Inputs: no named parameters.
check_auth_statusCheck Auth StatusARead-only
Check whether valid ULink authentication credentials exist. Returns authentication state without triggering any login flow. Call this first to determine if the authenticate tool needs to be called.
Inputs: no named parameters.
configure_projectConfigure ProjectB
Update platform-specific configuration for a ULink project, such as iOS bundle identifier, Android package name, deeplink schemas, and SHA-256 fingerprints. These settings are used for deep link resolution on mobile platforms.
Inputs: projectId (required), iosTeamId, iosDeeplinkSchema, androidPackageName, +3 more.
create_api_keyCreate API KeyA
Create a new API key for a ULink project. The full key value is only returned once in the response and cannot be retrieved again. Store it securely.
Inputs: name (required), projectId (required).
create_linkCreate LinkA
Create a new smart link in a ULink project. Supports unified links (single URL that routes by platform) and dynamic links (parameterised deep links). You must specify the project, domain, and link type. Optionally set platform-specific URLs, fallback URLs, custom slug, metadata, and parameters. Pass externalId (any stable string from your system) to make creation idempotent on (project, externalId).
Inputs: type (required), domainId (required), projectId (required), name, +10 more.
create_projectCreate ProjectA
Create a new ULink project. A project is the top-level container for links, domains, and API keys. Requires a name and a default fallback URL.
Inputs: name (required), defaultUrl (required).
delete_domainDelete DomainADestructive
Remove a custom domain from a ULink project. Any links using this domain will stop working. This action is irreversible.
Inputs: domainId (required).
delete_linkDelete LinkADestructive
Permanently delete a link. This is irreversible and the short URL will stop working immediately. Use with caution.
Inputs: linkId (required).
get_linkGet LinkARead-only
Retrieve detailed information about a specific link by its ID, including all platform URLs, parameters, metadata, and current configuration.
Inputs: linkId (required).
get_link_analyticsGet Link AnalyticsARead-only
Retrieve click analytics for a specific link. Returns aggregated data such as total clicks, unique clicks, and breakdowns by platform, country, and referrer for the requested time period.
Inputs: linkId (required), period.
get_onboarding_statusGet Onboarding StatusARead-only
Get the onboarding progress for a ULink project, including which setup steps are complete and what to do next. Requires authentication. Use this after creating a project to guide users through setup.
Inputs: projectId (required).
get_projectGet ProjectARead-only
Retrieve detailed information about a specific ULink project by its ID, including configuration, domains, and membership details.
Inputs: projectId (required).
get_subscriptionGet SubscriptionARead-only
Retrieve the active subscription for a specific project, including plan name, billing period, status, and renewal date. Subscriptions are per-project.
Inputs: projectId.
get_usageGet UsageARead-only
Retrieve usage statistics for a specific project's active billing period, including link clicks, links created, and API calls against plan limits. Usage is per-project.
Inputs: projectId.
list_api_keysList API KeysARead-only
List all API keys for a ULink project. API keys are used for server-side and SDK authentication. Returns key metadata (name, prefix, creation date) but never the full key value.
Inputs: projectId (required).
list_domainsList DomainsARead-only
List all domains associated with a ULink project, including shared domains and any custom domains that have been added. Shows verification status for each domain.
Inputs: projectId (required).
list_linksList LinksARead-only
List all links in a ULink project with optional pagination. Returns an array of link objects with their configuration, URLs, and metadata.
Inputs: projectId (required), limit, offset.
list_plansList PlansARead-only
List all available ULink subscription plans with their features, limits, and pricing. Useful for comparing plans or determining upgrade options.
Inputs: billingPeriod.
list_projectsList ProjectsARead-only
List all ULink projects owned by or shared with the authenticated user. Returns an array of project objects including id, name, slug, and default URL.
Inputs: no named parameters.
revoke_api_keyRevoke API KeyADestructive
Permanently revoke an API key. Any applications using this key will immediately lose access. This action cannot be undone.
Inputs: apiKeyId (required).
update_linkUpdate LinkA
Update an existing link's properties. You can change the name, platform-specific URLs, fallback URLs, parameters, and metadata. Only the fields you provide will be modified.
Inputs: linkId (required), name, iosUrl, metadata, +6 more.
update_projectUpdate ProjectA
Update the name and/or default URL of an existing ULink project. Only the fields you provide will be changed.
Inputs: projectId (required), name, defaultUrl.
verify_domainVerify DomainA
Trigger DNS verification for a custom domain. The domain's DNS records must be correctly configured before verification will succeed. Returns the current verification status.
Inputs: domainId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Each tool targets a distinct resource and action (e.g., create_project vs configure_project vs update_project are clearly separated by their descriptions). There is no meaningful overlap between link, domain, API key, subscription, or auth tools.
All tool names follow the same lowercase snake_case verb_noun pattern (list_projects, create_link, verify_domain, etc.). 'authenticate' is a single verb but fits the pattern as a standalone action.
With 24 tools, the server falls into the 'heavy' range (16-25). While the breadth of features (projects, links, domains, API keys, billing, analytics) justifies many tools, it still feels a bit much for an MCP server and could be trimmed.
There is a notable gap: no delete_project tool, despite having create/update/get/list for projects. This creates a dead end for project lifecycle management. Other domains (links, domains, API keys) have full CRUD or equivalent coverage.
Maintenance
Related MCP Connectors
Create, edit and track LickityClick short links, campaigns and click stats from your AI assistant.
Create short links, QR codes, UTM templates, vCards, and landing pages from your AI assistant.
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.
Create short links and see their click counts from your AI assistant.
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
- AlicenseAqualityDmaintenanceEnables AI assistants to create, manage, and analyze short URLs through complete URL shortening functionality. Supports batch operations, custom domains, click statistics, and comprehensive link management.625 npm1MIT

LinkForty MCP Serverofficial
AlicenseAqualityCmaintenanceConnects AI assistants like Claude and Cursor to LinkForty deep links and analytics, enabling natural language management of links, analytics, templates, projects, and SDK integration.2047 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