vikunja-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., "@vikunja-mcplist my open tasks"
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.
vikunja-mcp
An MCP server that exposes tasks in a Vikunja instance as typed tools — list / get / add / update / complete / reopen — for Claude Code, Claude Desktop, or any MCP client. Runs locally over stdio (the client launches it as a subprocess). Write-only — there is no delete tool, by design.
The API token comes only from the session environment (never a config file) and the project is mandatory (a default via env, or passed per-call).
Prerequisites
Installation is manual — there's no installer. You need three things:
uv — the only hard dependency. It provisions a matching Python (
requires-python >=3.11) and installs the deps (mcp,httpx,truststore,markdown) itself, so a system Python/pip is optional. Install it once:winget install astral-sh.uv # Windows (or: irm https://astral.sh/uv/install.ps1 | iex)curl -LsSf https://astral.sh/uv/install.sh | sh # Linux / macOSAn MCP client to register the server with — Claude Code or Claude Desktop.
A Vikunja
service-account API token (scoped minimally: task read/create/update, project-views + view-tasks read, label read/create) plus your instance URL. With a project ID the token needs no 'read all projects' scope. Share the target project with that account.
The first uv sync needs network access (it fetches Python + the packages).
Related MCP server: Tasks MCP Server
Install
cd vikunja-mcp
uv sync # creates the venv, provisions Python if needed, installs deps
uv run pytest # optional: run the client testsConfigure (environment only)
Setting | Env var | Notes |
Instance URL |
| required; the http(s) base URL of your instance |
Default project by ID |
| optional, preferred; no |
Default project by name |
| optional; its name→ID lookup needs 'read all projects' |
Token |
| secret — session env only, see below |
Token — session env only, never persisted. Set it in the shell/session you launch the MCP client from; the server the client spawns inherits it. Do not put it in
.mcp.json. If it's missing,check_connection(and every write) reports the fix and stops.$env:VIKUNJA_API_TOKEN = Read-Host -AsSecureString "Vikunja API token" | ConvertFrom-SecureString -AsPlainText # PowerShell 7+read -rs -p "Vikunja API token: " VIKUNJA_API_TOKEN && export VIKUNJA_API_TOKENA running client captured its environment at launch, so after setting it you must relaunch it.
Default project is optional; a tool's
project_idargument overrides it. If neither is set, the task tools ask you which project to use (prefer the numeric id) and reuse your answer for that session — set a default here to skip the prompt.
Register with an MCP client
Claude Code — either the CLI:
# --env VIKUNJA_PROJECT_ID is optional — omit it and the tools ask you which project per session
claude mcp add vikunja --scope user --env VIKUNJA_URL=https://your-vikunja-host --env VIKUNJA_PROJECT_ID=7 -- uv run --directory /abs/path/to/vikunja-mcp vikunja-mcp…or copy .mcp.json.example to .mcp.json (project scope, committable) and
edit the path/URL/project. The token is deliberately absent from that file — set it in your
shell (above). Then relaunch Claude and run /mcp (or claude mcp list) to confirm vikunja is
connected. For Claude Desktop, add the same mcpServers block to its config.
Verify
Ask Claude to run check_connection — it returns { ready: true, url, project, ... } once a task
read succeeds, or { ready: false, issues: [...] } with the specific cause (token / URL /
project / 401 bad-token / 403 missing-scope). Then "list my open Vikunja tasks".
Tools
Tool | Does |
| readiness probe (token + project reachable, task read verified) |
| open tasks (or all), sorted open→priority→id |
| one task, including its description |
| create (priority 0..5; |
| change only the passed fields; |
| mark done / not done |
Tasks are returned as structured JSON (id, title, done, priority, due, labels). Priority is
0..5: 0=Unset 1=Low 2=Medium 3=High 4=Urgent 5=DO NOW.
This MCP server was built with Claude Code.
This server cannot be installed
Maintenance
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/skrimokst/vikunja-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server