mcpField
G
Gridar

Gridar

远程服务
gridar.app商业与营销01 周前更新

关于 Gridar

Gridar 将其 SEO 平台通过 MCP 工具开放给客户端,可管理网站、内容、关键词和 Search Console 数据,并运行 SEO 检查。该服务面向 Gridar Pro 或 Agency 计划用户,托管版本提供 69 个工具。

主要功能

  1. 01管理网站和文章
  2. 02生成并更新内容
  3. 03跟踪关键词和 SEO 数据
  4. 04运行内容与网站审计
  5. 05分析 AI 搜索可见度

适用场景

  1. 01审计已发布文章的 SEO 问题
  2. 02生成并维护网站内容
  3. 03检查关键词和 Search Console 数据
  4. 04评估内容适配 AI 答案的程度

MCP 相关

通过托管的 Streamable HTTP 端点 `https://mcp.gridar.app/mcp` 提供 69 个 `gridar_*` 工具,支持 OAuth 2.1 和 PKCE 或 Bearer 令牌。工具向 MCP 客户端开放 Gridar 账户数据和操作;API 访问需要 Pro 或 Agency 计划。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.gridar.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

@gridar/mcp-server

面向 Gridar 的 Model Context Protocol 服务。

该服务将 Gridar REST API(https://api.gridar.app/api/v1)作为 69 个 gridar_* 工具提供。MCP 客户端可以读取和修改令牌所属 Gridar 账户中的站点、文章、落地页、已跟踪关键词、autopilot、站点记忆和 Search Console 数据,也可以对其运行 SEO 检查。

版本

发行版版本工具数
托管服务 https://mcp.gridar.app/mcp0.7.069
此源代码(mcp-server/)0.7.069
npm 软件包 @gridar/mcp-server0.4.243

于 2026-10-21 使用 npm view @gridar/mcp-server version 和托管服务卡片进行检查。npm 软件包版本落后:请使用托管服务。

要求

  • 拥有 Gridar Pro 或 Agency 套餐的账户。
  • 所有套餐均可成功通过 OAuth 登录,但 Trial 和 Solo 套餐中的每次工具调用都会返回 HTTP 403:“Accès API réservé aux plans Pro et Agence”。

安装:托管服务(推荐)

项目值
URLhttps://mcp.gridar.app/mcp
传输方式Streamable HTTP
身份验证OAuth 2.1 with PKCE,或 Authorization: Bearer btb_xxx
官方 MCP 注册表app.gridar/gridar
公开服务卡片(无需令牌)https://mcp.gridar.app/.well-known/mcp/server-card.json:名称、版本、工具列表
健康状态https://mcp.gridar.app/health

无需在你的计算机上安装任何内容。

OAuth 登录的作用
  1. 将 https://mcp.gridar.app/mcp 添加到你的客户端。
  2. 如果没有令牌,服务会返回 401,并附带一个指向 /.well-known/oauth-protected-resource 的 WWW-Authenticate 标头。客户端会从该地址发现 OAuth 端点。
  3. 客户端会打开 Gridar 登录页面。按需登录,然后点击 Autoriser。
  4. Gridar 会创建一个以客户端命名的 API 令牌(例如 MCP - Claude Code),并将其交给客户端。
  5. 令牌会显示在 https://www.gridar.app/account/api-keys。你可以在那里撤销令牌以断开访问。
Claude(claude.ai 和 Claude Desktop)

在 claude.ai 中:进入 Settings > Connectors,添加自定义连接器,并填写 URL https://mcp.gridar.app/mcp。Claude 会打开 Gridar 登录页面;授权后即可使用该连接器。

Claude Desktop 通过配置文件使用 mcp-remote 桥接程序:

{
  "mcpServers": {
    "gridar": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.gridar.app/mcp"]
    }
  }
}

配置文件位于 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows)。之后重启 Claude Desktop。

ChatGPT
  1. 打开 Settings > Connectors,或开启 Developer Mode 以使用自定义连接器。
  2. 按 URL 添加连接器:https://mcp.gridar.app/mcp。
  3. ChatGPT 会打开 Gridar 登录页面。请授权。

OpenAI 会根据账户类型限制自定义连接器。Gridar 页面列出了 ChatGPT Pro、Team、Enterprise 或 Developer Mode;请查看 OpenAI 当前的规则。

Claude Code
claude mcp add --transport http gridar https://mcp.gridar.app/mcp

首次调用时会启动 OAuth。如需在没有浏览器的会话中使用,请在标头中传入令牌:

claude mcp add --transport http gridar https://mcp.gridar.app/mcp \
  --header "Authorization: Bearer btb_xxx"
Cursor

进入 Settings > MCP > Add server,添加类型为 URL 的服务:https://mcp.gridar.app/mcp。

Codex CLI、SDK 和其他客户端

任何支持 Streamable HTTP 的 MCP 客户端都可以连接到 https://mcp.gridar.app/mcp,并自行发现 OAuth 流程(参见上文第 2 步)。无头 Agent 可使用在 https://www.gridar.app/account/api-keys 创建的令牌发送 Authorization: Bearer btb_xxx。

安装:通过 npm 使用本地 stdio

npm 包版本较旧。 npm 上的 @gridar/mcp-server 版本为 0.4.2,包含 43 个工具。托管服务和此源代码的版本为 0.7.0,包含 69 个工具。本 README 中的工具列表与 0.7.0 版一致。

npm 0.4.2 中缺少的 26 个工具:gridar_action_strategic_opportunity、gridar_ai_overview_readiness、gridar_ai_visibility_summary、gridar_approve_strategy、gridar_build_cluster、gridar_check_renderability、gridar_classify_intent、gridar_cluster_map、gridar_create_landing、gridar_export_page_prompt、gridar_generate_landing、gridar_generate_sister_article、gridar_index_coverage、gridar_indexnow_setup、gridar_indexnow_submit、gridar_link_opportunities、gridar_link_pages、gridar_list_strategic_opportunities、gridar_mark_page_built、gridar_propose_keyword_strategy、gridar_pull_build_queue、gridar_refresh_strategic_opportunities、gridar_run_ai_visibility、gridar_serp_analyze、gridar_site_seo_score、gridar_submit_sitemap。

此包会安装 gridar-mcp 二进制文件,并从 BLOG_DASHBOARD_TOKEN 读取令牌。

Claude Desktop:

{
  "mcpServers": {
    "gridar": {
      "command": "npx",
      "args": ["-y", "@gridar/mcp-server"],
      "env": {
        "BLOG_DASHBOARD_TOKEN": "btb_xxx"
      }
    }
  }
}

Claude Code:

claude mcp add gridar \
  --env BLOG_DASHBOARD_TOKEN=btb_xxx \
  -- npx -y @gridar/mcp-server

其他客户端:在其环境中设置令牌,并通过 stdio 启动进程。

BLOG_DASHBOARD_TOKEN=btb_xxx npx -y @gridar/mcp-server

要在本地获取全部 69 个工具,请改为构建此源代码(参见开发)。

环境变量

仅列出名称。切勿提交真实令牌。

Stdio(本地)
变量必填默认值作用
BLOG_DASHBOARD_TOKEN是无Gridar API 令牌(btb_xxx),作为 Authorization: Bearer 发送
BLOG_DASHBOARD_API_BASE否https://api.gridar.app/api/v1Gridar API 基础 URL
可自托管 HTTP(node dist/http.js)
变量默认值作用
PORT8080监听端口
BLOG_DASHBOARD_API_BASEhttps://api.gridar.app/api/v1服务转发调用的 Gridar API
MCP_PUBLIC_BASEhttp://localhost:<PORT>此服务的公开 URL,用于 OAuth 元数据和重定向
GRIDAR_BASEhttps://gridar.app承载 OAuth 登录页面(/oauth/mcp-authorize)的 Gridar 应用
MCP_REQUIRE_AUTH开启设置为 false 可跳过 Bearer 检查(仅用于开发)
MCP_ALLOWED_ORIGINS*允许的 CORS 来源列表,以逗号分隔
OAUTH_CLIENT_ID内置值动态客户端注册返回的客户端 ID
OAUTH_CLIENT_SECRET内置值动态客户端注册返回的客户端密钥

在 HTTP 模式下,令牌来自每个请求的 Authorization 标头,并通过 AsyncLocalStorage 限定在该请求范围内。BLOG_DASHBOARD_TOKEN 仍会作为后备令牌:在设置了 MCP_REQUIRE_AUTH=false 的共享服务上不要设置它,否则每个调用者都会以该账户的身份操作。

HTTP 端点:

方法和路径作用
POST /mcpMCP Streamable HTTP:初始化和工具调用
GET /mcp开放会话的 SSE 通知流
DELETE /mcp关闭会话
GET /health{status, name, version, transport, oauth}
GET /.well-known/mcp/server-card.json公开卡片:服务信息和工具列表,无需令牌
GET /.well-known/oauth-protected-resourceOAuth 受保护资源元数据(RFC 9728)
GET /.well-known/oauth-authorization-serverOAuth 服务元数据(RFC 8414)
POST /register动态客户端注册(RFC 7591)
GET /authorize、GET /callback、POST /token使用 PKCE(S256 或 plain)的 OAuth 授权码流程

方案和限制

方案API 和 MCP 访问权限每小时请求数每月 AI 文章数
Trial无(403)01
Solo无(403)08
Pro有3060
Agency有200200

来源:backend/sites_mgmt/api_v1.py 中的 PLAN_API_LIMITS,以及 backend/sites_mgmt/models.py 中的 Subscription.get_limits()。

  • 每次工具调用都会向 Gridar API 发送一个请求,并计入每小时限制。超过限制后,API 会返回 429。
  • 以下三个工具会扣减每月文章配额;配额用完后,则会扣减一个额度:gridar_generate_article、gridar_generate_sister_article、gridar_generate_landing。
  • API 错误会作为工具错误返回:Gridar API error (HTTP <status>): <message>,后跟 JSON 正文。

工具(69)

效果列标记了调用会造成的更改:

  • destructive:删除或停用某项内容;客户端应先确认。
  • publishes:发布内容或将页面设为公开。
  • quota:从每月配额中扣减一篇文章,或扣减一个额度。
  • writes:在 Gridar 中更改数据,但不会发布任何内容。
  • none:只读。
账户和站点
工具功能效果
gridar_get_me你的方案、每小时 API 限制、每月文章配额及使用情况none
gridar_list_sites你的站点:id、域名、托管模式、默认语言none
gridar_get_site单个站点的完整配置:集成、默认语言、知识库、竞争对手、GSC 连接、自动驾驶、作者 E-E-A-T 字段none
gridar_update_site更改可编辑的站点字段:名称、描述、知识库、竞争对手、默认语言、作者简介和资质、公开博客域名writes
文章
工具功能效果
gridar_list_articles站点文章,按状态、语言和数量筛选(默认 25 篇,最多 100 篇)none
gridar_get_article根据 site_id 和 slug 获取一篇文章的完整内容(HTML 和元数据)none
gridar_generate_article根据 topic 或 title 生成 SEO 文章。在托管站点上保存为草稿,在 WordPress、Shopify 和 Webflow 上则直接发布quota;在 CMS 站点上为 publishes
gridar_generate_sister_article将文章翻译并改写为同一翻译组中的另一种语言,从而建立 hreflang 链接。创建为草稿。仅适用于托管站点quota
gridar_create_article在托管站点上创建手写文章。不使用 AI,也不扣减配额writes;当 status: published 时为 publishes
gridar_update_article在所有站点模式(托管、外部、WordPress、Shopify、Webflow)下,更改文章的标题、内容、摘要、状态、封面图片或作者writes;当 status: published 时为 publishes
gridar_delete_article在所有站点模式下永久删除文章。删除 WordPress、Shopify 和 Webflow 上的文章时会跳过回收站destructive
审计与内容
工具功能影响
gridar_audit_article审计原始内容:提供 0 到 100 的评分,并针对长度、关键词密度、标题、链接和元数据给出修改建议无
gridar_get_brief为关键词生成内容简报:搜索意图、大纲、实体、常见问题候选项和 E-E-A-T 信号无
gridar_bulk_audit并行审计网站所有已发布文章(Gemini):汇总评分和主要问题无
gridar_check_readability评估文本的可读性(Flesch-Kincaid、ARI)无
gridar_check_plagiarism通过 Originality.ai 检查文本中的 AI 内容和抄袭情况无
gridar_check_hreflang检查网站已发布文章的翻译组是否一致。需要 site_id无
gridar_detect_cannibalization找出针对相同意图或关键词的文章组合,涵盖不同语言和状态无
gridar_suggest_internal_links从网站已发布的文章中挑选内链,供你插入传入的 content无
gridar_ai_overview_readiness根据 5 项加权检查(常见问题、H2/H3 结构、E-E-A-T、具体数据、可提取段落)评估文章适用于 AI 答案的准备情况,评分为 0 到 100,并提供建议无
网站健康状况
工具功能影响
gridar_site_seo_score根据 9 项加权检查(可索引性、作者简介、商业模式、GSC、已获批准的支柱页和子页面集群、hreflang、Core Web Vitals、常见问题架构、滞留在博客文章中的交易型意图)计算 0 到 100 的综合网站评分,并提供 action_items无
gridar_check_renderability抓取 URL 并判断 HTML 是服务器端渲染的,还是必须由 Googlebot 渲染的 JavaScript 外壳(可见文字不超过 100 个时会标记为可疑 SPA)无
gridar_page_speed获取 URL 的 PageSpeed Insights 数据,适用于移动端或桌面端:Core Web Vitals 和建议无
gridar_find_broken_links找出网站文章中返回 4xx、5xx 或超时的出站链接无
gridar_get_content_decay找出过去 N 天(7 到 90 天,默认为 30 天)内 GSC 展示次数或点击次数下降的文章,并建议更新、扩充或重定向无
关键词、SERP 和竞争对手
工具功能影响
gridar_list_keywords查看已跟踪的关键词及其最近记录的排名无
gridar_track_keyword添加要跟踪的关键词,或重新启用已移除的关键词。每日 cron 会记录其排名写入
gridar_untrack_keyword停止跟踪关键词(软删除)。保留排名历史;使用 gridar_track_keyword 可恢复跟踪写入
gridar_snapshot_keywords立即记录网站每个已跟踪关键词的排名写入
gridar_suggest_keywordsClaude 根据网站记忆和首页推荐要跟踪的关键词无
gridar_keyword_research将种子关键词扩展为相关查询(Serper 相关搜索和「People Also Ask」、Gemini 变体),按主题系列分组,并显示各提供方的状态。不含搜索量或难度无
gridar_people_also_ask获取 Google 针对某个关键词的「People Also Ask」问题无
gridar_classify_intent判断关键词的搜索意图(交易型、商业型、信息型、导航型、本地型),并给出置信度评分无
gridar_analyze_competitors获取某个关键词在 Google 排名靠前的 10 个结果:平均字数、常见标题、实体覆盖情况和内容缺口无
gridar_serp_analyze获取排名靠前的 10 个结果中各 URL 的指标(字数、H1/H2/H3、常见问题、视频)及平均值,用于评估竞争文章的规模无
gridar_suggest_competitors根据首页和已跟踪关键词,推荐可能的 SEO 竞争对手无
gridar_link_opportunities获取针对某个关键词的外链拓展候选网站:域名、URL、标题、摘要和来源查询无
策略、落地页和集群
工具功能影响
gridar_propose_keyword_strategy为关键词规划结构:单个落地页、支柱页与集群、对比表、本地落地页或博客文章。重新运行会刷新草稿,不会更改已批准的策略写入
gridar_approve_strategy批准策略:落地页由 AI 生成为草稿,文章则等待调用 gridar_generate_article写入
gridar_create_landing创建手动编写的结构化落地页(主视觉、价值主张、社会认同、常见问题解答、底部行动号召)。不使用 AI,不消耗配额。仅适用于托管网站写入;使用 status: published 时会发布
gridar_generate_landing根据关键词使用 AI 生成完整落地页,并在托管网站上保存为草稿消耗配额
gridar_link_pages在同一网站的两个页面之间添加上下文链接:就地转换锚文本,或追加一行“Voir aussi”写入(编辑源页面)
gridar_cluster_map网站的主题集群:支柱页、分支页、已覆盖页面、缺失页面。不调用 LLM无
gridar_build_cluster为支柱页及其分支页生成提示词,并包含内部链接。将缺失的关键词添加到跟踪中。不调用 LLM,不消耗配额:由 Agent 编写文案写入
战略机会
工具功能影响
gridar_refresh_strategic_opportunities对已跟踪、具有交易、商业或本地意图且尚无落地页的关键词运行机会引擎。每个关键词调用一次 Claude,max_keywords 默认为 8,上限为 20写入
gridar_list_strategic_opportunities缓存的机会:页面类型、标题、URL 路径、吸引点、获客机制、转化路径、角度、优先级、流量估算(参见已知限制)无
gridar_action_strategic_opportunityapprove 会生成落地页草稿并将机会标记为已完成;dismiss 会隐藏机会;restore 会将机会恢复写入
gridar_export_page_prompt可直接粘贴到你自己的 AI 工具(ChatGPT、Lovable、v0、Bolt 等)中的提示词:使用 landing_id 可原样集成现有落地页,使用 opportunity_id 可根据概要撰写页面。仅进行模板处理,不消耗配额无
通过 Agent 交付

对于 Gridar 无法发布到的自建网站,请在控制面板中将网站的交付模式设为 Agent。

工具功能影响
gridar_pull_build_queue获取要在你自己的仓库中构建的页面队列:落地页概要、要原样集成的已生成文章、文章概要。不调用 LLM,不消耗配额无
gridar_mark_page_built报告队列中的页面已上线,并提供其 URL。Gridar 会将其从队列中移除,并关联排名跟踪和效果证明写入
Google Search Console 和索引
工具功能影响
gridar_gsc_queries查询某篇文章在 N 天内的 GSC 数据(展示次数、点击次数、排名;默认为 28 天,限制为 50)。需要连接 GSC无
gridar_index_coverage查看 Google 已索引了哪些预期页面:对任意网站执行 site: 查询;如果已连接 GSC,还会显示 GSC URL 检查状态和原因(max_inspect 默认为 25)无
gridar_submit_sitemap将站点地图重新提交到 Google Search Console。需要具有写入权限的 GSC。不会强制建立索引写入(发送给 Google)
gridar_indexnow_setup获取网站的 IndexNow 密钥以及需托管在域名根目录下的密钥文件。首次调用时会创建密钥写入
gridar_indexnow_submit将 URL 或站点地图中的 URL 提交到 IndexNow:Bing、Yandex、Seznam、Naver。不包括 Google写入(发送到 IndexNow)
AI 可见度
工具功能影响
gridar_ai_visibility_summary返回 available: false、计数为 0,并附带一条 note:仪表板尚未查询任何 AI 引擎无
gridar_run_ai_visibility返回 HTTP 501,错误代码为 ai_visibility_unavailable,且不写入任何内容无
自动驾驶
工具功能影响
gridar_get_autopilot自动驾驶配置和状态:是否启用、每周次数、上次运行时间、下次运行时间、上次错误无
gridar_set_autopilot启用或配置自动驾驶:enabled、weekly_count(1 至 7)、auto_publish写入;之后会在 auto_publish: true 时发布
gridar_run_autopilot_now立即运行一个自动驾驶周期,不受计划安排限制写入;auto_publish 开启时会发布
站点记忆
工具功能影响
gridar_list_memories站点记忆片段:文章、知识库、手动笔记、决策。支持分页无
gridar_add_memory添加一条笔记。manual 和 decision 类型在后续生成中权重更高写入
gridar_delete_memory删除一个记忆片段破坏性操作
gridar_rebuild_memory对知识库和已发布的托管文章重新分块并生成嵌入向量(Voyage AI)。不会清除现有片段写入
结果证明与报告
工具功能影响
gridar_proof_summary根据 GSC 统计获得的展示次数和点击次数,并列出增长最多的 5 篇文章无
gridar_proof_attribution每篇文章在第 30、60 和 90 天相对于基准的快照;使用 post_id 筛选无
gridar_enable_proof_share启用公开的只读结果页面并返回其 URL。rotate: true 会生成新链接并使旧链接失效发布
gridar_revoke_proof_share关闭公开结果页面:该 URL 会立即返回 404。数据会保留破坏性操作
gridar_weekly_digest站点最近 7 天的数据:流量、排名、内容衰减无

对话示例

  • “审核站点 12,并告诉我优先处理的 3 项修复。”Claude 会调用 gridar_site_seo_score,然后读取其 action_items。
  • “提取站点 12 的待构建页面,并在此代码库中创建这些页面。”Claude Code 会调用 gridar_pull_build_queue,编写每个页面并部署,然后针对每个线上 URL 调用 gridar_mark_page_built。

工具接收数字型 site_id:该站点必须已存在于你的 Gridar 账户中。gridar_list_sites 会返回这些 ID。

已知限制

  • AI 可见性尚未接入。 仪表板不会查询任何 AI 引擎。gridar_run_ai_visibility 返回 501(ai_visibility_unavailable)且不存储任何内容;gridar_ai_visibility_summary 返回 available: false 和零计数,并排除先前模拟的结果。若要进行一次性检查,工具描述会指向免费的检查器:https://www.gridar.app/tools/ai-visibility-checker。
  • 没有搜索量,也没有关键词难度。 gridar_keyword_research 不会返回这两项,而 estimated_intent 是根据关键词中的词语推测的。请查看其 sources 字段:列表较短可能意味着某个提供商出错或未返回任何内容。
  • 机会估算值经常为 0。 战略机会中的 monthly_volume 来自对 Serper 搜索响应的尽力读取。如果 Serper 未返回搜索量字段,monthly_volume、estimated_visits 和潜在客户范围都会是 0,且 qualitative_traffic 为 inconnu。
  • 排名深度。 每日 cron 会保留最多三次 Serper 调用返回的最大自然搜索结果集;gridar_snapshot_keywords 则只进行一次调用。在这两种情况下,如果页面排名低于 Serper 返回的结果范围,就会被记录为未排名。
  • gridar_generate_article 在省略 language 时默认使用法语(后端读取 language,否则回退到 fr)。在网站设定业务模式和作者简介之前,它会返回 422;网站没有交付路径时会返回 409(delivery_blocked);配额和积分用完时会返回 402。
  • gridar_update_article 通过 slug 识别文章;没有可用于更改 slug 的字段。
  • gridar_check_hreflang 需要 site_id。后端会忽略 html 参数。
  • gridar_suggest_internal_links 需要 content。后端不会读取 article_slug 或 keyword。
  • gridar_check_plagiarism 需要至少 50 个字符;如果 Gridar 端未配置 Originality.ai,则会返回 503。
  • 落地页(gridar_create_landing、gridar_generate_landing)和 gridar_generate_sister_article 仅适用于托管网站。
  • IndexNow 无法触达 Google,重新提交站点地图也不会强制 Google 将任何内容编入索引。
  • 令牌。 一个令牌可访问账户中每个网站上的所有工具,包括删除操作。没有只读令牌。每次 OAuth 授权都会创建一个新令牌;旧令牌会一直有效,直到你在 https://www.gridar.app/account/api-keys 撤销它们。
  • OAuth 状态保存在内存中。 验证码会在 5 分钟后过期;如果登录期间服务器重启,待处理的登录就会失效:请重新开始连接。

开发

cd mcp-server
npm install
npm run build
BLOG_DASHBOARD_TOKEN=btb_xxx node dist/index.js   # stdio (npm start)
PORT=8080 node dist/http.js                       # HTTP (npm run start:http)

使用 MCP Inspector 进行调试:

BLOG_DASHBOARD_TOKEN=btb_xxx npx @modelcontextprotocol/inspector node dist/index.js

工具定义(名称、描述、输入架构)位于 src/index.ts,API 客户端位于 src/api.ts,HTTP 服务和 OAuth 流程位于 src/http.ts。

链接

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。