A Model Context Protocol server that lets AI agents and coding assistants like Claude, ChatGPT, Cursor and Copilot query live marketing, analytics, CRM and warehouse data from 350+ sources at Windsor.ai — and act on it: manage campaigns, ad sets/groups, ads, budgets, and bidding on Meta Ads, Google Ads, TikTok Ads, LinkedIn Ads, and Microsoft Ads, create image posts on Instagram, and manage Google Business Profile, Klaviyo flows, and Amazon listings.
Add this to your MCP client config (Claude Desktop, Cursor, Manus, Windsurf, etc.):
{
"mcpServers": {
"windsor": {
"url": "https://mcp.windsor.ai/"
}
}
}
The server uses OAuth 2.0 — your client will redirect you to Windsor.ai
the first time you connect. No API key needed. If your client only supports
API keys, pass your Windsor.ai key as Authorization: Bearer <key>.
Windsor.ai MCP Server is a remote MCP server that exposes Windsor.ai's 350+ data connectors to any MCP-compatible AI client. Use it to pull live marketing performance data, query your data warehouse, build dashboards, calculate ROAS, and combine multi-channel data — all from natural-language prompts in your AI assistant.
Windsor.ai MCP works with any MCP-compatible client. Per-client setup guides live at windsor.ai/documentation/windsor-mcp/.
claude plugin install windsor-ai. Source; ships slash commands and an analyst agent.https://mcp.windsor.ai/ as an MCP server. Setup guide.url: https://mcp.windsor.ai/) · setup guide.https://mcp.windsor.ai/ via Manage MCP Servers · setup guide.https://mcp.windsor.ai/ as a Custom Connector at grok.com/connectors.https://mcp.windsor.ai/ as a Custom MCP · setup guide.https://mcp.windsor.ai/ under Settings → MCP connections (OAuth).https://mcp.windsor.ai/ · setup guide.url: https://mcp.windsor.ai/) · generic setup guide.get_current_user — Return the authenticated user's profile (username, email, and current subscription plan).get_connectors — List Windsor.ai connectors, their connected accounts, the write actions each connector supports, and the read options each exposes. Pass include_not_yet_connected=True to also see connectors the user can set up.get_connector_connect_info — Describe how to grant access to a connector and return its direct connect URL.get_connector_authorization_url — Get a browser link to connect, add, authorize, replace, or reconnect a connector account.get_subscription_url — Get a clickable Markdown auto-login link to start or upgrade a paid plan.get_options — List available fields, date filter columns, and connector-specific options.get_fields — Get descriptions, types and tables for specific fields.get_data — Run a query with date ranges, accounts, options, and nested filters.list_actions — Discover the write actions a connector exposes and their JSON schemas. Meta Ads: create / pause / enable / update campaigns, ad sets, and ads, set budgets, boost posts, and set Click-to-Message welcome messages. Google Ads: create campaigns / ad groups / ads, pause / enable them, set budgets and bidding, manage keywords (add / update / remove), push negative keywords, and manage Customer Match audience lists. TikTok Ads, LinkedIn Ads, and Microsoft Ads: pause / enable and set budgets. Instagram: create image posts. Google Business Profile: posts, review replies, photos, hours, and open status. Klaviyo: create flows and set flow status. Amazon Seller Central: update listings.execute_action — Run a write action against a specific account. Reach for this whenever you would otherwise recommend a platform change; confirm intent with the user first.get_destinations — List destinations that can receive scheduled exports of connector data (BigQuery, Google Sheets, Snowflake, databases, storage) and any reusable OAuth credentials.get_destination_tasks — List the scheduled export tasks the user already created, each with its destination, connector, schedule, and status.get_destination_setup_info — Describe a destination's target fields, allowed schedules, and an auto-login link to its setup form.create_destination_task — Create a recurring export of a connector's data to a destination, reusing OAuth the user already granted.get_windsor_login_url — Return an auto-login link into the Windsor.ai dashboard, optionally deep-linked to a specific page.contact_windsor — Send feedback, a support request, or a feature request to Windsor.ai and return a reference ID.350+ marketing, advertising, analytics, e-commerce, CRM, and database
sources. The full list is available at
/datasources or by calling
get_connectors(include_not_yet_connected=True). Highlights:
| Endpoint | Purpose |
|---|---|
POST / | MCP Streamable HTTP endpoint |
GET /sse/ | MCP SSE endpoint |
GET /docs | This documentation page |
GET /llms.txt | Short summary for LLMs |
GET /llms-full.txt | Full reference for LLMs |
GET /datasources | Live JSON list of connector IDs |
GET /health | Health check |
GET /.well-known/oauth-authorization-server | OAuth discovery metadata |
The MCP server implements the full MCP OAuth flow. Clients that support MCP OAuth — including Claude, ChatGPT, Cursor and Manus — discover the endpoints automatically and walk the user through a one-time login at Windsor.ai. Dynamic Client Registration is supported.
Pass a Windsor.ai API key as a Bearer token:
Authorization: Bearer <your_windsor_api_key>
Get an API key from your Windsor.ai account at onboard.windsor.ai.
get_connectorsList Windsor.ai connectors and their connected accounts. By default returns
only connectors with at least one connected account. Pass
include_not_yet_connected=True to also include connectors the user
can set up. Each connector also carries an actions list of
write-action ids (skip with include_actions=False) and an
options list of read-option ids that change what a
get_data read returns (skip with include_options=False).
get_connector_connect_infoDescribe how to grant access to a connector, including the auth type, direct connect URL, and any manual credential fields. Use it for connect, grant access, authorize, add, replace, or reconnect requests, including adding another account to an already-connected connector. Never ask users to paste secrets into chat; send them to the connect URL form.
get_connector_authorization_urlReturns a URL the user can open in their browser to set up a connector.
Always call get_connectors(include_not_yet_connected=True) first to
get the correct connector ID. Works for both OAuth-based and manual-credential
connectors. Use it for connect, grant access, authorize, add, replace, or
reconnect requests, including adding another account to an already-connected
connector. Do not substitute dashboard navigation steps for the returned
link.
get_subscription_urlReturns a clickable Markdown auto-login link to the Windsor.ai pricing
page, or to a specific plan's upgrade page. Optional target_plan
values are
BASIC, STANDARD, PLUS,
PROFESSIONAL, and ENTERPRISE.
get_optionsFor a connector and a set of accounts, return the available fields, the columns that can be used as date filters per table, and connector-specific options (e.g. attribution windows for Meta Ads).
get_fieldsGet descriptions, types and tables for specific fields. Field types
NUMERIC and PERCENT are metrics (aggregated); other
types are dimensions.
get_dataRun a query against a connector. Supports date ranges
(date_from/date_to or date_preset),
account filtering, connector-specific options, and nested filter conditions.
Filter operators: eq, neq, gt,
gte, lt, lte, contains,
ncontains, null, notnull, in.
Conditions can be nested with "and" and "or". A
condition is a [field, operator, value] list or a
{"field": ..., "operation": ..., "value": ...} dict.
Warehouse connectors (mysql, postgresql,
redshift, mongodb, snowflake,
big_query) require date_filters when filtering by
date.
list_actionsDiscover the write actions a connector exposes and their JSON schemas.
Meta Ads (facebook): create / pause / enable / update campaigns, ad
sets, and ads, set campaign and ad set budgets, boost posts, and set
Click-to-Message welcome messages. Google Ads
(google_ads): create campaigns, ad groups, and responsive search
ads, pause / enable them, set campaign budget, bidding strategy, target CPA,
max CPC, and CPC bid ceiling, add / update / remove keywords, push negative
keywords, and manage Customer Match audience lists (create, upload members,
rename, delete, and attach / detach them to ad groups). TikTok Ads
(tiktok), LinkedIn Ads (linkedin), and Microsoft Ads
(bing): pause / enable and set budgets. Instagram
(instagram): create image posts. Google Business Profile
(google_my_business): create / update local posts, reply to reviews,
upload photos, update location info, set regular / special hours, and set open
status. Klaviyo (klaviyo): create flows and set flow status. Amazon
Seller Central (amazon_sp): update product listings. Other connectors return an empty
list.
execute_actionExecute a write action returned by list_actions against a
specific connector account, with params matching the action's JSON schema.
Write actions modify external platform state — confirm intent with the user
before invoking.
get_destinationsList destinations that can receive a scheduled export of connector data (BigQuery, Google Sheets, Snowflake, databases, cloud storage), with any reusable OAuth credentials the user already connected.
get_destination_tasksList the scheduled export tasks the user already created, each with its destination, source connector, schedule, status, and a link to manage it in the dashboard.
get_destination_setup_infoDescribe a destination's target fields, allowed schedules, reusable credentials, and an auto-login link to its dashboard setup form. Sensitive fields are entered by the user in that form, never in chat.
create_destination_taskCreate a recurring export of a connector's data to a destination, reusing OAuth the user already granted. Confirm the source, target, and schedule with the user first.
get_current_userReturn the authenticated user's profile (username, email, and current subscription plan). Useful as a sanity check that the auth token is working.
get_windsor_login_urlReturn an auto-login URL into the Windsor.ai dashboard that signs the user in without a password, optionally deep-linked to a specific page.
contact_windsorSend feedback, a support request, or a feature request to Windsor.ai and return a reference ID the user can share with support.
Bearer <token> with no quotes.Narrow the date range, reduce fields, filter by accounts, or add filter
conditions to get_data.
Warehouse connectors need an explicit date_filters argument
when filtering by date.