Expose Wekan API to LLMs via a MCP server tool.
  • JavaScript 53.9%
  • TypeScript 36.4%
  • Shell 6%
  • PowerShell 3.7%
Find a file
2026-06-29 09:02:18 -06:00
docs fix: extrair lógica de acumulação de tokens em lib testável 2026-02-24 12:12:29 -03:00
src Fix moveCard: ignore 500 errors and return success (Wekan API quirk) 2026-06-29 07:14:14 -06:00
.env.example Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
.gitignore Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
accumulate-tokens-lib.js fix: extrair lógica de acumulação de tokens em lib testável 2026-02-24 12:12:29 -03:00
accumulate-tokens-lib.test.js fix: extrair lógica de acumulação de tokens em lib testável 2026-02-24 12:12:29 -03:00
accumulate-tokens.js fix: extrair lógica de acumulação de tokens em lib testável 2026-02-24 12:12:29 -03:00
check-merged-prs-lib.js fix: verificar assignees antes de mover card ao concluir merge 2026-02-23 08:21:40 -03:00
check-merged-prs-lib.test.js fix: verificar assignees antes de mover card ao concluir merge 2026-02-23 08:21:40 -03:00
check-merged-prs.js fix: verificar assignees antes de mover card ao concluir merge 2026-02-23 08:21:40 -03:00
demo1.gif Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
get-card-info.js feat: add uuid to pending cards metadata and create get-card-info script 2026-02-18 17:13:21 -03:00
get-pending-cards-json.js feat: add uuid to pending cards metadata and create get-card-info script 2026-02-18 17:13:21 -03:00
get-wekan-token.ps1 Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
get-wekan-token.sh feat: add board, list, card, and label management tools (v0.2.0) 2026-03-28 02:11:43 -06:00
has-pending-cards.js feat: add has-pending-cards.js script for token optimization 2026-01-30 17:59:44 -03:00
install.sh fix: correct Wekan API endpoints and improve setup experience 2025-12-29 20:09:30 -03:00
mcp-inspector-config.json caching what we have before deeper investigation 2026-06-29 07:02:51 -06:00
package-lock.json fix: verificar assignees antes de mover card ao concluir merge 2026-02-23 08:21:40 -03:00
package.json fix: verificar assignees antes de mover card ao concluir merge 2026-02-23 08:21:40 -03:00
README.md Add comprehensive MCP tools reference to README 2026-06-29 09:02:18 -06:00
start.sh fix: correct Wekan API endpoints and improve setup experience 2025-12-29 20:09:30 -03:00
test-all-methods.js Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
test-auth.js Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
test-server.js Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
tsconfig.json Initial commit with ❤️ from GOAIX! 2025-11-01 01:31:40 +01:00
vitest.config.mts fix: extrair lógica de acumulação de tokens em lib testável 2026-02-24 12:12:29 -03:00

Wekan MCP Server

made by namar0x0309 with ❤️ at GoAIX

Demo

This project includes scripts to automatically generate Wekan API tokens and configure your environment.

Getting Started

Installation

Install dependencies and build the project:

npm install
npm run build

Generate Wekan API Token

Run the appropriate script for your platform to generate your API token:

Windows (PowerShell):

./get-wekan-token.ps1

Linux/macOS (Bash):

./get-wekan-token.sh

The script will prompt you for:

After successful authentication, it will:

  1. Generate an API token
  2. Create or update the .env file with your token and configuration

Manual Configuration

If you prefer to configure manually, copy .env.example to .env and fill in your details:

cp .env.example .env

Then edit the .env file with your Wekan instance details and API token.

Environment Variables

The .env file contains:

  • WEKAN_BASE_URL: Your Wekan instance URL
  • WEKAN_API_TOKEN: Generated API token for authentication
  • WEKAN_USER_ID: Your Wekan user ID
  • WEKAN_TOKEN_EXPIRES: Token expiration date

Claude Code Configuration

To use this MCP server with Claude Code, you can configure it via CLI or config file.

Via CLI

claude mcp add --transport stdio wekan \
  --env WEKAN_BASE_URL="https://wekan.uan.com.br" \
  --env WEKAN_API_TOKEN="your-token" \
  --env WEKAN_USER_ID="your-user-id" \
  -- node /path/to/wekan-mcp/dist/server.js

Via config file

Add to your ~/.claude.json or .mcp.json in the project root:

{
  "mcpServers": {
    "wekan": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/wekan-mcp/dist/server.js"],
      "env": {
        "WEKAN_BASE_URL": "https://wekan.uan.com.br",
        "WEKAN_API_TOKEN": "your-token",
        "WEKAN_USER_ID": "your-user-id"
      }
    }
  }
}

Replace /path/to/wekan-mcp with the actual path where you cloned this repository.

Verify configuration

claude mcp list

Testing

You can test your configuration by running:

node test-auth.js

This will verify that your API token is working correctly.

Development

MCP Inspector

For development and debugging the MCP server, you can use the MCP Inspector:

npm run inspect

This will launch the MCP Inspector with the configuration from mcp-inspector-config.json.

For development with automatic rebuilding:

npm run inspect:watch

This will build the project and launch the inspector, automatically rebuilding when changes are detected.

Deployment on FYN Web3

This instance runs on fyn-web3 with SSH key authentication.

SSH Setup

# Generate SSH key (if not exists)
ssh-keygen -t ed25519 -f ~/.ssh/fynadmin_key -C "fynadmin@fyn-web3" -N ""

# Deploy key to fyn-web3
python3 /path/to/deploy_key.py  # Or manually copy to ~/.ssh/authorized_keys

Git Credentials

Git credentials are stored in ~/.git-credentials for the fynadmin user.

Wekan MCP Configuration

The .env file at /home/fynadmin@ad.mesh.onl/services/wekan/wekan-mcp/.env contains:

Service Management

The MCP server runs via mcpo:

# Check status
ps aux | grep wekan-mcp

# Restart (from wekan-mcp directory)
npm run build
pkill -f "dist/server.js"
nohup /usr/local/bin/node dist/server.js > /tmp/wekan-mcp.log 2>&1 &

Known Issues

  • moveCard 500 Error: Wekan API sometimes returns 500 errors on card moves even when successful. The MCP server now ignores these errors and returns success immediately.

Available MCP Tools

This server exposes the following tools for Wekan integration:

Boards

Tool Description
listBoards List all boards the authenticated user is a member of. Returns board IDs and titles.
createBoard Create a new board with title, owner, permission (private/public), and color.

Lists & Swimlanes

Tool Description
listLists List all lists (columns) in a board. Returns list IDs and titles.
createList Create a new list in a board.
renameList Rename an existing list.
archiveList Archive a list (soft-delete). List and its cards are not permanently removed.
listSwimlanes List swimlanes in a board.

Cards

Tool Description
listCards List all cards in a specific list. Returns card IDs, titles, and descriptions.
getCard Get full details of a single card including description, labels, due date, members, etc.
createCard Create a card with title, description, due date, members, labels, and swimlane.
archiveCard Archive a card (soft-delete). Card is not permanently removed.
replaceCardDescription Replace a card description. Previous description is saved as a comment.
appendCardDescription Append text to a card existing description.
moveCard Move a card to a different list and/or swimlane.

Comments

Tool Description
listCardComments List all comments on a card.
commentCard Add a comment to a card.

Attachments

Tool Description
getCardAttachments List all attachments on a card. Returns IDs, filenames, MIME types, and download URLs.
getAttachment Get metadata for a single attachment by ID, including download URL.

Labels

Tool Description
listLabels List all labels defined on a board.
createLabel Create a new label on a board with name and color.
addLabelToCard Add a label to a card by label ID.
removeLabelFromCard Remove a label from a card by label ID.

Tool Usage Examples

List all boards

{
  "name": "listBoards",
  "arguments": {}
}

Create a card

{
  "name": "createCard",
  "arguments": {
    "boardId": "board123",
    "listId": "list456",
    "title": "My Task",
    "description": "Task details here",
    "due": "2026-12-31T23:59:59Z"
  }
}

Move a card to another list

{
  "name": "moveCard",
  "arguments": {
    "boardId": "board123",
    "currentListId": "list456",
    "cardId": "card789",
    "newListId": "list999"
  }
}

Add a label to a card

{
  "name": "addLabelToCard",
  "arguments": {
    "boardId": "board123",
    "listId": "list456",
    "cardId": "card789",
    "labelId": "label111"
  }
}