Makers Page MCP
About
Get your product seen without the marketing busywork.
Details
- Author
- alexcloudstar
- Categories
- Marketing, Other
Jump to
Setup
Install Makers Page MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/alexcloudstar/makers.page-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
The indie stackModel Context Protocolserver — one connection for your founder tools, instead of wiring a hundred separate ones.
Indie founders already juggle socials, Stripe, analytics, GitHub, and a database. Each usually means another MCP, another config block, another context the agent doesn't share. Makers Page MCP aggregates those surfaces into one local server your coding agent already understands, so it can draft a launch post with revenue context, check a deploy, or pull product metrics without hopping tools.
makers-page-mcpruns locally next to Cursor, Claude Code, Codex, or any other MCP client.v1 ships X first: your agent drafts a channel-native post about what you just built, you approve it, and it goes out through the real X API v2. Nothing publishes without a human in the loop. More connectors (payments, analytics, GitHub, DBs, and more) are on theroadmap.
makers.page— the indie stack MCP that already knows your tools.
- Why this exists
- How it compares
- Cost per post
- Quick start
- 1. Create an X developer app
- 2. Install
- 3. Set credentials and authorize
- 4. Connect it to your coding agent
Most agents end up with a pile of MCP servers — one for GitHub, one for Stripe, one for analytics, one for socials — each with its own auth and none sharing context. Makers Page MCP is the opposite bet:one indie stack connection that already knows the tools founders actually use, so the agent can act across the stack instead of juggling integrations.
Today that means approval-gated publishing to X. Next: the rest of the stack (seeRoadmap).
- One MCP, not a hundred.Aggregate the indie stack (socials, payments, analytics, GitHub, DBs) behind a single local server instead of a config file full of one-off connectors.
- Shared context by design.The agent shouldn't re-learn who you are and what you shipped every time it switches tools.
- Agent-native, not another dashboard.Same protocol, same config file as your other MCP servers. No new app to log into.
- Approval-gated by default.Every post is adraftuntil you explicitly callapprove_draft.publish_draftrefuses to post anything that hasn't been approved, unless you turn that off yourself. The same pattern will apply to anything that spends money or posts publicly.
- Built for real, paid API calls.X's write API costs money per post (see below). The draft/approve/publish split exists so an agent can never spam your account or your wallet.
- Crash-safe by design.Publishing uses atomic file writes, keyed locks around concurrent operations on the same draft, and a three-way error split (definitive failure, ambiguous network failure, unexpected error) so a dropped connection can never turn into a silent duplicate post.
- Local-first.Drafts and credentials live on your machine (~/.local/share/makers-page-mcp,~/.config/makers-page-mcp), written with0600permissions, not in someone else's cloud.
- Zero lock-in.It's a stdio MCP server distributed on npm under the MIT license. Read the source, fork it, self-host it.
v1 covers X posting today; the aggregator columns describe where this indie stack MCP is headed.
As of 2026, X's API is pay-per-use for self-serve developer accounts: creating a post costs$0.015(plain text) or$0.20(if the post contains a URL), charged against credits you prepay in theX developer console. There's no free write tier anymore. Everypublish_draftcall is a real charge: treat it accordingly (approve deliberately, don't script bulk test-publishing).
- Go to theX developer portaland create (or open) a project + app.
- UnderUser authentication settings, enableOAuth 2.0.
- SetApp permissionstoRead and write.
- Set theType of ApptoWeb App, Automated App or Bot(this gives you a Client ID, and a Client Secret if confidential).
- Add an exact-matchCallback URI / Redirect URL:http://127.0.0.1:8879/callback(must be aloopbackhost:127.0.0.1,localhost, or::1— non-loopback URIs are rejected at auth time).
- Copy theClient ID(andClient Secret, if shown).
Option A: npm (recommended, no clone needed)
npx -y makers-page-mcp-auth # run once to authorize, see step 3
npx/bunxfetch and cache the package on first run; nothing to build yourself.
git clone https://github.com/alexcloudstar/makers.page-mcp.git cd makers.page-mcp/mcp bun install bun run build
Set these environment variables (from your X developer app, step 1):
export TWITTER_CLIENT_ID=your-client-id export TWITTER_CLIENT_SECRET=your-client-secret # omit if your app is a public client export TWITTER_REDIRECT_URI=http://127.0.0.1:8879/callback # must match the portal exactly
If you're building from source, you can instead copy.env.exampleto.envand fill in the same values. Bun loads.envautomatically for anything run withbun(bun run auth,bun run dev,bun dist/index.js)..envis gitignored, so your keys never get committed.
npx -y makers-page-mcp-auth # npm install bun run auth # from source
This prints an authorize URL: open it, log in as the X account you want to post from, and approve. The server captures the redirect locally and stores an access + refresh token at~/.config/makers-page-mcp/credentials.json. Tokens auto-refresh on future use; re-run auth if you revoke access, or after upgrading to a version that adds scopes (e.g.media.writefor image/GIF/video uploads).
Add to your Cursormcp.json(Settings → MCP, or~/.cursor/mcp.json). The same shape works for Claude Desktop/Code, Codex, GitHub Copilot, and other MCP clients, just under each tool's own config file:
{ "mcpServers": { "makers-page": { "command": "npx", "args": ["-y", "makers-page-mcp"], "env": { "TWITTER_CLIENT_ID": "your-client-id", "TWITTER_CLIENT_SECRET": "your-client-secret", "TWITTER_REDIRECT_URI": "http://127.0.0.1:8879/callback" } } } }
(bunxworks the same way if you'd rather use Bun:"command": "bunx", "args": ["-y", "makers-page-mcp"].)
{ "mcpServers": { "makers-page": { "command": "bun", "args": ["--env-file=/absolute/path/to/mcp/.env", "/absolute/path/to/mcp/dist/index.js"] } } }
Bun's automatic.envloading is relative to the process's working directory, which most MCP clients don't guarantee ismcp/. The explicit--env-fileflag above points straight at your.envregardless of where the server is launched from, so you don't have to duplicate credentials insidemcp.jsonitself.
This server only uses the standard MCPstdiotransport: no client-specific extensions, no remote/HTTP requirement. That means the samecommand/args/envblock above works everywhere, just under each client's own config file:
All of these read the samemcpServers-style JSON (Gemini CLI and JetBrains use slightly different top-level keys,mcpServersand a UI form respectively, but the samecommand/args/envfields underneath). If your tool of choice isn't listed here but supports MCP over stdio, the config above should work unchanged.
Typical retweet flow:create_retweet_draft→ user approves →approve_retweet_draft→retweet_post(orundo_retweetfor undo drafts).
Typical DM flow:lookup_x_user(optional) →create_dm_draft→ user approves →approve_dm_draft→send_dm_draft.
To reply in context:list_dm_inboxorlist_dm_conversation_events→ draft withconversationId→ approve → send.
Typical trend-discovery flow:be_trendy→ agent writes a post from the returnedtrendingTopics/painPointSignals→create_draft→ user approves →publish_draft.
- Links in comments, not the main post:By default,create_draft/update_draft/edit_published_draftrejecthttp://orhttps://URLs intext/parts[0]. Put links in follow-up thread parts (parts[1],parts[2], …). Override only withallowLinksInMainPost: truewhen the user forces it.
- Re-auth for media:OAuth scopes now includemedia.write. If you authorized before this change, runmakers-page-mcp-auth/bun run authonce more.
- Re-auth for DMs:OAuth scopes now includedm.readanddm.write. Re-run auth after upgrading to send or read DMs.
- Quote posts:OpenAPI documents quote as Enterprise-only on self-serve; expect API errors on lower tiers.
- Edit:RequiresX Premium, roughly a30-minutewindow andup to 5 editsfrom the original. Each edit returns anew post id(we update the local draft). Polls and community posts are not editable.
- Replies:Self-serve apps can createself-threads(reply to your own previous part). Replies tootheraccounts are blocked unless summoned.
- Cashtags:Self-serve allowsat most one cashtag($TICKER) per post.
- be_trendyrequires a paid API tier:it calls X's Recent Search endpoint, which needs at least aBasicpaid X API access tier. A Free-tier app will get 403/429 errors.
- get_top_engagersalso uses Recent Search, so it needs the same paid tier, and only ever sees comments from the last7 daysregardless of how old the post being checked is.
publish_draftmarks a draftpublishingbefore calling the X API, and only clears that if the API gives a definitive answer (a real HTTP response, or a clear "not authenticated" error). If the request instead fails in a way that could mean X received it anyway (a timeout or network drop), the draft is deliberately left inpublishingandnotauto-reverted, so an agent can't retry and risk a second, real, paid post.
- Nothing posted(no live ids recorded): callreject_draftorupdate_draftto reset.
- Partial thread(some ids recorded): donotretrypublish_draft. Calldelete_published_draftto remove the live posts, or finish the remainder on X manually.
- Ambiguous single post(may or may not have posted, no ids recorded): check X yourself; if it did not post, reset withreject_draft/update_draft; if it did, leave the draft as-is and note the URL.
Destination:one local indie stack MCPthat already knows the founder tools — socials, payments, analytics, GitHub, databases — so you don't maintain a hundred separate connections. v1 shipsX only, on purpose: prove the approval-gated write loop before adding more surfaces that spend money or post publicly.
- X manage-posts: text, threads, polls, media (chunked upload), quote, community +share_with_followers, paid partnership, edit, and delete — still behind draft → approve → publish with crash-safe / no-auto-retry semantics.
- X DMs: draft → approve → send (1:1 text, media attachment, group conversations) with local rate limits; read inbox and thread events;@handlelookup.
- X analytics (read-only): post metrics, account summary (today + top posts), posting-time analysis. No local DB; fetches from X API on demand.
- X retweets: draft → approve →retweet_post/undo_retweet(immediate; no scheduling).
- be_trendy: niche-scoped X trend discovery via Recent Search, spam/duplicate filtering, and scored trending topics + demand-signal posts to ground content the agent writes (no LLM call inside the tool itself).
- More socials— LinkedIn, Reddit, Threads, Bluesky; same draft adapted to channel-native tone and length.
- Payments & code— Stripe (Lemon Squeezy as a secondary path), GitHub.
- Analytics & data— PostHog / Plausible, Postgres via Supabase / Neon.
- Ops extras— Resend, Sentry, as the core set stabilizes.
- Launch directories— research launches and draft listing copy where useful;submit only where a stable API or first-class MCP write path exists. Today that is thin: Product Hunt community MCPs are read-only (the PH API has no create-post mutation), Hacker News write MCPs scrape browser login (no public write API), and Peerlist / BetaList / Uneed / Fazier / Microlaunch / Dev Hunt / Tiny Launch have no MCP for submissions. MCP registries (official registry, Smithery, PulseMCP, Glama, mcp.so) are for listingthisserver, not for submitting your product to launch boards.
- Local-only drafts and credentials, whichever connectors land.
- Approval gates for anything that posts publicly or spends money.
Want a connector prioritized?Open an issue.
bun test # run the unit test suite bun run typecheck
No, not by default. Every draft starts indraftstatus, andpublish_draftrefuses to run unless the draft has gone throughapprove_draftfirst. You can disable that gate withMAKERS_PAGE_REQUIRE_APPROVAL=falseif you fully trust the flow, but it's opt-in.
It's a local process. Drafts, DM drafts, retweet drafts, and rate-limit state are stored as files underMAKERS_PAGE_DATA_DIR(default~/.local/share/makers-page-mcp); your X OAuth tokens live underMAKERS_PAGE_CONFIG_DIR(default~/.config/makers-page-mcp/credentials.json). All of these files are written with0600permissions. Nothing goes through a third-party server; the server talks directly toapi.x.com.
That's an X API pricing decision, not this project's. As of 2026 there's no free write tier for X's API; seeCost per postabove for current rates. The approval gate exists specifically so an agent can't accidentally run up a bill.
Yes. It's a plainstdioMCP server with no client-specific extensions, so it works anywhere MCP is supported: Claude Desktop/Code, OpenAI Codex, Gemini CLI, GitHub Copilot, Windsurf, Cline, Zed, JetBrains AI Assistant, and more. SeeWorks with any MCP client.
Yes, it's MIT-licensed. SeeOption B: from sourceto build it yourself, andCONTRIBUTING.mdif you want to send changes back upstream.
Contributions are welcome. SeeCONTRIBUTING.mdfor setup, testing, and PR guidelines.
Found a vulnerability? Please don't open a public issue: seeSECURITY.mdfor how to report it privately.
MIT. See thechangelogfor release notes.
Built by@alexcloudstarformakers.page— the indie stack MCP.
Free MCP that drives an audit of your marketing. Your AI connects, adsOS digs through your ads, email and site, and hands back a growth plan you can run today.
Launch & manage your User Referral and Partner / Affiliate program — for developers and growth teams.
Let AI clients add payments to your website. Create checkout pages, events and forms and embed them on your site in minutes.
Answers questions on AEO, SEO, web development and branding from the published material of GOJI, a Melbourne digital agency, with a goji.agency URL to cite on every result.
A shared campaign canvas for you and your AI agent: briefed by your brand rules, gated by your approval.
Technical SEO audits and crawl insights for AI assistants via MCP.
Run your Linkedin account from claude or chatgpt
AI agents that manage paid ads across Meta, LinkedIn, and Google Ads: campaigns, ad creative, and day-to-day ad operations from any MCP client.
Chat with any brand's Meta (Facebook/Instagram) ads inside Claude — research a competitor's ad library, surface their longest-running winners, extract hooks/formats, and clone winning ads for your own brand.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



