MCP System Information Server

Um servidor MCP que fornece informações do sistema, como uso de CPU e memória.

Documentação

MCP System Information Server

Servidor Model Context Protocol (MCP) para obter informações do sistema (CPU e memória).

Especificação

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

Reference

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

Recursos do servidor

  • Obtenção de informações da CPU (número de núcleos, modelo, carga)
  • Obtenção de informações de memória (total, disponível, usada)
  • Registro estruturado com zerolog
  • Suporte a dois modos de operação:
    • stdio - para integração com Cursor no modo stdio e outros clientes MCP locais
    • Streamable HTTP - novo protocolo conforme especificação 2025-03-26 na rota raiz /
    • Legacy HTTP/SSE - para compatibilidade reversa na rota /sse

Configuração de registro

O servidor usa registro estruturado com zerolog com suporte às seguintes variáveis de ambiente:

Variáveis de ambiente

  • LOG_LEVEL - nível de registro: trace, debug, info, warn, error, fatal, panic, disabled (padrão: info)
  • ENVIRONMENT ou ENV - modo de ambiente: development/dev ou production/prod (padrão: development)

Modos de registro

Modo de desenvolvimento (development)

ENVIRONMENT=development LOG_LEVEL=debug ./system-info-server
  • Saída colorida e legível no console
  • Carimbos de data/hora legíveis (HH:MM:SS)
  • Informações detalhadas sobre arquivos e linhas de código

Modo de produção (production)

ENVIRONMENT=production LOG_LEVEL=info ./system-info-server
  • Formato JSON para análise por agregadores de logs
  • Carimbos de data/hora RFC3339
  • Otimizado para desempenho

Exemplos de configuração

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

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

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

Estrutura de logs

Cada evento registrado contém campos contextuais:

  • component - componente do sistema (main, http, session, mcp, tools, sysinfo, sse, streamable)
  • session_id - identificador de sessão para rastreamento de requisições
  • method - método HTTP ou método RPC
  • duration - tempo de execução das operações
  • status - código de status HTTP
  • error - detalhes de erros com contexto

Exemplo de log no modo de desenvolvimento:

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

Exemplo de log em formato JSON (produção):

{"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"}

Instalação e execução

Compilação a partir do código-fonte

go build -o system-info-server .

Execução no modo stdio (para Cursor e outros clientes MCP locais)

./system-info-server

Execução no modo servidor HTTP

PORT=8080 ./system-info-server

Integração com Cursor

Adicione ao arquivo ~/.cursor/mcp.json:

Opção 1: Servidor stdio local

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

Opção 2: Streamable HTTP remoto (nova especificação 2025-03-26)

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

Opção 3: Legacy HTTP+SSE (para compatibilidade reversa)

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

Integração com n8n

Novo formato (Streamable HTTP)

Ao adicionar o servidor MCP no n8n, especifique:

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

Formato Legacy (para compatibilidade reversa)

Ao adicionar o servidor MCP no n8n, especifique:

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

Streamable HTTP API (nova especificação 2025-03-26)

Inicialização

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"
    }
  }
}

A resposta contém o cabeçalho Mcp-Session-Id, que deve ser usado em todas as requisições subsequentes.

Obtenção da lista de ferramentas

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

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

Chamada de ferramenta

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": {}
  }
}

Fluxo SSE (Streamable HTTP)

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

POST com resposta 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": {}
  }
}

Encerramento da sessão

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

Legacy HTTP API (para compatibilidade reversa)

Inicialização

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"
    }
  }
}

Conexão SSE (Legacy)

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

Docker

Compilação da imagem

docker build -t mcp-system-info .

Execução do contêiner

# 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

Implantação no servidor

Ao implantar atrás do nginx, adicione à configuração:

# Для нового 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;
}

Mudanças de protocolo

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

Nova especificação (/):

  • Endpoint único para todas as operações
  • Métodos POST e GET na mesma rota
  • Suporte a Accept: application/json, text/event-stream
  • Gerenciamento de sessão via cabeçalho Mcp-Session-Id
  • Fluxos retomáveis com Last-Event-Id
  • DELETE para encerramento explícito da sessão

Especificação Legacy (/sse):

  • Endpoints separados para POST e SSE
  • Evento endpoint ao conectar ao SSE
  • Parâmetro sessionId na query string
  • Formato antigo de eventos SSE

Licença

MIT