getDirectMessages
Retrieve Twitter direct message conversations with customizable fields and pagination for efficient management and analysis of DM interactions.
Instructions
Retrieve direct message conversations
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dmEventFields | No | Fields to include in the DM event objects | |
| maxResults | No | Maximum number of results to return (default: 100, max: 100) | |
| paginationToken | No | Pagination token for retrieving next page of results |
Implementation Reference
- The handler function that implements the core logic for the getDirectMessages tool. It uses the Twitter v2 API (client.v2.listDmEvents) to fetch direct message events with support for pagination, custom fields, and default fields. Handles missing client and errors gracefully.export const handleGetDirectMessages: TwitterHandler<GetDirectMessagesArgs> = async ( client: TwitterClient | null, { maxResults = 100, paginationToken, dmEventFields }: GetDirectMessagesArgs ): Promise<HandlerResponse> => { if (!client) { return createMissingTwitterApiKeyResponse('getDirectMessages'); } try { const options: any = { max_results: Math.min(maxResults, 100) // API limit is 100 }; if (paginationToken) { options.pagination_token = paginationToken; } if (dmEventFields && dmEventFields.length > 0) { options['dm_event.fields'] = dmEventFields.join(','); } else { // Default fields for better response options['dm_event.fields'] = 'id,text,created_at,sender_id,dm_conversation_id,referenced_tweet,attachments'; } // Using v2 API for DM conversations const conversations = await client.v2.listDmEvents(options); if (!conversations.data || !Array.isArray(conversations.data) || conversations.data.length === 0) { return createResponse('No direct message conversations found.'); } const responseData = { conversations: conversations.data, meta: conversations.meta }; return createResponse(`Retrieved ${conversations.data.length} direct message events: ${JSON.stringify(responseData, null, 2)}`); } catch (error) { if (error instanceof Error) { throw new Error(formatTwitterError(error, 'getting direct messages')); } throw error; } };
- src/tools.ts:464-490 (schema)MCP tool definition and input schema validation for getDirectMessages, including parameters like maxResults (1-100), paginationToken, and dmEventFields with specific enum values.getDirectMessages: { description: 'Retrieve direct message conversations', inputSchema: { type: 'object', properties: { maxResults: { type: 'number', description: 'Maximum number of results to return (default: 100, max: 100)', minimum: 1, maximum: 100 }, paginationToken: { type: 'string', description: 'Pagination token for retrieving next page of results' }, dmEventFields: { type: 'array', items: { type: 'string', enum: ['id', 'text', 'created_at', 'sender_id', 'dm_conversation_id', 'referenced_tweet', 'attachments'] }, description: 'Fields to include in the DM event objects' } }, required: [] } },
- src/types/handlers.ts:80-84 (schema)TypeScript interface defining the arguments for the getDirectMessages handler.export interface GetDirectMessagesArgs { maxResults?: number; paginationToken?: string; dmEventFields?: string[]; }
- src/index.ts:338-345 (registration)Dispatch logic in the main CallToolRequestSchema handler that routes 'getDirectMessages' calls to the specific handleGetDirectMessages function.case 'getDirectMessages': { const { maxResults, paginationToken, dmEventFields } = request.params.arguments as { maxResults?: number; paginationToken?: string; dmEventFields?: string[]; }; response = await handleGetDirectMessages(client, { maxResults, paginationToken, dmEventFields }); break;