Tunnel Manager
Tunnel Manager
CLI 或 API | MCP | Agent
版本:3.1.0
文档 —— 有关 API、CLI、MCP 与 Agent 界面的安装、部署和使用说明,均维护在 官方文档 中。
Related MCP server: mcp-ssh
概览
Tunnel Manager 是一个生产级的 Agent 与 Model Context Protocol(MCP)服务器,旨在直接与 Create SSH Tunnels to your remote hosts and host as an MCP Server for Agentic AI! 对接。
主要功能
统一的操作路由 MCP 工具: 通过把方法分组为经过优化且可开关的工具模块,最大限度减少 LLM 上下文中的 token 开销,并消除工具膨胀。
企业级安全: 全面支持 Eunomia 策略、OIDC 令牌委派以及细粒度的执行上下文跟踪。
内置图 Agent: 内置的 Pydantic AI Agent,支持 Agent Control Protocol(ACP)与标准 Web 接口(AG-UI)。
原生遥测与追踪: 开箱即用的 OpenTelemetry 导出,以及原生持有的 Langfuse 追踪。
CLI 或 API
该 Agent 封装了 Create SSH Tunnels to your remote hosts and host as an MCP Server for Agentic AI! API。你可以通过编程方式或通过其内置的可执行入口与它交互。
有关底层 API 封装器、扩展 schema 绑定与开发者 SDK 参考的详细说明,请参阅 docs/index.md。
MCP
此 MCP 服务器采用动态的 Action-Routed 工具来优化 token 开销,并最大程度保证 IDE 兼容性。
可用的 MCP 工具
自动根据实时 MCP 服务器生成 —— 请勿手动编辑。
精简的操作路由工具(MCP_TOOL_MODE=condensed)
MCP 工具 | 切换环境变量 | 说明 |
|
| 在远程主机上执行高级文件操作。 |
|
| 管理本机主机别名清单。 |
|
| 针对 YAML 主机组执行批量清单操作。 |
|
| 操作生命周期与会话管理。 |
|
| 使用共享连接参数的单一主机 SSH 操作。 |
|
| 安全扫描与合规检查。 |
|
| 通过 SSH 获取远程系统정보。 |
|
| 列出由本服务器管理的 SSH 清单,并将其推送到 epistemic-graph 知识图谱(KG)中。 |
详细的 1:1 API 工具(MCP_TOOL_MODE=verbose 或 both)
MCP 工具 | 切换环境变量 | 说明 |
|
| 调用 add_host 操作。 |
|
| 按别名获取主机配置,若调用者无权限访问该别名则拒绝。 |
|
| 列出调用者有权访问的主机别名,机密信息已脱敏。 |
|
| 调用 load_inventory 操作。 |
|
| 调用 remove_host 操作。 |
|
| 调用 save_inventory 操作。 |
8 个 action-routed 工具 · 6 个 verbose 1:1 工具。每个工具默认启用,除非其 <DOMAIN>TOOL 开关被设置为 false;MCP_TOOL_MODE 用于选择工具集(默认 intent —— 六个动词工具、按需加载的细化工具集 · condensed action-routed · verbose 1:1 · both)。自动生成 —— 请勿手动修改。
详细的工具 schema、参数形态与校验约束均保存在 docs/usage.md 中。
动态工具选择与可见性
此 Android MCP 服务器支持在运行时动态选择工具集并过滤可见性,从而让你能限制对外暴露的工具,避免撑爆 LLM 拥有的上下文窗口。
你可以通过多种输入渠道来配置工具过滤:
CLI 参数: 启动时传入
--tools或--toolsets(或对应的禁用开关--disabled-tools与--disabled-toolsets)。环境变量: 这两种渠道定义标准环境变量:
MCP_ENABLED_TOOLS/MCP_DISABLED_TOOLSMCP_ENABLED_TAGS/MCP_DISABLED_TAGS
HTTP SSE 请求头: 在传输初始化期间传入自定义请求头:
x-mcp-enabled-tools/x-mcp-disabled-toolsx-mcp-enabled-tags/x-mcp-disabled-tags
HTTP SSE 请求查询参数: 直接将查询参数附加到传输连接 URL 上:
?tools=tool1,tool2?tags=tag1
当提供查询字符串或查询参数时,一个无需 LLM 的 知识图谱解析层(使用 DynamicToolOrchestrator)会将查询意图与已知的工具标签、名称或描述进行匹配,并提供安全回退与自动化的 24 小时后台缓存刷新。
MCP 配置示例
安装面向连接器的
[mcp]附加依赖。 示例使用tunnel-manager[mcp]来通过agent-utilities[mcp]增加 FastMCP / FastAPI;必需的 Agent Utilities 核心仍会携带epistemic-graph[full]。[agent-runtime]附加依赖还会启用模型编排。
stdio Transport(本地 IDE —— Cursor、Claude Desktop、VS Code)
{
"mcpServers": {
"tunnel-manager-mcp": {
"command": "uvx",
"args": [
"--from",
"tunnel-manager[mcp]",
"tunnel-manager-mcp"
],
"env": {
"MCP_TOOL_MODE": "intent",
"FILETOOL": "True",
"HOSTTOOL": "True",
"INGESTTOOL": "True",
"INVENTORYTOOL": "True",
"OPERATIONSTOOL": "True",
"REMOTETOOL": "True",
"SECURITYTOOL": "True",
"SYSTEMTOOL": "True",
"TUNNEL_IDENTITY_FILE": "~/.ssh/id_ed25519",
"TUNNEL_INVENTORY_GROUP": "all",
"TUNNEL_KG_INGEST": "true",
"TUNNEL_KNOWN_HOSTS": "~/.ssh/known_hosts",
"TUNNEL_MANAGER_HEALTH_AGGREGATE_S": "3600",
"TUNNEL_MANAGER_HEALTH_INGEST": "true",
"TUNNEL_MANAGER_HOSTS": "r510,r710,r820,rw710",
"TUNNEL_MAX_THREADS": "6",
"TUNNEL_PARALLEL": "False",
"TUNNEL_REMOTE_PORT": "22"
}
}
}
}运行时引用需要支持别名(alias)的启动器,例如 GraphOS。其他启动器必须省略这些条目,并通过自身运行时提供的安全边界注入已解析的值。
Streamable-HTTP Transport(网络 / 生产环境)
{
"mcpServers": {
"tunnel-manager-mcp": {
"command": "uvx",
"args": [
"--from",
"tunnel-manager[mcp]",
"tunnel-manager-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"MCP_TOOL_MODE": "intent",
"FILETOOL": "True",
"HOSTTOOL": "True",
"INGESTTOOL": "True",
"INVENTORYTOOL": "True",
"OPERATIONSTOOL": "True",
"REMOTETOOL": "True",
"SECURITYTOOL": "True",
"SYSTEMTOOL": "True",
"TUNNEL_IDENTITY_FILE": "~/.ssh/id_ed25519",
"TUNNEL_INVENTORY_GROUP": "all",
"TUNNEL_KG_INGEST": "true",
"TUNNEL_KNOWN_HOSTS": "~/.ssh/known_hosts",
"TUNNEL_MANAGER_HEALTH_AGGREGATE_S": "3600",
"TUNNEL_MANAGER_HEALTH_INGEST": "true",
"TUNNEL_MANAGER_HOSTS": "r510,r710,r820,rw710",
"TUNNEL_MAX_THREADS": "6",
"TUNNEL_PARALLEL": "False",
"TUNNEL_REMOTE_PORT": "22"
}
}
}
}或者,也可以连接到已预部署的 Streamable-HTTP 实例,并通过 url 指定地址:
{
"mcpServers": {
"tunnel-manager-mcp": {
"url": "http://localhost:8000/tunnel-manager-mcp/mcp"
}
}
}以最小权限的 stdio 子进程运行经过审查的容器镜像(无监听端口,也不发布端口):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e FILETOOL=True \
-e HOSTTOOL=True \
-e INGESTTOOL=True \
-e INVENTORYTOOL=True \
-e OPERATIONSTOOL=True \
-e REMOTETOOL=True \
-e SECURITYTOOL=True \
-e SYSTEMTOOL=True \
-e TUNNEL_IDENTITY_FILE=~/.ssh/id_ed25519 \
-e TUNNEL_INVENTORY_GROUP=all \
-e TUNNEL_KG_INGEST=true \
-e TUNNEL_KNOWN_HOSTS=~/.ssh/known_hosts \
-e TUNNEL_MANAGER_HEALTH_AGGREGATE_S=3600 \
-e TUNNEL_MANAGER_HEALTH_INGEST=true \
-e TUNNEL_MANAGER_HOSTS=r510,r710,r820,rw710 \
-e TUNNEL_MAX_THREADS=6 \
-e TUNNEL_PARALLEL=False \
-e TUNNEL_REMOTE_PORT=22 \
registry.example.invalid/tunnel-manager@sha256:<digest> tunnel-manager-mcp对于容器化网络 HTTP 环境,请通过操作者拥有的部署配置文件提供经过认证的 TLS 入口(或服务器直接 TLS)、严格的 MCP_ALLOWED_HOSTS,以及明确的受信代理对端 CIDR 策略。生成工具不会产生未经认证的非 loopback 非回环监听ter接口。
自动从代码读取的 env 表层(MCP_TOOL_MODE + 包变量)生成 —— 请勿手动编辑。
其他部署选项
tunnel-manager 既可以作为本地 stdio 进程或容器运行,也不必停止在远程网络边界之后。详细的传输契约请参见 Deployment guide。
本地容器 —— 以最小权限的 stdio 子进程形式启动经过审查的不可变镜像,不监听端口,也不发布端口。
远程 URL —— 通过操作者提供的已认证 HTTPS 入口连接。将其 URL、出站身份引用、信任配置和严格的
MCP_ALLOWED_HOSTS保存在AgentConfig中。
主机清单
tunnel-manager 采用一个共享的 YAML 清单(inventory),将短主机名(如 edge-node)映射到其 SSH 连接详情。所有生态表层读取的是同一文件 —— HostManager API、tunnel-manager CLI、MCP 服务器、container-manager-mcp(其 cm_* 主机别名)以及 ssh-bootstrap 技能 —— 因此你只需定义一次即可。
位置 ——
~/.config/agent-utilities/inventory.yml(推荐使用.yml)。当不存在.yml时,同一路径下的旧版inventory.yaml仍会被读取,因此现有安装可继续生效。可通过TUNNEL_INVENTORY覆盖该路径。管理方式 —— 使用
inventory子命令:tunnel-manager inventory init # write a commented inventory.yml template (--force to overwrite) tunnel-manager inventory doctor # validate hosts/groups; --fix migrates legacy .yaml -> .yml tunnel-manager inventory show # print the resolved path + host/group summary
完整的 schema、每个主机字段的详细说明、可复制粘贴的模板以及所有覆盖选项,均收录在 Inventory 指南 中。
环境变量
包级环境变量
变量 | 示例 | 描述 |
|
| |
|
| |
|
| 选项:stdio、streamable-http、sse |
|
| |
|
| |
| secret-injected: 解析 | |
| secret-injected: 处理方案 | |
|
| |
|
| 选项:none, embedded, remote |
|
| // 策略文件 |
|
| |
|
| SSH 身份 |
|
| 本文标签为 True 时启用调试输出 |
|
| Set to 1 to make output unbuffered |
| — | 默认remote host(例如 198.51.100.10) host |
|
| 默认 SSH 端口 |
| — | 默认 SSH 用户名 username |
| — | env://、vault://、secret:// 或 sqlite:// 引用引用 reference |
|
| 独立验证的服务器主机密钥 key trust store |
| — | SSH 证书文件路径 path to SSH certificate |
| — | None. 用于跳板/堡垒主机连接的 SSH ProxyCommand |
| — | inventory 文件路径(默认指向 XDG 配置路径) inventory 文件路径 |
` |
变量 | 描述 | 默认值 |
| 共享清单文件的路径(优先 |
|
| 默认清单主机组 | — |
| 并行执行批量操作 | — |
| 最大并发 SSH 工作线程数 | — |
| 用于解析清单的基础配置目录 |
|
MCP 服务器 / 传输
变量 | 描述 | 默认值 |
|
|
|
| 绑定主机(HTTP 传输) |
|
| 绑定端口(HTTP 传输) |
|
| 工具表面: |
|
| 逗号分隔的工具允许/拒绝列表 | — |
| 逗号分隔的标签允许/拒绝列表 | — |
| 详细日志记录 |
|
| 无缓冲标准输出(建议在容器中使用) |
|
工具开关
每个动作路由工具都可以通过其开关环境变量(设置为 false)单独禁用。
完整列表见上方的 可用 MCP 工具 表格
(HOSTTOOL、REMOTETOOL、INVENTORYTOOL、OPERATIONSTOOL、
SYSTEMTOOL、FILETOOL、SECURITYTOOL)。
遥测与治理
变量 | 描述 | 默认值 |
| 启用 OpenTelemetry 导出 |
|
| OTLP 收集器端点 | — |
| OTLP 认证密钥 | — |
| OTLP 协议(例如 | — |
| 授权模式: |
|
| 嵌入式策略文件 |
|
| 远程 Eunomia 服务器 URL | — |
代理运行时(仅完整 [agent] 运行时)
变量 | 描述 | 默认值 |
| 代理连接的 MCP 服务器 URL |
|
| LLM 提供商(例如 |
|
| 模型 ID(例如 |
|
| 提供 AG-UI Web 界面 |
|
代理
本仓库包含一个完全集成的 Pydantic AI 图代理。它通过 Agent Control Protocol (ACP) 进行通信,并与 Agent Web UI (AG-UI) 和终端界面无缝交互。
运行代理 CLI
要启动交互式命令行代理:
# Set credentials
export TUNNEL_IDENTITY_FILE="your_value"
export DEBUG="your_value"
export PYTHONUNBUFFERED="your_value"
# Run the agent server
tunnel-manager-agent --provider openai --model-id gpt-4oDocker Compose 编排
以下 docker/agent.compose.yml 将代理、Web UI 和终端界面配置在一起:
version: '3.8'
services:
tunnel-manager-mcp:
image: example/tunnel-manager:mcp
container_name: tunnel-manager-mcp
hostname: tunnel-manager-mcp
restart: always
env_file:
- ../.env
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=8000
- TRANSPORT=streamable-http
ports:
- "8000:8000"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
tunnel-manager-agent:
image: example/tunnel-manager@sha256:<digest>
container_name: tunnel-manager-agent
hostname: tunnel-manager-agent
restart: always
depends_on:
- tunnel-manager-mcp
env_file:
- ../.env
command: [ "tunnel-manager-agent" ]
environment:
- PYTHONUNBUFFERED=1
- HOST=0.0.0.0
- PORT=9002
- MCP_URL=http://tunnel-manager-mcp:8000/mcp
- PROVIDER=${PROVIDER:-openai}
- MODEL_ID=${MODEL_ID:-gpt-4o}
- ENABLE_WEB_UI=True
- ENABLE_OTEL=True
ports:
- "9002:9002"
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9002/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
详细的图节点架构说明、自定义技能配置和代理跟踪指南可在 docs/deployment.md 中找到。
安全与治理
直接构建于企业级 agent-utilities 核心之上,完全支持标准安全参数:
访问控制与策略执行
Eunomia 策略: 细粒度、策略驱动的工具授权。支持
none、本地embedded(mcp_policies.json)或集中式remote模式。OIDC 令牌委派: 符合 RFC 8693 令牌交换,用于将认证用户凭据从 Web UI / ACP → Agent → MCP 流转。
作用域凭据: 执行上下文运行限制为特定调用者身份。
运行时安全网格
功能 | 功能描述 | 启用方式 |
工具防护 | 敏感度检查,并有人工参与验证 | 默认启用 |
提示注入防御 | 输入扫描、重复监控和递归循环阻止 | 默认启用 |
上下文安全防护 | 卡死循环检测和上下文溢出预防性警报 | 默认启用 |
安装
选择与您要运行的内容匹配的附加项:
附加项 | 安装内容 | 使用场景 |
| 面向连接器的 MCP 服务器( | 您仅运行 MCP 服务器(最小安装 / 镜像) |
| 代理运行时( | 您运行 集成代理 |
| 所有内容( | 开发 / 两种表面 |
# Connector-focused MCP server (includes the shared graph engine)
uv pip install "tunnel-manager[mcp]"
# Agent runtime (adds model orchestration to the shared graph engine)
uv pip install "tunnel-manager[agent]"
# Everything (development)
uv pip install "tunnel-manager[all]" # or: python -m pip install "tunnel-manager[all]"容器镜像(:mcp 与 :agent)
一个多阶段 docker/Dockerfile 构建两个大小合适的镜像,通过 --target 选择:
镜像标签 | 构建目标 | 内容 | 入口点 |
|
|
|
|
|
|
|
|
docker build --target mcp -t example/tunnel-manager:mcp docker/ # connector-focused MCP server
docker build --target agent -t example/tunnel-manager:agent-local docker/ # agent runtimedocker/mcp.compose.yml 运行面向连接器的 :mcp 服务器;docker/agent.compose.yml 运行
代理(不可变代理摘要)并带有共置的 :mcp 侧车。
知识图谱数据库(epistemic-graph)
[mcp] 和 [agent] 都通过所需的
Agent Utilities 核心依赖(epistemic-graph[full])携带 epistemic-graph 引擎。[mcp] 附加项保持
服务器面向连接器;[agent] 额外启用模型编排。本地
部署可以使用捆绑的引擎。对于生产或共享状态,请运行
epistemic-graph 作为专用数据库服务,并配置运行时使用它。
部署方案(单节点 + Raft HA)、连接配置和架构
图记录在
epistemic-graph 部署指南 中。
文档
完整文档发布在 官方文档站点 上,是 安装、部署和日常操作的推荐参考。
页面 | 内容 |
pip、源码、附加项、预构建 Docker 镜像 | |
共享的 | |
运行 MCP 和代理服务器、Compose、Caddy + Technitium、环境配置 | |
MCP 工具、 | |
生态角色、分布式 SSH 群扩展、MCP 配置 | |
证书、代理和跨操作系统连接模型 | |
概念注册表( |
AGENTS.md 是规范的贡献者/代理指南。
维护者
由项目贡献者团队维护。包元数据有意使用 角色地址而非个人身份。
贡献
欢迎贡献!请在提交拉取请求前执行本地检查以确保代码质量:
使用
ruff format .格式化代码使用
ruff check .检查代码使用
mypy .验证类型安全使用
pytest执行测试套件
使用 agent-utilities-deployment 部署
使用整合的 agent-utilities-deployment 工作流配置此包。它会选择已安装包、可编辑源码或不可变容器路径;仅在 AgentConfig 中记录运行时机密和 TLS 配置引用;并运行 doctor、注册、策略、可观测性和回滚门禁。请让您的 agent 执行 "使用 agent-utilities-deployment 部署 tunnel-manager"。
安装模式 | 命令 |
已安装包 |
|
可编辑源码 |
|
不可变容器 | 通过操作员选择的编排器部署 |
该仓库不嵌入任何部署配置、凭据值、证书路径或环境特定的端点。请在运行时通过 AgentConfig 和已配置的机密提供程序提供这些值。
受治理的能力契约
此包附带一个紧凑的规范技能面,其中专业流程以引用工作流的形式保留。当前的 MCP 工具、技能元数据、connector_manifest.yml、本体、映射、形状、夹具、迁移、工具模式指纹和认证元数据共同构成一份版本化的能力契约。请将它们一起验证;不要依赖过时的工具名称或历史遗留的按任务技能包装器。
运行时端点、凭据、证书信任、租户身份、保留策略和可观测性策略均属于部署输入,绝不会作为打包值。在启用网络传输、连接器摄取、GraphOS 委派或跟踪导出之前,请参阅配置、信任与隐私。
Available Tools
8 toolstm_filesAdvanced File OperationsCDestructive
Advanced file operations on remote hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Permission mode (recursive_ops/chmod). | 755 |
| group | No | Group (recursive_ops/chown). | |
| host1 | No | First host (diff_compare). | |
| host2 | No | Second host (diff_compare). | |
| owner | No | Owner (recursive_ops/chown). | |
| action | Yes | Action: 'recursive_ops', 'content_search', 'watch', 'diff_compare', 'backup' | |
| source | No | Source path (recursive_ops). | |
| pattern | No | Search pattern (content_search). | |
| duration | No | Monitor duration secs (watch). | |
| password | No | SSH password. | |
| username | No | SSH username. | |
| file_path | No | File path to compare (diff_compare). | |
| operation | No | Operation type: copy, move, delete, list, chmod, chown (recursive_ops). | |
| recursive | No | Recursive search (content_search). | |
| backup_dest | No | Backup destination (backup). | |
| compression | No | Enable compression (backup). | |
| destination | No | Destination path (recursive_ops/copy/move). | |
| incremental | No | Incremental backup (backup). | |
| max_results | No | Max results (content_search). | |
| remote_host | No | Remote host. | |
| watch_paths | No | Paths to monitor (watch). | |
| backup_paths | No | Paths to backup (backup). | |
| search_paths | No | Directories to search (content_search). | |
| identity_file | No | SSH identity file path. | |
| case_sensitive | No | Case-sensitive (content_search). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral context beyond the annotations. Annotations already indicate destructiveHint=true, but the description fails to mention that operations may modify or delete files, require SSH credentials, or have side effects. With annotations present, the description should still provide safety or prerequisite details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (one sentence), but it fails to convey essential information. Conciseness should not come at the cost of usefulness. Every sentence should add value; this sentence is generic and does not help the agent select or invoke the tool effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (25 parameters, 5 actions, output schema exists), the description is severely incomplete. It does not mention the supported actions, prerequisites (SSH credentials), or how to combine parameters. An output schema exists but is not referenced. The description leaves the agent with no guidance on how to operate the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100% with parameter descriptions, the tool's description does not summarize which parameters correspond to which action. With 25 parameters and multiple actions, the description should group parameters or list actions, but it just repeats the title. Baseline for high coverage is 3, but the lack of structural guidance reduces clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Advanced file operations on remote hosts', which indicates the tool's domain (files on remote hosts) and implies operations, but lacks a specific verb-resource pair. It distinguishes from sibling tools like tm_hosts or tm_inventory, so a clear domain is established.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not specify contexts like 'for file management, use this; for host management, use tm_hosts'. An agent must infer from the name and schema alone, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_hostsHost ManagementCDestructive
Manage the local host alias inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port. | |
| user | No | Username. | |
| alias | No | Host alias. | |
| action | Yes | Action: 'list', 'add', 'remove' | |
| hostname | No | Real hostname or IP. | |
| password | No | Password (if no key). | |
| identity_file | No | Path to private key. | |
| proxy_command | No | Proxy command. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true, but the description does not elaborate on the destructive nature (e.g., removing hosts permanently) or other behavioral traits like authentication requirements or system changes. It adds no value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but under-specified. It lacks critical information such as the available actions or the fact that it modifies local configuration. It is appropriately sized for a simple tool but incomplete for the complexity of 8 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, a required 'action' parameter, and a destructive annotation, the description is too minimal. It does not mention the three actions (list, add, remove) or the potential impacts. Even with an output schema, the description fails to provide essential operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so each parameter is already documented. The description ('Manage...') does not add any additional meaning or context about how parameters relate. The baseline is 3 since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Manage the local host alias inventory,' which identifies the resource but uses the vague verb 'manage.' It does not specify the actions (list, add, remove) or how the tool operates. The title 'Host Management' provides context, but the description alone is insufficient to clearly distinguish the tool's specific function from siblings like tm_inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as tm_remote or tunnel_ingest_hosts. There are no explicit when-to-use or when-not-to-use conditions, leaving the agent to infer usage from the action parameter and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_inventoryInventory OperationsCDestructive
Bulk inventory operations against YAML host groups.
| Name | Required | Description | Default |
|---|---|---|---|
| cfg | No | Local SSH config path (copy_ssh_config). | |
| cmd | No | Shell command (run_command). | |
| key | No | Shared key path (configure_key_auth). | /app/.ssh/id_ed25519 |
| group | No | Target group. | all |
| lpath | No | Local file path (send_file). | |
| rpath | No | Remote file path (send_file/receive_file). | |
| action | Yes | Action: 'configure_key_auth', 'mesh_bootstrap', 'run_command', 'copy_ssh_config', 'rotate_key', 'send_file', 'receive_file' | |
| key_pfx | No | Prefix for new keys (rotate_key). | /root/.ssh/id_ |
| rmt_cfg | No | Remote config path (copy_ssh_config). | /root/.ssh/config |
| timeout | No | Command timeout in seconds. | |
| key_type | No | Key type: rsa or ed25519. | ed25519 |
| parallel | No | Run parallel. | |
| inventory | No | YAML inventory path (default: $XDG_CONFIG_HOME/agent-utilities/inventory.yaml). | /root/.config/agent-utilities/inventory.yml |
| max_threads | No | Max threads. | |
| lpath_prefix | No | Local dir prefix (receive_file). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, but the description adds no behavioral context beyond that. It does not disclose what is destroyed, safety precautions, or any side effects. The description relies solely on the annotations for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is terse (one sentence) and front-loaded with key terms. However, given the tool's complexity (15 parameters, multiple actions), it is too brief and could benefit from a structured overview.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and 15 parameters, the description fails to provide a high-level explanation of the tool's actions or typical use cases. It is insufficient for an agent to fully understand the tool's capabilities without inspecting the schema extensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter has a description. The tool-level description adds no additional meaning beyond the schema. It is adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Bulk inventory operations against YAML host groups' is somewhat vague, using the generic term 'operations' without specifying the types of actions. The title 'Inventory Operations' also lacks specificity. It indicates the resource (YAML host groups) and bulk nature, but does not clearly define the tool's purpose relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like tm_hosts or tm_operations. The description does not mention context, prerequisites, or exclusions, leaving the agent to infer usage from the action parameter alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_operationsOperation ManagementCDestructive
Operation lifecycle and session management.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action: 'start', 'get_progress', 'cancel', 'get_metrics', 'list_sessions' | |
| details | No | Additional details (start). | |
| total_steps | No | Total steps (start). | |
| operation_id | No | Operation ID (get_progress/cancel/get_metrics). | |
| operation_type | No | Type of operation (start). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description does not need to repeat that. However, it adds no further behavioral context beyond 'lifecycle and session management,' which is adequately covered by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only 5 words, which is too terse. While concise, it sacrifices informativeness and does not earn its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and annotations, the description is too brief to cover the tool's multiple actions and use cases. It fails to explain how to use the action parameter or what each action entails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information, so it meets the baseline without adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool manages operation lifecycle and sessions, which is a general purpose. It distinguishes from siblings like tm_files or tm_hosts, but lacks specificity about the exact actions (start, cancel, etc.) that are available.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, context for each action, or when to prefer sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_remoteRemote SSH OperationsCDestructive
Single-host SSH operations with shared connection params.
| Name | Required | Description | Default |
|---|---|---|---|
| cfg | No | SSH config path. | /root/.ssh/config |
| cmd | No | Shell command (run_command). | |
| key | No | Key path (test_key_auth/setup_passwordless). | |
| host | No | Remote host. | |
| lcfg | No | Local SSH config (copy_ssh_config). | |
| port | No | Port. | |
| rcfg | No | Remote SSH config (copy_ssh_config). | /root/.ssh/config |
| user | No | Username. | |
| lpath | No | Local file path (send_file/receive_file). | |
| proxy | No | Teleport proxy. | |
| rpath | No | Remote file path (send_file/receive_file). | |
| action | Yes | Action: 'run_command', 'send_file', 'receive_file', 'check_ssh', 'test_key_auth', 'setup_passwordless', 'copy_ssh_config', 'rotate_key', 'remove_host_key' | |
| id_file | No | Private key path. | /app/.ssh/id_ed25519 |
| new_key | No | New private key path (rotate_key). | |
| timeout | No | Command timeout in seconds. | |
| key_type | No | Key type: rsa or ed25519 (setup_passwordless/rotate_key). | ed25519 |
| password | No | Password. | |
| certificate | No | Teleport certificate. | |
| known_hosts | No | Known hosts path (remove_host_key). | /root/.ssh/known_hosts |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the agent knows operations may be destructive. The description adds no further behavioral context (e.g., that actions like remove_host_key modify remote host keys, or that some operations require authentication). Minimal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but overly minimal. It lacks front-loading of key information (e.g., list of actions or critical parameters). Every word earns its place, but additional context would improve usability without adding bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 19 parameters and multiple actions, the description is too sparse. It does not explain the variety of actions, how to use shared parameters, or typical usage patterns. Even with an output schema, the description fails to provide sufficient context for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 19 parameters have brief descriptions). The tool description adds no extra meaning; it only says 'shared connection params.' Baseline is 3 as schema does the heavy lifting, but description does not enhance understanding of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Single-host SSH operations with shared connection params,' which clearly indicates the tool is for SSH actions on one remote host. It distinguishes from siblings like tm_files (local files) or tm_hosts (host management) by specifying SSH and single-host focus. However, it could list the specific actions (e.g., run_command, file transfer) for greater clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It only implies usage for SSH-related tasks on a single host. No exclusion criteria, prerequisites, or comparisons with sibling tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_securitySecurity AuditingCRead-onlyIdempotent
Security scanning and compliance.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Security areas to audit (security_audit). | |
| action | Yes | Action: 'security_audit', 'compliance_check', 'vulnerability_scan', 'access_control_audit' | |
| password | No | SSH password. | |
| standard | No | Compliance standard: cis_benchmark, pci_dss, hipaa (compliance_check). | cis_benchmark |
| username | No | SSH username. | |
| scan_type | No | Scan type: basic, package, config (vulnerability_scan). | basic |
| remote_host | Yes | Remote host to audit. | |
| identity_file | No | SSH identity file path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds no behavioral context beyond confirming a read-only, idempotent operation. It fails to disclose that the tool requires SSH access (evident from schema but unmentioned) or to elaborate on side effects of scanning. The description does not add value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (5 words), which is concise but risks under-specification. It front-loads no critical details like supported actions or security implications. While brevity is valued, the lack of structure (no bullet points, no separation of concerns) reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown) and 8 parameters, the description covers almost nothing. It omits the tool's return values, SSH authentication requirements, and the specific actions it can perform. A complete description should at least hint at the action types (e.g., 'supports security_audit, compliance_check, etc.') to unify with the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured data already documents each parameter's meaning. The description 'Security scanning and compliance' adds no additional semantics for parameters. Baseline 3 applies since the description does not compensate or elaborate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Security scanning and compliance' broadly matches the tool name and title, but it lacks a specific verb+resource combination. It vaguely groups scanning and compliance without defining distinct outcomes. Sibling tools (e.g., tm_files, tm_remote) imply a security focus, but the description does not differentiate this tool from potential security-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention when not to use it, prerequisites, or preferred contexts. For a tool requiring SSH credentials and offering multiple action types, this omission hampers correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_systemSystem IntelligenceARead-onlyIdempotent
Remote system intelligence via SSH.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action: 'get_info', 'discover_services', 'analyze_logs', 'network_topology' | |
| password | No | SSH password. | |
| patterns | No | Search patterns (analyze_logs). | |
| username | No | SSH username. | |
| log_paths | No | Log file paths (analyze_logs). | |
| remote_host | Yes | Remote host. | |
| identity_file | No | SSH identity file path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that it uses SSH for intelligence, which aligns but doesn't elaborate on behaviors like connection handling or authentication requirements. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose. It is concise and avoids fluff, though slightly more context could improve it without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, annotations covering safety, and full schema coverage, the description is adequate but lacks details on SSH prerequisites, security considerations, or limitations. It could be more complete without being verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all 7 parameters described. The description itself adds no additional parameter-level meaning beyond what's already in the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Remote system intelligence via SSH' clearly states the tool's purpose: to gather intelligence from remote systems over SSH. This verb+resource pattern effectively distinguishes it from sibling tools like tm_files (file operations) or tm_hosts (host management).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance on when to use this tool versus alternatives. It does not specify prerequisites, exclusions, or context. The name and description imply it's for system intelligence, but explicit usage guidance is lacking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tunnel_ingest_hostsIngest Hosts to Knowledge GraphCRead-onlyIdempotent
List the managed SSH inventory and push it into the epistemic-graph KG.
Maps each alias → a typed :Host node (+ :HostGroup / :SshKey and
their :inGroup / :usesKey links). Best-effort: no-ops cleanly when no
KG engine is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | HostGroup name to attach the ingested hosts to. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's claim to 'push it into the epistemic-graph KG' suggests a write operation, contradicting the annotation readOnlyHint=true. Annotations indicate no modifications, while the description implies data ingestion. This is a clear annotation contradiction, lowering the score to 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the first sentence stating the core purpose and the second providing behavioral detail. Every word is necessary, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and schema coverage is high, the description covers the main action and best-effort behavior. However, it fails to explain the group parameter's role and does not differentiate from sibling tools, leaving gaps for an agent choosing among related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so baseline is 3. The description does not add any meaning beyond the schema's description of the 'group' parameter; it omits explaining its role in attaching hosts to a host group.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'List the managed SSH inventory and push it into the epistemic-graph KG.' This clearly identifies the verb and resource. However, it does not explicitly differentiate itself from sibling tools like tm_inventory or tm_hosts, which may have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Best-effort: no-ops cleanly when no KG engine is reachable,' which implies safe usage but does not specify when to use this tool versus alternatives like tm_inventory for direct inventory listing or tm_hosts for host management. No explicit when-not or alternative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v2.0.1- First observed
tm_files - First observed
tm_hosts - First observed
tm_inventory - First observed
tm_operations - First observed
tm_remote - First observed
tm_security - First observed
tm_system - First observed
tunnel_ingest_hosts
TDQS
Scored across 8 tools
Most tools have distinct purposes (e.g., files, security, system intelligence), but tm_hosts and tm_inventory overlap in managing host inventory, and tm_remote may conflict with tm_files and tm_system. The outlier tunnel_ingest_hosts is distinct but not clearly related.
Seven tools use the 'tm_' prefix, but one uses 'tunnel_', breaking consistency. The naming pattern is noun-based without clear verb-noun structure, which is acceptable but not ideal.
Eight tools is a well-scoped set for remote host management, covering operations, inventory, security, and system intelligence without being overwhelming.
Covers file operations, SSH sessions, inventory, security, and system intelligence. Minor gaps like individual host CRUD (e.g., create/delete alias) might exist, but bulk operations and KG ingestion fill some needs.
Maintenance
Related MCP Connectors
Secure MCP server for exploring incwo CRM data, documents, and email workflows.
Independent trust scores, tool surfaces and change history for MCP servers.
Related MCP Servers
- AlicenseBqualityAmaintenanceA server that enables secure interaction with remote SSH hosts through standardized MCP interface, providing functions like listing hosts, executing commands, and transferring files using native SSH tools.7261 npm102MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for SSH remote execution, file transfer, and file editing with automatic backup/trash and ~/.ssh/config integration.117 npm1MIT
- AlicenseAqualityDmaintenanceMCP server for managing remote servers via SSH, enabling command execution, file transfer, rsync, tunnels, health checks, backups, and database operations.172,150 npm1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server providing safe, persistent SSH sessions to remote machines with multi-hop ProxyJump tunneling, SFTP file transfer, and stored host profiles.MIT