MCP Server

TLDR

  1. In claude.ai: Settings → Connectors → Add custom connector https://malleable.cloud/api/mcp
  2. Sign in and approve on the consent screen.

That's it — Claude can now drive your Malleable board from any browser conversation. The same URL works as a ChatGPT connector too. Details, the ChatGPT setup, and the Claude Desktop path below.

MCP Server: Overview

Malleable exposes your calendar, time tracking, and Collab Rooms over the Model Context Protocol two ways. Pick whichever matches where you want to talk to Claude.

claude.ai

Malleable is its own OAuth 2.1 authorization server for the remote MCP connector. Add https://malleable.cloud/api/mcp as a custom connector in claude.ai, sign in through the consent screen, and Claude can read and write your calendar and board directly inside a browser conversation. Nothing to install, nothing to build. Full steps under claude.ai below.

ChatGPT

The same connector URL works from ChatGPT: with developer mode on you get the full tool surface, and standard connector mode (including deep research) gets read-only search/fetch over your tasks, events, and notes. Full steps under ChatGPT below.

Claude Desktop (local)

For Claude Desktop, the MCP server runs locally: point Claude Desktop's config at npx @malleable-cloud/mcp-server with an API key in the environment, no clone or build required. The same package works for any other local MCP client. Full steps under Claude Desktop (local server) below.

Why MCP and not the V1 API?

MCP gives Claude first-class tool calls, no shell-outs, no curl, no copy/paste. Use the V1 API when you're writing your own integration; use MCP when you want Claude itself to drive Malleable.

claude.ai

Malleable is its own OAuth 2.1 authorization server for the remote MCP connector. This path has no local install and no API key to paste, the whole flow runs through a browser consent screen.

Add the connector

  1. In claude.ai, go to Settings → Connectors → Add custom connector.
  2. Enter https://malleable.cloud/api/mcp as the connector URL.
  3. Sign in and approve access on the Malleable consent screen.

Once connected, Claude can drive your kanban board directly inside a browser conversation at claude.ai, no separate app and no terminal required.

The remote connector exposes the full tool surface — board (including board_snapshot), tasks (create / list / update / complete / delete / reorder), calendar (list / create / delete / availability / natural-language schedule), buckets (including list_bucket_repos), time-tracking, and collab rooms/messages/files — at parity with the local server below. Every tool carries read-only/destructive annotations. The only local-server tools not mirrored are collab_share_file and collab_pull_files, which read and write your local filesystem — something a remote connector, running against Anthropic's cloud, does not have.

ChatGPT

The same remote connector works from ChatGPT — nothing to install, no API key to paste, one OAuth sign-in. It has its own page with a full screenshot walkthrough: ChatGPT setup walkthrough.

Claude Desktop (local server)

This is the local path: it runs the MCP server as a child process of Claude Desktop rather than talking to https://malleable.cloud/api/mcp directly. The server is published as @malleable-cloud/mcp-server on npm, point Claude Desktop's config at it with npx, no clone or build step required.

claude_desktop_config.json

On macOS this lives at ~/Library/Application Support/Claude/claude_desktop_config.json. Add a malleable entry under mcpServers:

{
  "mcpServers": {
    "malleable": {
      "command": "npx",
      "args": ["-y", "@malleable-cloud/mcp-server"],
      "env": {
        "MALLEABLE_API_KEY": "mal_live_..."
      }
    }
  }
}

Restart Claude Desktop. The server logs Malleable MCP server started to stderr; if MALLEABLE_API_KEY is missing, the collab tools short-circuit with a connection error but the server still loads.

Available Tools

The local server (Claude Desktop path) registers 34 tools in eight groups. Names below match exactly what Claude sees in its tool list. Board, task and calendar verbs are deterministic API calls — they spend no Malleable AI credits.

Kanban board

  • get_board: the raw board snapshot exactly as the API returns it, every per-ticket field intact
  • board_snapshot: the board by lane, enriched with branch, commit count, collaborators and step progress
  • board_read_ticket: one ticket in detail — description, stage, bucket, branch, collaborators, progress, attached commits
  • board_ticket_timeline: a ticket's stage history, newest first: created, moves between stages, and terminal done/failed/reopened events
  • board_move_task: move a ticket to a different stage
  • board_tag_branch: tag a source (and optionally target/PR-base) branch onto a ticket
  • board_attach_commit: attach one or more commits to a ticket
  • board_add_comment: post a plain-language comment onto a ticket

Tasks

  • list_tasks: list tasks, optionally filtered by status, kanban stage, or bucket
  • create_task: create a task, optionally with an initial kanban stage
  • update_task: update title, priority (low / medium / high), kanban stage, estimated duration, or bucket
  • reorder_task: move a task to an exact lane slot (before/after a reference task, or top/bottom) — the server computes the rank against the dashboard's order
  • complete_task: mark complete (moves it to the virtual done lane)
  • delete_task: delete permanently

Buckets

  • list_buckets: your buckets — projects, clients, work categories
  • list_bucket_collaborators: the accepted collaborators on a bucket you own

Calendar

  • calendar_schedule: schedule an event from natural language (e.g. "Meeting with Bob tomorrow at 3pm for 1 hour")
  • calendar_create_event: create an event with explicit title, start, end, attendees, location
  • calendar_list_events: list events for a date range with an optional limit
  • calendar_check_availability: find free slots on a specific date for a given duration
  • calendar_delete_event: delete an event by ID

Time tracking

  • time_start: start a timer, optionally tied to a bucket or project
  • time_stop: stop a running timer — pass session_id to name one, or all: true to stop every running timer in one call ("clock out"); the result carries still_running/fully_stopped as ground truth, so a caller should never claim timers are stopped except from those fields
  • time_status: report whether a timer is running and for how long

Collab rooms

  • collab_create_room: create a room with name + optional description; you become the owner
  • collab_join_room: join a room by short code with a display name
  • collab_leave_room: leave the current room
  • collab_status: current room name, participants, and online state
  • collab_list_rooms: list rooms you own or belong to

Messages

  • collab_send_message: send a text message to the current room
  • collab_get_messages: fetch the most recent messages (configurable limit)

Files

  • collab_share_file: upload a local file path into the current room
  • collab_pull_files: download room files to a local directory
  • collab_list_files: list files attached to the current room
  • collab_get_file: fetch a single file's contents by ID

The server also exposes a read-only resource at malleable://info summarising connection state, configured API URL, and the live tool inventory.

Authentication

This section covers the Claude Desktop (local) path. The claude.ai custom connector doesn't use an API key at all, it authenticates you through Malleable's own OAuth 2.1 consent screen when you add the connector.

The local MCP server takes a single credential, MALLEABLE_API_KEY, via environment variable. Issue keys from your Malleable account's API settings; they have the same scope as your account.

The server reads MALLEABLE_API_URL too, defaults to https://malleable.cloud. Override it for self-hosted or local-dev (http://localhost:3000) instances.

On SIGINT/SIGTERM the server tries to gracefully leave the active collab room before exiting, so you don't leave stale "online" presence in the roster.