This is a MCP server for connecting your AI code editor to your nextcloud deck kanban board. This was built with Cursor in mind but it could probably be adapted to work with other AI code editors as well
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"nextcloud-deck-mcp-server": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
A Model Context Protocol (MCP) server that connects Cursor to a Nextcloud Deck kanban board. Cursor agents can list, create, update, move, archive, and delete tasks on your board.
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in productivity
MCP Security Weekly
Get CVE alerts and security updates for Nextcloud Deck Mcp Server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
A Model Context Protocol (MCP) server that connects Cursor to a Nextcloud Deck kanban board. Cursor agents can list, create, update, move, archive, and delete tasks on your board.
Deck does not have a separate “status” field on cards. A card’s status is the column (stack) it lives in. This server maps your column titles to canonical statuses (backlog, todo, blocked, planned, in_progress, review, done) so the agent can work with familiar status names.
deck-mcp binary)NEXTCLOUD_TOKENEach Deck column is a stack. The MCP server resolves canonical statuses from column titles.
A simple workflow works well:
| Column title (examples) | Canonical status |
|---|---|
| Backlog, Icebox, Ideas | backlog |
| Todo, To Do, Open | todo |
| Blocked, Waiting, On Hold | blocked |
| Planned, Ready to Implement | planned |
| In Progress, Doing, WIP | in_progress |
| Review, In Review, QA, Testing | review |
| Done, Complete, Closed | done |
Matching is case-insensitive and ignores extra spaces, hyphens, and underscores (To-Do = todo).
You do not need exactly these titles — the defaults cover common variants. If your board uses unusual names, set DECK_STATUS_ALIASES (see below).
Override or extend aliases with JSON in DECK_STATUS_ALIASES:
{
"done": ["Shipped", "Released"],
"in_progress": ["Building"]
}
Keys are canonical statuses; values are column titles on your board.
Columns that do not match any status appear as unmapped in listings. Tools that move or create tasks by status require a column that maps to the requested status.
/apps/deck/board/42 → board ID 42GET {NEXTCLOUD_URL}/index.php/apps/deck/api/v1.0/boards (with auth) and read the id field| Variable | Required | Description |
|---|---|---|
NEXTCLOUD_URL | yes | Server base URL, e.g. https://cloud.example.com |
NEXTCLOUD_USERNAME | yes | Nextcloud username |
NEXTCLOUD_TOKEN | yes | App password / token |
DECK_BOARD_ID | yes | Numeric board ID |
DECK_STATUS_ALIASES | no | JSON map of status → column title aliases |
git clone https://github.com/vatlnetwork/nextcloud-deck-mcp-server.git
cd nextcloud-deck-mcp-server
make build
# binary: ./deck-mcp
Or:
go build -o deck-mcp ./cmd/deck-mcp
Edit ~/.cursor/mcp.json (create if missing):
{
"mcpServers": {
"nextcloud-deck": {
"command": "/absolute/path/to/deck-mcp",
"env": {
"NEXTCLOUD_URL": "https://cloud.example.com",
"NEXTCLOUD_USERNAME": "your-user",
"NEXTCLOUD_TOKEN": "your-app-password",
"DECK_BOARD_ID": "42"
}
}
}
}
Use the full path to the deck-mcp binary. Restart Cursor or reload MCP servers after changes.
Do not commit credentials. Keep tokens only in mcp.json or your environment.
| Tool | Description |
|---|---|
deck_list_columns | List columns with stackId, title, and resolved status |