Install, configure, and manage MCP servers. Search 50+ verified servers plus npm and Smithery registries. Auto-generate configs for OpenClaw, Claude Desktop,...
---
name: mcp-marketplace
description: >
Install, configure, and manage MCP servers. Search 50+ verified servers plus
npm and Smithery registries. Auto-generate configs for OpenClaw, Claude Desktop,
Claude Code, and Cursor. Health check servers, troubleshoot issues. Use for:
"install GitHub MCP", "add Postgres MCP server", "find database servers",
"show my MCP servers", "remove Slack MCP", "set up Notion MCP", "what MCP
servers are available", "is my server working", "test the GitHub MCP".
Covers: MCP install, setup, configure, discover, search, remove, uninstall,
list, status, update, add server, connect server, health check, troubleshoot.
---
# 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.
2. **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.
3. **Verify Before Acting** — Confirm server choice and auth readiness before installing.
4. **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?"
3. Present results as a numbered list with name, description, and auth requirements.
4. 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."
5. Offer to install any result.
6. 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:**
```
python3 {baseDir}/scripts/search_registries.py --query "<server name>"
```
**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:
```json
{
"mcpServers": {
<configEntry content here>
}
}
```
**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?"
3. If `alreadyConfigured` has entries: mention them as already active.
4. If nothing detected: "No known MCP server packages found. Want me to search for servers to install?"
5. 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.
2. 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.
4. 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.
3. 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."
4. 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`."
2. 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: `python3 {baseDir}/scripts/version_check.py --server-id "<id>"`
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.
2. 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.
2. Run health check:
```
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
```
3. Based on the error, consult `{baseDir}/references/troubleshooting.md`.
4. Guide the user through the fix step by step.
5. Re-run health check to confirm resolution.
6. If resolved, update status: `python3 {baseDir}/scripts/manage_servers.py --action update-status --server-id "<id>" --status active`
### 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:
```
python3 {baseDir}/scripts/contribute_server.py --id "<id>" --display-name "<name>" --description "<desc>" --package "<pkg>" --transport "<transport>" --install-method "<method>" --categories "<cat1,cat2>" --tags "<tag1,tag2>" --required-env "<VAR1,VAR2>"
```
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`).
2. **Provide the generation URL** if available: "You can create one at [URL]".
3. **Show the export command**: `export VAR_NAME=<your-value-here>`
4. **Remind about persistence**: "Add this to `~/.zshrc` (or `~/.bashrc`) so it persists across sessions."
5. **NEVER ask the user to paste their actual token** in the chat. Guide them to set it in their shell.
6. **NEVER store raw token values** in config — only `${VAR_NAME}` references.
7. **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.
2. **Mention the provider**: "This server uses **[provider]** OAuth for authentication."
3. **Link to reference doc**: "For detailed OAuth setup instructions, see the [OAuth patterns guide]({baseDir}/references/oauth-patterns.md)."
4. **Guide through env vars**: After OAuth setup, the user still needs to set the required env vars (e.g., `GOOGLE_APPLICATION_CREDENTIALS`).
5. **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`.
don't have the plugin yet? install it then click "run inline in claude" again.
install, configure, discover, and manage MCP servers across openclaw, claude desktop, claude code, and cursor. search 50+ verified servers, npm, and smithery registries. handle auth setup, health checks, and troubleshooting.
use this skill when users need to discover MCP servers (e.g., "what database servers exist?"), install them ("add postgres MCP"), configure auth, check server health ("is github MCP working?"), troubleshoot failures, bulk install bundles for a use case, detect already-installed servers, recommend servers for a project, update servers, or contribute new servers to the marketplace. always prioritize clawhub plugin bundles over raw server installs because bundles include skills and workflows on top of the MCP connection. never store raw secrets in config, always use env var references.
{baseDir} points to the marketplace scripts and references folder. set via env var MCP_MARKETPLACE_BASE or default to ~/.mcp-marketplace.--client "<name>" to override.npx, npm, pip, or uvx transport.~/.openclaw/.mcp.json~/Library/Application Support/Claude/claude_desktop_config.json (macos) or %APPDATA%\Claude\claude_desktop_config.json (windows)~/.claude-code/.mcp.json~/.cursor/.mcp.jsonstep 1.1: run registry search.
python3 {baseDir}/scripts/search_registries.py --query "<user-topic>" [--category "<category>"]
inputs: user's topic string, optional category filter.
output: json array with results, each containing id, displayName, description, source (curated/npm/smithery), authRequired, clawHubMatch (if bundle exists).
step 1.2: present clawhub bundle first (if present).
if clawHubMatch exists, say: "there's a [bundle name] plugin on clawhub with [skillCount] skills. want that instead?" otherwise skip to 1.3.
inputs: clawHubMatch object from results.
output: user acceptance or decline.
step 1.3: present numbered list of servers. for each result: show name, description, auth requirements. add note for npm/smithery sources: "this server is from [npm/smithery] and hasn't been verified by our team. it should work but proceed with caution." inputs: search results array. output: formatted list displayed to user.
step 1.4: offer installation or recommendations. ask if user wants to install any result. if user asks "what else?", run:
python3 {baseDir}/scripts/smart_recommend.py [--max-results 5]
inputs: optional max-results limit. output: list of complementary servers with reasons. offer to install.
step 2.1: search for server.
python3 {baseDir}/scripts/search_registries.py --query "<server-name>"
inputs: server name from user. output: search results (may include 1 or multiple matches).
step 2.2: offer clawhub bundle (if available).
if clawHubMatch present: "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?"
inputs: user choice (bundle or raw mcp).
output: if bundle chosen, guide to clawhub install <bundleId> and stop. if raw mcp, continue to step 2.3.
step 2.3: confirm server selection. if multiple results: present numbered list and ask user to pick. if single result: "i'll set up [displayName] , sound good?" inputs: user selection if multiple, or implicit confirmation. output: selected server id.
step 2.4: compatibility check (if non-default client). if user specified a client or non-openclaw detected:
python3 {baseDir}/scripts/check_compatibility.py --server-id "<id>" --client "<client>"
inputs: server id, client name.
output: compatible (true/false), warnings (array, may be empty).
if compatible false: warn user and suggest alternatives. if warnings exist: mention them but proceed.
step 2.5: build config.
python3 {baseDir}/scripts/build_config.py --server-id "<id>" [--client "<client>"]
inputs: server id, optional client name (auto-detected if omitted).
output: json with configEntry (config snippet), mergeTarget (file path), client (detected name).
step 2.6: auth guidance (if server requires env vars).
check if server has requiredEnv array in the config. for each var, follow the Auth Guidance Pattern below. wait for user to confirm token is ready before proceeding.
inputs: server metadata with requiredEnv, authGuidance object.
output: user confirmation that env vars are set.
step 2.7: check prerequisites and install.
python3 {baseDir}/scripts/install_server.py --server-id "<id>"
inputs: server id.
output: json with prerequisitesMet (true/false), prerequisites.suggestion (if false), installCommand.command (string or null), installCommand.fallbackCommand (optional).
if prerequisites not met: show suggestion and help user install prereq first, then re-run this step.
if prerequisites met and installCommand.command not null: run the command via bash. if it fails: try fallbackCommand if present, else consult {baseDir}/references/troubleshooting.md.
if installCommand.command is null (http servers): no install needed, proceed to step 2.8.
step 2.8: write config.
present the configEntry from step 2.5. explain it must be added to the config file at mergeTarget path. if config file exists: merge new server entry into the existing mcpServers object. if it doesn't exist: create it:
{
"mcpServers": {
<configEntry content here>
}
}
inputs: configEntry, mergeTarget path, user's ability to edit file. output: config file written (user may do this manually or via tool).
step 2.9: record server state.
python3 {baseDir}/scripts/manage_servers.py --action record --server-id "<id>" --package "<package>" --transport "<transport>" --install-method "<method>" --source "<source>"
inputs: server metadata (package, transport, method), source (curated/npm/smithery). output: server recorded in local state db.
step 2.10 (optional): health check.
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
inputs: server id.
output: json with status (healthy/unhealthy/error), toolCount, tool names, error details.
if healthy: include tool count in summary. if unhealthy/error: troubleshoot before declaring success , consult {baseDir}/references/troubleshooting.md, guide user through fix, re-run health check.
step 2.11: summary. tell user what was installed, how many tools available (if health check run), and remind them to restart their client. inputs: install summary data. output: confirmation message to user.
step 3.1: resolve bundle name. if user specifies a bundle: use it. if they describe a use case, match to closest bundle:
python3 {baseDir}/scripts/bulk_install.py --bundle "<bundle-name>"
available bundles: standard-dev, data-engineering, web-frontend, devops, productivity, ai-ml.
inputs: bundle name or use case description.
output: bundle definition with toInstall (server ids), toSkip (already configured ids).
if unsure: run python3 {baseDir}/scripts/bulk_install.py --bundle __list__ to list all bundles. present options and let user choose.
step 3.2: present install plan. show which servers will be installed and which are already configured. inputs: bundle definition. output: formatted plan displayed to user.
step 3.3: install each server.
for each server in toInstall, follow the INSTALL workflow (steps 2.1-2.11). process one at a time, confirming auth for each.
inputs: server ids from bundle.
output: each server installed and recorded.
step 3.4: summary. "installed X servers, Y were already configured." inputs: install counts. output: completion message.
step 4.1: run detection.
python3 {baseDir}/scripts/detect_servers.py --verbose
inputs: none (scans local system).
output: json with unconfigured (packages found but not in config), alreadyConfigured (servers in config).
step 4.2: report findings. if unconfigured entries exist: "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 entries exist: mention them as active. if nothing detected: "no known MCP server packages found. want me to search for servers to install?" inputs: detection results. output: findings displayed to user.
step 4.3: configure unconfigured servers. for each server user wants to configure, follow INSTALL workflow starting at step 2.5 (build config). the package is already installed, so skip prereq checks. inputs: server ids from unconfigured list. output: configs written and recorded.
step 5.1: scan project.
python3 {baseDir}/scripts/recommend_servers.py [--project-dir "<path>"]
if user specifies project type: --template "<type>" (available: python-web, node-fullstack, data-science, mobile, devops, static-site).
inputs: optional project directory or template type.
output: json with detected (true/false), template (matched type), recommended (array of server objs), optional (array), already-configured flags.
step 5.2a: if detected (true). present detected template: "this looks like a [displayName] project (matched [files/patterns])." list recommended servers first, then optional. mark any already configured. offer to install recommended set (routes to BULK INSTALL, step 3.1). inputs: detection results. output: formatted recommendations displayed to user.
step 5.2b: if detected (false). list available templates and ask user to pick one, or suggest running DISCOVER for broader search. inputs: available templates list. output: user choice or redirection.
step 6.1: identify server. from user's request, determine which server's config to update. inputs: user's request string. output: server id.
step 6.2: build custom config.
python3 {baseDir}/scripts/build_config.py --server-id "<id>" --custom-env '{"KEY": "${KEY}"}'
if user provides custom env or args, pass them via --custom-env. inputs: server id, custom env vars (optional). output: updated configEntry and mergeTarget.
step 6.3: auth guidance. follow Auth Guidance Pattern for any new env vars. inputs: server's authGuidance metadata. output: user confirms env vars are set.
step 6.4: update config file. merge or write the updated configEntry to the config file at mergeTarget path. inputs: configEntry, mergeTarget. output: config file updated.
step 7.1: list all servers.
python3 {baseDir}/scripts/manage_servers.py --action list
inputs: none. output: json array of installed servers with name, package, transport, install method, installed date, configPresent flag.
step 7.2: format and present.
display as table: server name | package | transport | method | installed | 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."
inputs: server list.
output: formatted table displayed to user.
step 7.3 (optional): check specific server. if user asks about a specific server:
python3 {baseDir}/scripts/manage_servers.py --action status --server-id "<id>"
inputs: server id. output: detailed status for that server.
step 7.4: fallback if empty. if no servers installed, suggest running a discovery search. inputs: server list (empty). output: prompt to user.
step 8.1: confirm removal.
"remove [displayName]? this will remove the state record. you should also remove its entry from .mcp.json."
inputs: user confirmation (yes/no).
output: user says yes or cancels.
step 8.2: remove state.
python3 {baseDir}/scripts/manage_servers.py --action remove --server-id "<id>"
inputs: server id. output: server removed from state db.
step 8.3: reminder.
remind user to remove the config entry from .mcp.json and restart their client.
inputs: none.
output: instructions displayed to user.
step 9.1: check versions.
python3 {baseDir}/scripts/version_check.py [--server-id "<id>"]
if specific server: use --server-id. otherwise check all.
inputs: optional server id.
output: json array with updateAvailable (true/false), current version, latest version, updateCommand.
step 9.2: present results.
servers with updateAvailable: true: show current vs latest and the updateCommand. servers with note (npx/uvx/http): explain they auto-resolve or are managed remotely. docker servers: suggest docker pull to refresh image.
inputs: version check results.
output: formatted update status displayed to user.
step 9.3: run updates. if user wants to update, run the updateCommand for each server via bash. inputs: updateCommand strings. output: updates applied.
step 9.4 (optional): verify. run health check on updated servers to confirm they work. inputs: server ids. output: health status displayed.
step 10.1: identify server. from user's request, determine which server to check. inputs: user's request string. output: server id.
step 10.2: run health check.
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
inputs: server id.
output: json with status (healthy/unhealthy/error), toolCount, tool names, error details.
step 10.3a: if healthy. present tool count and list a few tool names. "your [displayName] server is healthy with [toolCount] tools available." inputs: health check result. output: success message displayed to user.
step 10.3b: if unhealthy or error.
show error message. consult {baseDir}/references/troubleshooting.md for the specific error. update status: python3 {baseDir}/scripts/manage_servers.py --action update-status --server-id "<id>" --status error. guide user through fix step by step, then re-run health check to confirm.
inputs: error details.
output: troubleshooting guidance, then verification.
step 11.1: identify server. from user's request, determine which server is broken. inputs: user's request string. output: server id.
step 11.2: run health check.
python3 {baseDir}/scripts/health_check.py --server-id "<id>"
inputs: server id. output