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, and create image posts on Instagram.
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 campaigns, ad sets, and ads, set budgets, and boost posts. Google Ads: create campaigns / ad groups / ads, pause / enable them, set budgets and bidding, and push negative keywords. TikTok Ads, LinkedIn Ads, and Microsoft Ads: pause / enable and set budgets. Instagram: create image posts.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_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".
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 campaigns, ad sets,
and ads, set campaign and ad set budgets, and boost posts. 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, and push negative keywords. TikTok Ads
(tiktok), LinkedIn Ads (linkedin), and Microsoft Ads
(bing): pause / enable and set budgets. Instagram
(instagram): create image posts. 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_current_userReturn the authenticated user's profile (username, email). 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.