# Excalidraw — Pipedream Connect

> Virtual collaborative whiteboard

- API slug: `excalidraw` (use in MCP headers and tool keys)
- Auth: API key (Pipedream-managed)
- Categories: Productivity
- Website: https://excalidraw.com/
- This page (HTML): https://pipedream.com/apps/excalidraw
- Tools: 8 actions · 0 triggers

## Connect via MCP (recommended)

- Endpoint: `https://remote.mcp.pipedream.net/v3`
- Headers: `Authorization: Bearer <token>` · `x-pd-project-id` · `x-pd-environment` · `x-pd-external-user-id` · `x-pd-app-slug: excalidraw`

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "excalidraw",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// e.g. run Create Collection:
const result = await mcp.callTool({
  name: "excalidraw-create-collection",
  arguments: {
    collectionName: "Name",
  },
})
```

Docs: [MCP guide](https://pipedream.com/docs/connect/mcp/developers.md)

## API proxy

For a Excalidraw endpoint with no pre-built tool, the proxy forwards your request with the connected user's credentials attached.

```bash
# The path segment is the target URL, URL-safe base64 encoded:
# https://api.excalidraw.com/api/v1/collections

curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuZXhjYWxpZHJhdy5jb20vYXBpL3YxL2NvbGxlY3Rpb25z?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
  -H "Authorization: Bearer {access_token}" \
  -H "x-pd-environment: production"
```

Docs: [API proxy guide](https://pipedream.com/docs/connect/api-proxy.md)

## SDK

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "excalidraw-create-collection",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    excalidraw: { authProvisionId: "apn_xxxxxxx" },
    collectionName: "Name",
  },
})
```

Docs: [Managed auth guide](https://pipedream.com/docs/connect/managed-auth/quickstart.md) · [Tools guide](https://pipedream.com/docs/connect/components.md)

## Actions (8)

### `excalidraw-create-collection` — Create Collection (Write)

Creates a new collection (folder) in the Excalidraw Plus workspace for organizing scenes. Returns the new collection's ID — pass it to Create Scene or Update Scene to add scenes to this collection. See the documentation

Full schema: https://pipedream.com/apps/excalidraw/actions/create-collection.md

### `excalidraw-create-scene` — Create Scene (Write)

Creates a new scene (whiteboard) in the Excalidraw Plus workspace. The API requires a collection — if no collectionId is provided, the scene is placed in the default (Main) collection automatically. Use List Collections to find the collection ID if the user wants the scene in a specific folder…

Full schema: https://pipedream.com/apps/excalidraw/actions/create-scene.md

### `excalidraw-delete-scene` — Delete Scene (Write)

Permanently deletes an Excalidraw scene and all its drawing content. This action cannot be undone. Use List Scenes to find the scene ID before calling this tool. See the documentation

Full schema: https://pipedream.com/apps/excalidraw/actions/delete-scene.md

### `excalidraw-get-current-user` — Get Current User (Read-only)

Returns the current workspace context from Excalidraw Plus, including workspace ID, name, user IDs, and roles. Use this when the user asks 'who am I', 'what workspace am I in', or needs the workspace ID or user role. See the documentation

Full schema: https://pipedream.com/apps/excalidraw/actions/get-current-user.md

### `excalidraw-get-scene` — Get Scene (Read-only)

Returns metadata for a specific Excalidraw scene, and optionally its full drawing content (elements JSON). Use this when the user asks to view, inspect, or read a specific scene. Use List Scenes first to find the scene ID by name. Set includeContent to true only when the user explicitly asks for…

Full schema: https://pipedream.com/apps/excalidraw/actions/get-scene.md

### `excalidraw-list-collections` — List Collections (Read-only)

Returns all collections (folders) in the Excalidraw Plus workspace. Use this to discover available collection IDs and names before filtering scenes by collection or creating a scene in a specific collection. Cross-reference: pass a collection ID from this result to List Scenes or Create Scene. See…

Full schema: https://pipedream.com/apps/excalidraw/actions/list-collections.md

### `excalidraw-list-scenes` — List Scenes (Read-only)

Returns scenes (whiteboards) in the Excalidraw Plus workspace. Optionally filter by collection ID or apply a name substring filter (applied client-side, since the API has no server-side search). When the user says 'scenes in [collection]', use List Collections first to get the collection ID, then…

Full schema: https://pipedream.com/apps/excalidraw/actions/list-scenes.md

### `excalidraw-update-scene` — Update Scene (Write)

Updates an existing Excalidraw scene's name or collection membership. Use List Scenes to find the scene ID, and List Collections to find a collection ID if moving the scene. Only the fields you provide are updated — omitted fields remain unchanged. Note: the Excalidraw API does not support a…

Full schema: https://pipedream.com/apps/excalidraw/actions/update-scene.md

---

- All apps: https://pipedream.com/apps — index: https://pipedream.com/llms.txt
- Pipedream docs for agents: https://pipedream.com/docs/llms.txt
