Skip to main content
Glama

Twitter MCP Server

client.v1.js10.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TwitterApiv1 = void 0; const globals_1 = require("../globals"); const dm_paginator_v1_1 = require("../paginators/dm.paginator.v1"); const types_1 = require("../types"); const client_v1_write_1 = __importDefault(require("./client.v1.write")); /** * Twitter v1.1 API client with read/write/DMs rights. */ class TwitterApiv1 extends client_v1_write_1.default { constructor() { super(...arguments); this._prefix = globals_1.API_V1_1_PREFIX; } /** * Get a client with read/write rights. */ get readWrite() { return this; } /* Direct messages */ // Part: Sending and receiving events /** * Publishes a new message_create event resulting in a Direct Message sent to a specified user from the authenticating user. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event */ sendDm({ recipient_id, custom_profile_id, ...params }) { const args = { event: { type: types_1.EDirectMessageEventTypeV1.Create, [types_1.EDirectMessageEventTypeV1.Create]: { target: { recipient_id }, message_data: params, }, }, }; if (custom_profile_id) { args.event[types_1.EDirectMessageEventTypeV1.Create].custom_profile_id = custom_profile_id; } return this.post('direct_messages/events/new.json', args, { forceBodyMode: 'json', }); } /** * Returns a single Direct Message event by the given id. * * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/get-event */ getDmEvent(id) { return this.get('direct_messages/events/show.json', { id }); } /** * Deletes the direct message specified in the required ID parameter. * The authenticating user must be the recipient of the specified direct message. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/delete-message-event */ deleteDm(id) { return this.delete('direct_messages/events/destroy.json', { id }); } /** * Returns all Direct Message events (both sent and received) within the last 30 days. * Sorted in reverse-chronological order. * * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events */ async listDmEvents(args = {}) { const queryParams = { ...args }; const initialRq = await this.get('direct_messages/events/list.json', queryParams, { fullResponse: true }); return new dm_paginator_v1_1.DmEventsV1Paginator({ realData: initialRq.data, rateLimit: initialRq.rateLimit, instance: this, queryParams, }); } // Part: Welcome messages (events) /** * Creates a new Welcome Message that will be stored and sent in the future from the authenticating user in defined circumstances. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message */ newWelcomeDm(name, data) { const args = { [types_1.EDirectMessageEventTypeV1.WelcomeCreate]: { name, message_data: data, }, }; return this.post('direct_messages/welcome_messages/new.json', args, { forceBodyMode: 'json', }); } /** * Returns a Welcome Message by the given id. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message */ getWelcomeDm(id) { return this.get('direct_messages/welcome_messages/show.json', { id }); } /** * Deletes a Welcome Message by the given id. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message */ deleteWelcomeDm(id) { return this.delete('direct_messages/welcome_messages/destroy.json', { id }); } /** * Updates a Welcome Message by the given ID. * Updates to the welcome_message object are atomic. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/update-welcome-message */ updateWelcomeDm(id, data) { const args = { message_data: data }; return this.put('direct_messages/welcome_messages/update.json', args, { forceBodyMode: 'json', query: { id }, }); } /** * Returns all Direct Message events (both sent and received) within the last 30 days. * Sorted in reverse-chronological order. * * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events */ async listWelcomeDms(args = {}) { const queryParams = { ...args }; const initialRq = await this.get('direct_messages/welcome_messages/list.json', queryParams, { fullResponse: true }); return new dm_paginator_v1_1.WelcomeDmV1Paginator({ realData: initialRq.data, rateLimit: initialRq.rateLimit, instance: this, queryParams, }); } // Part: Welcome message (rules) /** * Creates a new Welcome Message Rule that determines which Welcome Message will be shown in a given conversation. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message-rule */ newWelcomeDmRule(welcomeMessageId) { return this.post('direct_messages/welcome_messages/rules/new.json', { welcome_message_rule: { welcome_message_id: welcomeMessageId }, }, { forceBodyMode: 'json', }); } /** * Returns a Welcome Message Rule by the given id. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message-rule */ getWelcomeDmRule(id) { return this.get('direct_messages/welcome_messages/rules/show.json', { id }); } /** * Deletes a Welcome Message Rule by the given id. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message-rule */ deleteWelcomeDmRule(id) { return this.delete('direct_messages/welcome_messages/rules/destroy.json', { id }); } /** * Retrieves all welcome DM rules for this account. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/list-welcome-message-rules */ async listWelcomeDmRules(args = {}) { const queryParams = { ...args }; return this.get('direct_messages/welcome_messages/rules/list.json', queryParams); } /** * Set the current showed welcome message for logged account ; wrapper for Welcome DM rules. * Test if a rule already exists, delete if any, then create a rule for current message ID. * * If you don't have already a welcome message, create it with `.newWelcomeMessage`. */ async setWelcomeDm(welcomeMessageId, deleteAssociatedWelcomeDmWhenDeletingRule = true) { var _a; const existingRules = await this.listWelcomeDmRules(); if ((_a = existingRules.welcome_message_rules) === null || _a === void 0 ? void 0 : _a.length) { for (const rule of existingRules.welcome_message_rules) { await this.deleteWelcomeDmRule(rule.id); if (deleteAssociatedWelcomeDmWhenDeletingRule) { await this.deleteWelcomeDm(rule.welcome_message_id); } } } return this.newWelcomeDmRule(welcomeMessageId); } // Part: Read indicator /** * Marks a message as read in the recipient’s Direct Message conversation view with the sender. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-read-receipt */ markDmAsRead(lastEventId, recipientId) { return this.post('direct_messages/mark_read.json', { last_read_event_id: lastEventId, recipient_id: recipientId, }, { forceBodyMode: 'url' }); } /** * Displays a visual typing indicator in the recipient’s Direct Message conversation view with the sender. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-typing-indicator */ indicateDmTyping(recipientId) { return this.post('direct_messages/indicate_typing.json', { recipient_id: recipientId, }, { forceBodyMode: 'url' }); } // Part: Images /** * Get a single image attached to a direct message. TwitterApi client must be logged with OAuth 1.0a. * https://developer.x.com/en/docs/twitter-api/v1/direct-messages/message-attachments/guides/retrieving-media */ async downloadDmImage(urlOrDm) { if (typeof urlOrDm !== 'string') { const attachment = urlOrDm[types_1.EDirectMessageEventTypeV1.Create].message_data.attachment; if (!attachment) { throw new Error('The given direct message doesn\'t contain any attachment'); } urlOrDm = attachment.media.media_url_https; } const data = await this.get(urlOrDm, undefined, { forceParseMode: 'buffer', prefix: '' }); if (!data.length) { throw new Error('Image not found. Make sure you are logged with credentials able to access direct messages, and check the URL.'); } return data; } } exports.TwitterApiv1 = TwitterApiv1; exports.default = TwitterApiv1;

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