Posterly vs TwitterAPIs

A side-by-side look at the Posterly and TwitterAPIs MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Posterly logoPosterlySocial Media · Local subprocess (stdio)Validate, schedule, publish, and analyze social content across 18 platforms with posterly.63GoodAuth: not declaredTwitterAPIs logoTwitterAPIsSocial Media · Local subprocess (stdio)Official MCP server for twitterapis.com. Read and write Twitter/X: search, users, tweets, DMs.63GoodAuth: not declared

Verdict: choose Posterly for social media work as a local process; choose TwitterAPIs for social media as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Posterly logoChoose Posterly when

  • You need dedicated capabilities in the Social Media domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: POSTERLY_API_KEY.
  • You want tools like get_agent_signup_info, start_signup, get_signup_session.
Explore Posterly

TwitterAPIs logoChoose TwitterAPIs when

  • You need dedicated capabilities in the Social Media domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: TWITTERAPIS_KEY.
  • You want tools like twitter_advanced_search, twitter_user_search, twitter_user_info.
Explore TwitterAPIs

Feature & specification comparison

Rows where the two servers differ are marked.

SpecPosterly logoPosterlyTwitterAPIs logoTwitterAPIs
CategorySocial MediaSocial Media
Quality signal63/100 · Good63/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNot declared
PricingNot declaredNot declared
Required env varsPOSTERLY_API_KEYTWITTERAPIS_KEY
Verified ownerCommunity listingCommunity listing
GitHub stars00
Directory activity 1 views 0 installs 0 upvotes 4 views 0 installs 0 upvotes
Tools67113

Tools & capabilities

Posterly tools 67

  • get_agent_signup_infoExplain how to use posterly MCP for agent-led signup before an API key exists, including the safe human-in-the-browser boundaries.
  • start_signupStart the public posterly paid signup flow for a user before posterly API access exists. Returns a signup poll URL, a browser Checkout fallback URL, and, when enabled, a prepaid PaymentIntent the agent can pay with a Link Agent Wallet virtual card (credential_type: card). The user still sets a password and approves social OAuth in the browser. Never ask for card numbers, a posterly password, or social passwords in chat.
  • get_signup_sessionPoll a public posterly signup session created by start_signup. Use this to narrate payment (Link virtual card or browser Checkout), password setup, and agent access status before a posterly API key is installed. Keep updates user-facing; do not narrate raw HTTP, curl, or API plumbing.
  • whoamiWho you are and how posterly is connected. view=identity (default): the authenticated user, API key scopes, workspaces, and onboarding next step. ALWAYS call this at the start of a session; if onboarding.completed is false, walk the remaining onboarding steps IN THIS conversation (about you, connect, brand voice, first post) and do not send the user to /onboarding-v2 or the dashboard composer wizard. view=status: MCP server version, latest npm version, endpoint and API key health, and update guidance; works before POSTERLY_API_KEY is configured.
  • list_accountsConnected social accounts and what posterly has learned about them. view=accounts (default): connected accounts, optionally one workspace_id or one account_id; Instagram rows identify direct-login versus Meta-linked connections and whether native media tags/collaborators are available, so check this before Instagram user_tags or collaborators. view=learned_voice (account_id): the voice learned from the account's real published captions (summary, traits, style guidelines, habits); read-only, never overwrites the saved brand profile. view=performance_profile (account_id): 90-day coaching stats, engagement-rate trend, and summary (Pro plan or higher; platforms without per-post analytics never get one). view=connect_session (session_id): poll a session from create_connect_session and keep the user updated in plain language; stop when status is connected, failed, cancelled, or expired.
  • disconnect_accountDisconnect a connected social account from posterly. DESTRUCTIVE and IRREVERSIBLE: removes the account connection, emits account.disconnected webhooks, and may transfer Instagram scheduled posts to a replacement account. REQUIRED BEFORE CALLING: Call `list_accounts` first, show the user the exact platform, username, account ID, and workspace that will be disconnected, then get explicit confirmation. Pass confirm=true only after that confirmation.
  • connect_accountConnect a credential-based social account (telegram, bluesky, discord, wordpress, devto, hashnode, lemmy) directly, without a browser session. Call list_platforms with view=connect_link first to discover the exact credential fields the platform needs. Prefer scoped secrets: app passwords (Bluesky, WordPress), bot tokens (Telegram), webhook URLs (Discord), and API tokens (Dev.to, Hashnode) over primary passwords. Warn the user that any credential they share passes through this conversation. For OAuth platforms (Instagram, X, LinkedIn, ...) use create_connect_session instead.
  • create_connect_sessionCreate a short-lived posterly dashboard handoff session for connecting a social account. Send the secure connection URL to the user, then poll list_accounts with view=connect_session to narrate progress. Do not ask for social media passwords or OAuth codes; posterly handles those browser steps.
  • create_api_keyCreate a new posterly API key for the authenticated user. SECRET-CREATING WRITE: only use after explicit user confirmation. The new key can only request scopes already present on the calling dashboard-created API key; OAuth and managed assistant tokens cannot mint keys. Team management (members:read, members:write) and client portal sign-in link permissions are never copied or granted here: a person turns them on in /dashboard/api.
  • delete_api_keyRevoke a posterly API key owned by the authenticated user. DESTRUCTIVE: call whoami or use a known key ID, show the user the exact key ID/prefix/name if available, and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys.
  • list_workspace_membersList the people in a workspace: members (with role, status, brand access and API access) and pending invites, plus seats in use. API access says whether a teammate can use this workspace's API plan from their own keys and AI apps; owners and admins also see each member's key count, connected AI apps and last use. Needs an API key with the Manage team permission. Any workspace member can list; brand-limited teammates only see brand ids they can access.
  • manage_workspace_memberInvite, update, or remove a workspace colleague. This SENDS EMAILS and CHANGES WHO CAN ACCESS the workspace. Needs an API key with the Manage team permission, and the caller must be a workspace owner or admin. ALWAYS preview first: call without confirm, show the preview to the user, and only call again with confirm: true plus the returned preview_id after the user explicitly approves. action=invite: email and role required (publisher, editor or viewer), optional brand_ids and resend; always sends a pending invite email, never adds anyone instantly. action=update: member_id or invite_id (from list_workspace_members) plus role and/or brand_ids; or member_id plus api_access (true or false, on its own) to turn API and AI app access on or off for that teammate, which lets them use the workspace API plan from their own keys and AI apps (off by default; you cannot change your own; only the owner can change it for an admin; turning it off stops their keys, AI app connections and webhooks for this workspace). action=remove: member_id (removes the teammate and revokes their API keys for this workspace) or invite_id (cancels a pending invite). Admin seats can only be granted in the posterly dashboard. The workspace owner is emailed about every change.
  • +55 more on the listing page

TwitterAPIs tools 113

  • twitter_advanced_searchSearches recent tweets with X's advanced-search operators: from:, to:, since:YYYY-MM-DD, until:YYYY-MM-DD, min_faves:N, min_retweets:N, filter:links, -filter:replies, lang:en, and free text. Returns tweet text, author info, engagement metrics and a pagination cursor. product='Latest' gives chronological results; 'Top' (the default) is engagement-ranked. Example queries: 'AI agents min_faves:100', 'from:openai filter:links since:2024-01-01', '#buildinpublic -filter:replies lang:en'. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search
  • twitter_user_searchSearches Twitter/X user accounts by display name or handle (X's People search). Bio text is not searched, so a word that appears only in a bio returns no match. Returns matching profiles (username, display name, bio, follower count, verification status) with a pagination cursor. Covers brand handles, partial handles, and people known only by name. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/search/user-search
  • twitter_user_infoReturns a user's complete public profile by @handle: display name, bio, follower count, following count, verification status, location, website, account creation date, pinned tweet, and the numeric user_id. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-info
  • twitter_user_info_by_idReturns a user's complete public profile by numeric user id: display name, bio, follower and following counts, verification status, location, website, account creation date and pinned tweet. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-info-by-id
  • twitter_user_statusReports whether a Twitter/X account is alive, suspended, or deleted. Returns a status field that is one of 'alive', 'suspended', 'not_found' or 'unavailable', plus the numeric id when the account is alive and X's own reason when it gives one. It distinguishes a suspended or deleted account from a handle that does not exist, which a profile read answers the same way. Every outcome is a successful response: the answer is in the status field, and a suspension is not an error. A protected (private) account counts as alive, since protection is a visibility setting and not an account state. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-status
  • twitter_user_aboutReturns a user's full 'About' object: the structured profile facts X surfaces beyond the bio, including account category and professional/business labels, verification and identity-verification flags, joined date, location and linked website, follower/following counts, and X's 'About this account' transparency panel (the account's country, how the account was created, and its username-change history). Takes a username or a user_id. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-user-about
  • twitter_user_about_batchReturns the 'About' object (account country, how the account was created, username-change history, verification and the other About fields) for up to 100 accounts in one call. Takes usernames or user_ids as a comma-separated list, not both. Results come back in request order, each with an about object or an error code (not_found is billed; forbidden is free, X refuses that account to everyone; rate_limited and unavailable are free and retryable). Billed per account X answered for. One batch per API key runs at a time: a concurrent call gets 429 batch_in_progress (not billed). fields/compact apply inside each item's about object (fields=account_based_in); a results.* path returns about: {}. Cost: $0.0008 per billed item. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-user-about-batch
  • twitter_user_affiliatesLists the affiliated accounts of an organization profile (the smaller accounts X displays under a company's 'Affiliated' badge, e.g. employees or sub-brands). Takes a username or user_id. Returns profile data per affiliate plus a pagination cursor, and an empty list for accounts with no affiliations. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-affiliates
  • twitter_check_follow_relationshipReturns the follow relationship between two accounts: whether the source follows the target, whether the target follows the source, and blocking/muting flags where available. Each side is a numeric user id or a username (an unknown username or id returns a not-found error, not billed). Covers checking a follow before or after a follow action, and detecting mutuals. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-check-follow-relationship
  • twitter_check_follow_relationship_batchChecks one account against up to 100 others in one call. Either one source (source_user_id or source_username) with up to 100 targets (target_usernames or target_user_ids), or one target with up to 100 sources (source_usernames or source_user_ids): a list on one side only. Each result carries the relationship from the SOURCE's side (following = source follows target, followed_by = target follows source), in request order. Example: which accounts on a shortlist already follow a brand, with the brand as target_username and the shortlist as source_usernames. Billed per pair answered with a relationship; not_found, forbidden, rate_limited and unavailable pairs are free. One batch per API key runs at a time (a concurrent call gets 429 batch_in_progress, not billed). fields/compact apply inside each item's relationship object. Cost: $0.0008 per billed item. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-check-follow-relationship-batch
  • twitter_audience_summarySummarises an audience in one call: samples up to 100 followers of an account (username or user_id) or retweeters of a tweet (tweet_id), reads each sampled account's About country, and returns a country histogram (shares over accounts with a known country) plus a likely-bot share from documented profile signals (default avatar, no bio, under 5 followers, extreme follow ratio, no posts, created in the last 30 days, digit-suffix handle; 3 or more signals = likely automated, a heuristic, not a verdict). Billed per item: each sample page that added accounts plus each sampled account X answered About for, so sample=100 costs at most $0.08 plus up to 3 pages. Shares the one-batch-per-key slot with the batch endpoints. Cost: $0.0008 per billed item. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-audience-summary
  • twitter_user_tweetsReturns a user's recent posting timeline, cursor-paginated further back. The endpoint does not filter server-side, so the response routinely includes retweets and replies alongside original posts. Every item carries is_retweet, is_reply and is_quote booleans, and author.username names who wrote it (a retweet's retweeted_tweet holds the original author). Returns tweet text, id, timestamp and engagement metrics. Cost: $0.0008 per call. Docs: https://docs.twitterapis.com/docs/reference/user-reads/user-tweets
  • +101 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Posterly

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "posterly-2": {
      "command": "npx",
      "args": [
        "-y",
        "posterly-mcp-server@latest"
      ],
      "env": {
        "POSTERLY_API_KEY": "YOUR_POSTERLY_API_KEY_HERE"
      }
    }
  }
}

TwitterAPIs

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "twitterapis": {
      "command": "npx",
      "args": [
        "-y",
        "@twitterapis/mcp@latest"
      ],
      "env": {
        "TWITTERAPIS_KEY": "YOUR_TWITTERAPIS_KEY_HERE"
      }
    }
  }
}

Frequently asked questions

Posterly is categorized under Social Media and uses a local stdio subprocess. TwitterAPIs belongs to Social Media and uses a local stdio subprocess. Pick Posterly for social media work and TwitterAPIs for social media.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Posterly has no declared pricing — check the project's own site. TwitterAPIs has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add posterly-2 and twitterapis as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Posterly has a quality signal of 63/100 (Good) with 1 views, 0 installs and 0 GitHub stars. TwitterAPIs has 63/100 (Good) with 4 views, 0 installs and 0 GitHub stars.