@zulink/mcp
v0.1.3
Published
MCP server for Zulink: let Claude, Cursor and other AI assistants create branded short links, connect domains and read link analytics.
Maintainers
Readme
Zulink MCP Server
Manage your short links by asking Claude, Cursor or any other AI assistant.
Zulink is the link management platform for branded short
links on your own domain: redirects by country and device, A/B tests, links
that open in the app and click analytics without cookies, all hosted in the
EU. @zulink/mcp connects a Zulink project to your AI assistant through the
Model Context Protocol. Instead of clicking
through the dashboard, you just say what you need:
"Create a short link go.example.com/spring for our spring sale page, tag it campaign and add UTM source newsletter."
"Which of our links got the most clicks in the last 30 days?"
"Send iPhone users of go.example.com/app to the App Store and Android users to Google Play."
"Connect go.example.com and tell me which DNS records I need."
Hosted or local?
Zulink runs a hosted MCP server, so most assistants need nothing installed:
| | Hosted server | This package |
| -------- | ---------------------------------------------- | ---------------------------- |
| Setup | Add https://zulink.co/mcp as a remote server | Runs locally with npx |
| Sign-in | OAuth with your Zulink account | A project API token |
| Projects | Every project of your account | The one project of the token |
| Extras | Also designs Open Graph images | Links, domains and analytics |
Use this package when your client only supports local servers, for scripts and agents without a browser sign-in, or when an assistant should only ever reach one project with a role you choose.
Setup
1. Get an API token. Sign up for Zulink for free, open Project settings → API tokens and create a token. Its role decides what the assistant may do: a role that can only read links gets only the reading tools.
2. Add the server to your client.
Claude Desktop
Add this to claude_desktop_config.json (Settings → Developer → Edit
Config) and restart Claude:
{
"mcpServers": {
"zulink": {
"command": "npx",
"args": ["-y", "@zulink/mcp"],
"env": { "ZULINK_API_TOKEN": "zurl_…" }
}
}
}Claude Code
claude mcp add zulink -e ZULINK_API_TOKEN=zurl_… -- npx -y @zulink/mcpCursor
Add the same block as for Claude Desktop to ~/.cursor/mcp.json, or to
.cursor/mcp.json in a project.
VS Code
Add this to .vscode/mcp.json. VS Code asks for the token once and stores it
securely:
{
"inputs": [
{
"type": "promptString",
"id": "zulink-token",
"description": "Zulink API token",
"password": true
}
],
"servers": {
"zulink": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@zulink/mcp"],
"env": { "ZULINK_API_TOKEN": "${input:zulink-token}" }
}
}
}Any other client
Start npx -y @zulink/mcp as a stdio server with these environment variables:
| Variable | Purpose |
| ------------------ | ------------------------------------------ |
| ZULINK_API_TOKEN | Required. The project API token. |
| ZULINK_BASE_URL | Optional. Defaults to https://zulink.co. |
The server needs Node.js 20 or newer.
Tools
| Tool | What it does | Permission |
| ------------------------------------- | ----------------------------------------------------- | ---------------------------------- |
| get_project | The project, the token's role, permissions and plan | any valid token |
| list_links, get_link | Search, page through and read links | links.read |
| create_link | Create a link, naming the domain by hostname or id | links.create |
| update_link | Change only the given fields of a link | links.update |
| delete_link | Delete a link permanently | links.delete |
| list_domains, get_domain | Domains with their status and required DNS records | domains.read |
| add_domain, remove_domain | Connect or remove a custom domain | domains.create, domains.delete |
| get_analytics, get_link_analytics | Clicks, visitors and breakdowns, or one link's clicks | analytics.read |
Links can use everything Zulink offers:
geo and device targeting,
A/B tests,
open in app,
country allowlists,
custom link previews, UTM
parameters, tags and expiry dates. Features outside the project's plan are
refused with plan_required.
Good to know
- Least privilege. The server only offers the tools the token's role allows, and Zulink checks every call against the role again. Restart the server after changing the role to update the tool list.
- No passwords through the AI. Link passwords cannot be set through MCP. Set them in the dashboard or with the SDK.
- Safe concurrent edits.
update_linkaccepts the link'supdatedAtasifUpdatedAtand refuses to overwrite a change made in the meantime. - Rate limits. Each token can send 240 requests and 60 changes per minute.
Related
zulink: the typed Node.js SDK this server is built on.- Zulink documentation
Try Zulink
Zulink is free to start: connect your own domain, create branded short links and see every click, without cookies and hosted in the EU.
Create your free account on zulink.co →
Zulink is built by The Zu Company.
