SentinelX Core MCP
SentinelX Core MCP
Servidor MCP que redirige llamadas a herramientas a una instancia de SentinelX Core en ejecución.
Este repositorio es la capa puente portátil de MCP/OAuth. Está diseñado para permanecer separado de sentinelx-core, que proporciona el agente HTTP subyacente.
Qué hace
expone herramientas MCP respaldadas por SentinelX Core
valida tokens de portador (bearer tokens) a través de OIDC/JWKS
reenvía llamadas a herramientas a la API de SentinelX Core ascendente
añade un límite de producto independiente para integraciones MCP
Dependencia de SentinelX Core
Este proyecto requiere una instancia de SentinelX Core en ejecución.
Emparejamiento típico para desarrollo local:
SentinelX Core:
http://127.0.0.1:8092SentinelX Core MCP:
http://127.0.0.1:8099
Ejemplos típicos de emparejamiento instalado:
SentinelX Core:
http://127.0.0.1:8091SentinelX Core MCP:
http://127.0.0.1:8098
Estos son valores predeterminados de ejemplo, no puertos garantizados como libres. Compruebe siempre los valores reales configurados en /etc/sentinelx/sentinelx.env y /etc/sentinelx-core-mcp/sentinelx-core-mcp.env.
Inicio rápido
git clone git@github.com:pensados/sentinelx-core-mcp.git
cd sentinelx-core-mcp
sudo bash install.shLuego edite:
sudo nano /etc/sentinelx-core-mcp/sentinelx-core-mcp.envEstablezca al menos:
MCP_PORT=8098
SENTINELX_URL=http://127.0.0.1:8091
SENTINELX_TOKEN=changeme
OIDC_ISSUER=https://auth.example.com/realms/sentinelx
OIDC_JWKS_URI=https://auth.example.com/realms/sentinelx/protocol/openid-connect/certs
OIDC_EXPECTED_AUDIENCE=
RESOURCE_URL=https://sentinelx.example.com
AUTH_DEBUG=false
LOG_DIR=/var/log/sentinelx-mcp
LOG_FILE=/var/log/sentinelx-mcp/sentinelx-core-mcp.logReinicie y verifique:
sudo systemctl restart sentinelx-core-mcp
sudo systemctl status sentinelx-core-mcp
sudo journalctl -u sentinelx-core-mcp -n 100 --no-pagerDesarrollo local
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
./run.shValores predeterminados para desarrollo local:
Puerto MCP:
8099URL de SentinelX Core ascendente:
http://127.0.0.1:8092
Prueba de humo manual de MCP
El punto final MCP no es un punto final REST simple. Una prueba manual mínima con curl requiere:
inicializar una sesión
enviar
notifications/initializedllamar a
tools/listo a una herramienta pública comoping
1. Inicializar una sesión
curl -i -X POST http://127.0.0.1:8099/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":"init-1",
"method":"initialize",
"params":{
"protocolVersion":"2025-03-26",
"capabilities":{},
"clientInfo":{
"name":"curl",
"version":"0.1"
}
}
}'Esto debería devolver 200 OK y una cabecera de respuesta como:
mcp-session-id: ...2. Notificar inicialización
Reemplace TU_SESSION_ID con el valor real devuelto por el servidor:
curl -i -X POST http://127.0.0.1:8099/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-H "mcp-session-id: TU_SESSION_ID" \
-d '{
"jsonrpc":"2.0",
"method":"notifications/initialized"
}'Esto debería devolver 202 Accepted.
3. Listar herramientas
Debido a que la respuesta se entrega como SSE (event: message + data: ...), elimine el prefijo data: antes de pasarla a jq:
curl -s -X POST http://127.0.0.1:8099/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-H "mcp-session-id: TU_SESSION_ID" \
-d '{
"jsonrpc":"2.0",
"id":"tools-1",
"method":"tools/list",
"params":{}
}' | sed -n 's/^data: //p' | jq4. Llamar a la herramienta pública ping
curl -s -X POST http://127.0.0.1:8099/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-H "mcp-session-id: TU_SESSION_ID" \
-d '{
"jsonrpc":"2.0",
"id":"call-1",
"method":"tools/call",
"params":{
"name":"ping",
"arguments":{}
}
}' | sed -n 's/^data: //p' | jqQué valida esto
Estas pruebas manuales validan que:
el servidor MCP está escuchando
la inicialización de la sesión MCP funciona
el marco del protocolo es correcto
el servidor expone las herramientas correctamente
al menos una llamada a una herramienta pública funciona de extremo a extremo
Nota importante sobre autenticación
Las herramientas MCP protegidas aún requieren un token de acceso OAuth/OIDC real aceptado por la capa MCP.
El token interno de SentinelX Core no es el mismo que el token de acceso MCP externo.
Rutas instaladas
código:
/opt/sentinelx-core-mcparchivo de entorno:
/etc/sentinelx-core-mcp/sentinelx-core-mcp.envregistros:
/var/log/sentinelx-mcpservicio:
sentinelx-core-mcp.service
Configuración
Ejemplo de archivo de entorno instalado:
MCP_PORT=8098
MCP_TOKEN=
SENTINELX_URL=http://127.0.0.1:8091
SENTINELX_TOKEN=changeme
OIDC_ISSUER=https://auth.example.com/realms/sentinelx
OIDC_JWKS_URI=https://auth.example.com/realms/sentinelx/protocol/openid-connect/certs
OIDC_EXPECTED_AUDIENCE=
RESOURCE_URL=https://sentinelx.example.com
AUTH_DEBUG=false
LOG_DIR=/var/log/sentinelx-mcp
LOG_FILE=/var/log/sentinelx-mcp/sentinelx-core-mcp.logNotas sobre autenticación
las herramientas protegidas requieren tokens de portador (bearer tokens)
los tokens se validan contra el punto final JWKS configurado
el SentinelX Core ascendente sigue aplicando su propio token de portador interno y listas de permitidos
Keycloak es una opción recomendada y probada, pero no es la única opción válida
cualquier proveedor OIDC compatible debería funcionar si expone un emisor y un punto final JWKS válidos
Modelo de autenticación
SentinelX Core MCP está diseñado para tokens de portador OIDC/OAuth en la capa MCP.
Esto significa que hay dos capas de autenticación diferentes en una implementación típica:
Autenticación MCP externa
validada por
sentinelx-core-mcpbasada en
OIDC_ISSUER,OIDC_JWKS_URIy opcionalmenteOIDC_EXPECTED_AUDIENCEdestinada a clientes MCP como ChatGPT u otro consumidor MCP
Autenticación interna de SentinelX Core
validada por
sentinelx-corebasada en
SENTINELX_TOKENutilizada solo por el puente MCP cuando reenvía solicitudes al nivel superior
Recomendación
Para implementaciones de tipo producción, utilice un proveedor OIDC real.
Keycloak es una buena implementación de referencia porque es bien conocida y fue la referencia original utilizada para este proyecto. Sin embargo, el repositorio debe seguir siendo portátil, por lo que la documentación trata a Keycloak como un ejemplo, no como una dependencia estricta.
Por dónde empezar
para una visión general genérica, utilice este README
para un tutorial concreto de Keycloak, consulte
docs/keycloak-example.md
Solución de problemas
MCP inicia pero las herramientas fallan
Compruebe:
SENTINELX_URLapunta a un SentinelX Core en ejecuciónSENTINELX_TOKENcoincide con el núcleo ascendenteel emisor OIDC y el URI JWKS son correctos
el token tiene los alcances (scopes) esperados por la capa MCP
Compruebe el núcleo ascendente directamente
curl -s -H "Authorization: Bearer changeme" http://127.0.0.1:TU_PUERTO_CORE/state | jqNotas de seguridad
mantenga el servicio MCP vinculado adecuadamente para su implementación
prefiera el enlace solo local con una capa frontal explícita cuando sea posible
utilice un cliente OIDC dedicado y alcances mínimos
rote las credenciales y revise los registros regularmente
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/pensados/sentinelx-core-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server