Documentation
MCP connection guide

Publish blog posts, send newsletters and emails from Claude, Claude Code, Codex and ChatGPT

GoodSender's official MCP server lets your assistant write, preview and publish posts on your blog, send them as a newsletter, and send consent-based and transactional email. Connect to the hosted server with OAuth, or run the server locally with an API key. Your blog, voice, and destination choices remain yours.

Updated

Before you connect

Manual editing in the GoodSender dashboard stays available whether or not you connect an assistant. To use blog tools, sign in to a GoodSender workspace with a blog. For an optional newsletter, finish its sender identity and provide a public blog address first. To send email, add a sending domain and a sender identity (see Send email).

Claude Desktop, Claude Code and Codex can connect two ways (ChatGPT uses the hosted server):

  • Hosted (OAuth). Point the client at https://mcp.goodsender.com/ and sign in to GoodSender in your browser. Nothing to install; the connection is bound to the one workspace you choose.
  • Local (API key). Run the GoodSender MCP server on your own computer from the latest release with an API key from the API keys page of your dashboard. Treat the key as a secret: never commit or share it.

Connect your client

Claude Desktop and claude.ai

Hosted: On Free, Pro, or Max, open Customize in Claude, then Connectors, choose Add, then Add custom connector, and enter the hosted URL below. On Team or Enterprise, an authorized organization owner must first add GoodSender through Organization settings → Connectors → Add → Custom → Web; organization members can connect it only afterward. Keep the sign-in option so the OAuth flow runs the first time you use the connector. Remote connectors are brokered through your Claude account; the hosted server is reachable from the public internet.

https://mcp.goodsender.com/

Local: download goodsender.mcpb from the latest release and open it in Claude Desktop, or unzip binaries.zip from the same release and configure the binary for your platform (the example uses goodsender-mcp-darwin-arm64 for Apple silicon Macs) with an API key from your dashboard. Replace the placeholder below with that real key. Treat the configuration as a secret: never commit or share it.

{
  "mcpServers": {
    "GoodSender": {
      "command": "<path>/goodsender-mcp-darwin-arm64",
      "env": { "GOODSENDER_API_KEY": "<your-api-key>" }
    }
  }
}

Claude Code

For prerequisites, verification and recovery, use the Claude Code guide.

Step-by-step walkthrough: Publish blog posts from Claude Code and Codex with an MCP server

Hosted: add the server, then sign in.

claude mcp add --transport http goodsender https://mcp.goodsender.com/
claude mcp login goodsender

Complete the OAuth browser flow when Claude Code asks. You can inspect the connection with claude mcp get goodsender or use /mcp in an interactive session.

Local: register the released binary with your API key.

claude mcp add goodsender --env GOODSENDER_API_KEY=<your-api-key> -- <path>/goodsender-mcp-darwin-arm64

Codex

For prerequisites, verification and recovery, use the Codex guide.

Step-by-step walkthrough: Publish blog posts from Claude Code and Codex with an MCP server

Hosted: add the server, then sign in.

codex mcp add goodsender --url https://mcp.goodsender.com/
codex mcp login goodsender

Codex shares this MCP configuration between its CLI and IDE extension. The hosted server answers unauthenticated requests with an OAuth challenge and supports dynamic client registration, so codex mcp add usually opens the browser sign-in itself; codex mcp login goodsender runs it again if you skipped it or the sign-in has expired.

Local: register the released binary with your API key.

codex mcp add goodsender --env GOODSENDER_API_KEY=<your-api-key> -- <path>/goodsender-mcp-darwin-arm64

ChatGPT

Hosted: turn on developer mode under Settings → Apps & Connectors → Advanced settings, then create an app with the server URL https://mcp.goodsender.com/ and OAuth authentication, and sign in to GoodSender when prompted. Select the app from the + menu in a new chat.

Publishing and sending need MCP apps with write actions, which OpenAI offers as a beta on Business, Enterprise, and Edu workspaces (an admin may have to allow developer mode); other plans may connect read-only. Menu names change between ChatGPT releases.

Local: ChatGPT connects only to remote servers, so use the hosted URL above; the local API-key setup applies to Claude Desktop, Claude Code, and Codex.

How approvals work

Every GoodSender tool is annotated. Read-only tools are marked read-only, and every tool that publishes, sends, deletes, or edits live data is marked destructive. Your client uses these annotations to decide when to ask you first.

  • Hosted server: GoodSender relies on your client's own approval prompt for write tools. How and when the client asks depends on the client and on your settings; once you approve, the action runs, with no second confirmation from GoodSender.
  • Local server: optional action guards add a server-side step on top of your client's prompt. A guarded tool returns a pending-approval notice instead of acting, and confirm_action runs the held action once you approve. Guards are on by default for a local server and can be turned off with GOODSENDER_DISABLE_ACTION_GUARDS=true for unattended runs. The command-line tool always runs without them.

Read what the assistant proposes before you approve it. Sent email cannot be recalled, and a published post may be read or announced before you change it. Turning approvals off never widens what your API key or OAuth connection is allowed to do.

Your first publish

  1. Ask the assistant to create a draft with create_post. It does not publish or email the post.
  2. Open the signed preview from create_post_preview and edit the draft until it sounds like you.
  3. Read get_post_distribution to see every selected destination, exact announce text, newsletter subject and summary, delivery state, and blockers.
  4. Use set_post_distribution to choose only the destinations you want and review their copy. If the newsletter is not selected, publishing does not send an email. A selected newsletter sends a summary and a link to the public post, not the complete post body.
  5. Call publish_post only after you have reviewed its plan and approved the call.
  6. Open the public URL and read the distribution status after publishing. A newsletter can be blocked by no sending domain, no From address, or no public address.

Send email

GoodSender sends email only to people who agreed to hear from you. You do not track consent yourself; the server does it for you.

  • Sender identity first. Every email is sent from a sender identity on a verified domain. Add the domain in the dashboard and publish all five of its DNS records (both DKIM CNAMEs, the return-path CNAME, the click-tracking CNAME, and the DMARC TXT), then create the identity with create_sender_identity. check_sender_domain_stats reports each domain's verification status.
  • Consent-based custom email. enqueue_email (plain text, HTML, or Markdown) and enqueue_template_email (your own templates) send right away to recipients who already consented. Anyone else gets a consent request, and their email waits in a queue.
  • Releasing queued email. After a recipient consents, their queued email goes out when you ask the assistant to run send_pending_emails, or when it next uses another tool that sends email. Nothing is sent while the server is idle. Email to recipients who declined is dropped.
  • Built-in transactional templates. send_consentless_email sends GoodSender's built-in templates immediately, without a consent step: OTP code, MFA enrollment, new device login, password changed, email changed, order receipt, and order completed. Use them only for genuine transactional messages a person needs because of something they did, never for marketing. Custom email and custom templates always wait for consent.

Recipients and groups are managed with create_recipients, create_group, and add_group_members. Daily and monthly sending quotas apply; the Terms of Service set out the consent and acceptable-use rules.

Example prompts

Ask in plain words. The tools in each line are the ones the assistant usually calls.

  • Read-only

    “List my last five blog posts and tell me which ones are still drafts.”

    Tools: list_posts, get_post

  • Publish

    “Draft a post from these release notes, show me the preview, and publish it on my blog once I approve.”

    Tools: create_post, create_post_preview, publish_post

  • Newsletter

    “Publish my latest draft and send it as a newsletter to my subscribers. Show me the subject and summary first.”

    Tools: get_post_distribution, set_post_distribution, publish_post

  • Email

    “Email the March product update to the beta-users group from hello@example.com.”

    Tools: list_groups, enqueue_email

  • Transactional email

    “Send a sign-in code to user@example.com with the OTP template; the code is 482913 and expires in 10 minutes.”

    Tools: send_consentless_email

Check your connection

  1. Ask the assistant to list your blog posts. A list, even an empty one, means the connection reaches your workspace.
  2. If the client reports an authorization error, sign in again: run the client's login command, or reconnect the connector. For a local server, check that GOODSENDER_API_KEY holds a key that has not been revoked.
  3. To end a hosted connection, disconnect it in the dashboard under Settings › MCP & CLI › Connected agents, or remove GoodSender from your client. For a local server, revoke its API key in the dashboard.

The hosted server mounts MCP at the origin root, so the URL above has no path. Client setup is also described in the Claude custom connectors help, the Claude Code MCP documentation, the Codex MCP documentation, and OpenAI's ChatGPT developer mode documentation.

Privacy, terms and support

The connector receives only the inputs of the tools your assistant calls, never your conversation. The Privacy Policy explains what the hosted and local servers store and the telemetry they send, and the Terms of Service cover your responsibility for actions your assistant takes. Questions and support: support@goodsender.com or GitHub issues.