语法MCP服务器
通过Grammarly的web界面进行人工智能检测和剽窃评分的单工具模型上下文协议(MCP)服务器。支持两个浏览器自动化提供程序: 舞台布景+浏览器基础 (默认)和 浏览器使用云 (回退)。
它的作用
- 自动化Grammarly的文档UI,以获得AI检测和抄袭百分比
- 通过Claude重写文本以降低AI检测分数
- 显示一个MCP工具:
grammarly_optimize_text
注: 此服务器通过浏览器自动化与app.grammarly.com进行交互。它不使用Grammarly API。
______________________________________________________________________
目录
______________________________________________________________________
快速开始
选项A:舞台手+浏览器(推荐)
先决条件: Node.js 18+,Grammarly Pro账号, 浏览 账户
# 1. Clone and build
git clone https://github.com/BjornMelin/grammarly-mcp.git
cd grammarly-mcp
pnpm install && pnpm build
# 2. Get Browserbase credentials
# - Sign up at https://www.browserbase.com
# - Create a project, note the Project ID
# - Generate an API key
# 3. Set up Claude Code CLI (for text rewriting)
npm install -g @anthropic-ai/claude-code
claude login
# 4. Configure environment
cp .env.example .env
# Edit .env with your Browserbase credentials
# 5. Add to Claude Code
claude mcp add grammarly -- node $(pwd)/dist/server.js
# 6. Test
claude "Use grammarly_optimize_text with mode score_only on: Hello world test"选项B:浏览器使用云(传统)
先决条件: Node.js 18+,Grammarly Pro账号, 浏览器使用云 账户
# 1. Clone and build
git clone https://github.com/BjornMelin/grammarly-mcp.git
cd grammarly-mcp
pnpm install && pnpm build
# 2. Get Browser Use credentials
# - Sign up at https://cloud.browser-use.com
# - Create API key (bu_...)
# - Create profile and sync Grammarly login (profile_...)
# 3. Set up Claude Code CLI
npm install -g @anthropic-ai/claude-code
claude login
# 4. Configure environment
cp .env.example .env
# Set BROWSER_PROVIDER=browser-use and Browser Use credentials
# 5. Add to Claude Code
claude mcp add grammarly -- node $(pwd)/dist/server.js______________________________________________________________________
特性
- 双供应商支持:舞台手+浏览器基础(默认)或浏览器使用云(回退)
- 会话持续:浏览器基础上下文在会话之间保留Grammarly登录
- 自愈自动化:Stagehand自动适应DOM更改
- 多LLM支持:浏览器自动化的独立提供商(
STAGEHAND_LLM_PROVIDER)以及文本重写(REWRITE_LLM_PROVIDER) - 实时调试URL:执行过程中的实时浏览器预览
- 动作缓存:可选缓存,可实现更快的重复操作
- 结构化输出:JSON或markdown响应格式
- 进度通知:MCP 2025-11-25进度跟踪支持
______________________________________________________________________
需求
所有配置
- Node.js 18+
- Grammarly Pro帐户(用于AI检测和抄袭功能)
- 用于文本重写的Claude代码CLI:
npm install -g @anthropic-ai/claude-code
claude login后台提供者(默认)
- 浏览 账户
BROWSERBASE_API_KEY和BROWSERBASE_PROJECT_ID
浏览器使用提供程序(回退)
- 浏览器使用云 账户
BROWSER_USE_API_KEY和BROWSER_USE_PROFILE_ID- 浏览器配置文件已与Grammarly登录状态同步
______________________________________________________________________
安装
git clone https://github.com/BjornMelin/grammarly-mcp.git
cd grammarly-mcp
pnpm install
pnpm build______________________________________________________________________
提供者选择
此服务器支持两个浏览器自动化提供程序:
| 功能 | 舞台手(默认) | 浏览器使用云 |
|---|---|---|
| 提供商 | 浏览器基础 | 浏览器使用云 |
| 自动化 | 观察/行动/提取 | 自然语言任务 |
| 自我修复 | 是 | 有限 |
| 会话持久性 | 上下文ID | 配置文件同步 |
| 调试URL | 实时 | 每个任务 |
| 动作缓存 | 是 | 否 |
| 可靠性 | 较高 | 中等 |
何时使用舞台手
- 需要可靠性的生产工作负载
- 需要会话持久性以避免重新登录开销
- 想要实时调试可见性
- Grammarly UI更改需要自我修复
何时使用浏览器使用云
- 现有浏览器使用云设置
- 更喜欢简单的自然语言任务描述
- 一次性或测试场景
通过环境变量设置提供程序:
BROWSER_PROVIDER=stagehand # Default
BROWSER_PROVIDER=browser-use # Fallback______________________________________________________________________
环境变量
环境隔离
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
IGNORE_SYSTEM_ENV | 没有 | false | 何时 true,忽略shell环境变量,仅使用 .env 文件。防止IDE继承的环境污染。 |
提供程序配置
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
BROWSER_PROVIDER | 没有 | stagehand | stagehand 或 browser-use |
舞台布景+浏览器基础
需要时 BROWSER_PROVIDER=stagehand:
| 变量 | 必填 | 描述 |
|---|---|---|
BROWSERBASE_API_KEY | 是 | API密钥来自 基于浏览器的.Com |
BROWSERBASE_PROJECT_ID | 是 | 来自Browsebase仪表板的项目ID |
BROWSERBASE_CONTEXT_ID | 否 | Grammarly登录状态的持久上下文 |
BROWSERBASE_SESSION_ID | 否 | 重用现有会话(高级) |
STAGEHAND_MODEL | 没有 | 已弃用。 使用 STAGEHAND_LLM_PROVIDER +改为模型变量 |
STAGEHAND_CACHE_DIR | 否 | 操作缓存目录 |
GOOGLE_GENERATIVE_AI_API_KEY | 没有\* | Gemini模型的Google API密钥。也接受 GEMINI_API_KEY |
\*使用Google/GGemini模型时需要(默认)。从……得到 aistudio.google.com.
浏览器使用云
需要时 BROWSER_PROVIDER=browser-use:
| 变量 | 必填 | 描述 |
|---|---|---|
BROWSER_USE_API_KEY | 是 | API密钥来自 cloud.browser-use.com |
BROWSER_USE_PROFILE_ID | 是 | 已同步Grammarly登录的个人资料 |
LLM提供者控制
独立的LLM提供程序用于浏览器自动化和文本重写(可以使用不同的提供程序):
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
STAGEHAND_LLM_PROVIDER | 否 | 自动检测 | LLM用于浏览器自动化: claude-code, openai, google, anthropic |
REWRITE_LLM_PROVIDER | 否 | 自动检测 | LLM用于文本重写: claude-code, openai, google, anthropic |
如果未设置,则从API密钥自动检测(优先级:OpenAI>Google>Anthropic>Claude Code)。
模型选择
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
CLAUDE_MODEL | 没有 | auto | 克劳德模型: auto, haiku, sonnet, opus。根据文本长度和迭代次数自动选择。 |
ANTHROPIC_MODEL | 没有 | claude-sonnet-4-20250514 | 使用直接的Anthropic提供者时的Anthrotic模型id。 |
OPENAI_MODEL | 没有 | gpt-4o | OpenAI模型名称 |
GOOGLE_MODEL | 没有 | gemini-2.5-flash | 谷歌/双子座型号名称 |
API密钥
| 变量 | 必填 | 描述 |
|---|---|---|
CLAUDE_API_KEY | 否 | Claude API密钥。如果未设置,则使用 claude login CLI身份验证 |
OPENAI_API_KEY | 无\* | OpenAI API密钥。使用OpenAI提供程序时需要。 |
GOOGLE_GENERATIVE_AI_API_KEY | 没有\* | Google API密钥。也接受 GEMINI_API_KEY。谷歌提供商需要。 |
ANTHROPIC_API_KEY | 否\* | API无烟煤键。使用直接Anthropic提供者时需要。 |
\*显式设置相应的LLM提供程序或自动检测时需要。
超时和日志记录
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
LOG_LEVEL | 没有 | info | debug, info, warn, error |
LLM_REQUEST_TIMEOUT_MS | 没有 | 120000 | LLM请求超时(ms)。 CLAUDE_REQUEST_TIMEOUT_MS 仍然接受兼容性。 |
CONNECT_TIMEOUT_MS | 没有 | 30000 | MCP连接超时(ms) |
______________________________________________________________________
运行服务器
pnpm start
# or
node dist/server.js服务器使用stdio传输进行MCP通信。
______________________________________________________________________
客户端配置
在MCP客户端中配置环境变量。必修的:
BROWSERBASE_API_KEY-从 基于浏览器的.ComBROWSERBASE_PROJECT_ID-来自Browsebase仪表板
自动设置
运行交互式设置脚本,使用您的值自动配置MCP客户端 .env 文件:
# First, configure your .env file with credentials
cp .env.example .env
# Edit .env with your API keys
# Run the setup script
pnpm setup-clients脚本将:
- 显示适用于您平台的可用MCP客户端
- 让您选择要配置的客户端
- 修改前备份现有配置
- 编写适当的配置格式(JSON或TOML)
手动配置
Claude Code CLI
通过CLI命令:
claude mcp add grammarly -e BROWSER_PROVIDER=stagehand \
-e BROWSERBASE_API_KEY=bb_xxx \
-e BROWSERBASE_PROJECT_ID=xxx \
-- node /path/to/grammarly-mcp/dist/server.js或添加到 ~/.claude/settings.json:
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}Claude Desktop
添加到您的Claude Desktop配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}Cursor
添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}或者通过UI:设置→ MCP → 添加新的MCP服务器
VS Code (GitHub Copilot)
添加到 .vscode/mcp.json 在您的工作空间中:
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}或者通过CLI:
code --add-mcp '{"name":"grammarly","command":"node","args":["/path/to/grammarly-mcp/dist/server.js"]}'Windsurf
添加到 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}Gemini CLI
添加到 ~/.gemini/settings.json:
{
"mcpServers": {
"grammarly": {
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
}OpenAI Codex CLI
添加到 ~/.codex/config.toml:
[mcp_servers.grammarly]
command = "node"
args = ["/path/to/grammarly-mcp/dist/server.js"]
[mcp_servers.grammarly.env]
BROWSER_PROVIDER = "stagehand"
BROWSERBASE_API_KEY = "bb_xxx"
BROWSERBASE_PROJECT_ID = "xxx"Continue (VS Code Extension)
添加到 .continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "node",
"args": ["/path/to/grammarly-mcp/dist/server.js"],
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}
}
]
}
}推荐配置
Minimal (Claude Pro/Max)
使用您的Claude订阅-无需额外的API密钥:
{
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx"
}
}Cost-Optimized (Always Haiku)
强制使用最便宜的Claude模型:
{
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx",
"CLAUDE_MODEL": "haiku"
}
}Mixed Providers (Fast + Quality)
Gemini用于浏览器自动化(快速),Claude用于重写(质量):
{
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx",
"GOOGLE_GENERATIVE_AI_API_KEY": "xxx",
"STAGEHAND_LLM_PROVIDER": "google",
"REWRITE_LLM_PROVIDER": "claude-code",
"CLAUDE_MODEL": "sonnet"
}
}Full Configuration (All Options)
{
"env": {
"BROWSER_PROVIDER": "stagehand",
"BROWSERBASE_API_KEY": "bb_xxx",
"BROWSERBASE_PROJECT_ID": "xxx",
"BROWSERBASE_CONTEXT_ID": "ctx_xxx",
"STAGEHAND_LLM_PROVIDER": "google",
"GOOGLE_GENERATIVE_AI_API_KEY": "xxx",
"GOOGLE_MODEL": "gemini-2.5-flash",
"REWRITE_LLM_PROVIDER": "claude-code",
"CLAUDE_MODEL": "auto",
"LOG_LEVEL": "info",
"LLM_REQUEST_TIMEOUT_MS": "120000",
"CONNECT_TIMEOUT_MS": "30000"
}
}______________________________________________________________________
工具:语法优化文本
输入参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text | 字符串 | _(必填)_ | 要分析/优化的文本 |
mode | enum | optimize | score_only, optimize,或 analyze |
max_ai_percent | 编号 | 10 | 目标AI检测阈值(0-100) |
max_plagiarism_percent | 编号 | 5 | 目标抄袭阈值(0-100) |
max_iterations | 编号 | 5 | 最大重写迭代次数(1-20) |
tone | enum | neutral | neutral, formal, informal, academic, custom |
domain_hint | string | -- | 域上下文(例如,“法律”、“医疗”) |
custom_instructions | string | -- | 其他重写指令 |
proxy_country_code | string | -- | ISO 3166-1地理路由的alpha-2国家代码 |
response_format | enum | json | json 或 markdown |
max_steps | 编号 | 25 | 最大浏览器自动化步骤(5-100) |
输出模式
{
"final_text": "string",
"ai_detection_percent": "number | null",
"plagiarism_percent": "number | null",
"iterations_used": "number",
"thresholds_met": "boolean",
"history": [
{
"iteration": "number",
"ai_detection_percent": "number | null",
"plagiarism_percent": "number | null",
"note": "string"
}
],
"notes": "string",
"live_url": "string | null",
"provider": "string"
}LLM配置
此服务器使用 独立的法学硕士提供者 用于浏览器自动化和文本重写:
| 目的 | 环境变量 | 用例 |
|---|---|---|
| 浏览器自动化 | STAGEHAND_LLM_PROVIDER | 现场观察/行动/撤离操作 |
| 文本重写 | REWRITE_LLM_PROVIDER | Claude重写文本以减少AI检测 |
示例:每个任务的不同提供者:
# Fast Google for browser automation, quality Claude for rewriting
STAGEHAND_LLM_PROVIDER=google
GOOGLE_MODEL=gemini-2.5-flash
REWRITE_LLM_PROVIDER=claude-code
CLAUDE_MODEL=sonnet自动检测优先级 (当提供者未明确设置时):
- 开放人工智能 -如果
OPENAI_API_KEY已设置 - 谷歌 -如果
GOOGLE_GENERATIVE_AI_API_KEY或GEMINI_API_KEY已设置 - Anthropic -如果
ANTHROPIC_API_KEY已设置 - 克劳德代码CLI (回退)-用途
claude login认证
克劳德车型自动选择 (当 CLAUDE_MODEL=auto):
| 文本长度 | 迭代次数 | 模型 |
|---|---|---|
| \12k个字符 | >8 | 作品(最高质量) |
浏览器使用LLM选项
使用浏览器时使用云(BROWSER_PROVIDER=browser-use),自动化使用Browser Use的内置LLM,价格为0.002美元/步。文本重写仍然使用配置的 REWRITE_LLM_PROVIDER.
______________________________________________________________________
会话保持
浏览器基础上下文允许您在会话之间持久化Grammarly登录状态。
毅力是如何发挥作用的
- 首次运行:服务器创建浏览器基础会话。使用调试URL手动登录Grammarly。
- 注释上下文ID:上下文ID出现在服务器日志或会话响应中。
- 后续运行:设置
BROWSERBASE_CONTEXT_ID跳过登录。
设置
# First run - no context, log in manually via debug URL
BROWSERBASE_API_KEY=bb_...
BROWSERBASE_PROJECT_ID=...
# After logging in, add context ID for subsequent runs
BROWSERBASE_CONTEXT_ID=ctx_...演出
| 场景 | 初始化时间 |
|---|---|
| 新会话,无上下文 | ~30-45秒 |
| 现有上下文 | ~5-10秒 |
| 重新使用活动会话 | ~1-2秒 |
______________________________________________________________________
运作原理
建筑
MCP Client (Claude Code, Cursor, VS Code, etc.)
│
└── grammarly_optimize_text tool
│
├── Provider Abstraction
│ ├── StagehandProvider (default)
│ │ ├── BrowserbaseSessionManager
│ │ ├── Stagehand (observe/act/extract)
│ │ └── Multi-LLM Client
│ │
│ └── BrowserUseProvider (fallback)
│ └── Browser Use SDK
│
└── Rewrite Client (multi-provider text rewriting)
└── Claude Code / OpenAI / Google / Anthropic分段流
- 获取或创建具有可选上下文的Browserbase会话
- 初始化连接到会话的Stagehand实例
- 导航到app.grammarly.com
- 使用
observe()查找UI元素(新文档按钮、AI检测器) - 使用
act()进行交互(单击,键入文本) - 使用
extract()使用Zod模式获得结构化分数 - 返回带有调试URL的分数
浏览器使用流程
- 使用同步的配置文件创建浏览器使用会话
- 将自然语言任务发送给浏览器使用代理
- Agent导航Grammarly、粘贴文本、运行检查
- 返回结构化分数
优化循环
- 初始得分 (迭代0)在原始文本上
- 在优化模式下:循环到
max_iterations:
- LLM(通过 REWRITE_LLM_PROVIDER)根据当前分数、音调、领域重写文本 - 通过Grammarly重新评分 - 如果达到阈值,请提前突破
- 生成摘要 通过配置的重写LLM提供程序
______________________________________________________________________
发展
建造和质量
pnpm install # Install dependencies
pnpm build # Compile TypeScript
pnpm type-check # Type checking only
pnpm biome:check # Lint + format check
pnpm biome:fix # Auto-fix lint + format
pnpm check-all # Type check + lint测试
pnpm test # Watch mode
pnpm test:run # Run once
pnpm test:coverage # With coverage report
pnpm test:unit # Unit tests only
pnpm test:integration # Integration tests覆盖阈值 (在CI中强制执行):85%的行,85%的功能,75%的分支。
测试使用具有V8覆盖率的Vitest。看 tests/ 用于测试结构和 CLAUDE.md 用于测试惯例。
______________________________________________________________________
故障排除
服务器问题
服务器无法启动
检查是否设置了所需的环境变量:
- 舞台工作人员:
BROWSERBASE_API_KEY,BROWSERBASE_PROJECT_ID - 浏览器使用:
BROWSER_USE_API_KEY,BROWSER_USE_PROFILE_ID
工具未出现在客户端
- 验证路径
dist/server.js绝对正确 - 跑
pnpm build确保编译成功 - 配置更改后重新启动MCP客户端
阶段性问题
浏览器基础会话创建失败
- 在验证API密钥和项目ID 基于浏览器的.Com
- 检查Browserbase仪表板上的配额/限制
上下文未持久化登录
- 确保在上下文处于活动状态时登录Grammarly
- 上下文ID必须与发生登录的会话匹配
- 语法会话可能会过期;需要时重新登录
自我修复的失败
- Grammarly UI可能发生了重大变化
- 试试看
LOG_LEVEL=debug查看Stagehand观察结果 - 报告持续存在的问题
浏览器使用问题
会话创建失败
- 在验证API密钥 cloud.browser-use.com
- 检查配置文件是否存在并已正确同步
配置文件同步问题
- 使用浏览器使用工具重新同步您的Grammarly登录
- Grammarly Cookie可能已过期
语法问题
AI检测分数为空
您的Grammarly计划可能不包括AI探测器。这需要启用AI检测的Grammarly Pro。
抄袭分数为零
剽窃检查需要Grammarly Pro订阅。
克劳德问题
身份验证错误
使用CLI身份验证(推荐):
claude logout
claude login使用API密钥: 确保 CLAUDE_API_KEY 设置正确。
______________________________________________________________________
安全注意事项
- API密钥:安全存放。永远不要承诺版本控制。
- 浏览器基础上下文:包含会话Cookie。将上下文ID视为敏感。
- 浏览器使用配置文件:包含Grammarly会话状态。将配置文件ID视为敏感。
- 数据流:文本通过:
1. 浏览器基础或浏览器使用云(浏览器自动化) 1. 语法(通过web UI) 1. API(用于重写)
查看每个服务的隐私政策。
- 本地执行:MCP服务器通过stdio在本地运行,而不是通过网络。
______________________________________________________________________
注意事项和限制
- Grammarly Pro必需:AI检测器和剽窃检查器需要Grammarly Pro。分数返回
null如果不可用。 - UI依赖关系:自动化使用观察/动作/提取(舞台手)或自然语言(浏览器使用)。语法UI更改可能会影响可靠性。
- 文本长度:很长的文本可能超过上下文限制。考虑分块。
- 速率限制:Browserbase、Browser Use Cloud和Grammarly都有使用限制。
- 会话限制:浏览器基础会话有超时限制。使用上下文进行持久化。
______________________________________________________________________
外部资源
- 浏览: 基于浏览器的.Com | 文档
- 舞台工作人员: | 文档
- 浏览器使用: cloud.browser-use.com | 文档
- 克劳德代码: ai sdk提供商claude代码
- 主控程序: 模型上下文协议.io
______________________________________________________________________
许可证
MIT许可证-请参阅 许可证 了解详情。
