A Model Context Protocol (MCP) server for Vikunja task management integration with support for both stdio and HTTP transports.
This project provides an MCP server that allows LLMs and AI assistants to interact with Vikunja task management through standardized tool calls. It supports both local CLI usage (stdio) and remote web deployment (HTTP).
- π List tasks from Vikunja projects and views
- π Get detailed task information including bucket placement
- π¦ List project buckets and organize tasks
- ποΈ List all available projects
- π Multiple transport modes: stdio (CLI) and HTTP (web)
- π§ Configurable HTTP server with session management
- β Built with the official MCP Go SDK
go get github.com/meschbach/mcp-vikunjago build -o bin/mcp-vikunja ./cmd/mcp-vikunjaexport VIKUNJA_HOST="https://your-vikunja-instance.com"
export VIKUNJA_TOKEN="your-api-token"The MCP server now uses explicit subcommands for different transport modes:
Option A: Stdio Transport (for local CLI tools)
# Default Markdown output (recommended for AI/LLMs)
./bin/mcp-vikunja stdio
# JSON output (for legacy compatibility)
./bin/mcp-vikunja stdio --output-format json
# Both formats together
./bin/mcp-vikunja stdio -o both
# Environment variable setting
VIKUNJA_OUTPUT_FORMAT=json ./bin/mcp-vikunja stdioOption B: HTTP Transport (for web applications and remote access)
# Default Markdown output (recommended for AI/LLMs)
./bin/mcp-vikunja server
# JSON output (for legacy compatibility)
./bin/mcp-vikunja server --output-format jsonOption C: Show Help
./bin/mcp-vikunja
# Shows available commands and usage examples- Best for: Local CLI tools, development environments
- Usage:
./bin/mcp-vikunja stdio - Features: Communicates over standard I/O
- Example:
VIKUNJA_HOST=https://example.com VIKUNJA_TOKEN=token ./bin/mcp-vikunja stdio
- Best for: Web applications, remote access, multiple clients
- Usage:
./bin/mcp-vikunja server - Features: Session management, concurrent connections, streamable HTTP
- Example:
VIKUNJA_HOST=https://example.com VIKUNJA_TOKEN=token ./bin/mcp-vikunja server --http-port 9000
The MCP server provides a rich command-line interface:
mcp-vikunja server- Start HTTP + Streamable transport servermcp-vikunja stdio- Start stdio transport server
mcp-vikunja config show- Display current configurationmcp-vikunja config validate- Validate configuration and test connectivity
mcp-vikunja health- Test Vikunja connectionmcp-vikunja version- Show version and build informationmcp-vikunja help- Show comprehensive help
# Start HTTP server with custom settings
./bin/mcp-vikunja server --http-host 0.0.0.0 --http-port 9000 --stateless
# Start stdio server with verbose logging
./bin/mcp-vikunja stdio --verbose --vikunja-host https://example.com
# Show current configuration
./bin/mcp-vikunja config show --format json
# Validate configuration
./bin/mcp-vikunja config validate
# Test Vikunja connectivity
./bin/mcp-vikunja health --vikunja-host https://example.com --vikunja-token tokenVIKUNJA_HOST- Your Vikunja instance URLVIKUNJA_TOKEN- Your Vikunja API token
| Variable/Flag | Default | Description |
|---|---|---|
VIKUNJA_OUTPUT_FORMAT |
markdown |
Output format: json, markdown, both |
--output-format / -o |
markdown |
CLI flag that overrides VIKUNJA_OUTPUT_FORMAT |
Output Format Precedence: CLI flag > Environment variable > Default (markdown)
Output Format Options:
json- Original JSON output (for legacy compatibility)markdown- Human-readable Markdown output with tables and formatting (recommended for AI/LLMs)both- Combined JSON and Markdown output
| Variable | Default | Description |
|---|---|---|
MCP_TRANSPORT |
stdio |
Transport type: stdio or http |
MCP_HTTP_HOST |
localhost |
Server bind address |
MCP_HTTP_PORT |
8080 |
Server port |
MCP_HTTP_SESSION_TIMEOUT |
30m |
Session timeout |
MCP_HTTP_STATELESS |
false |
Disable session tracking |
The server provides the following MCP tools:
list_tasks- List tasks from projects with filtering optionsget_task- Get detailed task information including bucket placementlist_buckets- List all buckets in a project view (defaults to Inbox project and Kanban view)list_projects- List all available projectscreate_task- Create new tasks (coming soon)
# Start server with HTTP transport
VIKUNJA_HOST=https://example.com VIKUNJA_TOKEN=your-token ./bin/mcp-vikunja server &
# Test the server
curl -X POST http://localhost:8080 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o mcp-vikunja ./cmd/mcp-vikunja
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/mcp-vikunja .
CMD ["./mcp-vikunja"]# Build and run with Docker
docker build -t mcp-vikunja .
docker run -p 8080:8080 \
-e VIKUNJA_HOST=https://your-vikunja.com \
-e VIKUNJA_TOKEN=your-token \
mcp-vikunja server --http-host 0.0.0.0See AGENTS.md for coding guidelines and commands.
# Run all tests
go test ./...
# Run integration tests (requires Vikunja instance)
go test -tags=integration ./test/integration/...
# Test both transport modes
./scripts/test-transports.sh- Transport Configuration Guide - Detailed transport setup and deployment options
- AGENTS.md - Development guidelines and project standards
MIT