linkwarden-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@linkwarden-mcplist my collections"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
linkwarden-mcp
An MCP server that wraps the
Linkwarden bookmark API in a small set of token-frugal
tools. Tool responses are compact plain text (#id name :: url) so listing
collections or links costs as few tokens as possible.
Tools
Tool | What it does |
| List collections as |
| List links as |
| Check if a URL already exists (tracking params stripped first). |
| Add a link: strips tracking params, skips duplicates, then moves it into a collection. |
| Move an existing link to another collection. |
| Delete a link by id. |
| Create a new collection. |
Behaviour baked in from experience
Tracking params are stripped on add (
utm_*,fbclid,gclid,gbraid,gad_source,gad_campaignid,rcm, …); meaningful params likevariantandmodelare kept.Two-step create. Linkwarden ignores
collectionIdon link creation, soadd_linkPOSTs the link then PUTs it into the target collection.Correct PUT shape. Updates always send
id,url,collection.{id,ownerId}andtags, which the API requires.Full-list dedup. Linkwarden caps page size at ~50, so dedup walks every page via cursor pagination rather than trusting a single
limit.
Related MCP server: shiori-mcp
Configuration
Configuration comes from environment variables — no secret is ever hardcoded:
Variable | Required | Default | Notes |
| no |
| Base URL, no |
| yes | — | API token (Settings → Access Tokens). Secret. |
| no |
| Owner id used when moving links. |
How the token is stored: in production it is supplied by the MCP host via the
server config's env block (see below) — it is not read from disk. For local
development you may instead copy .env.example to .env and fill in the token;
.env is git-ignored and loaded automatically. Host-provided env vars take
precedence over .env.
Run
uv sync
uv run linkwarden-mcp # serves over stdioRegister with an MCP host
Claude Code:
claude mcp add linkwarden -e LINKWARDEN_URL=http://links.lan -e LINKWARDEN_TOKEN=your-token -- uv --directory C:/Users/olive/Github/linkwarden-mcp run linkwarden-mcpOr Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"linkwarden": {
"command": "uv",
"args": ["--directory", "C:/Users/olive/Github/linkwarden-mcp", "run", "linkwarden-mcp"],
"env": {
"LINKWARDEN_URL": "http://links.lan",
"LINKWARDEN_TOKEN": "your-token"
}
}
}
}Development
uv run ruff check . # lint
uv run ruff format . # format
uv run ty check # type checkMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/o-gent/linkwarden-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server