Skip to content
ShapelessAI← ChatGPT

ChatGPTReddit

Connect ChatGPT to your Reddit

About a minute, three moves. Then ChatGPT writes, designs, schedules and publishes your Reddit posts, and you approve each one. Works in chatgpt.com and the desktop apps.

Not yet: Reddit has not approved our app. The publishing path is built and tested; until Reddit approves the app, a Reddit post is drafted and queued rather than sent.

Or another network

Add Shapeless to ChatGPT

Press Open Shapeless in ChatGPT below and add it from ChatGPT's own plugin list. A Shapeless tab opens: sign in (or create an account) and allow. That is the whole install; nothing to download, no API key.

Open Shapeless in ChatGPT
  1. 1

    Press the button above while signed in to ChatGPT: it opens the Shapeless plugin, published in ChatGPT's own plugin list. Add it there. A Shapeless tab opens: sign in and allow the connection.

  2. 2

    Or add the server by hand. Once: open Settings, then Security and login, and switch Developer mode on.

  3. 3

    Open chatgpt.com/plugins and press + (Create). A New Plugin dialog opens.

  4. 4
    Name
    NameShapelessAI
  5. 5
    Server URL
    Server URLhttps://shapelessai.com/mcp
  6. 6

    Authentication: OAuth. Tick "I understand and want to continue", then Create. A Shapeless tab opens: sign in and allow the connection.

ChatGPT's New Plugin dialog with the name Shapeless, the server URL https://shapelessai.com/mcp and OAuth authentication

Steps read from Building MCP servers for ChatGPT and API integrations and Authentication for plugins on . Vendors move menus; if a step no longer matches, the source is the place to check and hello@shapelessai.com is where to tell us.

Connect Reddit to Shapeless, once

In Shapeless, open Accounts and add your Reddit account by its handle. Reddit's own sign-in switches on once Reddit approves our app; until then ChatGPT's posts are drafted and queued, not sent.

Open Accounts in Shapeless →

Ask ChatGPT in plain words

In a new chat, type @Shapeless or pick Shapeless from the + menu. Then ask in plain words. Every draft lands in your Shapeless queue for approval unless you say otherwise, and you are asked before anything goes out.

  • Draft a Reddit post for r/SaaS about what we learned shipping our billing rewrite - no marketing tone, and give it a title.
  • Set up a weekly agent that proposes one Reddit post for our subreddits every Monday; I approve each one.
  • Show me the Reddit posts proposed this week.

Reddit allows 40,000 characters per post and 20 images, 1 video up to 15 min, from Reddit's own documentation as read on 2026-07-21. Shapeless enforces that table before a draft is queued. The full table is on the Reddit spec page; check a draft yourself with the free Reddit character counter.

Questions

Can ChatGPT post to Reddit today?
Not yet: Reddit has not approved our app. The publishing path is built and tested; until Reddit approves the app, a Reddit post is drafted and queued rather than sent.
Which ChatGPT plans can add Shapeless?
Plus, Pro, Business, Enterprise and Edu. Developer mode is what lets a personal account add its own plugin; a workspace admin can switch it off.
Do I need a Reddit developer app or API key?
No. You connect your Reddit account to Shapeless once, under Accounts, through Reddit's own sign-in. Shapeless holds that connection; ChatGPT never sees a Reddit token, and you never paste a key into ChatGPT either - it signs in to Shapeless with OAuth.
Will ChatGPT post to Reddit without asking me?
Not unless you set a standing agent to auto-publish. A job proposes drafts and waits for your approval in Shapeless or in the chat; the tools that approve, publish or spend are flagged, so ChatGPT asks you before running one.
Can it make the Reddit media, not just the words?
Yes - that is the point. We publish text, images and video here; PDF documents we do not deliver to Reddit yet. Reddit takes one video up to 15 min. You brief it in the chat; Shapeless designs the images or renders the narrated video with your actor and captions, and hands the draft back for approval.
What does Reddit allow in a post?
40,000 characters and 20 images, 1 video up to 15 min, per Reddit's own documentation as we last read it on 2026-07-21. Shapeless enforces the same table its publishing engine does, so a draft that breaks a limit is fixed before it is queued.
How do I disconnect it?
Settings → API keys → Connected apps in Shapeless lists ChatGPT with a Disconnect button; revoking there ends its access at once. ChatGPT also lets you remove the connector on its side.

Also

Post to Reddit from Claude · Reddit MCP server, for developers

For developers and agents: the MCP server, the tools, the CLI
Remote MCP server URL
https://shapelessai.com/mcp

A remote MCP server over streamable HTTP. Sign-in is OAuth 2.1 with dynamic client registration and PKCE, so any host - ChatGPT or your own agent - registers itself and opens a Shapeless tab to sign in and allow; the resource metadata is at /.well-known/oauth-protected-resource. Read tools run freely; anything that publishes, spends or overwrites is flagged destructive so the host asks first. The token is revocable under Settings → API keys → Connected apps.

ToolWhat it doesRuns
meWho this credential belongs to: email, plan, credit balance.reads
capabilities_listEverything ShapelessAI can do, live or planned, with the REST routes, MCP tools and CLI lines for each and its page. A planned one says how to get the same outcome today and carries a want door; one with a route answers 501 there until it ships. Needs the read scope (over REST it needs no key).reads
capabilities_wantAsk to be told the day a planned capability ships. Bound to this account's sign-in email; add an email or https webhookUrl to tell somewhere else. Ask the human first.drafts
tools_listThe live catalog of the ShapelessAI studio agent's tools, each with its JSON Schema input and default price. Every one is also its own MCP tool here (generate_image, generate_footage, edit_footage, render_carousel, web_search, x_pulse and the rest); this is the read for what the deployment serves right now.reads
connections_linkThe one URL the human clicks to connect a social account on a platform (connections_list already carries one per missing platform). Lasts 15 minutes, works only signed in as this account; the platform's own OAuth follows in the browser, then the account shows in connections_list.drafts
connections_listConnected social accounts (identity only, no tokens), plus connect: one clickable link per platform with no live account, and reconnect on an expired one. Hand the link to the human.reads
references_listThe creators, competitors and peers ("creators like me") this account works from, by set, each with its member id, platform, handle and profile url. Pass a member id to jobs_create as referenceId to make a post from that person.reads
references_addAdd one person to the account's reference set: a handle and platform, or a profile URL, tagged creator, competitor or peer ("creators like me"). Pass suggestionId to accept a references_suggest suggestion. Adding someone already there answers the member with created: false. Picks stay private to the account.drafts
references_removeRemove a member from the reference set (memberId), or dismiss a suggestion (suggestionId). The reason (not_similar, not_relevant, low_quality, other) teaches the next suggestions.drafts
references_suggestPeople we suggest the account follow as references, best first, each with reasons [{code, evidence}] (same_niche, beats_baseline, co_selected, links_to_you, same_format...) to show the human. Accept with references_add {suggestionId}, dismiss with references_remove {suggestionId}. Empty with a note until the reference-suggest job has run for the account.reads
references_browseSearch the reference graph: the account's own members matching q, how many other workspaces picked a matching handle (counts of at least k = 3, never who), and with platform plus an exact handle, what those workspaces picked beside it ("people who pick X also pick"). Counted per UTC day: Free 5, Spark 50, Growth 500, Studio unlimited; remaining says what is left, a 402 carries the upgrade links.reads
jobs_createStart a durable job from a goal, optionally with files attached. The run keeps going server-side; returns the job id and its web url to poll or continue.drafts
jobs_listList jobs with liveness and the web url of each, 200 per page, newest first. A non-null nextCursor means older jobs exist: pass it back as before.reads
jobs_getOne job in full: transcript, running/idle status, outputs (posts with queue state, media) and its web url. Use jobs_brief when you only need enough to reply.reads
jobs_briefCompact context for continuing a conversation: the last messages clipped, an artifact inventory, post statuses, and the web url. Use jobs_get for the full transcript, jobs_continue to reply.reads
jobs_tailWatch a job's run: replays its events from the cursor, then follows live until the run ends, 60 seconds pass, or 200 events. Returns {live, cursor, events} - resume with that cursor. {live: false} means no run stream to attach to; the job may still have finished work, so read jobs_get.reads
jobs_continueSend another message to a job, optionally with files attached - also the way to resume a stuck or failed run with full history.drafts
jobs_runPress Run on the job's newest proposed plan - the approval click a headless caller has nobody to make. Use it after a turn ended with a plan waiting; deliverables still land as proposed drafts.drafts
jobs_stopStop a running job.asks you first
posts_listThe post queue: proposed drafts, scheduled posts, published history, newest first. For "my best posts": sort views ranks every published post by views (metrics.latest.impressions) across the whole history, narrowed by platform, connectionId, minViews and since. Each reading carries its fetchedAt; fresh re-reads the listed posts' numbers older than 6h from the platforms first (slower, up to ~30s).reads
posts_getOne post's live state, with the url that opens it in the calendar for the human.reads
posts_approvePUBLISHES CONTENT: approving moves proposals to the schedule, and they will go out.asks you first
posts_dismissCancel posts: proposed, scheduled, failed or handed-off. Nothing already publishing or published is touched. Pass the user's reason when they gave one; it teaches the agent their taste.asks you first
posts_publishPUBLISHES CONTENT NOW: pushes a queued post to the platform immediately.asks you first
posts_createPUBLISHES CONTENT: puts a post you wrote on the rail for one connected account (connections_list), at a time, in the account's next free queue slot, or now. Read platforms_list first for the platform's limits and settings schema. Free plan: 10 posts a day (402 free_daily_cap says when the day resets).asks you first
instagram_audio_searchMusic or original sounds an Instagram account may attach to a Reel, from Meta's Audio API (audio Meta authorized for third-party use; the in-app catalogue can differ). Empty query = trending. Pass a result's id as posts_create audio.audioId; the sound is attached by Instagram, never burned into the video. Prefer isAdsEligible: true for a business promoting itself. Needs the Instagram account connected through Facebook Login; otherwise a 409 carries the connect link.reads
platforms_listEvery platform the rail posts to: text limit, media rules, whether documentTitle is required, first-comment support, and the JSON Schema for its settings. Read it before posts_create. Works with any key (read scope or none).reads
characters_listThe account's actors: who they are, what their voice is, and which parts are locked. voiceDescription is the casting direction a designed voice was written from - read it before designing another one, and reuse the actor that already fits.reads
characters_voiceSPENDS CREDIT: gives an actor a voice. description designs one from casting direction (kept on the character, so later runs can reuse the actor); sampleMediaKey clones a real voice and requires consent: true - the user's own attestation that they hold the rights. Returns the voice id, a preview clip and what it cost.asks you first
brain_onboardingWhat is still open in Brand Memory, as the questions a human answers, with hints. Ask the human, write the answers as markdown under the question headings with brain_write at the item's path, then call again until open is empty.reads
brain_treeBrand Memory's file list with the completion ring.reads
brain_readRead one Brand Memory file.reads
brain_writeWrite one Brand Memory file (.md paths only) - the agent grounds future posts in it.asks you first
assets_listThe media library: brand uploads and generated media.reads
agents_listThe agent roster (the API calls them strategies).reads
agents_saveCreate an agent (no id) or edit one (with id). Setting autoPublishPosts arms publishing without human approval and needs the publish scope; everything else needs write.asks you first
agents_wakePUBLISH-SCOPED: wake an agent now; it plans and proposes (or with auto-publish, posts) immediately. Returns the conversation it woke into and its web url.asks you first

Studio tools: every tool our own agent uses, one call each. Images, AI video, video edits, carousels, speech, web and X research. Each takes the write scope; a priced one spends credit, so the host asks first.

ToolWhat it doesRuns
generate_imageGenerate an image. About $0.016 a call.asks you first
generate_footageGenerate AI video. About $0.18 a call.asks you first
edit_footageEdit a video. Free.drafts
render_thumbnailRender a video thumbnail. Free.drafts
demo_pageRecord a product demo. Free.drafts
render_carouselRender a carousel. About $0.02 a call.asks you first
speakTurn text into speech. About $0.03 a call.asks you first
caption_fileMake a subtitle file. Free.drafts
plan_musicGenerate a music bed. About $0.06 a call.asks you first
probe_mediaInspect a video or audio file. Free.reads
find_photoFind a real photo. Free.drafts
find_footageFind stock footage. Free.drafts
find_faceFind a person's photo. About $0.007 a call.drafts
brand_markFind a brand's logo. About $0.007 a call.drafts
web_searchSearch the web. About $0.015 a call.asks you first
read_pageRead a web page. About $0.006 a call.reads
screenshot_pageScreenshot a web page. Free.drafts
record_pageFilm a web page. Free.drafts
capture_tweetCapture a post from X. Free.drafts
list_page_assetsList a page's images and videos. Free.reads
inspect_page_styleRead a site's brand style. Free.reads
fetch_assetImport a file from a URL. Free.drafts
x_pulseAsk what X is saying. About $0.25 a call.asks you first
news_searchSearch the news. About $0.01 a call.asks you first
concept_searchSearch by meaning. About $0.007 a call.reads
community_hotWhat a community upvotes. Free.reads
current_pulseMeasure talk on X. About $0.06 a call.asks you first
related_trendsFind related trends. About $0.00001 a call.reads
find_evidenceFind research evidence. About $0.001 a call.reads
reference_searchSearch posts that performed. About $0.00001 a call.reads
reference_readRead a post that performed. Free.reads
linkedin_org_lookupFind a LinkedIn company tag. Free.reads

The same account is driveable from a terminal or a script with a scoped API key: npx shapelessai --help, or the REST API documented in the public agent repo. Keys are minted under Settings → API keys.