linkwarden-mcp
linkwarden-mcp
一个为 Linkwarden 提供的 模型上下文协议 服务器。Linkwarden 是一个自托管的书签管理器,会为每个保存的页面保留永久副本。
它允许 MCP 客户端(Claude Code、Claude Desktop、Codex)搜索书签集合,将其组织到集合和标签中,并读取已保存页面的存档文章文本,从而无需再次访问实时网站即可对已存档的链接进行摘要或引用。
📖 完整文档请访问 linkwarden-mcp.ni-c.de

注意: Linkwarden 发布的 API 参考文档不完整。此服务器是根据 linkwarden/linkwarden 中
apps/web/pages/api/v1/**的路由和packages/lib/schemaValidation.ts的请求模式编写的,并于 2026-08-17 针对 v2.16.0 进行了验证。这两个文件是此处所有工具的权威来源。
要求
Node.js ≥ 22
一个正在运行的 Linkwarden 实例
一个访问令牌,在 设置 → 访问令牌 下创建
Linkwarden 没有按令牌划分的作用域:一个令牌拥有创建它的账户的全部权限。请创建一个专用账户,仅授予此服务器应看到的集合的访问权限,而不是提供管理员令牌。
Related MCP server: linkwarden-mcp
配置
变量 | 必需 | 描述 |
| 是 | 基础 URL,例如 |
| 是 | 来自设置 → 访问令牌的访问令牌 |
| 否 |
|
| 否 |
|
请使用
https://。 通过纯 HTTP 传输时,令牌会以未加密方式传输;除非主机是本地主机,否则服务器会打印警告。对于自签名证书,建议使用适当的内部 CA,而不是LINKWARDEN_INSECURE_TLS。
令牌在被读取后会从进程环境中移除,因此子进程或 /proc/<pid>/environ 中不可见。
即使没有凭据,服务器仍会启动并列出其工具,因此注册表和检查器可以对其进行内省;此时每个调用都会失败并显示设置说明,而不会访问 API。
安装
Claude Code
claude mcp add linkwarden -e LINKWARDEN_URL=https://links.example.net -e LINKWARDEN_TOKEN=… -- npx -y linkwarden-mcpClaude Desktop
{
"mcpServers": {
"linkwarden": {
"command": "npx",
"args": ["-y", "linkwarden-mcp"],
"env": {
"LINKWARDEN_URL": "https://links.example.net",
"LINKWARDEN_TOKEN": "…"
}
}
}
}Codex
[mcp_servers.linkwarden]
command = "npx"
args = ["-y", "linkwarden-mcp"]
env = { LINKWARDEN_URL = "https://links.example.net", LINKWARDEN_TOKEN = "…" }从源码安装
npm install && npm run build
LINKWARDEN_URL=https://links.example.net LINKWARDEN_TOKEN=… node dist/index.jsDocker
docker build -t linkwarden-mcp .
docker run --rm -i \
-e LINKWARDEN_URL=https://links.example.net \
-e LINKWARDEN_TOKEN=… \
linkwarden-mcp工具
读取
工具 | 描述 |
| 搜索或列出书签。支持 Linkwarden 的字段过滤器( |
| 获取一个书签及其标签、集合和存在的存档格式。 |
| 获取已保存页面的存档文章文本,长文章会进行分片。 |
| 获取所有集合及其链接数量;通过 |
| 获取一个集合及其每个成员的权限。 |
| 获取标签及其链接数量和每个标签的存档设置。 |
| 获取一个标签。 |
| 获取最近添加和置顶的链接,如同 Linkwarden 仪表盘所示。 |
| 获取此账户订阅的 RSS 源。 |
| 获取令牌所属的账户及其存档默认设置。良好的连通性检查。 |
| 获取存档和搜索索引队列。仅限管理员账户 — 其他用户会收到 HTTP 403。 |
写入
当 LINKWARDEN_READ_ONLY=true 时完全不注册。标记为 🔒 的工具需要确认令牌。
工具 | 描述 |
| 保存书签,可选择添加标签和集合(按需创建)。 |
| 更改标题、描述、标签或集合。🔒 仅在 URL 更改时需要确认。 |
| 为此账户置顶或取消置顶链接。 |
| 删除书签及其存档副本。 |
| 将一组标签和/或集合应用于多个链接。 |
| 一次删除多个书签。 |
| 删除现有存档并重新存档页面。 |
| 删除多个链接的存档,但保留书签。 |
| 创建集合,可选择嵌套。 |
| 重命名、重新设置父级或发布集合。🔒 仅在发布时需要确认。 |
| 删除集合 — 级联删除其链接和子集合。 |
| 创建标签或更改其存档设置(按名称更新或插入)。 |
| 重命名标签。 |
| 删除标签;链接保持不变。 |
| 将多个标签合并为一个新标签。 |
| 订阅 RSS/Atom 源。 |
| 停止轮询某个源。 |
故意不暴露的功能
访问令牌管理(
/tokens)。能够创建 API 凭据的工具是权限提升的攻击面,书签服务器不应持有此类功能。用户管理(
/users、账户删除)。超出范围。备份导出和导入(
/migration)。导出会将整个实例转储到模型上下文中;导入可能破坏实例。高亮标记。 创建高亮需要精确的字符偏移量指向存档文档,模型无法有意义地生成这些偏移量,且 Linkwarden 没有提供列出现有高亮的路由。
存档上传和签名的
preservedURL,这需要配置NEXT_PUBLIC_USER_CONTENT_DOMAIN。已弃用的
GET /links列表路由 —search_links改用GET /search,这也是 Linkwarden 自身推荐的方式。
安全性
破坏性工具是两步操作。 第一次调用返回一个绑定到确切目标的短期确认令牌;只有携带该令牌的第二次调用才会执行操作。模型无法自行满足此门控条件,且为一个链接、标签集或更改颁发的令牌不能重放用于另一个。
扩大可见性被视为破坏性操作。 发布集合和更改链接的 URL(这会删除旧页面的所有存档副本)都需要确认,而不仅仅是删除操作。
确认提示从不引用 Linkwarden 中的内容。 标题、URL、描述和集合名称来自已保存页面和实例的其他用户;模型读取的文本中仅出现计数和 ID。
返回的内容被标记为不可信数据,特别是存档文章文本,它由控制目标网站的任何人所写。
部分更新不会清除字段。 Linkwarden 的更新路由会替换整个记录,因此此服务器会读取当前状态并进行合并 — 否则更新会静默地剥离链接的标签或集合的协作者。
200 状态码本身不可信。 几个 Linkwarden 路由会以 HTTP 200 和正文中的错误句子报告失败,而一个没有处理所使用方法的路由会返回 200 且没有任何内容。这两种情况都会报告为错误,而不是成功的写入。
错误正文会被截断,HTML 错误页面会被完全丢弃,重定向永远不会被跟随(因此 bearer 令牌不能重放到其他主机),并且每个请求都带有超时。
LINKWARDEN_READ_ONLY=true不会注册写入工具。剩余风险: 在您配置的令牌权限范围内,被要求执行破坏性操作且用户确认的模型仍然可以执行。请限定账户范围,并保持主机级别的权限提示。
开发
npm install
npm run build
npm test
npm run test:coverage
npm run lint
npm run format
npm run docs:tools # regenerate docs/reference/tools.md from the registered toolsdocs/reference/tools.md 是生成的;如果提交的副本与代码不再匹配,CI 会失败。文档站点位于 docs/ 中,带有其自己的 package.json 和锁文件 — VitePress 不得出现在根安装中,根安装会在 Docker 构建和整个测试矩阵中运行。
请参阅 CONTRIBUTING.md。
发布
一切由标签驱动;没有手动发布步骤。
将 CHANGELOG.md 中的
[Unreleased]部分移至新版本并为其添加日期。发布工作流使用awk提取该部分,因此## [x.y.z]标题格式很重要。更新
package.json中的version字段。npm run lint && npm run build && npm run test:coverage。提交,然后创建一个签名注释标签:
git tag -s v0.1.1 -m "v0.1.1" git push origin main v0.1.1
随后 release.yml 会验证标签是否与 package.json 匹配,通过受信任发布(OIDC——不存在可泄露的 npm 令牌)并附带 provenance 发布到 npm,将版本同步到 server.json 的两个包条目中,发布到 MCP 注册表,并从 changelog 部分创建 GitHub 发布。ci.yml 会并行将多架构容器镜像推送到 GHCR。
如果注册表步骤失败,请在 main 分支上修复它,然后手动运行 mcp-registry.yml 工作流。重新运行失败的作业不是选项:它会检出不可变的标签,因此 main 上的修复永远无法到达它。
License
MIT © Willi Thiel
Maintenance
Related MCP Servers
- Alicense-qualityCmaintenanceEnables Claude and other MCP clients to manage Instapaper accounts by reading, saving, organizing, and analyzing articles through natural language. It supports comprehensive bookmark management, bulk operations, folder organization, and full-text content retrieval for research and synthesis.20MIT
- FlicenseAqualityCmaintenanceEnables managing bookmarks via the Linkwarden API with token-frugal tools for listing collections and links, adding/moving/deleting links, and creating collections.7
- AlicenseBqualityCmaintenanceEnables management of Raindrop.io bookmarks, collections, tags, and highlights via MCP tools, with support for search, bulk editing, and library auditing.17MIT
- Alicense-qualityCmaintenanceEnables users to search, read, and query saved bookmark content via a read-only MCP interface, with full-text and optional semantic search.4MIT
Related MCP Connectors
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
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/ni-c/linkwarden-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server