Linkwarden MCP
io.github.flumpiey由 GitHub 账号 flumpiey 发布v0.1.6更新于 Oct 28, 2026
Read-first Linkwarden bookmarks MCP with opt-in write, delete, and collection tools.
概览
面向自建 Linkwarden 书签库的只读优先 MCP 服务器,让助手搜索、阅读并整理链接、收藏集和标签,写入与删除工具需显式开启。
- 可以做什么
- 搜索、读取和查看链接,包括保存的网页正文与完整元数据
- 列出收藏集和标签及其链接数量,并给出库总览:总量、空收藏集、未使用标签
- 整理与清理:找出未分类或重复链接、推荐收藏集与标签、比较收藏集重叠、检查结构问题
- 开启写入范围后,可保存、移动、重新打标签链接,排队归档,并创建收藏集
- 仅在设置对应删除范围时,才可删除链接、标签、收藏集或合并标签
- 适用场景
- 适合把书签存放在 Linkwarden 实例中,并希望助手回答关于书签的问题或帮忙清理未整理收件箱的人。默认只读,也适合先只做查询、之后再决定是否开启写入的谨慎用户。
- 运行要求
- 本机需有 Python 运行环境与 uv/uvx(Python 3.10 及以上),以及可访问的 Linkwarden 实例。需设置 LINKWARDEN_API_URL 为实例基础地址,LINKWARDEN_API_KEY 为在 Linkwarden 设置中创建的访问令牌。可选的 LINKWARDEN_MCP_WRITE_SCOPES 与 LINKWARDEN_MCP_DELETE_SCOPES 决定注册哪些写入/删除工具。仅支持 stdio 传输。
安装
在 SourceWeft 中
- 打开 控制台中的 Linkwarden MCP,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
linkwarden-mcp
MCP server for self-hosted Linkwarden: ask your AI about bookmarks, collections, and tags.
[License: MIT] [Python] [MCP] [CI] [PyPI]
What is Linkwarden?
Linkwarden is a self-hosted, open-source bookmark manager. You collect, organize, annotate, and preserve webpages in one place, with full-page archives so content stays readable after the original page disappears. It also supports collaboration and public sharing.
This project wires the Linkwarden HTTP API into the Model Context Protocol so Cursor, Claude, VS Code Copilot, and other MCP hosts can query your live library in natural language.
Useful Linkwarden links:
What this server does
Default is read-only. You get:
- 18 read tools - discovery (
list_resources), six core reads (search, get, preserved content, collections, tags, overview), and eleven triage/hygiene workflows - Task tools (opt-in) - intent-shaped writes such as
save_link,smart_save_link,organise_links,create_collection,apply_triage_plan(register when matching write scopes are set) - Delete tools (opt-in) -
delete_links,delete_tags,merge_tags,delete_collection(register only under delete scopes; never implied by write) - Hard denylist - tokens, session, auth, user admin (except
GET /api/v1/users/me), migration, and whole-instance preservation stay blocked even when writes are on
Transport is stdio. No HTTP server. No global install required if you use uv / uvx.
Branding / icons
Four surfaces (keep them in sync when the mark changes):
- stdio hosts (Cursor, Claude Desktop via
mcp.json):serverInfo.iconsfromserver_icons()— embedded data URI fromsrc/linkwarden_mcp/assets/icon.png, plus HTTPS fallbackdocs/icon-512.png(https://raw.githubusercontent.com/flumpiey/linkwarden-mcp/main/docs/icon-512.png).website_urlishttps://linkwarden.app/. - Cursor plugin:
.cursor-plugin/plugin.jsonlogo→docs/linkwarden-icon.svg. - Claude Desktop Extension:
mcpb/icon.png(packed withnpx @anthropic-ai/mcpb pack mcpb). - Claude.ai remote connectors: Claude.ai ignores
serverInfo.iconsand uses the root-domain favicon of the connector URL. If you host a remote MCP later, servedocs/favicon.icoat the registrable domain root (e.g.https://acme.com/favicon.icoforhttps://mcp.acme.com/...).
server.json registry metadata also points its icons[0].src at the same raw docs/icon-512.png URL.
Requirements
- Python ≥ 3.10 (pulled in automatically by
uvx) - uv (provides
uvx) - A reachable Linkwarden instance:
LINKWARDEN_API_URL+LINKWARDEN_API_KEY
Access token
- Sign in to your Linkwarden instance (self-hosted or Cloud).
- Open Settings → Access Tokens (or go to
/settings/access-tokens). - Create a New Access Token, give it a name, and copy the value into
LINKWARDEN_API_KEY. - Set
LINKWARDEN_API_URLto your instance base URL (usually without/api/v1; include/api/v1only if your deployment requires it), e.g.https://links.example.comor local Dockerhttp://127.0.0.1:3000.
linkwarden-mcp sends the token as Authorization: Bearer …. API overview: API Introduction.
Copy .env.example to .env for local runs — never commit .env. Prefer the Cursor plugin Configure UI for credentials, or a secret manager in production.
Quick start
Run the PyPI package with uvx:
Paste a client config below, set LINKWARDEN_API_URL / LINKWARDEN_API_KEY, restart the host, then ask: “Find my unread bookmarks about Python” or “What's in my Dev collection?”
From a git clone (dev): uvx --from git+https://github.com/flumpiey/linkwarden-mcp linkwarden-mcp or uv run --directory /path/to/linkwarden-mcp linkwarden-mcp.
Installation
Configs below pull linkwarden-mcp from PyPI. Leave write-scope env vars unset for read-only.
Cursor
Plugin (Configure UI for URL, key, and scopes): this repo is a Cursor plugin via .cursor-plugin/plugin.json + root mcp.json.
- Symlink or copy the clone to
~/.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 does not follow symlinks for local plugins. Use a junction or copy instead: or:
- macOS / Linux:
- Reload the window.
- Open Plugins → Configure on
linkwarden-mcp. Set Linkwarden API URL and Linkwarden API key. Leave Write scopes / Delete scopes empty for read-only, or paste a CSV such aslinks,collections. - Confirm the
linkwardenMCP server is enabled under Customize / MCP.
Marketplace listing is a separate submit at cursor.com/marketplace/publish.
Manual mcp.json: project .cursor/mcp.json or user-wide ~/.cursor/mcp.json. Root mcp.json is plugin wiring with ${…} placeholders only — never commit real secrets there.
From PyPI:
Local editable (dev):
Optional scoped writes in the env block:
Restart Cursor after saving. Confirm linkwarden under MCP settings.
Claude Desktop
Desktop Extension (.mcpb): download mcpb.mcpb from GitHub Releases. Use v0.1.5+ (needs uv on PATH). Launch is uv tool run --python 3.12 linkwarden-mcp. Do not put the PyPI package in mcpb/pyproject.toml dependencies — Claude Desktop syncs that file at install and can fail on system Python 3.13.
- Open Claude Desktop → Settings → Extensions.
- Open Advanced settings → Install Extension…
- Select
mcpb.mcpb. Review permissions, enter Linkwarden API URL and Linkwarden API key, then click Install. - Leave Write scopes and Delete scopes empty for read-only.
- Restart Claude Desktop if tools do not appear.
Build your own bundle from a clone:
On Windows, double-click often does nothing and dragging the file into chat attaches it to the conversation instead of installing it. Use Install Extension… in Settings.
Manual claude_desktop_config.json fallback: edit the Claude Desktop config, then restart the app.
Local clone:
Claude Code
Add via CLI:
Or edit ~/.claude.json / project MCP config:
VS Code / GitHub Copilot
Create .vscode/mcp.json in the project root:
Local editable:
Reload the window. Open Copilot Chat and confirm the linkwarden tools are available.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or the Windsurf MCP settings UI:
Restart Windsurf after saving.
Zed
Add under context_servers in Zed settings.json (Agent Panel → settings also works):
Cline
Edit the Cline MCP settings file (cline_mcp_settings.json via the Cline MCP UI):
Continue
In .continue/config.yaml:
Generic / any stdio MCP host
Any host that can spawn a stdio MCP server:
Dev from a clone: uv run --directory /path/to/linkwarden-mcp linkwarden-mcp.
npx only runs npm packages. This is a Python package; use uvx.
Environment
Valid scopes: links, collections, tags, raw. No wildcards (*, all). raw expands effective scopes to all domain scopes (escape hatch).
Recommended (covers most bookmark workflows without every mutating tool):
Default with no scopes: 18 tools. All three domain scopes in WRITE and DELETE: 31 tools.
Legacy LINKWARDEN_MCP_ALLOW_WRITES / ALLOW_WRITES / LINKWARDEN_MCP_WRITES hard-fail if set. Use the scoped vars instead.
MCP host env (.cursor/mcp.json or Cursor plugin Configure) must match process env / .env or scope behavior drifts.
See .env.example. Never commit .env. Prefer Cursor plugin Configure UI or a secret manager in production.
Write scopes and task tools
When a scope is listed in LINKWARDEN_MCP_WRITE_SCOPES, the server registers task tools for that domain. LINKWARDEN_MCP_DELETE_SCOPES enables delete/merge tools per domain. Call list_resources to inspect read_only, scope lists, and the live boundary string.
Example with recommended scopes only:
Denylist (always blocked): /api/v1/tokens, /api/v1/session, /api/v1/auth, /api/v1/users/** (except GET /api/v1/users/me), migration, and whole-instance preservation worker actions.
Tools
Read tools
Always registered (18 total).
Write tools
Registered only when matching scopes are set (see table above). Prefer smart_save_link / triage tools over raw field edits when you are sorting an inbox.
Agent Skill
Companion skill: skills/linkwarden-bookmarks/SKILL.md.
The Cursor plugin discovers this skill from skills/. Without the plugin, copy or symlink that folder into your agent skills path. It tells the model to call list_resources first, verify after writes, and which workflow tools to prefer.
Development
Offline tests only (respx). No live Linkwarden required:
Git hooks (lefthook)
Commit messages must follow Conventional Commits, e.g. feat(api): add delete_links tool.
Run the local publish gate before tagging a release:
GitHub Actions matrix: Python 3.10 and 3.12.
Caveats
- One process ↔ one
LINKWARDEN_API_URL. Multi-instance routing is out of scope. - Multi-user / team disambiguation on a shared instance is unverified. Do not claim multi-tenant support until validated against a live shared library.
- Collection/tag suggestions are heuristic and library-local; they do not invent new tag names.
- Bulk mutating workflows default to
dry_run=true; setdry_run=falseonly after you review the plan. - ChatGPT Apps need a hosted HTTP MCP endpoint. This package is stdio-only.
License
MIT. See LICENSE.
来源:README.md,提交 e389df4
工具
0版本历史
1- v0.1.6最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分