Releases: Akxan/google-seo-mcp
Releases · Akxan/google-seo-mcp
Release list
v0.9.0 — GitHub App connection for hosted users
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 thegithub_*toolset includinggithub_commit_filesandgithub_commit_imagewhile the rest of their server stays read-only; Disconnect uninstalls the app. GitHub tools inside a hosted request never fall back to the operator'sGITHUB_TOKEN. ServerOptions.allowWrite(write-tool prefixes that survivereadOnly); write-audit lines carrywhofor hosted users;google_auth_statusreports the scopes actually granted by the user.
v0.8.0 — Hosted mode: Google sign-in, per-user read-only tokens
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 anode:sqlitedatabase; aseo_…token runs the request inside that user's OAuth grant (AsyncLocalStoragescope around the request) on a read-only server limited to thegsc,ga4,web,geo,analysistoolsets, without the tools that spend paid third-party quotas. The operator'sMCP_AUTH_TOKENis unchanged. ServerOptions.excludeto leave named tools unregistered;formatErrorhint for revoked/expired Google grants (invalid_grant).- Docker:
./datavolume at/datafor the hosted database.
Changed
- README architecture diagram, keywords,
package.jsondescription/keywords and the repository description now cover the Gmail integration and the image pipeline (the 0.7.0 release had left them out).
Security
sharp0.34.5 → 0.35.x (GHSA-f88m-g3jw-g9cj, GHSA-rgj7-g3m4-5g8c reported by Dependabot right after the 0.7.0 release).
v0.7.0 — Gmail attachments straight into the repo, write audit log
[0.7.0] - 2026-09-11
Added
- Gmail attachment tools (optional, read-only OAuth via
npm run auth -- --gmail):gmail_find_attachmentslists messages and their attachments;github_commit_attachmenttakes one attachment, converts it on the server when it is an image (same options asgithub_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.ymlmounts the wholesecrets/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
[0.6.0] - 2026-09-11
Added
github_commit_files: per-fileedits(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) andencoding: base64for 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 thereforesite_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 exportedextractJsonLdTypes()(unit-tested).
v0.5.1 — env hygiene, minimal /healthz, tests wired into CI, deploy hardening
[0.5.1] - 2026-09-09
Added
envValue(): environment variables that are empty or whitespace-only count as unset everywhere. Docker'senv_filepassesKEY=through as an empty string, which previously satisfied??fallbacks; optional integrations now fall back correctly and an emptyMCP_PORT/MCP_AUTH_TOKENcan no longer pick a random port or disable authentication.
Changed
/healthzreturns 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.shprunes 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/healthzlocation. - README lists the 21 WordPress tools by name;
.env.exampleand both READMEs documentGOOGLE_CREDENTIALS_JSON,SEO_MCP_MAX_RESULT_CHARSand the OAuth variables used bynpm 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-nodev7; CI tests on Node 26.
Removed
- npm / MCP-registry publishing preparation (
server.json, scoped package name); the package is markedprivateand is installed from the repository only.
Fixed
npm testnow runs the unit tests (present since 0.5.0 but never wired into the script, so CI did not execute them).package.jsonmainpointed to a non-existentindex.js; it isdist/index.js.
Security
social_preview_check: the ICNS, JXL and HEIF parsers ofimage-sizeare disabled (GHSA-w3rx-r6r6-pgpr, GHSA-5p2g-fcmc-qvqq: unbounded loops on crafted files, no fixed release yet) becauseog:imagebytes come from third-party hosts.
v0.5.0 — dryRun previews, unit tests + CI gate, progress notifications, result size guard
Added
dryRunon every WordPress write tool and ongithub_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, andmaindeploys 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_CHARSwith a note on how to narrow the request. - Dependabot for npm, GitHub Actions and Docker;
server.jsonmanifest and scoped package name@akxan/google-seo-mcpfor npm / MCP registry publishing.
Changed
- Tool results are compact JSON instead of pretty-printed (fewer tokens per call); repeated parameter descriptions shortened.
knowledge_graph_checkandbrand_mentionsbelong to thegeotoolset.
v0.4.0 — Search Console management, GA4 funnels/pivots/config, push-to-deploy
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.ymlwith mounted secrets. - Push-to-deploy:
.github/workflows/deploy.ymltriggersdeploy/vps-self-update.shon the server through a forced-command SSH key;deploy/deploy-vps.shfor manual updates. scripts/sync-readme.mjskeeps tool counts in the READMEs andpackage.jsonin sync (checked bynpm test); dynamic tools badge.
Changed
- Server version is read from
package.json.
v0.3.0 — SEO & GEO MCP server, 72 tools
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-onlymode,--toolsetsfiltering .envauto-loading, smoke test with tool snapshot, secret-scan git hooks- systemd, Caddy/Nginx and Docker deployment samples