Skip to content

Releases: Akxan/google-seo-mcp

v0.9.0 — GitHub App connection for hosted users

Choose a tag to compare

@Akxan Akxan released this 11 Sep 18:33

Added

  • Hosted mode: GitHub connection through a GitHub App (SEO_MCP_GITHUB_APP_*). Users install the app on the repositories they choose; the server verifies the installation against the signed-in GitHub user (OAuth code returned with the installation), stores only the installation id and mints one-hour installation tokens on demand. Connected users get the github_* toolset including github_commit_files and github_commit_image while the rest of their server stays read-only; Disconnect uninstalls the app. GitHub tools inside a hosted request never fall back to the operator's GITHUB_TOKEN.
  • ServerOptions.allowWrite (write-tool prefixes that survive readOnly); write-audit lines carry who for hosted users; google_auth_status reports the scopes actually granted by the user.

v0.8.0 — Hosted mode: Google sign-in, per-user read-only tokens

Choose a tag to compare

@Akxan Akxan released this 11 Sep 17:15

Added

  • Hosted mode (optional, SEO_MCP_HOSTED_* + SEO_MCP_PUBLIC_URL): a landing page (English/Chinese), Sign in with Google, and a dashboard where each user creates up to 10 personal bearer tokens for /mcp, plus privacy and terms pages. Users grant read-only Search Console and GA4 scopes; refresh tokens are AES-256-GCM encrypted in a node:sqlite database; a seo_… token runs the request inside that user's OAuth grant (AsyncLocalStorage scope around the request) on a read-only server limited to the gsc, ga4, web, geo, analysis toolsets, without the tools that spend paid third-party quotas. The operator's MCP_AUTH_TOKEN is unchanged.
  • ServerOptions.exclude to leave named tools unregistered; formatError hint for revoked/expired Google grants (invalid_grant).
  • Docker: ./data volume at /data for the hosted database.

Changed

  • README architecture diagram, keywords, package.json description/keywords and the repository description now cover the Gmail integration and the image pipeline (the 0.7.0 release had left them out).

Security

v0.7.0 — Gmail attachments straight into the repo, write audit log

Choose a tag to compare

@Akxan Akxan released this 11 Sep 15:21

[0.7.0] - 2026-09-11

Added

  • Gmail attachment tools (optional, read-only OAuth via npm run auth -- --gmail): gmail_find_attachments lists messages and their attachments; github_commit_attachment takes one attachment, converts it on the server when it is an image (same options as github_commit_image) and commits it. A photo someone emailed reaches the repository without passing through any client machine.
  • Write audit log: every write-tool call logs one JSON line to stderr (tool, outcome, duration, client user agent, identifiers such as post id, repo, branch, file paths; never content), visible with docker logs.

Changed

  • docker-compose.yml mounts the whole secrets/ directory read-only at /secrets (service account, optional Gmail credentials) instead of the single file.

v0.6.0 — in-place edits, binary commits and server-side images for static sites

Choose a tag to compare

@Akxan Akxan released this 11 Sep 15:10

[0.6.0] - 2026-09-11

Added

  • github_commit_files: per-file edits (in-place find/replace against the branch's current content, each find validated to match exactly once, so a 300 KB content bundle no longer has to be resent) and encoding: base64 for binaries; files whose content already matches are skipped.
  • github_commit_image: fetch an image from a URL, convert it on the server (webp by default), resize or cover-crop it (attention-based or centred), add variants such as a card thumbnail, and commit everything in one commit. With these two, a blog post with pictures can be published to a static site from a phone through MCP alone.

Changed

  • README (both languages): client setup for the Claude apps, OpenAI Codex, Cursor, VS Code, Gemini CLI and any other MCP client, with timeout notes and the ChatGPT OAuth limitation; tagline, keywords and repository description mention Codex/Cursor and the current tool count.
  • README (both languages): "Works with any agent" section: compatibility table, Claude Agent SDK and OpenAI Agents SDK examples (DeepSeek through an OpenAI-compatible endpoint), third-party and local models with a read-only trimmed second instance, and the known limits (ChatGPT OAuth-only connectors, legacy SSE clients, Codex providers needing the Responses API).
  • README (both languages): community acknowledgment of LINUX DO.

Fixed

  • page_audit (and therefore site_crawl / compare_pages) reported "No JSON-LD structured data" on every page: script tags were stripped for the word count before the JSON-LD blocks were read. Extraction now runs first via the exported extractJsonLdTypes() (unit-tested).

v0.5.1 — env hygiene, minimal /healthz, tests wired into CI, deploy hardening

Choose a tag to compare

@Akxan Akxan released this 09 Sep 12:43

[0.5.1] - 2026-09-09

Added

  • envValue(): environment variables that are empty or whitespace-only count as unset everywhere. Docker's env_file passes KEY= through as an empty string, which previously satisfied ?? fallbacks; optional integrations now fall back correctly and an empty MCP_PORT / MCP_AUTH_TOKEN can no longer pick a random port or disable authentication.

Changed

  • /healthz returns only {"ok":true} to unauthenticated callers; version and credential source are included when the request carries the Bearer token.
  • Deploy workflow decides "docs-only" against the previously pushed commit instead of HEAD~1, so multi-commit pushes deploy correctly; deploy/vps-self-update.sh prunes dangling images and build cache beyond 4 GB after a healthy deploy; the Nginx sample gains HSTS, a per-IP rate limit and an unauthenticated /healthz location.
  • README lists the 21 WordPress tools by name; .env.example and both READMEs document GOOGLE_CREDENTIALS_JSON, SEO_MCP_MAX_RESULT_CHARS and the OAuth variables used by npm run auth.
  • Dependencies: zod 4 (record schemas now declare their key type; tool schemas otherwise unchanged), Docker image on Node 26 (same runtime as development; LTS from 2026-10-28), GitHub Actions checkout/setup-node v7; CI tests on Node 26.

Removed

  • npm / MCP-registry publishing preparation (server.json, scoped package name); the package is marked private and is installed from the repository only.

Fixed

  • npm test now runs the unit tests (present since 0.5.0 but never wired into the script, so CI did not execute them).
  • package.json main pointed to a non-existent index.js; it is dist/index.js.

Security

  • social_preview_check: the ICNS, JXL and HEIF parsers of image-size are disabled (GHSA-w3rx-r6r6-pgpr, GHSA-5p2g-fcmc-qvqq: unbounded loops on crafted files, no fixed release yet) because og:image bytes come from third-party hosts.

v0.5.0 — dryRun previews, unit tests + CI gate, progress notifications, result size guard

Choose a tag to compare

@Akxan Akxan released this 09 Sep 10:33

Added

  • dryRun on every WordPress write tool and on github_commit_files: returns current values and the intended changes without writing.
  • Unit tests (node:test) for the robots.txt parser, URL/path normalisation, date helpers, dotenv parser, schema audit and tool classification; CI workflow runs build, tests and the secret scan on every push and pull request, and main deploys only after they pass.
  • Progress notifications on all long-running tools (index coverage, structured-data audit, E-E-A-T audit, llms.txt generation, hreflang, cross-site links, brand mentions, AI crawler access).
  • Result size guard: oversized arrays are trimmed to SEO_MCP_MAX_RESULT_CHARS with a note on how to narrow the request.
  • Dependabot for npm, GitHub Actions and Docker; server.json manifest and scoped package name @akxan/google-seo-mcp for npm / MCP registry publishing.

Changed

  • Tool results are compact JSON instead of pretty-printed (fewer tokens per call); repeated parameter descriptions shortened.
  • knowledge_graph_check and brand_mentions belong to the geo toolset.

v0.4.0 — Search Console management, GA4 funnels/pivots/config, push-to-deploy

Choose a tag to compare

@Akxan Akxan released this 09 Sep 10:21

Added

  • Search Console management: gsc_delete_sitemap, gsc_add_site, gsc_delete_site.
  • GA4: ga_run_pivot_report, ga_batch_run_reports, ga_run_funnel_report (v1alpha), ga_check_compatibility, ga_property_config (read-only Admin API: streams, custom definitions, key events, audiences, Ads links, retention).
  • Production Docker image with SSH client and PHP helpers, health check, docker-compose.yml with mounted secrets.
  • Push-to-deploy: .github/workflows/deploy.yml triggers deploy/vps-self-update.sh on the server through a forced-command SSH key; deploy/deploy-vps.sh for manual updates.
  • scripts/sync-readme.mjs keeps tool counts in the READMEs and package.json in sync (checked by npm test); dynamic tools badge.

Changed

  • Server version is read from package.json.

v0.3.0 — SEO & GEO MCP server, 72 tools

Choose a tag to compare

@Akxan Akxan released this 09 Sep 02:05

First public release of google-seo-mcp, a Model Context Protocol server for SEO and GEO (generative engine optimization) with AI agents such as Claude.

Highlights

  • Google Search Console (13 tools): performance queries, site snapshot, period comparison, striking-distance and CTR opportunities, cannibalization, question queries, rich results, URL inspection, index coverage, sitemaps
  • Google Analytics 4 (6): reports, realtime, metadata, period comparison, organic landing pages merged with Search Console
  • Page & site audits (9): page audit, site crawl, PageSpeed Insights / Core Web Vitals, sitemap, robots.txt, hreflang, Open Graph preview, competitor comparison, keyword suggestions
  • GEO (12): AI crawler access (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot…), llms.txt check and generator, structured data audit, JSON-LD generation and validation, GEO page score, E-E-A-T audit, Knowledge Graph and Wikidata entity check, IndexNow, Perplexity citations, brand mentions
  • Analysis (5): pre-migration URL safety net, cross-site link opportunities, content refresh candidates, CrUX history, Google reviews snapshot
  • WordPress (21, optional): posts, Yoast SEO fields, page-builder content, media alt text, taxonomies, internal links, redirects, JSON-LD injection, WP-CLI
  • GitHub (5, optional): read, search and commit files so static sites can be edited from any client

Engineering

  • stdio and stateless Streamable HTTP transports, Bearer auth, /healthz
  • MCP tool annotations, server instructions, --read-only mode, --toolsets filtering
  • .env auto-loading, smoke test with tool snapshot, secret-scan git hooks
  • systemd, Caddy/Nginx and Docker deployment samples