# io.github.FlywheelStudio/ulink (npm · @ulinkly/mcp-server)

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

- Trust score: 81/100 (high trust)
- Change this week: +35
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@ulinkly/mcp-server`: 81/100 (this document), [markdown](https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server.md), [page](https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@ulinkly/mcp-server`
- Version: `0.1.15`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to FlywheelStudio/ulink-mcp-server).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 60 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 1879 tokens (~78/item across 24 items; 24 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

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

### Codex

```bash
codex mcp add flywheelstudio-ulink -- npx -y @ulinkly/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "flywheelstudio-ulink": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ulinkly/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add flywheelstudio-ulink --command npx --arg -y --arg @ulinkly/mcp-server
```

### Hermes

```yaml
mcp_servers:
  flywheelstudio-ulink:
    command: "npx"
    args: ["-y", "@ulinkly/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "flywheelstudio-ulink": {
      "command": "npx",
      "args": [
        "-y",
        "@ulinkly/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 81, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 77, +56)

- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] The attested source repository moved: FlywheelStudio/ulink-mcp-server
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: unverified
- [functional] Licence: MIT

### 2026-08-01 (score 21, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (24)

### `check_auth_status` (~41 tokens)

Check Auth Status

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.

### `authenticate` (~66 tokens)

Authenticate

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.

### `get_onboarding_status` (~63 tokens)

Get Onboarding Status

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.

Input parameters:

- `projectId` (string, required): The project ID to check onboarding status for.

### `list_projects` (~39 tokens)

List Projects

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.

### `get_project` (~44 tokens)

Get Project

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

Input parameters:

- `projectId` (string, required): The unique identifier of the project

### `create_project` (~71 tokens)

Create Project

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.

Input parameters:

- `defaultUrl` (string, required): Default fallback URL used when no platform-specific URL matches
- `name` (string, required): Human-readable name for the project

### `update_project` (~71 tokens)

Update Project

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

Input parameters:

- `defaultUrl` (string): New default fallback URL
- `name` (string): New name for the project
- `projectId` (string, required): The unique identifier of the project to update

### `configure_project` (~187 tokens)

Configure Project

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.

Input parameters:

- `androidDeeplinkSchema` (string): Android deeplink URI scheme (e.g. myapp://)
- `androidPackageName` (string): Android package name (e.g. com.example.app)
- `androidSha256Fingerprints` (array): SHA-256 certificate fingerprints for Android App Links verification
- `iosBundleIdentifier` (string): iOS bundle identifier (e.g. com.example.app)
- `iosDeeplinkSchema` (string): iOS deeplink URI scheme (e.g. myapp://)
- `iosTeamId` (string): Apple Developer Team ID
- `projectId` (string, required): The unique identifier of the project to configure

### `create_link` (~269 tokens)

Create Link

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.

Input parameters:

- `androidFallbackUrl` (string): Android-specific fallback URL (e.g. Play Store link)
- `androidUrl` (string): URL to open on Android devices
- `domainId` (string, required): The domain to host the link on
- `fallbackUrl` (string): Fallback URL for unsupported platforms
- `iosFallbackUrl` (string): iOS-specific fallback URL (e.g. App Store link)
- `iosUrl` (string): URL to open on iOS devices
- `metadata` (object): Arbitrary metadata attached to the link
- `name` (string): Human-readable name for the link
- `parameters` (object): Key-value parameters passed through the deep link
- `projectId` (string, required): The project to create the link in
- `slug` (string): Custom slug for the short URL (auto-generated if omitted)
- `type` (string, required): Link type: 'unified' for smart routing or 'dynamic' for parameterised deep links

### `list_links` (~84 tokens)

List Links

List all links in a ULink project with optional pagination. Returns an array of link objects with their configuration, URLs, and metadata.

Input parameters:

- `limit` (integer): Number of links to return (max 100)
- `offset` (integer): Number of links to skip for pagination (starts at 0)
- `projectId` (string, required): The project whose links to list

### `get_link` (~46 tokens)

Get Link

Retrieve detailed information about a specific link by its ID, including all platform URLs, parameters, metadata, and current configuration.

Input parameters:

- `linkId` (string, required): The unique identifier of the link

### `update_link` (~176 tokens)

Update Link

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.

Input parameters:

- `androidFallbackUrl` (string): New Android-specific fallback URL
- `androidUrl` (string): New URL to open on Android devices
- `fallbackUrl` (string): New fallback URL for unsupported platforms
- `iosFallbackUrl` (string): New iOS-specific fallback URL
- `iosUrl` (string): New URL to open on iOS devices
- `linkId` (string, required): The unique identifier of the link to update
- `metadata` (object): New arbitrary metadata attached to the link
- `name` (string): New human-readable name for the link
- `parameters` (object): New key-value parameters passed through the deep link

### `delete_link` (~46 tokens)

Delete Link

Permanently delete a link. This is irreversible and the short URL will stop working immediately. Use with caution.

Input parameters:

- `linkId` (string, required): The unique identifier of the link to delete

### `get_link_analytics` (~78 tokens)

Get Link Analytics

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.

Input parameters:

- `linkId` (string, required): The unique identifier of the link
- `period` (string): Time period for analytics data (defaults to 7d)

### `list_domains` (~51 tokens)

List Domains

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.

Input parameters:

- `projectId` (string, required): The project whose domains to list

### `add_domain` (~72 tokens)

Add Domain

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.

Input parameters:

- `host` (string, required): The domain hostname to add (e.g. links.example.com)
- `projectId` (string, required): The project to add the domain to

### `verify_domain` (~52 tokens)

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.

Input parameters:

- `domainId` (string, required): The unique identifier of the domain to verify

### `delete_domain` (~48 tokens)

Delete Domain

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

Input parameters:

- `domainId` (string, required): The unique identifier of the domain to delete

### `list_api_keys` (~63 tokens)

List API Keys

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.

Input parameters:

- `projectId` (string, required): The project whose API keys to list

### `create_api_key` (~78 tokens)

Create API Key

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.

Input parameters:

- `name` (string, required): A descriptive name for the API key (e.g. 'Production Server')
- `projectId` (string, required): The project to create the API key for

### `revoke_api_key` (~50 tokens)

Revoke API Key

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

Input parameters:

- `apiKeyId` (string, required): The unique identifier of the API key to revoke

### `get_subscription` (~66 tokens)

Get Subscription

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

Input parameters:

- `projectId` (string): The project ID to get the subscription for. If omitted, the API returns the subscription for the user's first project.

### `list_plans` (~52 tokens)

List Plans

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

Input parameters:

- `billingPeriod` (string): Billing period to show pricing for (default: monthly).

### `get_usage` (~66 tokens)

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.

Input parameters:

- `projectId` (string): The project ID to get usage for. If omitted, the API returns usage for the user's first project.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server#diagnostics

## Score history

- 2026-08-03: 81
- 2026-08-02: 77
- 2026-08-01: 21
- 2026-07-31: 28
- 2026-07-30: 46
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@ulinkly/mcp-server
- Socket report: https://socket.dev/npm/package/@ulinkly/mcp-server
- Repository: https://github.com/FlywheelStudio/ulink-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/flywheelstudio-ulink/ulinkly-mcp-server
