get-boards
Retrieve Trello boards with customizable filtering, field selection, and list inclusion options for project management integration.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated list of fields to include (e.g., "id,name,url"). Default: "id,name,url,closed,starred" | |
| filter | No | Filter boards by type: "open", "closed", "starred", "all". Default: "open" | |
| limit | No | Maximum number of boards to return (1-100). Default: 50 | |
| organization | No | Include organization boards. Default: true | |
| lists | No | Include lists: "open", "closed", "all", "none". Default: "none" |
Implementation Reference
- src/tools/boards.ts:19-81 (handler)The asynchronous handler function that executes the 'get-boards' tool. It constructs Trello API query parameters based on input, fetches the user's boards, applies limits, and returns a structured JSON response or error message.async (params) => { try { // Default parameters to reduce response size const fields = params.fields || 'id,name,url,closed,starred'; const filter = params.filter || 'open'; const limit = params.limit || 50; const organization = params.organization !== false; const lists = params.lists || 'none'; // Build query parameters const queryParams = new URLSearchParams({ key: credentials.apiKey, token: credentials.apiToken, fields: fields, filter: filter, lists: lists, }); // Add organization parameter if needed if (organization) { queryParams.append('organization', 'true'); } const response = await fetch( `https://api.trello.com/1/members/me/boards?${queryParams}` ); const data = await response.json(); // Apply client-side limit if needed const limitedData = Array.isArray(data) ? data.slice(0, limit) : data; return { content: [ { type: 'text', text: JSON.stringify({ boards: limitedData, count: Array.isArray(limitedData) ? limitedData.length : 0, parameters_used: { fields, filter, limit, organization, lists }, note: 'Use fields parameter to customize response size. Available fields: id,name,desc,closed,starred,url,shortUrl,prefs,dateLastActivity,idOrganization' }, null, 2), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error getting boards: ${error}`, }, ], isError: true, }; } } );
- src/tools/boards.ts:12-18 (schema)Zod schema defining the input parameters for the 'get-boards' tool, including optional fields for customization.{ fields: z.string().optional().describe('Comma-separated list of fields to include (e.g., "id,name,url"). Default: "id,name,url,closed,starred"'), filter: z.string().optional().describe('Filter boards by type: "open", "closed", "starred", "all". Default: "open"'), limit: z.number().min(1).max(100).optional().describe('Maximum number of boards to return (1-100). Default: 50'), organization: z.boolean().optional().describe('Include organization boards. Default: true'), lists: z.string().optional().describe('Include lists: "open", "closed", "all", "none". Default: "none"'), },
- src/tools/boards.ts:10-81 (registration)Local registration of the 'get-boards' tool using server.tool(), including schema and handler, within the registerBoardsTools function.server.tool( 'get-boards', { fields: z.string().optional().describe('Comma-separated list of fields to include (e.g., "id,name,url"). Default: "id,name,url,closed,starred"'), filter: z.string().optional().describe('Filter boards by type: "open", "closed", "starred", "all". Default: "open"'), limit: z.number().min(1).max(100).optional().describe('Maximum number of boards to return (1-100). Default: 50'), organization: z.boolean().optional().describe('Include organization boards. Default: true'), lists: z.string().optional().describe('Include lists: "open", "closed", "all", "none". Default: "none"'), }, async (params) => { try { // Default parameters to reduce response size const fields = params.fields || 'id,name,url,closed,starred'; const filter = params.filter || 'open'; const limit = params.limit || 50; const organization = params.organization !== false; const lists = params.lists || 'none'; // Build query parameters const queryParams = new URLSearchParams({ key: credentials.apiKey, token: credentials.apiToken, fields: fields, filter: filter, lists: lists, }); // Add organization parameter if needed if (organization) { queryParams.append('organization', 'true'); } const response = await fetch( `https://api.trello.com/1/members/me/boards?${queryParams}` ); const data = await response.json(); // Apply client-side limit if needed const limitedData = Array.isArray(data) ? data.slice(0, limit) : data; return { content: [ { type: 'text', text: JSON.stringify({ boards: limitedData, count: Array.isArray(limitedData) ? limitedData.length : 0, parameters_used: { fields, filter, limit, organization, lists }, note: 'Use fields parameter to customize response size. Available fields: id,name,desc,closed,starred,url,shortUrl,prefs,dateLastActivity,idOrganization' }, null, 2), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error getting boards: ${error}`, }, ], isError: true, }; } } );
- src/index.ts:88-88 (registration)Top-level registration call in the main server setup that invokes registerBoardsTools to add the 'get-boards' tool (and other boards tools) to the MCP server.registerBoardsTools(server, credentials);