get-board-content-logs
Retrieve and filter content change logs for board items on Miro MCP by organization, date range, boards, or users. Supports pagination and sorting for streamlined data access.
Instructions
Retrieves content change logs of board items (Enterprise only)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| boardIds | No | List of board IDs to filter by | |
| cursor | No | Cursor for pagination | |
| emails | No | List of user emails to filter by | |
| from | Yes | Start date for filtering (ISO 8601 format) | |
| limit | No | Maximum number of results to return | |
| orgId | Yes | Unique identifier of the organization | |
| sorting | No | Sort order for results | |
| to | Yes | End date for filtering (ISO 8601 format) |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"boardIds": {
"description": "List of board IDs to filter by",
"items": {
"type": "string"
},
"type": "array"
},
"cursor": {
"description": "Cursor for pagination",
"type": "string"
},
"emails": {
"description": "List of user emails to filter by",
"items": {
"type": "string"
},
"type": "array"
},
"from": {
"description": "Start date for filtering (ISO 8601 format)",
"type": "string"
},
"limit": {
"description": "Maximum number of results to return",
"type": "number"
},
"orgId": {
"description": "Unique identifier of the organization",
"type": "string"
},
"sorting": {
"description": "Sort order for results",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"to": {
"description": "End date for filtering (ISO 8601 format)",
"type": "string"
}
},
"required": [
"orgId",
"from",
"to"
],
"type": "object"
}
Implementation Reference
- src/tools/getBoardContentLogs.ts:19-44 (handler)The handler function that executes the tool: destructures args, builds query params, converts dates, calls MiroClient API for enterpriseBoardContentItemLogsFetch, returns JSON response or error.fn: async ({ orgId, from, to, boardIds, emails, cursor, limit, sorting }) => { try { const query: any = {}; if (boardIds) query.boardIds = boardIds; if (emails) query.emails = emails; if (cursor) query.cursor = cursor; if (limit) query.limit = limit; if (sorting) query.sorting = sorting; // Convert string dates to Date objects const fromDate = new Date(from); const toDate = new Date(to); const response = await MiroClient.getApi().enterpriseBoardContentItemLogsFetch( orgId, fromDate, toDate, query ); return ServerResponse.text(JSON.stringify(response.body, null, 2)); } catch (error) { process.stderr.write(`Error retrieving board content logs: ${error}\n`); return ServerResponse.error(error); } }
- The ToolSchema definition including name, description, and Zod-based input schema for tool arguments.const getBoardContentLogsTool: ToolSchema = { name: "get-board-content-logs", description: "Retrieves content change logs of board items (Enterprise only)", args: { orgId: z.string().describe("Unique identifier of the organization"), from: z.string().describe("Start date for filtering (ISO 8601 format)"), to: z.string().describe("End date for filtering (ISO 8601 format)"), boardIds: z.array(z.string()).optional().nullish().describe("List of board IDs to filter by"), emails: z.array(z.string()).optional().nullish().describe("List of user emails to filter by"), cursor: z.string().optional().nullish().describe("Cursor for pagination"), limit: z.number().optional().nullish().describe("Maximum number of results to return"), sorting: z.enum(["asc", "desc"]).optional().nullish().describe("Sort order for results") },
- src/index.ts:207-207 (registration)The line registering the tool with the ToolBootstrapper instance..register(getBoardContentLogsTool);