Marketing Assistant MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| X_CLIENT_ID | Yes | X OAuth 2.0 Client ID. Required. | |
| X_REDIRECT_URI | No | Must match the callback registered in the X developer portal. Default: http://127.0.0.1:8879/callback | http://127.0.0.1:8879/callback |
| X_CLIENT_SECRET | No | Set if your X app is a confidential client. Omit if public client. | |
| MAKERS_PAGE_DATA_DIR | No | Where drafts are stored. Default: ~/.local/share/makers-page-mcp | ~/.local/share/makers-page-mcp |
| MAKERS_PAGE_CONFIG_DIR | No | Where credentials are stored. Default: ~/.config/makers-page-mcp | ~/.config/makers-page-mcp |
| MAKERS_PAGE_MAX_POST_LENGTH | No | Max characters per post. Default: '280' | 280 |
| MAKERS_PAGE_REQUIRE_APPROVAL | No | Set to 'false' to let agents publish drafts without a separate approval step. Default: 'true' | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_draftA | Create a draft social post for a channel (currently only "x"). Supports text, threads (parts), polls, media paths, quote, community, and paid partnership. RULE: never put http(s) links in the main post (text / parts[0]) — put every URL in a follow-up thread part (parts[1], parts[2], …). Only set allowLinksInMainPost=true if the user explicitly forces a link in the main post. The draft is saved locally and is NOT published until it is approved and then explicitly published. |
| list_draftsA | List locally stored drafts, optionally filtered by status. |
| get_draftB | Fetch a single draft by id. |
| update_draftA | Edit a draft's content (text, parts, poll, media, quote, community, paid partnership). Same link rule as create_draft: no http(s) URLs in the main post unless allowLinksInMainPost is true (only when the user explicitly insists). Pass null to clear an optional field. If the draft was already approved, this resets it back to "draft" status so it must be re-approved before publishing. To change a live post, use edit_published_draft. |
| approve_draftA | Mark a draft as approved by the human user. Only approved drafts can be published. Only call this after the user has explicitly reviewed and approved the draft text. |
| reject_draftA | Mark a draft as rejected. Rejected drafts cannot be published. Also usable to reconcile a draft stuck in "publishing" after a crashed publish_draft call once you have verified the post did NOT go out on X. If live post ids were already recorded (partial thread publish), call delete_published_draft instead. |
| publish_draftA | Publish an approved draft to X via the X API v2. Supports threads, polls, media, quotes, community posts, and paid partnership. Fails if the draft has not been approved yet (unless approval is disabled in config). Returns the live post URL(s). |
| delete_published_draftA | Delete every live post id recorded on a draft (the root and any thread replies), then mark the local draft as deleted. Works whenever live ids are recorded — published drafts, partial "publishing" failures, or corrupt/legacy records. Own posts only. |
| edit_published_draftA | Edit the root post of a published draft via POST /2/tweets with edit_options.previous_post_id. Requires X Premium; edits are limited (~30 minutes / 5 edits) and each edit creates a new post id (stored locally). Re-attaches media (re-uploaded from mediaPaths) and quoteTweetId when present. Polls and community posts cannot be edited. Only the thread root is edited. Same link rule: no http(s) URL in the root unless allowLinksInMainPost is true (or was already set on the draft) because the user explicitly insisted. |
| get_x_accountA | Check whether this MCP server is connected to an X account and, if so, return the account's username and id. |
| lookup_x_userA | Resolve an X @handle to a user id (and whether they can receive DMs from you). Useful before create_dm_draft. |
| get_dm_rate_limitA | Show local DM send rate limits and current usage (hourly, daily, min interval between sends). |
| create_dm_draftA | Create a draft direct message. Requires recipientId or recipientUsername (or conversationId for an existing thread). NOT sent until approved and send_dm_draft is called. Supports one optional media attachment. |
| list_dm_draftsA | List locally stored DM drafts, optionally filtered by status. |
| get_dm_draftB | Fetch a single DM draft by id. |
| update_dm_draftA | Edit a DM draft. Pass null to clear optional fields. Resets approved drafts back to draft status. |
| approve_dm_draftA | Mark a DM draft approved. Only approved drafts can be sent. Call only after the user explicitly reviewed the message. |
| reject_dm_draftA | Mark a DM draft rejected. Also usable to reconcile a draft stuck in sending after a failed attempt. |
| send_dm_draftA | Send an approved DM draft via the X API. Enforces local rate limits (hourly, daily, min interval). Requires dm.read and dm.write scopes (re-auth after upgrade). |
| list_dm_eventsA | Read recent DM events in a 1:1 conversation with a participant (newest first, up to 100). Requires dm.read scope. |
| list_dm_inboxA | Read recent DM events across all conversations (inbox view). Requires dm.read scope. |
| list_dm_conversation_eventsA | Read recent DM events in a conversation by conversationId (works for group and 1:1 threads). |
| get_x_post_metricsA | Fetch lifetime public metrics (impressions, likes, reposts, replies, quotes, bookmarks) for up to 100 post ids. Read-only. |
| get_x_account_summaryA | Summarize your account using GET /2/tweets/analytics: calendar-day impressions and engagements (aligned with x.com account analytics), period totals, and top posts for the window. Read-only; no local DB. |
| analyze_x_posting_timesA | Analyze when you post vs average lifetime impressions by hour of day. Derived from your recent timeline; read-only, no DB. |
| create_retweet_draftA | Create a draft retweet or undo-retweet action. NOT executed until approved and retweet_post or undo_retweet is called. Pass the numeric post id from an X URL (e.g. .../status/1234567890). |
| list_retweet_draftsA | List retweet/undo drafts, optionally filtered by status. |
| get_retweet_draftA | Fetch a single retweet/undo draft by id. |
| approve_retweet_draftA | Mark a retweet/undo draft approved. Only approved drafts can be executed. Call only after the user explicitly reviewed the action. |
| reject_retweet_draftA | Mark a retweet/undo draft rejected. Also usable to reconcile a draft stuck in executing after a failed attempt. |
| retweet_postA | Retweet an approved draft to X immediately via POST /2/users/:id/retweets. Requires tweet.write scope. |
| undo_retweetA | Undo an approved retweet draft on X immediately via DELETE /2/users/:id/retweets/:tweet_id. Requires tweet.write scope. |
| be_trendyA | Discover what's trending right now on X within a specific product niche, so you can ride the conversation for engagement. Searches recent X posts scoped to the niche/keywords, not X's generic global trending list (which rarely surfaces niche topics), filters out spam and near-duplicates, and returns algorithmically scored trending topics with real sample tweets and engagement numbers, real demand-signal posts (people asking for recommendations/alternatives), and a post-timing recommendation. This tool does not generate content itself: after calling it, use the returned trendingTopics and painPointSignals, plus the product's name/description/audience from this conversation, to write natural, platform-appropriate content (tweet, thread, LinkedIn post, Bluesky post, Reddit title, Hacker News title) that connects the product to the trend. Avoid AI-sounding phrasing, do not fabricate engagement numbers, and ground any claims in the sample tweets returned. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/alexcloudstar/makers.page-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server