Skip to main content
Glama
geoseo-mcp

geoseo-mcp

by Rachit8484

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GEOSEO_DBNoPath to SQLite database for trend tracking (default: platform user-data dir / geoseo.sqlite)
GEOSEO_INDEXNOW_KEYNoIndexNow key (32-char hex string)
GEOSEO_GEMINI_API_KEYNoGemini API key
GEOSEO_OPENAI_API_KEYNoOpenAI API key
GEOSEO_SERPAPI_API_KEYNoSerpAPI API key
GEOSEO_ANTHROPIC_API_KEYNoAnthropic API key
GEOSEO_PERPLEXITY_API_KEYNoPerplexity API key
GEOSEO_GOOGLE_CLIENT_SECRETNoAbsolute path to the Google OAuth client secret JSON file
GEOSEO_BING_WEBMASTER_API_KEYNoBing Webmaster API key

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

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
geoseo_statusA

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.

gsc_list_sitesA

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.

gsc_performanceC

Query GSC search analytics.

gsc_inspect_urlA

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.

gsc_submit_sitemapC

Submit (or resubmit) a sitemap URL to GSC.

feedpath is the absolute URL of the sitemap, e.g. https://example.com/sitemap.xml.

bing_list_sitesB

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

bing_query_statsA

Last-6-months query stats from Bing Webmaster (clicks, impressions, position).

site_url must match what Bing has verified, e.g. https://example.com/.

bing_page_statsC

Per-page stats from Bing Webmaster.

bing_url_infoC

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

bing_submit_urlB

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

bing_crawl_issuesC

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

yandex_list_sitesA

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

yandex_site_summaryB

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).

yandex_query_statsA

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.

yandex_url_infoC

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

yandex_submit_urlC

Queue a URL for Yandex recrawl. Daily quota applies.

yandex_crawl_issuesC

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

indexnow_submit_urlB

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).

indexnow_submit_urlsA

Batch-notify search engines about up to 10,000 URLs (must share one host).

Best for sitemap-wide rebuilds or large content updates.

perplexity_queryB

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.

perplexity_citation_checkC

Citation share for target_domain across a Perplexity question batch.

openai_queryB

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).

claude_queryB

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

gemini_queryA

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".

grok_queryA

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).

brave_queryB

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).

multi_llm_queryA

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.

multi_llm_citation_checkA

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.

list_llm_enginesA

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

aio_checkA

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.

aio_citation_checkA

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.

audit_pageA

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")

audit_siteA

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.

find_broken_external_linksA

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.

lint_schema_pageA

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.

lint_schema_siteA

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.

generate_llms_txtA

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.

validate_llms_txtA

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).

internal_link_graphA

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.

suggest_internal_linksA

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.

trend_initB

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

trend_statsB

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

snapshot_gscB

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"].

snapshot_llm_citationsA

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.

snapshot_serp_aioC

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

trend_gscA

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.

trend_llm_citationsB

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}.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 47 tools

Disambiguation3/5

Most provider-specific tools are distinguishable, but the set has notable overlap among aggregate vs provider-specific citation tools and snapshot/trend variants (e.g. multi_llm_citation_check, perplexity_citation_check, snapshot_llm_citations; aio_check, aio_citation_check, snapshot_serp_aio). An agent could reasonably misselect when asked to track or compare citation visibility.

Naming Consistency4/5

Almost all tools use snake_case and many follow a provider_prefix_action pattern (gsc_*, bing_*, yandex_*), which is readable. However, ordering varies between provider_action, action_object, and entity_action (audit_page, trend_gsc, geoseo_status), so it is consistent but not uniform.

Tool Count2/5

47 tools is far above the typical 3-15 range and creates a heavy selection surface for an agent. While the domain is broad, many tools are provider variants, aggregate wrappers, or snapshot/trend companions that could be consolidated.

Completeness4/5

The surface covers an unusually wide GEO/SEO lifecycle: multiple webmaster APIs, IndexNow submission, LLM/AIO citation checks, page/site audits, schema and link linting, llms.txt generation/validation, and trend snapshots. Minor gaps exist around destructive/update operations and broader sitemap management, but core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues