Skip to main content

Altiplano

Altiplano

A small, dependable MCP server for Vikunja. Named after the Andean altiplano, the high plateau that is the Vicuña's native habitat.

Filtering and sorting are passed straight to the Vikunja API (server-side), so there is no client-side filtering engine and no paginate-then-filter pitfall.

Tools

Projects:

  • list_projects (includes parent_project_id, shows sub-project nesting)
  • create_project (title, parent_project_id?, description?) — pass parent_project_id for a sub-project

Tasks:

  • list_tasks (project_id, filter, sort_by, page, per_page)
  • get_task (task_id)
  • create_task (project_id, title, description?, priority?, due_date?, start_date?, end_date?)
  • update_task (task_id, title?, description?, done?, priority?, start_date?, end_date?)
  • set_reminders (task_id, reminders) — replaces the task's reminders with the given ISO 8601 datetimes; empty list clears

Labels:

  • list_labels
  • add_label (task_id, label_id)
  • remove_label (task_id, label_id)

Comments:

  • list_comments (task_id)
  • add_comment (task_id, comment)

Assignees:

  • search_users (query) — find a user_id to assign
  • list_assignees (task_id)
  • add_assignee (task_id, user_id)
  • remove_assignee (task_id, user_id)

Credentials (no secrets in mcp.json)

The server resolves two values, in order:

  1. Environment variables VIKUNJA_URL and VIKUNJA_API_TOKEN.
  2. A per-device file of KEY=VALUE lines, default ~/.config/altiplano/env (override the path with ALTIPLANO_CONFIG).

VIKUNJA_URL is the base API URL including /api/v1 (e.g. https://todo.example.com/api/v1).

Recommended so the your mcp.json carries no secrets:

  • Drop a per-device file and lock it down:
    mkdir -p ~/.config/altiplano
    printf 'VIKUNJA_URL=https://todo.example.com/api/v1\nVIKUNJA_API_TOKEN=tk_xxx\n' > ~/.config/altiplano/env
    chmod 600 ~/.config/altiplano/env
    
  • Or inject via the launcher's environment (e.g. a systemd unit EnvironmentFile= pointing at a chmod 600 file), which the server inherits.
  • For stronger setups, source the token from a secret manager/keychain at launch and export it into the environment.

Then mcp.json only needs the command, no env block, no plain-text secrets:

{
  "altiplano": {
    "command": "uvx",
    "args": ["altiplano"]
  }
}

Run

uv run altiplano                        # dev, from this directory
uvx --from /your/local/path altiplano   # local path
uvx altiplano                           # from PyPI

Notes

  • Vikunja priority scale: 0 Unset, 1 Low, 2 Medium, 3 High, 4 Urgent, 5 DO NOW.
  • Dates are ISO 8601 datetimes. start_date/end_date mark the window you plan to work on a task (start work / finish work); due_date is the deadline.
  • The UI shows tasks by their project-local identifier (e.g. #50), which is not the global id the API uses.
  • Endpoint shapes (create via PUT /projects/{id}/tasks, update via POST /tasks/{id}) follow current Vikunja; adjust if your instance differs.

Licence

MIT.

Support

RTFM, then RTFC... If you are still stuck or just need an additional feature, file an issue.

✌🏼

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

altiplano-0.4.0.tar.gz (932.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

altiplano-0.4.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file altiplano-0.4.0.tar.gz.

File metadata

  • Download URL: altiplano-0.4.0.tar.gz
  • Upload date:
  • Size: 932.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for altiplano-0.4.0.tar.gz
Algorithm Hash digest
SHA256 3d0dabea679c73536268eaa9a8327a7e43d236662c7054e1d7d9f3a62fe560da
MD5 f25094d2a726fe3130e382da863c0fb5
BLAKE2b-256 d02013144ff7f12252bd370394fcf0fbe7e1fa0b85c76c837248054a1ee1f85d

See more details on using hashes here.

File details

Details for the file altiplano-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: altiplano-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for altiplano-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ed7580ae5726d7cc13080218cebd4548bc524110a311986259358b1a4507651
MD5 410e71bf447df54162bb9cfc62aff022
BLAKE2b-256 5805c4bb0599b529a1f2aaf1b6db2dfd56da6f213109460f9174aac77e1b53af

See more details on using hashes here.

Release history Release notifications | RSS feed

2.0.1

2 files

2.0.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.14.1

2 files

0.10.0

2 files

0.8.6

2 files

0.8.5

2 files

0.8.1

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page