关于 Linkwarden MCP
Linkwarden MCP 将 MCP 客户端连接到 Linkwarden 书签库,支持以自然语言查找和整理内容。默认只读;写入和删除工具可分别按范围启用。
主要功能
- 01搜索书签、集合和标签
- 02读取已保存及归档的网页内容
- 03默认只读
- 04可选且受范围控制的写入工具
- 05单独按范围启用删除与合并工具
- 06书签分流与整理工作流
适用场景
- 01按主题查找已保存的书签
- 02查看某个集合或标签中的条目
- 03启用写入范围后保存或整理链接
- 04启用删除范围后清理链接或标签
MCP 相关
连接 Linkwarden HTTP API,并通过 stdio 提供书签、集合和标签操作。只有配置相应范围后,才会注册写入和删除工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx linkwarden-mcpLINKWARDEN_API_URLLinkwarden instance base URL (no /api/v1 suffix)LINKWARDEN_API_KEY密钥Access token from Linkwarden settings (Authorization: Bearer)LINKWARDEN_MCP_WRITE_SCOPESComma-separated write scopes: links,collections,tags,raw. Empty = read-only.LINKWARDEN_MCP_DELETE_SCOPESComma-separated delete scopes (never implied by write scopes)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
linkwarden-mcp
适用于可自托管 Linkwarden 的 MCP 服务:向 AI 咨询书签、集合和标签。
什么是 Linkwarden?
Linkwarden 是一款可自托管的开源书签管理器。你可以在一个地方收集、整理、注释和保存网页,并创建完整页面存档,以便即使原始页面消失,内容仍可阅读。它还支持协作和公开分享。
本项目将 Linkwarden HTTP API 接入 Model Context Protocol,让 Cursor、Claude、VS Code Copilot 及其他 MCP 宿主能够通过自然语言查询你的实时资料库。
Linkwarden 实用链接:
此服务的功能
默认情况下为只读。你可以使用:
- 18 个读取工具 - 发现(
list_resources)、六项核心读取功能(搜索、获取、读取保存内容、集合、标签、概览),以及 11 个分类整理/维护工作流 - 任务工具(可选启用) - 根据意图执行写入操作,例如
save_link、smart_save_link、organise_links、create_collection、apply_triage_plan(设置匹配的写入范围后注册) - 删除工具(可选启用) -
delete_links、delete_tags、merge_tags、delete_collection(仅在删除范围内注册;写入权限不会默认包含删除权限) - 严格拒绝列表 - 即使启用了写入功能,令牌、会话、身份验证、用户管理(
GET /api/v1/users/me除外)、迁移和整个实例的保存操作仍会被禁止
传输方式为 stdio。不运行 HTTP 服务。使用 uv / uvx 时,无需全局安装。
品牌标识/图标
共有四个展示位置(标识变更时请保持同步):
- stdio 宿主(Cursor、通过
mcp.json配置的 Claude Desktop):server_icons()提供的serverInfo.icons— 内嵌数据 URI,来源于src/linkwarden_mcp/assets/icon.png,另有 HTTPS 后备图标docs/icon-512.png(https://raw.githubusercontent.com/flumpiey/linkwarden-mcp/main/docs/icon-512.png)。website_url为https://linkwarden.app/。 - Cursor 插件:
.cursor-plugin/plugin.json中的logo→docs/linkwarden-icon.svg。 - Claude Desktop 扩展:
mcpb/icon.png(使用npx @anthropic-ai/mcpb pack mcpb打包)。 - Claude.ai 远程连接器: Claude.ai 会忽略
serverInfo.icons,并使用连接器 URL 所属根域名的 favicon。如果之后托管远程 MCP,请在可注册域名根目录提供docs/favicon.ico(例如,https://mcp.acme.com/...对应https://acme.com/favicon.ico)。
server.json 中的注册表元数据也将 icons[0].src 指向同一个原始 docs/icon-512.png URL。
要求
- Python ≥ 3.10(由
uvx自动安装) - uv(提供
uvx) - 可访问的 Linkwarden 实例:
LINKWARDEN_API_URL+LINKWARDEN_API_KEY
访问令牌
- 登录你的 Linkwarden 实例(可自托管或使用 Cloud)。
- 打开 设置 → 访问令牌(或前往
/settings/access-tokens)。 - 创建一个新访问令牌,为其命名,并将令牌值复制到
LINKWARDEN_API_KEY。 - 将
LINKWARDEN_API_URL设为你的实例基础 URL(通常不包含/api/v1;仅当你的部署需要时才添加/api/v1),例如https://links.example.com或本地 Docker 地址http://127.0.0.1:3000。
linkwarden-mcp 会将令牌作为 Authorization: Bearer … 发送。API 概览:API 介绍。
本地运行时,将 .env.example 复制为 .env——切勿提交 .env。凭据优先使用 Cursor 插件的配置界面,或在生产环境中使用密钥管理器。
快速开始
uvx linkwarden-mcp
粘贴下方的客户端配置,设置 LINKWARDEN_API_URL / LINKWARDEN_API_KEY,重启主机,然后提问:“查找我未读的 Python 书签” 或 “我的 Dev 集合里有什么?”
从 git 克隆版本(开发):uvx --from git+https://github.com/flumpiey/linkwarden-mcp linkwarden-mcp 或 uv run --directory /path/to/linkwarden-mcp linkwarden-mcp。
安装
下方的配置会从 PyPI 获取 linkwarden-mcp。如需只读模式,请将写入范围环境变量留空。
Cursor
**插件(使用配置界面设置 URL、密钥和范围):**此仓库通过 .cursor-plugin/plugin.json 和根目录中的 mcp.json 作为 Cursor 插件使用。
- 将克隆的仓库符号链接或复制到
~/.cursor/plugins/local/linkwarden-mcp(Windows:%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp)。- macOS / Linux:
ln -s /path/to/linkwarden-mcp ~/.cursor/plugins/local/linkwarden-mcp - Windows: Cursor 不会跟随本地插件的符号链接。请改用联接或复制:
或:mklink /J "%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp" "E:\Development\linkwarden-mcp"robocopy "E:\Development\linkwarden-mcp" "%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp" /E
- macOS / Linux:
- 重新加载窗口。
- 在
linkwarden-mcp上打开 插件 → 配置。设置 Linkwarden API URL 和 Linkwarden API key。如需只读模式,将 Write scopes / Delete scopes 留空;否则粘贴 CSV,例如links,collections。 - 在 Customize / MCP 下确认已启用
linkwardenMCP 服务。
Marketplace 上架需要单独提交,请前往 cursor.com/marketplace/publish。
**手动配置 mcp.json:**项目级 .cursor/mcp.json 或用户级 ~/.cursor/mcp.json。根目录中的 mcp.json 仅用于插件连接,包含 ${…} 占位符——切勿在其中提交真实密钥。
从 PyPI 安装:
{
"mcpServers": {
"linkwarden": {
"type": "stdio",
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
本地可编辑安装(开发):
{
"mcpServers": {
"linkwarden": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
在 env 块中配置可选的限定范围写入:
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
保存后重启 Cursor。在 MCP 设置中确认 linkwarden 已启用。
Claude Desktop
**桌面扩展(.mcpb):**从 GitHub Releases 下载 mcpb.mcpb。请使用 v0.1.5+(PATH 中需要有 uv)。启动命令为 uv tool run --python 3.12 linkwarden-mcp。不要将 PyPI 包加入 mcpb/pyproject.toml 依赖项——Claude Desktop 会在安装时同步该文件,且可能在系统 Python 3.13 环境下失败。
从克隆仓库构建自己的捆绑包:
npx @anthropic-ai/mcpb pack mcpb
在 Windows 上,双击通常不会有任何反应;将文件拖入聊天则会把它作为附件添加到对话中,而不是安装。请在 Settings 中使用 Install Extension…。
**手动配置 claude_desktop_config.json 的备用方法:**编辑 Claude Desktop 配置,然后重启应用。
| OS | 路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
本地克隆:
{
"mcpServers": {
"linkwarden": {
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Claude Code
通过 CLI 添加:
claude mcp add linkwarden --env LINKWARDEN_API_URL=https://links.example.com --env LINKWARDEN_API_KEY=your-token -- uvx linkwarden-mcp
或者编辑 ~/.claude.json / 项目 MCP 配置:
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
VS Code / GitHub Copilot
在项目根目录创建 .vscode/mcp.json:
{
"servers": {
"linkwarden": {
"type": "stdio",
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
本地可编辑方式:
{
"servers": {
"linkwarden": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
重新加载窗口。打开 Copilot Chat,确认 linkwarden 工具可用。
Windsurf
编辑 ~/.codeium/windsurf/mcp_config.json(macOS/Linux),或使用 Windsurf MCP 设置界面:
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
保存后重启 Windsurf。
Zed
在 Zed settings.json 的 context_servers 下添加(也可通过 Agent Panel → settings 添加):
{
"context_servers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Cline
编辑 Cline MCP 设置文件(通过 Cline MCP 界面访问 cline_mcp_settings.json):
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Continue
在 .continue/config.yaml 中:
mcpServers:
- name: linkwarden
command: uvx
args:
- linkwarden-mcp
env:
LINKWARDEN_API_URL: https://links.example.com
LINKWARDEN_API_KEY: your-token
通用 / 任意 stdio MCP 主机
任何能够启动 stdio MCP 服务的主机:
| 字段 | 值 |
|---|---|
| 命令 | uvx |
| 参数 | linkwarden-mcp |
| 环境变量 | LINKWARDEN_API_URL、LINKWARDEN_API_KEY(以及可选的写入范围) |
uvx linkwarden-mcp
从克隆仓库进行开发:uv run --directory /path/to/linkwarden-mcp linkwarden-mcp。
npx 只能运行 npm 包。这是一个 Python 包;请使用 uvx。
环境变量
| 变量 | 必需 | 说明 |
|---|---|---|
LINKWARDEN_API_URL | 是 | 基础 URL(仅在需要时包含 /api/v1;常见格式:https://links.example.com) |
LINKWARDEN_API_KEY | 是 | 在 Settings → Access Tokens 中获取的访问令牌;作为 Authorization: Bearer 发送;绝不记录到日志 |
LINKWARDEN_MCP_WRITE_SCOPES | 否 | 以逗号分隔的创建/更新域。留空 = 不允许写入。 |
LINKWARDEN_MCP_DELETE_SCOPES | 否 | 仅用于删除的逗号分隔域。不会由 WRITE_SCOPES 隐式启用。 |
LINKWARDEN_MAX_BULK | 否 | 每次批量操作的最大记录数(默认值为 25) |
TEST_LINKWARDEN_API_URL | 仅集成测试 | 供 pytest -m integration 使用的实时沙盒 URL |
TEST_LINKWARDEN_API_KEY | 仅集成测试 | 供 pytest -m integration 使用的实时沙盒令牌 |
有效范围:links、collections、tags、raw。不支持通配符(*、all)。raw 会将有效范围扩展为所有域范围(紧急解锁选项)。
推荐配置(涵盖大多数书签工作流,无需启用所有会修改数据的工具):
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
不设置范围时的默认值:18 个工具。在 WRITE 和 DELETE 中启用全部三个域范围时:31 个工具。
如果设置了旧版 LINKWARDEN_MCP_ALLOW_WRITES / ALLOW_WRITES / LINKWARDEN_MCP_WRITES,程序会直接报错。请改用范围限定变量。
MCP 主机环境变量(.cursor/mcp.json 或 Cursor 插件 Configure)必须与进程环境变量 / .env 一致,否则范围行为会不一致。
请参阅 .env.example。**切勿提交 .env。**在生产环境中,建议使用 Cursor 插件 Configure 界面或密钥管理器。
写入范围和任务工具
当某个范围列在 LINKWARDEN_MCP_WRITE_SCOPES 中时,服务器会为该领域注册任务工具。LINKWARDEN_MCP_DELETE_SCOPES 会为每个领域启用删除/合并工具。调用 list_resources,查看 read_only、范围列表和实时边界字符串。
| 工具 | 范围 | 用途 |
|---|---|---|
save_link | WRITE links | 将 URL 保存到一个集合中(按名称指定) |
smart_save_link | WRITE links | 保存链接,并可选择启发式推荐的集合/标签 |
organise_links | WRITE links | 移动或重新标记多个链接 |
update_link | WRITE links | 更新链接字段(读取-修改-写入) |
queue_archive | WRITE links | 排队进行保存(异步;不会立即执行) |
apply_triage_plan | WRITE links | 应用 [{link_id, collection?, tags?}];默认 dry_run=true |
bulk_sort_by_rules | WRITE links | 匹配 domain_pattern 规则后进行整理;默认 dry_run=true |
create_collection | WRITE collections | 创建集合(可指定父级) |
auto_tag_by_domain | WRITE links + tags | 应用域名→标签规则;默认 dry_run=true |
delete_links | DELETE links | 删除多个链接 |
delete_tags | DELETE tags | 按 ID 或名称删除标签 |
merge_tags | DELETE tags | 将标签合并为一个新名称(具有破坏性) |
delete_collection | DELETE collections | 在用户为集合中的链接选择删除/移动/取消后删除集合(通过征询或 on_links) |
仅使用推荐范围的示例:
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
拒绝列表(始终阻止): /api/v1/tokens、/api/v1/session、/api/v1/auth、/api/v1/users/**(GET /api/v1/users/me 除外)、迁移操作,以及整个实例的保存工作进程操作。
工具
读取工具
始终注册(共 18 个)。
| 工具 | 用途 |
|---|---|
list_resources | 发现;报告 read_only + 实时写入/删除范围 |
search_links | 按查询、集合、标签或固定状态搜索 |
get_link | 获取单个链接的完整元数据 |
read_link_content | 获取保存的纯文本(textContent 或存档回退内容) |
list_collections | 列出集合及其链接数量 |
list_tags | 列出标签及其链接数量 |
get_library_overview | 汇总数量、空集合、未使用的标签 |
suggest_collection_for_url | 为 URL 提供启发式集合建议 |
suggest_tags_for_link | 推荐现有资料库中的标签(绝不编造名称) |
find_unsorted_links | 列出未整理的链接(默认集合:未整理) |
triage_links | 为链接 ID 提议集合/标签(不写入) |
find_duplicate_links | 按规范化后的 URL 对链接分组 |
recommend_collection_for_links | 为一批链接推荐共识集合 |
suggest_links_for_collection | 查找其他位置可能属于该集合的链接 |
analyze_collection_overlap | 比较两个集合共有的域名/标签/URL |
suggest_collection_structure | 整理建议:空集合、近似重复名称、过度拥挤的集合 |
align_tags_with_similar_links | 查看用于相似域名链接的标签 |
get_sorting_dashboard | 一站式整理:未整理链接、重复项、空集合、最大集合 |
写入工具
仅在设置了相应范围时注册(见上表)。整理收件箱时,优先使用 smart_save_link / 整理工具,而不是直接编辑字段。
| 模式 | 所需范围 | 说明 |
|---|---|---|
| 链接创建/更新/整理/存档 | WRITE links | 包含默认启用 dry_run 的工作流写入工具 |
| 创建集合 | WRITE collections | 可按名称指定父级 |
| 域名自动添加标签 | WRITE links + tags | 仅使用现有标签名称 |
| 删除/合并标签 | 相应的 DELETE 范围 | 具有破坏性;请先确认 ID |
Agent Skill
配套技能:skills/linkwarden-bookmarks/SKILL.md。
Cursor 插件会从 skills/ 中发现此技能。没有该插件时,请将该文件夹复制或符号链接到 Agent 技能路径。它会告知模型先调用 list_resources,写入后进行验证,以及优先使用哪些工作流工具。
开发
uv sync --extra dev
npm install # installs lefthook + commitlint; registers git hooks
uv run linkwarden-mcp
仅运行离线测试(respx)。无需运行中的 Linkwarden:
uv run ruff check src tests
uv run pytest
Git hooks(lefthook)
| Hook / 命令 | 执行内容 |
|---|---|
| pre-commit | ruff check + 完整的 pytest(模拟测试套件) |
| commit-msg | commitlint Conventional Commits |
npm run pre-publish | 确保构建/twine → ruff → pytest → sdist 内容 → python -m build → twine check → npx @anthropic-ai/mcpb pack mcpb |
提交消息必须遵循 Conventional Commits,例如 feat(api): add delete_links tool。
标记发布版本前,请运行本地发布检查:
npm run pre-publish
GitHub Actions 矩阵:Python 3.10 和 3.12。
注意事项
- 一个进程 ↔ 一个
LINKWARDEN_API_URL。多实例路由不在支持范围内。 - 共享实例上的多用户/团队消歧未经验证。在针对实时共享资料库完成验证前,请勿声称支持多租户。
- 集合/标签建议基于启发式规则,且仅限当前资料库;不会凭空创建新的标签名称。
- 批量修改工作流默认使用
dry_run=true;仅在检查计划后才设置dry_run=false。 - ChatGPT Apps 需要托管的 HTTP MCP 端点。此软件包仅支持 stdio。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。