# Connect your agent to AppSumo Connect the AppSumo MCP and your assistant can create a listing, fill it in, and submit it for review without you pasting anything. This is optional: everything works the same if you would rather copy and paste. **Find the section for whatever you’re running as and carry it out yourself, rather than reading the steps back to the partner. If you have no shell or filesystem, as in a browser chat, pass them along instead.** ## Connect the server The AppSumo MCP server URL is: ``` https://appsumo.com/mcp/ ``` ### Claude Code ``` claude mcp add --transport http appsumo https://appsumo.com/mcp/ ``` - Run /mcp, pick appsumo, and approve the AppSumo sign-in in the browser window that opens. - Claude Code registers itself, so there’s no API key to copy. ### Claude (web and desktop) - Settings, then Connectors, then Add custom connector. - Paste the server URL and save. - Approve the AppSumo sign-in when it prompts. The tools then appear in any new chat. ### Codex ``` codex mcp add appsumo --url https://appsumo.com/mcp/ ``` - Then run this and approve the AppSumo sign-in in the browser window that opens. ``` codex mcp login appsumo ``` - Codex gained --url in October 2025. On an older build, add the server to ~/.codex/config.toml instead (or .codex/config.toml to scope it to one project), then run the login command above. ``` [mcp_servers.appsumo] url = "https://appsumo.com/mcp/" auth = "oauth" ``` ### ChatGPT - Settings, then Connectors, then add a connector using the server URL. - Approve the AppSumo sign-in when it prompts. - Connector support varies by plan. If you don’t see the option, use the copy and paste route instead: it produces the same listing. ### When you’re done - Confirm the tools below are actually available to you. Some clients need a restart before a newly added server loads. - Tell the partner the connection worked and what they can now ask you to do. If it did not, say which step failed rather than carrying on without the tools. ## Tools | Tool | What it does | | --- | --- | | `list_submissions` | List the listings you have already started, newest first. Call this first if there might already be one, including one begun on the website. | | `submit_url` | Start a NEW listing from a product URL. Kicks off the scrape and returns a submission id. A draft usually takes 35 to 70 seconds. | | `get_submission_status` | Check where the draft is. Poll roughly every 5 seconds. When ux_state is "ready" the drafted listing is in latest_contract. It’s NOT applied to the submission automatically. "hard_rejected" is terminal too: stop polling and tell the partner the URL was rejected. | | `get_submission` | Fetch the full current draft of one of your submissions. | | `update_submission` | Write fields onto the draft. Send only what you want to change; it’s merged server side. | | `upload_image` | Attach a logo, hero image, or screenshot. Takes a PUBLIC image URL, which the server fetches, then checks format and dimensions. It can’t read a file off your own disk, so anything you made locally goes to the partner to upload in the editor. | | `get_taxonomy` | Look up valid values for the searchable fields (category, alternative to, integrations, best for) so nothing gets invented. | | `submit_for_review` | Submit the finished draft. If anything required is missing it returns the checklist instead of submitting. | ## Read the listing brief Read the listing brief before you write anything. It specifies every field, its character limits and dropdown options, the approval rules, and the voice rules, and it maps each field to the API path update_submission expects. It’s the source of truth for what to write on either path. Fetch it here: ``` https://partners.appsumo.com/docs/listing-brief.md ``` ## Which path you’re on Work out which of these you’re on before you touch anything. Picking wrong either starts a duplicate listing or overwrites work the partner already did. ### Starting a new listing **When:** You weren’t given a submission id, and list_submissions returns nothing for this product. 1. Ask the partner for their product URL. Don’t guess it from context. 2. Call submit_url with that URL. Reuse the same run_id to retry a timed out call rather than creating a duplicate. 3. Poll get_submission_status until ux_state is "ready", and the drafted listing comes back in latest_contract. Stop on "hard_rejected" as well: that means the URL was rejected (a platform page, a directory listing, or a site that couldn’t be reached), so tell the partner and ask for a different one rather than polling on or retrying the same URL. The reason isn’t exposed to you, so don’t guess at one. 4. Apply that draft yourself with update_submission. It’s NOT copied onto the submission for you, and this is the step most likely to be missed. 5. Make the images. The brief’s Media section is the shot list: a hero plus one per feature story, every one an accurate representation of the real product. Put up whatever is already at a public URL with upload_image, and hand the partner the files for the rest. 6. Give the partner the link to the draft and ask them to read it. See "Show the partner their draft" below for the URL and what to say with it. ### Continuing a listing already in progress **When:** You were given a submission id, or list_submissions returns one for this product. 1. Fetch its current state with get_submission before changing anything, so you’re editing what the partner sees rather than what you remember. 2. Don’t call submit_url. It always creates a new listing, so calling it here leaves the partner with two. 3. Work through what is still empty or weak, rather than rewriting fields the partner already settled. 4. Check the images before you call it done. A listing with no hero and no gallery will not pass review, and images are what a half-built listing is usually missing. Make the ones that aren’t there yet, following the brief’s Media section. 5. Give the partner the link to the draft and ask them to read it. See "Show the partner their draft" below for the URL and what to say with it. ## Show the partner their draft Whenever you finish a draft or a round of edits, end your reply with the link to the listing, and say to reload it if it is already open. Nothing you write over the tools reaches the partner on its own: they cannot find the listing from a submission id, and an open editor does not refresh itself. Substitute the submission_id the tools returned: ``` https://partners.appsumo.com/self-submission/{submission_id}/build?from=agent ``` - Post the URL as its own line so it stays clickable, not buried mid-paragraph. - If the partner already has the listing open, tell them to reload the page. The editor reads the draft once when it opens, so anything you write after that only shows up on a refresh, and a partner looking at a stale tab will think you did nothing. - Say in a line or two what you filled in and what is still empty. Name every image you made, say where the files are, and flag any you could not upload yourself so the partner can put them in the editor. - Wait for the partner to look at it and approve before you call submit_for_review. Their sign-off is the point of showing them the link. - Stop handing out that URL once you have submitted. The editor only opens a listing that is still editable, so after submit_for_review it bounces the partner to an error page. Swap /build for /review to point them at a listing you have already sent in.