# io.github.ysalitrynskyi/opn-mcp (npm · opn-mcp)

MCP server for opn.onl: shorten links, analytics, branded QR codes, and link management.

- Trust score: 69/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `opn-mcp`: 69/100 (this document), [markdown](https://verifymcp.io/servers/ysalitrynskyi-opn-mcp/opn-mcp.md), [page](https://verifymcp.io/servers/ysalitrynskyi-opn-mcp/opn-mcp)

## Channel facts

- Registry: `npm`
- Package: `opn-mcp`
- Version: `1.2.0`
- 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-04.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects hono 4.12.33, reached via @modelcontextprotocol/sdk > hono. A fixed version is available.
  - 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**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 22 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 1621 tokens (~67/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**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 98% 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 ysalitrynskyi-opn-mcp -- npx -y opn-mcp
```

### Codex

```bash
codex mcp add ysalitrynskyi-opn-mcp -- npx -y opn-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ysalitrynskyi-opn-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "opn-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ysalitrynskyi-opn-mcp --command npx --arg -y --arg opn-mcp
```

### Hermes

```yaml
mcp_servers:
  ysalitrynskyi-opn-mcp:
    command: "npx"
    args: ["-y", "opn-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "ysalitrynskyi-opn-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "opn-mcp"
      ]
    }
  }
}
```

## 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-04 (score 69, +3)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail
- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 66, +45)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [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-07-31 (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-30 (score 28, −18)

- [security regression] Malware scan: pass → unverified

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

First indexed and scored.

## MCP tools (24)

### `shorten_url` (~260 tokens)

Create a short link on opn.onl. Supports scheduling, click limits, folders, tags and one-time (burn-after-reading) links. Returns the short URL and its code.

Input parameters:

- `alias` (string): Custom alias / slug (optional). Use check_alias_available first to avoid collisions.
- `burn_after_reading` (boolean): One-time link: destroy it after the first successful visit (optional)
- `expires_at` (string): ISO-8601 timestamp after which the link stops working (optional)
- `folder_id` (integer): Place the link in this folder id (optional)
- `max_clicks` (integer): Deactivate the link after this many clicks (optional)
- `notes` (string): Private notes for the link (optional)
- `password` (string): Password-protect the link (optional)
- `safe_link_interstitial` (boolean): Show a safety interstitial page before redirecting (optional)
- `starts_at` (string): ISO-8601 timestamp before which the link is inactive (optional)
- `tag_ids` (array): Tag ids to attach to the link (optional)
- `title` (string): Private title for the link (optional)
- `url` (string, required): The destination URL to shorten

### `shorten_urls_bulk` (~62 tokens)

Shorten many URLs in one call. Returns the created links plus any per-URL errors.

Input parameters:

- `folder_id` (integer): Place all created links in this folder id (optional)
- `urls` (array, required): Destination URLs to shorten (up to 500)

### `list_links` (~100 tokens)

List your short links (most recent first). Filter by folder, tag or free-text search.

Input parameters:

- `folder_id` (integer): Only links in this folder id
- `limit` (integer): Max links to return (server default applies if omitted)
- `offset` (integer): Pagination offset
- `search` (string): Filter by text in the URL, title, notes or code
- `tag_id` (integer): Only links carrying this tag id

### `update_link` (~253 tokens)

Update a link's destination, title, notes, scheduling, click limit, folder or protections. Use the remove_* flags to clear a field.

Input parameters:

- `bio_visible` (boolean): Show/hide this link on your public link-in-bio page
- `burn_after_reading` (boolean): Toggle one-time (burn-after-reading) behaviour
- `expires_at` (string): New ISO-8601 expiry timestamp
- `folder_id` (integer): Move the link to this folder id
- `id` (integer, required): The link id
- `max_clicks` (integer): New maximum click count
- `notes` (string): New private notes
- `password` (string): New password
- `remove_expiration` (boolean): Clear the expiry so the link never expires
- `remove_max_clicks` (boolean): Clear the click limit
- `remove_password` (boolean): Remove password protection
- `remove_starts_at` (boolean): Clear the activation timestamp
- `safe_link_interstitial` (boolean): Toggle the safety interstitial page
- `starts_at` (string): New ISO-8601 activation timestamp
- `title` (string)
- `url` (string): New destination URL

### `delete_link` (~23 tokens)

Delete a short link.

Input parameters:

- `id` (integer, required): The link id

### `clone_link` (~38 tokens)

Duplicate an existing link (same destination and settings) under a fresh short code.

Input parameters:

- `id` (integer, required): The id of the link to clone

### `toggle_link_pin` (~41 tokens)

Pin or unpin a link (pinned links surface first in the dashboard). Toggles the current state.

Input parameters:

- `id` (integer, required): The link id

### `check_alias_available` (~37 tokens)

Check whether a custom alias/slug is available before shortening with it.

Input parameters:

- `alias` (string, required): The custom alias / slug to check

### `export_links_csv` (~22 tokens)

Export all your links as CSV (returns the raw CSV text).

### `get_link_routing_rules` (~43 tokens)

Get the smart-routing rules for a link (device/OS/country/language targeting and A/B weighting).

Input parameters:

- `id` (integer, required): The link id

### `set_link_routing_rules` (~81 tokens)

Replace ALL smart-routing rules for a link. Each rule sends visitors matching the given device/OS/country/language to its destination; empty match fields mean 'any'. Send an empty array to clear all rules.

Input parameters:

- `id` (integer, required): The link id
- `rules` (array, required): The full rule set (replaces any existing rules)

### `get_link_stats` (~67 tokens)

Get click analytics for a link (clicks, unique visitors, geography, cities, devices, browsers, OS, referrers).

Input parameters:

- `days` (integer): Window in days to aggregate over (optional; server default is 30)
- `id` (integer, required): The link id

### `get_dashboard_stats` (~29 tokens)

Get account-wide analytics across all your links: totals, top links, and aggregate click breakdowns.

### `get_qr_code` (~89 tokens)

Get the QR code for a link, optionally branded with a colour, centre logo, and PNG/SVG format.

Input parameters:

- `color` (string): Hex foreground colour, e.g. 2f37d8
- `format` (string): Image format (default png)
- `id` (integer, required): The link id
- `logo` (boolean): Overlay the brand logo in the centre

### `check_url_health` (~36 tokens)

Check whether a destination URL is reachable (status + timing) before shortening it.

Input parameters:

- `url` (string, required): The URL to check

### `build_utm_url` (~128 tokens)

Append UTM campaign parameters to a URL. Returns the tagged URL (does not create a link).

Input parameters:

- `url` (string, required): The base URL to tag
- `utm_campaign` (string): utm_campaign, e.g. launch-2026
- `utm_content` (string): utm_content (A/B variant)
- `utm_medium` (string): utm_medium, e.g. email
- `utm_source` (string): utm_source, e.g. newsletter
- `utm_term` (string): utm_term (paid-search keyword)

### `preview_url_metadata` (~50 tokens)

Fetch Open Graph metadata (title, description, image, site name) for a URL — handy for auto-titling a link before shortening it.

Input parameters:

- `url` (string, required): The URL to inspect

### `list_tags` (~18 tokens)

List your tags (each with its link count).

### `create_tag` (~48 tokens)

Create a tag for organizing links.

Input parameters:

- `color` (string): Hex colour for the tag, e.g. 2f37d8 (optional)
- `name` (string, required): Tag name

### `add_tags_to_link` (~42 tokens)

Attach one or more existing tags to a link.

Input parameters:

- `id` (integer, required): The link id
- `tag_ids` (array, required): Tag ids to attach

### `remove_tags_from_link` (~42 tokens)

Detach one or more tags from a link.

Input parameters:

- `id` (integer, required): The link id
- `tag_ids` (array, required): Tag ids to remove

### `list_folders` (~19 tokens)

List your folders (each with its link count).

### `create_folder` (~48 tokens)

Create a folder for grouping links.

Input parameters:

- `color` (string): Hex colour for the folder, e.g. 2f37d8 (optional)
- `name` (string, required): Folder name

### `move_links_to_folder` (~45 tokens)

Move one or more links into a folder.

Input parameters:

- `folder_id` (integer, required): Destination folder id
- `link_ids` (array, required): Link ids to move into the folder

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/ysalitrynskyi-opn-mcp/opn-mcp#diagnostics

## Score history

- 2026-08-04: 69
- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 21
- 2026-07-31: 21
- 2026-07-30: 28
- 2026-07-28: 46
- 2026-07-27: 46

## Links

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