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 325+ sources at Windsor.ai — and act on it, by pausing or enabling campaigns and setting campaign and ad set budgets on Meta Ads and Google Ads.
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 325+ 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.url: https://mcp.windsor.ai/) · generic setup guide.get_current_user — Return the authenticated user's profile (username, email).get_connectors — List Windsor.ai connectors, their connected accounts, and the write actions each connector supports. Pass include_not_yet_connected=True to also see connectors the user can set up.get_connector_authorization_url — Get a browser link to connect or authorize a connector (OAuth or manual).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 (pause / enable campaign, set campaign or ad set budget) and their JSON schemas. Currently available on Meta Ads and Google Ads.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.325+ 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.
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.
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.
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.