Skip to main content
Glama
elkinegor

linkbit-mcp

by elkinegor
README.md
# linkbit-mcp

MCP server for [LinkBit](https://linkbit.live): shorten links, bulk create, QR codes, and click analytics from Claude, ChatGPT, Cursor, and n8n.

Public docs: [linkbit.live/docs](https://linkbit.live/docs) · [linkbit.live/mcp](https://linkbit.live/mcp)

## Setup

1. Sign in at [linkbit.live](https://linkbit.live) and create an API key (`slk_...`).
2. Node.js **18+** is required (`fetch`).

```
APP_URL=https://linkbit.live
API_KEY=slk_your_key
```

Auth against the REST API uses **either** `Authorization: Bearer slk_...` **or** `x-api-key: slk_...`. This server sends Bearer.

## Install

```bash
claude mcp add linkbit -e API_KEY=slk_your_key -e APP_URL=https://linkbit.live -- npx -y linkbit-mcp
```

Claude Desktop / Cursor (`mcp.json`):

```json
{
  "mcpServers": {
    "linkbit": {
      "command": "npx",
      "args": ["-y", "linkbit-mcp"],
      "env": {
        "APP_URL": "https://linkbit.live",
        "API_KEY": "slk_your_key"
      }
    }
  }
}
```

Until the npm package is visible in your environment, `npx -y github:elkinegor/linkbit-mcp` works the same.

## Example prompts

- Shorten https://example.com/campaign as slug spring and utm_source newsletter
- List my links and show clicks for the first id since 2026-01-01
- Disable link `<id>` then generate a print PNG QR

## Tools

| Tool | Parameters | Notes |
| --- | --- | --- |
| `shorten_url` | `destination` (required), `slug`, `note`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content` | Existing `utm_*` on the URL are not overwritten; `#fragment` is kept |
| `shorten_urls` | `urls[]` with the same fields | Bulk create |
| `list_links` | — | Newest first |
| `update_link` | `id`, optional destination/slug/note/UTM/`disabled` | PATCH |
| `disable_link` | `id`, optional `disabled` (default true) | Stops redirects. `destructiveHint: true` |
| `delete_link` | `id` | Permanent. `destructiveHint: true` |
| `get_qr` | `id`, `format` png\|svg, `color`, `logo`, `print` | Binary as base64 |
| `get_link_stats` | `id`, optional `from`, `to` (YYYY-MM-DD) | Countries, devices, referrers, daily |
| `get_analytics` | — | Account overview |

## Errors

- **401** — API key missing or wrong (`slk_...`). Create a key under API Keys.
- **400** — invalid URL, slug taken, daily create limit, blocked or unsafe destination.
- **404** — unknown link id.
- Process fails at start if Node is older than 18 (`fetch` is required).

n8n, Make, and custom agents can also call `/api/v1` with the same headers.

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have clearly distinct resource+action targets. The main overlap is disable_link versus update_link (which already accepts a disabled flag), and get_link_stats versus get_analytics share a stats purpose though one is per-link and one is account-level.

Naming Consistency5/5

Consistent snake_case verb_noun pattern throughout: shorten_url, list_links, update_link, disable_link, delete_link, get_qr, get_link_stats, get_analytics. The singular/plural distinction (shorten_url vs shorten_urls) is a reasonable, predictable convention.

Tool Count5/5

Nine tools is well-scoped for a URL shortener, covering creation, management, and analytics without bloat. Each tool earns its place.

Completeness5/5

Full lifecycle is covered: single/bulk create, list, update, disable/re-enable, delete, plus QR generation and both link-level and account-level analytics. No obvious gaps for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues