Boards and columns16
list_projectsget_projectget_boardget_board_activitycreate_projectupdate_projectdelete_projectlist_board_templatesadd_columnupdate_columnarchive_columndelete_columnlist_tagsexport_projectpreview_importimport_board
MCP
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.
Connect
Each client connects a little differently. Choose yours and follow only its steps.
# 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.
claude mcp add --transport http craaft https://ai.craaft.io/mcp adds the server on its own, with the same sign-in.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.
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
Claude opens craaft in a browser tab. Sign in the way you always do, with a password or your sign-in provider.
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.
In craaft, open Settings, then API keys. Tokens are cra_ followed by 32 characters, shown once and stored only as a hash.
~/.cursor/mcp.jsonUse 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_..." }
}
}
}
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.
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
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.
list_projectsget_projectget_boardget_board_activitycreate_projectupdate_projectdelete_projectlist_board_templatesadd_columnupdate_columnarchive_columndelete_columnlist_tagsexport_projectpreview_importimport_boardcreate_cardget_cardget_card_detailupdate_cardmove_cardarchive_cardrestore_carddelete_cardlist_archived_cardsget_card_activityset_card_followbulk_create_cardsbulk_update_cardsbulk_move_cardsrebalance_cardsadd_commentget_commentsupdate_commentdelete_commentget_checklistadd_checklist_itemupdate_checklist_itemdelete_checklist_itemlist_attachmentsupload_attachmentdownload_attachmentdelete_attachmentlist_board_filessearch_cardsget_focusget_hygienelist_milestonesadd_milestoneupdate_milestonedelete_milestonelist_notificationsmark_notifications_readget_melist_membersinvite_memberupdate_member_roleremove_memberlist_invitationsrevoke_invitationlist_board_membersgrant_board_accessrevoke_board_accessget_avatarenable_sharingdisable_sharinglist_webhookscreate_webhookupdate_webhookdelete_webhookget_inbound_emailenable_inbound_emailupdate_inbound_emaildisable_inbound_emailLimits
Read this before you give an agent access.
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.
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.
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.
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.
Every tool is a REST call underneath. The API guide and the OpenAPI spec cover the same ground without an agent in the loop.