getDirectMessageEvents
Retrieve specific direct message events with detailed information including text, sender data, attachments, and conversation metadata from Twitter.
Instructions
Get specific direct message events with detailed information
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum number of results to return (default: 100, max: 100) | |
| paginationToken | No | Pagination token for retrieving next page of results | |
| dmEventFields | No | Fields to include in the DM event objects | |
| expansions | No | Additional fields to expand in the response | |
| userFields | No | User fields to include when expanding sender information |
Implementation Reference
- Core handler function that implements the getDirectMessageEvents tool by calling Twitter v2 API listDmEvents with appropriate parameters and formatting the response.
/** * Get specific direct message events */ export const handleGetDirectMessageEvents: TwitterHandler<GetDirectMessageEventsArgs> = async ( client: TwitterClient | null, { maxResults = 100, paginationToken, dmEventFields, expansions, userFields }: GetDirectMessageEventsArgs ): Promise<HandlerResponse> => { if (!client) { return createMissingTwitterApiKeyResponse('getDirectMessageEvents'); } try { const options: any = { max_results: Math.min(maxResults, 100) }; if (paginationToken) { options.pagination_token = paginationToken; } if (dmEventFields && dmEventFields.length > 0) { options['dm_event.fields'] = dmEventFields.join(','); } else { options['dm_event.fields'] = 'id,text,created_at,sender_id,dm_conversation_id,referenced_tweet,attachments'; } if (expansions && expansions.length > 0) { options.expansions = expansions.join(','); } if (userFields && userFields.length > 0) { options['user.fields'] = userFields.join(','); } const events = await client.v2.listDmEvents(options); if (!events.data || !Array.isArray(events.data) || events.data.length === 0) { return createResponse('No direct message events found.'); } const responseData = { events: events.data, includes: events.includes, meta: events.meta }; return createResponse(`Retrieved ${events.data.length} direct message events: ${JSON.stringify(responseData, null, 2)}`); } catch (error) { if (error instanceof Error) { throw new Error(formatTwitterError(error, 'getting direct message events')); } throw error; } }; - src/types/handlers.ts:86-92 (schema)TypeScript interface defining the input parameters for the getDirectMessageEvents handler.
export interface GetDirectMessageEventsArgs { maxResults?: number; paginationToken?: string; dmEventFields?: string[]; expansions?: string[]; userFields?: string[]; } - src/tools.ts:491-533 (registration)MCP tool object registration defining the description and input schema (JSON Schema) for getDirectMessageEvents.
getDirectMessageEvents: { description: 'Get specific direct message events with detailed information', 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' }, expansions: { type: 'array', items: { type: 'string', enum: ['sender_id', 'referenced_tweet.id', 'attachments.media_keys'] }, description: 'Additional fields to expand in the response' }, userFields: { type: 'array', items: { type: 'string', enum: ['username', 'name', 'profile_image_url', 'verified'] }, description: 'User fields to include when expanding sender information' } }, required: [] } }, - src/index.ts:347-356 (registration)Server request handler dispatch case that invokes the getDirectMessageEvents handler function with parsed arguments.
case 'getDirectMessageEvents': { const { maxResults, paginationToken, dmEventFields, expansions, userFields } = request.params.arguments as { maxResults?: number; paginationToken?: string; dmEventFields?: string[]; expansions?: string[]; userFields?: string[]; }; response = await handleGetDirectMessageEvents(client, { maxResults, paginationToken, dmEventFields, expansions, userFields }); break;