Ulink

io.github.FlywheelStudioPublished by GitHub account FlywheelStudiov0.1.22Updated Nov 3, 2026

Deep linking for iOS, Android, Flutter & React Native. Firebase Dynamic Links alternative.

Overview

AI-generated overview

Connects an assistant to a Ulinkly account so it can create and manage deep-link projects, smart links, custom domains and API keys.

What you can do
  • List, create, update and configure projects, including iOS and Android deep-link settings
  • Create, list, read, update and permanently delete unified or dynamic smart links
  • Read click analytics for a link, broken down by platform, country and referrer
  • List, add, verify and delete custom domains
  • List, create and revoke project API keys
  • Check subscription, available plans and per-project usage
When to use it
Useful when you work with Ulinkly deep linking (an alternative to Firebase Dynamic Links) and want an assistant to set up projects, generate smart links, wire up custom domains or pull click analytics without leaving the chat.
Requirements
Runs locally via npx, so Node.js 18 or later is needed. Authentication is either a browser sign-in on first use (tokens stored in the local Ulinkly config and shared with the Ulinkly CLI) or the ULINK_API_KEY environment variable for headless or CI use. A Ulinkly account is required; a free one can be created during sign-in.
Before you install
The server can create, change and permanently delete links, domains and API keys; deleting a link or domain is irreversible and breaks existing short URLs. A newly created API key is shown only once. It holds account credentials, either the shared local token file or ULINK_API_KEY, and sends project, link and analytics data to Ulinkly.

Installation

In SourceWeft

  1. Open Ulink in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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:

bash
claude mcp add ulink -- npx -y @ulinkly/mcp-server@latest

Cursor:

Open Settings > MCP > Add new MCP server, or add to .cursor/mcp.json:

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:

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@latest

2. 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:

bash
claude mcp add ulink -e ULINK_API_KEY=your-api-key -- npx -y @ulinkly/mcp-server@latest

Manual config:

json
{  "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"

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. Supports allowQueryPassthrough (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. Supports allowQueryPassthrough (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 optional projectId.
  • list_plans: Lists all available subscription plans with pricing and limits. Accepts an optional billingPeriod (monthly/yearly).
  • get_usage: Gets a project's usage statistics for the current billing period (clicks, links, API calls). Accepts an optional projectId.

Environment Variables

VariableDefaultDescription
ULINK_API_KEY—API key for authentication (skips browser OAuth flow)

Requirements

  • Node.js 18 or later

Resources

License

MIT

Source: README.md at commit 03b7410

Tools

24

check_auth_status

Check Auth Status

Check whether valid Ulinkly authentication credentials exist. Returns authentication state without triggering any login flow. Call this first to determine if the authenticate tool needs to be called.

Takes no parameters.

authenticate

Authenticate

Authenticate with Ulinkly 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. If a browser cannot be opened automatically, the response includes an 'authUrl' — present it to the user as a clickable link to open manually, then continue. After success, all other Ulinkly tools become usable.

Takes no parameters.

get_onboarding_status

Get Onboarding Status

Get the onboarding progress for a Ulinkly 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.

ParametersprojectIdrequired

list_projects

List Projects

List all Ulinkly projects owned by or shared with the authenticated user. Returns an array of project objects including id, name, slug, and default URL.

Takes no parameters.

get_project

Get Project

Retrieve detailed information about a specific Ulinkly project by its ID, including configuration, domains, and membership details.

ParametersprojectIdrequired

create_project

Create Project

Create a new Ulinkly project. A project is the top-level container for links, domains, and API keys. Requires a name and a default fallback URL.

ParametersnamerequireddefaultUrlrequired

update_project

Update Project

Update the name and/or default URL of an existing Ulinkly project. Only the fields you provide will be changed.

ParametersnameprojectIdrequireddefaultUrl

configure_project

Configure Project

Update platform-specific configuration for a Ulinkly 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.

ParametersiosTeamIdprojectIdrequirediosDeeplinkSchemaandroidPackageNameiosBundleIdentifierandroidDeeplinkSchemaandroidSha256Fingerprints

list_domains

List Domains

List all domains associated with a Ulinkly project, including shared domains and any custom domains that have been added. Shows verification status for each domain.

ParametersprojectIdrequired

add_domain

Add Domain

Add a custom domain to a Ulinkly project. After adding, you must configure DNS records and verify the domain before it can be used for links.

ParametershostrequiredprojectIdrequired

verify_domain

Verify Domain

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.

ParametersdomainIdrequired

delete_domain

Delete Domain

Remove a custom domain from a Ulinkly project. Any links using this domain will stop working. This action is irreversible.

ParametersdomainIdrequired

list_api_keys

List API Keys

List all API keys for a Ulinkly project. API keys are used for server-side and SDK authentication. Returns key metadata (name, prefix, creation date) but never the full key value.

ParametersprojectIdrequired

create_api_key

Create API Key

Create a new API key for a Ulinkly project. The full key value is only returned once in the response and cannot be retrieved again. Store it securely.

ParametersnamerequiredprojectIdrequired

revoke_api_key

Revoke API Key

Permanently revoke an API key. Any applications using this key will immediately lose access. This action cannot be undone.

ParametersapiKeyIdrequired

get_subscription

Get Subscription

Retrieve the active subscription for a specific project, including plan name, billing period, status, and renewal date. Subscriptions are per-project.

ParametersprojectId

list_plans

List Plans

List all available Ulinkly subscription plans with their features, limits, and pricing. Useful for comparing plans or determining upgrade options.

ParametersbillingPeriod

get_usage

Get Usage

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.

ParametersprojectId

Version history

2
  1. v0.1.22LatestOct 30, 2026
  2. v0.1.15Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts