limelink-mcp-server
@limelink/mcp
用于 LimeLink 动态链接管理的 Model Context Protocol (MCP) 服务器。可直接通过 Claude Code、Claude Desktop 或任何兼容 MCP 的客户端创建、查询和管理动态链接。
无需 API 密钥即可开始使用! 文档和 SDK 设置指南无需任何配置即可使用。只需连接,即可与您的 AI 助手一起探索 LimeLink 功能。
功能
文档资源 — 直接从您的 AI 助手访问 LimeLink 文档(15 个页面 + 索引)——无需 API 密钥
5 个工具 — 发现配置文件和 Projects、创建动态链接以及查询链接(API 工具需要已配置的配置文件)
内存缓存 — 文档抓取使用 1 小时 TTL 缓存
运行时
Node.js 18 或更高版本
仅支持 stdio 传输;不支持远程 MCP/HTTP 传输
npm 包:
@limelink/mcp;全局可执行文件:limelink-mcpstdout 保留用于 MCP 协议;诊断和包装器日志必须使用 stderr
哪些功能无需 API 密钥即可使用?
Feature | Category | API Key | Description |
| 资源 | 不需要 | 完整文档索引 |
| 资源 | 不需要 | 15 个独立文档页面 |
| 工具 | 不需要 | 列出本地配置的配置文件别名,无需联系 API |
| 工具 | 必需 | 列出所选 Organization 配置文件的 Projects |
| 工具 | 必需 | 列出所选 Project 的 Custom Domains |
| 工具 | 必需 | 通过 API 创建 V2 Core Links |
| 工具 | 必需 | 按后缀查询链接 |
| 工具 | 必需 | 按 URL 查询链接 |
Related MCP server: lynxprompt-mcp
快速开始
无需 API 密钥(文档与指南)
无需 API 密钥。立即连接并开始探索 LimeLink 文档和设置指南:
{
"mcpServers": {
"limelink": {
"command": "npx",
"args": ["-y", "@limelink/mcp"]
}
}
}尝试向您的 AI 助手提问:
“阅读 LimeLink 入门文档”
“如何为 iOS 设置深度链接?”
“查看 LimeLink SDK 集成指南”
使用 Organization 配置文件(完整功能)
创建下面所示的版本 1 配置文件,并传入其绝对路径:
{
"mcpServers": {
"limelink": {
"command": "npx",
"args": ["-y", "@limelink/mcp"],
"env": {
"LIMELINK_PROFILES_FILE": "/absolute/path/to/limelink-profiles.json"
}
}
}
}全局安装用法
npm install -g @limelink/mcp{
"mcpServers": {
"limelink": {
"command": "limelink-mcp",
"env": {
"LIMELINK_PROFILES_FILE": "/absolute/path/to/limelink-profiles.json"
}
}
}
}配置
Claude Code
添加 MCP 服务器的最简单方式是使用 claude mcp add 命令:
# 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/mcp作用域选项:
--scope user— 可用于所有项目--scope project— 保存到.mcp.json(可通过 Git 与团队共享)
Claude Desktop 及其他 MCP 客户端
将 JSON 配置添加到您客户端的配置文件中:
Client | Config File |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
配置文件
{"version":1,"defaultProfile":"work","profiles":{"work":{"apiKey":"your_api_key","organizationLabel":"Work","projects":{"marketing":"11111111-1111-4111-8111-111111111111"}}}}环境变量
Variable | Required | Default | Description |
| 否 | — | 包含命名 Organization 凭据配置文件的版本 1 JSON 文件的路径。 |
LIMELINK_API_KEY 和 LIMELINK_PROJECT_ID 会被忽略。当没有配置凭据配置文件时,基于 API 的工具会引导代理前往 Organizations 签发 Organization API 密钥并配置配置文件。基于 Project 的工具直接接受 Project UUID。配置文件中可选的 projects 映射是为反复使用的 Projects 提供的便捷方式,并非必需条件;如果有用,可在 list-projects 发现之后添加别名。配置文件会在首次 API 调用时通过凭据内省进行惰性初始化。配置文件变更(包括添加别名)需要重启 MCP 服务器。
您可以从 LimeLink Dashboard 获取 API 密钥。即使没有 API 密钥,文档资源和 SDK 设置指南也完全可用。
工具
list-profiles
列出已配置的别名、Organization 标签、默认状态以及当前初始化状态,无需联系 API。已初始化的配置文件包含作用域。API 密钥值保持机密,绝不会返回。Organization、Project、Custom Domain 和凭据标识符及密钥前缀是非机密标识符,在有用时可能出现在基于 API 的工具响应中。
list-projects
列出从所选配置文件的凭据中发现的 Organization 中的 Projects。接受可选的 profile 参数;凭据需要 projects:read 权限。
list-custom-domains
列出所需 project(别名或 UUID)的 Custom Domains。接受可选的 profile 参数;凭据需要 domains:read 权限。
create-link
创建带有平台专属深度链接、Custom Domain 选择、社交预览和 UTM 跟踪的 V2 Core Link。
参数:
Parameter | Type | Required | Description |
| string | 否 | 短 URL 路径标识符(1–100);省略时由 API 生成 |
| string | 是 | 目标 URL(最多 500) |
| string | 是 | 链接名称(最多 100) |
| string | 是 | 所选配置文件中的 Project 别名或 Project UUID |
| string | 否 | 配置文件别名;否则使用已配置的默认配置文件或唯一配置文件 |
| UUID string | 否 | Core Link 的 Custom Domain |
| boolean | 否 | 启用分析跟踪 |
| object | 否 | iOS 深度链接选项 |
| object | 否 | Android 深度链接选项 |
| object | 否 | 社交预览 + UTM 选项 |
在 Claude 中的示例用法:
“为 https://example.com/product/123 创建后缀为 'product-123' 的动态链接,并启用分析”
get-link-by-suffix
按后缀查询动态链接。
Parameter | Type | Required | Description |
| string | 是 | 动态链接后缀 |
| string | 是 | 所选配置文件中的 Project 别名或 Project UUID |
| string | 否 | 配置文件别名;否则使用已配置的默认配置文件或唯一配置文件 |
get-link-by-url
使用完整 URL 通过 V2 API 解析链接。后端会判断该 URL 属于 Free 默认命名空间、Project 主机名还是活动 Custom Domain。无需 Project 选择器或本地后缀解析。
URL 必须是绝对 HTTPS,且恰好包含一个 /{suffix} 路径段,不能有查询、片段、显式端口或凭据。
Parameter | Type | Required | Description |
| string | 是 | 要解析的完整 LimeLink URL(最多 2048 个字符) |
| string | 否 | 配置文件别名;否则使用已配置的默认配置文件或唯一配置文件 |
资源
limelink://docs/index
返回完整的 LimeLink 文档索引(llms.txt)。
limelink://docs/{slug}
返回单独的文档页面。可用的 slug:
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
在 Claude 中的示例用法:
“阅读 LimeLink API 集成文档”
Claude 将访问
limelink://docs/api-integration
开发
前置要求
Node.js >= 18
pnpm
设置
git clone https://github.com/hellovelop/limelink-mcp-server.git
cd limelink-mcp-server
pnpm install
pnpm run build本地运行
LIMELINK_PROFILES_FILE=/absolute/path/to/limelink-profiles.json node dist/index.js测试
pnpm test # Unit tests
pnpm test:e2e # E2E tests (MCP stdio communication)
pnpm test:watch # Unit tests in watch mode
pnpm test:coverage # Coverage report项目结构
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 resources许可证
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.
3 tool updates
v0.0.5- First observed
create-link - First observed
get-link-by-suffix - First observed
get-link-by-url
TDQS
Scored across 3 tools
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
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.643 npm2GPL 3.0

@linklee/mcp-serverofficial
AlicenseAqualityDmaintenanceMCP server for Linklee that enables creating short links, listing links, getting click analytics, and managing workspace tags.47 npmMIT- AlicenseNot gradedqualityDmaintenanceMCP server that provides tools to interact with the LiteLLM proxy API, enabling LLM completions, embeddings, image generation, and admin operations.43 npmMIT