Skip to main content
Glama

Tunnel Manager

CLI 또는 API | MCP | 에이전트

PyPI - Version MCP Server PyPI - Downloads GitHub Repo stars GitHub forks GitHub contributors PyPI - License GitHub GitHub last commit (by committer) GitHub pull requests GitHub closed pull requests GitHub issues GitHub top language GitHub language count GitHub repo size GitHub repo file count (file type) PyPI - Wheel PyPI - Implementation

버전: 3.1.0

문서 — API, CLI, MCP 및 에이전트 인터페이스에서의 설치, 배포, 사용법에 대한 내용은 공식 문서에서 관리됩니다.


Related MCP server: mcp-ssh

개요

Tunnel Manager는 원격 호스트에 SSH 터널을 생성하고 에이전틱 AI 위한 MCP 서버로 호스팅하도록 설계된 프로덕션 등급의 에이전트 및 MCP(Model Context Protocol) 서버입니다.


핵심 기능

  • 통합된 액션 라우팅 MCP 도구: 메서드를 최적화된 토글형 도구 모듈로 그룹화하여 LLM 컨텍스트에서 토큰 오버헤드를 최소화하고 도구 비대화를 제거합니다.

  • 엔터프라이즈급 보안: Eunomia 정책, OIDC 토큰 위임, 세분화된 실행 컨텍스트 추적에 대한 포괄적인 지원을 제공합니다.

  • 통합 그래프 에이전트: Agent Control Protocol(ACP) 및 표준 웹 인터페이스(AG-UI)를 지원하는 Pydantic AI 에이전트가 내장되어 있습니다.

  • 네이티브 텔레메트리 및 추적: 별도 설정 없이 사용할 수 있는 OpenTelemetry 내보내기와 네이티브 Langfuse 추적을 제공합니다.


CLI 또는 API

이 에이전트는 원격 호스트에 SSH 터널을 생성하고 이를 에이전틱 AI용 MCP 서버로 호스팅하는 API를 래핑합니다. 프로그래밍 방식 또는 통합된 실행 진입점으로 상호 작용할 수 있습니다.

기본 API 래퍼 사용 방법, 확장 스키마 바인딩, 개발자 SDK 참조에 대한 자세한 지침은 docs/index.md에 있습니다.


MCP

이 MCP 서버는 동적 액션 라우팅 도구를 활용하여 토큰 오버헤드를 최적화하고 IDE 호환성을 극대화합니다.

사용 가능한 MCP 도구

실행 중인 MCP 서버에서 자동 생성되었습니다 — 직접 편집하지 마세요.

축약형 액션 라우팅 도구 (MCP_TOOL_MODE=condensed)

MCP 도구

토글 환경 변수

설명

tm_files

FILETOOL

원격 호스트에서 고급 파일 작업을 수행합니다.

tm_hosts

HOSTTOOL

로컬 호스트 별칭 인벤토리를 관리합니다.

tm_inventory

INVENTORYTOOL

YAML 호스트 그룹에 대한 인벤토리 대량 작업을 수행합니다.

tm_operations

OPERATIONSTOOL

작업 수명 주기 및 세션을 관리합니다.

tm_remote

REMOTETOOL

공통 연결 파라미터를 사용하는 단일 호스트 SSH 작업을 수행합니다.

tm_security

SECURITYTOOL

보안 검사 및 규정 준수를 수행합니다.

tm_system

SYSTEMTOOL

SSH를 통한 원격 시스템 정보를 제공합니다.

tunnel_ingest_hosts

INGESTTOOL

관리되는 SSH 인벤토리를 나열하고 epistemic-graph로 푸시합니다.

상세 1:1 API 매핑 도구 (MCP_TOOL_MODE=verbose 또는 both)

MCP 도구

도구 환경 변수

설명

tunnel_manager_add_host

HOST_MANAGERTOOL

add_host 작업을 호출합니다.

tunnel_manager_get_host

HOST_MANAGERTOOL

별칭으로 호스트 구성을 가져옵니다. 호출자에게 권한이 없는 별칭인 거부합니다.

tunnel_manager_list_hosts

HOST_MANAGERTOOL

호출자에게 권한이 있는 호스트 별칭을 나열하고 비밀 값은 마스킹합니다.

tunnel_manager_load_inventory

HOST_MANAGERTOOL

load_inventory 작업을 호출합니다.

tunnel_manager_remove_host

HOST_MANAGERTOOL

remove_host 작업을 호출합니다.

tunnel_manager_save_inventory

HOST_MANAGERTOOL

save_inventory 작업을 호출합니다.

액션 라우팅 도구 8개 · 상세 1:1 도구 6개. 각 도구는 자신의 <DOMAIN>TOOL 토글이 false로 설정되지 않는 한 활성화되며, MCP_TOOL_MODE가 표면을 선택합니다 (**intent 기본값* — 동사형 도구 6개, 세분화된 도구 세트는 온디맨드로 · condensed 액션 라우팅 · verbose 1:1 · both). 자동 생성이므로 직접 편집하지 마세요.*

상세 도구 스키마, 파라미터 구조, 검증 제약 조건은 docs/usage.md에 있습니다.

동적 도구 선택 및 표시 여부 필터링

이 MCP 서버는 런타임 시 동적 도구 세트 선택과 표시 필터링를 지원합니다. 이를 통해 LLM의 컨텍스트 창이 부풀아 오르는 것을 방지하기 위해 노출되는 도구 세트를 제한할 수 있습니다.

여러 입력 채널을 통해 도구 필터링을 구성할 수 있습니다:

  • CLI 인자: 시작 시 --tools 또는 --toolsets(또는 그 반대인 --disabled-tools 및 --disabled-toolsets)를 전달하세요.

  • 환경 변수: 표준 환경 변수를 정의하세요:

    • MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

    • MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

  • HTTP SSE 요청 헤더: 전송 초기화 중 사용자 지정 헤더를 전달하세요:

    • x-mcp-enabled-tools / x-mcp-disabled-tools

    • x-mcp-enabled-tags / x-mcp-disabled-tags

  • HTTP SSE 요청 쿼리 파라미터: 전송 연결 URL에 쿼리 파라미터를 직접 추가하세요:

    • ?tools=tool1,tool2

    • ?tags=tag1

쿼리 문자열 또는 파라미터가 제공되면 LLM이 필요 없는 지식 그래프 해석 레이어 (DynamicToolOrchestrator 사용)가 쿼리 의도를 알려진 알려진 도구 태그, 도구 이름 또는 설명과 비교하여 일치시키며, 안전한 폴백 및 24시간 백그라운드 자동 캐시 갱신을 제공합니다.


MCP 구성 예시

커넥터 중심의 [mcp] 엑스트라를 설치하세요. 예제는 agent-utilities[mcp]를 통해 tunnel-manager[mcp]로 FastMCP/FastAPI를 추가하는 방식을 사용합니다. Agent Utilities 핵심 모듈은 사용할 때 epistemic-graph[full]을 함께 포함하며, [agent-runtime] 엑스트라는 모델 오케스트레이션을 추가로 활성화합니다.

stdio 전송 (로컬 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"
      }
    }
  }
}

런타임 참조는 GraphOS와 같은 별칭 인식 런처를 필요로 합니다. 그 외 런처는 해당 항목을 생략하고 자신의 런타임 비밀 경계를 통해 해석된 값들을 주입해야 합니다.

Streamable-HTTP 전송 (네트워크/프로덕션 환경)

{
  "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"
      }
    }
  }
}

또는 url을 지정하여 이미 배포된 Streamable-HTTP 인스턴스에 연결합니다:

{
  "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 정책을 제공하세요. 생성자는 인증되지 않은 비루프백 리스너를 생성하지 않습니다.

코드 내에서 읽혀진 환경 표면(MCP_TOOL_MODE + 패키지 변수)에서 자동 생성됩니다 — 직접 편집하지 마세요.

추가 배포 옵션

tunnel-manager는 로컬 stdio 프로세스나 컨테이너로 실행되거나 원격 네트워크 경계 뒤에서 실행할 수 있습니다. 배포 가이드에 자세한 전송 지침이 있습니다.

  • 로컬 컨테이너 — 리뷰된 불변 이미지를 리스너나 공개 포트가 없는 최소 권한 stdio 하위 프로세스로 실행합니다.

  • 원격 URL — 운영자가 제공한 인증된 HTTPS 인그레스를 통해 연결합니다. URL, 아웃바운드 이름 참조, 신뢰 프로필, 정확한 MCP_ALLOWED_HOSTS를 AgentConfig에 유지합니다.


인벤토리

tunnel-manager는 짧은 호스트 별칭(예: edge-node)을 SSH 연결 세부 정보에 연결하는 하나의 단일 읽기 공용 YAML 인벤토리를 기반으로 실행됩니다. 모든 생태계 화면(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

전체 스키마, 각 호스트 필드의 설정, 복사-붙여넣기 템플릿, 재정의 옵션에 대한 내용은 인벤토리 가이드에 있습니다.


환경 변수

패키지 환경 변수

변수

예시

설명

HOST

127.0.0.1

PORT

8000

TRANSPORT

stdio

옵션: stdio, streamable-http, sse

ENABLE_OTEL

True

OTEL_EXPORTER_OTLP_ENDPOINT

http://localhost:8080/api/public/otel

OTEL_EXPORTER_OTLP_PUBLIC_KEY

secret-injected

OTEL_EXPORTER_OTLP_SECRET_KEY

secret-injected

OTEL_EXPORTER_OTLP_PROTOCOL

http/protobuf

EUNOMIA_TYPE

none

옵션: none, embedded, remote

EUNOMIA_POLICY_FILE

mcp_policies.json

EUNOMIA_REMOTE_URL

http://eunomia-server:8000

TUNNEL_IDENTITY_FILE

~/.ssh/id_ed25519

DEBUG

False

PYTHONUNBUFFERED

1

TUNNEL_REMOTE_HOST

—

기본 원격 호스트 (예: 198.51.100.10)

TUNNEL_REMOTE_PORT

22

기본 SSH 포트

TUNNEL_USERNAME

—

기본 SSH 사용자 이름

TUNNEL_PASSWORD_REF

—

env://, vault://, secret:// 또는 sqlite:// 참조

TUNNEL_KNOWN_HOSTS

~/.ssh/known_hosts

독립적으로 검증된 서버 호스트 키

TUNNEL_CERTIFICATE

—

SSH 인증서 파일 경로

TUNNEL_PROXY_COMMAND

—

점프 호스트/배스천 연결용 SSH ProxyCommand

TUNNEL_INVENTORY

—

인벤토리 파일 경로 (기본값: XDG 설정 경로)

TUNNEL_INVENTORY_GROUP

all

대상 인벤토리 호스트 그룹

TUNNEL_PARALLEL

False

호스트 작업을 병렬로 실행

TUNNEL_MAX_THREADS

6

TUNNEL_PARALLEL=True일 때 최대 작업자 스레드 수

TUNNEL_MAX_COMMAND_CHARS

65536

TUNNEL_MAX_OUTPUT_BYTES

1048576

TUNNEL_MAX_TRANSFER_BYTES

268435456

TUNNEL_MAX_FLEET_HOSTS

1000

TUNNEL_MAX_CONCURRENCY

64

XDG_CONFIG_HOME

—

인벤토리 해석을 위한 기본 설정 디렉터리 (기본값: ~/.config)

HOSTTOOL

True

register__tools 등록자별 그룹화된 축약 표면 토글

REMOTETOOL

True

INVENTORYTOOL

True

OPERATIONSTOOL

True

SYSTEMTOOL

True

FILETOOL

True

SECURITYTOOL

True

INGESTTOOL

True

KG 수집 도구 (SSH 인벤토리를 epistemic-graph로 나열)

TUNNEL_KG_INGEST

true

list 시 기본 활성화된 최선 노력 인벤토리 수집

TUNNEL_MANAGER_HEALTH_INGEST

true

기본 활성화된 최선 노력 네트워크 신호 추세 수집

TUNNEL_MANAGER_HEALTH_AGGREGATE_S

3600

샘플이 ONE :HealthTrend 노드/호스트/신호로 응축되는 시간 창(초)

TUNNEL_MANAGER_HOSTS

r510,r710,r820,rw710

프로브/파생할 쉼표로 구분된 인벤토리 별칭 (기본값: 전체 인벤토리)

TUNNEL_MANAGER_HEALTH_NOTIFY_URL

—

네트워크 이상 알림용 최선 노력 웹훅

상속된 agent-utilities 변수 (모든 커넥터에 적용)

변수

예시

설명

MCP_TOOL_MODE

intent

도구 표면: intent | condensed | verbose | both

MCP_ENABLED_TOOLS

—

쉼표로 구분된 도구 허용 목록

MCP_DISABLED_TOOLS

—

쉼표로 구분된 도구 거부 목록

MCP_ENABLED_TAGS

—

쉼표로 구분된 태그 허용 목록

MCP_DISABLED_TAGS

—

쉼표로 구분된 태그 거부 목록

MCP_CLIENT_AUTH

—

아웃바운드 MCP 하위 인증: oidc-client-credentials | basic | none

OIDC_CLIENT_ID

—

OIDC 클라이언트 ID (서비스 계정 인증)

OIDC_CLIENT_SECRET_REF

secret://identity/oidc-client-secret

OIDC 서비스 계정용 런타임 비밀 참조

MCP_BASIC_AUTH_USERNAME

—

HTTP Basic 사용자 이름 (MCP_CLIENT_AUTH=basic)

MCP_BASIC_AUTH_PASSWORD_REF

secret://identity/mcp-basic-password

HTTP Basic 인증용 런타임 비밀 참조 (MCP_CLIENT_AUTH=basic)

MCP_URL

http://localhost:8000/mcp

에이전트가 연결하는 MCP 서버 URL

PROVIDER

openai

에이전트용 LLM 공급자

MODEL_ID

gpt-4o

에이전트용 모델 ID

ENABLE_WEB_UI

True

AG-UI 웹 인터페이스 제공

패키지 44개 + 상속 변수 14개. .env.example + 공유 agent-utilities 세트에서 자동 생성됨 — 편집하지 마세요.

서버가 읽는 모든 변수를 용도별로 그룹화했습니다. 복사하여 사용할 시작점은 .env.example을 참조하세요.

SSH 연결 및 자격 증명

변수

설명

기본값

TUNNEL_IDENTITY_FILE

SSH 개인 키 경로

~/.ssh/id_ed25519

TUNNEL_USERNAME

SSH 사용자 이름

—

TUNNEL_PASSWORD_REF

env://, vault://, secret:// 또는 sqlite:// SSH 비밀번호 참조

—

TUNNEL_KNOWN_HOSTS

독립적으로 검증된 SSH 서버 키 신뢰 저장소

~/.ssh/known_hosts

TUNNEL_CERTIFICATE

SSH 인증서 경로

—

TUNNEL_REMOTE_HOST

기본 원격 호스트

—

TUNNEL_REMOTE_PORT

기본 원격 SSH 포트

22

TUNNEL_PROXY_COMMAND

점프 호스트용 SSH ProxyCommand

—

인벤토리 및 병렬 처리

변수

설명

기본값

TUNNEL_INVENTORY

공유 인벤토리 경로 (.yml 권장, .yaml 레거시 대체)

~/.config/agent-utilities/inventory.yml

TUNNEL_INVENTORY_GROUP

기본 인벤토리 호스트 그룹

—

TUNNEL_PARALLEL

일괄 작업을 병렬로 실행

—

TUNNEL_MAX_THREADS

최대 동시 SSH 작업자 스레드 수

—

XDG_CONFIG_HOME

인벤토리를 확인하는 데 사용되는 기본 구성 디렉터리

~/.config

MCP 서버 / 전송

변수

설명

기본값

TRANSPORT

stdio, streamable-http 또는 sse

stdio

HOST

바인드 호스트 (HTTP 전송)

127.0.0.1

PORT

바인드 포트 (HTTP 전송)

8000

MCP_TOOL_MODE

도구 모드: condensed, verbose 또는 both

condensed

MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

쉼표로 구분된 도구 허용/거부 목록

—

MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

쉼표로 구분된 태그 허용/거부 목록

—

DEBUG

상세 로깅

False

PYTHONUNBUFFERED

버퍼링되지 않은 표준 출력 (권장)

1

도구 토글

각 라우팅된 도구는 해당 토글 환경 변수를 통해 개별적으로 비활성화할 수 있습니다 (false로 설정). 전체 목록은 위의 사용 가능한 MCP 도구 표에 있습니다 (HOSTTOOL, REMOTETOOL, INVENTORYTOOL, OPERATIONSTOOL, SYSTEMTOOL, FILETOOL, SECURITYTOOL).

텔레메트리 및 거버넌스

변수

설명

기본값

ENABLE_OTEL

OpenTelemetry 내보내기 활성화

True

OTEL_EXPORTER_OTLP_ENDPOINT

OTLP 수집기 엔드포인트

—

OTEL_EXPORTER_OTLP_PUBLIC_KEY / OTEL_EXPORTER_OTLP_SECRET_KEY

OTLP 인증 키

—

OTEL_EXPORTER_OTLP_PROTOCOL

OTLP 프로토콜 (예: http/protobuf)

—

EUNOMIA_TYPE

권한 부여 모드: none, embedded, remote

none

EUNOMIA_POLICY_FILE

내장 정책 파일

mcp_policies.json

EUNOMIA_REMOTE_URL

원격 Eunomia 서버 URL

—

에이전트 런타임 ([agent] 전용)

변수

설명

기본값

MCP_URL

에이전트가 연결하는 MCP 서버 URL

http://localhost:8000/mcp

PROVIDER

LLM 공급자 (예: openai)

openai

MODEL_ID

모델 ID (예: gpt-4o)

gpt-4o

ENABLE_WEB_UI

AG-UI 웹 인터페이스 제공

True

에이전트

이 저장소는 완전히 통합된 Pydantic AI 그래프 에이전트를 제공합니다. 에이전트 제어 프로토콜(ACP) 및 에이전트 웹 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-4o

Docker Compose 오케스트레이션

다음 docker/agent.compose.yml은 에이전트, 웹 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을 준수하는 토큰 교환으로 웹 UI / ACP → 에이전트 → MCP로 인증 사용자 자격 증명을 전달합니다.

  • 범위 지정 자격 증명: 실행 컨텍스트는 특정 호출자 ID로 제한됩니다.

런타임 보안 그리드

기능

기능 설명

활성화

도구 가드

사람 개입 검증을 통한 민감도 검사

기본 활성화

프롬프트 주입 방어

입력 스캐닝, 반복 모니터링 및 재귀 루프 차단

기본 활성화

컨텍스트 안전 가드

교착 루프 감지 및 컨텍스트 오버플로 사전 경고

기본 활성화


설치

실행하려는 항목에 맞는 엑스트라를 선택하세요:

엑스트라

설치 내용

사용 시기

tunnel-manager[mcp]

커넥터 중심 MCP 서버 (agent-utilities[mcp] — FastMCP/FastAPI + epistemic-graph[full])

MCP 서버만 실행하는 경우 (가장 작은 설치/이미지)

tunnel-manager[agent]

에이전트 런타임 (agent-utilities[agent-runtime,logfire] — 모델 오케스트레이션 + epistemic-graph[full])

통합 에이전트를 실행하는 경우

tunnel-manager[all]

전체 (mcp + agent + logfire)

개발 / 두 가지 모두 사용하는 경우

# 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 vs :agent)

하나의 다단계 docker/Dockerfile이 --target으로 선택되는 두 개의 적절한 크기의 이미지를 빌드합니다:

이미지 태그

빌드 대상

내용

엔트리포인트

example/tunnel-manager:mcp

--target mcp

tunnel-manager[mcp] — 커넥터 중심, epistemic-graph[full] 포함, 모델 오케스트레이션 스택 없음

tunnel-manager-mcp

example/tunnel-manager@sha256:<digest>

--target agent (기본값)

tunnel-manager[agent] — 에이전트 런타임, 모델 오케스트레이션 + epistemic-graph[full]

tunnel-manager-agent

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 runtime

docker/mcp.compose.yml은 커넥터 중심 :mcp 서버를 실행하고, docker/agent.compose.yml은 공동 배치된 :mcp 사이드카와 함께 에이전트(immutable agent digest)를 실행합니다.

지식 그래프 데이터베이스 (epistemic-graph)

[mcp]와 [agent] 모두 필수 Agent Utilities 코어 종속성(epistemic-graph[full])을 통해 epistemic-graph 엔진을 포함합니다. [mcp] 엑스트라는 서버를 커넥터 중심으로 유지하고, [agent]는 모델 오케스트레이션을 추가로 활성화합니다. 로컬 배포는 번들 엔진을 사용할 수 있습니다. 프로덕션 또는 공유 상태의 경우 epistemic-graph를 전용 데이터베이스 서비스로 실행하고 런타임이 이를 사용하도록 구성하세요. 배포 레시피(단일 노드 + Raft HA), 연결 구성 및 아키텍처 다이어그램은 epistemic-graph 배포 가이드에 문서화되어 있습니다.


문서

전체 문서는 공식 문서 사이트로 게시되며 설치, 배포 및 일상적인 운영에 대한 권장 참조 자료입니다.

페이지

내용

설치

pip, 소스, 엑스트라, 사전 빌드된 Docker 이미지

인벤토리

공유 inventory.yaml — 기본 위치, 생성 방법, 형식, 재정의

배포

MCP 및 에이전트 서버 실행, Compose, Caddy + Technitium, 환경 구성

사용법

MCP 도구, HostManager / Tunnel API, CLI

개요

에코시스템 역할, 분산 SSH 스웜 확장, MCP 구성

Teleport 아키텍처

인증서, 프록시 및 크로스 OS 연결 모델

개념

개념 레지스트리 (CONCEPT:TUN-*)

AGENTS.md는 표준 기여자/에이전트 지침입니다.

유지관리자

프로젝트 기여자 팀이 유지관리합니다. 패키지 메타데이터는 개인 식별 정보 대신 역할 주소를 의도적으로 사용합니다.


기여

기여를 환영합니다! 풀 리퀘스트를 제출하기 전에 로컬 검사를 실행하여 코드 품질을 확인해 주세요:

  • ruff format .를 사용하여 코드 서식 지정

  • ruff check .를 사용하여 코드 린트

  • mypy .를 사용하여 타입 안전성 검증

  • pytest를 사용하여 테스트 스위트 실행

agent-utilities-deployment로 배포

이 패키지를 통합된 agent-utilities-deployment 워크플로로 프로비저닝하세요. 설치된 패키지, 편집 가능한 소스, 또는 불변 컨테이너 경로를 선택하고, AgentConfig에 런타임 비밀 및 TLS 프로필 참조만 기록하며, doctor, 등록, 정책, 관찰 가능성, 롤백 게이트를 실행합니다. 에이전트에게 **"agent-utilities-deployment로 tunnel-manager 배포"**를 요청하세요.

설치 모드

명령

설치된 패키지

uv tool install "tunnel-manager[mcp]", 그런 다음 tunnel-manager-mcp 실행

편집 가능한 소스

uv pip install -e ".[agent]", 그런 다음 tunnel-manager-mcp 실행

불변 컨테이너

운영자가 선택한 오케스트레이터를 통해 registry.example.invalid/tunnel-manager@sha256:<digest> 배포

저장소에는 배포 프로필, 자격 증명 값, 인증서 경로, 또는 환경별 엔드포인트가 포함되어 있지 않습니다. 런타임에 AgentConfig와 구성된 비밀 공급자를 통해 이를 제공하세요.

관리되는 기능 계약

이 패키지는 참조 워크플로로 유지되는 전문 절차와 함께 간결한 표준 스킬 표면을 제공합니다. 현재 MCP 도구, 스킬 메타데이터, connector_manifest.yml, 온톨로지, 매핑, 셰이프, 픽스처, 마이그레이션, 도구 스키마 지문, 인증 메타데이터는 하나의 버전 관리되는 기능 계약을 구성합니다. 이들을 함께 검증하고, 오래된 도구 이름이나 과거의 작업별 스킬 래퍼에 의존하지 마세요.

런타임 엔드포인트, 자격 증명, 인증서 신뢰, 테넌트 ID, 보존, 관찰 가능성 정책은 배포 입력이며 패키징된 값이 아닙니다. 네트워크 전송, 커넥터 수집, GraphOS 위임, 또는 트레이스 내보내기를 활성화하기 전에 구성, 신뢰 및 개인정보 보호를 참조하세요.

Available Tools

8 tools
tm_filesAdvanced File OperationsC
Destructive

Advanced file operations on remote hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPermission mode (recursive_ops/chmod).755
groupNoGroup (recursive_ops/chown).
host1NoFirst host (diff_compare).
host2NoSecond host (diff_compare).
ownerNoOwner (recursive_ops/chown).
actionYesAction: 'recursive_ops', 'content_search', 'watch', 'diff_compare', 'backup'
sourceNoSource path (recursive_ops).
patternNoSearch pattern (content_search).
durationNoMonitor duration secs (watch).
passwordNoSSH password.
usernameNoSSH username.
file_pathNoFile path to compare (diff_compare).
operationNoOperation type: copy, move, delete, list, chmod, chown (recursive_ops).
recursiveNoRecursive search (content_search).
backup_destNoBackup destination (backup).
compressionNoEnable compression (backup).
destinationNoDestination path (recursive_ops/copy/move).
incrementalNoIncremental backup (backup).
max_resultsNoMax results (content_search).
remote_hostNoRemote host.
watch_pathsNoPaths to monitor (watch).
backup_pathsNoPaths to backup (backup).
search_pathsNoDirectories to search (content_search).
identity_fileNoSSH identity file path.
case_sensitiveNoCase-sensitive (content_search).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ManagementC
Destructive

Manage the local host alias inventory.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoSSH port.
userNoUsername.
aliasNoHost alias.
actionYesAction: 'list', 'add', 'remove'
hostnameNoReal hostname or IP.
passwordNoPassword (if no key).
identity_fileNoPath to private key.
proxy_commandNoProxy command.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 OperationsC
Destructive

Bulk inventory operations against YAML host groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
cfgNoLocal SSH config path (copy_ssh_config).
cmdNoShell command (run_command).
keyNoShared key path (configure_key_auth)./app/.ssh/id_ed25519
groupNoTarget group.all
lpathNoLocal file path (send_file).
rpathNoRemote file path (send_file/receive_file).
actionYesAction: 'configure_key_auth', 'mesh_bootstrap', 'run_command', 'copy_ssh_config', 'rotate_key', 'send_file', 'receive_file'
key_pfxNoPrefix for new keys (rotate_key)./root/.ssh/id_
rmt_cfgNoRemote config path (copy_ssh_config)./root/.ssh/config
timeoutNoCommand timeout in seconds.
key_typeNoKey type: rsa or ed25519.ed25519
parallelNoRun parallel.
inventoryNoYAML inventory path (default: $XDG_CONFIG_HOME/agent-utilities/inventory.yaml)./root/.config/agent-utilities/inventory.yml
max_threadsNoMax threads.
lpath_prefixNoLocal dir prefix (receive_file).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 ManagementC
Destructive

Operation lifecycle and session management.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction: 'start', 'get_progress', 'cancel', 'get_metrics', 'list_sessions'
detailsNoAdditional details (start).
total_stepsNoTotal steps (start).
operation_idNoOperation ID (get_progress/cancel/get_metrics).
operation_typeNoType of operation (start).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior3/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 OperationsC
Destructive

Single-host SSH operations with shared connection params.

ParametersJSON Schema
NameRequiredDescriptionDefault
cfgNoSSH config path./root/.ssh/config
cmdNoShell command (run_command).
keyNoKey path (test_key_auth/setup_passwordless).
hostNoRemote host.
lcfgNoLocal SSH config (copy_ssh_config).
portNoPort.
rcfgNoRemote SSH config (copy_ssh_config)./root/.ssh/config
userNoUsername.
lpathNoLocal file path (send_file/receive_file).
proxyNoTeleport proxy.
rpathNoRemote file path (send_file/receive_file).
actionYesAction: 'run_command', 'send_file', 'receive_file', 'check_ssh', 'test_key_auth', 'setup_passwordless', 'copy_ssh_config', 'rotate_key', 'remove_host_key'
id_fileNoPrivate key path./app/.ssh/id_ed25519
new_keyNoNew private key path (rotate_key).
timeoutNoCommand timeout in seconds.
key_typeNoKey type: rsa or ed25519 (setup_passwordless/rotate_key).ed25519
passwordNoPassword.
certificateNoTeleport certificate.
known_hostsNoKnown hosts path (remove_host_key)./root/.ssh/known_hosts

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 AuditingC
Read-onlyIdempotent

Security scanning and compliance.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoSecurity areas to audit (security_audit).
actionYesAction: 'security_audit', 'compliance_check', 'vulnerability_scan', 'access_control_audit'
passwordNoSSH password.
standardNoCompliance standard: cis_benchmark, pci_dss, hipaa (compliance_check).cis_benchmark
usernameNoSSH username.
scan_typeNoScan type: basic, package, config (vulnerability_scan).basic
remote_hostYesRemote host to audit.
identity_fileNoSSH identity file path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 IntelligenceA
Read-onlyIdempotent

Remote system intelligence via SSH.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction: 'get_info', 'discover_services', 'analyze_logs', 'network_topology'
passwordNoSSH password.
patternsNoSearch patterns (analyze_logs).
usernameNoSSH username.
log_pathsNoLog file paths (analyze_logs).
remote_hostYesRemote host.
identity_fileNoSSH identity file path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 GraphC
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoHostGroup name to attach the ingested hosts to.all

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 8 tool updatesv2.0.1
    • First observedtm_files
    • First observedtm_hosts
    • First observedtm_inventory
    • First observedtm_operations
    • First observedtm_remote
    • First observedtm_security
    • First observedtm_system
    • First observedtunnel_ingest_hosts

TDQS

B3/5.0

Scored across 8 tools

Disambiguation3/5

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.

Naming Consistency3/5

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.

Tool Count5/5

Eight tools is a well-scoped set for remote host management, covering operations, inventory, security, and system intelligence without being overwhelming.

Completeness4/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers