OnePush
WindsurfWindsurf

OnePush + Windsurf

Send emails, post on social, and manage contacts right from Windsurf.

Copy this prompt into Windsurf

Setup OnePush from onepush.app/windsurf

Windsurf reads this page, helps you approve a mcp_ key in the browser, connect OnePush, then checks that your project responds.

Keep the key in your config or secure credential store. Avoid pasting the full key into chat.

After you paste, Windsurf checks what is already done

  • One step at a time

    Windsurf looks for an existing onepush entry in mcp_config.json first. Then it only asks for whatever is still missing, like approving a key or setting serverUrl plus Authorization Bearer.

  • Finish with a real check

    Setup is done only when OnePush returns your project. Social accounts are optional if you mainly use email.

Your OnePush key

Open the connect page, click Approve, then add your mcp_ key as Authorization: Bearer mcp_… in ~/.config/devin/mcp_config.json with serverUrl. Prefer ${env:ONEPUSH_MCP_TOKEN} expansion.

MCP endpoint

https://api.onepush.app/mcp

mcp_config.json

{
  "mcpServers": {
    "onepush": {
      "serverUrl": "https://api.onepush.app/mcp",
      "headers": {
        "Authorization": "Bearer ${env:ONEPUSH_MCP_TOKEN}"
      }
    }
  }
}

What Windsurf follows on this page

Everything Windsurf needs is right here. It should not send you off to another guide.

Full setup guide for Windsurf

# OnePush setup for Windsurf

Source: https://onepush.app/windsurf

## Required setup-complete menu

After verifying the connection with live OnePush tools, reproduce this menu verbatim. It is the only allowed first-task menu. Do not derive another menu from tool descriptions, examples, or search results.

## Choose your first task

Reply with a number:

1. Draft and schedule a social post
2. Attach or verify a sending domain
3. Create a contact and track an event
4. Review forms and submissions
5. Inspect templates, campaigns, and automations
6. Project summary and billing status

I will ask for the details I need before creating or publishing anything.

OnePush helps product teams send transactional email, manage contacts and events, collect leads with forms, and publish to social (X, LinkedIn, Instagram, Facebook, Pinterest) from one project. MCP lets the user ask for those actions in plain language.

This task connects the existing OnePush service to Windsurf Cascade through MCP. Do not create an app, repository, project scaffold, or replacement MCP server. Keep every response focused on OnePush. Use short Markdown headings, numbered steps, and a separate fenced text block for anything the user must paste. Skip completed steps and show only 1 next action. Never expose or repeat an API key. Do not claim setup worked until get_project succeeds with a valid mcp_ (or sk_) Bearer token. The full setup for Windsurf is self-contained on this page.

## 1. Check before changing anything

Check ~/.config/devin/mcp_config.json (or legacy ~/.codeium/windsurf/mcp_config.json) for an "onepush" entry under mcpServers. Prefer serverUrl (remote HTTP) over a plain url field copied from another client. If OnePush is already configured and its tools are available, skip to verification. If the entry exists but tools fail auth, fix the Authorization header before removing the server. Preserve working connections.

Anonymous helpers (no key): mcp_help, start_onepush_connect.

Do not call OnePush authenticate / auth_login tools to finish setup. Prefer the Authorization Bearer mcp_ header path. Do not invent headers like blotato-api-key.

## 2. Approve an mcp_ key (required)

If the user has no mcp_ key yet, give 1 action and wait:

1. Open https://ctl.onepush.app/mcp/connect
2. Sign up or log in, pick a project, click Approve
3. Copy the mcp_ key once into ONEPUSH_MCP_TOKEN (raw key only) or paste into the headers value with Bearer

Prefer putting the key only in env or mcp_config.json, not in chat. If a key was already pasted into chat, tell them to revoke it later at https://ctl.onepush.app/settings/mcp and create a new one.

## 3. Connect OnePush to Windsurf

If the connection is missing, guide the user one step at a time. Config is global at ~/.config/devin/mcp_config.json (open from Cascade MCP settings → Configure).

Recommended (env expansion):

```json
{
  "mcpServers": {
    "onepush": {
      "serverUrl": "https://api.onepush.app/mcp",
      "headers": {
        "Authorization": "Bearer ${env:ONEPUSH_MCP_TOKEN}"
      }
    }
  }
}
```

Plain header variant:

```json
{
  "mcpServers": {
    "onepush": {
      "serverUrl": "https://api.onepush.app/mcp",
      "headers": {
        "Authorization": "Bearer mcp_YOUR_KEY_HERE"
      }
    }
  }
}
```

1. Use serverUrl set to https://api.onepush.app/mcp. Do not rely on a Cursor-style url-only snippet for Windsurf remote HTTP.
2. Include the word Bearer and a space before the mcp_ key in the Authorization header.
3. Export ONEPUSH_MCP_TOKEN when using ${env:ONEPUSH_MCP_TOKEN}, or replace mcp_YOUR_KEY_HERE with their key.
4. Save the file, then Refresh MCP in Cascade. If tools are missing in this conversation, keep it open as a checklist, start a new Cascade chat, and show the setup prompt so the new session can finish verification.

Docs: https://docs.windsurf.com/windsurf/cascade/mcp (or Cascade Settings → MCP Servers)

- Create a OnePush account or approve a key: https://ctl.onepush.app/mcp/connect
- Manage or revoke keys: https://ctl.onepush.app/settings/mcp
- Connect a social profile: https://ctl.onepush.app (Social Marketing, then Profiles)

## 4. Verify access with real results

Call get_project. Report the project name and whether a sending domain looks verified. Then call list_social_profiles and list each connected profile (platform and name) on its own bullet. Zero profiles is fine for email-first users. Do not fail setup only because social is empty. Optionally call get_contact_count.

Declare setup complete only after get_project succeeds. Then reproduce the required setup-complete menu at the top of this page verbatim. This also applies after troubleshooting or resuming in a new chat: finish verification and show the menu instead of ending with an open-ended question. Never output a different task list or add extra menu items. End immediately after the exact menu.

## 5. Know what OnePush can do

Use these mappings when the user asks. Do not dump this catalog during setup:

- Project: get_project
- Contacts: list_contacts, create_contact, update_contact, get_contact_count
- Events and tags: track_event, list_events, list_tags, create_tag
- Email building blocks: list_actions, list_templates, list_campaigns
- Forms: list_forms, get_form_submissions, get_form_metrics
- Domain: attach_sending_domain, get_domain_dns_records, check_domain_verification
- Billing (read-only): get_billing_subscription, list_billing_invoices, create_billing_portal_url
- Social: list_social_profiles, social_get_connect_url, list_social_posts, create_social_post, schedule_social_post, publish_social_post (requires confirm: true)

Shipped social networks only: X, LinkedIn, Instagram, Facebook, Pinterest. Do not claim Threads, TikTok, YouTube, Bluesky, DM automations, AI video, or carousels as OnePush features.

## 6. Continue from the selected number

Ask only for the details needed by the selected task, then show drafts before taking the action.

- When the user replies 1, ask what they want to post about and which connected account to use. Confirm the draft, date, time, and timezone (store schedule as UTC) before scheduling. Publish only with confirm: true after explicit approval.
- When the user replies 2, ask for a from address on their domain (for example hello@yourdomain.com). Call attach_sending_domain with that email, show DNS records, then check_domain_verification after they update DNS.
- When the user replies 3, ask for the contact email and event name. Call create_contact or track_event, then confirm the result.
- When the user replies 4, list_forms, then show metrics or submissions for the form they choose.
- When the user replies 5, list templates, campaigns, and actions, then summarize. Do not invent send tools that are not available.
- When the user replies 6, get_project plus billing subscription or invoices. Call create_billing_portal_url only if they want to manage payment.
- Never invent a topic, campaign, product, announcement, contact, or domain. Never publish or schedule before the user approves.

## Finish with a verified result

Use the live tool schemas. Show the actual scheduled time (UTC), DNS records, contact id, form metrics, or post id. Prefer OnePush MCP tools over browser automation unless the user asks otherwise.

## Reference

- MCP endpoint: https://api.onepush.app/mcp
- Approve key: https://ctl.onepush.app/mcp/connect
- Manage keys: https://ctl.onepush.app/settings/mcp
- MCP product page: https://onepush.app/mcp
- Use cases: https://onepush.app/mcp/examples
- Cursor setup: https://onepush.app/cursor
- Claude setup: https://onepush.app/claude
- Codex setup: https://onepush.app/codex
- Grok Bot setup: https://onepush.app/grok-bot
- ChatGPT Dots setup: https://onepush.app/chatgpt-dots
- OpenClaw setup: https://onepush.app/openclaw
- Meta Muse setup: https://onepush.app/meta-muse
- Hermes setup: https://onepush.app/hermes
- Gemini setup: https://onepush.app/gemini
- VS Code setup: https://onepush.app/vscode
- Windsurf setup: https://onepush.app/windsurf

See what OnePush MCP can do · Cursor setup · Claude setup · Codex setup · Grok Bot setup · ChatGPT Dots setup · OpenClaw setup · Meta Muse setup · Hermes setup · Gemini CLI setup · VS Code setup

What it looks like after setup

You

Help me schedule a LinkedIn post for tomorrow.

Windsurf asks for the account, draft, time, and timezone before scheduling.

Windsurf

Ready to schedule this draft to your LinkedIn profile tomorrow at 15:00 UTC?

You

Yes, schedule it.

Windsurf

Scheduled on LinkedIn for tomorrow at 15:00 UTC. Nothing goes live until you confirm publish.

10 prompts to try

Copy one into Windsurf. Swap in your own account, topic, date, or timezone.

Schedule posts

  • Help me write and schedule a social post. Ask which connected account to use, what the post should say, and when it should go out. Show me the draft before scheduling.

  • Plan 3 posts for next week about my product update. Ask for my audience and goal, then show every draft before scheduling anything.

Domain and email

  • Attach my sending domain and show the SPF, DKIM, and MX records I need to add. Ask me for the from address first (for example hello@yourdomain.com).

  • Check if my sending domain is verified and tell me what is still missing.

Contacts and events

  • How many contacts are in this project? List the 20 most recent.

  • Create a contact for the email I give you, then track a signup event. Ask me for the email and event name first.

Forms

  • List all forms in this project and show submission numbers for each.

  • Show unique emails that submitted the form I choose. Ask which form first.

Project and billing

  • Give me a quick project summary: name, verification, contact count, and connected social profiles.

  • What is my subscription status? List recent invoices. Only open the billing portal if I ask to manage payment.

Frequently asked questions

Straight answers about connecting Windsurf, MCP keys, and what agents can do.

How do I connect OnePush to Windsurf?+

Copy the setup prompt from onepush.app/windsurf into Cascade. Approve a revocable mcp_ key at ctl.onepush.app/mcp/connect, add onepush under mcpServers in ~/.config/devin/mcp_config.json with serverUrl https://api.onepush.app/mcp and Authorization: Bearer mcp_…, refresh MCP, then let Windsurf verify with get_project.

What is the OnePush MCP URL for Windsurf?+

https://api.onepush.app/mcp. In mcp_config.json use the serverUrl field (not url), plus Authorization: Bearer mcp_….

Why serverUrl instead of url?+

Current Windsurf docs accept serverUrl or url for remote HTTP. Prefer serverUrl for OnePush so copied Cursor snippets are not half-applied. Always include Authorization: Bearer mcp_….

Where is the Windsurf MCP config file?+

Current Cascade installs use ~/.config/devin/mcp_config.json (Windows: %APPDATA%\devin\mcp_config.json). Open it from the Cascade Actions menu → Open MCP config file. Older Codeium Windsurf installs may still use ~/.codeium/windsurf/mcp_config.json.

Can I keep the mcp_ key out of the file?+

Yes. Prefer Authorization: Bearer ${env:ONEPUSH_MCP_TOKEN} (or the ${env:VAR} form Windsurf documents) and export the key in your shell environment.

Do I use blotato-api-key?+

No. OnePush expects Authorization: Bearer mcp_….

Do I use my project secret key (sk_)?+

Prefer a dedicated mcp_ key from the connect page or Settings → MCP. You can revoke mcp_ without rotating project sk_ or pk_.

What can Windsurf do after OnePush is connected?+

Draft and schedule social posts (X, LinkedIn, Instagram, Facebook, Pinterest), attach or verify a sending domain, manage contacts and events, review forms, list templates and campaigns, and check billing. Publishing social requires confirm: true.

Is social publishing automatic?+

No. Agents should show drafts first. publish_social_post only runs when confirm is true and you explicitly approve.

Where do I revoke an MCP key?+

Go to ctl.onepush.app/settings/mcp.