Marketing Analytics MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_AUTH_TOKEN | No | Bearer token for remote authentication (optional for local stdio). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gsc_search_analyticsA | Get Google Search Console search analytics data. Args: dimensions: Comma-separated dimensions (query, page, date, device, country). Default: "query" start_date: Start date YYYY-MM-DD (default: 31 days ago) end_date: End date YYYY-MM-DD (default: 3 days ago, due to GSC data lag) row_limit: Max rows to return (default: 500) country: 3-letter country code filter (e.g. usa, gbr, can). Empty for global. |
| gsc_totalsB | Get aggregate Google Search Console totals (clicks, impressions, CTR, position). Args: start_date: Start date YYYY-MM-DD (default: 31 days ago) end_date: End date YYYY-MM-DD (default: 3 days ago) country: 3-letter country code filter (e.g. usa, gbr, can). Empty for global. |
| gsc_compare_periodsA | Compare two date periods in Google Search Console side-by-side. Args: period1_start: First period start YYYY-MM-DD period1_end: First period end YYYY-MM-DD period2_start: Second period start YYYY-MM-DD period2_end: Second period end YYYY-MM-DD dimensions: Comma-separated dimensions (default: "query") row_limit: Max rows per period (default: 50) country: 3-letter country code filter (e.g. usa, gbr, can). Empty for global. |
| gsc_query_to_pagesA | Find which pages rank for a given query in GSC. Args: query: Exact query string to filter on start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) country: 3-letter country code (e.g. "usa"); empty for global row_limit: Max pages (default: 50) |
| gsc_position_distributionA | Bucket indexed pages by average position (1-3 / 4-10 / 11-20 / 21+). Args: start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) country: 3-letter country code; empty for global |
| gsc_page_query_matrixA | Find which queries drive impressions/clicks to a specific page. Args: page_url: Full or partial page URL (uses GSC 'contains' if no protocol) start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) country: 3-letter country code; empty for global row_limit: Max queries (default: 100) |
| gsc_movers_and_losersB | Pages whose position changed most between two periods (positive = improved). Args: period_a_start: First (older) period start YYYY-MM-DD period_a_end: First period end YYYY-MM-DD period_b_start: Second (newer) period start YYYY-MM-DD period_b_end: Second period end YYYY-MM-DD country: 3-letter country code; empty for global top_n: How many top movers and losers to return each (default: 25) |
| gsc_zero_click_pagesA | Pages with high impressions but ~0 clicks (CTR opportunities). Args: start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) min_impressions: Minimum impressions threshold (default: 200) country: 3-letter country code; empty for global row_limit: Max pages to inspect (default: 100) |
| gsc_branded_vs_unbrandedA | Split GSC totals into branded vs unbranded query buckets. Args: start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) country: 3-letter country code; empty for global brand_terms: Comma-separated brand regex terms (default: "acme") |
| gsc_country_comparisonA | Compare GSC totals across multiple countries. Args: start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) countries: Comma-separated 3-letter country codes (default: "usa,gbr,ind") |
| gsc_long_tail_queriesA | Extract long-tail, conversational GSC queries — the closest proxy to what users type into LLMs. Pulls all queries for the period, filters to those with >= min_words words, and returns them sorted by impressions. These 7+ word queries reflect natural-language problem statements rather than keyword searches, making them strong signals for GEO content strategy. Args: start_date: YYYY-MM-DD (default: 31 days ago) end_date: YYYY-MM-DD (default: 3 days ago) min_words: Minimum word count to include (default: 7) country: 3-letter country code (default: usa) row_limit: Max queries to return after filtering (default: 100) |
| ga4_site_engagementA | Get GA4 site engagement metrics (sessions, users, engagement rate, bounce rate). Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) country: Full country name filter (e.g. "United States", "United Kingdom") channel: Channel filter (e.g. "Organic Search", "Paid Search", "Direct") |
| ga4_channel_breakdownA | Get GA4 traffic breakdown by channel (Organic Search, Paid Search, Direct, etc.). Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) country: Full country name filter (e.g. "United States") |
| ga4_top_pagesA | Get top landing pages by sessions from GA4. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) limit: Max pages to return (default: 30) country: Full country name filter (e.g. "United States") channel: Channel filter (e.g. "Organic Search") |
| ga4_reportA | Run a custom GA4 report with any metrics and dimensions. Args: metrics: Comma-separated metric names (e.g. "sessions,totalUsers,keyEvents") dimensions: Comma-separated dimension names (e.g. "date,country"). Optional. start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) country: Full country name filter channel: Channel filter limit: Max rows (default: 50) |
| ga4_landing_pages_by_sourceA | Top landing pages broken out by sessionSource. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Full country name filter (e.g. "United States") channel: Channel filter (e.g. "Organic Search") limit: Max rows (default: 50) |
| ga4_conversions_by_pageC | Top landing pages by key events / conversions. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Full country name filter channel: Channel filter limit: Max rows (default: 50) |
| ga4_compare_periodsB | Compare two date periods in GA4 side-by-side over one dimension. Args: period1_start: First period start YYYY-MM-DD period1_end: First period end YYYY-MM-DD period2_start: Second period start YYYY-MM-DD period2_end: Second period end YYYY-MM-DD dimension: Dimension to group by (default: "landingPagePlusQueryString") country: Country filter channel: Channel filter limit: Max rows in diff (default: 50) |
| ga4_traffic_by_countryB | Sessions / users / engagement rate broken out by country. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) channel: Channel filter (e.g. "Organic Search") limit: Max countries (default: 30) |
| ga4_user_journeyA | Best-effort event timeline for a single user. Requires user-scoped clientId custom dimension exposed via GA4 — falls back to empty rows if not configured. Args: client_id: GA4 clientId value to filter on start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) limit: Max events (default: 100) |
| ga4_funnel_reportA | Approximate funnel: count users who fired each event in order. Returns per-step user counts and step-to-step conversion rates. Args: steps: Comma-separated event names in order (e.g. "page_view,form_start,form_submit") start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country filter channel: Channel filter |
| ga4_returning_vs_newC | Split sessions/users into new vs returning. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country filter channel: Channel filter |
| ga4_event_breakdownB | Breakdown of a specific event by a chosen dimension (default: landing page). Args: event_name: GA4 event name (e.g. "form_submit") start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country filter channel: Channel filter group_by: Dimension to break out (default: "landingPagePlusQueryString") limit: Max rows (default: 50) |
| ga4_traffic_by_deviceC | Sessions / users / engagement broken out by device category. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country filter channel: Channel filter |
| ga4_referrer_breakdownA | Top referrers (sessionSource) excluding direct. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country filter limit: Max referrers (default: 30) |
| ga4_llm_referralsA | Aggregate GA4 traffic from LLM platforms (Perplexity, ChatGPT, Claude, Gemini, etc.). Returns total LLM-referred sessions/users/key-events plus a per-source breakdown. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) country: Full country name filter (e.g. "United States") limit: Max source rows to return (default: 20) Note: totals reflect only the rows returned (bounded by limit). With 8 known LLM sources and limit=20, this covers all sources in practice. |
| ads_campaignsA | Get Google Ads campaign performance (cost, clicks, conversions, impression share). Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) |
| ads_keywordsA | Get Google Ads keyword performance with quality scores. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) limit: Max keywords to return (default: 30) |
| ads_search_termsA | Get actual search terms triggering Google Ads. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) limit: Max search terms to return (default: 50) |
| hubspot_search_dealsA | Search HubSpot deals with filters (READ-ONLY). Args: filters: JSON string of HubSpot filter groups array. Example: '[{"filters":[{"propertyName":"dealstage","operator":"EQ","value":"closedwon"}]}]' properties: Comma-separated deal properties to return limit: Max deals to return (default: 20) sort_by: Property to sort by (default: "createdate") after: Cursor token from a previous call's next_cursor for pagination |
| hubspot_recent_won_dealsA | Most recently CLOSED-WON deals, newest close date first (READ-ONLY). Use this for ANY question about recent/last/latest closed-won deals. It
resolves the correct deal-stage IDs automatically from the deal pipelines,
so you never build a filter yourself. Won/lost status lives on the deal's
Args: limit: Number of deals to return (default: 5) properties: Comma-separated deal properties to return |
| hubspot_get_companyA | Get a HubSpot company by ID (READ-ONLY). Args: company_id: HubSpot company ID properties: Comma-separated properties to return |
| hubspot_get_contactB | Get a HubSpot contact by ID (READ-ONLY). Args: contact_id: HubSpot contact ID properties: Comma-separated properties to return |
| hubspot_get_dealA | Get a HubSpot deal by ID (READ-ONLY). Args: deal_id: HubSpot deal ID properties: Comma-separated properties to return |
| hubspot_company_contactsA | Get contacts associated with a HubSpot company (READ-ONLY). Args: company_id: HubSpot company ID limit: Max contacts to return (default: 5) |
| hubspot_company_activityA | Get notes and meetings for a HubSpot company (READ-ONLY). Args: company_id: HubSpot company ID include_notes: Include notes (default: True) include_meetings: Include meetings (default: True) limit: Max items per type (default: 5) |
| hubspot_contact_journeyA | Get page visit history for a HubSpot contact (READ-ONLY). Args: contact_id: HubSpot contact ID limit: Max page visits to return (default: 50) |
| hubspot_search_contactsA | Search HubSpot contacts with filters (READ-ONLY). Args: filters: JSON string of HubSpot filter groups array (default: "[]") properties: Comma-separated contact properties to return created_after: ISO date filter on createdate (>=) created_before: ISO date filter on createdate (<=) limit: Max contacts (default: 50) after: Cursor token from a previous call's next_cursor for pagination |
| hubspot_search_companiesA | Search HubSpot companies with filters (READ-ONLY). Args: filters: JSON string of HubSpot filter groups array properties: Comma-separated company properties created_after: ISO date filter (>=) created_before: ISO date filter (<=) limit: Max companies (default: 50) after: Cursor token from a previous call's next_cursor for pagination |
| hubspot_get_deal_associationsA | Get contacts and company associated with a HubSpot deal (READ-ONLY). |
| hubspot_get_contact_associationsA | Get companies and deals associated with a HubSpot contact (READ-ONLY). |
| hubspot_get_company_dealsA | Get deals associated with a HubSpot company (READ-ONLY). Args: company_id: HubSpot company ID properties: Comma-separated deal properties |
| hubspot_search_meetingsA | Search HubSpot meetings within a date range, optionally by owner/outcome. Args: start_date: ISO date >= (default: 7 days ago) end_date: ISO date <= (default: today) owner: HubSpot owner ID filter outcome: hs_meeting_outcome filter (e.g. "COMPLETED", "NO_SHOW") limit: Max meetings (default: 50) after: Cursor token from a previous call's next_cursor for pagination |
| hubspot_contact_form_submissionsC | Form submission events for a HubSpot contact (READ-ONLY). |
| hubspot_contact_email_engagementB | Email opens/clicks/sent events for a HubSpot contact (READ-ONLY). |
| hubspot_contact_meetingsC | Meetings associated with a HubSpot contact (READ-ONLY). |
| hubspot_deal_activity_timelineA | Notes, meetings, and calls associated with a HubSpot deal (READ-ONLY). Args: deal_id: HubSpot deal ID limit: Max items per activity type (default: 25) |
| hubspot_search_pipeline_summaryA | Aggregate deals by a property over a date range (count + amount sum). Args: start_date: ISO date >= createdate (default: 30 days ago) end_date: ISO date <= createdate (default: today) group_by: Deal property to group by (default: "dealstage") pipeline: Pipeline ID filter (optional) limit: Max deals to scan (default: 200) |
| hubspot_field_coverageB | % of recent records that have each property populated. Args: object_type: "deals", "contacts", or "companies" (default: "deals") properties: Comma-separated properties to check sample_size: Recent records to sample (default: 200) |
| hubspot_property_distributionB | Value counts for a property over recent records. Args: object_type: "deals", "contacts", or "companies" property_name: Property to tally sample_size: Recent records to sample (default: 500) |
| hubspot_resolve_idA | Identify what type of HubSpot object (deal, company, or contact) an ID belongs to. Use this when a lookup returns 404 and you're unsure whether the ID is a deal ID, company ID, or contact ID. Args: unknown_id: The HubSpot numeric ID to probe |
| hubspot_pages_to_dealsA | Find contacts whose first/last analytics URL contains a pattern, plus their deals. Args: url_pattern: URL substring (e.g. "/alternatives/chargebee") start_date: ISO date >= createdate (optional) end_date: ISO date <= createdate (optional) limit: Max contacts (default: 100) |
| bing_top_queriesA | Get top Bing search queries (US traffic) with clicks, impressions, CTR, position. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) |
| bing_top_pagesA | Get top Bing pages by clicks (US traffic). Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) |
| bing_compare_periodsB | Compare two date periods in Bing side-by-side. Args: period1_start: First period start YYYY-MM-DD period1_end: First period end YYYY-MM-DD period2_start: Second period start YYYY-MM-DD period2_end: Second period end YYYY-MM-DD dimension: "query" or "page" (default: "query") limit: Max rows in diff (default: 50) |
| bing_query_to_pagesB | Find which Bing pages rank for a given query. Args: query: Exact query string start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) row_limit: Max pages (default: 50) |
| bing_page_query_matrixA | Find which Bing queries drive a specific page. Args: page_url: Page URL start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) row_limit: Max queries (default: 100) |
| bing_keywordsA | Get keywords Bing topically associates with example.com (impressions-ranked). Unlike query stats (what users typed), these reflect Bing's own topical index signal — useful for understanding perceived authority and content gaps. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country code (default: "us") language: Language code (default: "en-US") limit: Max keywords to return (default: 100) |
| bing_related_keywordsA | Get keywords Bing considers related to a seed keyword for this site. Useful for content gap analysis and discovering adjacent topics. Args: keyword: Seed keyword to expand start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) country: Country code (default: "us") language: Language code (default: "en-US") |
| bing_crawl_statsA | Get Bing's weekly crawl statistics for the site. Returns a time-series of crawl health: pages crawled, index count, and error counts (DNS, HTTP, timeout, robots-blocked) per week. |
| bing_crawl_issuesA | Get list of URLs with crawl issues reported by Bing. Each entry includes the URL and decoded issue labels (e.g. not_found_404, robots_txt_blocked, timeout). Useful for actionable technical SEO fixes. |
| bing_branded_vs_unbrandedA | Split Bing query totals into branded vs unbranded buckets. Args: start_date: YYYY-MM-DD (default: 28 days ago) end_date: YYYY-MM-DD (default: today) brand_terms: Comma-separated brand regex terms (default: "acme") |
| docs_add_tabA | Adds a new named tab to an existing Google Doc and writes formatted content. The service account must have Editor access to the target document. doc_id: Google Doc ID (from the URL: /document/d//edit) tab_title: Title shown on the tab blocks: JSON array of content blocks. Supported types: {"type": "h1", "text": "Title"} {"type": "h2", "text": "Section"} {"type": "h3", "text": "Subsection", "space_above": 18} {"type": "p", "text": "Body paragraph text"} {"type": "p", "text": "Bold label", "bold": true, "space_above": 8} {"type": "p", "text": "Evidence citation", "italic": true} {"type": "p", "text": "Strong", "color": [0.1, 0.55, 0.15]} {"type": "callout", "text": "Warning text", "bg_color": [1.0, 0.98, 0.8], "bold": true} {"type": "bullet", "text": "Bullet point text"} {"type": "spacer"} {"type": "image", "drive_file_id": "1abc...", "width": 450, "height": 280} {"type": "image", "uri": "https://.../img/", "width": 450, "height": 280} -- uri: use the URL returned by POST /img/upload on the MCP server {"type": "table", "headers": ["Col A", "Col B", "Col C"], "rows": [["val1", "val2", "val3"], ...], "header_color": [0.18, 0.42, 0.70]} Flags for p blocks: bold (bool), italic (bool), color ([r,g,b] 0-1 floats), space_above (pt) Flags for h1/h2/h3: space_above (pt) callout bg_color presets: warning=[1.0,0.98,0.8], info=[0.88,0.94,1.0], success=[0.9,0.97,0.9] Returns the tab_id and a link to the document. |
| docs_create_docA | Creates a new Google Doc owned by the service account and writes formatted content into its default tab. title: Document title blocks: JSON array of content blocks (same format as docs_add_tab) Returns the document URL. |
| gsc_quick_snapshotA | GSC totals + top 10 queries + top 10 pages in one call. Replaces calling gsc_totals, gsc_search_analytics(query), and gsc_search_analytics(page) separately. Use this as the starting point for any 'how is organic search doing?' question. Args: start_date: Start date YYYY-MM-DD (default: 31 days ago) end_date: End date YYYY-MM-DD (default: 3 days ago) country: 3-letter country code (e.g. usa, gbr). Empty for global. |
| ga4_quick_snapshotA | GA4 site engagement + channel breakdown + top 10 pages in one call. Replaces calling ga4_site_engagement, ga4_channel_breakdown, and ga4_top_pages separately. Use this as the starting point for any 'how is our website traffic doing?' question. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) |
| marketing_snapshotA | Full marketing overview: GSC organic + GA4 traffic in one call. Use this as the first tool for any weekly or ad-hoc 'give me an overview of marketing performance' question. Returns GSC totals, top queries, top pages, GA4 engagement, and channel breakdown. Args: start_date: Start date YYYY-MM-DD (default: 28 days ago) end_date: End date YYYY-MM-DD (default: today) |
| demo_report_datapackA | Complete, deterministic data pack for the weekly inbound demo report (READ-ONLY). Does in Python everything the demo skill used to hand-orchestrate: computes
the Mon–Sun target week, runs the exhaustive "Inbound - Organic" unclassified
sweep (paginated to the end), fetches in-period demo-outcome deals, and fully
enriches every deal (associations, company, contacts, notes, meetings, activity
timeline, form submissions) with pre-computed attribution Returns one JSON object: target/prev weeks, in_period_deals[], stale_unclassified[],
converting_urls[], plus Args: week_ending: Anchor date YYYY-MM-DD; the target week is the most recent completed Mon–Sun on/before it (default: today). weeks_back: Completed weeks back to target (default: 1 = last week). max_contacts_per_deal: Cap on contacts enriched per deal (default: 3). |
| traffic_report_datapackA | Complete, deterministic data pack for the weekly traffic report (READ-ONLY). Folds the traffic skill's GSC / Bing / GA4 / Google Ads batches plus LLM-referral gathering into one Python call: computes the Mon–Sun target + previous weeks (GSC gets its ~3-day lag), pulls every metric, and pre-computes the cross-references the skill used to ask the LLM to derive — the "Bing leads Google" candidate list and any emerging AI-surface referrer not yet in the curated list. Each platform batch is isolated so one API failure degrades to a Args: week_ending: Anchor date YYYY-MM-DD (default: today). weeks_back: Completed weeks back to target (default: 1 = last week). |
| events_upcomingA | List upcoming Acme events in a date range. Args: start_date: Start date YYYY-MM-DD (default: today) end_date: End date YYYY-MM-DD (default: 30 days from today) year: Calendar year to query — "2025" or "2026" (default: "2026") |
| events_searchA | Search Acme events by name, type, location, or attendee. Args: query: Text to search in event name or type (case-insensitive) event_type: Filter by type — e.g. "conference", "dinner", "webinar", "demo day" location: Filter by city or venue (case-insensitive) attendee: Filter by person attending — e.g. "saurabh", "apurv", "priyam" year: Calendar year — "2025" or "2026" (default: "2026") |
| events_detailA | Get full details for a specific event by name. Args: event_name: Full or partial event name to look up (case-insensitive) year: Calendar year — "2025" or "2026" (default: "2026") |
| events_budget_summaryA | Get Acme events budget summary — total spend, breakdown by type and quarter. Args: year: Calendar year — "2025" or "2026" (default: "2026") quarter: Filter to a quarter — "Q1", "Q2", "Q3", or "Q4" (optional) event_type: Filter by event type — e.g. "conference", "dinner" (optional) |
| events_attendee_scheduleA | Show all events a specific person is attending. Args: person: Person's first name — e.g. "saurabh", "apurv", "priyam", "brandyn", or "arnab" start_date: Only show events from this date onward YYYY-MM-DD (default: today) end_date: Only show events up to this date YYYY-MM-DD (optional) year: Calendar year — "2025" or "2026" (default: "2026") |
| events_fetch_pageA | Fetch and read the linked event website for a specific event. Use this when you need details not in the sheet — venue, agenda, speakers, registration info, pricing. Fetches the URL linked in the event name cell. Args: event_name: Full or partial event name (case-insensitive) year: Calendar year — "2025" or "2026" (default: "2026") |
| demo_report_save_weekA | Persist one week's classified demo report to Supabase (idempotent). Upserts the week-summary row on week_ending and replaces that week's lead
rows. Re-running a week converges — never duplicates. Returns a non-fatal
Args: week_summary_json: JSON object for one demo_report_weeks row. Required key: week_ending (YYYY-MM-DD, the Sunday). Other keys: week_start, total_inbound, unbranded, branded, direct, events, outbound_revivals, paid, flagged, ambiguous, ai_surface_leads, pipeline_usd, warnings, complete. leads_json: JSON array of per-lead rows. Each: deal_id, company, domain, classification, icp_fit, amount, dealstage, found_us, ai_surface_origin, hubspot_current_source, hubspot_update_to, rationale. week_ending is attached automatically. |
| demo_report_month_rollupA | Read all stored demo weeks for a month and return pre-aggregated totals. Pure Supabase read — no datapack pull, no HubSpot, no re-classification. The monthly skill renders the returned dict to a Google Doc tab. Args: month: Target month as YYYY-MM (e.g. "2026-05"). Returns weeks whose week_ending falls in that month, their leads, and summed totals. A month with no stored weeks returns an explicit note. |
| reddit_engagement_candidatesA | Return recent, classified, non-noise Reddit candidates to comment on. Reads the monitor pipeline's Intended use: draft a genuinely helpful, native-voice comment for the ones worth engaging (open the permalink first to read existing replies so you don't repeat them), then call reddit_mark_engaged after posting. Args: lookback_hours: Only candidates created within this window. Default 48. include_posts: Include top-level post candidates. Default true. include_comments: Include in-thread comment candidates (reply opportunities). Default true. limit: Max candidates returned after ranking. Default 25. exclude_engaged: Hide candidates already recorded via reddit_mark_engaged. Default true. |
| reddit_mark_engagedA | Record that a Reddit candidate was engaged so it stops re-surfacing. Idempotent upsert on post_id — call it once a comment is actually posted. Args: post_id: The candidate's post_id (e.g. "t3_abc123" for a post or "t1_def456" for an in-thread comment), exactly as returned by reddit_engagement_candidates. comment_url: Permalink of the comment that was posted (optional, for the audit trail). note: Free-text note, e.g. "skipped — off-topic" or "posted" (optional). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dweeb1578/marketing-analytics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server