Skip to main content
Glama

MCP RPort (Queo IoT)

Servidor MCP para la consola RPort self-hosted:

https://iot.console.queo.com.co

Permite a un agente de Cursor (u otro cliente MCP) listar Raspberry Pi y otros clientes, inspeccionarlos y abrir o cerrar túneles SSH contra el servidor RPort. No ejecuta SSH por sí mismo: crea el túnel en RPort y devuelve el comando (ssh -p PUERTO pi@iot.console.queo.com.co).

Este MCP no expone ejecución remota de comandos/scripts ni el vault de RPort a propósito: un token de API con esas tools equivaldría a control completo de la flota.

Requisitos

  • Node.js 20+

  • Usuario en la consola RPort

  • Token de API personal (no uses la contraseña de login)

Related MCP server: OpenMesha

Crear el token en RPort

  1. Entra en https://iot.console.queo.com.co

  2. Menú de usuario (arriba a la derecha) → SettingsAPI Tokens

  3. Genera un token. Se muestra una sola vez; guárdalo.

  4. El token hereda los permisos del usuario. Conviene un usuario que pueda ver clientes y crear túneles, no un admin global.

Autenticación contra la API: HTTP Basic con usuario:token hacia https://iot.console.queo.com.co/api/v1.

Instalación

cd ~/mcp-rport
cp .env.example .env
# Edita .env: RPORT_API_USER y RPORT_API_TOKEN
npm install
npm test
npm run build

Comprueba credenciales (imprime JSON de la API, no arranca MCP):

set -a && source .env && set +a
npm run cli -- status
npm run cli -- me
npm run cli -- clients

Configurar Cursor (MCP)

El servidor se lanza por stdio. Cursor ejecuta bin/run-mcp.sh, el script carga .env y arranca dist/index.js. No pongas RPORT_API_TOKEN ni RPORT_SSH_PASSWORD en el JSON: esos secretos viven solo en .env (gitignored).

1. Preparar el repo

cd /ruta/a/mcp-rport
cp .env.example .env
chmod 600 .env
# Edita .env: RPORT_API_USER, RPORT_API_TOKEN (y RPORT_SSH_PASSWORD si usarás rport_ssh_exec)
npm install
npm run build
chmod +x bin/run-mcp.sh

Sustituye /ruta/a/mcp-rport por la ruta absoluta de tu clone. Cursor no expande ~ ni $HOME en command.

2. JSON para ~/.cursor/mcp.json

Archivo global de MCP de Cursor: ~/.cursor/mcp.json.

Si el archivo no existe, créalo con esto (cambia la ruta):

{
  "mcpServers": {
    "rport": {
      "command": "/ruta/a/mcp-rport/bin/run-mcp.sh"
    }
  }
}

Si ya tienes otros servidores en mcpServers, añade solo la entrada rport junto a ellos. Ejemplo mínimo a fusionar:

"rport": {
  "command": "/ruta/a/mcp-rport/bin/run-mcp.sh"
}

No hace falta args ni env si usas el wrapper: Node y las variables salen de .env.

3. MCP a nivel de proyecto (opcional)

En lugar del archivo global, puedes poner el mismo objeto en <workspace>/.cursor/mcp.json. Sirve si solo quieres RPort en un repo concreto. La forma del JSON es idéntica (mcpServers.rport.command).

4. Activar en Cursor

  1. Guarda mcp.json.

  2. Cursor Settings → MCP (o Features → MCP): debería listarse rport.

  3. Si no aparece o queda en rojo: recarga el servidor, o cierra y abre Cursor.

  4. Comprueba que salen las tools rport_* (lista, túneles, rport_ssh_exec, etc.).

También puedes pegar el JSON desde Settings → MCP → Add new global MCP server; Cursor escribe el mismo ~/.cursor/mcp.json.

5. Si no arranca

Síntoma

Qué revisar

Servidor rojo / no tools

Ruta de command incorrecta; falta chmod +x bin/run-mcp.sh

falta dist/index.js

npm run build en el repo

Falta RPORT_API_USER / token

.env incompleto o no está junto al script (<repo>/.env)

HTTP 401

Usuario o token de API mal copiados

node: not found

Cursor se lanzó sin PATH de Node; usa ruta absoluta a node en el shebang o arranca Cursor desde una terminal con Node

Detalle de recarga, skill y prompts: docs/cursor.md.

6. Skill del agente (opcional pero recomendado)

El MCP expone las tools; la skill rport-iot le dice al agente cómo usarlas. Instalación en docs/cursor.md#skill-rport-iot:

mkdir -p ~/.cursor/skills/rport-iot
cp /ruta/a/mcp-rport/SKILL.md ~/.cursor/skills/rport-iot/SKILL.md

Reinicia Cursor. No requiere entrada en mcp.json.

Tools

Tool

Qué hace

rport_get_status

Salud y versión del servidor

rport_whoami

Usuario y grupos del token

rport_list_clients

Inventario (filtros: name, hostname, connected/disconnected, tag, search)

rport_get_client

Detalle por id; opcional procesos y mountpoints

rport_list_client_groups

Grupos de clientes

rport_list_tunnels

Túneles activos + comando de acceso

rport_create_tunnel

Abre túnel (SSH por defecto al puerto 22)

rport_exec_command

Comando por el agente RPort (sin SSH; filtros allow/deny)

rport_ssh_exec

Túnel + SSH pi/queo con password de .env

rport_delete_tunnel

Cierra túnel (client_id + tunnel_id)

Flujo SSH típico

  1. rport_list_clients con connection_state=connected → anota id y hostname

  2. rport_create_tunnel con ese client_id (remote default 22, scheme default ssh)

  3. En tu terminal: el ssh que viene en how_to_use

  4. rport_delete_tunnel cuando termines (si no, RPort cierra por idle, default 5 min)

El puerto local del túnel es del servidor RPort, no de tu laptop ni de Cursor. Por eso el host del SSH es iot.console.queo.com.co.

ACL

Por defecto el MCP pone en la ACL la IP pública del proceso (GET /api/v1/me/ip). Esa es la IP de salida de esta máquina. Si Cursor corre aquí y tú haces SSH desde aquí, encaja. Si el agente corre en cloud y tú haces SSH desde casa, hay que pasar acl con ambas IPs.

RPORT_DEFAULT_ACL en .env fija una ACL fija. * o 0.0.0.0/0 deja el túnel sin restricción (evitar).

Variables de entorno

Ver .env.example.

Variable

Default

Uso

RPORT_API_URL

https://iot.console.queo.com.co

Base del servidor

RPORT_API_USER

(obligatorio)

Usuario RPort

RPORT_API_TOKEN

(obligatorio)

Token de API

RPORT_SSH_USER

pi

Usuario SSH preferido (pi o queo)

RPORT_SSH_PASSWORD

(opcional)

Password SSH para rport_ssh_exec; solo en .env

RPORT_DEFAULT_ACL

vacío → IP del MCP

ACL por defecto de túneles

Documentación extra

API oficial: https://apidoc.openrport.io/
Túneles: https://docs.rport.io/get-started/managing-tunnels/
Auth: https://docs.rport.io/get-started/api-authentication/

RPort OSS dejó de desarrollarse con la 1.0; RealVNC lo comercializa como RealONE. Esta instancia self-hosted sigue usando /api/v1.

Desarrollo

npm run dev    # MCP por stdio (lo lanza Cursor, no a mano en una TTY)
npm test
npm run build

No escribas logs a stdout: el protocolo MCP va por stdin/stdout. Errores a stderr.

mcp-rport

Available Tools

10 tools
rport_create_tunnelA

Crea un t�nel inverso en un cliente activo. El puerto local queda en iot.console.queo.com.co. Para SSH usa remote=22 y scheme=ssh. Por defecto restringe ACL a la IP de salida de este MCP. No ejecuta SSH: devuelve el comando a usar.

ParametersJSON Schema
NameRequiredDescriptionDefault
aclNoIPv4 o CIDR permitidas, separadas por coma. Si se omite, IP de este MCP
localNoPuerto en el servidor RPort. Si se omite, RPort elige uno libre
remoteNoDestino en el cliente: 22, 127.0.0.1:22, o IP LAN:puerto para saltar
schemeNossh, http, https, vnc, rdp, etc. Default ssh
protocolNo
client_idYesId del cliente RPort (de rport_list_clients)
check_portNoComprobar que el puerto remoto est� abierto. Default true
http_proxyNoReverse proxy HTTP (solo scheme http/https)
host_headerNoHost header si http_proxy=true
skip_idle_timeoutNoNo cerrar por inactividad
idle_timeout_minutesNoCierre por inactividad. Default RPort: 5

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses genuinely useful behaviors: the local port lands on iot.console.queo.com.co, the ACL defaults to the MCP's egress IP, and the tool does not execute SSH but returns the command instead. It does not cover cleanup, tunnel lifetime, or permission requirements, but the key operational traits are present.

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?

Four short sentences, each earning its place: purpose, host context, SSH recipe, and behavioral caveats. Purpose is front-loaded and there is zero filler or repetition of schema content.

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 tool with 11 parameters and no output schema, the description covers the essentials: host endpoint, SSH usage, default ACL, and return behavior ('devuelve el comando a usar'). It could mention cleanup via rport_delete_tunnel or tunnel lifetime, but the high schema coverage fills the remaining parameter gaps, making this adequately complete.

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?

Schema coverage is 91% (high), so the baseline is 3. The description adds value beyond the schema by giving a concrete parameter recipe (remote=22, scheme=ssh) and explaining the ACL default behavior, which helps the agent choose correct values rather than just knowing field 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 uses a specific verb+resource pair ('Crea un túnel inverso en un cliente activo') that clearly distinguishes it from siblings like rport_list_tunnels, rport_delete_tunnel, and rport_exec_command. It also states a prerequisite (active client) and clarifies it is a reverse tunnel, so an agent can tell it apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: 'Para SSH usa remote=22 y scheme=ssh' gives a concrete recipe, and 'No ejecuta SSH' sets an implicit exclusion that routes SSH execution toward sibling rport_ssh_exec. However, it never explicitly names an alternative tool or states a when-not-to-use condition, so it stops short of a 5.

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

rport_delete_tunnelA

Cierra un t�nel activo. Requiere client_id y tunnel_id (el id num�rico o UUID que devolvi� create o list).

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYes
tunnel_idYes

TDQS

A3.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 the full burden. It states the operation is to close an active tunnel, but it does not disclose consequences such as the tunnel being terminated, whether the action is irreversible, what happens if the tunnel is already closed, or any permission/authorization requirements. For a mutating operation, this is a meaningful gap.

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 no filler. The action is front-loaded, and the parameter requirements are stated compactly. Every word contributes to understanding how to invoke the 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?

For a simple two-parameter tool, the description covers the core action and identifies the source and format of tunnel_id. However, since there are no annotations and no output schema, it would be stronger if it mentioned the effect of closing the tunnel, possible error conditions, or confirmation of success. The essentials are present, but the operational context is incomplete.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It does add useful meaning by explaining that tunnel_id can be a numeric ID or UUID returned by create or list. However, client_id receives no additional explanation beyond its name, and no format or lookup guidance is given for it. The description partially compensates but is not thorough.

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 starts with a specific verb 'Cierra' (closes) and identifies the resource as 'un túnel activo' (an active tunnel). This clearly distinguishes it from siblings like rport_create_tunnel, which creates, and rport_list_tunnels, which lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the required inputs (client_id and tunnel_id) and tells the agent where tunnel_id comes from: 'el id numérico o UUID que devolvió create o list'. This gives clear context for when to call the tool, though it does not explicitly name alternatives or exclusions.

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

rport_exec_commandA

Ejecuta un comando en el cliente RPort por el canal del agente (sin t�nel SSH). En Linux suele exigir ruta absoluta, p.ej. /usr/bin/docker. No uses pipes ni redirecciones si el cliente tiene el filtro deny por defecto. Devuelve stdout/stderr cuando el job termina.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
commandYesComando a ejecutar, preferible con ruta absoluta
is_sudoNo
client_idYesId del cliente RPort
timeout_secNoDefault 60

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does so well: it discloses the execution channel, the path requirement, a filter-related restriction, and the return value (stdout/stderr when the job finishes). It does not mention potential side effects of arbitrary command execution or auth requirements, but the key traits an agent needs are present.

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?

Four short sentences, each earning its place: purpose/channel, path guidance, pipe warning, and return value. Purpose is front-loaded in the first sentence. Slightly dense, but no filler.

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 5-parameter, no-annotation, no-output-schema execution tool, the description covers the essential operational constraints: channel, path expectations, filter limitations, and what the response contains. The main gaps are failure behavior and side-effects of command execution, but the given information is sufficient to invoke the tool correctly in most cases.

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

Parameters3/5

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

Schema coverage is 60% (command, client_id, timeout_sec documented), so baseline is 3. The description reinforces the command parameter's absolute-path requirement and adds the deny-filter constraint, which goes slightly beyond the schema. However, it adds nothing about cwd or is_sudo, which remain undocumented in both schema and description.

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?

States a specific verb (Ejecuta), resource (cliente RPort), and execution channel (canal del agente, sin túnel SSH) in the first sentence. This directly distinguishes it from rport_ssh_exec among the siblings. The scope of what the tool does is immediately unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete practical guidance: Linux usually requires absolute paths, and pipes/redirections should be avoided when the client's deny filter is active. The 'sin túnel SSH' phrasing contrasts it with the SSH-based sibling. It stops short of explicitly naming rport_ssh_exec as the alternative, but the context is clear enough.

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

rport_get_clientA

Detalle de un cliente RPort por id. Opcionalmente incluye procesos y puntos de montaje.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYesUUID o id del cliente RPort
include_processesNoA�ade GET .../processes
include_mountpointsNoA�ade GET .../mountpoints

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose optional behavior around including processes and mount points, and 'Detalle' implies a read operation. However, it does not clarify response shape, potential errors, or whether the optional includes change the output structure.

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 with the core purpose front-loaded. It wastes no words and directly conveys the resource, the key identifier, and optional extensions. This is an efficient, well-structured description.

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 get-by-id tool with no output schema, the description covers the essential call semantics. Still, it lacks explicit guidance on response structure and what 'detalle' includes by default. The optional flags are described, but an agent might need more context about default behavior when they are omitted.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds little beyond what the schema provides, repeating that processes and mount points can be optionally included. The baseline of 3 is appropriate since no compensation is needed.

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's purpose: retrieving details of a single RPort client by id. It also mentions optional process and mountpoint data, distinguishing it from list-oriented siblings like rport_list_clients. The verb-resource combination is specific and unambiguous.

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: call it when you need details for a specific client id. However, it does not explicitly state when to prefer this tool over alternatives, such as rport_list_clients or rport_get_status. Usage context is inferable but not made explicit.

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

rport_get_statusA

Estado del servidor RPort (versi�n, clientes conectados, configuraci�n resumida).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It usefully indicates this is a status/read-style operation and enumerates the returned content categories, but it does not state that no changes are made, describe response format, or mention any access considerations.

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 that includes the key outcome and the main content fields. It has no filler, repetitions, or irrelevant details.

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?

Given the zero-parameter signature and the simple status-query nature, the description provides sufficient context by naming the principal return areas: version, connected clients, and configuration summary. It does not specify exact output formatting, but that is not essential for an agent to invoke this tool successfully.

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 has zero parameters, so there is no semantic burden on the description to explain inputs. The empty schema is fully self-explanatory, making the baseline of 4 appropriate.

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 resource (RPort server) and the type of information returned: version, connected clients, and summarized configuration. It is distinguishable from siblings like rport_list_clients or rport_whoami, though it does not explicitly contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as rport_list_clients or rport_get_client. Usage must be inferred from the word 'Estado' and the tool name, which is insufficient for clear decision-making.

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

rport_list_client_groupsA

Lista grupos de clientes definidos en RPort.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The word 'Lista' implies a read-only listing behavior with no mutation, but with no annotations and no output schema the description does not disclose any additional behavioral traits such as return format, ordering, or authentication requirements. It is minimally transparent for a simple list operation.

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 no filler or redundant information. Every word contributes to identifying the action and resource.

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 read-only listing tool, the description is essentially complete for invocation: an agent knows what the tool does and needs no arguments. It loses one point because it does not mention what the returned list contains (e.g., IDs, names) and no output schema is present to fill that gap.

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 input schema has zero parameters and schema description coverage is 100%, so there are no parameter semantics for the description to clarify. The baseline of 4 for a zero-parameter tool applies.

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 the specific verb 'Lista' (list) with a clear resource, 'grupos de clientes definidos en RPort' (client groups defined in RPort). This clearly distinguishes it from sibling rport_list_clients, which targets individual clients, and from read/status tools.

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 choose this tool over alternatives such as rport_list_clients or rport_get_client. The context around client groups vs. clients is implied by the name, but the description itself gives no explicit when-to-use or when-not-to-use instructions.

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

rport_list_clientsA

Lista clientes RPort (Raspberry Pi y otros). Por defecto pide campos �tiles (estado, hostname, IPs, tags, t�neles). Filtra por nombre, hostname, estado o b�squeda libre.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFiltrar por tag exacto
nameNoFiltro por nombre (admite * como comod�n)
sortNoCampo de orden: name, hostname, id. Prefijo - para descendente
limitNopage[limit], default 50
offsetNopage[offset]
searchNoB�squeda en cualquier campo, p.ej. Ubuntu o parte del hostname
hostnameNoFiltro por hostname (admite *)
connection_stateNoSolo conectados o desconectados

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It adds useful context by stating the default field projection (estado, hostname, IPs, tags, túneles) and filtering behavior. It does not explicitly mention pagination, read-only guarantees, or auth expectations, though the verb 'Lista' does imply a non-mutating call.

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 compact sentences with no filler. It front-loads the core action and then provides the most useful behavioral details about default fields and filtering.

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 list tool with 8 optional parameters, no required parameters, and no output schema, the description covers the core operation, default projection, and filter options, while the schema documents every parameter. Minor gaps remain: pagination is not mentioned in prose and the response shape is only summarized via the default-fields list.

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

Parameters3/5

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

Schema description coverage is 100%, so all 8 parameters are already documented with details such as wildcard support, exact tag matching, sort fields, and default limit. The description's filter summary mostly paraphrases the schema rather than adding new semantic meaning, so a baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Lista' with the resource 'clientes RPort', making it clear this is a client listing operation rather than a single-client detail call. It is distinguishable from siblings like rport_get_client (singular) and rport_list_client_groups (groups), and it adds specificity by naming default fields and filter modes.

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 states that this lists RPort clients and enumerates available filters (name, hostname, state, free search), which implies when it should be used for broad client queries. However, it does not explicitly contrast with rport_get_client or other sibling tools, so when-not-to-use guidance is missing.

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

rport_list_tunnelsA

T�neles activos visibles para el usuario del token (todos los clientes).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does add useful scope context: only active tunnels, only those visible to the token user, and all clients are included. It does not explicitly state that the operation is read-only or describe the response format.

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 no filler. The most important scoping information, 'active' and 'visible to the token user,' is front-loaded and immediately actionable.

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-only tool with no output schema, the description is nearly sufficient. An agent can select and invoke it confidently, though the exact response structure remains implicit.

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 has zero parameters, so the baseline is 4. The description appropriately implies that no arguments are needed; there are no parameter semantics to clarify.

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 identifies the resource (tunnels), the condition (active), and the scope (visible to the token user, across all clients). This is specific enough to distinguish it from client/group listing siblings, though it is phrased as a noun phrase rather than an explicit verb+resource statement.

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 intended use is implied: call this tool to see active tunnels visible to the token user. However, it does not explicitly name alternatives or state when NOT to use it, such as when creating or deleting a tunnel.

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

rport_ssh_execA

Crea un t�nel SSH en RPort y ejecuta un comando en la Pi con usuario pi o queo. El password sale de RPORT_SSH_PASSWORD en .env (nunca lo pidas en el chat). Permite pipes y sudo en la shell de la Pi, a diferencia de rport_exec_command. Cierra el t�nel al terminar salvo keep_tunnel=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoSi se omite, prueba pi y luego queo
commandYesComando remoto, p.ej. whoami; docker ps
client_idYes
keep_tunnelNoDejar el t�nel abierto
timeout_secNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It reveals important behaviors: password sourced from RPORT_SSH_PASSWORD, tunnel closed at the end unless keep_tunnel=true, and shell features like pipes and sudo. It does not cover failure modes, return values, or timeout behavior, but the most critical operational details are present.

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 sentences, no filler. The main action is front-loaded, followed by credential handling, the differentiation from rport_exec_command, and tunnel lifecycle. Every sentence earns its place.

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?

Given five parameters, no output schema, and no annotations, the description covers the essential aspects: purpose, credential source, tunnel cleanup, and the capability difference from a sibling. It does not explain the output format, timeout behavior, or error handling, but the agent has enough to select and invoke the tool correctly in most scenarios.

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?

Schema coverage is 60%, so the description must add meaning beyond the schema. It does: it explains the password source, the user fallback behavior (tries pi then queo), and the semantics of keep_tunnel. It does not describe client_id or timeout_sec, but the provided schema already defines their types and constraints.

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 states a specific verb and resource: creates an SSH tunnel and executes a command on the Pi as user pi or queo. It explicitly distinguishes itself from rport_exec_command by highlighting pipes and sudo support, making the purpose and differentiation clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the alternative rport_exec_command and explains the key difference: this tool supports pipes and sudo. It also gives a practical guideline about the password coming from .env and never asking in chat. However, it does not explicitly state when not to use this tool or mention other alternatives like rport_create_tunnel.

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

rport_whoamiA

Usuario RPort autenticado con el token del MCP y grupos a los que pertenece.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It states what information is returned (user and groups), which is useful, but it does not explicitly state that this is a read-only operation with no side effects. The whoami name strongly implies a safe query, so this is adequate but not fully transparent.

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 that immediately states the tool's core purpose. There is no filler, redundant information, or repetition of the tool name beyond its semantic content.

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 identity tool, the description covers the essential information: the authenticated user and group membership. It does not describe the exact response format, and there is no output schema, but the simplicity of a whoami operation makes this gap minor.

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 has zero parameters, and the description confirms it needs no inputs by focusing entirely on the identity and group output. With no parameters to document, the description provides as much parameter-related clarity as needed.

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 tool as returning the authenticated RPort user and their group memberships, which is distinct from the sibling tools that list clients, tunnels, or status. It lacks an explicit verb like 'gets' or 'returns,' but the whoami name and description make the purpose unambiguous.

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 this tool is for checking the current authenticated user's identity and group memberships, and the name 'whoami' reinforces that. However, it provides no explicit guidance on when to prefer this tool over alternatives 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.

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clear resource+action boundaries: clients, tunnels, groups, status, and auth are all distinct. The main overlap is rport_exec_command and rport_ssh_exec, both executing commands on clients, but their descriptions clearly separate the agent channel from SSH-based execution.

Naming Consistency4/5

All tools share the rport_ prefix and mostly follow predictable verb_noun naming like list_clients, get_client, create_tunnel, delete_tunnel. Minor deviations such as rport_whoami and rport_ssh_exec break the otherwise consistent pattern.

Tool Count5/5

Ten tools is well-scoped for an RPort management server. Each tool serves a distinct operational need without redundancy or feature bloat.

Completeness4/5

The core liecycle is covered: clients can be listed and inspected, tunnels have list/create/delete, and commands have two execution paths. Minor gaps include no tunnel detail view and no group management beyond listing, but these are workable limitations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to safely access user-local filesystems, apply validated patches, inspect git state, and run persistent jobs on outbound-connected local runners through a stateless Cloudflare control plane.
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to list hosts, run commands, and orchestrate fleet automation over SSH, with per-host opt-in and approval-gated actions while keeping credentials secure.
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LuisQueo/mcp-rport'

If you have feedback or need assistance with the MCP directory API, please join our Discord server