Skip to main content
Glama

bridge-mcp

MCP local propio para conectar ChatGPT con MauroPrime mediante OpenAI Secure MCP Tunnel.

El objetivo es tener un puente local controlado por nosotros para operar filesystem, shell, Git, diagnosticos, reinicio seguro, metricas e inteligencia de codigo sin depender de un runner generico.

Estado actual

bridge-mcp current release v0.6.107
Live runtime: v0.6.107
Packaged MSSR: 0.2.32
Mode: Streamable HTTP live; Operational Notice Plane Gate E5 migration/invariant integration closed and live-verified
Project root: D:\Dev\bridge-mcp
Bridge MCP: http://127.0.0.1:3001/mcp
Bridge status: http://127.0.0.1:3001/status
Tunnel admin: http://127.0.0.1:8081
Tunnel profile: bridge-local-http
Rollback: stdio via scripts/start-bridge-watchdog.ps1

Ruta activa recomendada:

ChatGPT
  -> OpenAI Secure MCP Tunnel
  -> tunnel-client profile bridge-local-http
  -> http://127.0.0.1:3001/mcp
  -> bridge-mcp Streamable HTTP en MauroPrime
  -> filesystem / shell / git / procesos / analisis de codigo

stdio sigue disponible solamente como rollback estable.

Related MCP server: DevSpace

Stack

Node.js v24.x
TypeScript
@modelcontextprotocol/sdk
zod
node:sqlite para metricas locales
MCP Streamable HTTP local
OpenAI Secure MCP Tunnel mediante tunnel-client

Arquitectura actual

src/bridge-server.ts
  Router MCP minimo:
  - tools/list
  - tools/call
  - metricas begin/end

src/tool-registry.ts
  Registry modular central

src/tools/*.ts
  Modulos de tools por dominio

src/tools/shared/*.ts
  Helpers transversales

Modulos actuales:

core
file-navigation
file-writing
workflow-guides
images
process
git
project
workspace
cache
bridge-ops
metrics
code-intelligence
code-graph
python-analysis
blender
tablet-whiteboard
bridge-workflow

Contexto de proyecto y guias reutilizables

Para trabajo sustancial en un repositorio, ChatGPT debe llamar una vez a project_context_load con projectRoot y la tarea actual. La tool puede cargar:

<project>/AGENTS.override.md o AGENTS.md
<project>/.mssr/PROJECT_CONTEXT.md
<project>/.mssr/PROJECT_MEMORY.md
<project>/.mssr/PROJECT_STATE.md
<project>/.bridge/workflow-guides/*

AGENTS.md sigue siendo la entrada nativa para Codex. En ChatGPT web, la carga ocurre por instrucciones MCP y project_context_load; las guias aplicables se detectan con workflow_guide_recommend y se incorporan con workflow_guide_load.

MSSR project context es canonical-only: .mssr/project-context.json es el único manifest activo, .mssr/knowledge/ contiene memoria modular durable y .mssr/runtime/ contiene receipts/cache efímeros. project_context_load nunca cae a .bridge/; un repo sin contrato válido devuelve estado no inicializado y debe pasar explícitamente por project_context_initialize. Con un manifest válido, el core se carga primero y @mauroprime/mssr selecciona módulos de contexto/memoria/estado/directivas por intent y stage. project_context_health clasifica ok/watch/review; project_context_audit aplica esa salud recursivamente a un workspace; project_context_capture persiste conocimiento revisado en .mssr/knowledge/ con transacción contenido+manifest. project_change_consistency compara Git, versión, changelog e impacto PROJECT_* y puede bloquear persist, pero ningún audit/watch inventa memoria automáticamente.

Para debugging/recovery MSSR puede cargar selectivamente sólo changelogs/INDEX.md y el changelog de la versión actual. changelogs/LEGACY.md queda fuera del contexto normal y se consulta únicamente para una regresión histórica concreta.

Operational Notice Plane

Bridge usa bridgeNotices como único transporte general de avisos operativos: cola acotada, TTL, deduplicación pendiente, historial reciente y entrega automática dentro de una respuesta MCP posterior. MSSR define la política portable que decide si evidencia acotada merece atención; Bridge observa el host/proyecto y adapta el candidato al transporte. No se crea una segunda cola MSSR.

Trace, outcome, Context Message y aviso operacional son contratos distintos. Un aviso puede sugerir un preflight o una recuperación, pero nunca autoriza ni ejecuta esa acción automáticamente. Tampoco es server push: no puede interrumpir una tool opaca en curso y normalmente llega en el siguiente límite MCP observable.

Desde 0.6.99, Skill Health y Project Context Health comparan cada snapshot diario con el anterior y usan fingerprints estructurales acotados. OK/WATCH estable queda silencioso; REVIEW estable con la misma evidencia no se repite después de que el aviso anterior haya sido drenado; cambios materiales, escaladas/deescaladas y resoluciones sí generan transición. Ver docs/OPERATIONAL_NOTICE_PLANE_ADAPTER.md y la especificación portable de MSSR. Desde 0.6.100, el mismo contrato cubre también lifecycle idle/missing-outcome, mantenimiento de conocimiento y frescura del Context Plane mediante proyecciones portables de MSSR 0.2.20. El timer y los leases siguen siendo responsabilidad del host: idle sólo puede pedir REVIEW, progress/outcome resuelven esa atención y el callback revalida cualquier lease nuevo antes de avisar. La frescura es estado actual (fresh=OK, unknown-only=WATCH, stale/unavailable=REVIEW, conflicting=ERROR), por lo que volver a fresh resuelve el aviso de frescura aunque una deuda durable ya acumulada siga necesitando un cierre explícito de mantenimiento.

Desde 0.6.105, C2e conecta proyecto+memoria con el mismo plano: src/project-situation.ts observa proyectos gestionados que tengan receipts operativamente activos del Context Plane, compara las revisiones entregadas de PROJECT_CONTEXT/PROJECT_MEMORY/PROJECT_STATE/changelogs/ADRs con las revisiones canónicas actuales mediante el MSSR empaquetado y entrega la contradicción a C2c/C2d. En 0.6.107 el paquete MSSR es 0.2.32; /api/mssr/project-situation sigue exponiendo sólo metadata acotada. noticeClass, categoría y prioridad sirven para enrutar atención, pero no crean otra cola ni otra autoridad. Un receipt nuevo/una carga actual reemplaza evidencia vieja para esa autoridad; una alerta puede resolver sin borrar historia. Bridge sólo muestra acciones C2d ready y nunca interpreta prosa libre de memoria como verdad canónica. Ver docs/SITUATION_MODEL_ADAPTER.md.

Desde 0.6.106, Gate E3 preserva el MssrNotice v1 genuino como BridgeNotice.mssrNotice dentro del mismo bridgeNotices: noticeId, dedupe semántico y payload portable quedan intactos; BridgeNotice.id, timestamps, TTL, occurrences, mirrors de UI/details y acciones son metadata de delivery del host. En 0.6.107 / MSSR 0.2.32, Gate E5 cierra la migración: E4 direct-host sigue independiente, los notices Bridge-native y external-MCP conservan su identidad, el schema portable sigue rechazando metadata de delivery/ejecución y la cola general de Bridge sigue siendo una sola. Ver docs/OPERATIONAL_NOTICE_PLANE_ADAPTER.md. Las guias globales viven en integrations/workflow-guides/. Las guias del proyecto tienen prioridad sobre una global con el mismo nombre.

Tools expuestas

El catálogo MCP sigue en 156 tools. La release live 0.6.107 carga @mauroprime/mssr 0.2.32; Gate E5 no agrega otra MCP tool ni otra cola. La adopción quedó probada por full regression, bridge_verify_all con failedRequired=0, watchdog/tunnel live/ready, matriz E5 y relay mssr-notice-v1 preservado.

blender_review_bundle genera en una sola llamada vistas ortográficas múltiples, una hoja de contacto adjunta al resultado MCP y un manifiesto con geometría, materiales, colecciones, visibilidad, rig, acciones, diagnósticos, hashes y confirmación de restauración de la escena.

whiteboard_capture_pc_view solicita una captura fresca al navegador de PC que está viendo TabletWhiteboard, respeta su pan/zoom actual y adjunta el PNG al resultado MCP. Como crea un archivo y un registro SQLite, se clasifica como herramienta mutante neutral, no como consulta de solo lectura. whiteboard_latest_capture y whiteboard_capture_list siguen siendo read-only.

whiteboard_add_text crea cajas de texto estructuradas. whiteboard_add_diagram crea rectángulos, elipses, líneas, flechas, polylines, polígonos, etiquetas y paths SVG con curvas Bézier cuadráticas o cúbicas. whiteboard_add_svg acepta SVG sanitizado, y whiteboard_insert_image sube un PNG/JPEG/WebP local existente después de validar política de rutas, tamaño, MIME y firma. Todas escriben objetos bloqueados dentro de la capa separada de ChatGPT y conservan persistencia, undo/redo, backups, exportación y capturas.

Antes de adjuntar una captura, Bridge compara el tamaño HTTP, los bytes reales, las dimensiones del IHDR y el SHA-256 con los metadatos entregados por TabletWhiteboard. Una inconsistencia cancela la operación.

El origen predeterminado se configura con TABLET_WHITEBOARD_URL. Orígenes privados adicionales deben declararse explícitamente, separados por comas, en TABLET_WHITEBOARD_ALLOWED_ORIGINS. Todos deben usar http://, no incluir credenciales/rutas y apuntar a localhost o una red LAN privada.

$env:TABLET_WHITEBOARD_URL = "http://127.0.0.1:8787"
$env:TABLET_WHITEBOARD_ALLOWED_ORIGINS = "http://192.0.2.10:8787"

Core / lectura / navegacion

system_info
list_dir
read_text_file
read_file_lines
read_many_files
list_files_smart
search_files

Escritura segura

write_text_file
apply_patch
edit_lines

write_text_file, apply_patch y edit_lines hacen verificacion postflight con hash/bytes/contexto cuando corresponde.

Archivos binarios

binary_file_info
binary_file_read_chunk
binary_file_write
binary_upload_begin
binary_upload_append
binary_upload_status
binary_upload_finish
binary_upload_abort

binary_file_write cubre payloads pequenos. Para imagenes, ZIP, GLB u otros binarios grandes, usar el flujo reanudable begin -> append -> status -> finish, con secuencias, validacion de bytes/SHA-256 y escritura atomica. No enviar base64 a write_text_file.

Ejecucion / terminal

run_command
terminal_start
terminal_write
terminal_read
terminal_stop
terminal_list
work_once
work_begin
work_peek
work_show
work_feed
work_finish

Robustez de procesos:

  • Los timeouts terminan el arbol completo del proceso en Windows, no solamente el shell intermediario.

  • Una sesion finalizada por senal se informa como running: false y respeta cleanupAfterMs, incluso cuando vale 0.

  • Los aliases work_* tienen esquemas tipados y las mismas anotaciones de riesgo que sus tools equivalentes.

  • La lista de comandos bloqueados es una barrera contra accidentes, no una sandbox. El Bridge debe mantenerse en un entorno confiable.

Nodos remotos Linux por SSH

remote_node_list
remote_node_status
remote_node_exec
remote_node_upload_file

El módulo remote-node pertenece al Bridge y no requiere que Kairos esté iniciado. La conexión usa ssh2 dentro del proceso Node, una identidad privada configurada localmente y un fingerprint SHA-256 fijado para verificar la clave del host; las tools no aceptan host, usuario ni clave SSH arbitrarios desde el caller. remote_node_status puede recuperar una IP que cambió dentro de un /24 configurado sólo si encuentra una única máquina que autentique con la identidad y el host-key pin esperados. remote_node_exec y remote_node_upload_file requieren repetir exactamente confirmNodeId y están clasificadas como destructivas.

La configuración viva es local/ignorada en data/remote-nodes.json o en la ruta indicada por BRIDGE_REMOTE_NODES_FILE. El ejemplo versionado está en config/remote-nodes.example.json; nunca se commitean claves privadas ni secretos.

Git

git_status
git_diff
git_log
git_show_commit
git_compare_branches
git_create_branch
git_restore_file
git_set_remote
git_commit_all
git_push_current_branch

Los comandos Git validan refs y rutas, limitan la salida y filtran archivos sensibles. git_commit_all hace preflight de archivos modificados, staged y untracked antes de ejecutar git add.

Proyecto / politica de rutas

path_policy_status
project_profile
project_profile_save

project_profile detecta lenguajes, frameworks, package manager, scripts, comandos utiles, archivos importantes y estado Git. project_profile_save guarda overrides separados de los datos detectados en .bridge-project.json.

Snapshots de workspace

workspace_snapshot
workspace_diff
workspace_rollback
workspace_snapshot_list

Los snapshots se guardan fuera del proyecto, excluyen carpetas generadas y archivos sensibles, verifican hashes y rutas antes del rollback y rechazan restauraciones desde snapshots truncados.

Cache persistente

cache_status
cache_prune

El cache JSON tiene TTL, limites de bytes/entradas, poda automatica y dryRun para revisar eliminaciones antes de aplicarlas.

Bridge / salud / restart

tunnel_health
bridge_health
bridge_self_check
bridge_verify_all
bridge_request_restart
bridge_restart_status

Metricas / visualizaciones

bridge_metrics_query
bridge_metrics_status
bridge_metrics_summary
bridge_metrics_recent
bridge_visualization_catalog
bridge_visualize_metrics
mssr_observatory_query
mssr_trace_record
mssr_observatory_epoch_start

Inteligencia de codigo

analyze_code
impact_analysis
find_duplicate_symbols
import_graph
dependency_graph
call_graph
find_dead_code

Motores disponibles:

regex       -> rapido y simple
typescript  -> AST por archivo
semantic    -> TypeScript Program + TypeChecker entre archivos

import_graph y dependency_graph aceptan:

{
  "resolutionEngine": "auto | relative | typescript"
}

Con typescript o auto, el grafo usa el resolver del compilador TypeScript, incluyendo tsconfig.json, baseUrl, paths, barrels/index files y reescritura de extensiones cuando TypeScript puede resolverlas.

Scripts principales

npm install
npm run check
npm run build
npm run smoke:http
npm run test:regressions
npm run verify:all
npm run start
npm run start:http

npm run verify:all ejecuta:

bridge-doctor.ps1
npm run check
npm run build
smoke:http
test:regressions
docs:tools:check
tools/list sanity
git status

Validacion rapida

Set-Location C:\dev\bridge-mcp
npm run check
npm run build
.\scripts\test-bridge-http.ps1
.\scripts\test-bridge-regressions.ps1
.\scripts\bridge-doctor.ps1

Desde MCP, usar preferentemente:

bridge_self_check
bridge_verify_all
bridge_restart_status
git_status

Estado esperado:

bridge_self_check.ok = true
server.version = 0.6.21
tunnel.baseUrl = http://127.0.0.1:8081
tunnel healthz = live
tunnel readyz = ready
git = ## main...origin/main

HTTP local production-candidate

Endpoints locales:

GET  http://127.0.0.1:3001/healthz
GET  http://127.0.0.1:3001/readyz
GET  http://127.0.0.1:3001/status
GET  http://127.0.0.1:3001/dashboard
GET  http://127.0.0.1:3001/api/mssr/summary?days=30&scope=active
POST http://127.0.0.1:3001/mcp

El resumen MSSR separa por caller/modelo las llamadas físicas directas de los fallbacks bridge_tool_query y bridge_tool_action. También informa desvíos de descubrimiento previos a la primera acción de dominio, tiempo hasta esa acción, span de tools y recordatorios por inactividad. Un recordatorio idle no demuestra que la interfaz de ChatGPT haya quedado bloqueada.

Limites y seguridad HTTP:

BRIDGE_MCP_HTTP_MAX_SESSIONS=64
BRIDGE_MCP_HTTP_SOFT_SESSION_LIMIT=16
BRIDGE_MCP_HTTP_MAX_BODY_BYTES=16777216
BRIDGE_MCP_HTTP_SESSION_IDLE_MS=1800000
BRIDGE_MCP_HTTP_CAPACITY_RECLAIM_IDLE_MS=15000
BRIDGE_MCP_HTTP_ANON_TTL_MS=60000

Las inicializaciones usan BRIDGE_MCP_HTTP_SOFT_SESSION_LIMIT como objetivo estable y BRIDGE_MCP_HTTP_MAX_SESSIONS como techo de ráfaga. Al crear una sesión nueva, el Bridge puede reciclar primero la sesión inactiva más antigua que ya supere BRIDGE_MCP_HTTP_CAPACITY_RECLAIM_IDLE_MS; las sesiones activas o recientes quedan protegidas y pueden ocupar temporalmente el margen hasta el hard limit. La admisión de transports nuevos se serializa sólo durante la reserva de capacidad, por lo que inicializaciones concurrentes de ChatGPT Web tampoco pueden sobrepasar el techo duro. Si ese techo se alcanza y no hay una sesión inactiva elegible, responde 503. La política no depende del navegador ni intenta identificar Edge/Chrome: el Bridge HTTP es el adapter de ChatGPT Web, mientras la continuidad/capacidad de otros hosts como Codex pertenece a MSSR y a sus adapters locales, no a este lifecycle HTTP. Los clientes locales de smoke/verificación cierran sus sesiones mediante DELETE /mcp. Los cuerpos JSON que superan BRIDGE_MCP_HTTP_MAX_BODY_BYTES responden 413. El servidor sigue limitado a loopback por defecto.

Perfil de tunel:

bridge-local-http -> http://127.0.0.1:3001/mcp

Admin local del tunnel-client:

http://127.0.0.1:8081

Si aparece 8080, tratarlo como contexto viejo salvo que se haya cambiado intencionalmente el perfil.

Watchdog y restart seguro

Modo HTTP recomendado:

Set-Location C:\dev\bridge-mcp
.\scripts\start-bridge-http-watchdog.ps1 -ProjectRoot C:\dev\bridge-mcp -Profile bridge-local-http -TunnelBaseUrl http://127.0.0.1:8081

Instalacion al inicio de Windows sin admin:

Set-Location C:\dev\bridge-mcp
.\scripts\install-bridge-watchdog-task.ps1 -InstallMode Startup -WatchdogMode Http

Restart seguro desde MCP:

bridge_request_restart

Ese flujo escribe .bridge-restart-request; el watchdog externo reinicia HTTP/tunnel y luego escribe .bridge-restart-ack. No matar node.exe ni tunnel-client.exe directamente desde el MCP activo.

Antes de adoptar o detener un proceso, el watchdog verifica el nombre/version del Bridge, el transporte, el puerto y la linea de comando esperada. Si el puerto pertenece a un proceso desconocido, aborta en vez de matarlo.

Rollback stdio:

Set-Location C:\dev\bridge-mcp
.\scripts\start-bridge-watchdog.ps1 -ProjectRoot C:\dev\bridge-mcp

Metricas y logs

Runtime local:

logs/bridge-events.jsonl
logs/mssr-events.jsonl
data/bridge-metrics.sqlite
data/bridge-metrics.sqlite-wal
data/bridge-metrics.sqlite-shm

Consultas rapidas:

node .\scripts\query-bridge-metrics.mjs status
node .\scripts\query-bridge-metrics.mjs summary 50
node .\scripts\query-bridge-metrics.mjs recent 25
node .\scripts\query-bridge-metrics.mjs errors 25

Variables utiles:

BRIDGE_MCP_METRICS_ENABLED=0
BRIDGE_MCP_METRICS_DIR=...
BRIDGE_MCP_LOG_DIR=...
BRIDGE_MCP_METRICS_SQLITE=...
BRIDGE_MCP_EVENTS_JSONL=...
BRIDGE_MCP_MSSR_EVENTS_JSONL=...
BRIDGE_MCP_MSSR_STATE=...
BRIDGE_MCP_MSSR_TRACE_LEASE_MS=7200000
BRIDGE_MCP_WEB_CLOSURE_IDLE_MS=60000
BRIDGE_MCP_MSSR_UNROUTED_WARNING_MS=60000

Las métricas generales guardan nombres de tools, duración, éxito/error, claves de input y tamaño de salida. No guardan argumentos completos.

El MSSR Observatory agrega trazas correlacionadas para rutas, cargas, replans, fuentes de contexto, verificación, persistencia, outcomes, fricción y correcciones. Con trace-contract-v1, Bridge propaga la traza dentro de una sesión, mediante una lease compartida del proceso y, cuando la memoria del coordinador no está disponible, desde SQLite. Primero exige coincidencia exacta de sesión anónima o proyecto; si el conector rotó esa metadata o la misma tarea pasó a un repositorio relacionado, sólo adopta automáticamente la única traza abierta del mismo caller. Nunca usa el nombre de una skill para elegir entre dos tareas concurrentes. Si varias trazas pueden corresponder, emite mssr-trace-ambiguous y exige un ID explícito. Reinicios históricos y reanudaciones deliberadamente ambiguas también requieren traceId. No se guardan prompts crudos, transcripciones ni cadena de pensamiento.

Cada outcome sustancial declara una sola primarySkill; las supportingSkills quedan como contribución sin duplicar éxito. Reintentos y revisiones reutilizan el mismo trace y el resumen cuenta el último outcome. El dashboard separa routing semántico, continuidad route→load, required-load compliance, verificación/persistencia, éxito, aceptación y score por skill primaria.

Para caller=chatgpt-web, el coordinador arma un watchdog después de actividad sustantiva trazada o de un checkpoint no final. Routing, carga de contexto, catálogo/audit, consultas del observatorio y skill_load son preparación observable y no inician por sí solos la ventana. Si después de trabajo real la traza queda abierta sin outcome durante BRIDGE_MCP_WEB_CLOSURE_IDLE_MS, emite mssr-web-outcome-missing-after-idle y persiste un evento privado closure_reminder. Otra actividad sustantiva reinicia la ventana y un outcome la cancela. El resumen MSSR expone surfaces para comparar cobertura de outcomes y recordatorios entre chatgpt-web, codex-local y otros callers. Este control observa el lifecycle MCP; no puede probar que el navegador haya renderizado el texto final.

La telemetría actual usa una época persistida trace-contract-v1. /api/mssr/summary?scope=active y el dashboard muestran sólo la línea base actual; scope=all conserva la historia anterior para comparar sin borrarla. mssr_observatory_epoch_start abre deliberadamente una línea base activa nueva con confirmación y razón, sin eliminar eventos previos. Las métricas surfaces separan codex-local, chatgpt-web y other; agentProfiles cruza ese caller con model y reasoningEffort (gpt-5.6-terra, gpt-5.6-sol, low, medium, high, etc.). En Codex, Bridge toma automáticamente esos campos de x-codex-turn-metadata cuando el host los entrega; otros hosts pueden declararlos explícitamente. Bridge no los infiere por latencia, longitud o conducta: cuando no puede probarlos registra unknown. MSSR se consulta antes de cadenas especializadas y se replantea al cambiar de fase, ante fallos materiales, cambios de provider/schema, capabilities nuevas o fricción reusable; no se ejecuta entre cada lectura o comando exitoso de la misma fase.

OpenCode aporta esa identidad desde un plugin de host separado: /api/mssr/events acepta mssr-host-call-v1 y guarda agente, modelo, variante, duración, estado e identificadores correlacionables con hash como métricas de ejecución. Estos eventos no inventan outcomes MSSR y nunca contienen prompts, argumentos, outputs ni errores crudos.

La proyección lifecycle usa esa identidad únicamente cuando la llamada host y la ruta comparten el mismo traceId. Si falta evidencia host conserva lifecycle-only; si una traza contiene varios agentes o modelos muestra multiple-observed en vez de elegir el más reciente. Una relación padre de subagente sólo existe cuando OpenCode expone parentID: Bridge persiste su hash y el dashboard muestra únicamente la cardinalidad de padres observados. Las llamadas físicas del Bridge, wrappers y host OpenCode se cuentan por separado de los eventos route/load/checkpoint.

La misma época gobierna ahora las métricas generales de tools. /api/metrics/* y bridge_metrics_* usan scope=active por defecto, mientras scope=all conserva el acumulado. Cada llamada nueva guarda traceId, caller, model y reasoningEffort cuando son observables; el dashboard muestra llamadas, errores y latencia agrupados por ese perfil para no mezclar Codex con ChatGPT Web ni variantes de modelo.

La identidad de superficie también se obtiene del clientInfo del handshake MCP. Una tool genérica o stateless hereda la única traza abierta compatible con su caller para fines de observabilidad, sin inyectar argumentos fuera de schema ni volver a ejecutar MSSR entre llamadas. El dashboard MSSR separa por perfil routing estructurado, route→load, cargas requeridas, verificación, cierre, éxito, aceptación, score, duración, recordatorios de loop y correcciones del usuario.

El dashboard distingue herramientas MCP de skills. Las herramientas son llamadas ejecutables y se agregan por nombre, latencia y error. MSSR registra por separado skills seleccionadas por el router, skills realmente cargadas y un único outcome por primarySkill; las supportingSkills no duplican el éxito de la tarea.

El contador HTTP muestra conexiones MCP retenidas por el servidor, no cantidad de chats de usuario. Una conexión puede quedar idle hasta sessionIdleMs y el límite protege capacidad de transporte. En rendimiento, una traza enrutada sin outcome todavía se muestra como pendiente; no se interpreta como 0% de calidad. Los valores de modelo o esfuerzo no expuestos por el host se presentan como modelo no expuesto / esfuerzo no expuesto. work_once es el alias corto de run_command para ejecutar una única acción local acotada.

ChatGPT también entrega _meta["openai/session"], un identificador anónimo de conversación. Bridge lo vuelve a hashear localmente y deriva además un task_key acotado desde el texto normalizado de project_context_load; no conserva ese texto. El dashboard agrupa una fila por tarea observable, sesión anónima y proyecto primario, en vez de interpretar cada agrupación como otro agente. project_context_load fija el proyecto primario de la sesión. Los repositorios observados después por cwd, path o projectRoot se agregan como relacionados cuando difieren del primario; nunca lo reemplazan. Bridge no guarda el identificador original ni argumentos completos. Esto permite distinguir tareas Web concurrentes y mostrar qué repositorios auxiliares atravesó cada una. Cuando Codex no expone ese identificador, una conexión MCP conserva los proyectos cargados con project_context_load hasta abrir la siguiente ruta: uno se atribuye por nombre y varios se clasifican como multi-project. Las llamadas posteriores heredan el proyecto de la traza; una traza cerrada nunca se pega a otra carga de contexto. Sin evidencia suficiente, la UI muestra ámbito global o proyecto no expuesto y no inventa MyceliumFront desde el directorio del proceso Bridge. La metadata oficial del cliente no incluye el modelo ni el nivel de razonamiento: permanecen unknown en ChatGPT Web salvo declaración explícita. openai/userAgent no se usa para inferirlos porque OpenAI lo define como una pista opcional y best-effort.

Las métricas generales clasifican cada llamada como bootstrap, exempt, traced o unrouted. La cobertura MSSR usa sólo tools elegibles (traced + unrouted), de modo que health, métricas y el propio bootstrap no deprimen artificialmente el porcentaje. Una llamada elegible sin traza emite mssr-unrouted-tool-call con rate limit, pero no se bloquea: MSSR sigue siendo asesor y no sustituye permisos ni ejecución. Al retomar un traceId explícito después de reiniciar, Bridge reconstruye rutas y skills cargadas desde SQLite antes de evaluar los gates de fase.

skill_route_plan y skill_recommend usan responseMode=compact por defecto: devuelven la ruta accionable, nombres, razón corta, obligatoriedad, orden y warnings. responseMode=debug conserva scores, planes de fase y metadata completa. El contenido procedural entra mediante skill_bootstrap o skill_load. Bootstrap usa contentMode=selective por defecto y planifica globalmente el presupuesto. La respuesta compacta distingue el presupuesto procedural (maxContextChars) del sobre serializado completo (maxEnvelopeChars, 32.000 por defecto). Si toda la selección no cabe, devuelve status=partial, mustContinue=true, un cursor opaco y un nextAction exacto hacia skill_context_next; el caller debe encadenar páginas hasta status=complete antes de ejecutar trabajo dependiente. El cursor no contiene prompt, transcript ni texto procedural, se valida contra las bytes y orden vigentes, y falla explícitamente si fue alterado, consumido, caducó, cambió la fuente o reinició el Bridge. Los notices sólo recuerdan una continuación abandonada: no transportan contexto.

Para caller=chatgpt-web, además separa tres estados observables: recommended, accepted/skipped y loaded. Los roots requeridos siguen siendo obligaciones; sólo los roots opcionales reciben una decisión del host. Si un root opcional es accepted, su cierre transitivo de dependencias se mantiene elegible y paginable sin relabelarlo como required; si es skipped, las dependencias que existen únicamente por ese root permanecen fuera del contexto. Un skipped conserva un motivo acotado (irrelevant-domain, redundant, deferred-phase, context-budget, etc.) y no se registra como fallo de carga. El modo auto queda disponible para callers compatibles que no implementan gate explícito.

Bridge puede conservar durante una traza abierta working metadata acotada —resumen resuelto, hipótesis, decisiones/evidencia y próximo gate— únicamente en RAM. mssr_trace_working_update no escribe esa memoria en SQLite. En un outcome, Bridge primero intenta destilar un learning-digest-v1 estricto y luego purga siempre la RAM; un fallo del destilado no retiene la memoria efímera ni bloquea un outcome verdadero. Nunca se copian al digest workingSummary, hipótesis activas, prompts crudos, transcripts, secretos, decisiones arbitrarias de scratchpad ni chain-of-thought privado.

El digest durable conserva sólo consecuencias estructuradas reutilizables: firma semántica canónica, skills recomendadas/cargadas/accepted-skipped, transiciones de stage a skill, decisiones de módulos de contexto de skill/proyecto, metadata final del outcome y únicamente hallazgos que terminaron supported o rejected con evidenceRef. Esto permite analizar continuidad y aprendizaje operativo sin convertir SQLite en un scratchpad histórico.

El coordinador de cierre expone un preflight con closureDue, canCloseSuccess, skills/fases faltantes y nextRequiredAction. Un idle puede producir un aviso stale-open/candidato a cierre, pero no demuestra que ChatGPT haya terminado ni autoriza success. Para recuperación stateless, una traza vieja puede seguir abierta y ser reanudada con traceId explícito mientras deja de competir automáticamente con una ruta fresca después de la ventana de auto-recovery.

En el dashboard, skill_route_plan significa recomendada, la tabla de decisión del host muestra accepted/skipped por skill y firma semántica, y cada evento de carga significa contexto procedural entregado. El observatorio agrega los learning digests por firma exacta para producir tasas empíricas/priores de skill, transición y contexto con umbral mínimo de evidencia. El learning permanece explícitamente observe-only con routingInfluence=false: minEvidence sólo habilita análisis, no activación. Antes de cualquier influencia futura deben pasar colección representativa, auditoría del dataset, replay/holdout, calibración y shadow evaluation. Sólo después una configuración versionada podría habilitar un peso histórico secundario y reversible; required skills, invariantes, permisos y routing determinista siguen siendo autoridad.

El discovery no bloqueante puede reutilizar metadata Roblox cached sin tratarla como una degradación global. Las rutas estructuradas que no incluyen el dominio roblox omiten esa fuente opcional; una ruta Roblox sí exige catálogo vivo antes de cargar o ejecutar capacidades de Studio.

Codex puede compactar una conversación larga. Bridge no recibe un evento privado de compactación y no debe adivinarlo. La recuperación durable es conservar en el resumen operativo el objetivo aceptado, proyecto, fase, restricciones, trabajo completado, referencias pendientes y traceId; al continuar, usar project_context_load cuando corresponda y replanificar con stage=resume, pasando ese contexto acotado y el traceId explícito. Sólo se recargan las skills activas que ya no estén disponibles en el contexto; no se vuelve a cargar todo el grafo. Tras un reinicio del Bridge, el coordinador reconstruye desde SQLite la ruta y las cargas observables de una traza explícita, pero no puede reconstruir texto de skill que el host haya descartado.

Para ChatGPT Web, las métricas confiables son las llamadas que atravesaron Bridge, caller, sesión anónima cuando el host la expone, proyecto declarado, route/load/checkpoints/outcome, errores y duraciones. El chat completo, la salida final de UI, tools nativas del host y el razonamiento privado no son observables; no se copian ni se infieren. Los silencios se estudian como intervalos entre eventos: tiempo hasta primera ruta, desvíos de descubrimiento, duración de tools y pausa desde la última tool hasta un cierre observable.

Modelo de uso desde laptop

Si ChatGPT se usa desde la laptop pero el conector apunta al tunel que corre en MauroPrime, las tools se ejecutan en MauroPrime.

Laptop con ChatGPT UI
  -> OpenAI
  -> Secure MCP Tunnel activo en MauroPrime
  -> bridge-mcp ejecutado en MauroPrime

Para ejecutar tools en la laptop, la laptop necesita su propio bridge/tunnel/profile local.

Seguridad

No commitear:

node_modules/
dist/
binarios del tunnel-client
.env / claves / tokens
logs/
data/*.sqlite*
sandbox local

Mantener secretos como variables de entorno de Windows o perfiles locales fuera de Git.

La politica de rutas limita las tools explicitas a roots permitidos y bloquea rutas sensibles, enlaces simbolicos que escapen y archivos como .env*, credenciales de Git, claves SSH y tokens. Se configura con BRIDGE_MCP_ALLOWED_ROOTS, BRIDGE_MCP_DENIED_PATHS y BRIDGE_MCP_DENIED_NAMES; path_policy_status muestra la politica efectiva.

Las tools Git filtran archivos sensibles de diffs y commits mostrados. git_commit_all se niega a stagear o commitear si detecta una ruta sensible pendiente. Esta politica reduce el blast radius, pero run_command y las terminales siguen siendo shell confiable dentro de un cwd permitido, no una sandbox del sistema operativo.

Docs relacionadas

STATUS_CURRENT.md
docs/REPOSITORY_STRUCTURE.md
TOOLS.md
CONNECTOR_CONTEXT.md
CONNECTOR_PLAYBOOK.md
HTTP_LOCAL_MCP.md
OPENAI_TUNNEL_LOCAL_AUTH.md
RESTART_FLOW.md
BRIDGE_WATCHDOG.md
TROUBLESHOOTING.md
ROADMAP.md
AGENTIC_TOOLS_ROADMAP.md
NEXT_CHAT_PROMPT.md

Nota: ChatGPT puede cachear el catalogo de tools. Si una tool nueva no aparece en una conversacion ya abierta, refrescar/reabrir el conector o iniciar un chat nuevo.

Available Tools

17 tools
apply_patchA

Exact string replacement patch for one text file. Fails if replacement count differs from expectedReplacements.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
newTextYes
oldTextYes
expectedReplacementsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the failure condition on replacement count mismatch but omits details like case sensitivity, atomicity, encoding, and whether the file must exist.

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, front-loaded with the core action and a key constraint, with no wasted words.

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?

No output schema or annotations exist. The description lacks return value details, prerequisites, and behavior on multiple matches, leaving significant gaps for a file-modifying 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?

Schema description coverage is 0%, but the description only provides meaning for expectedReplacements. No information is given about path, oldText, or newText beyond their schema types.

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 clearly states it performs an exact string replacement patch on one text file, specifying a key failure condition. This distinguishes it from sibling tools like write_text_file.

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 implies usage for targeted text replacements but does not explicitly state when to use this tool over alternatives like write_text_file or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_self_checkC

Run typecheck, build, Git status, tunnel health, and terminal inventory.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It fails to mention whether the tool is read-only or has side effects (e.g., does 'build' modify files?). It also does not describe output format, error behavior, or permissions needed.

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 concise sentence that is front-loaded with actions. Every word serves a purpose, but it could be slightly expanded for clarity without being verbose.

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?

For a composite tool performing multiple checks, the description is incomplete. No output schema, no behavioral details, and no parameter explanation. It lacks information on what the tool returns, error handling, or how to interpret results.

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?

The sole parameter 'cwd' has no description in the schema (0% coverage). The description does not explain its purpose, though it is likely the working directory. With low schema coverage, the description should compensate, but it does not provide any parameter details.

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 clearly lists the specific actions (typecheck, build, Git status, tunnel health, terminal inventory) that the tool performs. It specifies the verb 'Run' and the resources, making the purpose understandable. However, it does not differentiate from using individual sibling tools like git_status or tunnel_health separately.

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 on when to use this tool versus running the individual checks separately. The description does not provide any context about prerequisites, when this is appropriate, or when to prefer alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_commit_allC

Stage all changes and create a Git commit if the working tree is dirty.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
messageYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description lacks critical behavioral details: what happens if the working tree is clean, whether untracked files are staged, or any side effects. The single sentence is insufficient for a mutation tool.

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 short (one sentence) and thus concise, but it lacks any structure such as separate sections for use case, parameters, or behavior, making it less scannable.

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 no output schema and two undocumented parameters, the description does not explain return values (e.g., commit hash), error states, or behavior on clean working tree, leaving the agent with significant uncertainty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the tool description does not explain the 'cwd' or 'message' parameters beyond implying 'message' is needed for the commit. No parameter semantics are provided.

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 uses a specific verb ('Stage all changes and create a Git commit') and includes a condition ('if the working tree is dirty'), clearly distinguishing it from sibling tools like git_push_current_branch or git_status.

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 implies usage for committing all tracked changes, but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives like selective staging.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_push_current_branchC

Push the current Git branch to a remote using local credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
branchNo
remoteNoorigin

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description owes full behavioral disclosure. It mentions 'using local credentials' but fails to describe error behavior, authentication requirements, or side effects like remote updates.

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 lacks structure; it is front-loaded but could benefit from separation of purpose and conditions.

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 3 parameters, no output schema, and no annotations, the description fails to cover important details like parameter defaults, error cases, or what happens when branch is omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description adds no explanation for the three parameters (cwd, branch, remote), leaving their meaning and defaults ambiguous.

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 clearly states the action ('Push') and the resource ('the current Git branch'), and it distinguishes this tool from siblings like git_commit_all or git_status by being explicit about pushing to a remote.

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 implies usage for pushing a branch but provides no explicit when-to-use or when-not-to-use guidance, nor mentions alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_set_remoteC

Add or update a GitHub HTTPS remote for the current project.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
remoteNoorigin
repoUrlNohttps://github.com/mauro3422/bridgeWEB-MCP.git

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses mutation ('add or update') but lacks details on side effects (e.g., overwriting existing remotes), permissions, or return behavior.

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 too brief for a mutation tool with three parameters. Lacks structure and detail, impacting usability.

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 no output schema and three parameters, the description fails to explain return values, error conditions, or prerequisites (e.g., must be in a git repo). Incomplete for ensuring correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation for parameters (cwd, remote, repoUrl). Default values are present but not contextualized.

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?

Description clearly states the action ('Add or update') and resource ('GitHub HTTPS remote'), distinguishing it from sibling tools like git_commit_all or git_status.

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 on when to use this tool versus other git tools like git_commit_all or git_push_current_branch. The description implies a prerequisite of an existing git repository, but no explicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_statusB

Return short Git status for the current project.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only says 'short Git status', omitting details like read-only nature, requirement of a Git repository, or behavior when cwd is invalid. No contradictions since no annotations exist.

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?

Single sentence with no filler. Every word is functional and the description 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?

For a simple tool with one optional parameter and no output schema, the description is minimally adequate but lacks explanation of the parameter and what 'short' means. It could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 1 parameter (cwd) with 0% description coverage, and the description does not explain its purpose or impact. Users get no additional meaning beyond the schema.

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 clearly states the tool returns 'short Git status' for the current project. It uses a specific verb ('return') and resource ('Git status'), and easily distinguishes from sibling tools like git_commit_all or git_push_current_branch.

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 on when to use this tool versus alternatives like run_command with 'git status'. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dirC

List a directory recursively with bounded depth and entry limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
depthNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It mentions 'bounded depth and entry limits' but does not state that the operation is read-only, does not describe side effects, permissions, or error behavior. This is insufficient for a fully transparent description.

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, front-loaded sentence that efficiently conveys the core action and constraints. However, 'entry limits' is vague and unnecessary, slightly reducing clarity. Overall, it is concise but could be more precise.

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 no output schema and 0% schema coverage, the description should explain return format, error handling, and the meaning of 'entry limits'. It does not. An agent would lack sufficient information to interpret results or handle errors, making the description incomplete for this tool's complexity.

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?

Schema coverage is 0%, so the description should add meaning for both parameters. It adds context for depth (bounded, recursive) but not for path. 'Entry limits' is mentioned but not reflected in schema, causing confusion. The description partially compensates for depth but fails for path.

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 uses the specific verb 'List' with resource 'directory' and adds constraints 'recursively' and 'bounded depth and entry limits'. It differentiates from sibling tools like read_text_file (file content) and run_command (execution). However, it does not specify what is listed (names, sizes, etc.), leaving some ambiguity.

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 explicit guidance on when to use this tool versus alternatives. The description does not mention when not to use it or any prerequisites. The context of sibling tools implies use for directory listing, but the description itself offers no such guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_text_fileC

Read a UTF-8 text file with a maximum byte limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
maxBytesNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral traits. It discloses that the file must be UTF-8 and a byte limit exists, but does not specify behavior on file not found, encoding errors, or what happens when maxBytes is exceeded (truncation vs error).

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, 60 characters, and is concise. It could be slightly expanded to include key missing details without becoming verbose. Efficiency is good but at the cost of completeness.

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's simplicity and importance as a core file read operation, the description is incomplete. It does not specify return values, error handling, or path constraints, leaving the agent with critical gaps in understanding the tool's behavior.

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?

Schema description coverage is 0%, so the description must compensate. It mentions a 'maximum byte limit' but does not explicitly link it to the maxBytes parameter, and does not describe the 'path' parameter at all. This is insufficient to meet the baseline of 4 for zero 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?

The description clearly identifies the verb 'Read' and the resource 'text file', and distinguishes from sibling 'write_text_file' and 'list_dir'. However, it does not explicitly state what is returned (file contents), which could be inferred but is not stated.

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, nor any exclusions or prerequisites. For example, it does not mention that this tool is for reading existing files, not for creating or modifying them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_commandC

Run a shell command in a cwd with timeout and captured stdout/stderr.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
commandYes
timeoutMsNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions timeout and captured output but omits error handling, exit codes, security implications, and how output is returned.

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?

One sentence of 12 words, efficiently front-loaded with key features. Every word adds value, though parameter details are missing.

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?

Not complete given 3 parameters and no output schema or annotations. Missing return format, error behavior, and security aspects.

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?

Schema description coverage is 0% and the description does not detail individual parameters. It loosely implies cwd and timeout but lacks specifics like default cwd, command format, or timeout behavior.

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 clearly states the verb 'Run' and resource 'shell command' with specifics about cwd, timeout, and captured stdout/stderr. It is distinct from sibling terminal tools, though not explicitly differentiated.

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 on when to use this tool versus alternatives like terminal tools for interactive sessions. No when-not or exclusions provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_infoA

Return basic OS, Node, CPU, memory, hostname and cwd information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries full burden. It discloses the information returned but does not mention any side effects, permissions, or operational details (e.g., whether it queries live data, error conditions).

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?

Single sentence of 10 words, front-loaded with the action and resource, no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool, the description covers the main information categories. However, it could be more complete by mentioning the output format or potential limitations, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema coverage is 100%. The description adds value by enumerating the categories of system information returned, which is necessary since the input schema is empty.

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 explicitly states the verb 'Return' and lists the specific categories of information (OS, Node, CPU, memory, hostname, cwd), clearly distinguishing this tool from sibling tools that handle files, git, terminals, etc.

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, nor are any prerequisites or exclusions mentioned. The description simply states what the tool does without contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_listA

List active persistent terminal sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It clearly states the tool lists active sessions, implying a read-only operation. It does not mention side effects or destructive behavior, which is acceptable for a listing tool.

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 a single sentence that conveys the essential information without any superfluous words. It is optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool, the description is largely complete. It does not describe the output format or any limitations, but given the tool's simplicity, this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so no parameter info is needed. The description adds no param semantics, but the baseline is 4 for a parameterless tool.

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 uses a specific verb 'list' and clearly identifies the resource 'active persistent terminal sessions'. This distinguishes the tool from sibling tools like terminal_start, terminal_stop, terminal_read, etc., which perform different actions.

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 does not provide explicit guidance on when to use this tool versus alternatives, nor does it specify prerequisites or exclusions. The purpose is clear from the name and context, but no usage guidelines are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_readC

Read buffered stdout/stderr from a persistent terminal session.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxCharsNo
sessionIdYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose key behaviors such as whether reading clears the buffer, whether it blocks, or what happens when maxChars is exceeded. The term 'buffered' is ambiguous—does it return all buffered output since last read, or only new? The description lacks sufficient behavioral context.

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, clear sentence that communicates the core function efficiently. It is appropriately front-loaded with the verb and object. However, it could include brief parameter guidance without becoming verbose.

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 simplicity of the tool, the description is minimally sufficient but lacks key contextual details such as the need for an active session, the non-realtime nature of buffered output, and the effect of the maxChars parameter. It does not explain the interaction with other terminal tools (e.g., terminal_start must be called first).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention the parameters sessionId or maxChars at all. The schema has no descriptions for these fields, yet the description adds no information about their purpose or constraints. For example, it does not specify that sessionId must identify an active terminal session or that maxChars limits the number of characters returned.

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 clearly states the verb 'Read', the resource 'buffered stdout/stderr', and the context 'from a persistent terminal session'. It distinguishes from sibling tools like terminal_write (write) and terminal_start (start session).

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 does not provide any guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., need a started session) or scenarios where other tools like run_command or terminal_write would be more appropriate. It simply states the function.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_startC

Start a persistent terminal process and return a session id.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
commandNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the tool is 'persistent' and returns a session id, but does not disclose side effects, resource consumption, timeout behavior, cleanup requirements (e.g., using 'terminal_stop'), or any security/permissions context. This is insufficient for an agent to understand the full behavioral impact.

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, front-loaded sentence with no fluff. It efficiently communicates the core action and result. However, it could include a bit more detail without losing conciseness, hence not a perfect 5.

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's complexity (starting a persistent process with state) and the absence of output schema, the description is too minimal. It lacks information on how to interact with the session (via other terminal tools), the lifetime of the session, or any constraints. More context is needed for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema has no descriptions for 'cwd' or 'command'. The tool description does not explain what these parameters do or provide any examples. The agent must infer from parameter names alone, which is inadequate for reliable usage.

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 clearly states the tool starts a persistent terminal process and returns a session id. It uses a specific verb ('Start') and resource ('persistent terminal process'), and the outcome ('return a session id') is clear. This distinguishes it from sibling tools like 'run_command' (one-off execution) and 'terminal_list'/'terminal_read'/'terminal_stop'/'terminal_write' (control operations on existing sessions).

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. For example, it does not explain when to use 'terminal_start' over 'run_command' for a non-interactive command, or how to handle the session after creation. Missing usage context reduces the agent's ability to choose the correct tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_stopC

Stop and forget a persistent terminal session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description must disclose all behavioral traits. 'Stop and forget' suggests termination and removal from session lists, but does not clarify whether running processes are killed, what happens to output, or if the operation is reversible. This lack of detail is a significant gap.

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 with no unnecessary words, which is concise. However, it could be restructured to incorporate essential parameter or behavioral information without losing brevity.

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's simplicity (1 parameter, no output schema), the description should at least explain what 'forget' means and the effect on terminal listing. The current text omits these details, making it insufficient for an agent to use correctly.

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?

Schema description coverage is 0%, so the description must compensate. It fails to mention the required 'sessionId' parameter, its purpose, or how to obtain it (likely from terminal_start or terminal_list). This leaves the agent with no context for the parameter.

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 phrase 'Stop and forget a persistent terminal session' clearly specifies the action ('stop and forget') and the resource ('persistent terminal session'), distinguishing it from sibling tools like terminal_start, terminal_read, etc.

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 (e.g., terminal_write to send an exit command), nor any prerequisites or scenarios where stopping is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminal_writeC

Write input to a persistent terminal session.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
sessionIdYes

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description adds no behavioral context beyond the obvious. It does not disclose whether the call blocks, if output is returned, or what happens if the session is closed.

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 sentence, which is concise and front-loaded. However, it is under-specified for the complexity of the tool, sacrificing completeness for brevity.

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?

For a terminal input tool with no output schema and zero annotations, the description is severely incomplete. It does not address return behavior, error handling, or prerequisites, leaving an agent with insufficient information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the tool description adds no meaning to parameters. The parameter names (input, sessionId) are self-explanatory, but without format or encoding details, an agent lacks sufficient information.

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 'Write input to a persistent terminal session' clearly states the action (write) and resource (terminal session), distinguishing it from siblings like terminal_read or terminal_start.

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 on when to use this tool vs alternatives (e.g., terminal_read) or prerequisites (session must be active). The description lacks contextual usage hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tunnel_healthB

Check tunnel-client local healthz and readyz endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlNohttp://127.0.0.1:8080

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It states the tool checks endpoints, implying a read-only HTTP operation, but does not mention timeouts, error handling, or side effects. The information is minimal but not misleading.

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 a single concise sentence front-loaded with the verb. Every word contributes meaning with no redundancy.

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 the tool's simplicity (1 parameter, no output schema), the description omits expected return values (e.g., health check response format). An agent lacks information to interpret the result after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for the 'baseUrl' parameter (coverage 0%), and the tool description does not explain its purpose or expected format. The agent receives no guidance on how to use or override the default value.

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 clearly specifies a verb ('check') and a concrete resource ('tunnel-client local healthz and readyz endpoints'). This is specific and distinguishes it from sibling tools like bridge_self_check, which likely targets a different subsystem.

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 (e.g., bridge_self_check, run_command for checking services). There is no mention of prerequisites, context, or scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_text_fileA

Write or append a UTF-8 text file, creating parent directories if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
appendNo
contentYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses directory creation and UTF-8 encoding, but omits critical behaviors: whether write overwrites or truncates, file permission requirements, error handling, and size limits. Provides some context but not comprehensive.

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 a single sentence with a front-loaded verb (Write or append) and resource (UTF-8 text file). It efficiently conveys core functionality without extraneous words.

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 no output schema, no annotations, and 3 parameters, the description lacks details on overwrite semantics, error conditions, path handling, and return values. For a write operation, more behavioral context is needed to ensure safe and correct invocation.

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?

Schema coverage is 0%, so description must compensate. It adds encoding context (UTF-8) and directory creation behavior, but does not explain individual parameters like path (relative vs absolute), content format, or append behavior beyond the implicit meaning. Minimal added value over schema.

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 clearly states the tool writes or appends UTF-8 text files and creates parent directories if needed. It distinguishes from sibling read_text_file by specifying write/append operations, and from apply_patch which modifies files differently.

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 implies usage for creating or modifying text files but does not provide explicit when-to-use or when-not-to-use guidance. It fails to mention alternatives like apply_patch or read_text_file for specific scenarios. Usage context is only implied.

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. 17 tool updatesv0.3.0
    • First observedapply_patch
    • First observedbridge_self_check
    • First observedgit_commit_all
    • First observedgit_push_current_branch
    • First observedgit_set_remote
    • First observedgit_status
    • First observedlist_dir
    • First observedread_text_file
    • First observedrun_command
    • First observedsystem_info
    • First observedterminal_list
    • First observedterminal_read
    • First observedterminal_start
    • First observedterminal_stop
    • First observedterminal_write
    • First observedtunnel_health
    • First observedwrite_text_file

TDQS

B3.2/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct action-resource pair (file operations, git commands, terminal sessions, system info, self-check), with no overlap in purpose.

Naming Consistency5/5

All tools follow a clear verb_noun pattern using snake_case, making them predictable and easy to distinguish.

Tool Count4/5

At 17 tools, the server covers several domains but is on the higher side; each tool is justified, but the set could be trimmed without losing functionality.

Completeness3/5

The file toolset lacks delete, rename, and search; git lacks branch management and pull; terminal is complete. Overall, gaps in basic CRUD for files and git limit completeness.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers