Skip to main content
Glama
crazyrabbitLTC

Twitter MCP Server

getConversation

Retrieve complete conversation history from Twitter by providing a conversation ID, enabling analysis of message exchanges and context.

Instructions

Get full conversation history for a specific conversation

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conversationIdYesThe ID of the conversation to retrieve
maxResultsNoMaximum number of messages to return (default: 100, max: 100)
paginationTokenNoPagination token for retrieving next page of results
dmEventFieldsNoFields to include in the DM event objects

Implementation Reference

  • The handler function that implements the getConversation tool logic. It uses the Twitter v2 API to list DM events, filters by conversationId, and returns the conversation history.
    export const handleGetConversation: TwitterHandler<GetConversationArgs> = async (
        client: TwitterClient | null,
        { conversationId, maxResults = 100, paginationToken, dmEventFields }: GetConversationArgs
    ): Promise<HandlerResponse> => {
        if (!client) {
            return createMissingTwitterApiKeyResponse('getConversation');
        }
        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';
            }
    
            // Get conversation messages using the conversation ID endpoint
            // Note: This would typically use a specific conversation endpoint
            // For now, we'll use the general listDmEvents and filter by conversation ID
            const conversation = await client.v2.listDmEvents({
                ...options,
                // Note: The actual API might have a different method for getting conversation-specific events
            });
    
            if (!conversation.data || !Array.isArray(conversation.data) || conversation.data.length === 0) {
                return createResponse(`No messages found in conversation ${conversationId}.`);
            }
    
            // Filter by conversation ID if needed (depending on API implementation)
            const filteredMessages = conversation.data.filter((event: any) => 
                event.dm_conversation_id === conversationId
            );
    
            const responseData = {
                conversationId,
                messages: filteredMessages.length > 0 ? filteredMessages : conversation.data,
                meta: conversation.meta
            };
    
            return createResponse(`Retrieved ${responseData.messages.length} messages from conversation ${conversationId}: ${JSON.stringify(responseData, null, 2)}`);
        } catch (error) {
            if (error instanceof Error) {
                if (error.message.includes('404')) {
                    throw new Error(`Failed to get conversation: Conversation ${conversationId} not found.`);
                }
                throw new Error(formatTwitterError(error, 'getting conversation'));
            }
            throw error;
        }
    };
  • The tool schema defining the description and input parameters for getConversation, used for MCP tool registration.
    getConversation: {
        description: 'Get full conversation history for a specific conversation',
        inputSchema: {
            type: 'object',
            properties: {
                conversationId: { 
                    type: 'string', 
                    description: 'The ID of the conversation to retrieve' 
                },
                maxResults: { 
                    type: 'number', 
                    description: 'Maximum number of messages 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: ['conversationId']
        }
    },
  • src/index.ts:358-366 (registration)
    The dispatch case in the MCP server's CallToolRequest handler that routes 'getConversation' calls to the handleGetConversation function.
    case 'getConversation': {
        const { conversationId, maxResults, paginationToken, dmEventFields } = request.params.arguments as {
            conversationId: string;
            maxResults?: number;
            paginationToken?: string;
            dmEventFields?: string[];
        };
        response = await handleGetConversation(client, { conversationId, maxResults, paginationToken, dmEventFields });
        break;
  • TypeScript interface defining the input arguments for the getConversation handler.
    export interface GetConversationArgs {
        conversationId: string;
        maxResults?: number;
        paginationToken?: string;
        dmEventFields?: string[];
    }

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/crazyrabbitLTC/mcp-twitter-server'

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