MCP Server

momentic

com.momenticmarketing/momentic
Marketing & Advertising Search & Research Public & reachable MCP 2026-07-28

What this MCP does

Audits webpages and domains for SEO, AI crawler access, GEO/AEO readiness, freshness, structured data, link architecture, and bot reachability.

analyze_page
Fetches any public URL and returns structured on-page SEO signals: title, meta description, canonical, lang, heading counts, JSON-LD schema types, OpenGraph/Twitter cards, internal/external link counts, word count, and whether Cloudflare Markdown for Agents (Accept: text/markdown) returns markdown for this URL. Designed to power the page-seo-score and geo-aeo-readiness skills.
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) URL'}}, 'additionalProperties': False}
analyze_site
Probes a domain root for site-wide AI-discovery signals: /llms.txt, /robots.txt (parsed AI-bot rules for GPTBot/ClaudeBot/PerplexityBot/GoogleOther/CCBot/Google-Extended/Applebot-Extended), /sitemap.xml (URL count + sections), /.well-known/agent-skills/index.json, /.well-known/api-catalog, /.well-known/mcp/server-card.json, and homepage Link header.
Input schema
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'Root domain or full URL (e.g. "example.com" or "https://example.com")'}}, 'additionalProperties': False}
check_bots
Probes a URL with multiple AI bot user-agents in parallel and returns per-bot reachability (status, key WAF/CDN headers, and a verdict). Reveals WAF/CDN-layer blocks that robots.txt audits miss — e.g. a site that allows GPTBot in robots.txt but returns 403 to it at Cloudflare. Verdicts: reachable, blocked-403, challenged-by-cdn, rate-limited-429, server-error-5xx, redirected-to-block-page, timeout, fetch-error. The summary.blockingPattern field names exactly which bots got blocked when others got through.
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) URL to probe'}, 'timeoutMs': {'type': 'number', 'description': 'Per-fetch timeout in ms (default 5000)'}, 'userAgents': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional UA strings to test. Defaults to GPTBot, ClaudeBot, Claude-Web, PerplexityBot, GoogleOther, Google-Extended, CCBot, Applebot-Extended, ChatGPT-User, meta-externalagent.'}}, 'additionalProperties': False}
compute_link_graph
Pure graph computation over a crawled page set. Input: an array of {url, internalLinks: [{href, anchor}, ...], title?, bodyText?}. Returns orphan pages (in-degree 0, excluding the homepage), hubs (top-N by in-degree), authorities (top-N by out-edges to hubs), PageRank-lite ranking, anchor-diversity issues (all-anchors-same, no-descriptive-anchors), connected components, and isolated clusters. With options.findMentions=true and title+bodyText supplied, also returns mention-not-linked suggestions. URL normalization (trailing slash, lowercased host, dropped utm_*/fbclid/gclid/etc.) is on by default.
Input schema
{'type': 'object', 'required': ['pages'], 'properties': {'pages': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'internalLinks'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'bodyText': {'type': 'string'}, 'internalLinks': {'type': 'array', 'items': {'type': 'object', 'required': ['href'], 'properties': {'href': {'type': 'string'}, 'anchor': {'type': ['string', 'null']}}}}}}, 'description': 'Array of crawled pages'}, 'options': {'type': 'object', 'properties': {'hubCount': {'type': 'number', 'description': 'Number of top hubs to return. Default 10.'}, 'findMentions': {'type': 'boolean', 'description': 'Default false. If true (and pages include title+bodyText), include mentioned-not-linked suggestions. O(N^2) — slow on large inputs.'}, 'rankingLimit': {'type': 'number', 'description': 'Max ranking entries to return. Default 50.'}, 'normalizeUrls': {'type': 'boolean', 'description': 'Default true. Strip trailing slashes, lowercase host, drop tracking params.'}, 'authorityCount': {'type': 'number', 'description': 'Number of top authorities to return. Default 10.'}}, 'additionalProperties': False}}, 'additionalProperties': False}
extract_links
Pure HTML parser. Given a single page's HTML and its baseUrl, returns every <a href> resolved to absolute, separated into internal vs external by host, with cleaned anchor text, rel attribute, and nofollow flag. Skips fragments, mailto:, tel:, javascript:, and empty hrefs. Designed to feed compute_link_graph: the agent crawls pages on the user's machine (their IP, no Cloudflare subrequest cap) and calls extract_links per page, then ships the structured page data into compute_link_graph.
Input schema
{'type': 'object', 'required': ['html', 'baseUrl'], 'properties': {'html': {'type': 'string', 'description': 'Raw HTML of the page'}, 'baseUrl': {'type': 'string', 'description': 'Absolute URL of the page (used to resolve relative links and identify internal vs external)'}}, 'additionalProperties': False}
get_brand_overview
Returns the canonical AI-readable description of Momentic from /llms.txt. Use for authoritative brand info, positioning, services, and contact.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_page
Fetches a Momentic page as Markdown (uses Cloudflare's Markdown for Agents). Pass an absolute path like "/team/jane-doe" or a full momenticmarketing.com URL.
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Absolute path or full URL on momenticmarketing.com'}}, 'additionalProperties': False}
list_pages
Lists pages on momenticmarketing.com from sitemap.xml. Optional `section` filter: team, case-studies, capabilities, services, blog, seo-news, content-academy, google-updates, blog-categories, careers, about, contact, pricing.
Input schema
{'type': 'object', 'properties': {'section': {'type': 'string', 'description': 'Section slug (e.g. "team", "case-studies"). Omit to list all.'}}, 'additionalProperties': False}
lookup_entity
Resolves a brand/topic/person to a structured entity record built from Wikidata + Wikipedia (free APIs, no auth). Pass exactly one of: `name` (search by string), `qid` (Wikidata Q-number to skip search), or `wikipediaTitle` (resolves to QID via the article's wikibase_item). Returns: qid, label, description, instanceOf (P31 with resolved labels), sameAs (Wikipedia + claim-derived URLs for Twitter/Instagram/Facebook/GitHub/LinkedIn/YouTube/Crunchbase/official site), sitelinks (top 10 language wikis) and sitelinkCount, Wikipedia summary + thumbnail, Wikipedia section outline (canonical sub-topic structure for content briefs), and alternativeMatches when a name search returned multiple candidates. Powers entity-graph alignment checks (Stage 4 trustworthiness, Stage 10B verification) and feeds the content-brief skill's outline.
Input schema
{'type': 'object', 'oneOf': [{'required': ['name']}, {'required': ['qid']}, {'required': ['wikipediaTitle']}], 'properties': {'qid': {'type': 'string', 'pattern': '^[Qq][0-9]+$', 'description': 'Wikidata Q-number (e.g. "Q12345") to fetch directly, skipping search.'}, 'name': {'type': 'string', 'description': 'Brand/topic/person name to search Wikidata for. The top match is resolved; runners-up are returned in alternativeMatches.'}, 'skipWikipedia': {'type': 'boolean', 'description': 'If true, return Wikidata-only (no Wikipedia summary/sections). Default false.'}, 'wikipediaTitle': {'type': 'string', 'description': 'English Wikipedia article title (e.g. "Acme_Corporation"). Resolves to QID via pageprops, then proceeds.'}}, 'additionalProperties': False}
parse_freshness_signals
Pure parser (no fetching). Given HTML plus optional response headers and a sitemap entry for the same URL, extracts every freshness marker on the page — HTTP Last-Modified, sitemap lastmod, JSON-LD dateModified/datePublished (including @graph), OpenGraph article:modified_time/published_time, meta updated/dc.date.modified/dcterms.modified/itemprop dateModified, and the first labelled visible date (Last updated / Updated / Published). Returns per-source ISO dates, the freshest source, cross-source agreement spread, and heuristic flags (stale year in title, suspicious future date, only-published-not-modified, none-at-all). Powers the geo-aeo-readiness skill's freshness check — `Last-Modified` headers and `dateModified` JSON-LD are weighted heavily for AI grounding eligibility.
Input schema
{'type': 'object', 'required': ['html'], 'properties': {'url': {'type': 'string', 'description': 'URL the HTML was fetched from (for context)'}, 'html': {'type': 'string', 'description': 'Full HTML of the page'}, 'headers': {'type': 'object', 'description': 'Response headers as a plain object with lowercased keys (e.g. {"last-modified": "..."})', 'additionalProperties': {'type': 'string'}}, 'sitemapEntry': {'type': 'object', 'properties': {'lastmod': {'type': 'string'}}, 'description': 'Parsed sitemap entry for this URL, e.g. {"lastmod": "2026-04-15"}', 'additionalProperties': True}}, 'additionalProperties': False}
search
Searches across Momentic page URLs from sitemap.xml (case-insensitive substring match on URL). For deeper search, fetch matching pages with get_page.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Search term'}}, 'additionalProperties': False}
Added
lookup_entity
Sept. 17, 2026, 12:36 p.m.
Added
compute_link_graph
Sept. 17, 2026, 12:36 p.m.
Added
extract_links
Sept. 17, 2026, 12:36 p.m.
Added
parse_freshness_signals
Sept. 17, 2026, 12:36 p.m.
Added
check_bots
Sept. 17, 2026, 12:36 p.m.
Added
analyze_site
Sept. 17, 2026, 12:36 p.m.
Added
analyze_page
Sept. 17, 2026, 12:36 p.m.
Added
search
Sept. 17, 2026, 12:36 p.m.
Added
get_page
Sept. 17, 2026, 12:36 p.m.
Added
list_pages
Sept. 17, 2026, 12:36 p.m.
Added
get_brand_overview
Sept. 17, 2026, 12:36 p.m.