Altiplano
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VIKUNJA_URL | No | The URL of the Vikunja API. Must end in /api/v1 or /api/v2 (e.g., https://todo.example.com/api/v2). | |
| ALTIPLANO_CONFIG | No | Path to a file containing KEY=VALUE pairs (defaulting to ~/.config/altiplano/env) with VIKUNJA_URL and VIKUNJA_API_TOKEN. Use absolute paths; ~ is not expanded in custom paths. | |
| VIKUNJA_API_TOKEN | No | The Vikunja API token with scopes covering the tools you intend to call. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_usersA | Search users by name or username. Use this to find a user_id for assignees. |
| list_assigneesC | List the users assigned to a task. |
| add_assigneeC | Assign a user to a task. |
| remove_assigneeB | Unassign a user from a task. |
| list_commentsA | List comments on a task. |
| add_commentC | Add a comment to a task. |
| update_commentA | Replace the text of an existing comment. Get |
| delete_commentB | Delete a comment from a task. Get |
| list_kanban_viewsA | List a project's kanban views, with the bucket ids that give them meaning. Most projects have one. Pass an
|
| list_bucketsA | List the columns of a project's kanban view, in board order. The columns alone, with no tasks in them.
|
| create_bucketA | Add a column to a project's kanban view. It goes on the right-hand end.
|
| update_bucketA | Rename a column, or change how many tasks it accepts.
Neither API version has a partial update for a bucket. This reads the column and
writes it back whole, and a body with only a title resets Position is preserved. To move a column, use the Vikunja web interface: this API exposes no ordering call. |
| delete_bucketA | Delete a column from a project's kanban view. Vikunja moves the tasks it held to the default bucket, leaving them intact. A view keeps at least one column, and the last one cannot be removed. |
| list_boardA | The whole board: a kanban view's columns with the tasks sitting in each.
|
| list_task_placementsC | Where one task sits: the column holding it, one entry per kanban view. A task holds a position in every kanban view of its project. A project with two boards puts the task in two columns. Usually there is one. The |
| move_task_to_bucketA | Move a task into a kanban bucket. Re-sending the same bucket does nothing. This changes more than the column, and
Only meaningful when the view's The project is read from the task. That costs a request and removes an argument that could contradict the task it was given. |
| list_labelsA | List all labels. |
| create_labelA | Create a label, which
|
| update_labelB | Update a label. Only the fields you pass change. Every task with the label sees the change.
v1 has no partial update, and neither does a description change on v2. Both read the label and write it back with your changes merged in, at the cost of one extra request. Everything else on v2 is a single PATCH. |
| delete_labelA | Delete a label everywhere. It comes off every task that has it.
|
| add_labelB | Attach a label to a task. |
| remove_labelB | Remove a label from a task. |
| list_projectsA | List all projects (boards). Vikunja leaves archived projects out of this endpoint. |
| create_projectA | Create a project. Pass |
| update_projectA | Update a project. Only the fields you pass change.
v1 has no partial update, and neither does a description change on v2. Both read the project and write it back with your changes merged in, at the cost of one extra request. Everything else on v2 is a single PATCH. |
| delete_projectA | Delete a project, everything in it, and every project under it. This cascades. Deleting a parent takes its sub-projects, every task in all of them, and each task's comments, labels, and assignees. Checked against Vikunja 2.5.0 with a parent, one sub-project, and a task: all three ids read 404 afterwards. Vikunja soft-deletes and documents a 30 day retention window, while exposing no
endpoint to list or restore anything deleted. Through this API the call is
permanent. Confirm the id with To put a project out of the way and keep it, call |
| add_relationA | Relate one task to another. Defaults to a plain, symmetric Kinds: subtask, parenttask, related, duplicateof, duplicates, blocking, blocked, precedes, follows, copiedfrom, copiedto.
|
| remove_relationA | Remove a relation between two tasks. The kind has to match the one the relation was created with; see
|
| list_tasksA | List tasks in a project.
|
| search_tasksA | Search tasks across every project you can see.
|
| get_taskB | Get a single task with full detail. On v2 the description is Markdown. |
| create_taskA | Create a task in a project.
|
| bulk_create_tasksA | Create several tasks in one project, in one request. Needs the v2 API. Vikunja creates the batch atomically: if one entry is invalid then none are
created, and the error names the entry that failed. The tasks also keep the
order they were given. A loop of Each entry is an object taking the same fields as Returns a summary per created task, in creation order. Call |
| update_taskA | Update a task. Only the fields you pass change. Use v1 has no partial update. There, this reads the task and writes it back with your changes merged in, at the cost of one extra request. v2 is a single PATCH unless a description is involved.
Two wrinkles in what comes back. On v2 a partial update returns the description
as the stored HTML. v2 does not convert on a PATCH. Call |
| move_taskA | Move a task to another project. Needs write access to the target. Vikunja has no endpoint for this. A task's Labels, assignees, comments, relations, and dates all come along. The
project-local |
| duplicate_taskA | Copy a task, with its labels, assignees, attachments, and reminders. The copy lands in the same project as the original and links back to it with a
Returns the copy, with the |
| bulk_update_tasksA | Set Only the fields you pass are written, on either API version. This endpoint takes the field names separately from the values. That makes it a genuine partial update on v1 too, where updating a single task is a replace. You need write access to every project involved. If it is missing on even one, the whole request is refused and nothing changes. |
| set_remindersA | Replace a task's reminders with the given ISO 8601 datetimes. Empty list clears them. Nothing else about the task changes. On v1 that costs an extra request: its update endpoint is a replace, and the task has to be read and written back whole. On v2 it is a single partial update. |
| delete_taskA | Delete a task. There is no way to undo this through the API. Vikunja soft-deletes, and documents deleted tasks as retained for 30 days before permanent removal, while exposing no endpoint to list or restore them. The row outlives the task and stays unreachable from here. Treat this as irreversible and confirm the id first. Deleting a task also takes its comments, labels, and assignees with it. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| altiplano_guide | How to drive Altiplano's tools: resolving ids, sequencing calls across tools, the calls that cannot be undone, the v1 and v2 differences, and what breaks when deploying `altiplano-http` as a shared service. Load this before making changes through the tools. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/aichholzer/altiplano'
If you have feedback or need assistance with the MCP directory API, please join our Discord server