# @tengence/geo-mcp

GEO content engine MCP server: 56 tools across content, publishing, search-inclusion and AI-monitoring domains; stdio + Streamable HTTP transports, Bearer-token auth (the MCP bridge layer of @tengence/geo-sdk)

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 0.1.2
- **Author:** Tengence Team
- **License:** MIT
- **npm:** @tengence/geo-mcp
- **Source:** https://github.com/tengence-team/tengence-geo-agent
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-10-09T00:19:42.902Z
- **Version scanned:** 0.1.2
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `workspace_use` — Bind the user workspace directory (call this first): all site config, credentials and output files live under it. Ask the user which directory to use if it was 
- `site_init` — Scaffold a site inside the bound workspace: <workspace>/<key>/{config,data/inbox,data/reports,.env} (idempotent, never overwrites existing files)
- `site_list` — List the sites inside the bound user workspace (site key, domain, app_id, storage driver). Returns a hint instead when no workspace is bound yet.
- `site_status` — Site status: config paths, .env readiness, DB driver and SQLite init state
- `article_list` — List articles (articles table), with status/limit filters
- `article_ingest` — Content ingest (single entry): body md + research brief → articles table (CLI canonical orchestration)
- `article_export` — Export an article md + brief from the DB to the site data/inbox (for rewriting)
- `check_article` — Publish gate: enforces the editorial rules codified in the "article-writing-standards" standard (citation dual-channel, word count by T1–T7 type, banned words, 
- `publish_draft` — Publish a draft (default draft → WP; can --status=publish directly, must pass the gate first)
- `publish_from_db` — Publish an article from the DB to WordPress (--force updates an existing article)
- `publish_update_article` — Bypass update of an existing article (title/content/status + sync SEO/GEO meta).
- `publish_daily` — Run the daily promotion task (promotes due drafts to publish by plan publish_order; default 1/day).
- `plan_list` — Article plan table list (status/batch/category/node filters)
- `plan_import` — Import/update the plan table from the site plan directory (idempotent)
- `plan_mark_status` — Update a plan row status (todo/written/queued/published/archived)
- `image_acquire` — Auto image pipeline (search → red-line filter → download → WebP crop → upload to WP media library)
- `monitor_run` — Run GEO monitoring (one round of site prompts × models; results persisted)
- `monitor_report` — Read monitoring results (latest round or a given run_id)
- `db_init` — Explicitly initialize the database (sqlite idempotent table creation / mysql DDL; --drop rebuilds)
- `db_status` — Database status: driver, path, schema version, table list, missing tables
- `search_gsc_stats` — Read Google Search Console Search Analytics data: clicks / impressions / CTR / average position,
- `search_gsc_inspect` — Query one URL's Google indexing status (URL Inspection API, read-only): verdict, coverageState,
- `search_submit_gsc` — Submit the sitemap to Google Search Console (soft-fail)
- `search_submit_indexnow` — Submit URLs to IndexNow (requires INDEXNOW_KEY)
- `search_submit_baidu` — Submit URLs to Baidu normal inclusion (requires BAIDU_TOKEN / BAIDU_SITE).
- `webmaster_bing_status` — Read Bing Webmaster console data (verified sites / URL submission quota / query stats / crawl issues). Requires BING_WEBMASTER_API_KEY in the site .env. Note: B
- `webmaster_bing_submit` — Write to Bing Webmaster: submit URL(s) (comma-separated = batch, ≤10000 per call). Requires BING_WEBMASTER_API_KEY in the site .env.
- `diagnose_site` — Full GEO/SEO site diagnosis: domain (DNS/TLS cert/WHOIS), transport & server fingerprint (CMS/framework/platform/CDN), robots.txt, sitemap, homepage + represent
- `report_write` — Write a Markdown report into the site data/reports/ directory (path-safe: filename is basenamed and confined to the reports dir). Auto-bootstraps the site on fi
- `util_ping` — Connectivity self-check: SDK version, driver, internal data directory, bound workspace and site count
- `standards_list` — List the generic writing & GEO standards shipped with the engine (titles, whether a site-specific supplement exists).
- `standards_read` — Read a generic standard document (base + any site-specific supplement merged). Names are repository-relative without `.md`,
- `article_draft` — Assemble a ready-to-use writing brief for a new article: the matched T1–T7 body skeleton, the pre-writing research-brief template,
- `channel_list` — List all external content platforms in the syndicate registry: API type (official|cookie|none), status (ready|pending|manual),
- `channel_style_get` — Return the FULL platform style / rewrite rules for ONE platform (wechat / juejin / blog / …).
- `channel_check` — Validate a title/body against a platform's style rules — the 校验 (validation) half. Deterministic, no content generation.
- `channel_publish` — Publish/export to one external platform. Mode A: pass slugs[] and the server reads the DB and runs the platform pipeline
- `channel_plan_next` — Per-platform publishing calendar: return the next article to publish for a platform plus all calendar rows
- `channel_plan_mark` — Update a channel_plan row status (todo | draft | published | paused) and optionally record its draft ids (media ids).
- `juejin_status` — Read the Juejin (掘金) backend for this site: the draft box (article_draft/list_by_user) and the published list

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"geo\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@tengence/geo-mcp\"\n      ]\n    }\n  }\n}"
```

## Blast radius

Moderate to extensive — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: mutates data; runs on your machine.
- Floor 30, ceiling 54 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40tengence%2Fgeo-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/%40tengence%2Fgeo-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40tengence%2Fgeo-mcp
- HTML page: https://forgeregistry.com/registry/%40tengence%2Fgeo-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
