Read-first Linkwarden bookmarks MCP with opt-in write, delete, and collection tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Linkwarden MCP.
list_resourcesDiscovery; reports `read_only` + live write/delete scopes
search_linksSearch by query, collection, tag, or pin status
get_linkFull metadata for one link
read_link_contentPreserved plain text (`textContent` or archive fallback)
list_collectionsCollections with link counts
list_tagsTags with link counts
MCP server for self-hosted Linkwarden: ask your AI about bookmarks, collections, and tags.
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:
Default is read-only. You get:
list_resources), six core reads (search, get, preserved content, collections, tags, overview), and eleven triage/hygiene workflowssave_link, smart_save_link, organise_links, create_collection, apply_triage_plan (register when matching write scopes are set)delete_links, delete_tags, merge_tags, delete_collection (register only under delete scopes; never implied by write)GET /api/v1/users/me), migration, and whole-instance preservation stay blocked even when writes are onTransport is stdio. No HTTP server. No global install required if you use uv / uvx.
Four surfaces (keep them in sync when the mark changes):
mcp.json): serverInfo.icons from server_icons() β embedded data URI from src/linkwarden_mcp/assets/icon.png, plus HTTPS fallback docs/icon-512.png (https://raw.githubusercontent.com/flumpiey/linkwarden-mcp/main/docs/icon-512.png). website_url is https://linkwarden.app/..cursor-plugin/plugin.json logo β docs/linkwarden-icon.svg.mcpb/icon.png (packed with npx @anthropic-ai/mcpb pack mcpb).serverInfo.icons and uses the root-domain favicon of the connector URL. If you host a remote MCP later, serve docs/favicon.ico at the registrable domain root (e.g. https://acme.com/favicon.ico for https://mcp.acme.com/...).server.json registry metadata also points its icons[0].src at the same raw docs/icon-512.png URL.
uvx)uvx)LINKWARDEN_API_URL + LINKWARDEN_API_KEY/settings/access-tokens).LINKWARDEN_API_KEY.LINKWARDEN_API_URL to your instance base URL (usually without /api/v1; include /api/v1 only if your deployment requires it), e.g. https://links.example.com or local Docker http://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.
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.
Configs below pull linkwarden-mcp from PyPI. Leave write-scope env vars unset for read-only.
Plugin (Configure UI for URL, key, and scopes): this repo is a Cursor plugin via .cursor-plugin/plugin.json + root mcp.json.
~/.cursor/plugins/local/linkwarden-mcp (Windows: %USERPROFILE%\.cursor\plugins\local\linkwarden-mcp).
ln -s /path/to/linkwarden-mcp ~/.cursor/plugins/local/linkwarden-mcplinkwarden-mcp. Set Linkwarden API URL and Linkwarden API key. Leave Write scopes / Delete scopes empty for read-only, or paste a CSV such as links,collections.linkwarden MCP 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.
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.
mcpb.mcpb. Review permissions, enter Linkwarden API URL and Linkwarden API key, then click Install.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.
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
Local clone:
Add via CLI:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/linkwarden-mcp)<a href="https://allmcps.com/mcp/linkwarden-mcp"><img src="https://allmcps.com/api/badge/linkwarden-mcp?style=directory" alt="Linkwarden MCP on AllMCPs" /></a>