MCP Server Marketplace
Help users discover, install, configure, and manage MCP servers. Supports OpenClaw, Claude Desktop, Claude Code, and Cursor.
Core Principles
- 1. ClawHub First — Always check for a ClawHub plugin bundle before raw server install. Bundles include skills and workflows on top of the MCP connection.
- Never Store Secrets — Auth values are always env var references (
${VAR_NAME}), never raw tokens. Never ask the user to paste their actual token in chat. - Verify Before Acting — Confirm server choice and auth readiness before installing.
- Guide Completely — Don't just install. Walk through auth setup and verification.
Intent Routing
Classify the user's request into one of these intents, then follow the corresponding workflow.
DISCOVER — "What MCP servers are available for X?"
- 1. Run search:
python3 {baseDir}/scripts/search_registries.py --query "<user's topic>" [--category "<category>"]
- 2. If
clawHubMatch is present, mention the bundle first: "There's a [bundle name] plugin on ClawHub with [N] skills — want that instead?" - Present results as a numbered list with name, description, and auth requirements.
- If any result has
"source": "npm" or "source": "smithery", add a note: "This server is from [npm/Smithery] and hasn't been verified by our team. It should work but proceed with caution." - Offer to install any result.
- If user asks "what else should I install?" or "recommend more servers":
python3 {baseDir}/scripts/smart_recommend.py [--max-results 5]
Present recommendations with their reasons (which installed servers they complement). Offer to install any.
INSTALL — "Install the X MCP server"
This is the most complex flow. Follow all steps in order.
Step 1 — Search:
CODEBLOCK2
Step 2 — ClawHub bundle offer:
If clawHubMatch is present, offer the bundle:
I found a [bundle displayName] plugin on ClawHub that includes the MCP connection plus [skillCount] additional skills. Would you like the full bundle, or just the raw MCP connection?
If user wants the bundle, guide them to install via ClawHub (clawhub install <bundleId>). Then record the install and stop.
Step 3 — Confirm server:
If multiple results, present a numbered list and ask user to pick. If one result, confirm: "I'll set up [displayName] — sound good?"
Step 3.5 — Compatibility check (if non-default client):
If the user specified a client or you detected a non-OpenClaw client, check compatibility:
python3 {baseDir}/scripts/check_compatibility.py --server-id "<id>" --client "<client>"
If
compatible is
false, warn the user and suggest alternatives. If there are
warnings, mention them but proceed.
Step 4 — Build config:
python3 {baseDir}/scripts/build_config.py --server-id "<id>" [--client "<client>"]
The
--client flag is optional. If omitted, the script auto-detects the client (OpenClaw, Claude Desktop, Claude Code, or Cursor). The output includes
mergeTarget (the config file path) and
client (the detected client name).
Step 5 — Auth guidance (if server has requiredEnv):
Follow the Auth Guidance Pattern below. Wait for user to confirm they have their token ready before proceeding.
Step 6 — Check prerequisites and install:
python3 {baseDir}/scripts/install_server.py --server-id "<id>"
This script checks prerequisites and returns the install command — it does NOT run it.
- - If
prerequisitesMet is false, show the prerequisites.suggestion and help the user install the prerequisite first. - If
prerequisitesMet is true, run the installCommand.command directly using the Bash tool. For example, if the output says "command": "npx -y @github/mcp-server --help", run that command to verify the package resolves. - If
installCommand.command is null (HTTP servers), skip — no install needed. - If the install command fails, try the
installCommand.fallbackCommand if present, or consult {baseDir}/references/troubleshooting.md.
Step 7 — Write config:
Present the configEntry from step 4 and explain it needs to be added to the config file at mergeTarget (the path returned by build_config.py). If the config file exists, merge the new server entry into the existing mcpServers object. If it doesn't exist, create it:
CODEBLOCK6
Step 8 — Record state:
python3 {baseDir}/scripts/manage_servers.py --action record --server-id "<id>" --package "<package>" --transport "<transport>" --install-method "<method>" --source "<source>"
Use
--source curated,
--source npm, or
--source smithery based on where the server was found.
Step 8.5 — Health check (optional):
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
If
status is
"healthy", include the tool count in the summary. If
"unhealthy" or
"error", troubleshoot before declaring success — consult
{baseDir}/references/troubleshooting.md.
Step 9 — Summary:
Tell the user what was installed, what tools are now available (from health check if run), and remind them to restart their client to pick up the new server.
BULK INSTALL — "Install the dev toolkit" / "Set up servers for data work"
- 1. If user mentions a specific bundle, resolve it. If they describe a use case, match to the closest bundle:
python3 {baseDir}/scripts/bulk_install.py --bundle "<bundle-name>"
Available bundles:
standard-dev,
data-engineering,
web-frontend,
devops,
productivity,
ai-ml.
- 2. If unsure which bundle, list them all:
python3 {baseDir}/scripts/bulk_install.py --bundle __list__
Present the options and let the user choose.
- 3. Present the install plan: show which servers will be installed and which are already configured.
- 4. For each server in
toInstall, follow the INSTALL workflow (Steps 3-9). Process them one at a time, confirming auth requirements for each.
- 5. After all servers are installed, present a summary: "Installed X servers, Y were already configured."
DETECT — "Scan for MCP servers" / "What MCP servers do I already have installed?"
- 1. Run detection:
python3 {baseDir}/scripts/detect_servers.py --verbose
- 2. If
unconfigured has entries: "I found [count] MCP server packages on your system that aren't configured yet: [list them]. Want me to set up any of them?" - If
alreadyConfigured has entries: mention them as already active. - If nothing detected: "No known MCP server packages found. Want me to search for servers to install?"
- For each server the user wants to configure, follow the INSTALL workflow starting at Step 4 (Build config) — the package is already installed.
RECOMMEND — "Set up MCP for this project" / "What servers should I use?"
- 1. Scan the project:
python3 {baseDir}/scripts/recommend_servers.py [--project-dir "<path>"]
If the user specifies a project type:
python3 {baseDir}/scripts/recommend_servers.py --template "<type>"
Available templates:
python-web,
node-fullstack,
data-science,
mobile,
devops,
static-site.
- 2. If
detected is true:
- Present the detected template: "This looks like a
[displayName] project (matched [files/patterns])."
- List
recommended servers first, then
optional servers.
- Mark any that are already configured.
- Offer to install the recommended set (routes to BULK INSTALL logic).
- 3. If
detected is false:
- List available templates and ask the user to pick one.
- Or suggest running DISCOVER for a broader search.
CONFIGURE — "Set the API key for X" / "Connect X to my database"
- 1. Identify the server from the user's request.
- Run
build_config.py --server-id "<id>" with any custom env/args the user provides:
python3 {baseDir}/scripts/build_config.py --server-id "<id>" --custom-env '{"KEY": "${KEY}"}'
- 3. Follow the Auth Guidance Pattern for any new env vars.
- Update the
.mcp.json config entry.
STATUS — "Show my installed MCP servers"
- 1. Run:
python3 {baseDir}/scripts/manage_servers.py --action list
- 2. Present as a formatted table: server name, package, transport, install method, installed date, config present.
- If any server has
"configPresent": false, warn: "This server is recorded but its config entry was not found. It may need to be re-configured." - If the user asks about a specific server:
python3 {baseDir}/scripts/manage_servers.py --action status --server-id "<id>"
- 5. If no servers installed, suggest running a discovery search.
REMOVE — "Remove the X server"
- 1. Confirm: "Remove [displayName]? This will remove the state record. You should also remove its entry from
.mcp.json." - Run:
python3 {baseDir}/scripts/manage_servers.py --action remove --server-id "<id>"
- 3. Remind user to remove the corresponding entry from
.mcp.json and restart OpenClaw.
UPDATE — "Update my MCP servers"
- 1. Run version check:
python3 {baseDir}/scripts/version_check.py
For a specific server: INLINECODE59
- 2. Present results:
- Servers with
updateAvailable: true: show current vs latest version and the
updateCommand.
- Servers with
note (npx/uvx/http): explain they auto-resolve or are managed remotely.
- Docker servers: suggest
docker pull to refresh the image.
- 3. If the user wants to update, run the
updateCommand for each server via the Bash tool.
- 4. After updating, optionally run a health check to verify the updated server works.
HEALTH CHECK — "Is my X server working?" / "Test the GitHub MCP"
- 1. Identify the server from the user's request.
- Run:
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
- 3. If
status is "healthy":
- Present the tool count and list a few tool names.
- "Your
[displayName] server is healthy with [toolCount] tools available."
- 4. If
status is "unhealthy" or "error":
- Show the error message.
- Consult
{baseDir}/references/troubleshooting.md for the specific error.
- Update server status:
python3 {baseDir}/scripts/manage_servers.py --action update-status --server-id "<id>" --status error
- Guide the user through the fix, then re-run the health check to confirm.
TROUBLESHOOT — "X server isn't working" / "Why can't I use the GitHub tools?"
- 1. Identify the server.
- Run health check:
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
- 3. Based on the error, consult
{baseDir}/references/troubleshooting.md. - Guide the user through the fix step by step.
- Re-run health check to confirm resolution.
- If resolved, update status: INLINECODE73
CONTRIBUTE — "Add my server to the marketplace" / "Contribute a server config"
- 1. Gather server details from the user:
-
ID: lowercase, hyphenated (e.g.,
my-server)
-
Display Name: human-readable name
-
Description: what the server does
-
Package: npm/pip package name or Docker image
-
Transport:
stdio or
http
-
Install Method:
npx,
npm,
uvx,
pip,
http, or
docker
-
Categories: from the Categories list below
-
Required Env Vars: any tokens/keys needed
-
Tags: search keywords
- 2. Generate and validate the entry:
CODEBLOCK20
- 3. If
valid is true: present the serverEntry JSON and the prBody template. Guide the user to submit a PR to the marketplace repository.
- 4. If
valid is false: show the validationErrors and help the user fix them, then re-run.
Auth Guidance Pattern
When a server requires environment variables:
- 1. List each required variable with its purpose (from
authGuidance.instructions). - Provide the generation URL if available: "You can create one at [URL]".
- Show the export command: INLINECODE91
- Remind about persistence: "Add this to
~/.zshrc (or ~/.bashrc) so it persists across sessions." - NEVER ask the user to paste their actual token in the chat. Guide them to set it in their shell.
- NEVER store raw token values in config — only
${VAR_NAME} references. - Offer secrets manager (if available): Before telling the user to add
export to .zshrc, check for a secrets manager:
python3 {baseDir}/scripts/secrets_helper.py --action detect
If managers are found, offer the option: "I detected
[manager name] on your system. Want to store this token there instead of in your shell profile? It's more secure."
If yes, generate the store command:
python3 {baseDir}/scripts/secrets_helper.py --action store-command --manager "<manager>" --service "<server-name>" --env-var "<VAR_NAME>"
Present the
storeCommand for the user to run, then show the
shellIntegration line to add to
~/.zshrc.
OAuth Servers
When authGuidance.authType is "oauth":
- 1. Present the setup steps from
authGuidance.oauthSetupSteps as a numbered list. - Mention the provider: "This server uses [provider] OAuth for authentication."
- Link to reference doc: "For detailed OAuth setup instructions, see the OAuth patterns guide."
- Guide through env vars: After OAuth setup, the user still needs to set the required env vars (e.g.,
GOOGLE_APPLICATION_CREDENTIALS). - Do NOT ask the user to paste credentials in the chat — guide them to set env vars in their shell.
Error Recovery
- - Install fails with missing prerequisites: Read
{baseDir}/references/troubleshooting.md for the specific error and guide the user. - Server not found in catalog: The search falls back to npm and Smithery registries automatically. If still not found, suggest checking https://github.com/modelcontextprotocol/servers for the official list or https://smithery.ai for community servers.
- Config generation fails: Show a manual config example from
{baseDir}/references/transport-patterns.md and walk through it. - Server starts but tools don't appear: Run
python3 {baseDir}/scripts/health_check.py --server-id "<id>" to diagnose. Consult {baseDir}/references/troubleshooting.md. - Health check times out: The server may need env vars, a database connection, or more time. Try increasing the timeout with
--timeout 30. - Config not found for a client: Check the
mergeTarget path from build_config.py. See {baseDir}/references/troubleshooting.md for client-specific config paths.
Categories
Available category filters for discovery: developer-tools, database, communication, productivity, cloud-infra, ai-ml, data, cms-content, finance, observability, search, auth, storage, version-control, browser.
MCP 服务器市场
帮助用户发现、安装、配置和管理 MCP 服务器。支持 OpenClaw、Claude Desktop、Claude Code 和 Cursor。
核心原则
- 1. ClawHub 优先 — 在直接安装原始服务器之前,始终检查是否有 ClawHub 插件包。这些包在 MCP 连接之上还包含技能和工作流。
- 绝不存储密钥 — 认证值始终是环境变量引用(${VAR_NAME}),绝不能是原始令牌。绝不要要求用户在聊天中粘贴他们的实际令牌。
- 先验证再行动 — 在安装前确认服务器选择和认证准备就绪。
- 完整指导 — 不仅仅是安装。要引导用户完成认证设置和验证。
意图路由
将用户的请求分类为以下意图之一,然后遵循相应的工作流。
发现 — 有哪些 MCP 服务器可用于 X?
- 1. 运行搜索:
python3 {baseDir}/scripts/search_registries.py --query <用户主题> [--category <类别>]
- 2. 如果存在 clawHubMatch,先提及该包:ClawHub 上有一个 [包名称] 插件,包含 [N] 个技能——想要这个吗?
- 以编号列表形式呈现结果,包含名称、描述和认证要求。
- 如果任何结果的 source 为 npm 或 source 为 smithery,添加一条说明:此服务器来自 [npm/Smithery],尚未经过我们团队验证。它应该可以工作,但请谨慎使用。
- 提供安装任何结果的选项。
- 如果用户问我还应该安装什么?或推荐更多服务器:
python3 {baseDir}/scripts/smart_recommend.py [--max-results 5]
呈现推荐及其理由(它们补充了哪些已安装的服务器)。提供安装任何推荐的选项。
安装 — 安装 X MCP 服务器
这是最复杂的流程。按顺序执行所有步骤。
步骤 1 — 搜索:
python3 {baseDir}/scripts/search_registries.py --query <服务器名称>
步骤 2 — ClawHub 包提供:
如果存在 clawHubMatch,提供该包:
我在 ClawHub 上找到了一个 [包显示名称] 插件,它包含 MCP 连接以及 [技能数量] 个额外技能。您想要完整的包,还是仅需要原始的 MCP 连接?
如果用户想要该包,引导他们通过 ClawHub 安装(clawhub install <包ID>)。然后记录安装并停止。
步骤 3 — 确认服务器:
如果有多个结果,以编号列表呈现并让用户选择。如果只有一个结果,确认:我将设置 [显示名称] —— 可以吗?
步骤 3.5 — 兼容性检查(如果非默认客户端):
如果用户指定了客户端或您检测到非 OpenClaw 客户端,检查兼容性:
python3 {baseDir}/scripts/check_compatibility.py --server-id --client <客户端>
如果 compatible 为 false,警告用户并建议替代方案。如果有 warnings,提及它们但继续执行。
步骤 4 — 构建配置:
python3 {baseDir}/scripts/build_config.py --server-id [--client <客户端>]
--client 标志是可选的。如果省略,脚本会自动检测客户端(OpenClaw、Claude Desktop、Claude Code 或 Cursor)。输出包括 mergeTarget(配置文件路径)和 client(检测到的客户端名称)。
步骤 5 — 认证指导(如果服务器有 requiredEnv):
遵循下面的认证指导模式。等待用户确认他们已准备好令牌后再继续。
步骤 6 — 检查先决条件并安装:
python3 {baseDir}/scripts/install_server.py --server-id
此脚本检查先决条件并返回安装命令——它不会运行该命令。
- - 如果 prerequisitesMet 为 false,显示 prerequisites.suggestion 并帮助用户先安装先决条件。
- 如果 prerequisitesMet 为 true,直接使用 Bash 工具运行 installCommand.command。例如,如果输出显示 command: npx -y @github/mcp-server --help,运行该命令以验证包是否解析成功。
- 如果 installCommand.command 为 null(HTTP 服务器),跳过——无需安装。
- 如果安装命令失败,尝试 installCommand.fallbackCommand(如果存在),或查阅 {baseDir}/references/troubleshooting.md。
步骤 7 — 写入配置:
呈现步骤 4 中的 configEntry,并解释需要将其添加到位于 mergeTarget(build_config.py 返回的路径)的配置文件中。如果配置文件存在,将新的服务器条目合并到现有的 mcpServers 对象中。如果不存在,创建它:
json
{
mcpServers: {
}
}
步骤 8 — 记录状态:
python3 {baseDir}/scripts/manage_servers.py --action record --server-id --package <包> --transport <传输方式> --install-method <安装方法> --source <来源>
根据服务器来源使用 --source curated、--source npm 或 --source smithery。
步骤 8.5 — 健康检查(可选):
python3 {baseDir}/scripts/health_check.py --server-id
如果 status 为 healthy,在摘要中包含工具数量。如果为 unhealthy 或 error,在宣布成功之前进行故障排除——查阅 {baseDir}/references/troubleshooting.md。
步骤 9 — 摘要:
告诉用户安装了哪些内容,现在有哪些工具可用(如果运行了健康检查),并提醒他们重启客户端以加载新的服务器。
批量安装 — 安装开发工具包 / 为数据处理设置服务器
- 1. 如果用户提到特定的包,解析它。如果他们描述了一个用例,匹配到最接近的包:
python3 {baseDir}/scripts/bulk_install.py --bundle <包名称>
可用的包:standard-dev、data-engineering、web-frontend、devops、productivity、ai-ml。
- 2. 如果不确定是哪个包,列出所有包:
python3 {baseDir}/scripts/bulk_install.py --bundle list
呈现选项并让用户选择。
- 3. 呈现安装计划:显示哪些服务器将被安装,哪些已经配置好。
- 4. 对于 toInstall 中的每个服务器,遵循安装工作流(步骤 3-9)。一次处理一个,确认每个服务器的认证要求。
- 5. 在所有服务器安装完成后,呈现摘要:安装了 X 个服务器,Y 个已经配置好。
检测 — 扫描 MCP 服务器 / 我已经安装了哪些 MCP 服务器?
- 1. 运行检测:
python3 {baseDir}/scripts/detect_servers.py --verbose
- 2. 如果 unconfigured 有条目:我在您的系统上发现了 [数量] 个尚未配置的 MCP 服务器包:[列出它们]。需要我设置其中任何一个吗?
- 如果 alreadyConfigured 有条目:提及它们为已激活状态。
- 如果未检测到任何内容:未找到已知的 MCP 服务器包。需要我搜索要安装的服务器吗?
- 对于用户想要配置的每个服务器,从步骤 4(构建配置)开始遵循安装工作流——该包已安装。
推荐 — 为此项目设置 MCP / 我应该使用哪些服务器?
- 1. 扫描项目:
python3 {baseDir}/scripts/recommend_servers.py [--project-dir <路径>]
如果用户指定了项目类型:python3 {baseDir}/scripts/recommend_servers.py --template <类型>
可用的模板:python-web、node-fullstack、data-science、mobile、devops、static-site。
- 2. 如果 detected 为 true:
- 呈现检测到的模板:这看起来像一个
[显示名称] 项目(匹配了 [文件/模式])。
- 先列出
推荐的服务器,然后是
可选的服务器。
- 标记任何已经配置好的服务器。
- 提供安装推荐集合的选项(路由到批量安装逻辑)。
- 3. 如果 detected 为 false:
- 列出可用的模板并让用户选择一个。
- 或者建议运行发现以进行更广泛的搜索。
配置 — 设置 X