Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Trello MCP server

Vendor MCP
Open markdown

The Trello MCP connector routes your AI agent's tool calls to Trello's own MCP server through Scalekit. Each user signs in to Trello once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 15 tools.

Tools
15
What they doRead · write · destructive
9 · 6 · 09 read6 write0 destructive
Users sign in with
OAuth app
Your own Trello app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Trello MCP connection

    In AgentKit > Connections, create a Trello MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Trello connections use your own OAuth app. Register one with Trello and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Trello MCP connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'trellomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Trello MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'trellomcp_trello_read_board',
    toolInput: { action: 'YOUR_ACTION' },
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • trellomcp_trello_read_boardRead Trello boards.Read-only

    Trello Read Board

    Read Trello boards. Supports listing boards the authenticated user is a member of, listing all boards a user can access within a specific workspace (regardless of membership), fetching a single board by ARI or URL, and listing labels on a board. Actions: - "list" — paginated boards the authenticated user is a member of, across all workspaces. Use this for "my boards", "boards I'm on". It does NOT include boards the user could access but has not joined — for those, use "list_by_workspace". By default only open (non-archived) boards are returned; pass filter="all" to include archived boards or filter="closed" for only archived ones. Always include each board's url verbatim in the response. Optionally also filtered by visibility (limit defaults to 25, max 100). The open/closed filter is applied server-side (exact), whereas the visibility filter is applied per page — keep paginating via pageInfo.endCursor while pageInfo.hasNextPage is true to find all matches. - "list_by_workspace" — paginated boards the user can access within ONE workspace (requires workspaceId), regardless of whether they are a member. Use this when the user names a workspace: "boards in <workspace>", "what's in this workspace". Supports the same open/closed filter, visibility filter, and pagination as "list". Always include each board's url verbatim in the response. - "get" — return a single board by ARI or board URL (e.g. https://trello.com/b/<shortLink>/<slug>), including id, objectId, name, closed, shortLink, lastActivityAt, and url. Always include the board url verbatim as the full literal URL — never replace it with a label such as "View on Trello" or hide it behind link text; never omit it. Embeds the first 25 open lists with a listsHasMore flag; for the full set call trelloReadList with action="list_by_board". - "list_labels" — paginated labels on a board (requires boardId; limit defaults to 25, max 100); paginate via nextCursor while hasMore is true.

    Inputs

    actionstringrequired
    Action to perform: "list" (my boards), "list_by_workspace" (boards in a workspace), "get" (single board), "list_labels" (labels on a board).one of listlist_by_workspacegetlist_labels
    boardIdstring
    Trello board identifier. Required for "get" and "list_labels"; not allowed for other actions. For action="get", accepts an ARI (e.g. ari:cloud:trello::board/workspace/<workspaceId>/<boardId>) or a Trello board URL (e.g. https://trello.com/b/<shortLink>/<slug>). For all other actions, boardId must be a board ARI — board URLs/short links are not supported.
    cursorstring
    Pagination cursor. Only valid for paginated actions ("list", "list_by_workspace", "list_labels").
    filterstring
    Filter boards by open/closed state. "open" (default) returns only active (non-archived) boards; "closed" returns only archived boards; "all" returns both. Only valid when action="list" or action="list_by_workspace".one of openclosedall
    limitinteger
    Maximum results per page. Defaults to 25, max 100. Only valid for paginated actions ("list", "list_by_workspace", "list_labels").
    visibilitystring
    Filter boards by visibility. Only valid when action="list" or action="list_by_workspace".one of privateworkspacepublic
    workspaceIdstring
    Trello workspace identifier. Required for action="list_by_workspace"; not allowed for other actions. Accepts an ARI (e.g. ari:cloud:trello::workspace/<workspaceId>).
  • trellomcp_trello_read_cardFetch a Trello card's full details, or list cards across a board or list to surface open work items.Read-only

    Trello Read Card

    Fetch a Trello card's full details, or list cards across a board or list to surface open work items. Use this tool when you know the specific board, list, or card you want to inspect. For keyword-based discovery across all boards/cards, use trelloSearch instead. Actions: - "get": fetch a single card by id or card URL (cardIdOrUrl required). Returns core card fields and labels (up to 25; truncation signalled via labelsHasMore). - "list_by_board": fetch all cards for a board grouped by list (boardIdOrUrl required). Response: { lists: [{ id, name, cards: [...] }], hasNextPage, nextCursor }. Each page contains up to 25 lists (configurable via limit); each list contains all its cards. Filter by card state: "open" (default), "archived", or "all". Use cursor/limit to paginate over lists (max 50 lists per page). - "list_by_list": fetch cards in a Trello list (listId required) with cursor-based pagination. Use this when the user asks for cards in a list or all cards from a specific list. Response: { cards: [...], pageInfo: { hasNextPage, endCursor } }. Filter by card state: "open" (default), "archived", or "all". Use cursor/limit to paginate (max 50 cards per page). Due date timezone handling: Card due dates (due.date) are stored as UTC ISO 8601 timestamps. For "today" or date-based due-date requests, first call trelloReadMember (get_me) for prefs.timezone and interpret due dates in the user's local time.

    Inputs

    actionstringrequired
    Action to perform: "get" fetches a single card, "list_by_board" fetches cards grouped by list for a board, "list_by_list" fetches cards in a specific list.one of getlist_by_boardlist_by_list
    boardIdOrUrlstring
    Trello board identifier. Required for "list_by_board". Accepts an ARI (e.g. ari:cloud:trello::board/workspace/<workspaceId>/<boardId>). A Trello board URL is also accepted (e.g. https://trello.com/b/<shortLink>/<slug>).
    cardIdOrUrlstring
    Trello card identifier. Required for "get". Accepts an ARI (e.g. ari:cloud:trello::card/workspace/<workspaceId>/<cardId>) or a Trello card URL (e.g. https://trello.com/c/<shortLink>/<slug>).
    cursorstring
    Pagination cursor for list actions. Not allowed for "get".
    filterstring
    Card state filter for "list_by_board" and "list_by_list". One of: "open" (default), "archived", "all". Not allowed for "get".one of openarchivedall
    limitinteger
    Pagination limit (1-50) for list actions. Not allowed for "get".
    listIdstring
    Trello list identifier. Required for "list_by_list". Accepts an ARI (e.g. ari:cloud:trello::list/workspace/<workspaceId>/<listId>).
  • trellomcp_trello_read_checklistRead Trello checklists (and their check items) attached to a card.Read-only

    Trello Read Checklist

    Read Trello checklists (and their check items) attached to a card. Supported actions: "list_by_card" — list checklists on a card (cardId required); cursor/limit page the checklists. "get" — fetch a single checklist by id (checklistId required). In both actions each checklist is returned with its complete `items` list embedded.

    Inputs

    actionstringrequired
    The read action to perform: "list_by_card" or "get".one of list_by_cardget
    cardIdstring
    Trello card ARI (e.g. "ari:cloud:trello::card/workspace/<workspaceId>/<cardId>"). Required for "list_by_card".
    checklistIdstring
    Trello checklist ARI (e.g. "ari:cloud:trello::checklist/workspace/<workspaceId>/<checklistId>"). Required for "get".
    cursorstring
    Pagination cursor for "list_by_card" (pages checklists). Not allowed for "get".
    limitinteger
    Pagination limit (1-100, default 25) for "list_by_card" (caps checklists). Not allowed for "get".
  • trellomcp_trello_read_inboxTriage and review the authenticated user's Trello Inbox — the personal quick-capture board where new cards and notifications land.Read-only

    Trello Read Inbox

    Triage and review the authenticated user's Trello Inbox — the personal quick-capture board where new cards and notifications land. Use this specifically for the user's Inbox board. For cards on other boards or lists, use trelloReadCard instead. Actions: - "get" — return the Inbox board details (id, objectId, lastActivityAt). No additional arguments are needed. - "list_cards" — list cards in the Inbox with optional filtering and pagination. Each card includes labels and up to 25 checklists (truncation signalled via checklistsHasMore). Filter by card state: "open" (default), "archived", or "all". Use cursor/limit to paginate (limit defaults to 25, max 50).

    Inputs

    actionstringrequired
    Action to perform. "get" returns the Inbox board details. "list_cards" returns paginated cards in the Inbox (filter/cursor/limit are optional).one of getlist_cards
    cursorstring
    Pagination cursor. Only valid when action="list_cards".
    filterstring
    Card state filter for "list_cards". One of: "open" (default), "archived", "all". Not allowed for "get".one of openarchivedall
    limitinteger
    Maximum number of cards to return per page. Defaults to 25, max 50. Only valid when action="list_cards".
  • trellomcp_trello_read_listRead Trello lists.Read-only

    Trello Read List

    Read Trello lists. Supported actions: "list_by_board" — list the open lists on a board (id, name, position, objectId) with cursor-based pagination (limit defaults to 25, max 50); "get" — return a single list by id, including up to 25 nested cards (id, name).

    Inputs

    actionstringrequired
    Action to perform. "list_by_board" requires boardId (cursor/limit are optional). "get" requires listId (cursor/limit are not allowed).one of list_by_boardget
    boardIdstring
    Trello board identifier. Required when action="list_by_board". Accepts an ARI (e.g. ari:cloud:trello::board/workspace/<workspaceId>/<boardId>).
    cursorstring
    Pagination cursor. Only valid when action="list_by_board".
    limitinteger
    Maximum number of lists to return per page. Defaults to 25, max 50. Only valid when action="list_by_board".
    listIdstring
    Trello list identifier. Required when action="get". Accepts an ARI (e.g. ari:cloud:trello::list/workspace/<workspaceId>/<listId>).
  • trellomcp_trello_read_memberGet a Trello member's profile.Read-only

    Trello Read Member

    Get a Trello member's profile. Call action="get_me" FIRST before any due-date query (e.g. "cards due today", "overdue cards") to get prefs.timezone (e.g. "America/Los_Angeles") so due dates can be interpreted in the user's local time rather than UTC. Also use action="get_me" to look up the current user's username, fullName, email, or avatarUrl. Supported actions: "get_me" — returns the authenticated user's Trello member profile (id, username, fullName, email, avatarUrl, url, prefs) via the Trello GraphQL API.

    Inputs

    actionstringrequired
    The read action to perform. Only "get_me" is supported, which returns the authenticated user's profile.one of get_me
    boardIdstring
    Trello board identifier. Required for "list_by_board"; not allowed for other actions. Accepts an ARI (e.g. ari:cloud:trello::board/workspace/<workspaceId>/<boardId>).
    cardIdstring
    Trello card identifier. Required for "list_by_card"; not allowed for other actions. Accepts an ARI (e.g. ari:cloud:trello::card/workspace/<workspaceId>/<cardId>).
    cursorstring
    Pagination cursor. Only valid for member list actions.
    limitinteger
    Maximum number of members to return per page. Defaults to 25, max 100. Only valid for member list actions.
    memberIdstring
    Trello member identifier. Required for "get"; not allowed for any other action. Accepts an ARI (e.g. ari:cloud:trello::user/<memberId>).
    rolestring
    Only return members with this board role. Only valid when action="list_by_board" — workspace membership cannot be filtered by role.one of adminnormalobserver
    workspaceIdstring
    Trello workspace identifier. Required for "list_by_workspace"; not allowed for other actions. Accepts an ARI (e.g. ari:cloud:trello::workspace/<workspaceId>).
  • trellomcp_trello_read_plannerRead Trello Planner information for the authenticated user.Read-only

    Trello Read Planner

    Read Trello Planner information for the authenticated user. Supported actions: "get" — returns the current member's planner (id, primaryAccountId, primaryCalendarId, primaryCalendar details); "list_events" — lists calendar events for a given planner calendar in a time window (plannerCalendarId, providerAccountId, start, end required; limit defaults to 25, max 50; cursor-based pagination supported); "get_event" — returns a single calendar event by provider event id (eventId, providerAccountId, plannerCalendarId required). Timezone handling: start and end must be UTC ISO 8601. For relative time queries like "today" or "this week", first use the "get" action to retrieve primaryCalendar.timezone, then convert to UTC before calling "list_events".

    Inputs

    actionstringrequired
    Action to perform. "get" takes no additional args and returns the current member's planner. "list_events" requires plannerCalendarId, providerAccountId, start, end (cursor and limit optional). "get_event" requires eventId, providerAccountId, plannerCalendarId.one of getlist_eventsget_event
    cursorstring
    Pagination cursor. Only valid for "list_events".
    endstring
    Event window end as a UTC ISO 8601 date-time string. Must be after start. For relative queries like "today", first use the "get" action to retrieve primaryCalendar.timezone and convert to UTC. Required for "list_events".
    eventIdstring
    Provider event ID. Required for "get_event".
    limitinteger
    Maximum number of events to return. Defaults to 25, max 50. Only valid for "list_events".
    plannerCalendarIdstring
    Trello planner calendar identifier. Required for "list_events" and "get_event". Accepts an ARI (e.g. ari:cloud:trello::planner-calendar/<calendarId>).
    providerAccountIdstring
    Provider account ARI (e.g. Google account ARI like "ari:third-party:google::account/<id>"). Required for "list_events" and "get_event".
    startstring
    Event window start as a UTC ISO 8601 date-time string. For relative queries like "today", first use the "get" action to retrieve primaryCalendar.timezone and convert to UTC. Required for "list_events".
  • trellomcp_trello_read_workspaceRead Trello workspaces (organizations) the current user has access to.Read-only

    Trello Read Workspace

    Read Trello workspaces (organizations) the current user has access to. Supported actions: "list" — list workspaces visible to the authenticated user (cursor-based pagination, limit defaults to 25, max 100); "get" — fetch detailed data for a single workspace by id (typically used after "list" to drill into a workspace).

    Inputs

    actionstringrequired
    The read action to perform. "list" returns paginated workspaces; "get" returns a single workspace by id.one of listget
    cursorstring
    Pagination cursor for the next page. Only valid for "list" action.
    limitinteger
    Maximum number of workspaces to return (default 25, max 100). Only valid for "list" action.
    workspaceIdstring
    Trello workspace identifier. Required for "get" action. Accepts an ARI (e.g. ari:cloud:trello::workspace/<workspaceId>).