# com.linklyhq/linkly (remote · mcp.linklyhq.com)

Create and manage short links, track clicks, and automate URL management

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

## Components

- remote · `mcp.linklyhq.com`: 72/100 (this document), [markdown](https://verifymcp.io/servers/com-linklyhq-linkly/mcp.md), [page](https://verifymcp.io/servers/com-linklyhq-linkly/mcp)

## Channel facts

- Endpoint: `https://mcp.linklyhq.com`
- Transports: `streamable-http`
- Auth: `none`
- Version: `2.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS check failed: the endpoint is reachable over plaintext HTTP.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1952 tokens (~78/item across 25 items; 25 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.
  - Structured output schemas are declared (88% of tools); any adoption earns full credit.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-linklyhq-linkly https://mcp.linklyhq.com/
```

### Codex

```toml
[mcp_servers.com-linklyhq-linkly]
url = "https://mcp.linklyhq.com/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-linklyhq-linkly": {
      "type": "remote",
      "url": "https://mcp.linklyhq.com/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-linklyhq-linkly --url https://mcp.linklyhq.com/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-linklyhq-linkly:
    url: "https://mcp.linklyhq.com/"
```

### Other

```json
{
  "mcpServers": {
    "com-linklyhq-linkly": {
      "type": "http",
      "url": "https://mcp.linklyhq.com/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-02 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 71, +3)

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

### 2026-07-30 (score 68, −2)

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

### 2026-07-29 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 68, 0)

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

### 2026-07-26 (score 68)

First indexed and scored.

## MCP tools (25)

### `test_authentication` (~13 tokens)

Test API Authentication

### `list_workspaces` (~15 tokens)

Return details of authenticated workspace

Output parameters:

- `results` (array)

### `batchDeleteLinks` (~27 tokens)

Batch delete multiple links

Input parameters:

- `ids` (array, required): Array of link IDs to delete

### `update_workspace` (~34 tokens)

Update workspace settings

Input parameters:

- `name` (string, required): Workspace name
- `webhooks` (string, required): Webhook URL for notifications

### `list_links` (~61 tokens)

List links with sorting and search

Input parameters:

- `page` (integer)
- `page_size` (integer)
- `search` (string): Search Query
- `sort_by` (string): Field to sort by
- `sort_dir` (string): Sort direction

Output parameters:

- `results` (array)

### `ping` (~29 tokens)

Health check

Input parameters:

- `message` (string, required): a message to ping , default to Hello From Linkkly

### `create_link` (~434 tokens)

Create short links and URL shorteners. Use this when the user asks to shorten a URL, create a short link, or make a link shorter.

Input parameters:

- `block_bots` (boolean): Block known bots and spiders from following the link
- `cloaking` (boolean): Hide destination URL by opening in an iframe
- `domain` (string): Custom domain for the short link (without trailing /). Must be a domain that already belongs to this workspace — call list_domains to get valid values. Required whenever slug is set.
- `enabled` (boolean): Whether the link is active (default: true)
- `expiry_datetime` (string): ISO 8601 datetime when the link should expire
- `expiry_destination` (string): Fallback URL after expiry (404 if blank)
- `fb_pixel_id` (string): Meta/Facebook Pixel ID for tracking
- `forward_params` (boolean): Forward URL parameters to the destination
- `ga4_tag_id` (string): Google Analytics 4 tag ID
- `gtm_id` (string): Google Tag Manager container ID
- `hide_referrer` (boolean): Hide referrer information when users click
- `name` (string): A nickname for the link to identify it later
- `note` (string): A private note about this link
- `og_description` (string): Open Graph description for social media previews
- `og_image` (string): Open Graph image URL for social media previews
- `og_title` (string): Open Graph title for social media previews
- `slug` (string): Custom slug/suffix for the link (must start with /). Only valid together with domain: setting slug without a workspace-owned domain is rejected by the API.
- `url` (string, required): The destination URL for the link (required)
- `utm_campaign` (string): UTM campaign parameter
- `utm_content` (string): UTM content parameter
- `utm_medium` (string): UTM medium parameter
- `utm_source` (string): UTM source parameter
- `utm_term` (string): UTM term parameter

Output parameters:

- `block_bots` (boolean|null)
- `body_tags` (string|null)
- `cloaking` (boolean|null)
- `created_by_user_id` (integer|null)
- `deleted` (boolean|null)
- `domain` (string|null)
- `enabled` (boolean|null)
- `expiry_clicks` (integer|null)
- `expiry_datetime` (string|null)
- `expiry_destination` (string|null)
- `fb_pixel_id` (string|null)
- `forward_params` (boolean|null)
- `full_url` (string|null): Full short-link URL
- `ga4_tag_id` (string|null)
- `gtm_id` (string|null)
- `head_tags` (string|null)
- `hide_referrer` (boolean|null)
- `id` (integer|null): Link ID
- `linkedin_partner_id` (string|null)
- `linkify_words` (string|null)
- `microsoft_uet_tag_id` (string|null)
- `name` (string|null)
- `note` (string|null)
- `notify_slack` (boolean|null)
- `notify_user_ids` (array|null)
- `og_description` (string|null)
- `og_image` (string|null)
- `og_title` (string|null)
- `password` (string|null)
- `pinterest_tag_id` (string|null)
- `public_analytics` (boolean|null)
- `qr_styles` (object|null)
- `reddit_pixel_id` (string|null)
- `replacements` (string|null)
- `rules` (array|null)
- `skip_social_crawler_tracking` (boolean|null)
- `slug` (string|null)
- `snapchat_pixel_id` (string|null)
- `tiktok_pixel_id` (string|null)
- `twitter_pixel_id` (string|null)
- `url` (string|null): Destination URL
- `utm_campaign` (string|null)
- `utm_content` (string|null)
- `utm_medium` (string|null)
- `utm_source` (string|null)
- `utm_term` (string|null)
- `webhooks` (array|null)
- `workspace_id` (integer|null)

### `update_link` (~294 tokens)

Update an existing Linkly link by its ID

Input parameters:

- `block_bots` (boolean): Block bots
- `cloaking` (boolean): Enable URL cloaking
- `enabled` (boolean): Whether the link is active
- `expiry_datetime` (string): Expiry datetime (ISO 8601)
- `expiry_destination` (string): Fallback URL after expiry
- `fb_pixel_id` (string): Meta Pixel ID
- `forward_params` (boolean): Forward URL parameters
- `ga4_tag_id` (string): Google Analytics 4 tag ID
- `gtm_id` (string): Google Tag Manager ID
- `hide_referrer` (boolean): Hide referrer
- `link_id` (integer, required): The ID of the link to update (required)
- `name` (string): New nickname for the link
- `note` (string): New private note
- `og_description` (string): Open Graph description
- `og_image` (string): Open Graph image URL
- `og_title` (string): Open Graph title
- `url` (string): New destination URL
- `utm_campaign` (string): UTM campaign parameter
- `utm_content` (string): UTM content parameter
- `utm_medium` (string): UTM medium parameter
- `utm_source` (string): UTM source parameter
- `utm_term` (string): UTM term parameter

Output parameters:

- `block_bots` (boolean|null)
- `body_tags` (string|null)
- `cloaking` (boolean|null)
- `created_by_user_id` (integer|null)
- `deleted` (boolean|null)
- `domain` (string|null)
- `enabled` (boolean|null)
- `expiry_clicks` (integer|null)
- `expiry_datetime` (string|null)
- `expiry_destination` (string|null)
- `fb_pixel_id` (string|null)
- `forward_params` (boolean|null)
- `full_url` (string|null): Full short-link URL
- `ga4_tag_id` (string|null)
- `gtm_id` (string|null)
- `head_tags` (string|null)
- `hide_referrer` (boolean|null)
- `id` (integer|null): Link ID
- `linkedin_partner_id` (string|null)
- `linkify_words` (string|null)
- `microsoft_uet_tag_id` (string|null)
- `name` (string|null)
- `note` (string|null)
- `notify_slack` (boolean|null)
- `notify_user_ids` (array|null)
- `og_description` (string|null)
- `og_image` (string|null)
- `og_title` (string|null)
- `password` (string|null)
- `pinterest_tag_id` (string|null)
- `public_analytics` (boolean|null)
- `qr_styles` (object|null)
- `reddit_pixel_id` (string|null)
- `replacements` (string|null)
- `rules` (array|null)
- `skip_social_crawler_tracking` (boolean|null)
- `slug` (string|null)
- `snapchat_pixel_id` (string|null)
- `tiktok_pixel_id` (string|null)
- `twitter_pixel_id` (string|null)
- `url` (string|null): Destination URL
- `utm_campaign` (string|null)
- `utm_content` (string|null)
- `utm_medium` (string|null)
- `utm_source` (string|null)
- `utm_term` (string|null)
- `webhooks` (array|null)
- `workspace_id` (integer|null)

### `delete_link` (~32 tokens)

Delete a Linkly link by its ID

Input parameters:

- `link_id` (integer, required): The ID of the link to delete

### `get_link` (~35 tokens)

Get details of a specific Linkly link by its ID

Input parameters:

- `link_id` (integer, required): The ID of the link to retrieve

Output parameters:

- `block_bots` (boolean|null)
- `body_tags` (string|null)
- `cloaking` (boolean|null)
- `created_by_user_id` (integer|null)
- `deleted` (boolean|null)
- `domain` (string|null)
- `enabled` (boolean|null)
- `expiry_clicks` (integer|null)
- `expiry_datetime` (string|null)
- `expiry_destination` (string|null)
- `fb_pixel_id` (string|null)
- `forward_params` (boolean|null)
- `full_url` (string|null): Full short-link URL
- `ga4_tag_id` (string|null)
- `gtm_id` (string|null)
- `head_tags` (string|null)
- `hide_referrer` (boolean|null)
- `id` (integer|null): Link ID
- `linkedin_partner_id` (string|null)
- `linkify_words` (string|null)
- `microsoft_uet_tag_id` (string|null)
- `name` (string|null)
- `note` (string|null)
- `notify_slack` (boolean|null)
- `notify_user_ids` (array|null)
- `og_description` (string|null)
- `og_image` (string|null)
- `og_title` (string|null)
- `password` (string|null)
- `pinterest_tag_id` (string|null)
- `public_analytics` (boolean|null)
- `qr_styles` (object|null)
- `reddit_pixel_id` (string|null)
- `replacements` (string|null)
- `rules` (array|null)
- `skip_social_crawler_tracking` (boolean|null)
- `slug` (string|null)
- `snapchat_pixel_id` (string|null)
- `tiktok_pixel_id` (string|null)
- `twitter_pixel_id` (string|null)
- `url` (string|null): Destination URL
- `utm_campaign` (string|null)
- `utm_content` (string|null)
- `utm_medium` (string|null)
- `utm_source` (string|null)
- `utm_term` (string|null)
- `webhooks` (array|null)
- `workspace_id` (integer|null)

### `get_clicks` (~32 tokens)

Get recent click data for the workspace

Input parameters:

- `link_id` (integer): Optional: filter clicks by link ID

Output parameters:

- `results` (array)

### `get_analytics` (~182 tokens)

Get time-series click analytics data for charting. Returns click counts over time.

Input parameters:

- `bots` (string): Bot filtering: include (default), exclude, or only
- `browser` (string): Filter by browser name
- `country` (string): Filter by country code (e.g., 'US', 'GB')
- `end` (string): End date in YYYY-MM-DD format (default: today)
- `frequency` (string): Time granularity: 'day' (default) or 'hour'
- `link_id` (integer): Filter by specific link ID
- `platform` (string): Filter by platform (e.g., 'desktop', 'mobile', 'tablet')
- `start` (string): Start date in YYYY-MM-DD format (default: 30 days ago)
- `unique` (boolean): Count unique clicks only (by IP)

### `get_analytics_by` (~141 tokens)

Get click counts grouped by a dimension (country, platform, browser, etc.). Useful for breakdowns and top-N reports.

Input parameters:

- `bots` (string): Bot filtering
- `counter` (string, required): Dimension to group by (required)
- `country` (string): Filter by country code
- `end` (string): End date in YYYY-MM-DD format (default: today)
- `link_id` (integer): Filter by specific link ID
- `platform` (string): Filter by platform
- `start` (string): Start date in YYYY-MM-DD format (default: 30 days ago)
- `unique` (boolean): Count unique clicks only

### `export_clicks` (~118 tokens)

Export detailed click records with full information (timestamp, browser, country, URL, platform, referer, bot, ISP, params).

Input parameters:

- `bots` (string): Bot filtering
- `country` (string): Filter by country code
- `end` (string): End date in YYYY-MM-DD format (default: yesterday)
- `link_id` (integer): Filter by specific link ID
- `platform` (string): Filter by platform
- `start` (string): Start date in YYYY-MM-DD format (default: 30 days ago)

Output parameters:

- `results` (array)

### `list_domains` (~16 tokens)

List all custom domains in the workspace.

Output parameters:

- `results` (array)

### `create_domain` (~47 tokens)

Add a custom domain to the workspace. The domain must be configured to point to Linkly's servers.

Input parameters:

- `name` (string, required): The domain name (e.g., 'links.example.com')

Output parameters:

- `name` (string|null)
- `workspace_id` (integer|null)

### `delete_domain` (~31 tokens)

Remove a custom domain from the workspace.

Input parameters:

- `domain_id` (integer, required): The ID of the domain to delete

### `update_domain_favicon` (~47 tokens)

Update the favicon URL for a custom domain.

Input parameters:

- `domain_id` (integer, required): The ID of the domain to update
- `favicon_url` (string, required): URL to the favicon image

### `search_links` (~45 tokens)

Search for links by name, URL, or note. Returns matching links with click statistics.

Input parameters:

- `query` (string, required): Search query to match against link names, URLs, and notes

Output parameters:

- `results` (array)

### `list_webhooks` (~26 tokens)

List all webhook URLs subscribed to the workspace. These receive click events for all links.

Output parameters:

- `results` (array)

### `subscribe_webhook` (~39 tokens)

Subscribe a webhook URL to receive click events for all links in the workspace.

Input parameters:

- `url` (string, required): The webhook URL to receive click event notifications

### `unsubscribe_webhook` (~31 tokens)

Unsubscribe a webhook URL from workspace click events.

Input parameters:

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

### `list_link_webhooks` (~33 tokens)

List all webhook URLs subscribed to a specific link.

Input parameters:

- `link_id` (integer, required): The ID of the link

Output parameters:

- `results` (array)

### `subscribe_link_webhook` (~51 tokens)

Subscribe a webhook URL to receive click events for a specific link.

Input parameters:

- `link_id` (integer, required): The ID of the link
- `url` (string, required): The webhook URL to receive click event notifications

### `unsubscribe_link_webhook` (~48 tokens)

Unsubscribe a webhook URL from a specific link's click events.

Input parameters:

- `link_id` (integer, required): The ID of the link
- `url` (string, required): The webhook URL to unsubscribe

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-linklyhq-linkly/mcp#diagnostics

## Score history

- 2026-08-03: 72
- 2026-08-02: 72
- 2026-08-01: 71
- 2026-07-31: 71
- 2026-07-30: 68
- 2026-07-29: 70
- 2026-07-28: 69
- 2026-07-27: 68
- 2026-07-26: 68

## Links

- Remote endpoint: https://mcp.linklyhq.com/
- Repository: https://github.com/Linkly-HQ/linkly-mcp-server
- Website: https://linklyhq.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-linklyhq-linkly/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-linklyhq-linkly/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-linklyhq-linkly/mcp
