Marketing MCP Server
Provides keyword research and performance data from Google Ads, including keyword ideas with search volume and competition levels.
Enables file management on Google Drive, including listing, searching, reading, creating, and updating Google Docs, Sheets, and Slides.
Retrieves search performance data from Google Search Console, such as clicks, impressions, CTR, and average position by query or page.
Allows searching Meta's ad interest database for audience targeting, returning audience sizes, topics, and descriptions.
Audits web page performance using Google PageSpeed Insights, providing Core Web Vitals scores, performance score, and optimization opportunities.
Mines Reddit for topic insights and community sentiment, retrieving top posts, scores, comment counts, and top comment excerpts.
Researches YouTube videos by topic, returning engagement metrics like view counts, likes, channel names, and publish dates.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Marketing MCP Server show me my top search queries from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Marketing MCP Server
A centralized marketing data platform built on the Model Context Protocol. Connect Claude (or any MCP client) to Google Ads, Search Console, GA4, Meta, YouTube, Reddit, Google Trends, PageSpeed, Google Business Profile, and Google Drive — all through a single server.
Why This Exists
Marketing teams juggle dozens of platform dashboards. This server consolidates 10 marketing APIs into 14 structured MCP tools that any AI assistant can call directly. Ask Claude to pull your keyword rankings, audit page speed, research trending topics, analyze ad audiences, or save docs straight to Google Drive — without switching tabs or writing API code.
Related MCP server: 1ClickReport MCP Server
Tools
Search & SEO
Tool | What It Does | Auth |
| Search Console performance — clicks, impressions, CTR, and average position by query or page | Google Service Account |
| Keyword research — search volume, competition level, and bid estimates from Google Ads Keyword Planner | Google OAuth |
| Core Web Vitals audit — LCP, CLS, TBT, FCP, performance score, and optimization opportunities | None (free) |
Analytics & Audiences
Tool | What It Does | Auth |
| GA4 organic traffic — sessions, engagement rate, bounce rate, and more by dimension | Google Service Account |
| Meta ad interest search — audience sizes, topics, and targeting suggestions | Meta Access Token |
Research & Trends
Tool | What It Does | Auth |
| Google Trends — interest over time, rising queries, and trend direction for up to 5 keywords | None (free) |
| YouTube video research — titles, view counts, likes, channels, and publish dates | YouTube API Key |
| Reddit topic mining — top posts, scores, comment counts, and top comment excerpts | Reddit OAuth |
Local Business
Tool | What It Does | Auth |
| Google Business Profile — reviews, ratings, and performance metrics for a location | Google Service Account |
Google Drive
Tool | What It Does | Auth |
| List files in Drive — name, type, modified date, and link, with optional folder and MIME type filters | Google Service Account |
| Search Drive by file name or full-text content across all files | Google Service Account |
| Read file content — exports Google Docs/Sheets/Slides to plain text (or other formats) | Google Service Account |
| Create a new Google Doc (or Sheet/Slide) with optional initial content in any folder | Google Service Account |
| Update an existing file's content or title | Google Service Account |
Quick Start
1. Install
git clone https://github.com/elmandalorian-thx/MCP-Marketing.git
cd MCP-Marketing
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev]2. Configure Credentials
Option A: Setup Wizard (recommended)
marketing-mcp setupInteractive CLI that walks you through each integration, prompts for API keys, and writes your .env file.
Option B: Manual
cp .env.example .env
# Edit .env with your API keysOnly configure the APIs you need — tools gracefully report which credentials are missing.
3. Run the Server
# Local (stdio) — for Claude Desktop or direct piping
python -m marketing_mcp
# Remote (HTTP) — for Claude.ai or networked clients
marketing-mcp --transport streamable-http --port 8000Connect to Claude
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"marketing": {
"command": "python",
"args": ["-m", "marketing_mcp"],
"cwd": "/path/to/MCP-Marketing",
"env": {
"GOOGLE_SERVICE_ACCOUNT_JSON": "/path/to/service-account.json",
"YOUTUBE_API_KEY": "your-key-here"
}
}
}
}Claude.ai (Remote)
Deploy via Docker (see below), then add the HTTP endpoint as a remote MCP server in Claude.ai settings.
Claude Code
claude mcp add marketing -- python -m marketing_mcpAdmin Dashboard
A built-in web UI for managing credentials and monitoring tool status.
Launch Standalone
marketing-mcp admin
# Dashboard at http://127.0.0.1:8001/adminIn HTTP Mode
When running with --transport streamable-http, the dashboard is automatically available at /admin on the same port:
marketing-mcp --transport streamable-http --port 8000
# Dashboard at http://localhost:8000/adminFeatures
Integration cards — See which APIs are connected, partially configured, or missing
Configure credentials — Enter API keys through the web form (stored in
.env)Test connections — Verify each integration works with a single click
Tools overview — See all 14 tools and their availability status
Health endpoint —
/admin/healthreturns uptime, tool count, and integration status
Security
Set ADMIN_TOKEN in your .env to require Bearer token auth on admin routes:
ADMIN_TOKEN=your-secret-tokenCredential Reference
Variable | Required By | How to Get |
| Google Ads | |
| Google Ads | Same as above |
| Google Ads | OAuth consent flow |
| Google Ads | Google Ads Manager account |
| Google Ads | Your account ID (no dashes) |
| GSC, GA4, GBP, Drive | Google Cloud Console — file path or JSON string |
| GA4 (optional) | GA4 Admin > Property Settings |
| Meta | |
| YouTube | Google Cloud Console — enable YouTube Data API v3 |
| Reddit App Preferences — create a "script" app | |
| Same as above | |
| Any string, e.g. | |
| PageSpeed (optional) | Google Cloud Console — optional, increases quota |
| GBP | Google Business Profile Manager |
| GBP | Google Business Profile Manager |
| Drive (optional) | Default folder ID from Google Drive URL |
| Admin dashboard (optional) | Any secret string — protects |
You don't need all credentials. Each tool checks its own requirements and returns a helpful message if something is missing.
Tool Details
pagespeed_audit
Audit any URL's performance. No authentication needed.
pagespeed_audit(url="https://example.com", strategy="mobile")Returns: Performance score (0-100), Core Web Vitals (LCP, CLS, TBT, FCP), Speed Index, and top optimization opportunities ranked by potential time savings.
gads_keyword_ideas
Research keywords with Google Ads Keyword Planner data.
gads_keyword_ideas(seed_keywords=["seo tools", "marketing automation"], limit=20)Parameters:
seed_keywords— list of seed termslanguage_id— language constant (default"1000"= English)location_id— geo target (default"2840"= United States)limit— max results (default 20)
Returns: Keyword, average monthly searches, competition level (LOW/MEDIUM/HIGH), low and high bid estimates.
gsc_search_queries
Pull search performance data from Google Search Console.
gsc_search_queries(site_url="https://example.com", days=28, dimensions=["query"])Parameters:
site_url— verified property URLdays— lookback period (default 28)dimensions—["query"],["page"],["query", "page"], etc.row_limit— max rows (default 20)
Returns: Queries/pages with clicks, impressions, CTR (%), and average position.
ga4_organic_performance
Get organic traffic metrics from GA4.
ga4_organic_performance(property_id="123456789", days=28)Parameters:
property_id— GA4 property ID (falls back toGA4_PROPERTY_IDenv var)days— lookback period (default 28)metrics—["sessions", "engagedSessions", "bounceRate"](customizable)dimensions—["sessionDefaultChannelGroup"](customizable)
Returns: Traffic metrics broken down by the specified dimensions.
meta_interest_targeting
Search Meta's ad interest database for audience targeting.
meta_interest_targeting(query="fitness", limit=10)Returns: Interest name, estimated audience size, topic category, and description.
google_trends_explorer
Explore Google Trends data for up to 5 keywords.
google_trends_explorer(keywords=["AI marketing", "SEO"], timeframe="today 3-m", geo="US")Returns: Interest summary (latest, average, max, trend direction) and top rising related queries per keyword.
youtube_topic_research
Search YouTube and get engagement data.
youtube_topic_research(query="content marketing tips", max_results=10, order="viewCount")Returns: Video title, channel, view count, likes, publish date, and direct URL.
reddit_topic_research
Mine Reddit for topic insights and community sentiment.
reddit_topic_research(query="best CRM software", subreddit="smallbusiness", sort="relevance", limit=10)Returns: Post title, subreddit, score, comment count, URL, and top comment excerpt.
gbp_insights
Get Google Business Profile reviews and ratings.
gbp_insights(account_id="123", location_id="456", days=28)Returns: Recent reviews with ratings and comments, reviewer names, dates, and average rating.
gdrive_list_files
List files in Google Drive with optional folder and type filters.
gdrive_list_files(folder_id="abc123", page_size=20, mime_type="application/vnd.google-apps.document")Parameters:
folder_id— restrict to a specific folder (optional)page_size— max files to return (default 20)mime_type— filter by MIME type (optional)
Returns: File name, type, last modified date, ID, and direct link.
gdrive_search
Search Google Drive by file name or full-text content.
gdrive_search(query="marketing plan", full_text="Q4 budget", limit=10)Parameters:
query— search by file namefull_text— search within file contentmime_type— filter by MIME type (optional)limit— max results (default 20)
Returns: Matching files with name, type, modified date, ID, and link.
gdrive_read_file
Read the content of any Google Drive file. Automatically exports Google Workspace files (Docs, Sheets, Slides) to plain text.
gdrive_read_file(file_id="abc123", export_format="text/plain")Parameters:
file_id— the Drive file IDexport_format— MIME type for export (default"text/plain")
Returns: The file's text content with a title header.
gdrive_create_doc
Create a new file in Google Drive. Defaults to a Google Doc.
gdrive_create_doc(title="Campaign Brief", content="# Q4 Campaign\n\nObjectives...", folder_id="abc123")Parameters:
title— document titlecontent— initial text content (optional)folder_id— destination folder (optional)mime_type—"application/vnd.google-apps.document"(default),"application/vnd.google-apps.spreadsheet", etc.
Returns: Created file name, ID, and direct link.
gdrive_update_doc
Update an existing file's content or title.
gdrive_update_doc(file_id="abc123", content="Updated content here", new_title="Campaign Brief v2")Parameters:
file_id— the Drive file IDcontent— new file content (optional)new_title— rename the file (optional)
Returns: Updated file name, ID, modified timestamp, and link.
Project Structure
MCP-Marketing/
├── src/marketing_mcp/
│ ├── server.py # FastMCP server + tool registration
│ ├── __main__.py # CLI entry point
│ ├── clients/ # Tier 1: API integrations (14 tools)
│ │ ├── pagespeed.py # PageSpeed Insights
│ │ ├── google_ads.py # Google Ads Keyword Planner
│ │ ├── search_console.py # Google Search Console
│ │ ├── ga4.py # GA4 Data API
│ │ ├── meta.py # Meta Graph API
│ │ ├── google_trends.py # Google Trends (pytrends)
│ │ ├── youtube.py # YouTube Data API v3
│ │ ├── reddit.py # Reddit (PRAW)
│ │ ├── google_business.py # Google Business Profile
│ │ └── google_drive.py # Google Drive (list, search, read, create, update)
│ ├── admin/ # Admin dashboard (web UI + API routes)
│ │ ├── routes.py # Starlette HTTP handlers
│ │ └── templates.py # Single-page HTML dashboard
│ ├── cli_setup.py # Interactive CLI setup wizard
│ ├── workflows/ # Tier 2: multi-API orchestration (planned)
│ ├── agents/ # Tier 3: AI agent tools (planned)
│ └── utils/
│ ├── auth.py # Credential management
│ ├── cache.py # Thread-safe TTL cache
│ ├── formatting.py # Markdown/JSON response formatting
│ └── errors.py # Error handling + credential sanitization
├── tests/
│ ├── test_utils/ # 24 utility tests
│ └── test_clients/ # 27 tool tests
├── .github/workflows/
│ ├── ci.yml # Lint + test (Python 3.12, 3.13)
│ └── auto-merge-to-main.yml # Auto-merge claude/* branches
├── pyproject.toml # Dependencies + config
├── Dockerfile # Container deployment
├── .env.example # All credential placeholders
└── CLAUDE.md # Project context for Claude CodeDevelopment
# Run all tests (51 tests)
python3 -m pytest tests/ -v
# Lint
ruff check src/ tests/
# Run with auto-reload (development)
marketing-mcp --transport streamable-http --port 8000Adding a New Tool
Create
src/marketing_mcp/clients/your_tool.pyfollowing the pattern in any existing clientImport
mcpfromserver.py, decorate with@mcp.tool()Add the import to
server.pyAdd credentials to
CREDENTIAL_CONFIGinutils/auth.pyand.env.exampleWrite tests in
tests/test_clients/test_your_tool.pyRun
ruff check src/ tests/ && python3 -m pytest tests/ -v
Deployment
Docker
docker build -t marketing-mcp .
docker run -p 8000:8000 --env-file .env marketing-mcpRailway / Cloud Run
The Dockerfile exposes port 8000 with streamable-http transport. Set environment variables in your platform's dashboard.
Design Decisions
Token-efficient — Tool descriptions are concise (1-2 sentences). Responses are pre-formatted server-side. Default limits of 10-20 results keep payloads small.
Centralized — All marketing APIs live in one server. Client apps only need MCP connectivity.
Cached — Every tool uses
TTLCache(1hr for keyword data, 24hr for audience data) to avoid redundant API calls and rate limits.Fail-safe — Missing credentials return helpful setup messages. API errors are caught, sanitized, and returned as readable text.
Roadmap
Tier 2 Workflows —
content_gap_analysis,cross_channel_keyword_map,ad_spend_organic_overlapTier 3 AI Agents —
keyword_content_brief,search_intent_classifier,weekly_seo_digestAI Search Visibility — Track brand citations in ChatGPT, Claude, and Gemini responses
SERP Rank Tracking — Competitive keyword position monitoring
License
Private repository. See project documentation for usage terms.
Available Tools
35 toolsbing_search_queriesB
Get Bing search query data — impressions, clicks, CTR, and position for your site.
Inputs: site_url (required), limit, format. Returns: result
builtwith_lookupA
Detect the technology stack of any website — CMS, analytics, ads, frameworks, and hosting.
Uses the free BuiltWith API. No API key required.
Inputs: domain (required), format. Returns: result
ga4_organic_performanceB
Get organic traffic metrics (sessions, engagement, bounce rate) from GA4.
Inputs: days, limit, format, metrics, +2 more. Returns: result
gads_keyword_ideasB
Get keyword ideas with search volume, competition, and bid estimates from Google Ads.
Inputs: seed_keywords (required), limit, format, language_id, +1 more. Returns: result
gbp_insightsC
Get Google Business Profile reviews and performance metrics for a location.
Inputs: days, format, account_id, location_id. Returns: result
gdrive_create_docA
Create a new file in Google Drive. Defaults to a Google Doc. Set mime_type to 'application/vnd.google-apps.spreadsheet' for Sheets.
Inputs: title, content, folder_id, mime_type. Returns: result
gdrive_list_filesB
List files in Google Drive, optionally filtered by folder or MIME type.
Inputs: format, folder_id, mime_type, page_size. Returns: result
gdrive_read_fileA
Read content from a Google Drive file. Exports Google Docs/Sheets/Slides to the requested format (default: plain text).
Inputs: file_id, export_format. Returns: result
gdrive_searchB
Search Google Drive by file name or full-text content.
Inputs: limit, query, format, full_text, +1 more. Returns: result
gdrive_update_docB
Update an existing Google Doc's content or title in Google Drive.
Inputs: content, file_id, new_title. Returns: result
get_client_profileA
Get a specific client's profile with all their account IDs.
Inputs: client (required). Returns: result
google_trends_explorerB
Explore Google Trends interest over time and related queries for up to 5 keywords.
Inputs: keywords (required), geo, format, timeframe. Returns: result
gsc_search_queriesA
Get search query performance (clicks, impressions, CTR, position) from Google Search Console.
Inputs: site_url (required), days, format, row_limit, +1 more. Returns: result
hubspot_contactsA
List recent HubSpot contacts with name, email, company, and lifecycle stage.
Inputs: limit, format. Returns: result
hubspot_dealsA
List recent HubSpot deals with stage, amount, close date, and owner.
Inputs: limit, format. Returns: result
linkedin_ad_targetingA
Search LinkedIn ad targeting facets — industries, job titles, skills, and company sizes.
Inputs: query (required), facet, limit, format. Returns: result
list_clientsA
List all client profiles with their configured account IDs.
Use this to see which clients are set up and what accounts they have linked. Each client maps a friendly name (e.g. 'stihl') to their GA4 property, Search Console site, Google Ads customer ID, and more.
Inputs: format. Returns: result
mailchimp_audiencesB
List Mailchimp audiences (lists) with subscriber counts and stats.
Inputs: format. Returns: result
mailchimp_campaignsA
Get recent Mailchimp email campaigns with open rates, click rates, and send counts.
Inputs: limit, format. Returns: result
marketing_categoriesA
List all marketing prompt categories and how many prompts are available.
Use this to discover what types of marketing tasks you can do with your connected platforms.
Inputs: format. Returns: result
marketing_promptsA
Browse ready-to-use marketing prompts based on your connected platforms.
Shows prompts you can use right now based on which APIs you have configured. Filter by category (seo, ads, social, analytics, content, local, email, ecommerce, crm, competitive, workflow) and level (beginner, intermediate, advanced).
Inputs: level, format, category. Returns: result
meta_interest_targetingB
Search Meta ad interests and get audience size estimates for a topic.
Inputs: query (required), limit, format. Returns: result
pagespeed_auditC
Audit a URL's performance with Core Web Vitals and optimization tips.
Inputs: url (required), format, strategy. Returns: result
pinterest_search_pinsA
Search Pinterest pins by topic — get pin titles, descriptions, links, and save counts.
Inputs: query (required), limit, format. Returns: result
prompt_generatorA
Generate a personalized set of marketing prompts for your business.
Provide your business type (e.g., 'ecommerce store selling sneakers', 'local dentist in Austin', 'B2B SaaS for HR teams') and optionally your marketing goals and preferred platforms. Returns customized prompts you can copy and use immediately.
Inputs: business_type (required), goals, platforms. Returns: result
reddit_topic_researchB
Search Reddit for posts about a topic with scores, comments, and top comment excerpts.
Inputs: query (required), sort, limit, format, +2 more. Returns: result
semrush_domain_overviewC
Get domain analytics overview from Semrush — organic traffic, keywords, and top pages.
Inputs: domain (required), limit, format, database. Returns: result
semrush_keyword_overviewB
Get keyword metrics from Semrush — volume, difficulty, CPC, and SERP features.
Inputs: keyword (required), format, database. Returns: result
shopify_ordersC
Get recent Shopify orders with totals, fulfillment status, and customer info.
Inputs: limit, format, status. Returns: result
shopify_productsA
List Shopify products with titles, prices, inventory status, and variants.
Inputs: limit, format. Returns: result
tiktok_interest_targetingA
Get TikTok Ads interest categories for audience targeting research.
Inputs: advertiser_id (required), format. Returns: result
x_search_recentB
Search recent tweets/posts on X (Twitter) — get text, likes, retweets, and impression counts.
Inputs: query (required), limit, format. Returns: result
yelp_business_reviewsB
Get recent Yelp reviews for a specific business.
Inputs: business_id (required), limit, format. Returns: result
yelp_business_searchB
Search Yelp businesses — get ratings, review counts, categories, and pricing.
Inputs: term (required), location (required), limit, format. Returns: result
youtube_topic_researchB
Search YouTube videos for a topic and get view counts, likes, and engagement data.
Inputs: query (required), order, format, max_results. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 35 tools
Most tools are clearly separated by platform prefixes like gdrive_, gads_, semrush_, and shopify_, so an agent can usually tell them apart. However, there is real overlap among research tools (keyword tools, topic research tools) and especially among the three prompt-related tools, which could cause misselection.
The naming pattern is generally consistent: snake_case with a source/platform prefix followed by a resource or action, such as gdrive_list_files, semrush_keyword_overview, and hubspot_contacts. It deviates between verb-led names (list_clients, gdrive_read_file) and noun-led names (mailchimp_audiences, marketing_prompts), but the overall convention remains predictable.
35 tools is a heavy surface for an agent to select from, and it clearly exceeds the 25-tool threshold where coherence tends to degrade. The broad multi-platform scope explains the count, but many tools are single-purpose wrappers that could be consolidated or scoped into separate servers.
The server provides strong read/research coverage across many marketing channels, including SEO, ads, social, local, email, ecommerce, and CRM. However, most integrations are read-only or list-style with no create/update/delete operations, leaving obvious gaps such as Mailchimp campaign creation, Shopify order management, and HubSpot contact updates.
Related MCP Connectors
An MCP for marketers that gives agents tools for SEO, AEO, socials and ads data. Generous free tier; works in Claude, ChatGPT, Cursor and other MCP clients.
Hosted MCP server for marketing agencies: connect Google Ads, GA4, Search Console, Meta, LinkedIn and more to Claude or ChatGPT. Pull reports and make changes via OAuth login, no setup.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Your agent needs live data — a competitor's traffic, who to contact there, what people are saying, what Google and ChatGPT answer about you, a company's filings. Normally that is six vendor accounts, six sets of keys and six SDKs. This is one URL. **What you can ask for** • "How much traffic does stripe.com get, where does it come from, and who competes for the same keywords?" • "Find 20 Series-B fintech companies in Germany and the heads of marketing there, with emails." • "Does ChatGPT mention our brand when someone asks for the best CRM — and what does it cite?" • "What is X saying about $NVDA today, and what did the stock actually do?" • "Search the web for this, then scrape the three best pages into markdown." **How to use it** Point any MCP client at https://mcp.aisa.one/mcp and sign in with OAuth — there is no key to create or paste. Then just ask: the agent calls search to find the right operation and use to run it. **Why this rather than the source** 26 sources behind one account and one bill — DataForSEO, Semrush, Ahrefs, Similarweb, Apollo, X/Twitter, Instagram, Reddit, Pinterest, YouTube, Tavily, Exa, Perplexity, Firecrawl, CoinGecko, Kalshi, Polymarket, AgentMail and more, 580+ operations. tools/list returns five tools, not 580, so the introduction does not eat your context window. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** One slice at a time: https://mcp.aisa.one/seo/mcp · /finance/mcp · /social/mcp · /search/mcp · /sales/mcp · /mail/mcp · /gtm/mcp, or a single provider like /twitter-api/mcp. Same account, fewer tools listed, and search still reaches everything. Full list at https://mcp.aisa.one/servers
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to answer growth questions in plain English by connecting to marketing and product data via 49 MCP tools.22MIT
- FlicenseNot gradedqualityCmaintenanceProvides 40 MCP tools to connect AI assistants like Claude to marketing platforms (Google Ads, Meta Ads, GA4, Search Console, Stripe) for reading, analyzing, managing, and monitoring ad campaigns and analytics through natural language.-
- AlicenseNot gradedqualityDmaintenanceProvides a bundle of marketing data APIs as MCP tools, including contact extraction, Google Maps reviews, SEO audits, and more. Enables AI agents to access these services with Solana USDC payment support.MIT

PaidSync MCPofficial
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to create, manage, and optimize advertising campaigns across 14 ad and measurement platforms through a single MCP endpoint, with over 530 executable tools.4MIT