# fizzy-mcp MCP server for [Fizzy](https://fizzy.do) task management. Exposes 7 tools for managing boards, cards, comments, and checklists. ## Prerequisites Get your Fizzy access token: 1. Log in to [Fizzy](https://app.fizzy.do) 2. Go to Settings > API Access 3. Generate a new token ## How to Install
Claude Desktop Add to your config file: - **macOS:** `~/Library/Application\ Support/Claude/claude_desktop_config.json` - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` - **Linux:** `~/.config/Claude/claude_desktop_config.json` ```json { "mcpServers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "your-token-here" } } } } ``` **Windows only:** Add `"APPDATA": "C:\\Users\\YourUsername\\AppData\\Roaming"` to the `env` block. Restart Claude Desktop completely, then verify: "List my Fizzy boards."
Claude Code Use the CLI: ```bash claude mcp add --transport stdio Fizzy --env FIZZY_TOKEN=your-token-here -- npx -y @silky/fizzy-mcp ``` Or add to `~/.claude.json`: ```json { "mcpServers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "your-token-here" } } } } ``` Restart Claude Code, then verify: "List my Fizzy boards."
Cursor Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project): ```json { "mcpServers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "your-token-here" } } } } ``` Restart Cursor completely, then verify in Agent mode (Ctrl+I).
VS Code Add to `.vscode/mcp.json` in your workspace: ```json { "inputs": [ { "type": "promptString", "id": "fizzy-token", "description": "Fizzy API Token", "password": true } ], "servers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "${input:fizzy-token}" } } } } ``` Or use user settings via Command Palette → "MCP: Open User Configuration".
Windsurf Add to `~/.codeium/windsurf/mcp_config.json`: ```json { "mcpServers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "${env:FIZZY_TOKEN}" } } } } ``` Set `FIZZY_TOKEN` in your shell environment, or hardcode the value. Restart Windsurf.
Cline Add to the Cline MCP settings file: - **macOS:** `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` - **Windows:** `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` - **Linux:** `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json` ```json { "mcpServers": { "Fizzy": { "command": "npx", "args": ["-y", "@silky/fizzy-mcp"], "env": { "FIZZY_TOKEN": "your-token-here" }, "disabled": false, "alwaysAllow": [] } } } ```
Continue Add to `.continue/config.yaml`: ```yaml mcpServers: - name: Fizzy command: npx args: - "-y" - "@silky/fizzy-mcp" env: FIZZY_TOKEN: ${{ secrets.FIZZY_TOKEN }} ```
From Source **Requires [pnpm](https://pnpm.io/).** ```bash git clone https://github.com/davegomez/fizzy-mcp.git cd fizzy-mcp pnpm install pnpm build ``` Replace `npx -y @silky/fizzy-mcp` with `node /absolute/path/to/fizzy-mcp/dist/index.js` in any config above.
--- ## Configuration Reference | Variable | Required | Default | Description | | ---------------- | -------- | ---------------------- | ---------------------------------------- | | `FIZZY_TOKEN` | Yes | — | API token from Fizzy settings | | `FIZZY_ACCOUNT` | No | — | Default account slug (e.g., `897362094`) | | `FIZZY_BASE_URL` | No | `https://app.fizzy.do` | API base URL | ### Account Resolution Tools resolve `account_slug` in this order: 1. Explicit `account_slug` parameter on the tool call 2. Session default (set via `fizzy_account` tool with `action: "set"`) 3. `FIZZY_ACCOUNT` environment variable 4. Auto-detect (if user has exactly one account) --- ## Tools Reference ### fizzy_account Gets, sets, or lists accounts for subsequent tool calls. | Parameter | Type | Required | Description | | -------------- | ------------------------------ | --------- | --------------------------- | | `action` | `"get"` \| `"set"` \| `"list"` | Yes | Action to perform | | `account_slug` | string | For `set` | Account slug from Fizzy URL | **Returns:** - `get`: `{ "action": "get", "account_slug": "897362094" | null }` - `set`: `{ "action": "set", "account_slug": "897362094" }` - `list`: `{ "action": "list", "accounts": [{ "slug": "...", "name": "...", "id": "..." }] }` --- ### fizzy_boards Lists boards in the account with column summaries. | Parameter | Type | Required | Default | Description | | -------------- | ------ | -------- | --------------- | ---------------------- | | `account_slug` | string | No | Session default | Account slug | | `limit` | number | No | 25 | Items per page (1-100) | | `cursor` | string | No | — | Pagination cursor | **Returns:** `{ "items": Board[], "pagination": { "returned": number, "has_more": boolean, "next_cursor"?: string } }` --- ### fizzy_search Searches for cards with filters. | Parameter | Type | Required | Description | | ------------------- | ---------------------------------------------------------------------------------------- | -------- | ---------------------------------- | | `account_slug` | string | No | Account slug | | `board_id` | string | No | Filter by board | | `tag_ids` | string[] | No | Filter by ALL tags | | `assignee_ids` | string[] | No | Filter by ANY assignees | | `creator_ids` | string[] | No | Filter by card creator | | `closer_ids` | string[] | No | Filter by who closed | | `card_ids` | string[] | No | Filter to specific card IDs | | `indexed_by` | `"closed"` \| `"not_now"` \| `"all"` \| `"stalled"` \| `"postponing_soon"` \| `"golden"` | No | Filter by index | | `assignment_status` | `"unassigned"` | No | Filter by assignment status | | `sorted_by` | `"newest"` \| `"oldest"` \| `"recently_active"` | No | Sort order | | `terms` | string[] | No | Free-text search terms | | `creation` | date range\* | No | Filter by creation date | | `closure` | date range\* | No | Filter by closure date | | `limit` | number | No | Items per page (1-100, default 25) | | `cursor` | string | No | Pagination cursor | \*Date range values: `today`, `yesterday`, `thisweek`, `thismonth`, `last7`, `last14`, `last30`. **Returns:** `{ "items": Card[], "pagination": {...} }` --- ### fizzy_get_card Gets full details of a card by number or ID. | Parameter | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------------------- | | `account_slug` | string | No | Account slug | | `card_number` | number | No\* | Card number from URL (e.g., `42` from `#42`) | | `card_id` | string | No\* | Card UUID from API responses | \*Provide `card_number` OR `card_id`. Prefer `card_number` when you have the human-readable `#` from the UI. **Returns:** Card object with `id`, `number`, `title`, `description` (markdown), `status`, `board_id`, `column_id`, `tags`, `assignees`, `steps_count`, `completed_steps_count`, `comments_count`, `url`, timestamps. --- ### fizzy_task Creates or updates a card. **Mode:** Omit `card_number` to create; include it to update. | Parameter | Type | Required | Description | | -------------- | ------------------------------------- | ----------- | ---------------------------------------- | | `account_slug` | string | No | Account slug | | `card_number` | number | No | Card to update (omit to create) | | `board_id` | string | Create mode | Board for new card | | `title` | string | Create mode | Card title | | `description` | string | No | Markdown content | | `status` | `"open"` \| `"closed"` \| `"not_now"` | No | Change card status | | `column_id` | string | No | Triage to column | | `position` | `"top"` \| `"bottom"` | No | Position in column (default: `"bottom"`) | | `add_tags` | string[] | No | Tag titles to add | | `remove_tags` | string[] | No | Tag titles to remove | | `steps` | string[] | No | Checklist items (create mode only) | **Returns:** `{ "mode": "create" | "update", "card": {...}, "operations": {...}, "failures": [...] }` --- ### fizzy_comment Create, list, update, or delete a comment on a card. | Parameter | Type | Required | Description | | -------------- | ------ | -------- | --------------------------------------------------------------- | | `action` | string | No | `"create"` (default), `"list"`, `"update"`, `"delete"` | | `account_slug` | string | No | Account slug | | `card_number` | number | Yes | Card number | | `comment_id` | string | No | Comment ID. Required for update/delete | | `body` | string | No | Comment in markdown (1-10000 chars). Required for create/update | **Returns:** Comment object with `id`, `body` (markdown), `creator`, timestamps, `url`. List returns `{ comments, pagination }`. Delete returns `{ comment_id, deleted }`. --- ### fizzy_step Create, complete, update, uncomplete, or delete a step on a card. | Parameter | Type | Required | Description | | -------------- | ---------------- | -------- | --------------------------------------------------- | | `account_slug` | string | No | Account slug | | `card_number` | number | Yes | Card containing the step | | `step` | string \| number | No | Content substring OR 1-based index. Omit to create. | | `content` | string | No | Step text for create or update | | `completed` | boolean | No | Set completion state | | `delete` | boolean | No | Delete the step | **Mode detection:** - `step` absent → CREATE (requires `content`) - `step` present, no other params → COMPLETE - `step` + `content` → UPDATE - `step` + `completed: false` → UNCOMPLETE - `step` + `delete: true` → DELETE **Returns:** `{ "id": "...", "content": "...", "completed": true }` --- ## Pagination Reference List operations return: ```json { "items": [...], "pagination": { "returned": 25, "has_more": true, "next_cursor": "opaque-cursor-string" } } ``` | Field | Type | Description | | ------------- | ------- | ------------------------------ | | `returned` | number | Items in this response | | `has_more` | boolean | More items available | | `next_cursor` | string | Pass as `cursor` for next page | --- ## Error Reference | Error | Cause | | ------------------------------------------------------------------------------------------------ | ------------------------------------------ | | "No account specified. Set FIZZY_ACCOUNT env var, use fizzy_account tool, or pass account_slug." | No account resolvable via any method | | "Account \"...\" not found" | Invalid slug passed to `fizzy_account` set | | "Card #N not found" | Card number does not exist | | "Board not found" | Invalid `board_id` | --- ## License AGPL-3.0-or-later