# Recto > An AI marketing desk for solo founders with a live product. Recto plans campaigns, a run of posts across several days with an arc, or imports the founder's own posts, for X, Bluesky, LinkedIn and Reddit in the founder's voice, each with an image in their brand, and credits Creem sales to the post that earned them. It also builds positioning, a 30-day strategy, a launch plan with Product Hunt and Show HN copy, and a weekly review. Access is invite only during the beta. Recto is a marketing team for a solo founder's product. You can run a campaign's whole lifecycle over MCP. Start one with plan_campaign (Recto writes a run of posts with an arc), create_campaign (an empty campaign you add posts to yourself) or import_campaign (your own posts, video and tracked links). Add to a campaign with add_post (your own text) or draft_posts (Recto writes more, for named days or the next empty ones). Change a post with edit_post, or a whole campaign with a plain instruction through revise_campaign, which returns a proposal_id to review before calling apply_campaign_changes or discard_campaign_changes. move_post, remove_post and update_campaign (pause, resume, done, rename, redate) round out editing; delete_campaign removes it. When a post's video or image has no https URL to pass as media_url, call start_media_upload, then upload_media_chunk for every chunk, then finish_media_upload, and pass the returned media_id on that post instead. Call get_today for what is scheduled today, get_campaign for one campaign's posts, use revise_post when the founder wants changes to a single post, and call update_post after each post is published or sent. Read get_brand and get_strategy before writing or designing anything for the product, so it matches the voice, facts, look and what the founder asked Recto to remember. When the founder states a lasting preference, call remember. For a launch, call get_launch, work through the next plan steps and mark them with update_launch. ## Connect an agent - MCP server: https://tryrecto.com/mcp (Streamable HTTP, OAuth 2.1 with dynamic client registration) - Claude Code: `claude mcp add --transport http recto https://tryrecto.com/mcp` ## MCP tools - list_products: List the signed-in founder's products in Recto. - add_product: Add a product by its landing page URL. Recto reads the page and builds positioning and a 30-day strategy. Takes 1 to 3 minutes. - get_strategy: Get the positioning and 30-day marketing strategy: goal, main bet, weekly target, channel plan, content mix, competitors, pains, story angles and what to skip. - rethink_strategy: Reread the landing page and rebuild the positioning and 30-day strategy. Use after the product or page changed. Takes 1 to 3 minutes. - get_today: Get today's posts from active campaigns, drafted per channel with an image spec. Recto never writes posts on its own anymore; call plan_campaign or import_campaign to get posts onto the calendar. can_publish means Recto can post it directly; otherwise open compose_url or paste the text, then call update_post with mark_sent. For Reddit, call find_subreddits first. A post with media.kind video cannot be published directly yet: download it from media_url and post it by hand. - update_post: Act on one of today's posts. publish posts it through the connected account (Bluesky or LinkedIn). mark_sent records that it was posted by hand. skip drops it, reopen undoes skip or mark_sent. Pass text when the founder edited the draft, so Recto learns their voice. - redraft_today: Replace today's untouched drafts from planned campaigns with new ones. Posts already sent, skipped, or imported stay untouched. Takes up to 2 minutes. - revise_post: Rewrite one of today's posts with an instruction, like 'shorter', 'less salesy' or 'lead with the 47 crawlers fact'. Keeps the brand tone, facts and platform rules, and saves a new version. Returns the post with its version history. - restore_post_version: Restore an earlier version of a post. version is the 1-based number from the post history. - find_subreddits: For a Reddit post, suggest 2-4 subreddits with their self-promotion policy (allowed, thread, not_allowed, unclear), the deciding rule and a tip. - set_channel: Record whether the founder has an account on a channel: ready (has it), todo (needs to create one, Recto shows setup steps) or skip (Recto stops drafting for it). - get_brand: Get the product's brand: colors, fonts, logos, tone, rules and banned words, read from its design.md or site, plus memory: the lasting preferences the founder told Recto to remember. Use it when writing or designing anything for the product and follow every memory. - remember: Keep a lasting preference or fact the founder states, like "never use emoji" or "launch moved to 12 Nov". Recto follows it in every draft, edit and answer, in the app and here. Not for one-off requests. - forget: Drop one memory by memory_id from get_brand. - update_brand: Change brand fields. Colors are #rrggbb, logos are absolute URLs, empty string clears a field. - refresh_brand: Read the product's design.md, llms.txt and site again and rebuild the brand. - get_results: Get the last 30 days of results: posts sent, reactions on Bluesky (likes, reposts, replies, quotes) and revenue credited through Creem, grouped by channel and by content pillar, best first. - get_weekly_review: Get this week's numbers (last 7 days) and the latest weekly review: headline lesson, winning and losing posts with reasons, the adjusted content mix, and keep, stop and try lists that steer tomorrow's posts. - run_weekly_review: Review the last 7 days of sent posts and adjust next week: rebalances the content mix toward what earned and sets keep, stop and try notes for the daily posts. Needs at least 3 sent posts. Takes 1 to 2 minutes. - get_launch: Get the launch plan: launch day and countdown, the readiness checklist, the dated Product Hunt plan from 21 days before to 2 days after, the next directories to submit to with which listing copy to use, and the launch copy if written. - update_launch: Set the launch day or tick items off. Ids come from get_launch: readiness ids start with ready:, plan ids with step:, directory ids with dir:. Mark a directory done once the listing is submitted. - write_launch_copy: Write the launch copy: Product Hunt tagline, description and first comment, a Show HN post (or why to skip it), and a distinct directory listing per directory type. Takes 1 to 3 minutes. - plan_campaign: Plan a run of posts across several days from one strategy: an arc that opens with the problem, then how it works, then proof, then the ask. Writes every post with an image spec, one LLM call per 7 days. Takes up to a few minutes for longer campaigns. - create_campaign: Create an empty campaign to add posts to by hand, with add_post or draft_posts. Use plan_campaign instead when Recto should write the whole run. - import_campaign: Import ready-made posts with your own text, dates, optional video or image, and a tracked link. Recto never rewrites these. Each post's day must be today or later and the media_url and link_target, if given, must be https. If the media has no https URL, call start_media_upload, upload_media_chunk and finish_media_upload first and pass the returned media_id instead of media_url (never both). - start_media_upload: Start uploading a video or image with no https URL of its own, for import_campaign. Call once per file, then upload_media_chunk for every chunk in order (0-based, chunk_bytes raw bytes each, base64-encoded), then finish_media_upload to get a media_id. - upload_media_chunk: Send one chunk from start_media_upload. index is 0-based. data is that chunk's raw bytes, base64-encoded, no larger than chunk_bytes. - finish_media_upload: Assemble every chunk sent for an upload_id into one file. Returns media_id: pass it as media_id on an import_campaign post. - list_campaigns: List campaigns with their date range, status, and how many posts are ready, sent, or skipped, with clicks and revenue. - get_campaign: Get one campaign and every post in it, in day order, with each post’s media, link and results. - update_campaign: Change a campaign’s name, goal or date range, or pause, resume, or mark it done. Paused campaigns stop showing on Today, but their posts are not deleted. - add_post: Add one post to an existing campaign by hand, with your own text. day must be today or later. - edit_post: Edit one unsent campaign post by hand: its text, first reply, day, channel, link, or media. Pass media_id null to clear the media. Keeps earlier text as a version, so restore_post_version still works. - draft_posts: Have Recto write new posts into an existing campaign, for specific days or for the next empty days in or after the campaign. Uses the campaign name, goal, brief and its existing posts so it never repeats them. Takes up to a minute. - revise_campaign: Turn a plain instruction about a campaign ("move the case study to Tuesday", "add a post on Friday about X", "drop the bots post") into a previewable list of changes. Returns a proposal_id: call apply_campaign_changes to run it, or discard_campaign_changes to drop it. Expires in an hour. - apply_campaign_changes: Run every op in a revise_campaign proposal. Ops on posts no longer ready are skipped and reported. Returns the updated campaign. - discard_campaign_changes: Drop a revise_campaign proposal without applying it. - move_post: Move one post to a different day. An unsent post must land on today or later; a post already sent or skipped can move to any day, so a wrong date can be corrected. - remove_post: Remove one unsent campaign post for good. - delete_campaign: Delete a campaign and its unsent posts. Posts already sent stay in the post history. ## Pages - [Home](https://tryrecto.com/): what Recto does and how to request an invite - [Pricing](https://tryrecto.com/pricing): beta pricing, what is included and current limits - [Privacy](https://tryrecto.com/privacy): what Recto stores and which services see it - [Terms](https://tryrecto.com/terms): rules for the invite-only beta - [Sign in](https://tryrecto.com/login)