Skip to main content
Glama
agrath

Atlassian Trello MCP Server

update_card

Update any property of a Trello card including name, description, due date, list, and position. Modify card details with a single API call.

Instructions

Update properties of an existing Trello card. Use this to change card details like name, description, due date, or status.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
apiKeyNoTrello API key (optional if TRELLO_API_KEY env var is set)
tokenNoTrello API token (optional if TRELLO_TOKEN env var is set)
cardIdYesID or URL of the card to update (e.g. "abc123" or "https://trello.com/c/abc123/1-title")
nameNoNew name/title for the card
descNoNew description for the card
closedNoSet to true to archive the card, false to unarchive
dueNoSet due date (ISO 8601 format) or null to remove due date
dueCompleteNoMark the due date as complete (true) or incomplete (false)
startNoSet start date (ISO 8601 format) or null to remove start date
idListNoMove card to a different list by providing the list ID
posNoChange position in the list: "top", "bottom", or specific number

Implementation Reference

  • The handleUpdateCard function executes the update_card tool logic: extracts credentials, validates input via validateUpdateCard, calls TrelloClient.updateCard, and formats the response with updated card details.
    export async function handleUpdateCard(args: unknown) {
      try {
        const { credentials, params } = extractCredentials(args);
        const { cardId, ...updates } = validateUpdateCard(params);
    
        const client = new TrelloClient(credentials);
        const response = await client.updateCard(cardId, updates);
        const card = response.data;
        
        const result = {
          summary: `Updated card: ${card.name}`,
          card: {
            id: card.id,
            name: card.name,
            description: card.desc || 'No description',
            url: card.shortUrl,
            listId: card.idList,
            boardId: card.idBoard,
            position: card.pos,
            due: card.due,
            dueComplete: card.dueComplete,
            start: card.start,
            closed: card.closed,
            labels: card.labels?.map(label => ({
              id: label.id,
              name: label.name,
              color: label.color
            })) || []
          },
          rateLimit: response.rateLimit
        };
        
        return {
          content: [
            {
              type: 'text' as const,
              text: JSON.stringify(result, null, 2)
            }
          ]
        };
      } catch (error) {
        const errorMessage = error instanceof z.ZodError 
          ? formatValidationError(error)
          : error instanceof Error 
            ? error.message 
            : 'Unknown error occurred';
            
        return {
          content: [
            {
              type: 'text' as const,
              text: `Error updating card: ${errorMessage}`
            }
          ],
          isError: true
        };
      }
    }
  • The updateCardTool definition with inputSchema describing all updatable properties: cardId (required), name, desc, closed, due, dueComplete, start, idList, pos.
    export const updateCardTool: Tool = {
      name: 'update_card',
      description: 'Update properties of an existing Trello card. Use this to change card details like name, description, due date, or status.',
      inputSchema: {
        type: 'object',
        properties: {
          apiKey: {
            type: 'string',
            description: 'Trello API key (optional if TRELLO_API_KEY env var is set)'
          },
          token: {
            type: 'string',
            description: 'Trello API token (optional if TRELLO_TOKEN env var is set)'
          },
          cardId: {
            type: 'string',
            description: 'ID or URL of the card to update (e.g. "abc123" or "https://trello.com/c/abc123/1-title")'
          },
          name: {
            type: 'string',
            description: 'New name/title for the card'
          },
          desc: {
            type: 'string',
            description: 'New description for the card'
          },
          closed: {
            type: 'boolean',
            description: 'Set to true to archive the card, false to unarchive'
          },
          due: {
            type: ['string', 'null'],
            format: 'date-time',
            description: 'Set due date (ISO 8601 format) or null to remove due date'
          },
          dueComplete: {
            type: 'boolean',
            description: 'Mark the due date as complete (true) or incomplete (false)'
          },
          start: {
            type: ['string', 'null'],
            format: 'date-time',
            description: 'Set start date (ISO 8601 format) or null to remove start date'
          },
          idList: {
            type: 'string',
            description: 'Move card to a different list by providing the list ID'
          },
          pos: {
            oneOf: [
              { type: 'number', minimum: 0 },
              { type: 'string', enum: ['top', 'bottom'] }
            ],
            description: 'Change position in the list: "top", "bottom", or specific number'
          }
        },
        required: ['cardId']
      }
    };
  • The updateCardSchema Zod schema used to validate update_card inputs at runtime.
    export const updateCardSchema = z.object({
      cardId: trelloIdSchema,
      name: z.string().min(1).max(16384).optional(),
      desc: z.string().max(16384).optional(),
      closed: z.boolean().optional(),
      due: z.string().datetime().nullable().optional(),
      dueComplete: z.boolean().optional(),
      start: z.string().datetime().nullable().optional(),
      idList: trelloIdOptionalSchema,
      pos: z.union([z.number().min(0), z.string().regex(/^\d+(\.\d+)?$/).transform(Number), z.enum(['top', 'bottom'])]).optional(),
      idMembers: z.array(trelloIdSchema).optional(),
      idLabels: z.array(trelloIdSchema).optional()
    });
  • The UpdateCardRequest TypeScript interface defining the type for the updates object passed to the Trello client.
    export interface UpdateCardRequest {
      name?: string | undefined;
      desc?: string | undefined;
      closed?: boolean | undefined;
      due?: string | null | undefined;
      dueComplete?: boolean | undefined;
      start?: string | null | undefined;
      idList?: string | undefined;
      pos?: number | string | undefined;
      idMembers?: string[] | undefined;
      idLabels?: string[] | undefined;
    }
  • src/index.ts:276-279 (registration)
    Tool handler dispatch: the 'update_card' case in the main request handler calls handleUpdateCard.
    // Phase 2: Core operations
    case 'update_card':
      result = await handleUpdateCard(argsWithCredentials);
      break;
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description lacks disclosure of side effects, authentication requirements, idempotency, or return value. For a mutation tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence, 16 words, no fluff. It efficiently conveys the purpose and typical use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 11 parameters and no output schema, the description is too brief. It misses important behaviors like the ability to archive, move lists, or set positions, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds no extra meaning beyond listing examples, which is minimal value. Baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it updates an existing Trello card and lists typical properties (name, description, due date, status). However, it does not differentiate from siblings like move_card or archive_card, which handle specific aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., move_card for moves, trello_archive_card for archiving). Only vaguely says 'use this to change card details' without context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/agrath/Trello-Desktop-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server