# com.momenticmarketing/momentic

> Free SEO, GEO, and AEO audits: analyze any page or domain, AI-crawler access, agent readiness.

- name: com.momenticmarketing/momentic
- version: 0.2.0
- connection class: R0 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 60/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.momenticmarketing%2Fmomentic
- tools: https://api.protogrid.dev/v1/servers/com.momenticmarketing%2Fmomentic/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "momentic": {
      "type": "http",
      "url": "https://momenticmarketing.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% ~updated-83d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 60/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: ask_momentic (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_brand_overview (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); analyze_page (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,115 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 9 tool changes in 30 days
- fail `stability.rug_pull`: 5 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 12, about 3,115 tokens to load them all
- tool set hash: 3938cb5434248fec8a1c2193ada0bb80
- tools last changed: 2026-10-20T18:43:48.250Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.momenticmarketing/momentic.svg)](https://protogrid.dev/servers/com.momenticmarketing/momentic)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `ask_momentic` added
  - Asks Ask Momentic a question and returns its answer, written by AI from momenticmarketing.com pages, with the Momentic pages it is based on as sources. Use it for questions about Momentic (services, Atlas, the team, case studies, pricing) and about SEO and AI search topics Momentic publishes research on, such as AI chatbot market share, AI Overviews, llms.txt, AI crawlers or query fan out. A question someone asked before returns at once; a new one takes about 30 seconds. If the result says the answer is still being written, call the tool again with the same question after about 30 seconds.
- 2026-10-19 `check_bots` changed (description, inputSchema)
  - before: Probes a URL with AI crawler user agents (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, CCBot, Applebot, meta-externalagent) in parallel, plus a regular Chrome browser request as a baseline, and returns per-bot reachability (status, key WAF/CDN headers, verdict). Reveals WAF/CDN-layer blocks that robots.txt audits miss. Verdicts: reachable, blocked-403, blocked-4xx, challenged-by-cdn (including 200 challenge pages), rate-limited-429, redirected-to-block-page, inconclusive-not-bot-specific (the browser baseline was refused too, so the block is not aimed at the bot), not-found, server-error-5xx, timeout, fetch-error. summary.blocked counts only bot-specific blocks; timeouts and errors are counted separately. Requests come from Cloudflare's network, not the bot operators' IPs (see probe.note). Google-Extended and Applebot-Extended are robots.txt tokens, not user agents, and are not probed.
  - after: Probes a URL with AI crawler user agents, using the operators' current documented strings (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, Google-Agent, CCBot, Applebot, meta-externalagent, meta-externalfetcher, Amzn-SearchBot, MistralAI-User, DuckAssistBot) in parallel, plus a regular Chrome browser request as a baseline, and returns per-bot reachability (status, key WAF/CDN headers, verdict). Reveals WAF/CDN-layer blocks that robots.txt audits miss. Verdicts: reachable, blocked-403, blocked-4xx, challenged-by-cdn (including 200 challenge pages), rate-limited-429, redirected-to-block-page, inconclusive-not-bot-specific (the browser baseline was refused too, so the block is not aimed at the bot), not-found, server-error-5xx, timeout, fetch-error. summary.blocked counts only bot-specific blocks; timeouts and errors are counted separately. Requests come from Cloudflare's network, not the bot operators' IPs (see probe.note). Google-Extended and Applebot-Extended are robots.txt tokens, not user agents, and are not probed.
- 2026-10-19 `analyze_site` changed (description)
  - before: Probes a domain root for site-wide AI-discovery signals: /llms.txt; /robots.txt parsed per RFC 9309 for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, Claude-Web, PerplexityBot, Perplexity-User, GoogleOther, Google-Extended, CCBot, Applebot-Extended, Meta-ExternalAgent (aiBotStatus is the verdict for the homepage path / only; aiBotDisallows lists rules that still block an allowed bot elsewhere); the sitemap (/sitemap.xml or robots.txt Sitemap lines, sitemap indexes followed, gzip read): urlCount is unique page URLs, urlCountComplete says whether every sitemap file was read; /.well-known/agent-skills/index.json, /.well-known/api-catalog, /.well-known/mcp/server-card.json; and the homepage Link header. Every file reports found: true, false (checked and absent, including HTML catch-all pages), or null with checked:false (blocked, erroring or timed out: unknown).
  - after: Probes a domain root for site-wide AI-discovery signals: /llms.txt; /robots.txt parsed per RFC 9309 for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, Google-Extended, CCBot, Applebot-Extended, Meta-ExternalAgent, meta-externalfetcher, Amzn-SearchBot, MistralAI-User, DuckAssistBot (aiBotStatus is the verdict for the homepage path / only; aiBotDisallows lists rules that still block an allowed bot elsewhere); the sitemap (/sitemap.xml or robots.txt Sitemap lines, sitemap indexes followed, gzip read): urlCount is unique page URLs, urlCountComplete says whether every sitemap file was read; /.well-known/agent-skills/index.json, /.well-known/api-catalog, /.well-known/mcp/server-card.json; and the homepage Link header. Every file reports found: true, false (checked and absent, including HTML catch-all pages), or null with checked:false (blocked, erroring or timed out: unknown).
- 2026-10-19 `search` changed (description, inputSchema)
  - before: Full-text search across every page on momenticmarketing.com (blog posts, research, the Google update tracker, case studies, Content Academy guides, Atlas, team pages). Returns up to 10 pages ranked by relevance, each with its URL, title, content type, published date, author and the passage that best matches the query. Read a full page with get_page.
  - after: Full-text search across every page on momenticmarketing.com (blog posts, research, the Google update tracker with each update's status and dates, case studies, Content Academy guides, Atlas, team pages, careers, the SEO news feed item by item, and Momentic's agent tools and skills), including pages published since Webflow's sitemap was last rebuilt. Returns up to 10 pages ranked by relevance (newest first when the query asks for the latest, newest or most recent; tracker pages by the date Google announced the update), each with its URL, title, content type, published date, author and the passage that best matches the query. Read a full page with get_page.
- 2026-10-19 `search` changed (description, inputSchema) **meaning changed**
  - before: Full-text search across every page on momenticmarketing.com (titles, headings, body text and image descriptions). Returns up to 10 matching pages, best first, each with its URL, title and the passage that matched. Read a full page with get_page.
  - after: Full-text search across every page on momenticmarketing.com (blog posts, research, the Google update tracker, case studies, Content Academy guides, Atlas, team pages). Returns up to 10 pages ranked by relevance, each with its URL, title, content type, published date, author and the passage that best matches the query. Read a full page with get_page.
- 2026-10-16 `check_bots` changed (description) **meaning changed**
  - before: 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.
  - after: Probes a URL with AI crawler user agents (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, CCBot, Applebot, meta-externalagent) in parallel, plus a regular Chrome browser request as a baseline, and returns per-bot reachability (status, key WAF/CDN headers, verdict). Reveals WAF/CDN-layer blocks that robots.txt audits miss. Verdicts: reachable, blocked-403, blocked-4xx, challenged-by-cdn (including 200 challenge pages), rate-limited-429, redirected-to-block-page, inconclusive-not-bot-specific (the browser baseline was refused too, so the block is not aimed at the bot), not-found, server-error-5xx, timeout, fetch-error. summary.blocked counts only bot-specific blocks; timeouts and errors are counted separately. Requests come from Cloudflare's network, not the bot operators' IPs (see probe.note). Google-Extended and Applebot-Extended are robots.txt tokens, not user agents, and are not probed.
- 2026-10-16 `analyze_site` changed (description) **meaning changed**
  - before: 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.
  - after: Probes a domain root for site-wide AI-discovery signals: /llms.txt; /robots.txt parsed per RFC 9309 for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, Claude-Web, PerplexityBot, Perplexity-User, GoogleOther, Google-Extended, CCBot, Applebot-Extended, Meta-ExternalAgent (aiBotStatus is the verdict for the homepage path / only; aiBotDisallows lists rules that still block an allowed bot elsewhere); the sitemap (/sitemap.xml or robots.txt Sitemap lines, sitemap indexes followed, gzip read): urlCount is unique page URLs, urlCountComplete says whether every sitemap file was read; /.well-known/agent-skills/index.json, /.well-known/api-catalog, /.well-known/mcp/server-card.json; and the homepage Link header. Every file reports found: true, false (checked and absent, including HTML catch-all pages), or null with checked:false (blocked, erroring or timed out: unknown).
- 2026-10-16 `analyze_page` changed (description) **meaning changed**
  - before: 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.
  - after: Fetches any public URL and returns structured on-page SEO signals: title, meta description, canonical (+ canonicalCount), lang, heading counts, schema types (JSON-LD including @graph and nested entities, plus microdata and schema.org RDFa; schemaTypesBySyntax splits them), OpenGraph/Twitter cards (any attribute order), internal/external link counts, word count (body text without scripts, templates, comments; see wordCountMethod), and whether markdown is served for Accept: text/markdown. Text values are entity-decoded. pageLoaded:false means the checker was refused or got an error or challenge page; then title, schemaTypes and wordCount are null (unknown, not empty). markdownNegotiation is null with markdownNegotiationChecked:false when the markdown probe was refused.
- 2026-10-16 `search` changed (description) **meaning changed**
  - before: Searches across Momentic page URLs from sitemap.xml (case-insensitive substring match on URL). For deeper search, fetch matching pages with get_page.
  - after: Full-text search across every page on momenticmarketing.com (titles, headings, body text and image descriptions). Returns up to 10 matching pages, best first, each with its URL, title and the passage that matched. Read a full page with get_page.

Full history: https://api.protogrid.dev/v1/servers/com.momenticmarketing%2Fmomentic/changes

## Remotes

- https://momenticmarketing.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (12)

- `analyze_page`: Fetches any public URL and returns structured on-page SEO signals: title, meta description, canonical (+ canonicalCount), lang, heading counts, schema types (JSON-LD including @graph and nested entities, plus microdata and schema.org RDFa; schemaTypesBySyntax splits them), OpenGraph/Twitter cards (any attribute order), internal/external link counts, word count (body text without scripts, templates, comments; see wordCountMethod), and whether markdown is served for Accept: text/markdown. Text values are entity-decoded. pageLoaded:false means the checker was refused or got an error or challenge page; then title, schemaTypes and wordCount are null (unknown, not empty). markdownNegotiation is null with markdownNegotiationChecked:false when the markdown probe was refused.
- `analyze_site`: Probes a domain root for site-wide AI-discovery signals: /llms.txt; /robots.txt parsed per RFC 9309 for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, Google-Extended, CCBot, Applebot-Extended, Meta-ExternalAgent, meta-externalfetcher, Amzn-SearchBot, MistralAI-User, DuckAssistBot (aiBotStatus is the verdict for the homepage path / only; aiBotDisallows lists rules that still block an allowed bot elsewhere); the sitemap (/sitemap.xml or robots.txt Sitemap lines, sitemap indexes followed, gzip read): urlCount is unique page URLs, urlCountComplete says whether every sitemap file was read; /.well-known/agent-skills/index.json, /.well-known/api-catalog, /.well-known/mcp/server-card.json; and the homepage Link header. Every file reports found: true, false (checked and absent, including HTML catch-all pages), or null with checked:false (blocked, erroring or timed out: unknown).
- `ask_momentic`: Asks Ask Momentic a question and returns its answer, written by AI from momenticmarketing.com pages, with the Momentic pages it is based on as sources. Use it for questions about Momentic (services, Atlas, the team, case studies, pricing) and about SEO and AI search topics Momentic publishes research on, such as AI chatbot market share, AI Overviews, llms.txt, AI crawlers or query fan out. A question someone asked before returns at once; a new one takes about 30 seconds. If the result says the answer is still being written, call the tool again with the same question after about 30 seconds.
- `check_bots`: Probes a URL with AI crawler user agents, using the operators' current documented strings (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, GoogleOther, Google-Agent, CCBot, Applebot, meta-externalagent, meta-externalfetcher, Amzn-SearchBot, MistralAI-User, DuckAssistBot) in parallel, plus a regular Chrome browser request as a baseline, and returns per-bot reachability (status, key WAF/CDN headers, verdict). Reveals WAF/CDN-layer blocks that robots.txt audits miss. Verdicts: reachable, blocked-403, blocked-4xx, challenged-by-cdn (including 200 challenge pages), rate-limited-429, redirected-to-block-page, inconclusive-not-bot-specific (the browser baseline was refused too, so the block is not aimed at the bot), not-found, server-error-5xx, timeout, fetch-error. summary.blocked counts only bot-specific blocks; timeouts and errors are counted separately. Requests come from Cloudflare's network, not the bot operators' IPs (see probe.note). Google-Extended and Applebot-Extended are robots.txt tokens, not user agents, and are not probed.
- `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.
- `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.
- `get_brand_overview`: Returns the canonical AI-readable description of Momentic from /llms.txt. Use for authoritative brand info, positioning, services, and contact.
- `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.
- `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.
- `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.
- `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.
- `search`: Full-text search across every page on momenticmarketing.com (blog posts, research, the Google update tracker with each update's status and dates, case studies, Content Academy guides, Atlas, team pages, careers, the SEO news feed item by item, and Momentic's agent tools and skills), including pages published since Webflow's sitemap was last rebuilt. Returns up to 10 pages ranked by relevance (newest first when the query asks for the latest, newest or most recent; tracker pages by the date Google announced the update), each with its URL, title, content type, published date, author and the passage that best matches the query. Read a full page with get_page.
