Model Context Protocol

Rovlin MCP Server

Connect AI assistants like Claude Desktop, Claude Code, Cursor, and ChatGPT directly to your Rovlin marketing account. Manage campaigns, audiences, leads, email templates, and images — without leaving your AI assistant.

ℹ️
The Rovlin MCP Server uses OAuth 2.0 Dynamic Client Registration. When an AI tool connects for the first time, it registers itself automatically, opens your browser for login, and requests authorization to access your account.

The Rovlin MCP server gives AI tools a standardized way to:

  • Access account and profile information
  • List, create, and analyze marketing campaigns
  • Manage customer audiences and audience segments
  • Create, update, and delete lead profiles
  • Upload images via URL or direct file upload to Rovlin CDN
  • Create and retrieve email templates

📋Prerequisites

1
A Rovlin account
You need an active Rovlin account at app.rovlin.com. Your existing login credentials are used for OAuth authorization.
2
An MCP-compatible AI client
Claude Desktop, Claude Code, Cursor, or any client that supports MCP with OAuth 2.0. See Connect Claude Desktop, Claude Code, Cursor, or ChatGPT.
3
MCP server URL
Obtain the MCP server URL from your Rovlin workspace settings. It takes the form https://<your-deployment>.rovlin.com.

What You Can Do

Once connected, your AI assistant can perform actions across six functional areas:

👤
Account
Retrieve your account details and profile information using natural language.
📣
Campaigns
List campaigns, view stats and analytics, and create new campaigns with a subject, template, and audience group.
👥
Audiences
Browse all audience groups, inspect individual segments, and list campaign recipients.
🗂️
Leads & Profiles
Full CRUD on customer profiles — get, create, update, and delete leads with contact details.
🖼️
Images
Upload images to Rovlin CDN by URL or base64 file. Returns a hosted image URL ready for templates.
✉️
Email Templates
Create branded HTML email templates with name, category tag, HTML content, and optional thumbnail.

🔐OAuth 2.0 Authentication

The Rovlin MCP server uses OAuth 2.0 with PKCE (Proof Key for Code Exchange) backed by AWS Cognito. MCP clients that support OAuth Dynamic Client Registration handle this flow automatically.

Modern MCP clients handle this automatically. Claude Desktop, Claude Code, and ChatGPT will prompt you to log in via your browser — no manual token management needed.

How it works

1
Client Registration
The AI client calls POST /register to register itself. The server returns a client_id and redirect URI.
2
Authorization
The client redirects you to GET /authorize, which forwards to your AWS Cognito hosted UI. You log in with your Rovlin credentials and approve access.
3
Token Exchange
After approval, the client exchanges the authorization code at POST /token using PKCE — no client secret needed. You receive an access token and refresh token.
4
Authenticated MCP Calls
The client sends Authorization: Bearer <token> with every request to /mcp or /sse.

Register a Client

POST/registerDynamic Client Registration
JSON Request
{ "client_name": "Claude Desktop" }
JSON Response — 201
{
  "client_id":                   "<your-app-client-id>",
  "client_name":                 "Claude Desktop",
  "redirect_uris":              ["https://<server>/callback"],
  "token_endpoint_auth_method": "none",
  "grant_types":                ["authorization_code"],
  "response_types":             ["code"]
}

Authorization Endpoint

GET/authorizeRedirects to Cognito hosted UI
Parameter Type Required Description
response_type string required Must be code
client_id string required The client_id from /register
redirect_uri string required Must match a registered redirect URI
code_challenge string required PKCE code challenge (SHA-256 of verifier)
code_challenge_method string required Must be S256
state string optional CSRF protection string, returned in callback

Token Exchange

POST/tokenapplication/x-www-form-urlencoded
Parameter Type Required Description
grant_type string required authorization_code
code string required The authorization code from the callback
redirect_uri string required Must match the original redirect_uri
code_verifier string required Original PKCE code verifier (pre-hash value)
client_id string required The client_id from /register

Refresh Token

POST/tokenapplication/x-www-form-urlencoded
Form Body
grant_type=refresh_token&client_id=<client_id>&refresh_token=<token>

🌐HTTP Transport (Recommended)

Streamable HTTP is the recommended transport for all modern MCP clients.

POST/mcpStreamable HTTP — primary MCP endpoint
ℹ️
Every request to /mcp must include a valid bearer token in the Authorization header. The server validates it against AWS Cognito before processing any tool calls.
HTTP Request
POST /mcp HTTP/1.1
Host: https://hcjmts3qxy.us-west-2.awsapprunner.com/
Authorization: Bearer <access_token>
Content-Type: application/json

📡SSE Transport (Legacy)

Available for clients that do not yet support Streamable HTTP.

GET/sseServer-Sent Events — legacy transport
⚠️
Use HTTP transport when possible. SSE transport is maintained for backwards compatibility. New integrations should use /mcp.

🖥️Connect Claude Desktop

Add the Rovlin MCP server to Claude Desktop by editing its configuration file.

1
Open Claude Desktop settings
Go to Claude → Settings → Developer and click Edit Config to open claude_desktop_config.json.
2
Add the Rovlin MCP server entry
claude_desktop_config.json
{
  "mcpServers": {
    "rovlin": {
      "type": "http",
      "url":  "https://hcjmts3qxy.us-west-2.awsapprunner.com"
    }
  }
}
3
Restart Claude Desktop
Fully quit and reopen Claude Desktop to detect the new server.
4
Authorize via browser
Claude Desktop will open your browser and prompt you to log in to Rovlin. Approve access to complete the connection.

💻Connect Claude Code

Register the Rovlin MCP server with one terminal command:

Shell
claude mcp add rovlin --transport http \
  --url https://hcjmts3qxy.us-west-2.awsapprunner.com

Or add it to .mcp.json at the root of your project to share the config with your team:

.mcp.json
{
  "mcpServers": {
    "rovlin": {
      "type": "http",
      "url":  "https://hcjmts3qxy.us-west-2.awsapprunner.com"
    }
  }
}
💡
Run claude mcp list to confirm the server is registered. Start a new Claude Code session to begin using Rovlin tools.

Connect Cursor

Cursor supports MCP servers natively. Add Rovlin via the Settings panel or your project config file.

1
Open Cursor Settings
Go to Cursor → Settings → MCP (or press Cmd/Ctrl + Shift + J and search for "MCP").
2
Add a new MCP server
Click + Add new MCP server, select Type: HTTP, and paste your Rovlin MCP URL.
MCP Server URL
https://hcjmts3qxy.us-west-2.awsapprunner.com

Alternatively, add it to .cursor/mcp.json in your project root:

.cursor/mcp.json
{
  "mcpServers": {
    "rovlin": {
      "type": "http",
      "url":  "https://hcjmts3qxy.us-west-2.awsapprunner.com"
    }
  }
}
3
Authorize via browser
Cursor will open your browser to log in to Rovlin. Approve access to complete the OAuth flow.
4
Start using Rovlin tools
Open a new Cursor chat session. Try: "List my Rovlin campaigns" or "Upload this image to Rovlin CDN."
💡
Cursor shows a green dot next to connected MCP servers. If the dot is red, check your URL and try reconnecting.

🤖Connect ChatGPT

ChatGPT supports MCP servers through ChatGPT Connectors, available on Plus, Team, and Enterprise plans. Once connected, you can manage Rovlin campaigns, leads, and templates through natural language.

⚠️
ChatGPT MCP support is rolling out gradually. As of 2025, Connectors are available in the ChatGPT desktop app (macOS) and expanding to web. Check help.openai.com to confirm availability on your plan.
1
Open ChatGPT Settings
Go to Settings → Connectors (or Settings → Beta Features → Connectors depending on your version).
2
Add a custom MCP server
Click + Add Server and select MCP as the server type.
3
Enter the Rovlin MCP URL
Paste your server URL. ChatGPT auto-discovers OAuth config from /.well-known/oauth-authorization-server.
MCP Server URL
https://hcjmts3qxy.us-west-2.awsapprunner.com
4
Authorize via browser popup
ChatGPT opens your Rovlin login page. Sign in and click Allow to grant access.
5
Start a new conversation
Open a fresh chat. Try: "Show me my Rovlin campaigns" or "Create a lead named Jane Doe in my Newsletter group."
💡
Tip: Include IDs when you have them. "Get stats for campaign ID abc123" is more reliable than "How is my latest campaign?"

Troubleshooting

Issue Fix
Server not found Confirm the MCP URL is correct and the server is running. Test that /health returns 200.
OAuth popup does not open Disable popup blockers for ChatGPT, or switch to the desktop app.
Authorized but no tools appear Start a completely new conversation — ChatGPT loads tools at session start only.
Token expired mid-session ChatGPT auto-refreshes tokens. If it fails, disconnect and reconnect in Settings.

👤Account Tools

1 tool
get_account_details
Retrieve your Rovlin account details and profile information.

Returns the full account profile associated with the authenticated user, including name, plan, and configuration details.

Parameters

Parameter Type Required Description
No parameters required.

Example prompt

Natural Language
"Show me my Rovlin account details"

📣Campaign Tools

4 tools
get_campaigns
List all marketing campaigns for your account, paginated, ordered newest first.
Parameter Type Required Description
page_number string required Page to retrieve. Must be "1" or higher.
get_campaign_stats
Get delivery, open, bounce, spam, and reject rate statistics for a campaign.
Parameter Type Required Description
campaign_id string required Unique campaign identifier (from get_campaigns)

Returns

JSON
{
  "bounce_rate":            2.4,
  "delivery_rate":          97.1,
  "opened_rate":            34.8,
  "spam_rate":              0.1,
  "sent_rate":              99.2,
  "reject_rate":            0.5,
  "total_customers_mapped": 1500
}
create_campaign
Create a new marketing campaign with a template, audience group, and scheduled dates.
Parameter Type Required Description
name string required Internal campaign name
subject string required Email subject line shown to recipients
templateId string required ID of the email template to use
startDate string required Campaign start date (ISO 8601)
endDate string required Campaign end date (ISO 8601)
customerGroup string required Audience group ID to target
mailToUse string required Sender email address
friendlyName string required Display name shown as the email sender
get_campaign_report
Get the full analytics report for a specific campaign.
Parameter Type Required Description
campaign_id string required Unique campaign identifier

👥Audience Tools

3 tools
get_all_audiences
Retrieve all customer group lists (audience segments) in your account.

Returns all customer groups. Group IDs are used as the customerGroup parameter when creating campaigns.

Parameter Type Required Description
No parameters required.
get_audience
Retrieve members of a specific audience segment, paginated.
Parameter Type Required Description
group_id string required Customer group identifier
page_number string required Page number ("1" or higher)
get_list
Get the recipient list for a specific campaign with per-recipient delivery status.
Parameter Type Required Description
campaign_id string required Unique campaign identifier
page_number string required Page number ("1" or higher)

🗂️Profile (Lead) Tools

6 tools
get_profiles
List all lead profiles in your account with full details, paginated.
Parameter Type Required Description
page_number string required Page number ("1" or higher)
get_profile_names
Lightweight lead list — returns only name and ID. Ideal for lookups before update or delete.
Parameter Type Required Description
page_number string required Page number ("1" or higher)
get_profile
Retrieve full details of a single lead by their profile ID.
Parameter Type Required Description
profile_id string required Unique lead profile identifier
create_profile
Add a new lead to a customer group with full contact details.
Parameter Type Required Description
group_name string required Name of the lead group
group_id string required ID of the lead group
first_name string required Lead's first name
last_name string required Lead's last name
email string required Lead's email address
mobile_number string required Lead's mobile phone number
whatsapp_number string required Lead's WhatsApp number
update_profile
Update one or more fields on an existing lead. Only supply the fields you want to change.
Parameter Type Required Description
profile_id string required Unique lead profile identifier
group_id string optional Move lead to a different group
first_name string optional Updated first name
last_name string optional Updated last name
email string optional Updated email address
mobile_number string optional Updated mobile number
whatsapp_number string optional Updated WhatsApp number
delete_profile
Permanently delete a lead profile. This action cannot be undone.
⚠️
Irreversible. Deleted profiles cannot be recovered.
Parameter Type Required Description
profile_id string required Unique lead profile identifier to delete

🖼️Image Tools

2 tools
upload_image_from_url
Download an image from a public URL and upload it to Rovlin's CDN. Returns a hosted image URL.

The server downloads the image, detects its format, obtains a pre-signed S3 URL, and returns a CDN-hosted URL ready for use in templates or campaigns.

Parameter Type Required Description
image_url string required Publicly accessible image URL (JPEG, PNG, WebP, GIF)

Returns

JSON
{
  "success":  true,
  "imageUrl": "https://cdn.rovlin.com/images/abc123.png",
  "key":      "images/abc123.png"
}
upload_image_via_file
Upload an image directly from a base64-encoded file payload.

Use when you have raw image data rather than a URL. Only image MIME types are accepted.

Parameter Type Required Description
file_base64 string required Base64-encoded image data
file_name string required Filename with extension (e.g. banner.png)
content_type string optional MIME type (e.g. image/png). Auto-detected from filename if omitted.

Returns

JSON
{
  "success":  true,
  "imageUrl": "https://cdn.rovlin.com/images/xyz789.png",
  "key":      "images/xyz789.png"
}

✉️Email Template Tools

2 tools
create_email_template
Create a new HTML email template stored in your Rovlin account.
Parameter Type Required Description
name string required Display name for the template
tag_name string required Category tag (e.g. newsletter, promo, transactional)
content string required Full HTML body of the email template
thumbnail string optional URL of a preview thumbnail for the template gallery
get_email_template
Retrieve all available email templates — global Rovlin templates and your custom ones.

Returns two sets: global templates shared across all Rovlin accounts, and user-specific templates you've created.

Parameter Type Required Description
No parameters required.

Returns

JSON
{
  "global":       [...], // Rovlin shared templates
  "userSpecific": [...]  // Your custom templates
}

📡All Endpoints

OAuth & Well-Known

POST/registerDynamic client registration
GET/authorizeInitiates OAuth flow via Cognito hosted UI
POST/tokenToken exchange & refresh
GET/callbackOAuth callback handler
GET/.well-known/oauth-authorization-serverOAuth server metadata
GET/.well-known/oauth-protected-resourceProtected resource metadata
GET/.well-known/jwks.jsonCognito JSON Web Key Set

MCP Transport

POST/mcpStreamable HTTP transport (recommended)
GET/sseServer-Sent Events transport (legacy)

Utility

GET/healthServer health check — returns 200 OK

⚠️Error Codes

HTTP Status Error Description
401 Unauthorized Missing or invalid bearer token. Re-authenticate the client.
400 invalid_request Missing required parameters in the request body or query string.
400 unsupported_grant_type grant_type must be authorization_code or refresh_token.
400 invalid_token Token signature verification failed or the token has expired.
500 server_error Unexpected server error. Contact Rovlin support if this persists.
Tool Missing Authorization token MCP tool called without a valid session. Re-authenticate.
Tool Page number must be 1 or higher Paginated tools require page_number as a string "1" or greater.

📝Changelog

🚀
Initial Release
Launched Rovlin MCP Server with OAuth 2.0 + PKCE via AWS Cognito, Streamable HTTP and SSE transports, and 18 tools across Account, Campaigns, Audiences, Profiles, Images, and Email Templates.