Now liveBe one of the first 50 founders of Malleable. Founding members keep a lifetime discount.

Documentation

MCP Server

MCP Server: Overview

The Malleable MCP server exposes your calendar, time tracking, and Collab Rooms to any Model Context Protocol client, most commonly Claude Desktop or Claude Code. It speaks MCP over stdio, authenticates with a Malleable API key, and forwards tool calls to https://malleable.cloud.

The server source lives in mcp-server/ and you build it from source (it is not yet published to npm); the build produces the malleable-mcp binary. It registers five tool groups: room, messages, files, calendar, and time. A built-in resource at malleable://info reports connection status and the full tool inventory.

Why MCP and not the V1 API?

MCP gives Claude Desktop 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.

Installing in Claude Desktop

Build the server locally, then point Claude Desktop's config at the compiled entry point. The bin name is malleable-mcp; the entry resolves to dist/index.js.

Build

cd mcp-server
npm install
npm run build

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": "node",
      "args": ["/absolute/path/to/mcp-server/dist/index.js"],
      "env": {
        "MALLEABLE_API_KEY": "mal_live_...",
        "MALLEABLE_API_URL": "https://malleable.cloud"
      }
    }
  }
}

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 server registers tools in five groups. Names below match exactly what Claude sees in its tool list.

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 the currently running timer
  • 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

The 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.