MCP System Information Server

Un servidor MCP que proporciona información del sistema, como el uso de CPU y memoria.

Documentación

MCP System Information Server

Servidor del Protocolo de Contexto de Modelo (MCP) para obtener información del sistema (CPU y memoria).

Especificación

https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http

Referencia

https://levelup.gitconnected.com/mcp-server-and-client-with-sse-the-new-streamable-http-d860850d9d9d

Funcionalidades del servidor

  • Obtención de información de CPU (número de núcleos, modelo, carga)
  • Obtención de información de memoria (total, disponible, usada)
  • Registro estructurado con zerolog
  • Soporte de dos modos de operación:
    • stdio - para integración con Cursor en modo stdio y otros clientes MCP locales
    • Streamable HTTP - nuevo protocolo según la especificación 2025-03-26 en la ruta raíz /
    • Legacy HTTP/SSE - para compatibilidad inversa en la ruta /sse

Configuración de registro

El servidor utiliza registro estructurado con zerolog con soporte de las siguientes variables de entorno:

Variables de entorno

  • LOG_LEVEL - nivel de registro: trace, debug, info, warn, error, fatal, panic, disabled (por defecto: info)
  • ENVIRONMENT o ENV - modo de entorno: development/dev o production/prod (por defecto: development)

Modos de registro

Modo de desarrollo (development)

ENVIRONMENT=development LOG_LEVEL=debug ./system-info-server
  • Salida de consola con colores legibles
  • Marcas de tiempo legibles (HH:MM:SS)
  • Información detallada sobre archivos y líneas de código

Modo de producción (production)

ENVIRONMENT=production LOG_LEVEL=info ./system-info-server
  • Formato JSON para análisis por agregadores de registros
  • Marcas de tiempo RFC3339
  • Optimizado para rendimiento

Ejemplos de configuración

# Минимальное логгирование для продакшена
ENVIRONMENT=production LOG_LEVEL=error PORT=8080 ./system-info-server

# Максимальная детализация для отладки
ENVIRONMENT=development LOG_LEVEL=trace ./system-info-server

# Стандартная конфигурация для разработки
LOG_LEVEL=debug ./system-info-server

Estructura de registros

Cada evento registrado contiene campos contextuales:

  • component - componente del sistema (main, http, session, mcp, tools, sysinfo, sse, streamable)
  • session_id - identificador de sesión para seguimiento de solicitudes
  • method - método HTTP o método RPC
  • duration - tiempo de ejecución de operaciones
  • status - código de estado HTTP
  • error - detalles de errores con contexto

Ejemplo de registro en modo de desarrollo:

14:30:25 INF Starting Fiber server component=main port=8080 addr=:8080
14:30:30 INF Request started component=http method=POST path=/ session_id=session_20240614_143030_abc12345
14:30:30 DBG Processing JSON-RPC request component=mcp method=initialize session_id=session_20240614_143030_abc12345

Ejemplo de registro en formato JSON (producción):

{"level":"info","time":"2024-06-14T14:30:25+03:00","caller":"main.go:65","component":"main","port":"8080","addr":":8080","message":"Starting Fiber server"}
{"level":"info","time":"2024-06-14T14:30:30+03:00","caller":"middleware/logging.go:35","component":"http","method":"POST","path":"/","session_id":"session_20240614_143030_abc12345","message":"Request started"}

Instalación y ejecución

Compilación desde el código fuente

go build -o system-info-server .

Ejecución en modo stdio (para Cursor y otros clientes MCP locales)

./system-info-server

Ejecución en modo servidor HTTP

PORT=8080 ./system-info-server

Integración con Cursor

Agregue al archivo ~/.cursor/mcp.json:

Opción 1: Servidor stdio local

{
  "mcpServers": {
    "system-info-local": {
      "command": "/path/to/system-info-server",
      "args": []
    }
  }
}

Opción 2: Streamable HTTP remoto (nueva especificación 2025-03-26)

{
  "mcpServers": {
    "system-info-remote": {
      "url": "https://your-domain.com/"
    }
  }
}

Opción 3: Legacy HTTP+SSE (para compatibilidad inversa)

{
  "mcpServers": {
    "system-info-legacy": {
      "url": "https://your-domain.com/sse"
    }
  }
}

Integración con n8n

Nuevo formato (Streamable HTTP)

Al agregar un servidor MCP en n8n, especifique:

  • MCP Endpoint: https://your-domain.com/

Formato Legacy (para compatibilidad inversa)

Al agregar un servidor MCP en n8n, especifique:

  • SSE Endpoint: https://your-domain.com/sse

API Streamable HTTP (nueva especificación 2025-03-26)

Inicialización

POST /
Content-Type: application/json
Accept: application/json, text/event-stream

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-03-26",
    "capabilities": {},
    "clientInfo": {
      "name": "client-name",
      "version": "1.0.0"
    }
  }
}

La respuesta contiene el encabezado Mcp-Session-Id, que debe usarse en todas las solicitudes posteriores.

Obtención de la lista de herramientas

POST /
Content-Type: application/json
Accept: application/json
Mcp-Session-Id: <session-id>

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

Llamada a herramienta

POST /
Content-Type: application/json
Accept: application/json
Mcp-Session-Id: <session-id>

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "get_system_info",
    "arguments": {}
  }
}

Flujo SSE (Streamable HTTP)

GET /
Accept: text/event-stream
Mcp-Session-Id: <session-id>

POST con respuesta SSE

POST /
Content-Type: application/json
Accept: text/event-stream
Mcp-Session-Id: <session-id>

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "get_system_info",
    "arguments": {}
  }
}

Finalización de sesión

DELETE /
Mcp-Session-Id: <session-id>

API HTTP Legacy (para compatibilidad inversa)

Inicialización

POST /sse
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {},
    "clientInfo": {
      "name": "client-name",
      "version": "1.0.0"
    }
  }
}

Conexión SSE (Legacy)

GET /sse?sessionId=<session-id>
Accept: text/event-stream

Docker

Compilación de la imagen

docker build -t mcp-system-info .

Ejecución del contenedor

# HTTP режим
docker run -p 8080:8080 -e PORT=8080 mcp-system-info

# stdio режим
docker run -it mcp-system-info

Docker Compose

docker-compose up -d

Despliegue en servidor

Al desplegar detrás de nginx, agregue a la configuración:

# Для нового Streamable HTTP endpoint
location / {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header X-Accel-Buffering no;
    proxy_read_timeout 86400;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

# Для Legacy SSE endpoint (обратная совместимость)
location /sse {
    proxy_pass http://localhost:8080/sse;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header X-Accel-Buffering no;
    proxy_read_timeout 86400;
}

Cambios de protocolo

Streamable HTTP (2025-03-26) vs Legacy HTTP+SSE (2024-11-05)

Nueva especificación (/):

  • Endpoint único para todas las operaciones
  • Métodos POST y GET en la misma ruta
  • Soporte de Accept: application/json, text/event-stream
  • Gestión de sesiones mediante el encabezado Mcp-Session-Id
  • Flujos reanudables con Last-Event-Id
  • DELETE para finalización explícita de sesión

Especificación Legacy (/sse):

  • Endpoints separados para POST y SSE
  • Evento endpoint al conectarse a SSE
  • Parámetro sessionId en la cadena de consulta
  • Formato antiguo de eventos SSE

Licencia

MIT