
Research
/Security News
Popular npm Packages in the keyv and Cacheable Namespaces Compromised in Active Supply Chain Attack
Popular npm packages keyv and cacheable compromised.
@nimblework/sk-cli
Advanced tools
SwiftKanban CLI and MCP server — interact with SwiftKanban from the command line or Claude AI
A command-line interface and MCP server for SwiftKanban. Manage boards, cards, and more from your terminal or through Claude AI.
npm install -g @nimblework/sk-cli
Or from source:
git clone <repo-url> sk-cli
cd sk-cli
npm install && npm run build
npm link
The easiest way to get started is to log in with your SwiftKanban credentials:
sk login --user you@example.com --password yourpassword
This authenticates against the SwiftKanban API and stores the JWT token in your config file. Your account must have the Integration User role — contact your SwiftKanban admin if login fails with a permissions error.
You can also store credentials in config so sk login works without flags:
sk config set user you@example.com
sk config set password yourpassword
sk login
If you already have a JWT token:
sk config set token eyJhbGciOiJIUz...
The default server is https://login.swiftkanban.com. To use a different instance:
sk config set server https://your-instance.swiftkanban.com
export SK_SERVER=https://your-instance.swiftkanban.com
export SK_TOKEN=eyJhbGciOiJIUz...
export SK_BOARD_ID=BOARD-123 # optional default board
export SK_USER=you@example.com
export SK_PASSWORD=yourpassword
sk --server https://your-instance.swiftkanban.com --token eyJ... boards list
CLI flags > Environment variables > Config file (~/.config/sk-cli/config.json)
sk config show
# Login with flags
sk login --user you@example.com --password yourpassword
# Login using stored/env credentials
sk login
# List all boards
sk boards list
# Get a specific board
sk boards get BOARD-123
Card IDs use the CardCode:numericId format (e.g., UserStory:679602). The workType and id fields from card list output combine to form this.
# List cards on a board
sk cards --board-id 1582582 list
# Get card details (CardCode:id format)
sk cards --board-id 1582582 get UserStory:679602
# Create a card
sk cards --board-id 1582582 create --name "Fix login bug" --description "Users can't log in on Safari"
# Create a card with full JSON payload
sk cards --board-id 1582582 create --json '{"name": "New feature", "description": "Add dark mode"}'
# Update a card
sk cards --board-id 1582582 update UserStory:679602 --name "Updated name"
# Update a card with JSON
sk cards --board-id 1582582 update UserStory:679602 --json '{"name": "New name", "description": "New desc"}'
# Delete a card
sk cards --board-id 1582582 delete UserStory:679602
Tip: Set a default board to avoid passing --board-id every time:
sk config set defaultBoardId 1582582
# Now these work without --board-id
sk cards list
sk cards create --name "Quick card"
# Set a value
sk config set server https://my-instance.swiftkanban.com
# Get a value
sk config get server
# Show all config (tokens are redacted)
sk config show
| Key | Description |
|---|---|
server | SwiftKanban server URL |
token | JWT auth token |
defaultBoardId | Default board ID |
format | Output format (json or table) |
user | Username (for JWT generation) |
password | Password (for JWT generation) |
All commands output structured JSON to stdout:
{
"ok": true,
"data": [ ... ],
"meta": { "total": 5 }
}
Errors go to stderr:
{
"ok": false,
"error": {
"code": "NOT_FOUND",
"message": "Card XYZ-123 was not found",
"status": 404
}
}
Use --format table for human-readable output:
sk --format table boards list
┌──────────┬─────────────────┬────────┐
│ Board ID │ Name │ State │
├──────────┼─────────────────┼────────┤
│ 1570749 │ Engineering │ Active │
│ 1571422 │ Marketing │ Active │
└──────────┴─────────────────┴────────┘
Set table as default:
sk config set format table
| Option | Description |
|---|---|
--format <json|table> | Output format (default: json) |
--server <url> | Override server URL |
--token <token> | Override auth token |
--verbose | Print debug info to stderr |
-V, --version | Show version |
-h, --help | Show help |
| Code | Meaning |
|---|---|
0 | Success |
1 | Client error (bad input, not found, auth failure) |
2 | Server error (5xx, timeout) |
3 | Configuration error (missing token, bad config) |
sk-cli includes an MCP server that lets Claude interact with SwiftKanban directly.
Add to your claude_desktop_config.json:
{
"mcpServers": {
"swiftkanban": {
"command": "sk-mcp",
"env": {
"SK_TOKEN": "your-jwt-token",
"SK_SERVER": "https://login.swiftkanban.com"
}
}
}
}
Or without global install:
{
"mcpServers": {
"swiftkanban": {
"command": "npx",
"args": ["-y", "@nimblework/sk-cli", "sk-mcp"],
"env": {
"SK_TOKEN": "your-jwt-token"
}
}
}
}
| Tool | Description |
|---|---|
login | Authenticate with email/password, saves token |
get_config | Show current configuration |
list_boards | List all accessible boards |
get_board | Get board details |
list_cards | List cards on a board |
get_card | Get card details (use CardCode:id format) |
create_card | Create a new card |
update_card | Update an existing card |
delete_card | Delete a card |
All tools that require board_id will fall back to the SK_BOARD_ID env var if not provided.
# Run in dev mode (no build needed)
npx tsx bin/sk.ts <command>
# Type check
npm run typecheck
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Build
npm run build
# Lint
npm run lint
sk-cli/
├── bin/
│ ├── sk.ts # CLI entry point
│ └── sk-mcp.ts # MCP server entry point
├── src/
│ ├── cli/ # Command definitions (Commander.js)
│ ├── services/ # Business logic (shared by CLI + MCP)
│ ├── api/ # REST client, types, auth
│ ├── config/ # Config loading (CLI > env > file)
│ └── output/ # JSON/table formatting
├── test/
│ ├── unit/ # Unit tests (vitest + msw)
│ ├── integration/ # Integration tests (needs SK_TOKEN)
│ └── fixtures/ # Sample API responses
└── .claude/ # Claude Code config (skills, agents, rules)
Use the Claude Code skills:
/add-endpoint cards move # Scaffold a full endpoint
/add-command cards archive # Add a CLI command
/discover-api lanes # Probe API for new endpoints
MIT
FAQs
SwiftKanban CLI and MCP server — interact with SwiftKanban from the command line or Claude AI
The npm package @nimblework/sk-cli receives a total of 21 weekly downloads. As such, @nimblework/sk-cli popularity was classified as not popular.
We found that @nimblework/sk-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.

Security News
/Company News
Socket has joined the new Composer and Packagist sponsorship program as a launch sponsor, supporting the team that keeps PHP's package ecosystem secure.