Skip to main content
Glama
angheljf

social-media-mcp

by angheljf

Social Media Server

A Model Context Protocol (MCP) server for managing social media posts, currently supporting X (formerly Twitter).

Example

Features

  • Post messages to X (Twitter)

  • Create threads on X

  • Reply to existing threads

  • List X posts with filtering options

  • Platform information endpoints

Related MCP server: SocialData MCP Server

Prerequisites

  • Node.js 16 or higher

  • Twitter API credentials

    • API Key

    • API Secret

    • Access Token

    • Access Secret

Installation

Installing via Smithery

To install Social Media Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install social-media-server --client claude

Manual Installation

  1. Clone the repository

  2. Install dependencies:

npm install
  1. Create a .env file with your Twitter credentials:

TWITTER_API_KEY=your_api_key
TWITTER_API_SECRET=your_api_secret
TWITTER_ACCESS_TOKEN=your_access_token
TWITTER_ACCESS_SECRET=your_access_secret

Building

To build the project, run:

npm run build

Available Tools

  • post_to_x - Post a message to X

    • Required: content (string)

    • Optional: threadId (string)

  • create_x_thread - Create a new thread on X

    • Required: content (string)

  • list_x_post - List X posts with optional filtering

    • Optional: limit (number)

    • Optional: threadId (string)

Resources

The server provides platform information via:

  • socialmedia://platforms/x

Development

The project uses TypeScript and follows the Model Context Protocol specification. The main server implementation is in index.ts, with types defined in types.ts.

License

This project is licensed under the MIT License

Available Tools

3 tools
create_x_threadC

Create a thread on X (formerly Twitter)

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent of the first post

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full behavioral disclosure burden. It only states that creation happens, but omits critical mutation details: authentication requirements, rate limits, character limits, whether the operation is idempotent, or what happens if the API fails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely brief single sentence with no redundant words. However, the brevity trades off against necessary behavioral disclosure for a social media posting tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Insufficient for a write-operation tool. Missing: output behavior (does it return the thread ID?), mechanism for adding subsequent posts (since it only accepts 'first post' content), error conditions specific to X API, and safety considerations. The 'formerly Twitter' clarification is helpful but doesn't compensate for missing operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions ('Content of the first post'). The description adds no additional parameter context (e.g., expected format, length constraints, that this only creates the first post), meeting the baseline for well-schematized tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific action (Create) and resource (thread on X/Twitter). However, it does not explicitly differentiate from sibling `post_to_x`, leaving ambiguity about when to use the thread creator versus a single post tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this tool versus the sibling `post_to_x` or `list_x_posts`. No prerequisites, conditions, or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_x_postsC

List X (formerly Twitter) posts

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of posts to return
threadIdNoID of the thread to filter by

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but fails to specify critical traits: return format/structure, pagination behavior, chronological ordering, authentication requirements, or whether replies/media are included. It only states the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely terse at only five words. While it avoids bloat, it is arguably underspecified rather than elegantly concise—it front-loads nothing beyond the bare minimum identifier and misses opportunities to add behavioral context in a compact way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a social media listing tool with 2 parameters and no output schema or annotations, the description is insufficient. It fails to clarify the retrieval scope (current user? specific account? global?), the relationship between threadId and the returned dataset, or what data structure is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both parameters (limit and threadId are well-described in the schema). The description adds no parameter-specific context, but with complete schema coverage, this meets the baseline expectation without requiring additional compensation from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the core action ('List') and resource ('X posts') and clarifies the platform with '(formerly Twitter)'. However, it lacks scope details (whose posts? timeline vs specific user?) and doesn't fully leverage the sibling differentiation opportunity, leaving gaps in understanding what exactly gets listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this versus the sibling tools (create_x_thread, post_to_x), nor when to utilize the optional threadId parameter versus retrieving unthreaded posts. The usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_to_xC

Post a message to X (formerly Twitter)

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent of the post
threadIdNoID of the thread to post to

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but reveals minimal behavioral traits. It implies a write operation but omits authentication requirements, visibility rules, rate limits, error conditions, and whether posts are immediate or pending.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is efficient and front-loaded with the core action. However, extreme brevity contributes to informational gaps given the lack of annotations and output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite simple 2-parameter structure, the description is inadequate for a publishing tool without annotations. Missing: thread lifecycle guidance (create vs reply), error handling, and side-effect disclosure critical for a public posting operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both 'content' and 'threadId'. The description adds no additional parameter guidance (e.g., threadId format, when to omit it), warranting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Post' and resource 'message' with platform identification 'X (formerly Twitter)'. However, it fails to distinguish from sibling 'create_x_thread' regarding when to create a new thread versus posting to an existing one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use 'threadId' versus standalone posting, no mention of prerequisite steps (e.g., obtaining thread IDs), and no reference to sibling tools or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

C2.6/5.0
Disambiguation2/5

The tools have significant overlap and unclear boundaries. 'create_x_thread' and 'post_to_x' both involve posting to X, with the distinction between a 'thread' and a 'post' not clearly defined in the descriptions, leading to potential confusion. 'list_x_posts' is more distinct but still part of the same ambiguous posting domain.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern with 'create_x_thread', 'list_x_posts', and 'post_to_x', all using snake_case. However, there is a minor deviation in the verb choice: 'create' vs. 'post' for similar actions, which slightly reduces consistency.

Tool Count2/5

With only 3 tools, the server feels too thin for a social media domain, lacking essential operations like updating, deleting, searching, or interacting with other platforms. This limited scope may hinder agents from performing common social media tasks effectively.

Completeness2/5

The tool surface is severely incomplete for a social media server. It focuses only on X (Twitter) with basic create and list operations, missing critical functions such as update, delete, reply, like, follow, or support for other platforms like Facebook or Instagram, leading to significant gaps in agent workflows.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI models and applications to interact directly with Twitter/X, providing capabilities to create posts, reply to tweets, retrieve user data, and manage account actions.
    17
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol (MCP) server that provides tools for interacting with the SocialData API. This server allows you to fetch Twitter/X data, monitor user activity, and analyze social media engagement programmatically.
    7
  • F
    license
    A
    quality
    D
    maintenance
    Model Context Protocol server that enables LLMs to interact with X.com (formerly Twitter) through OAuth 2.0 authentication, supporting major Post-related operations including reading, writing, searching, and managing posts, likes, retweets, and bookmarks.
    21
    25
    8
  • A
    license
    Not graded
    quality
    D
    maintenance
    Model Context Protocol server that enables programmatic interaction with Twitter API, allowing users to post tweets, search for content, and retrieve user timelines through standardized MCP tools.
    19
    MIT

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/angheljf/social-media-mcp'

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