Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

geoseo-mcp

PYPI · GEOSEO-MCP

SEO + GEO: Search Console, Bing, Yandex, IndexNow, AI Overviews and LLM citation tracking.

Available components

+15 this week 77 Trust /100

Last scanned (20 hours ago)

Scores higher than 74% of PyPI servers

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 2 of 46 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Rachit8484/geoseo-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 11 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability63
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 4361 tokens (~92/item across 47 items; 47 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage73
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 6% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 47 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 48 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 30 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 23 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/geoseo-mcp@0.4.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo Rachit8484/geoseo-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Rachit8484/geoseo-mcp/.github/workflows/release.yml@refs/tags/v0.4.0
Rekor log index 3420362691
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:9e8d9358b4e22555eb6c5e9b053e0c2132a66aed5d98b51bc72d7fd6834cc210

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 46 packages
Packages resolved 46
Stale 2
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 47 exposed · ~4,208 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
aio_check ~103

Run a Google search via SerpAPI and parse the AI Overview block. Returns ``aio_present``, the AIO answer text, the URLs/domains AIO cites, and the top-10 organic results for context. Use this to track which pages Google's generative answers actually source.

NameTypeReqDescription
glstring––
google_domainstring––
hlstring––
location–––
querystringyes–

Structured output declared, but exposes no named fields.

No examples provided.

aio_citation_check ~96

For a batch of queries, report AIO fire-rate and citation share for ``target_domain``. This is the GEO companion to ``multi_llm_citation_check`` — same idea, but specifically for Google's on-SERP AI Overviews. Run weekly and snapshot to ``snapshot_serp_aio`` to track AIO visibility over time.

NameTypeReqDescription
queriesarrayyes–
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

audit_page ~197

Audit a single page (local file path or http(s) URL). Set ``render=True`` to audit the page after JavaScript runs (needs the optional ``geoseo-mcp[render]`` extra + ``playwright install chromium``). Either way the report flags pages that are empty without JavaScript, since most AI crawlers don't execute it. Returns a structured report with: title/meta/headings, word count, link counts, image alt coverage, JSON-LD schema types, Open Graph, Twitter Card, freshness signals, GEO-quotability score, and a list of human-readable findings. Plus a 0-100 overall ``score``. Examples: ``audit_page("seo/aa-meetings-what-to-expect.html")`` ``audit_page("https://soberpath.com/blog/quit-drinking")``

NameTypeReqDescription
renderboolean––
sourcestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

audit_site ~83

Recursively audit every HTML file under a folder. Returns per-file scores, an aggregate summary (mean score, worst pages, most common findings), and the top opportunities for improvement. Useful as the first call against a content directory to spot the worst offenders quickly.

NameTypeReqDescription
folderstringyes–
limitinteger––
patternstring––

Structured output declared, but exposes no named fields.

No examples provided.

bing_crawl_issues ~32

Crawl errors / blocked URLs / DNS issues reported by Bingbot.

NameTypeReqDescription
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

bing_list_sites ~21

List all Bing-verified sites for the API key owner.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

bing_page_stats ~24

Per-page stats from Bing Webmaster.

NameTypeReqDescription
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

bing_query_stats ~57

Last-6-months query stats from Bing Webmaster (clicks, impressions, position). ``site_url`` must match what Bing has verified, e.g. ``https://example.com/``.

NameTypeReqDescription
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

bing_submit_url ~40

Submit a URL for fast crawling. Daily quota applies (default ~10/day).

NameTypeReqDescription
site_urlstringyes–
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

bing_url_info ~36

Index status + crawl info for a single URL on Bing.

NameTypeReqDescription
site_urlstringyes–
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

brave_query ~89

Ask Brave's AI Answers (grounded in Brave Search); return answer + cited URLs. Brave runs its own independent web index, so it is a useful extra signal next to Google/Bing-backed engines. Requires the Brave Answers plan (``GEOSEO_BRAVE_API_KEY``).

NameTypeReqDescription
countrystring––
languagestring––
questionstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

claude_query ~53

Ask Claude (with server-side web search) a question; return answer + cited URLs.

NameTypeReqDescription
max_tokensinteger––
model–––
questionstringyes–
system_prompt–––

Structured output declared, but exposes no named fields.

No examples provided.

find_broken_external_links ~243

Find dead, redirected, or flaky outbound links across a folder of HTML. Every external ``<a href>`` is collected (``mailto:``, ``tel:``, ``javascript:`` and in-page anchors are skipped) and each unique URL is checked once with HEAD, falling back to GET for servers that refuse HEAD. Results are grouped as ``ok`` / ``redirect`` / ``client_error`` / ``server_error`` / ``timeout`` / ``dns_fail`` / ``error``, and every non-ok link lists the pages it appears on plus a suggested action. ``site_host`` (e.g. ``"example.com"``) marks absolute links to your own site as internal so they're skipped. Results are cached locally for ``cache_days`` (set 0 to force a fresh check); timeouts are never cached.

NameTypeReqDescription
cache_daysnumber––
concurrencyinteger––
folderstringyes–
include_okboolean––
max_urlsinteger––
patternstring––
site_host–––
timeoutnumber––

Structured output declared, but exposes no named fields.

No examples provided.

gemini_query ~79

Ask Gemini (with Google Search grounding) a question; return answer + cited URLs. Grounding sources here are the same signal Google uses for AI Overviews, so this is the closest open-API proxy for "what AIO might cite for this query".

NameTypeReqDescription
model–––
questionstringyes–
system_prompt–––

Structured output declared, but exposes no named fields.

No examples provided.

generate_llms_txt ~196

Generate a draft ``llms.txt`` from a folder of HTML pages. ``llms.txt`` (https://llmstxt.org) is the emerging standard for telling LLM crawlers where your canonical content lives. This tool reads each page's ``<title>`` and meta description, groups by URL prefix, and produces spec-compliant Markdown ready to drop at ``/llms.txt``. ``section_strategy`` controls grouping: - ``first_path_segment`` (default): groups by first URL path segment, e.g. all ``/blog/...`` pages under "Blog". - ``flat``: a single "Pages" section.

NameTypeReqDescription
folderstringyes–
limitinteger––
patternstring––
section_strategystring––
site_summary–––
site_title–––
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

geoseo_status ~57

Report which engines are configured and reachable. Always safe to call. Returns a dict keyed by engine name with `configured: bool` and a short message. Use this as the first call in a session to know what's available.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

grok_query ~127

Ask Grok (with live web search) a question; return answer + cited URLs. Uses the xAI Responses API with the ``web_search`` tool. ``citations`` are the URLs Grok actually cites inline; ``sources_considered`` lists everything it looked at. Set ``x_search=True`` to also search X posts. Default model: ``GEOSEO_GROK_MODEL`` (``grok-4.3``).

NameTypeReqDescription
model–––
questionstringyes–
system_prompt–––
x_searchboolean––

Structured output declared, but exposes no named fields.

No examples provided.

gsc_inspect_url ~80

Get index status for a specific URL via the URL Inspection API. Returns coverage state, last crawl time, mobile usability, indexed verdict, and indexing rich-result data. Slow (~1s/call); rate-limited by Google.

NameTypeReqDescription
language_codestring––
site_urlstringyes–
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

gsc_list_sites ~57

List all Search Console properties the authenticated user can access. Returns a list of site entries with ``siteUrl`` and ``permissionLevel``. Use ``siteUrl`` from this list as input to other ``gsc_*`` tools.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

gsc_performance ~221

Query GSC search analytics.

NameTypeReqDescription
country––ISO 3166-1 alpha-3 country filter (e.g. ``usa``).
device––``desktop``, ``mobile``, or ``tablet``.
dimensions––One or more of ``query``, ``page``, ``country``, ``device``, ``date``, ``searchAppearance``. Defaults to ``["query"]``.
end_date––ISO date. Defaults to 2 days ago (GSC has ~2-day latency).
row_limitinteger–Max rows (capped at 25,000).
search_typestring–``web``, ``image``, ``video``, ``news``, or ``discover``.
site_urlstringyesThe property as it appears in GSC (e.g. ``sc-domain:example.com`` or ``https://example.com/``).
start_date––ISO date (YYYY-MM-DD). Defaults to 28 days ago.

Structured output declared, but exposes no named fields.

No examples provided.

gsc_submit_sitemap ~65

Submit (or resubmit) a sitemap URL to GSC. ``feedpath`` is the absolute URL of the sitemap, e.g. ``https://example.com/sitemap.xml``.

NameTypeReqDescription
feedpathstringyes–
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

indexnow_submit_url ~75

Notify Bing, Yandex, Naver, Seznam, and Yep that a single URL was published or updated. Requires ``GEOSEO_INDEXNOW_KEY`` env var (a 32-char hex string you also host at ``https://yourdomain.com/<key>.txt``).

NameTypeReqDescription
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

indexnow_submit_urls ~47

Batch-notify search engines about up to 10,000 URLs (must share one host). Best for sitemap-wide rebuilds or large content updates.

NameTypeReqDescription
urlsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

internal_link_graph ~159

Audit a folder of HTML pages as a directed internal-link graph. Returns counts of files/edges, the orphans (no inbound links), dead-ends (no outbound links), top hub pages, and a list of dangling internal hrefs that don't resolve to any file. Pass ``site_host`` (e.g. ``"example.com"``) if pages link to themselves with absolute URLs — those will then count as internal edges. Files are also matched by URL slug, so ``/blog/foo`` resolves to ``foo.html`` even when paths don't match exactly.

NameTypeReqDescription
folderstringyes–
limitinteger––
patternstring––
site_host–––

Structured output declared, but exposes no named fields.

No examples provided.

lint_schema_page ~181

Validate a page's JSON-LD against Google's structured-data requirements. ``source`` is a local HTML file or an http(s) URL. Every ``application/ld+json`` block is parsed (``@graph`` included) and each typed entity is checked against Google's documented required and recommended properties for Article, Product (with nested Offer / AggregateRating / Review), Recipe, LocalBusiness, BreadcrumbList, Event, VideoObject, SoftwareApplication, JobPosting, QAPage, Review and Organization. FAQPage and HowTo are checked against schema.org since Google no longer shows those rich results. Returns per-entity ``{type, ok, required_missing, recommended_missing, line_estimate, doc}``. ``ok`` is false when a required property is missing or the JSON is invalid.

NameTypeReqDescription
sourcestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

lint_schema_site ~79

Run ``lint_schema_page`` over every HTML file in a folder. Returns files with errors, files that have no JSON-LD at all, a count of schema types found, the most common missing required properties, and per-file problems.

NameTypeReqDescription
folderstringyes–
limitinteger––
patternstring––

Structured output declared, but exposes no named fields.

No examples provided.

list_llm_engines ~24

Return the LLM engines currently configured (have an API key).

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

multi_llm_citation_check ~256

How often each configured LLM cites (or mentions) ``target_domain``. The headline GEO/AEO tool. Feed it your top 20-50 buyer questions and get a per-engine breakdown for ChatGPT/Claude/Gemini/Perplexity/Grok/Brave: - ``citation_rate`` (+ 95% interval): share of answers linking to your domain or any subdomain of it. - ``mention_rate`` / ``unlinked_mention_rate``: answers that name your brand, with or without a link. Pass ``brand_aliases`` (e.g. ``["Acme", "Acme CRM"]``) if your brand isn't obvious from the domain. - ``top_competing_domains`` and per-question results. LLM answers vary run to run, so every question is asked ``samples`` times per engine (default ``GEOSEO_CITATION_SAMPLES``, 3; max 10). Cost scales with questions x samples x engines.

NameTypeReqDescription
brand_aliases–––
engines–––
max_concurrency–––
questionsarrayyes–
samples–––
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

multi_llm_query ~100

Ask the same question to all (or selected) configured LLM engines in parallel. ``engines``: optional subset of ``["perplexity","openai","anthropic","gemini","grok","brave"]``. Default: every engine with credentials configured (see ``geoseo_status``). Engines that error are reported per-engine and don't block the others.

NameTypeReqDescription
engines–––
questionstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

openai_query ~78

Ask ChatGPT (with web search) a question; return answer + cited URLs. Uses the OpenAI Responses API with the ``web_search`` tool. Default model: ``GEOSEO_OPENAI_MODEL`` (``gpt-5-mini``).

NameTypeReqDescription
model–––
questionstringyes–
system_prompt–––

Structured output declared, but exposes no named fields.

No examples provided.

perplexity_citation_check ~46

Citation share for ``target_domain`` across a Perplexity question batch.

NameTypeReqDescription
model–––
questionsarrayyes–
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

perplexity_query ~92

Ask Perplexity (Agent API + web search); return answer + cited URLs/domains. Defaults to the ``fast`` effort preset. Pass ``model`` to pin one (e.g. ``openai/gpt-5-mini``); legacy names like ``sonar`` still work.

NameTypeReqDescription
max_tokens–––
model–––
questionstringyes–
system_prompt–––

Structured output declared, but exposes no named fields.

No examples provided.

snapshot_gsc ~110

Run a GSC performance query and persist the rows as a snapshot. Run this on a schedule (cron, n8n, ``launchd`` — anything that can invoke an MCP tool) to build a local time-series of search performance. Default dimensions: ``["query"]``.

NameTypeReqDescription
dimensions–––
end_date–––
row_limitinteger––
search_typestring––
site_urlstringyes–
start_date–––

Structured output declared, but exposes no named fields.

No examples provided.

snapshot_llm_citations ~105

Run multi-LLM citation check and persist the per-question results. Builds the dataset behind ``trend_llm_citations``. ``engines`` defaults to every configured LLM (see ``geoseo_status``). With ``samples > 1`` a question is stored as cited when most samples cite you.

NameTypeReqDescription
engines–––
questionsarrayyes–
samplesinteger––
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

snapshot_serp_aio ~48

Run AIO citation check via SerpAPI and persist as ``serpapi_aio`` engine rows.

NameTypeReqDescription
queriesarrayyes–
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

suggest_internal_links ~228

Suggest top-K internal links to add to each page in a folder. By default uses TF-IDF cosine similarity over ``<title>``, headings, meta description and body text (offline, free). Set ``mode`` to ``"openai"`` (text-embedding-3-small), ``"gemini"`` (gemini-embedding-001) or ``"local"`` (sentence-transformers) for embedding similarity; ``model`` overrides the default model. Vectors are cached in SQLite by content hash, so re-runs are cheap. Excludes links the source already has, plus the page itself. Returns suggestions for ``page`` only if provided, otherwise for every page. Each suggestion includes a cheap ``anchor_hint`` derived from terms shared between source headings and target title.

NameTypeReqDescription
folderstringyes–
limitinteger––
modestring––
model–––
page–––
patternstring––
site_host–––
top_kinteger––

Structured output declared, but exposes no named fields.

No examples provided.

trend_gsc ~87

Time-series of clicks/impressions/position from stored GSC snapshots. Aggregates by ``captured_at``. Filter by ``query`` and/or ``page`` to drill in. Returns up to ``limit`` most recent snapshots in chronological order.

NameTypeReqDescription
limitinteger––
page–––
query–––
site_urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

trend_init ~23

Create the local SQLite snapshot DB if it doesn't exist; return its path.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

trend_llm_citations ~91

Per-snapshot citation share for ``target_domain`` over time. ``engine`` filters to one of ``perplexity|openai|anthropic|gemini|serpapi_aio``. Returns rows of ``{captured_at, engine, questions, cited, citation_share}``.

NameTypeReqDescription
engine–––
limitinteger––
target_domainstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

trend_stats ~25

Inventory of what's stored: row counts, sites/domains, oldest/newest snapshots.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

validate_llms_txt ~68

Validate an ``llms.txt`` file (local path or URL) against the spec. Returns parsed structure plus an ``issues`` list with line numbers for any violations (missing H1, broken link syntax, non-http(s) URLs, etc).

NameTypeReqDescription
sourcestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

yandex_crawl_issues ~34

Active Yandex site diagnostics (by severity) plus sample broken internal links.

NameTypeReqDescription
sitestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

yandex_list_sites ~21

List sites in the token owner's Yandex Webmaster account.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

yandex_query_stats ~131

Top Yandex search queries: shows, clicks, average show/click position. ``order_by``: ``TOTAL_SHOWS`` or ``TOTAL_CLICKS``. ``device``: ``ALL``, ``DESKTOP``, ``MOBILE_AND_TABLET``, ``MOBILE``, ``TABLET``. Dates are ``YYYY-MM-DD``; defaults to the last week.

NameTypeReqDescription
date_from–––
date_to–––
devicestring––
limitinteger––
order_bystring––
sitestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

yandex_site_summary ~67

Site quality index (SQI), pages in search, excluded pages, problem counts. ``site`` can be a URL (``https://example.com/``) or a Yandex host id (``https:example.com:443``).

NameTypeReqDescription
sitestringyes–

Structured output declared, but exposes no named fields.

No examples provided.

yandex_submit_url ~37

Queue a URL for Yandex recrawl. Daily quota applies.

NameTypeReqDescription
sitestringyes–
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

yandex_url_info ~40

Indexing + search status for a URL in Yandex "Monitoring important pages".

NameTypeReqDescription
sitestringyes–
urlstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the geoseo-mcp server?

geoseo-mcp runs locally as a PyPI package, launched with uvx geoseo-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · geoseo-mcp

# add to Claude Code
claude mcp add rachit8484-geoseo-mcp -- uvx geoseo-mcp
Common questions

What is the geoseo-mcp server?

geoseo-mcp is listed in the public MCP registry as io.github.Rachit8484/geoseo-mcp. SEO + GEO: Search Console, Bing, Yandex, IndexNow, AI Overviews and LLM citation tracking. This page covers its PyPI package (geoseo-mcp).

Is the geoseo-mcp server safe to use?

geoseo-mcp scores 77 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the geoseo-mcp server expose?

geoseo-mcp exposes 47 tools: geoseo_status, gsc_list_sites, gsc_performance, gsc_inspect_url, gsc_submit_sitemap, and 42 more. Their descriptions and schemas cost roughly 4,208 tokens of context every time the server is loaded.

Is the geoseo-mcp server still maintained?

geoseo-mcp is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the geoseo-mcp server under?

geoseo-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.