In-depth architectural comparison of the Fizzy MCP and Google Workspace MCP MCP servers. Compare execution transports, security boundaries, tool capabilities, quality scores, and ready-to-paste client installation snippets for Claude, Cursor, Windsurf, and VS Code.
At a Glance & Executive Verdict
Fizzy MCP
Workplace & Productivity · Local stdio
Quality: 57/100 (Good) | Auth: API Key required
Google Workspace MCP
Workplace & Productivity · Local stdio
Quality: 67/100 (Great) | Auth: OAuth 2.0
Verdict Summary: Choose Fizzy MCP if you need specialized Workplace & Productivity tools running via a local process. Choose Google Workspace MCP if your workspace requires Workplace & Productivity integration with local subprocess execution. Both servers can be configured concurrently in your client's mcpServers manifest.
Which MCP Server Should You Choose?
Choose Fizzy MCP when:
You need dedicated capabilities in the Workplace & Productivity domain.
You prefer local stdio subprocess transport architecture.
Your security boundary fits: API Key required (BYOK (Pay Provider Direct)).
You have access to required keys: FIZZY_TOKEN, FIZZY_ACCOUNT, FIZZY_BASE_URL.
You need dedicated capabilities in the Workplace & Productivity domain.
You prefer local stdio subprocess transport architecture.
Your security boundary fits: OAuth 2.0 (Free / Open Source).
You have access to required keys: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_OAUTH_REDIRECT_URI, WORKSPACE_MCP_LOG_LEVEL, WORKSPACE_MCP_PORT, WORKSPACE_MCP_HOST.
Get, set, or list accounts for API calls.
Manages the session default so you don't need to pass `account_slug` on every tool call.
**When to use:**
- List available accounts to see what you have access to
- Set working account after discovering accounts
- Check current default before operations
**Don't use when:** Operating across multiple accounts simultaneously — pass `account_slug` explicitly instead.
**Arguments:**
- `action` (required): "get" to check current default, "set" to change it, "list" to see available accounts
- `account_slug` (required for set): Account slug (e.g., "897362094")
**Returns:**
- get: `{ "action": "get", "account_slug": "897362094" }` or `null` if not set
- set: `{ "action": "set", "account_slug": "897362094" }`
- list: `{ "action": "list", "accounts": [{ "slug": "...", "name": "...", "id": "..." }] }`
**Related:** Most tools auto-resolve account via FIZZY_ACCOUNT env var or single-account auto-detection.
fizzy_boards
List boards in the account with column summaries.
Get an overview of boards and their column structure including card counts.
**When to use:**
- Discover board IDs and column IDs for subsequent operations
- See card counts per column across all boards
- Find the right board/column to create cards or triage
**Fizzy column conventions:**
Every board has three implicit columns not returned in the columns array:
- **Maybe?** (inbox): Untriaged cards. Cards here have no `column_id`. New cards start here.
- **Not Now**: Deferred cards. Move here via `status: "not_now"` in `fizzy_task`.
- **Done**: Closed cards. Move here via `status: "closed"` in `fizzy_task`.
The `columns` array only contains custom workflow columns (e.g., "In Progress", "Backlog").
To move a card from a column back to Maybe?, use `fizzy_task` with `column_id` omitted and no status change.
**Arguments:**
- `account_slug` (optional): Uses session default if omitted
- `limit` (optional): Max items to return, 1-100 (default: 25)
- `cursor` (optional): Continuation cursor from previous response
**Returns:** JSON with items and pagination metadata.
```json
{"items": [{"id": "board_1", "name": "Project", "columns": [{"id": "col_1", "name": "Backlog"}]}], "pagination": {...}}
```
**Related:** Use board ID with `fizzy_task` to create cards. Use column IDs for triage.
Ready-to-Paste Client Configurations
Paste either (or both) of these JSON server blocks into your client config file (e.g. claude_desktop_config.json or ~/.cursor/mcp.json).
Fizzy MCP is categorized under Workplace & Productivity and uses a local stdio subprocess. In contrast, Google Workspace MCP belongs to Workplace & Productivity using local stdio subprocess. Select Fizzy MCP when you need capabilities focused on workplace & productivity and Google Workspace MCP when you require tools for workplace & productivity.
Search for cards with filters.
Find cards matching criteria or review board contents.
**When to use:**
- Find cards by tag, assignee, or board
- Filter by index category (closed, stalled, golden, etc.)
**Don't use when:** You already know the card number — use `fizzy_get_card` instead.
**Arguments:**
- `account_slug` (optional): Uses session default if omitted
- `board_id` (optional): Filter to cards on this board
- `indexed_by` (optional): Filter by index category: closed | not_now | all | stalled | postponing_soon | golden
- `tag_ids` (optional): Filter to cards with ALL these tag IDs
- `assignee_ids` (optional): Filter to cards assigned to ANY of these user IDs
- `sorted_by` (optional): Sort order: newest | oldest | recently_active
- `terms` (optional): Search terms to filter cards by text content
- `limit` (optional): Max items, 1-100 (default: 25)
- `cursor` (optional): Continuation cursor from previous response
**Returns:** JSON with items and pagination metadata.
```json
{"items": [{"number": 42, "title": "...", ...}], "pagination": {"returned": 25, "has_more": true, "next_cursor": "..."}}
```
**Related:** Use card number with `fizzy_get_card` for full details.
fizzy_get_card
Get full details of a card by its number or ID.
Retrieve complete card data including description, steps count, and metadata.
**When to use:**
- Need full description or metadata for a specific card
- Check step completion status or see all tags/assignees
**Don't use when:** Scanning multiple cards - use `fizzy_search` first.
**Arguments:**
- `account_slug` (optional): Uses session default if omitted
- `card_number` (recommended): The human-readable `#` number from URLs/lists (e.g., 42)
- `card_id` (alternative): The UUID from API responses. Use `card_number` when possible.
**IMPORTANT:** Provide `card_number` (integer) OR `card_id` (string UUID), not both.
The `card_number` is the `#` visible in the UI (e.g., #42). The `card_id` is the internal UUID.
**Returns:**
JSON with id, number, title, description (markdown), status, board_id, column_id, tags array, assignees array, steps_count, completed_steps_count, comments_count, url, created_at, updated_at, closed_at (null if open).
Example: `{"id": "card_abc", "number": 42, "title": "Fix bug", "status": "open", "steps_count": 3, ...}`
**Related:** Use `fizzy_comment` or `fizzy_step` for deeper interaction.
fizzy_task
Create or update a card with full control over status, tags, steps, and column placement.
**Mode detection:**
- `card_number` absent → CREATE mode (requires `board_id` + `title`)
- `card_number` present → UPDATE mode
**Create mode:**
Creates card, then best-effort: adds steps, toggles tags, triages to column.
**Update mode:**
Updates title/description if provided. Changes status (open/closed/not_now). Manages tags with add/remove. Moves card to column (from inbox or another column). Same-column moves are skipped.
**Fizzy column conventions:**
- **Maybe?** (inbox): Cards with no `column_id`. This is where new cards start.
- **Not Now**: Set `status: "not_now"` to move here (defers the card).
- **Done**: Set `status: "closed"` to move here (completes the card).
- **Custom columns**: Use `column_id` from `fizzy_boards` to triage to workflow columns.
**Arguments:**
- `account_slug` (optional): Uses session default if omitted
- `card_number` (optional): Card to update. Omit to create new card.
- `board_id` (optional): Board ID. Required for create mode.
- `title` (optional): Card title. Required for create mode.
- `description` (optional): Card body in markdown
- `status` (optional): open | closed | not_now — changes card lifecycle state
- `column_id` (optional): Move card to this column (works from inbox or other columns; skipped if already there)
- `position` (optional): top | bottom (default: bottom) — position in column
- `add_tags` (optional): Tag titles to add
- `remove_tags` (optional): Tag titles to remove
- `steps` (optional): Checklist items to create (create mode only)
**Returns:**
JSON with `mode`, `card` (id, number, title, url, status), `operations` summary, `failures` array.
**Examples:**
Create: `{board_id: "...", title: "New task", steps: ["Step 1", "Step 2"]}`
Update: `{card_number: 42, status: "closed", add_tags: ["done"]}`
fizzy_comment
Manage comments on a card: create, list, update, or delete.
**Actions:**
- `create` (default): Post a new comment
- `list`: Get all comments on a card
- `update`: Edit an existing comment (requires `comment_id` + `body`)
- `delete`: Remove a comment (requires `comment_id`)
**Arguments:**
- `action` (optional): "create" | "list" | "update" | "delete" (default: "create")
- `account_slug` (optional): Uses session default if omitted
- `card_number` (required): Card number
- `comment_id` (optional): Required for update/delete
- `body` (optional): Comment body in markdown. Required for create/update
**Returns:** JSON with comment details, list of comments, or deletion confirmation.
fizzy_step
Create, complete, update, uncomplete, or delete a step on a card.
**Mode detection:**
- `step` absent → CREATE (requires `content`)
- `step` present, no other params → COMPLETE (default action)
- `step` + `content` → UPDATE content
- `step` + `completed: false` → UNCOMPLETE
- `step` + `delete: true` → DELETE
**Arguments:**
- `account_slug` (optional): Uses session default if omitted
- `card_number` (required): Card number containing the step
- `step` (optional): Content substring to match OR 1-based index to identify existing step
- `content` (optional): Step text for create or update
- `completed` (optional): Set completion state (true or false)
- `delete` (optional): Delete the step
**Returns:** JSON with step `id`, `content`, `completed` status.
**Examples:**
- Create: `{card_number: 42, content: "Write tests"}`
- Complete: `{card_number: 42, step: "Write tests"}`
- Uncomplete: `{card_number: 42, step: 1, completed: false}`
- Update: `{card_number: 42, step: 1, content: "Write unit tests"}`
- Delete: `{card_number: 42, step: "Write tests", delete: true}`
Google Workspace MCP Tools (123)
start_google_auth
Manually initiate Google OAuth authentication flow.
NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled.
The authentication system automatically handles credential checks and prompts for
authentication when needed. Only use this tool if:
1. You need to re-authenticate with different credentials
2. You want to proactively authenticate before using other tools
3. The automatic authentication flow failed and you need to retry
In most cases, simply try calling the Google Workspace tool you need - it will
automatically handle authentication if required.
search_gmail_messages
Searches messages in a user's Gmail account based on a query.
Returns both Message IDs and Thread IDs for each found message, along with Gmail web interface links for manual verification.
Supports pagination via page_token parameter.
get_gmail_message_content
Retrieves the full content (subject, sender, recipients, body) of a specific Gmail message.
Bodies are returned inline and truncated at 20,000 characters. Set full=True to
get the complete, untruncated message instead: it is exported to disk and the
response carries a short-lived download URL (HTTP transport) or file path (stdio
transport) rather than the body, so large messages never stream through the model
context. Stateless deployments have no file storage, so there full=True returns the
untruncated body inline.
get_gmail_messages_content_batch
Retrieves the content of multiple Gmail messages in a single batch request.
Supports up to 25 messages per batch to prevent SSL connection exhaustion.
get_gmail_attachment_content
Downloads an email attachment and saves it to local disk.
In stdio mode, returns the local file path for direct access.
In HTTP mode, returns a temporary download URL (valid for 1 hour).
May re-fetch message metadata to resolve filename and MIME type.
send_gmail_message
Sends an email using the user's Gmail account. Supports new emails, replies, and
forwards, with optional attachments. Supports Gmail's "Send As" feature to send
from configured alias addresses.
To forward an existing message, pass forward_message_id. The original subject,
body (quoted with a "Forwarded message" header), and attachments are carried over.
In forward mode, body (if any) is prepended as a note and subject is optional.
Threading, reply, and signature options do not apply when forwarding.
THIS TOOL SENDS IMMEDIATELY AND CANNOT SCHEDULE. Gmail's REST API exposes no
send-time parameter; Schedule send is a web-UI feature with no API equivalent,
so no argument to this tool can defer delivery. Never tell a user a message
was scheduled. For "prepare now, deliver later", create a draft with
draft_gmail_message. An external scheduler must retain the message data to
create and send a new message via send_gmail_message at the chosen time, or
call users.drafts.send with the draft ID returned by draft_gmail_message.
Alternatively, let the user schedule that draft in the Gmail UI.
draft_gmail_message
Creates a draft email in the user's Gmail account. Supports both new drafts and reply drafts with optional attachments.
Supports Gmail's "Send As" feature to draft from configured alias addresses.
SCHEDULED SEND IS NOT AVAILABLE. Gmail's REST API exposes no send-time
parameter; the Schedule send feature is web-UI only, and a message cannot be
placed in the Scheduled folder through the API. Do not claim a message was
scheduled. To deliver at a chosen time, create a draft with
draft_gmail_message. An external scheduler must retain the message data to
create and send a new message via send_gmail_message then, or call
users.drafts.send with the draft ID returned by draft_gmail_message.
Alternatively, let the user schedule the draft in the Gmail UI.
get_gmail_thread_content
Retrieves the complete content of a Gmail conversation thread, including all messages.
Optionally also returns structured ownership analysis so a caller can
determine who sent the last message and who owes whom a response without
re-parsing the formatted string or making a second tool call.
get_gmail_threads_content_batch
Retrieves the content of multiple Gmail threads in a single batch request.
Supports up to 25 threads per batch to prevent SSL connection exhaustion.
list_gmail_labels
Lists labels in the user's Gmail account.
manage_gmail_label
Manages Gmail labels: create, update, or delete labels.
list_gmail_filters
Lists all Gmail filters configured in the user's mailbox.
MCP server for Fizzy kanban task management with tools for boards, cards, comments, and checklists.
Comprehensive Google Workspace MCP server with full support for Google Calendar, Drive, Gmail, and Docs, Forms, Chats, Slides and Sheets over stdio, Streamable HTTP and SSE transports.