内容
# geo-audit-mcp
用于GEO(生成引擎优化)站点审计的轻量级MCP服务器。检查**6个支柱上的31个信号** — 技术可爬行性、内容结构、模式和元数据、E-E-A-T、引用准备和治理 — 并返回得分、支柱细分和可行的修复提示。
该服务器仅提供**一个工具**:
`geo_site_audit`
## 输出格式
```json
{
"score": 72,
"pillars": {
"technical": { "pass": 4, "fail": 1, "warn": 0, "na": 0, "total": 5, "pct": 80 },
"content": { "pass": 3, "fail": 0, "warn": 1, "na": 0, "total": 4, "pct": 88 },
"schema": { "pass": 2, "fail": 1, "warn": 1, "na": 0, "total": 4, "pct": 63 },
"eeat": { "pass": 4, "fail": 1, "warn": 2, "na": 0, "total": 7, "pct": 71 },
"citations": { "pass": 6, "fail": 1, "warn": 3, "na": 0, "total": 10, "pct": 75 },
"governance": { "pass": 1, "fail": 0, "warn": 0, "na": 0, "total": 1, "pct": 100 }
},
"checks": [
{ "id": "T1", "pillar": "technical", "title": "页面可通过HTTPS访问", "status": "pass", "message": "页面返回HTTP 200。" },
{ "id": "B1", "pillar": "content", "title": "答案优先的开头提到了品牌", "status": "fail", "message": "添加一个2-3句子的开头,提及您的品牌...", "evidence": "欢迎来到我们的平台..." }
],
"fixPrompt": "您正在提高MyBrand的GEO准备度...",
"summary": "- [内容] 改善标题层次结构...",
"stats": { "words": 1523, "headings": 14, "externalLinks": 8, "jsonLdBlocks": 2 },
"auditedUrl": "https://example.com/page"
}
```
### 每个部分代表的含义
| 字段 | 描述 |
|-------|-------------|
| `score` | 总体GEO准备度得分(0-100),在6个支柱上加权 |
| `pillars` | 每个支柱的pass/fail/warn计数和百分比 |
| `checks` | 所有31个单独的检查结果,包含状态、消息和证据 |
| `fixPrompt` | 可行的修复提示 — 直接粘贴到Claude、Cursor或您的网站编辑器中 |
| `summary` | 人类可读的摘要(如果设置了`OPENAI_API_KEY`,则由LLM生成,否则自动生成) |
| `stats` | 页面级统计:字数、标题数、外部链接数、JSON-LD块数 |
| `auditedUrl` | 被审计的规范URL |
## BYOK
该服务器使用**您自己的API密钥**。用法和计费与您的提供商账户绑定。严格来说,不需要API密钥 — 审计使用静态HTML分析完全离线运行。可选地,设置`OPENAI_API_KEY`以获取LLM驱动的摘要。
## 必需的环境变量
| 变量 | 是否必需 | 描述 |
|----------|----------|-------------|
| `OPENAI_API_KEY` | 可选 | 用于LLM生成的审计摘要的OpenAI API密钥。没有它,摘要将根据检查结果自动生成。 |
| `OPENAI_BASE_URL` | 可选 | 自定义OpenAI兼容端点(默认:`https://api.openai.com/v1`)。 |
| `OPENAI_HTTPS_PROXY` | 可选 | OpenAI API调用的HTTPS代理URL(例如`http://127.0.0.1:7890`)。 |
| `WEBSITE_HTTPS_PROXY` | 可选 | 用于获取目标网站的HTTPS代理URL。 |
## 快速开始
```bash
npm install
npm run build
```
## MCP 配置示例
### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"geo-audit-mcp": {
"command": "node",
"args": ["<ABSOLUTE_PATH>/geo-audit-mcp/dist/index.js"],
"env": {
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}
```
### Cursor / Windsurf / 其他MCP客户端
```json
{
"mcpServers": {
"geo-audit-mcp": {
"command": "node",
"args": ["<ABSOLUTE_PATH>/geo-audit-mcp/dist/index.js"],
"env": {
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>",
"OPENAI_HTTPS_PROXY": "http://127.0.0.1:7890"
}
}
}
}
```
## 工具输入
```json
{
"url": "https://example.com/pricing",
"brand_name": "Example",
"page_type": "product"
}
```
| 参数 | 是否必需 | 描述 |
|-----------|----------|-------------|
| `url` | 是 | 要审计的完整URL。必须以`https://`或`http://`开头。 |
| `brand_name` | 否 | 品牌名称 — 提高开头内容检查(B1)的准确性。 |
| `page_type` | 否 | 提示:`homepage`、`product`或`article`。如果省略,则从URL路径自动检测。 |
## 检查内容(31个信号,6个支柱)
### 技术可爬行性(5个检查)
T1-T5:HTTPS可达性、AI爬虫robots.txt规则、llms.txt存在、JavaScript可读文本、规范URL。
### 内容结构(4个检查)
B1-B4:答案优先的品牌提及、标题层次结构、段落分块、可引用块(列表/FAQ)。
### 模式和元数据(4个检查)
C1-C4:标题 + 元描述、Organization/WebSite JSON-LD、页面类型结构化数据、FAQPage模式。
### E-E-A-T(7个检查)
E1-E7:作者/实体信号、可见署名、关于/联系链接、Organization JSON-LD with sameAs、隐私/条款链接、权威评论链接、发布时间。
### 引用准备度(10个检查)
R1-R10:外部参考链接、权威评论域、链接多样性、内容内链接、可引用块、可引用事实、来源归属、实体sameAs、页面可引用分数、可引用段落比率。
### 治理(1个检查)
G1:站点地图可达性。
## 注意事项
- 审计通过直接HTTP请求(使用类似浏览器的User-Agent)获取目标页面。一些具有激进机器人保护的站点可能会阻止该请求。
- 审计是**无状态的** — 不存储或记录任何数据。
- 内置SSRF保护:阻止内部IP、localhost和云元数据端点。
- 如果设置了`OPENAI_API_KEY`,则摘要默认使用GPT-4.1-mini。设置`OPENAI_MODEL`以覆盖。
- 修复提示旨在直接粘贴到Claude、Cursor或您的网站编辑器中 — 它们仅针对HTML、元标签和JSON-LD。
- **永远不要将实际凭据提交到git中。仅使用环境变量。**
由 [gptmelo.com](https://gptmelo.com) 构建 — ChatGPT的GEO品牌监控器。