linkbit-mcp
# 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
Scored across 9 tools
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.
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.
Nine tools is well-scoped for a URL shortener, covering creation, management, and analytics without bloat. Each tool earns its place.
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.