craaft

MCP

Give your agent a seat at the board

The craaft MCP server lets Claude, Cursor or any MCP client read your boards, add cards and move them, as you and with your permissions. No more copying things back and forth.

On every plan, including Free. 74 tools behind one URL: https://ai.craaft.io/mcp

Connect

Pick your client

Each client connects a little differently. Choose yours and follow only its steps.

Claude Code

# 1. The craaft plugin: MCP server and skill

claude plugin marketplace add craaft/skill
claude plugin install craaft@craaft

# 2. In Claude Code, run /mcp, pick craaft and sign in
# Then ask your agent what’s in To Do.

One plugin installs both halves. The first time it connects, run /mcp, pick craaft and sign in with your craaft account in the browser. There is no token to copy, and Claude Code keeps the sign-in fresh.

  1. The MCP server gives your agent the 74 tools below.
  2. The skill teaches Claude Code the REST API’s rules, like column keys and float positions, for the scripts it writes. Those scripts use a personal access token, from Settings, then API keys.
  3. No plugin? claude mcp add --transport http craaft https://ai.craaft.io/mcp adds the server on its own, with the same sign-in.

Claude Desktop and claude.ai

craaft is an OAuth 2.1 authorization server, so Claude sends you to craaft to sign in and approve. There is no API key to copy.

  1. Step 1

    Add the connector

    Find craaft in the Claude directory and connect it. Or, in Claude, open Settings, then Connectors, and add a custom connector with this URL. Either way, Claude registers itself with craaft, so there is nothing to set up on our side first.

    https://ai.craaft.io/mcp
  2. Step 2

    Sign in to craaft

    Claude opens craaft in a browser tab. Sign in the way you always do, with a password or your sign-in provider.

  3. Step 3

    Approve

    Check the app name and approve. Claude gets the boards and permissions your account already has, and nothing you couldn’t do yourself in the app. Revoke it any time from Settings, then Connected apps.

Cursor

  1. Step 1

    Mint a token

    In craaft, open Settings, then API keys. Tokens are cra_ followed by 32 characters, shown once and stored only as a hash.

  2. Step 2

    Add craaft to ~/.cursor/mcp.json

    Use the global file, not one inside a repository, so the token stays out of version control.

    {
      "mcpServers": {
        "craaft": {
          "url": "https://ai.craaft.io/mcp",
          "headers": { "Authorization": "Bearer cra_..." }
        }
      }
    }

Any MCP client

  1. Step 1

    Mint a token

    In craaft, open Settings, then API keys. It is the same token the REST API uses, so keep it in an environment variable, not a committed file.

  2. Step 2

    Point your client at the server

    The server speaks MCP over HTTP. Most clients take a block like this.

    {
      "mcpServers": {
        "craaft": {
          "type": "http",
          "url": "https://ai.craaft.io/mcp",
          "headers": { "Authorization": "Bearer cra_..." }
        }
      }
    }

    A client that speaks OAuth 2.1 with PKCE can skip the token: point it at https://ai.craaft.io/mcp and it finds the authorization, token and registration endpoints at /.well-known/oauth-authorization-server.

Tools

74 tools, grouped the way the board is

Reading is the useful half: an agent that can see your board can plan against it without you pasting anything in. Writing covers most of what you can do in the app, bulk moves included.

Boards and columns16

  • list_projects
  • get_project
  • get_board
  • get_board_activity
  • create_project
  • update_project
  • delete_project
  • list_board_templates
  • add_column
  • update_column
  • archive_column
  • delete_column
  • list_tags
  • export_project
  • preview_import
  • import_board

Cards15

  • create_card
  • get_card
  • get_card_detail
  • update_card
  • move_card
  • archive_card
  • restore_card
  • delete_card
  • list_archived_cards
  • get_card_activity
  • set_card_follow
  • bulk_create_cards
  • bulk_update_cards
  • bulk_move_cards
  • rebalance_cards

Comments, checklists and files13

  • add_comment
  • get_comments
  • update_comment
  • delete_comment
  • get_checklist
  • add_checklist_item
  • update_checklist_item
  • delete_checklist_item
  • list_attachments
  • upload_attachment
  • download_attachment
  • delete_attachment
  • list_board_files

Planning and search10

  • search_cards
  • get_focus
  • get_hygiene
  • list_milestones
  • add_milestone
  • update_milestone
  • delete_milestone
  • list_notifications
  • mark_notifications_read
  • get_me

Team and access10

  • list_members
  • invite_member
  • update_member_role
  • remove_member
  • list_invitations
  • revoke_invitation
  • list_board_members
  • grant_board_access
  • revoke_board_access
  • get_avatar

Sharing and integrations10

  • enable_sharing
  • disable_sharing
  • list_webhooks
  • create_webhook
  • update_webhook
  • delete_webhook
  • get_inbound_email
  • enable_inbound_email
  • update_inbound_email
  • disable_inbound_email

Limits

What it can’t do

Read this before you give an agent access.

It is you, not more than you

The agent sees the boards you can see and changes what you can change. Per-board access still applies, so a board you were never granted stays invisible to it.

No account or billing access

Sign-in, API keys and billing are browser-only and aren’t tools. An agent can’t mint itself a second token or change your plan.

Plan limits still apply

On Free, a fourth project comes back as a limit error rather than quietly succeeding. The agent gets the same answer the board would give you.

Revoking is instant

Delete the token, or revoke the app in Connected apps, and the agent stops on its next call. Tokens never expire on their own, so revoking is the one step to remember.

Want the raw HTTP surface?

Every tool is a REST call underneath. The API guide and the OpenAPI spec cover the same ground without an agent in the loop.