limelink-mcp-server
This server lets AI assistants interact with LimeLink dynamic link management via MCP: it can read LimeLink documentation without any API key, and with a configured profile it can manage projects, custom domains, and create/look up dynamic links.
Access documentation resources — No API key needed: read the full Docs index (
limelink://docs/index) and 15 individual pages (e.g.,limelink://docs/getting-started,limelink://docs/ios-sdk).List configured profiles —
list-profilesshows available Organization credential aliases without contacting the API.List Projects —
list-projectslists Projects in an Organization (requiresprojects:readpermission).List Custom Domains —
list-custom-domainslists Custom Domains for a given Project (requiresdomains:read).Create dynamic links —
create-linkcreates V2 Core Links with platform-specific deep linking (iOS/Android options), custom domain selection, social previews, UTM tracking, and optional suffix.Look up links by suffix —
get-link-by-suffixresolves a dynamic link using its short URL path.Look up links by full URL —
get-link-by-urlresolves a link from its full URL, supporting Free and Pro URL formats (no suffix parsing needed).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@limelink-mcp-servercreate a dynamic link for my campaign"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@limelink/mcp
한국어 · Documentation · Capability reference
A Model Context Protocol (MCP) server for LimeLink dynamic link management. Create, look up, and manage dynamic links directly from Claude Code, Claude Desktop, or any MCP-compatible client.
No API key required to get started! Documentation and SDK setup guides work without any configuration. Just connect and start exploring LimeLink features with your AI assistant.
Features
Documentation Resources — Access LimeLink docs (15 pages + index) directly from your AI assistant — no API key needed
5 Tools — Discover profiles and Projects, create dynamic links, and look up links (API tools require a configured profile)
In-memory Caching — 1-hour TTL cache for documentation fetches
Runtime
Node.js 18 or later
stdio transport only; Remote MCP/HTTP transport is not supported
npm package:
@limelink/mcp; global executable:limelink-mcpstdout is reserved for the MCP protocol; diagnostics and wrapper logs must use stderr
See installation and configuration and network behavior for the complete operational contract.
What works without an API key?
Feature | Category | API Key | Description |
| Resource | Not needed | Full documentation index |
| Resource | Not needed | 15 individual documentation pages |
| Tool | Not needed | List locally configured profile aliases without contacting the API |
| Tool | Required | List Projects for a selected Organization profile |
| Tool | Required | List Custom Domains for a selected Project |
| Tool | Required | Create V2 Core Links via API |
| Tool | Required | Look up links by suffix |
| Tool | Required | Look up links by URL |
Related MCP server: lynxprompt-mcp
Quick Start
Without API Key (Documentation & Guides)
No API key needed. Connect and start exploring LimeLink documentation and setup guides immediately:
{
"mcpServers": {
"limelink": {
"command": "npx",
"args": ["-y", "@limelink/mcp"]
}
}
}Try asking your AI assistant:
"Read the LimeLink getting-started docs"
"How do I set up deep linking for iOS?"
"Show me the LimeLink SDK integration guide"
With Organization Profiles (Full Features)
Create the version 1 profile file shown below and pass its absolute path:
{
"mcpServers": {
"limelink": {
"command": "npx",
"args": ["-y", "@limelink/mcp"],
"env": {
"LIMELINK_PROFILES_FILE": "/absolute/path/to/limelink-profiles.json"
}
}
}
}Usage with Global Install
npm install -g @limelink/mcp{
"mcpServers": {
"limelink": {
"command": "limelink-mcp",
"env": {
"LIMELINK_PROFILES_FILE": "/absolute/path/to/limelink-profiles.json"
}
}
}
}Configuration
Claude Code
The easiest way to add the MCP server is using the claude mcp add command:
# Without API key (docs & guides only)
claude mcp add --scope user --transport stdio limelink -- npx -y @limelink/mcp
# With API key (full features)
claude mcp add --scope user --transport stdio limelink \
--env LIMELINK_PROFILES_FILE=/absolute/path/to/limelink-profiles.json \
-- npx -y @limelink/mcpScope options:
--scope user— Available in all projects--scope project— Saved to.mcp.json(shareable with team via Git)
Claude Desktop & other MCP clients
Add the JSON config to your client's config file:
Client | Config File |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
Profile file
{"version":1,"defaultProfile":"work","profiles":{"work":{"apiKey":"your_api_key","organizationLabel":"Work","projects":{"marketing":"11111111-1111-4111-8111-111111111111"}}}}Environment Variables
Variable | Required | Default | Description |
| No | — | Path to a version 1 JSON file containing named Organization credential profiles. |
LIMELINK_API_KEY and LIMELINK_PROJECT_ID are ignored. When no credential profile is configured, API-backed tools direct the agent to Organizations to issue an Organization API key and configure the profile file. Project-backed tools accept a Project UUID directly. A profile's optional projects map is a recommended convenience for repeatedly used Projects, not a prerequisite; add aliases after list-projects discovery if useful. Profiles initialize lazily through credential introspection on their first API-backed call. Profile-file changes, including alias additions, require an MCP server restart.
You can get your API key from the LimeLink Dashboard. Without an API key, documentation resources and SDK setup guides are fully available.
Tools
list-profiles
Lists configured aliases, Organization labels, default status, and current initialization status without contacting the API. Already initialized profiles include scopes. API key values remain secret and are never returned. Organization, Project, Custom Domain and credential identifiers and key prefixes are non-secret identifiers and may appear in API-backed tool responses when useful.
list-projects
Lists Projects in the Organization discovered from the selected profile's credential. Accepts optional profile; the credential requires projects:read.
list-custom-domains
Lists Custom Domains for required project (alias or UUID). Accepts optional profile; the credential requires domains:read.
create-link
Create a V2 Core Link with platform-specific deep linking, Custom Domain selection, social previews, and UTM tracking.
Parameters:
Parameter | Type | Required | Description |
| string | No | Short URL path identifier (1–100); API-generated when omitted |
| string | Yes | Target URL (max 500) |
| string | Yes | Link name (max 100) |
| string | Yes | Project alias in the selected profile or Project UUID |
| string | No | Profile alias; otherwise uses configured default or sole profile |
| UUID string | No | Custom Domain for the Core Link |
| boolean | No | Enable analytics tracking |
| object | No | iOS deep linking options |
| object | No | Android deep linking options |
| object | No | Social preview + UTM options |
Example usage in Claude:
"Create a dynamic link for https://example.com/product/123 with suffix 'product-123' and enable analytics"
get-link-by-suffix
Look up a dynamic link by its suffix.
Parameter | Type | Required | Description |
| string | Yes | Dynamic link suffix |
| string | Yes | Project alias in the selected profile or Project UUID |
| string | No | Profile alias; otherwise uses configured default or sole profile |
get-link-by-url
Resolve a Link through the V2 API using its full URL. The backend determines whether the URL belongs to a Free default namespace, Project hostname, or active Custom Domain. No Project selector or local suffix parsing is required.
The URL must be absolute HTTPS with exactly one /{suffix} path segment and no query, fragment, explicit port, or credentials.
Parameter | Type | Required | Description |
| string | Yes | Full LimeLink URL to resolve (max 2048 characters) |
| string | No | Profile alias; otherwise uses configured default or sole profile |
Resources
limelink://docs/index
Returns the full LimeLink documentation index (llms.txt).
limelink://docs/{slug}
Returns individual documentation pages. Available slugs:
introduction, getting-started, project, application, dynamic-link, create-link, link-detail, link-management, appearance, sdk-integration, ios-sdk, android-sdk, api-integration, advanced, llm-agent
Example usage in Claude:
"Read the LimeLink API integration docs"
Claude will access
limelink://docs/api-integration
Development
Prerequisites
Node.js >= 18
pnpm
Setup
git clone https://github.com/hellovelop/limelink-mcp-server.git
cd limelink-mcp-server
pnpm install
pnpm run buildRun locally
LIMELINK_PROFILES_FILE=/absolute/path/to/limelink-profiles.json node dist/index.jsTesting
pnpm test # Unit tests
pnpm test:e2e # E2E tests (MCP stdio communication)
pnpm test:watch # Unit tests in watch mode
pnpm test:coverage # Coverage reportProject Structure
src/
├── index.ts # Entry point
├── lib/
│ ├── config.ts # Environment variable loading
│ ├── cache.ts # In-memory TTL cache
│ ├── api-client.ts # LimeLink API HTTP client
│ └── doc-fetcher.ts # Documentation fetcher with caching
├── tools/
│ ├── create-link.ts # create-link tool
│ ├── get-link-by-suffix.ts
│ └── get-link-by-url.ts
└── resources/
└── documentation.ts # Documentation resourcesLicense
MIT
Available Tools
3 toolscreate-linkB
Create a Limelink dynamic link with platform-specific deep linking, social previews, and UTM tracking
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Project ID the link belongs to. Uses LIMELINK_PROJECT_ID env if not provided. | |
| stats_flag | No | Enable analytics tracking | |
| apple_options | No | iOS-specific deep linking options | |
| android_options | No | Android-specific deep linking options | |
| dynamic_link_url | Yes | Target URL for desktop or fallback | |
| dynamic_link_name | Yes | Link name for management and identification | |
| additional_options | No | Social preview and UTM tracking options | |
| dynamic_link_suffix | Yes | Unique identifier for the short URL path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only says 'create' but discloses no side effects, permissions, return format, error behavior, or any other behavioral traits. Similar to the update_drive example, this lacks required transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core action and key features. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters, nested objects, and no output schema or annotations, yet the description is minimal. It doesn't mention return values, side effects, or how the parameters work together. The schema covers parameter details but the overall context is insufficient for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the schema already explains each parameter. The description adds a high-level categorization (platform-specific, social previews, UTM tracking) but no additional semantic detail. Baseline 3 applies per instructions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a Limelink dynamic link, with specific features listed (platform-specific deep linking, social previews, UTM tracking). The verb 'create' unambiguously distinguishes it from sibling retrieval tools like get-link-by-suffix and get-link-by-url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when to choose creation over retrieval, or any exclusions. This is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-link-by-suffixA
Look up a Limelink dynamic link by its suffix
| Name | Required | Description | Default |
|---|---|---|---|
| suffix | Yes | Dynamic link suffix to look up | |
| project_id | No | Project ID. Uses LIMELINK_PROJECT_ID env if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Look up', which implies a read-only operation, but does not disclose potential side effects, return format, authentication needs, error behavior, or whether the tool modifies anything. This goes beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action and resource, containing no redundant words or restatements. It is maximally concise while still conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple lookup operation, and the schema covers all parameters. However, with no output schema and no annotations, the description does not mention what is returned (e.g., the full link details) or any edge cases, leaving a slight gap in completeness despite the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters (suffix and project_id), including descriptions. The tool description adds no additional parameter-level detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Look up') on a specific resource ('Limelink dynamic link') with a specific lookup key ('suffix'), clearly distinguishing it from the sibling 'get-link-by-url' which uses a URL as the key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a suffix, but it does not explicitly mention when to use this tool versus the sibling 'get-link-by-url' or provide any exclusion guidance. The context of sibling names makes the distinction apparent, but it is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-link-by-urlA
Look up a Limelink dynamic link by its full URL. Supports both Free (deep.limelink.org) and Pro ({project}.limelink.org/link/) URL formats.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full Limelink dynamic link URL to look up | |
| project_id | No | Project ID. Uses LIMELINK_PROJECT_ID env if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does not disclose whether this is a read-only operation, what the return value looks like, or any error behavior. The only behavioral addition is the URL format support, which is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the primary purpose, and contains no redundant or filler content. Every clause provides necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with fully documented parameters, the description covers the core purpose and URL format limitations. It does not describe return values or error conditions, but given the simplicity and schema coverage, this is an acceptable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the two accepted URL formats, giving more meaning to the 'url' parameter beyond the schema's generic description. No info on project_id, but schema covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up a Limelink dynamic link by its full URL, using a specific verb and resource. It distinguishes itself from siblings like get-link-by-suffix (lookup by suffix) and create-link (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context by listing the supported URL formats (Free and Pro), which helps users understand when this tool is applicable. However, it does not explicitly mention alternatives or when not to use it, but the context is clear enough for a differentiated tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.0.5- First observed
create-link - First observed
get-link-by-suffix - First observed
get-link-by-url
TDQS
Each tool has a clear distinct purpose: create-link creates a new link, while get-link-by-suffix and get-link-by-url both retrieve links but by different keys (suffix vs URL). The two retrieval methods might be confused, but their parameter differences make them separable.
All tool names follow a consistent verb-noun pattern with hyphens (create-link, get-link-by-suffix, get-link-by-url), and the retrieval variants use a uniform 'by-...' modifier. The convention is predictable and uniform.
With only 3 tools, the server is minimal but reasonably scoped for its purpose of creating and looking up links. It is on the low end but not overly thin, as the tools are directly relevant to the core functionality.
The server covers create and read operations but lacks update and delete, which are important for lifecycle management of dynamic links. Agents cannot modify or remove existing links, leaving a notable gap for full CRUD coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA production-ready MCP server built with FastAPI, providing an enhanced tool registry for creating, managing, and documenting AI tools for Large Language Models (LLMs).34-
- AlicenseBqualityAmaintenanceMCP server that exposes any LynxPrompt instance to LLMs, enabling browsing, searching, and managing AI configuration blueprints and prompt hierarchies.6692GPL 3.0

@linklee/mcp-serverofficial
AlicenseAqualityDmaintenanceMCP server for Linklee that enables creating short links, listing links, getting click analytics, and managing workspace tags.416MIT- AlicenseNot gradedqualityDmaintenanceMCP server that provides tools to interact with the LiteLLM proxy API, enabling LLM completions, embeddings, image generation, and admin operations.18MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellovelop/limelink-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server