Skip to main content
Glama

servidor-mcp

Servidor MCP para que las IAs (Claude Code, Claude Desktop, Cursor, VS Code…) trabajen en tus servidores Linux por SSH, sin darles tu contraseña y sin instalar nada en el servidor.

Tú:   srv-mcp on dev             → escribes la contraseña → sesión SSH abierta (8h)
IA:   ejecutar_comando(...)      → usa esa sesión abierta, sin contraseña
Tú:   srv-mcp off dev            → la IA pierde el acceso al instante

Herramientas que recibe la IA

Herramienta

Qué hace

listar_servidores

Servidores registrados y si su sesión está abierta

estado_sistema

Carga, memoria, disco, top procesos, servicios caídos, Docker

ver_logs

journalctl de un servicio, docker logs, un archivo o el sistema; con filtro

leer_archivo

Primeras o últimas N líneas de un archivo

escribir_archivo

Crea/reemplaza un archivo, con respaldo .bak.<fecha> automático

ejecutar_comando

Cualquier comando de shell (no interactivo)

Cada llamada aparece en tu cliente de IA con el comando exacto, y queda en la bitácora ~/.srv-mcp/logs/<servidor>.log (srv-mcp log <servidor>).

Related MCP server: ssh-pro-mcp

Antes de empezar (lo hace el administrador de los servidores)

  1. Crear un usuario SSH propio para cada persona en cada servidor (no compartan usuarios: así la bitácora y los permisos son de cada quien y se puede revocar a uno sin afectar a otros).

  2. Opcional, para que pueda leer logs de servicios (journalctl), en cada servidor: sudo usermod -aG systemd-journal <usuario>

Guía paso a paso (cada persona, en su Mac o Linux)

Requisitos: Python 3.11+, OpenSSH y git. Los comandos funcionan desde cualquier carpeta.

1. Instalar

Opción A: plugin de Claude Code (recomendada). Dentro de Claude Code:

/plugin install servidor-mcp --marketplace Daniel-Riv/servidor-mcp

En versiones anteriores a 2.1.275, en dos pasos: /plugin marketplace add Daniel-Riv/servidor-mcp y luego /plugin install servidor-mcp@servidor-mcp.

O desde la terminal (sirve también si usas la app de escritorio):

claude plugin marketplace add Daniel-Riv/servidor-mcp
claude plugin install servidor-mcp@servidor-mcp

Abre una sesión nueva: al iniciar, el plugin prepara Python solo (unos segundos la primera vez). Para tener el comando srv-mcp en tu terminal, crea el atajo una vez:

mkdir -p ~/bin && ln -sf ~/.claude/plugins/data/servidor-mcp-servidor-mcp/srv-mcp ~/bin/srv-mcp

(si ~/bin no está en tu PATH: echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc). El comando en Claude es /servidor-mcp:access-server. Se actualiza con /plugin update servidor-mcp.

Opción B: clonar el repo (sin plugins, o para usar el MCP con otras IAs):

git clone https://github.com/Daniel-Riv/servidor-mcp.git ~/servidor-mcp && ~/servidor-mcp/instalar.sh

El instalador crea .venv con las dependencias, deja el comando srv-mcp en ~/bin (y lo agrega al PATH) e instala la skill como /access-server.

No uses las dos opciones a la vez (tendrías la skill duplicada). Abre una terminal nueva al terminar. Comprueba con srv-mcp: debe mostrar la ayuda.

2. Registrar cada servidor

srv-mcp setup

Hace estas preguntas (escribe la respuesta y Enter):

Pregunta

Qué responder

Nombre corto

Un alias sin espacios, ej. principal, dev, prod

IP o dominio

La dirección del servidor

Usuario SSH

Tu usuario en ese servidor

Puerto SSH

Enter si es 22

¿Se entra pasando por otro servidor?

Enter si entras directo desde tu Mac. Si primero hay que entrar a otro servidor, escribe el alias de ese (debe estar registrado antes)

¿Solo lectura?

s para que la IA no pueda hacer cambios (recomendado en producción), n si puede

Ejemplo con un servidor principal y dos máquinas internas (dev y prod) a las que se llega desde él:

Tu Mac ──▶ principal (IP pública) ──▶ dev  (IP interna)
                                  └──▶ prod (IP interna)

Servidor

IP

¿Pasando por otro?

¿Solo lectura?

principal

IP pública

Enter (directo)

n

dev

IP interna

principal

n

prod

IP interna

principal

s

Registra primero el principal, luego los demás. Revisa con srv-mcp list.

3. Abrir la sesión

srv-mcp on dev
  • La primera vez pregunta Are you sure you want to continue connecting (yes/no)? → yes.

  • Pide tu contraseña. Mientras la escribes no se ve nada, es normal; Enter al final.

  • Si el servidor pasa por otro, pide primero la contraseña de ese (si no estaba abierto).

  • La sesión dura 8 horas. srv-mcp status muestra cuáles están abiertas (●).

Comprueba que funciona sin pedir contraseña:

srv-mcp run dev "hostname && uptime"

4. Usarlo con Claude Code

En una sesión nueva de Claude:

/servidor-mcp:access-server revisa el estado de dev

(Con la opción B el comando es /access-server.) Claude solo toca servidores cuando escribes ese comando. Cada comando te lo muestra antes de ejecutarlo; los cambios los consulta primero. Al terminar:

srv-mcp log dev     # qué ejecutó la IA
srv-mcp off dev     # cortar el acceso

Actualizar

cd ~/servidor-mcp && git pull && ./instalar.sh

Problemas comunes

Síntoma

Causa y solución

command not found: srv-mcp

La terminal se abrió antes de instalar. Abre una nueva (o usa ~/bin/srv-mcp).

Permission denied (publickey,password)

La sesión no está abierta o expiró: srv-mcp on <servidor>.

Could not resolve hostname <nombre>

Ese alias no existe; revisa srv-mcp list (usa el nombre exacto que registraste).

srv-mcp setup "se queda quieto"

Está esperando tu respuesta: escríbela en la terminal y Enter.

journalctl muestra -- No entries --

Tu usuario no está en el grupo systemd-journal (ver "Antes de empezar").

La IA dice "está en modo 'lectura'"

Ese servidor es solo lectura; se cambia en ~/.srv-mcp/config.toml.

El comando no aparece en Claude

Abre una sesión nueva. Plugin: revisa que esté activo en /plugin. Opción B: vuelve a correr ./instalar.sh.

No encuentro el entorno de Python

Plugin: abre una sesión nueva para que se prepare (necesita Python 3.11+). Opción B: corre ./instalar.sh.

sudo falla

No es interactivo: corre ese comando tú mismo, o configura NOPASSWD para él.

Otras IAs (Claude Desktop, Cursor…): servidor MCP

La skill usa srv-mcp run/estado/logs/leer/escribir, con las mismas reglas y bitácora que el servidor MCP. Si prefieres que Claude Code pueda usarlo sin /, instala con ./instalar.sh --mcp.

Para otros clientes, el comando del servidor es la ruta absoluta a .venv/bin/servidor-mcp.

En el archivo de configuración MCP del cliente:

{
  "mcpServers": {
    "servidor": { "command": "/ruta/a/servidor-mcp/.venv/bin/servidor-mcp" }
  }
}
  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Cursor: ~/.cursor/mcp.json

Referencia de comandos

srv-mcp setup             # registrar un servidor
srv-mcp list              # servidores registrados
srv-mcp on <servidor>     # abrir sesión (pide contraseña)
srv-mcp status            # qué sesiones están abiertas
srv-mcp log <servidor>    # qué ejecutaron las IAs
srv-mcp off <servidor>    # cerrar sesión
srv-mcp run <servidor> "comando"   # ejecutar a mano con las mismas reglas

Para quitar un servidor, borra su bloque (# srv-mcp: <alias> … # srv-mcp: fin <alias>) de ~/.ssh/config y su sección en ~/.srv-mcp/config.toml, si tiene.

Permisos (~/.srv-mcp/config.toml)

Por defecto todo está permitido. Cada usuario lo cambia en su archivo (ver config.ejemplo.toml):

modo = "lectura"                       # "completo" (defecto) o "lectura"
bloqueados = ['\breboot\b', 'rm -rf']  # regex que se rechazan siempre
timeout = 120                          # segundos por comando

[servidores."prod"]                    # ajustes por servidor (setup lo crea si eliges solo lectura)
modo = "lectura"
bloqueados = ['virsh destroy']

Los cambios aplican en la siguiente llamada; no hay que reiniciar nada.

El modo "lectura" rechaza comandos que parecen modificar el servidor (rm, mv, systemctl restart, apt install, docker stop/rm/down, redirecciones >…). Es una red de seguridad contra errores de la IA, no un límite de seguridad. El límite real es el usuario SSH: para acceso realmente restringido, crea en el servidor un usuario sin sudo y regístralo con srv-mcp setup.

Seguridad

  • La contraseña solo la escribes tú en tu terminal; queda un socket local en ~/.ssh/cm/ que solo tu usuario del Mac puede usar.

  • Solo se aceptan servidores registrados con srv-mcp setup.

  • Mientras la sesión esté abierta, la IA puede hacer lo que tu usuario SSH pueda hacer. Ciérrala con srv-mcp off al terminar.

  • sudo con contraseña no funciona (no es interactivo). Para permitir comandos concretos, configura NOPASSWD solo para ellos en el servidor.

Desarrollo

.venv/bin/pip install -e ".[dev]" && .venv/bin/pytest

Las pruebas usan un ssh falso (tests/fake_ssh) que ejecuta en local.

Available Tools

6 tools
ejecutar_comandoA
Destructive

Ejecuta un comando de shell en el servidor y devuelve código de salida, stdout y stderr.

No es interactivo: comandos que piden datos (contraseñas, confirmaciones, editores) fallan o se cancelan al agotar el tiempo. Usa flags como -y o --no-pager.

NameRequiredDescriptionDefault
comandoYes
servidorYes
timeout_segundosNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the risk profile is known. The description adds genuinely non-obvious behavior: it will hang or fail on any prompt for input and hit the timeout. It still doesn't mention privilege level of the remote shell or that output of destructive commands is unrecoverable.

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?

Front-loaded with purpose and return values, then a short second paragraph for the non-interactive caveat. Two sentences plus one, every one earning its place.

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?

An output schema exists, so return values are covered structurally. But for a destructive open-world tool with 0% parameter coverage, the description leaves meaningful gaps: the timeout parameter is unexplained and there is no signal about the privileges the remote command runs with.

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% — none of the three parameters is documented anywhere. The description only obliquely references 'el servidor' and says nothing about timeout_segundos, which is exactly the parameter most relevant to the timeout behavior it describes. Given the coverage gap, the description needed to compensate and does not.

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?

States a specific verb and resource ("Ejecuta un comando de shell en el servidor") and even names the return payload (exit code, stdout, stderr). It never positions itself against the more specific siblings (leer_archivo, ver_logs, estado_sistema), so the agent must infer that this is the generic escape hatch.

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?

Gives operational guidance (must be non-interactive, use -y/--no-pager) but no selection guidance: nothing says when to prefer this over escribir_archivo or ver_logs, or when it should be avoided. Usage is implied rather than directed.

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

escribir_archivoA
Destructive

Crea o reemplaza un archivo de texto en el servidor.

Si el archivo existe y respaldo=True, primero lo copia a .bak.. No usa sudo: solo funciona en rutas donde el usuario SSH puede escribir.

NameRequiredDescriptionDefault
rutaYes
respaldoNo
servidorYes
contenidoYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is known. The description adds real context beyond that: existing files are replaced, a backup named '<ruta>.bak.<fecha>' is made when respaldo=True, and writes require SSH-user permissions because sudo is not used. It does not explicitly warn that respaldo=False makes the overwrite irreversible.

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?

Three short lines, front-loaded with the core action, followed by the backup condition and the permission constraint. No filler sentences; each line adds operational 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 destructive file-write tool with annotations and an output schema present, the description covers the key operational facts: overwrite semantics, backup behavior, and permission requirements. The main gaps are the meaning/format of 'servidor' and any encoding or size notes for 'contenido'.

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 0%, so the description must carry parameter meaning. It does well for 'respaldo' (default true, backup naming convention) and implies 'ruta' is the target path, but 'servidor' and 'contenido' are left unexplained in both schema and description.

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 verb and resource: 'Crea o reemplaza un archivo de texto en el servidor.' That clearly distinguishes it from the read-oriented siblings like leer_archivo and listar_servidores. It stops short of naming a sibling or clarifying boundaries against ejecutar_comando, which could also write files.

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 conditional 'Si el archivo existe y respaldo=True' gives a concrete behavioral rule for the backup path, and the sudo note implies a permission prerequisite. But there is no explicit when-to-use vs. alternatives guidance, such as when to prefer ejecutar_comando or leer_archivo first.

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

estado_sistemaB
Read-only

Resumen de salud: uptime/carga, memoria, disco, procesos que más consumen, servicios systemd caídos y contenedores Docker.

NameRequiredDescriptionDefault
servidorYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the breadth of collection (systemd + Docker + process sampling), which hints at a potentially slow aggregation call, but it never says so outright, nor does it mention auth or failure behavior for unreachable hosts.

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 dense sentence that front-loads the purpose ('Resumen de salud') and then lists payload contents; nothing is redundant. The comma-spliced list is slightly harder to scan than a structured breakdown but wastes no words.

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?

An output schema exists, so return values need not be spelled out, and annotations cover the read-only profile. What remains missing is the only input parameter's semantics and any note about cost/latency of a multi-subsystem probe — a real gap for a one-required-param tool with 0% schema coverage.

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 single required parameter 'servidor' is documented nowhere — the schema only carries the title 'Servidor'. The description never mentions the parameter, so an agent gets no help on expected format (hostname vs. IP vs. alias from listar_servidores) for the one input it must supply.

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?

States a specific resource (health summary) and enumerates exactly what is gathered: uptime/load, memory, disk, top processes, failed systemd services and Docker containers. That inventory distinguishes it well from siblings like ver_logs or leer_archivo, though it never names an alternative explicitly.

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 enumerated data categories imply the use case (a diagnostic snapshot of a machine), but there is no explicit 'use this when…' statement, no exclusion of when to prefer ver_logs or ejecutar_comando, and no prerequisites such as needing a reachable server.

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

leer_archivoB
Read-only

Lee un archivo de texto del servidor (las primeras o últimas N líneas).

NameRequiredDescriptionDefault
rutaYes
lineasNo
servidorYes
desde_el_finalNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the meaningful behavioral detail that reads are truncated to a first-or-last N-line window rather than returning the whole file. It does not mention behavior on a missing/unreadable path, encoding, or size limits, so it is additive but not rich.

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?

A single front-loaded sentence with zero filler and the key scoping detail in parentheses. It is efficient, though the extreme brevity shifts work into the undocumented parameters rather than being optimally sized for a 4-parameter tool.

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?

An output schema exists, so return values need no explanation, and annotations cover safety and open-world behavior. Still, for a tool with 4 parameters at 0% schema coverage and a crowded sibling set (ver_logs, ejecutar_comando), the description lacks the routing guidance and parameter semantics an agent needs to call it correctly the first time.

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 0%, so the description carries the full explanatory burden, and it does map conceptually onto all four parameters (servidor, ruta, lineas as N, desde_el_final as first-vs-last). However, it adds nothing about path format (absolute vs relative), what a valid servidor identifier looks like, or that lineas affects how desde_el_final behaves, leaving gaps the agent must infer.

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?

States a concrete verb and resource ("Lee un archivo de texto del servidor") plus a clear scope qualifier ("las primeras o últimas N líneas"), so an agent knows exactly what operation this performs. It does not name or differentiate itself from siblings such as ver_logs, which is the closest ambiguity in the set.

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 contains no when-to-use or when-not-to-use guidance; nothing tells the agent to prefer leer_archivo over ver_logs or ejecutar_comando for inspecting remote content. The only usable cue is the implicit read-only nature of the operation, which the annotations already state.

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

listar_servidoresA
Read-only

Lista los servidores registrados y si su sesión SSH está abierta.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral detail that it reports live SSH session state, but says nothing about whether it actively probes each server, latency, or permission requirements for a network-touching (openWorld) read.

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?

A single front-loaded sentence with zero waste that names both the resource and the key returned signal. Nothing to trim and nothing buried.

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?

An output schema exists, so return-value explanation is not required, and with zero parameters and clear read-only annotations the description is nearly sufficient. The only missing piece is a hint about when to reach for this versus estado_sistema, which is minor for such a simple tool.

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?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly implies no input is needed to obtain the server list.

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?

States a specific verb and resource ("Lista los servidores registrados") and adds the returned attribute (whether the SSH session is open). This is clearly a discovery/enumeration tool, distinguishable from execution siblings like ejecutar_comando or escribir_archivo, though it never names them explicitly.

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?

No explicit when-to-use, when-not-to-use, or prerequisite guidance is given. The usage is only implied by the purpose: an agent would infer it should call this first to discover available servers before invoking ejecutar_comando. The routing is inferable but not stated.

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

ver_logsB
Read-only

Últimas líneas de logs.

tipo: "servicio" (unidad systemd, ej. nginx), "docker" (nombre del contenedor), "archivo" (ruta, ej. /var/log/nginx/error.log) o "sistema" (journal completo). filtro: texto o regex para grep -iE. desde: solo para servicio/sistema/docker, ej. "1 hour ago" o "2026-10-28 08:00" (docker usa formato como "1h").

NameRequiredDescriptionDefault
tipoYes
desdeNo
filtroNo
lineasNo
nombreNo
servidorYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive, open-world profile, and the description adds non-obvious behavior: filtro is applied as grep -iE, and the time format differs per tipo (docker wants "1h" while others accept "1 hour ago" or a timestamp). It does not say what happens with an invalid nombre or whether lineas truncates output, so it stops short of full disclosure.

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?

Purpose is front-loaded in one line, followed by compact per-parameter notes with no filler. The only structural weakness is that the tipo notes and the target-name examples are merged into one line, which is where the ambiguity comes from.

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 6-parameter tool with a required "nombre"/"servidor" pair and zero schema descriptions, the definition leaves too much unsaid. The output schema excuses it from explaining return values and annotations cover safety, but the missing meaning of nombre, lineas and servidor is a genuine gap.

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 carries the whole burden, and it only documents tipo, filtro and desde. Worse, it attaches the unit/container/path examples (nginx, /var/log/nginx/error.log) to "tipo", which is an enum — it never explains that those values belong in the required "nombre" parameter. "lineas" and "servidor" are left entirely undefined, inviting a malformed call.

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?

"Últimas líneas de logs" states a concrete verb+resource (tail recent log lines) and the tipo enumeration makes the scope of log sources explicit. It is distinguishable from siblings like leer_archivo or estado_sistema, though it never names those alternatives directly.

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 gives useful per-tipo guidance and correctly restricts "desde" to servicio/sistema/docker (implying archivo ignores it), which is real usage guidance. However, it never says when to prefer this over leer_archivo or estado_sistema, nor does it state preconditions such as the server needing to be reachable.

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. 6 tool updatesv0.2.0
    • First observedejecutar_comando
    • First observedescribir_archivo
    • First observedestado_sistema
    • First observedleer_archivo
    • First observedlistar_servidores
    • First observedver_logs

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct operation (listing servers, running commands, health summary, logs, file read, file write) and the boundaries are explained in the descriptions. There is some functional overlap, since ejecutar_comando could technically do log tailing or file reads, but the specialized tools exist as safer/easier conveniences and are clearly named.

Naming Consistency4/5

Names follow a Spanish verb_noun pattern consistently (listar_servidores, ejecutar_comando, ver_logs, leer_archivo, escribir_archivo), with snake_case throughout. The one deviation is estado_sistema, which is a noun phrase rather than verb_noun, but it remains readable and predictable.

Tool Count5/5

Six tools is a well-scoped set for remote server administration: connectivity, command execution, health overview, logs, and file read/write. No tool feels redundant or gratuitous.

Completeness4/5

The core lifecycle for operating a remote server is covered: discover servers, run commands, inspect health and logs, read and write files. The main gap is the lack of a directory-listing or file-transfer operation, so agents must guess paths or fall back to ejecutar_comando with ls/cat, which is a workable but indirect path.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to securely execute remote SSH commands, perform file transfers, and monitor system status through a standardized interface. It features robust security controls including command whitelisting, blacklisting, and credential isolation to prevent unauthorized operations.
    10
    11 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage remote servers via SSH, including command execution, multi-host batch operations, SFTP file transfer, background job handling, DevOps diagnostics, port tunneling, and safety guardrails like high-risk command blocking and read-only mode.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to securely connect to and manage remote servers via SSH, with tools for running commands, file operations, log inspection, service management, and system monitoring under configurable access controls and audit logging.
    12
    5 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI-controlled administration of remote Linux hosts and containers, including bounded shell execution, persistent PTY sessions, durable jobs/tasks, hardened filesystem access, process/service control, and resumable transfers.
    -