[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74PAG6P8FJSDXSNTC00AG9X":3,"skill-same:01M74PAG6P8FJSDXSNTC00AG9X":53},{"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":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":13,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M74PAG6P8FJSDXSNTC00AG9X","native-mcp",null,"MCP client: connect servers, register tools (stdio\u002FHTTP).","LyrikNilpferd71\u002FHermes-Backup","LyrikNilpferd71","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F187173780?v=4","01M727S8GPB77P0S9ECRRMZT58","01M727S8HF63B0MD53F496MK1V",0,"MIT","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-08-30T14-00-42+0200\u002Fskills\u002Fmcp\u002Fnative-mcp\u002FSKILL.md",[],[],"2026-11-11 15:11:14",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":23,"license":14,"version":24,"metadata":25,"description":7},"Hermes Agent","1.0.0",{"hermes":26},{"tags":27,"related_skills":31},[28,29,30],"MCP","Tools","Integrations",[32],"mcporter","main","404fd33aabef3b6bc1cc913117ba2160ade62625","snapshots\u002F2026-08-30T14-00-42+0200\u002Fskills\u002Fmcp\u002Fnative-mcp","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71","2026-11-08 20:00:57",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add LyrikNilpferd71\u002FHermes-Backup --skill native-mcp",{"tool":45,"command":46},"bunx","bunx skills add LyrikNilpferd71\u002FHermes-Backup --skill native-mcp",{"tool":48,"command":49},"pnpm","pnpm dlx skills add LyrikNilpferd71\u002FHermes-Backup --skill native-mcp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-08-30T14-00-42+0200\u002Fskills\u002Fmcp\u002Fnative-mcp\u002FSKILL.md",true,[],[54,62,69,76,83,90],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":61},"01M76BBCCNA7WQ82Q8QNZH8PBK","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[],[],"2026-11-12 13:55:43",{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":61},"01M76BB8YS41CA3NKW0YMSSB88","systematic-debugging","4-phase root cause debugging: understand bugs before fixing.","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":61},"01M76BB680FPNT998E1GM2QW10","subagent-driven-development","Execute plans via delegate_task subagents (2-stage review).","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fsubagent-driven-development\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":61},"01M76BB3C4ZB9S4RWPMM8MX0YB","plan","Write a markdown plan to .hermes\u002Fplans\u002F; no execution.","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fplan\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":61},"01M76BB0NK28KMP51YDB5R3EXA","hermes-agent-skill-authoring","Author in-repo SKILL.md files: frontmatter and structure.","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fhermes-agent-skill-authoring\u002FSKILL.md",[],[],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":61},"01M76BAYV58H0CKNSTZE3ZH4NY","debugging-hermes-tui-commands","Debug Hermes TUI slash commands: Python, gateway, Ink UI.","https:\u002F\u002Fgithub.com\u002FLyrikNilpferd71\u002FHermes-Backup\u002Fblob\u002Fmain\u002Fsnapshots\u002F2026-11-08T13-00-51+0100\u002Fskills\u002Fsoftware-development\u002Fdebugging-hermes-tui-commands\u002FSKILL.md",[],[]]