Windsor.ai

Windsor.ai MCP Server — Connect AI Agents to Marketing Data

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.

Quick connect

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>.

Overview

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.

Compatible AI Clients

Windsor.ai MCP works with any MCP-compatible client. Per-client setup guides live at windsor.ai/documentation/windsor-mcp/.

Available Tools

Supported Data Sources

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:

Advertising

Meta Ads (Facebook & Instagram) Google Ads Microsoft Ads (Bing) TikTok Ads LinkedIn Ads Snapchat Pinterest Reddit X/Twitter Amazon Ads Apple Search Ads Criteo Taboola Outbrain DV360 CM360 Search Ads 360 AdRoll StackAdapt The Trade Desk

Analytics & Search

Google Analytics 4 Adobe Analytics Mixpanel Amplitude Matomo Plausible PostHog Search Console Looker Metabase

Social Organic

Facebook Organic Instagram LinkedIn Organic TikTok Organic Pinterest Organic X Organic Threads YouTube Sprout Social

CRM & Marketing Automation

HubSpot Salesforce Pipedrive Dynamics 365 Zoho CRM Klaviyo Mailchimp ActiveCampaign Brevo Customer.io Iterable SendGrid Intercom Outreach Salesloft

E-commerce & Payments

Shopify Magento WooCommerce BigCommerce PrestaShop Stripe PayPal Klarna Recharge Recurly Chargebee Walmart TikTok Shop

Databases, Warehouses & Files

BigQuery Snowflake PostgreSQL MySQL Redshift MongoDB Firebolt SFTP Google Sheets Airtable Notion Amazon S3

Use Case Examples

Setup Instructions

Prerequisites

Server Endpoints

EndpointPurpose
POST /MCP Streamable HTTP endpoint
GET /sse/MCP SSE endpoint
GET /docsThis documentation page
GET /llms.txtShort summary for LLMs
GET /llms-full.txtFull reference for LLMs
GET /datasourcesLive JSON list of connector IDs
GET /healthHealth check
GET /.well-known/oauth-authorization-serverOAuth discovery metadata

Authentication

OAuth 2.0 (recommended)

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.

API key

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.

Tool Reference

get_connectors

List 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_info

Describe 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_url

Returns 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_url

Returns 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_options

For 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_fields

Get descriptions, types and tables for specific fields. Field types NUMERIC and PERCENT are metrics (aggregated); other types are dimensions.

get_data

Run 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_actions

Discover 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_action

Execute 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_user

Return the authenticated user's profile (username, email). Useful as a sanity check that the auth token is working.

get_windsor_login_url

Return 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_windsor

Send feedback, a support request, or a feature request to Windsor.ai and return a reference ID the user can share with support.

Troubleshooting

Authentication failures (401)

"Requested data exceeds size limit"

Narrow the date range, reduce fields, filter by accounts, or add filter conditions to get_data.

"Connector requires specifying date filters"

Warehouse connectors need an explicit date_filters argument when filtering by date.