npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

Readme

Zulink MCP Server

Manage your short links by asking Claude, Cursor or any other AI assistant.

npm version npm downloads

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/mcp

Cursor

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_link accepts the link's updatedAt as ifUpdatedAt and refuses to overwrite a change made in the meantime.
  • Rate limits. Each token can send 240 requests and 60 changes per minute.

Related

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.