mcp-diag

mcp-diag

Read-only diagnostic MCP server that exposes system stats, Docker status, OOM events, container logs, Sidekiq queues, and local Chatwoot health checks for Claude to review a Hetzner server.

Category
访问服务器

README

MCP de diagnóstico read-only — Hetzner (Chatwoot)

Servicio chico que corre en el propio server y expone herramientas de diagnóstico de solo lectura vía MCP, para que Claude (claude.ai) pueda revisar el estado del Hetzner igual que hoy revisa Railway y Neon.

Qué puede hacer Claude con esto: ver RAM/disco/uptime, detectar eventos OOM, estado y consumo de containers Docker, leer logs de containers de una allowlist, medir colas de Sidekiq en Redis y chequear que Chatwoot responda en local.

Qué NO puede hacer: ejecutar comandos arbitrarios, escribir, reiniciar nada, leer archivos. Cada herramienta es un comando fijo con timeout.


Instalación (10-15 min)

Todo como root salvo indicación contraria.

1. Bajar el código y crear el usuario

apt update && apt install -y git python3-venv curl
git clone https://github.com/Leonelito08/mcp-diag.git /opt/mcp-diag
useradd -r -s /usr/sbin/nologin -d /opt/mcp-diag mcpdiag
cd /opt/mcp-diag

(Actualizaciones futuras: cd /opt/mcp-diag && git pull && systemctl restart mcp-diag.)

2. Entorno Python

python3 -m venv venv
./venv/bin/pip install -r requirements.txt

3. Configuración

cp env.example .env
openssl rand -hex 32        # pegar el resultado en MCP_SECRET dentro de .env
docker ps --format '{{.Names}}'   # con esto completás ALLOWED_CONTAINERS y REDIS_CONTAINER
nano .env
chown -R mcpdiag:mcpdiag /opt/mcp-diag
chmod 600 .env

CHATWOOT_LOCAL_URL: el puerto donde rails escucha en el host (verificalo con docker ps — columna de puertos, típicamente 3000).

4. Servicio systemd

cp mcp-diag.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now mcp-diag
systemctl status mcp-diag          # debe decir "active (running)"

Prueba local (debe responder algo, aunque sea un error de protocolo MCP — lo importante es que NO sea "connection refused"):

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8321/$(grep MCP_SECRET .env | cut -d= -f2)/mcp

5. Exponerlo con HTTPS

El servicio escucha solo en 127.0.0.1. Elegí UNA de las dos opciones.

Opción A — Cloudflare Tunnel (recomendada: cero puertos abiertos)

Requiere un dominio tuyo administrado en Cloudflare (sirve un subdominio de cualquiera que ya tengas ahí).

# Instalar cloudflared
curl -L -o /usr/local/bin/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x /usr/local/bin/cloudflared

cloudflared tunnel login                 # abre URL, elegís el dominio
cloudflared tunnel create mcp-diag
cloudflared tunnel route dns mcp-diag mcp.TUDOMINIO.com

Crear /etc/cloudflared/config.yml (el ID del túnel te lo dio create):

tunnel: <TUNNEL_ID>
credentials-file: /root/.cloudflared/<TUNNEL_ID>.json
ingress:
  - hostname: mcp.TUDOMINIO.com
    service: http://127.0.0.1:8321
  - service: http_status:404
cloudflared service install
systemctl enable --now cloudflared

Opción B — Caddy (si preferís no depender de Cloudflare)

Necesita un registro DNS A → IP del Hetzner y el puerto 443 abierto.

apt install -y caddy

/etc/caddy/Caddyfile:

mcp.TUDOMINIO.com {
    reverse_proxy 127.0.0.1:8321
}
systemctl reload caddy

Caddy gestiona el certificado Let's Encrypt solo.

6. Agregar el conector en claude.ai

  1. En claude.ai: Configuración → Conectores → "+" → Agregar conector personalizado.
  2. Nombre: Hetzner Chatwoot.
  3. URL: https://mcp.TUDOMINIO.com/<MCP_SECRET>/mcp (el secreto va en la URL — esa URL ES la credencial, no la compartas).
  4. Guardar. No hace falta OAuth.

7. Probar

En una conversación nueva: "Revisá el estado del Hetzner". Claude debería poder llamar system_stats, docker_status, oom_check, etc.


Cómo agregar herramientas (para futuras necesidades de monitoreo)

Receta: función con argv fijo + decorador + reiniciar. Ejemplo — chequear que Postgres acepte conexiones:

@mcp.tool()
def postgres_ping() -> str:
    """pg_isready dentro del container de Postgres."""
    return run(["docker", "exec", "chatwoot-postgres-1", "pg_isready"], timeout=10)
systemctl restart mcp-diag

Reglas al extender:

  • Solo lectura. Nada de restart/exec arbitrario/escritura, aunque tiente.
  • Nunca interpolar strings del modelo en comandos: parámetros solo como números acotados o nombres validados contra allowlist (mirá container_logs como plantilla).
  • Siempre timeout=.

El mismo patrón sirve para cualquier server futuro: copiás la carpeta, cambiás las tools, otro subdominio, otro secreto.

Operación

  • Rotar credencial: nuevo openssl rand -hex 32 en .env → systemctl restart mcp-diag → actualizar la URL del conector en claude.ai.
  • Logs del servicio: journalctl -u mcp-diag -f
  • Actualizar fastmcp: ./venv/bin/pip install -U "fastmcp>=2.10,<3" y restart.
  • Si algún día preferís credencial en header en vez de URL: claude.ai tiene soporte (en beta) de request headers para conectores; el cambio en el server es chico — pedírselo a Claude cuando toque.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选