limelink-mcp-server
@limelink/mcp
한국어 · Documentation · Capability reference
LimeLink 동적 링크 관리를 위한 Model Context Protocol (MCP) 서버입니다. Claude Code, Claude Desktop 또는 MCP 호환 클라이언트에서 직접 동적 링크를 생성, 조회 및 관리할 수 있습니다.
시작하는 데 API 키가 필요 없습니다! 문서 및 SDK 설정 가이드는 구성 없이도 사용할 수 있습니다. AI 어시스턴트와 함께 LimeLink 기능을 바로 연결하고 탐색해 보세요.
기능
문서 리소스 — AI 어시스턴트에서 LimeLink 문서(15개 페이지 + 인덱스)에 직접 접근 — API 키 불필요
5가지 도구 — 프로필 및 프로젝트 검색, 동적 링크 생성, 링크 조회 (API 도구는 구성된 프로필 필요)
인메모리 캐싱 — 문서 가져오기에 대한 1시간 TTL 캐시
런타임
Node.js 18 이상
stdio 전송만 지원; Remote MCP/HTTP 전송은 지원하지 않음
npm 패키지:
@limelink/mcp; 전역 실행 파일:limelink-mcpstdout은 MCP 프로토콜 전용; 진단 및 래퍼 로그는 stderr를 사용해야 함
전체 운영 계약은 설치 및 구성 및 네트워크 동작을 참조하세요.
API 키 없이 사용할 수 있는 기능은 무엇인가요?
기능 | 카테고리 | API 키 | 설명 |
| 리소스 | 필요 없음 | 전체 문서 인덱스 |
| 리소스 | 필요 없음 | 개별 문서 15개 페이지 |
| 도구 | 필요 없음 | API에 접촉하지 않고 로컬로 구성된 프로필 별칭 나열 |
| 도구 | 필수 | 선택한 조직 프로필의 프로젝트 나열 |
| 도구 | 필수 | 선택한 프로젝트의 사용자 지정 도메인 나열 |
| 도구 | 필수 | API를 통해 V2 Core 링크 생성 |
| 도구 | 필수 | 접미사로 링크 조회 |
| 도구 | 필수 | URL로 링크 조회 |
Related MCP server: lynxprompt-mcp
빠른 시작
API 키 없이 (문서 및 가이드)
API 키가 필요 없습니다. 연결하고 즉시 LimeLink 문서 및 설정 가이드를 탐색하세요:
{
"mcpServers": {
"limelink": {
"command": "npx",
"args": ["-y", "@limelink/mcp"]
}
}
}AI 어시스턴트에게 다음과 같이 물어보세요:
"LimeLink 시작하기 문서를 읽어줘"
"iOS용 딥 링크를 어떻게 설정하나요?"
"LimeLink SDK 통합 가이드를 보여줘"
조직 프로필 사용 (전체 기능)
아래 표시된 버전 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 구성을 추가하세요:
클라이언트 | 구성 파일 |
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"}}}}환경 변수
변수 | 필수 | 기본값 | 설명 |
| 아니요 | — | 명명된 조직 자격 증명 프로필을 포함하는 버전 1 JSON 파일의 경로. |
LIMELINK_API_KEY 및 LIMELINK_PROJECT_ID는 무시됩니다. 자격 증명 프로필이 구성되지 않은 경우, API 기반 도구는 에이전트를 조직으로 안내하여 조직 API 키를 발급하고 프로필 파일을 구성하도록 합니다. 프로젝트 기반 도구는 프로젝트 UUID를 직접 허용합니다. 프로필의 선택적 projects 맵은 반복적으로 사용되는 프로젝트에 대한 권장 편의 기능이지 필수 사항은 아닙니다. list-projects 검색 후 별칭을 추가하면 유용합니다. 프로필은 첫 번째 API 기반 호출 시 자격 증명 검사를 통해 지연 초기화됩니다. 별칭 추가를 포함한 프로필 파일 변경은 MCP 서버 재시작이 필요합니다.
API 키는 LimeLink 대시보드에서 얻을 수 있습니다. API 키 없이도 문서 리소스와 SDK 설정 가이드를 완전히 사용할 수 있습니다.
도구
list-profiles
API에 접촉하지 않고 구성된 별칭, 조직 레이블, 기본 상태 및 현재 초기화 상태를 나열합니다. 이미 초기화된 프로필에는 범위가 포함됩니다. API 키 값은 비밀로 유지되며 절대 반환되지 않습니다. 조직, 프로젝트, 사용자 지정 도메인 및 자격 증명 식별자와 키 접두사는 비밀 식별자가 아니며 유용한 경우 API 기반 도구 응답에 나타날 수 있습니다.
list-projects
선택한 프로필의 자격 증명에서 검색된 조직의 프로젝트를 나열합니다. 선택적 profile을 허용합니다. 자격 증명에는 projects:read 권한이 필요합니다.
list-custom-domains
필수 project(별칭 또는 UUID)에 대한 사용자 지정 도메인을 나열합니다. 선택적 profile을 허용합니다. 자격 증명에는 domains:read 권한이 필요합니다.
create-link
플랫폼별 딥 링크, 사용자 지정 도메인 선택, 소셜 미리보기 및 UTM 추적을 지원하는 V2 Core 링크를 생성합니다.
매개변수:
매개변수 | 유형 | 필수 | 설명 |
| string | 아니요 | 짧은 URL 경로 식별자 (1–100); 생략 시 API가 생성 |
| string | 예 | 대상 URL (최대 500) |
| string | 예 | 링크 이름 (최대 100) |
| string | 예 | 선택한 프로필의 프로젝트 별칭 또는 프로젝트 UUID |
| string | 아니요 | 프로필 별칭; 그렇지 않으면 구성된 기본 또는 유일한 프로필 사용 |
| UUID string | 아니요 | Core 링크에 대한 사용자 지정 도메인 |
| boolean | 아니요 | 분석 추적 활성화 |
| object | 아니요 | iOS 딥 링크 옵션 |
| object | 아니요 | Android 딥 링크 옵션 |
| object | 아니요 | 소셜 미리보기 + UTM 옵션 |
Claude에서의 사용 예:
"https://example.com/product/123에 대한 동적 링크를 접미사 'product-123'로 만들고 분석을 활성화해줘"
get-link-by-suffix
접미사로 동적 링크를 조회합니다.
매개변수 | 유형 | 필수 | 설명 |
| string | 예 | 동적 링크 접미사 |
| string | 예 | 선택한 프로필의 프로젝트 별칭 또는 프로젝트 UUID |
| string | 아니요 | 프로필 별칭; 그렇지 않으면 구성된 기본 또는 유일한 프로필 사용 |
get-link-by-url
전체 URL을 사용하여 V2 API를 통해 링크를 확인합니다. 백엔드는 URL이 Free 기본 네임스페이스, 프로젝트 호스트 이름 또는 활성 사용자 지정 도메인에 속하는지 결정합니다. 프로젝트 선택기나 로컬 접미사 구문 분석이 필요하지 않습니다.
URL은 절대 HTTPS여야 하며 정확히 하나의 /{suffix} 경로 세그먼트가 있어야 하고 쿼리, 프래그먼트, 명시적 포트 또는 자격 증명이 없어야 합니다.
매개변수 | 유형 | 필수 | 설명 |
| string | 예 | 확인할 전체 LimeLink URL (최대 2048자) |
| string | 아니요 | 프로필 별칭; 그렇지 않으면 구성된 기본 또는 유일한 프로필 사용 |
리소스
limelink://docs/index
전체 LimeLink 문서 인덱스(llms.txt)를 반환합니다.
limelink://docs/{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