[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JERF90V914N839CCPVMNFJ":3,"skill-same:01M6JERF90V914N839CCPVMNFJ":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6JERF90V914N839CCPVMNFJ","native-mcp",null,"MCP client: connect servers, register tools (stdio\u002FHTTP).","S3YED\u002Fappie-kit","S3YED","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F62743867?v=4","01M6JBKBRRVP6KMS0VWZ27T3R6","01M6JBKBX0KG30284PW1DBYJT1",14,"MIT","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fmisc\u002Fnative-mcp\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35],"MCP","native mcp","native","mcporter","http","connect","mcp client","Tools","integrations","hermes","hermes agent","register","client","2026-11-10 10:12:30",false,"---\nname: native-mcp\ndescription: \"MCP client: connect servers, register tools (stdio\u002FHTTP).\"\nversion: 1.0.0\nauthor: Hermes Agent\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [MCP, Tools, Integrations]\n    related_skills: [mcporter]\n---\n\n# Native MCP Client\n\nHermes Agent has a built-in MCP client that connects to MCP servers at startup, discovers their tools, and makes them available as first-class tools the agent can call directly. No bridge CLI needed -- tools from MCP servers appear alongside built-in tools like `terminal`, `read_file`, etc.\n\n## When to Use\n\nUse this whenever you want to:\n- Connect to MCP servers and use their tools from within Hermes Agent\n- Add external capabilities (filesystem access, GitHub, databases, APIs) via MCP\n- Run local stdio-based MCP servers (npx, uvx, or any command)\n- Connect to remote HTTP\u002FStreamableHTTP MCP servers\n- Have MCP tools auto-discovered and available in every conversation\n\nFor ad-hoc, one-off MCP tool calls from the terminal without configuring anything, see the `mcporter` skill instead.\n\n## Prerequisites\n\n- **mcp Python package** -- optional dependency; install with `pip install mcp`. If not installed, MCP support is silently disabled.\n- **Node.js** -- required for `npx`-based MCP servers (most community servers)\n- **uv** -- required for `uvx`-based MCP servers (Python-based servers)\n\nInstall the MCP SDK:\n\n```bash\npip install mcp\n# or, if using uv:\nuv pip install mcp\n```\n\n## Quick Start\n\nAdd MCP servers to `~\u002F.hermes\u002Fconfig.yaml` under the `mcp_servers` key:\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n```\n\nRestart Hermes Agent. On startup it will:\n1. Connect to the server\n2. Discover available tools\n3. Register them with the prefix `mcp_time_*`\n4. Inject them into all platform toolsets\n\nYou can then use the tools naturally -- just ask the agent to get the current time.\n\n## Configuration Reference\n\nEach entry under `mcp_servers` is a server name mapped to its config. There are two transport types: **stdio** (command-based) and **HTTP** (url-based).\n\n### Stdio Transport (command + args)\n\n```yaml\nmcp_servers:\n  server_name:\n    command: \"npx\"             # (required) executable to run\n    args: [\"-y\", \"pkg-name\"]   # (optional) command arguments, default: []\n    env:                       # (optional) environment variables for the subprocess\n      SOME_API_KEY: \"value\"\n    timeout: 120               # (optional) per-tool-call timeout in seconds, default: 120\n    connect_timeout: 60        # (optional) initial connection timeout in seconds, default: 60\n```\n\n### HTTP Transport (url)\n\n```yaml\nmcp_servers:\n  server_name:\n    url: \"https:\u002F\u002Fmy-server.example.com\u002Fmcp\"   # (required) server URL\n    headers:                                     # (optional) HTTP headers\n      Authorization: \"Bearer sk-...\"\n    timeout: 180               # (optional) per-tool-call timeout in seconds, default: 120\n    connect_timeout: 60        # (optional) initial connection timeout in seconds, default: 60\n```\n\n### All Config Options\n\n| Option            | Type   | Default | Description                                       |\n|-------------------|--------|---------|---------------------------------------------------|\n| `command`         | string | --      | Executable to run (stdio transport, required)     |\n| `args`            | list   | `[]`    | Arguments passed to the command                   |\n| `env`             | dict   | `{}`    | Extra environment variables for the subprocess    |\n| `url`             | string | --      | Server URL (HTTP transport, required)             |\n| `headers`         | dict   | `{}`    | HTTP headers sent with every request              |\n| `timeout`         | int    | `120`   | Per-tool-call timeout in seconds                  |\n| `connect_timeout` | int    | `60`    | Timeout for initial connection and discovery      |\n\nNote: A server config must have either `command` (stdio) or `url` (HTTP), not both.\n\n## How It Works\n\n### Startup Discovery\n\nWhen Hermes Agent starts, `discover_mcp_tools()` is called during tool initialization:\n\n1. Reads `mcp_servers` from `~\u002F.hermes\u002Fconfig.yaml`\n2. For each server, spawns a connection in a dedicated background event loop\n3. Initializes the MCP session and calls `list_tools()` to discover available tools\n4. Registers each tool in the Hermes tool registry\n\n### Tool Naming Convention\n\nMCP tools are registered with the naming pattern:\n\n```\nmcp_{server_name}_{tool_name}\n```\n\nHyphens and dots in names are replaced with underscores for LLM API compatibility.\n\nExamples:\n- Server `filesystem`, tool `read_file` → `mcp_filesystem_read_file`\n- Server `github`, tool `list-issues` → `mcp_github_list_issues`\n- Server `my-api`, tool `fetch.data` → `mcp_my_api_fetch_data`\n\n### Auto-Injection\n\nAfter discovery, MCP tools are automatically injected into all `hermes-*` platform toolsets (CLI, Discord, Telegram, etc.). This means MCP tools are available in every conversation without any additional configuration.\n\n### Connection Lifecycle\n\n- Each server runs as a long-lived asyncio Task in a background daemon thread\n- Connections persist for the lifetime of the agent process\n- If a connection drops, automatic reconnection with exponential backoff kicks in (up to 5 retries, max 60s backoff)\n- On agent shutdown, all connections are gracefully closed\n\n### Idempotency\n\n`discover_mcp_tools()` is idempotent -- calling it multiple times only connects to servers that aren't already connected. Failed servers are retried on subsequent calls.\n\n## Transport Types\n\n### Stdio Transport\n\nThe most common transport. Hermes launches the MCP server as a subprocess and communicates over stdin\u002Fstdout.\n\n```yaml\nmcp_servers:\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhome\u002Fuser\u002Fprojects\"]\n```\n\nThe subprocess inherits a **filtered** environment (see Security section below) plus any variables you specify in `env`.\n\n### HTTP \u002F StreamableHTTP Transport\n\nFor remote or shared MCP servers. Requires the `mcp` package to include HTTP client support (`mcp.client.streamable_http`).\n\n```yaml\nmcp_servers:\n  remote_api:\n    url: \"https:\u002F\u002Fmcp.example.com\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-...\"\n```\n\nIf HTTP support is not available in your installed `mcp` version, the server will fail with an ImportError and other servers will continue normally.\n\n## Security\n\n### Environment Variable Filtering\n\nFor stdio servers, Hermes does NOT pass your full shell environment to MCP subprocesses. Only safe baseline variables are inherited:\n\n- `PATH`, `HOME`, `USER`, `LANG`, `LC_ALL`, `TERM`, `SHELL`, `TMPDIR`\n- Any `XDG_*` variables\n\nAll other environment variables (API keys, tokens, secrets) are excluded unless you explicitly add them via the `env` config key. This prevents accidental credential leakage to untrusted MCP servers.\n\n```yaml\nmcp_servers:\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      # Only this token is passed to the subprocess\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_...\"\n```\n\n### Credential Stripping in Error Messages\n\nIf an MCP tool call fails, any credential-like patterns in the error message are automatically redacted before being shown to the LLM. This covers:\n\n- GitHub PATs (`ghp_...`)\n- OpenAI-style keys (`sk-...`)\n- Bearer tokens\n- Generic `token=`, `key=`, `API_KEY=`, `password=`, `secret=` patterns\n\n## Troubleshooting\n\n### \"MCP SDK not available -- skipping MCP tool discovery\"\n\nThe `mcp` Python package is not installed. Install it:\n\n```bash\npip install mcp\n```\n\n### \"No MCP servers configured\"\n\nNo `mcp_servers` key in `~\u002F.hermes\u002Fconfig.yaml`, or it's empty. Add at least one server.\n\n### \"Failed to connect to MCP server 'X'\"\n\nCommon causes:\n- **Command not found**: The `command` binary isn't on PATH. Ensure `npx`, `uvx`, or the relevant command is installed.\n- **Package not found**: For npx servers, the npm package may not exist or may need `-y` in args to auto-install.\n- **Timeout**: The server took too long to start. Increase `connect_timeout`.\n- **Port conflict**: For HTTP servers, the URL may be unreachable.\n\n### \"MCP server 'X' requires HTTP transport but mcp.client.streamable_http is not available\"\n\nYour `mcp` package version doesn't include HTTP client support. Upgrade:\n\n```bash\npip install --upgrade mcp\n```\n\n### Tools not appearing\n\n- Check that the server is listed under `mcp_servers` (not `mcp` or `servers`)\n- Ensure the YAML indentation is correct\n- Look at Hermes Agent startup logs for connection messages\n- Tool names are prefixed with `mcp_{server}_{tool}` -- look for that pattern\n\n### Connection keeps dropping\n\nThe client retries up to 5 times with exponential backoff (1s, 2s, 4s, 8s, 16s, capped at 60s). If the server is fundamentally unreachable, it gives up after 5 attempts. Check the server process and network connectivity.\n\n## Examples\n\n### Time Server (uvx)\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n```\n\nRegisters tools like `mcp_time_get_current_time`.\n\n### Filesystem Server (npx)\n\n```yaml\nmcp_servers:\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhome\u002Fuser\u002Fdocuments\"]\n    timeout: 30\n```\n\nRegisters tools like `mcp_filesystem_read_file`, `mcp_filesystem_write_file`, `mcp_filesystem_list_directory`.\n\n### GitHub Server with Authentication\n\n```yaml\nmcp_servers:\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\n    timeout: 60\n```\n\nRegisters tools like `mcp_github_list_issues`, `mcp_github_create_pull_request`, etc.\n\n### Remote HTTP Server\n\n```yaml\nmcp_servers:\n  company_api:\n    url: \"https:\u002F\u002Fmcp.mycompany.com\u002Fv1\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-xxxxxxxxxxxxxxxxxxxx\"\n      X-Team-Id: \"engineering\"\n    timeout: 180\n    connect_timeout: 30\n```\n\n### Multiple Servers\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Ftmp\"]\n\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\n\n  company_api:\n    url: \"https:\u002F\u002Fmcp.internal.company.com\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-xxxxxxxxxxxxxxxxxxxx\"\n    timeout: 300\n```\n\nAll tools from all servers are registered and available simultaneously. Each server's tools are prefixed with its name to avoid collisions.\n\n## Sampling (Server-Initiated LLM Requests)\n\nHermes supports MCP's `sampling\u002FcreateMessage` capability — MCP servers can request LLM completions through the agent during tool execution. This enables agent-in-the-loop workflows (data analysis, content generation, decision-making).\n\nSampling is **enabled by default**. Configure per server:\n\n```yaml\nmcp_servers:\n  my_server:\n    command: \"npx\"\n    args: [\"-y\", \"my-mcp-server\"]\n    sampling:\n      enabled: true           # default: true\n      model: \"gemini-3-flash\" # model override (optional)\n      max_tokens_cap: 4096    # max tokens per request\n      timeout: 30             # LLM call timeout (seconds)\n      max_rpm: 10             # max requests per minute\n      allowed_models: []      # model whitelist (empty = all)\n      max_tool_rounds: 5      # tool loop limit (0 = disable)\n      log_level: \"info\"       # audit verbosity\n```\n\nServers can also include `tools` in sampling requests for multi-turn tool-augmented workflows. The `max_tool_rounds` config prevents infinite tool loops. Per-server audit metrics (requests, errors, tokens, tool use count) are tracked via `get_mcp_status()`.\n\nDisable sampling for untrusted servers with `sampling: { enabled: false }`.\n\n## Notes\n\n- MCP tools are called synchronously from the agent's perspective but run asynchronously on a dedicated background event loop\n- Tool results are returned as JSON with either `{\"result\": \"...\"}` or `{\"error\": \"...\"}`\n- The native MCP client is independent of `mcporter` -- you can use both simultaneously\n- Server connections are persistent and shared across all conversations in the same agent process\n- Adding or removing servers requires restarting the agent (no hot-reload currently)\n","# Native MCP Client\n\nHermes Agent has a built-in MCP client that connects to MCP servers at startup, discovers their tools, and makes them available as first-class tools the agent can call directly. No bridge CLI needed -- tools from MCP servers appear alongside built-in tools like `terminal`, `read_file`, etc.\n\n## When to Use\n\nUse this whenever you want to:\n- Connect to MCP servers and use their tools from within Hermes Agent\n- Add external capabilities (filesystem access, GitHub, databases, APIs) via MCP\n- Run local stdio-based MCP servers (npx, uvx, or any command)\n- Connect to remote HTTP\u002FStreamableHTTP MCP servers\n- Have MCP tools auto-discovered and available in every conversation\n\nFor ad-hoc, one-off MCP tool calls from the terminal without configuring anything, see the `mcporter` skill instead.\n\n## Prerequisites\n\n- **mcp Python package** -- optional dependency; install with `pip install mcp`. If not installed, MCP support is silently disabled.\n- **Node.js** -- required for `npx`-based MCP servers (most community servers)\n- **uv** -- required for `uvx`-based MCP servers (Python-based servers)\n\nInstall the MCP SDK:\n\n```bash\npip install mcp\n# or, if using uv:\nuv pip install mcp\n```\n\n## Quick Start\n\nAdd MCP servers to `~\u002F.hermes\u002Fconfig.yaml` under the `mcp_servers` key:\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n```\n\nRestart Hermes Agent. On startup it will:\n1. Connect to the server\n2. Discover available tools\n3. Register them with the prefix `mcp_time_*`\n4. Inject them into all platform toolsets\n\nYou can then use the tools naturally -- just ask the agent to get the current time.\n\n## Configuration Reference\n\nEach entry under `mcp_servers` is a server name mapped to its config. There are two transport types: **stdio** (command-based) and **HTTP** (url-based).\n\n### Stdio Transport (command + args)\n\n```yaml\nmcp_servers:\n  server_name:\n    command: \"npx\"             # (required) executable to run\n    args: [\"-y\", \"pkg-name\"]   # (optional) command arguments, default: []\n    env:                       # (optional) environment variables for the subprocess\n      SOME_API_KEY: \"value\"\n    timeout: 120               # (optional) per-tool-call timeout in seconds, default: 120\n    connect_timeout: 60        # (optional) initial connection timeout in seconds, default: 60\n```\n\n### HTTP Transport (url)\n\n```yaml\nmcp_servers:\n  server_name:\n    url: \"https:\u002F\u002Fmy-server.example.com\u002Fmcp\"   # (required) server URL\n    headers:                                     # (optional) HTTP headers\n      Authorization: \"Bearer sk-...\"\n    timeout: 180               # (optional) per-tool-call timeout in seconds, default: 120\n    connect_timeout: 60        # (optional) initial connection timeout in seconds, default: 60\n```\n\n### All Config Options\n\n| Option            | Type   | Default | Description                                       |\n|-------------------|--------|---------|---------------------------------------------------|\n| `command`         | string | --      | Executable to run (stdio transport, required)     |\n| `args`            | list   | `[]`    | Arguments passed to the command                   |\n| `env`             | dict   | `{}`    | Extra environment variables for the subprocess    |\n| `url`             | string | --      | Server URL (HTTP transport, required)             |\n| `headers`         | dict   | `{}`    | HTTP headers sent with every request              |\n| `timeout`         | int    | `120`   | Per-tool-call timeout in seconds                  |\n| `connect_timeout` | int    | `60`    | Timeout for initial connection and discovery      |\n\nNote: A server config must have either `command` (stdio) or `url` (HTTP), not both.\n\n## How It Works\n\n### Startup Discovery\n\nWhen Hermes Agent starts, `discover_mcp_tools()` is called during tool initialization:\n\n1. Reads `mcp_servers` from `~\u002F.hermes\u002Fconfig.yaml`\n2. For each server, spawns a connection in a dedicated background event loop\n3. Initializes the MCP session and calls `list_tools()` to discover available tools\n4. Registers each tool in the Hermes tool registry\n\n### Tool Naming Convention\n\nMCP tools are registered with the naming pattern:\n\n```\nmcp_{server_name}_{tool_name}\n```\n\nHyphens and dots in names are replaced with underscores for LLM API compatibility.\n\nExamples:\n- Server `filesystem`, tool `read_file` → `mcp_filesystem_read_file`\n- Server `github`, tool `list-issues` → `mcp_github_list_issues`\n- Server `my-api`, tool `fetch.data` → `mcp_my_api_fetch_data`\n\n### Auto-Injection\n\nAfter discovery, MCP tools are automatically injected into all `hermes-*` platform toolsets (CLI, Discord, Telegram, etc.). This means MCP tools are available in every conversation without any additional configuration.\n\n### Connection Lifecycle\n\n- Each server runs as a long-lived asyncio Task in a background daemon thread\n- Connections persist for the lifetime of the agent process\n- If a connection drops, automatic reconnection with exponential backoff kicks in (up to 5 retries, max 60s backoff)\n- On agent shutdown, all connections are gracefully closed\n\n### Idempotency\n\n`discover_mcp_tools()` is idempotent -- calling it multiple times only connects to servers that aren't already connected. Failed servers are retried on subsequent calls.\n\n## Transport Types\n\n### Stdio Transport\n\nThe most common transport. Hermes launches the MCP server as a subprocess and communicates over stdin\u002Fstdout.\n\n```yaml\nmcp_servers:\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhome\u002Fuser\u002Fprojects\"]\n```\n\nThe subprocess inherits a **filtered** environment (see Security section below) plus any variables you specify in `env`.\n\n### HTTP \u002F StreamableHTTP Transport\n\nFor remote or shared MCP servers. Requires the `mcp` package to include HTTP client support (`mcp.client.streamable_http`).\n\n```yaml\nmcp_servers:\n  remote_api:\n    url: \"https:\u002F\u002Fmcp.example.com\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-...\"\n```\n\nIf HTTP support is not available in your installed `mcp` version, the server will fail with an ImportError and other servers will continue normally.\n\n## Security\n\n### Environment Variable Filtering\n\nFor stdio servers, Hermes does NOT pass your full shell environment to MCP subprocesses. Only safe baseline variables are inherited:\n\n- `PATH`, `HOME`, `USER`, `LANG`, `LC_ALL`, `TERM`, `SHELL`, `TMPDIR`\n- Any `XDG_*` variables\n\nAll other environment variables (API keys, tokens, secrets) are excluded unless you explicitly add them via the `env` config key. This prevents accidental credential leakage to untrusted MCP servers.\n\n```yaml\nmcp_servers:\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      # Only this token is passed to the subprocess\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_...\"\n```\n\n### Credential Stripping in Error Messages\n\nIf an MCP tool call fails, any credential-like patterns in the error message are automatically redacted before being shown to the LLM. This covers:\n\n- GitHub PATs (`ghp_...`)\n- OpenAI-style keys (`sk-...`)\n- Bearer tokens\n- Generic `token=`, `key=`, `API_KEY=`, `password=`, `secret=` patterns\n\n## Troubleshooting\n\n### \"MCP SDK not available -- skipping MCP tool discovery\"\n\nThe `mcp` Python package is not installed. Install it:\n\n```bash\npip install mcp\n```\n\n### \"No MCP servers configured\"\n\nNo `mcp_servers` key in `~\u002F.hermes\u002Fconfig.yaml`, or it's empty. Add at least one server.\n\n### \"Failed to connect to MCP server 'X'\"\n\nCommon causes:\n- **Command not found**: The `command` binary isn't on PATH. Ensure `npx`, `uvx`, or the relevant command is installed.\n- **Package not found**: For npx servers, the npm package may not exist or may need `-y` in args to auto-install.\n- **Timeout**: The server took too long to start. Increase `connect_timeout`.\n- **Port conflict**: For HTTP servers, the URL may be unreachable.\n\n### \"MCP server 'X' requires HTTP transport but mcp.client.streamable_http is not available\"\n\nYour `mcp` package version doesn't include HTTP client support. Upgrade:\n\n```bash\npip install --upgrade mcp\n```\n\n### Tools not appearing\n\n- Check that the server is listed under `mcp_servers` (not `mcp` or `servers`)\n- Ensure the YAML indentation is correct\n- Look at Hermes Agent startup logs for connection messages\n- Tool names are prefixed with `mcp_{server}_{tool}` -- look for that pattern\n\n### Connection keeps dropping\n\nThe client retries up to 5 times with exponential backoff (1s, 2s, 4s, 8s, 16s, capped at 60s). If the server is fundamentally unreachable, it gives up after 5 attempts. Check the server process and network connectivity.\n\n## Examples\n\n### Time Server (uvx)\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n```\n\nRegisters tools like `mcp_time_get_current_time`.\n\n### Filesystem Server (npx)\n\n```yaml\nmcp_servers:\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhome\u002Fuser\u002Fdocuments\"]\n    timeout: 30\n```\n\nRegisters tools like `mcp_filesystem_read_file`, `mcp_filesystem_write_file`, `mcp_filesystem_list_directory`.\n\n### GitHub Server with Authentication\n\n```yaml\nmcp_servers:\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\n    timeout: 60\n```\n\nRegisters tools like `mcp_github_list_issues`, `mcp_github_create_pull_request`, etc.\n\n### Remote HTTP Server\n\n```yaml\nmcp_servers:\n  company_api:\n    url: \"https:\u002F\u002Fmcp.mycompany.com\u002Fv1\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-xxxxxxxxxxxxxxxxxxxx\"\n      X-Team-Id: \"engineering\"\n    timeout: 180\n    connect_timeout: 30\n```\n\n### Multiple Servers\n\n```yaml\nmcp_servers:\n  time:\n    command: \"uvx\"\n    args: [\"mcp-server-time\"]\n\n  filesystem:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Ftmp\"]\n\n  github:\n    command: \"npx\"\n    args: [\"-y\", \"@modelcontextprotocol\u002Fserver-github\"]\n    env:\n      GITHUB_PERSONAL_ACCESS_TOKEN: \"ghp_xxxxxxxxxxxxxxxxxxxx\"\n\n  company_api:\n    url: \"https:\u002F\u002Fmcp.internal.company.com\u002Fmcp\"\n    headers:\n      Authorization: \"Bearer sk-xxxxxxxxxxxxxxxxxxxx\"\n    timeout: 300\n```\n\nAll tools from all servers are registered and available simultaneously. Each server's tools are prefixed with its name to avoid collisions.\n\n## Sampling (Server-Initiated LLM Requests)\n\nHermes supports MCP's `sampling\u002FcreateMessage` capability — MCP servers can request LLM completions through the agent during tool execution. This enables agent-in-the-loop workflows (data analysis, content generation, decision-making).\n\nSampling is **enabled by default**. Configure per server:\n\n```yaml\nmcp_servers:\n  my_server:\n    command: \"npx\"\n    args: [\"-y\", \"my-mcp-server\"]\n    sampling:\n      enabled: true           # default: true\n      model: \"gemini-3-flash\" # model override (optional)\n      max_tokens_cap: 4096    # max tokens per request\n      timeout: 30             # LLM call timeout (seconds)\n      max_rpm: 10             # max requests per minute\n      allowed_models: []      # model whitelist (empty = all)\n      max_tool_rounds: 5      # tool loop limit (0 = disable)\n      log_level: \"info\"       # audit verbosity\n```\n\nServers can also include `tools` in sampling requests for multi-turn tool-augmented workflows. The `max_tool_rounds` config prevents infinite tool loops. Per-server audit metrics (requests, errors, tokens, tool use count) are tracked via `get_mcp_status()`.\n\nDisable sampling for untrusted servers with `sampling: { enabled: false }`.\n\n## Notes\n\n- MCP tools are called synchronously from the agent's perspective but run asynchronously on a dedicated background event loop\n- Tool results are returned as JSON with either `{\"result\": \"...\"}` or `{\"error\": \"...\"}`\n- The native MCP client is independent of `mcporter` -- you can use both simultaneously\n- Server connections are persistent and shared across all conversations in the same agent process\n- Adding or removing servers requires restarting the agent (no hot-reload currently)\n",{"name":5,"author":41,"license":14,"version":42,"metadata":43,"description":7},"Hermes Agent","1.0.0",{"hermes":44},{"tags":45,"related_skills":47},[23,30,46],"Integrations",[26],"master","8ec37df6d71fb664ea19d32c079e7d3ff931a8e0","skills\u002Fmisc\u002Fnative-mcp",3,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit","https:\u002F\u002Fweblyfe.ai","https:\u002F\u002Fgithub.com\u002FS3YED","2026-08-27 01:54:02",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add S3YED\u002Fappie-kit --skill native-mcp",{"tool":62,"command":63},"bunx","bunx skills add S3YED\u002Fappie-kit --skill native-mcp",{"tool":65,"command":66},"pnpm","pnpm dlx skills add S3YED\u002Fappie-kit --skill native-mcp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fmisc\u002Fnative-mcp\u002FSKILL.md",true,[],[71,100,135,160,191,216],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":84,"publishedAt":36},"01M6JFD4M6N4DSGC7TXEJ5R3J2","ai-music","AI music generation and audio tools: HeartMuLa lyrics-to-music generation, songwriting craft (+ Suno prompts), and audio spectrogram\u002Ffeature visualization.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fwethlete\u002Fai-music\u002FSKILL.md",[77,80,83],{"categoryNo":78,"categoryName":79,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":81,"categoryName":82,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[85,86,87,88,30,89,32,33,90,91,92,93,94,95,96,97,98,99],"music","ai music","humanizer","visualization","Audio","songwriting","suno","lyrics","prompts","heartmula","craft","generation","feature","ai music generation","music generation",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":114,"publishedAt":36},"01M6JFCZE4XNFQFMNZDHKHT5V5","agentic-webdesign-design-system-ingestion","Use v0 Design Systems 2.0, Bolt Design System Agents, or Lovable to generate production UI from a client's real design system components — not generic Tailwind. Use when building a client website where brand consistency matters.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-design-system-ingestion\u002FSKILL.md",[106,109],{"categoryNo":107,"categoryName":108,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134],"design","agentic","design system","system","ingestion","webdesign","agentic webdesign design system ingestion","components","generate","design systems","website","ui","Tailwind","bolt","lovable","v0","design-system","wed","design system components","appie",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":143,"publishedAt":36},"01M6JFCVPX3913CFAS6QQJ33ZB","agentic-webdesign-agent-elements","Use 21st.dev Agent Elements — 25 shadcn\u002Fui components purpose-built for AI agent UIs. Tool cards (Bash, Edit, Search, Plan, Subagent, MCP), chat, input, streaming. Open source, shadcn-registry install, no runtime lock-in.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-agent-elements\u002FSKILL.md",[141,142],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},[116,144,120,145,23,146,122,147,148,149,150,151,152,153,154,155,156,157,158,159],"elements","agentic webdesign agent elements","ai agent","registry","search","streaming","open source","open","Bash","plan","subagent","edit","install","input","lock","source",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":170,"publishedAt":36},"01M6JFCQC7H65M9QJ6TRE71BS1","vercel-deployment","Deploy static sites and frontends to Vercel — handles both CLI and REST API paths, including the CLI token sanitization workaround.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fvercel-deployment\u002FSKILL.md",[166,169],{"categoryNo":167,"categoryName":168,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190],"deployment","vercel deployment","vercel","macos","cli","linux","windows","deploy","vercel deploy","REST","api","site","deploy to vercel","token","rest api","host","sites","paths","sanitization","static site",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":36},"01M6JFCM4SMTXBM5A01BK2YQG1","software-quality-workflows","Umbrella workflow for TDD, debugging, code simplification, spikes, pre-commit review, and debugger-assisted investigation.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fsoftware-quality-workflows\u002FSKILL.md",[197],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215],"workflows","quality","software","software quality workflows","review","tdd","workflow","commit","debugging","code","debugger","pre-commit","investigation","code simplification","user","simplification","for",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":229,"publishedAt":36},"01M6JFCGD0M6CEATY01W7YN6DB","react-component-refactoring","Safely refactor large React components into smaller, maintainable pieces using proven patterns","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Freact-component-refactoring\u002FSKILL.md",[222,225,228],{"categoryNo":223,"categoryName":224,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":226,"categoryName":227,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[230,231,232,233,234,235,236,237,174,238,239,122,240,177,241,208,242,243,244,245],"react","component","refactoring","component refactoring","react component","react component refactoring","frontend","writing","safe","typescript","react components","modular","refactor","simplify","patterns","test-driven-development"]