Manage campaigns from any AI app
Sendflo's MCP integration lets you control campaigns, contacts, and segments using natural language — in Claude Desktop, Cursor, Windsurf, Zed, or any MCP-compatible AI. No switching tabs, no copying IDs.
What you can do
Setup (5 minutes)
curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
{
"mcpServers": {
"sendflo": {
"command": "uvx",
"args": ["sendflo-mcp"],
"env": {
"SENDFLO_API_KEY": "sk_sf_your_key_here"
}
}
}
}
Claude Desktop config: Mac: ~/Library/Application Support/Claude/claude_desktop_config.json | Windows: %APPDATA%\Claude\claude_desktop_config.json
Cursor / Windsurf / Zed: check your app's MCP settings panel — the JSON structure (mcpServers) is the same.
Available tools
Claude uses these tools automatically based on your prompts. You never need to call them directly.
Build your own integration
Every Sendflo feature is available via REST API. Use your sk_sf_ key as a bearer token on any endpoint — the same auth that powers the MCP integration.
Base URL: https://api.sendflo.io
Authentication
Create an API key in app.sendflo.io → Settings → API Keys. Pass it as a bearer token on every request.
Authorization: Bearer sk_sf_your_key_here
Endpoints
Contacts
| Method & Path | Description |
|---|---|
| GET/contacts | List contacts. Query: tag, limit |
| POST/contacts | Create contact. Body: name, phone, email, tags |
| PATCH/contacts/{id}/tags | Update contact tags |
| DELETE/contacts/{id} | Delete a contact |
Campaigns
| Method & Path | Description |
|---|---|
| GET/campaigns | List campaigns. Query: status |
| POST/campaigns | Create campaign. Body: name, channel, subject, message, segment_id |
| GET/campaigns/{id} | Get campaign with delivery stats |
| POST/campaigns/{id}/send | Send campaign to segment |
| DELETE/campaigns/{id} | Delete a draft campaign |
Segments
| Method & Path | Description |
|---|---|
| GET/segments | List all segments |
| POST/segments | Create segment. Body: name, filters |
| DELETE/segments/{id} | Delete a segment |
AI
| Method & Path | Description |
|---|---|
| POST/ai/generate-email | Generate subject + HTML. Body: prompt, tone |
| POST/ai/score-contacts | Score contacts hot/warm/cold. Pro plan. |
Account
| Method & Path | Description |
|---|---|
| GET/auth/me | Account info: credits, plan, email |
Code examples
List contacts tagged "VIP"
import httpx
client = httpx.Client(
base_url="https://api.sendflo.io",
headers={"Authorization": "Bearer sk_sf_your_key_here"},
)
contacts = client.get("/contacts", params={"tag": "VIP"}).json()
print(contacts)
Create and send an email campaign
# 1. Create the campaign
campaign = client.post("/campaigns", json={
"name": "Diwali Sale",
"channel": "email",
"subject": "🪔 50% off everything this Diwali",
"message": "<h1>Happy Diwali!</h1><p>Use code DIWALI50</p>",
"segment_id": 3,
}).json()
# 2. Send it
result = client.post(f"/campaigns/{campaign['id']}/send").json()
print(result)
Generate an email with AI
email = client.post("/ai/generate-email", json={
"prompt": "Announce our new summer collection with 30% off",
"tone": "friendly",
}).json()
print(email["subject"])
print(email["html"])
curl
curl https://api.sendflo.io/contacts \
-H "Authorization: Bearer sk_sf_your_key_here"