Skip to main content
Glama

SentinelX Core MCP

将工具调用代理到正在运行的 SentinelX Core 实例的 MCP 服务器。

此存储库是可移植的 MCP/OAuth 桥接层。它旨在与提供底层 HTTP 代理的 sentinelx-core 保持分离。

功能

  • 公开由 SentinelX Core 支持的 MCP 工具

  • 通过 OIDC/JWKS 验证持有者令牌 (Bearer tokens)

  • 将工具调用转发到上游 SentinelX Core API

  • 为 MCP 集成添加了独立的产品边界

对 SentinelX Core 的依赖

此项目需要一个正在运行的 SentinelX Core 实例。

典型的本地开发配对:

  • SentinelX Core: http://127.0.0.1:8092

  • SentinelX Core MCP: http://127.0.0.1:8099

典型的安装配对示例:

  • SentinelX Core: http://127.0.0.1:8091

  • SentinelX Core MCP: http://127.0.0.1:8098

这些是示例默认值,不保证是空闲端口。请务必检查 /etc/sentinelx/sentinelx.env/etc/sentinelx-core-mcp/sentinelx-core-mcp.env 中配置的实际值。

快速入门

git clone git@github.com:pensados/sentinelx-core-mcp.git
cd sentinelx-core-mcp
sudo bash install.sh

然后编辑:

sudo nano /etc/sentinelx-core-mcp/sentinelx-core-mcp.env

至少设置:

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.log

重启并检查:

sudo systemctl restart sentinelx-core-mcp
sudo systemctl status sentinelx-core-mcp
sudo journalctl -u sentinelx-core-mcp -n 100 --no-pager

本地开发

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

本地开发默认值:

  • MCP 端口: 8099

  • 上游 SentinelX Core URL: http://127.0.0.1:8092

手动 MCP 冒烟测试

MCP 端点不是普通的 REST 端点。使用 curl 进行最小化手动测试需要:

  1. 初始化会话

  2. 发送 notifications/initialized

  3. 调用 tools/list 或公共工具(例如 ping

1. 初始化会话

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

这应该返回 200 OK 和类似以下的响应头:

mcp-session-id: ...

2. 通知已初始化

TU_SESSION_ID 替换为服务器返回的实际值:

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

这应该返回 202 Accepted

3. 列出工具

由于响应是以 SSE (event: message + data: ...) 形式传递的,因此在通过管道传给 jq 之前,请去掉 data: 前缀:

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' | jq

4. 调用公共 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' | jq

此测试验证了什么

这些手动测试验证了:

  • MCP 服务器正在监听

  • MCP 会话初始化工作正常

  • 协议帧格式正确

  • 服务器正确公开了工具

  • 至少有一个公共工具调用可以端到端工作

重要身份验证说明

受保护的 MCP 工具仍然需要 MCP 层接受的真实 OAuth/OIDC 访问令牌。

内部 SentinelX Core 令牌与外部 MCP 访问令牌不同

安装路径

  • 代码: /opt/sentinelx-core-mcp

  • 环境变量文件: /etc/sentinelx-core-mcp/sentinelx-core-mcp.env

  • 日志: /var/log/sentinelx-mcp

  • 服务: sentinelx-core-mcp.service

配置

已安装的示例环境变量文件:

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.log

关于身份验证的说明

  • 受保护的工具需要持有者令牌

  • 令牌根据配置的 JWKS 端点进行验证

  • 上游 SentinelX Core 仍然强制执行其自己的内部持有者令牌和允许列表

  • Keycloak 是一个推荐且经过测试的选项,但它不是唯一有效的选择

  • 任何兼容的 OIDC 提供程序,只要它公开了有效的颁发者和 JWKS 端点,都应该可以工作

身份验证模型

SentinelX Core MCP 专为 MCP 层上的 OIDC/OAuth 持有者令牌而设计。

这意味着在典型的部署中有两个不同的身份验证层

  1. 外部 MCP 身份验证

    • sentinelx-core-mcp 验证

    • 基于 OIDC_ISSUEROIDC_JWKS_URI 和可选的 OIDC_EXPECTED_AUDIENCE

    • 旨在供 ChatGPT 或其他 MCP 消费者等 MCP 客户端使用

  2. 内部 SentinelX Core 身份验证

    • sentinelx-core 验证

    • 基于 SENTINELX_TOKEN

    • 仅在 MCP 桥接器将请求转发到上游时使用

建议

对于生产级部署,请使用真实的 OIDC 提供程序。

Keycloak 是一个很好的参考实现,因为它广为人知,并且是本项目最初使用的参考。然而,存储库应保持可移植性,因此文档将 Keycloak 视为示例,而不是硬性依赖。

从哪里开始

故障排除

MCP 启动但工具调用失败

检查:

  • SENTINELX_URL 指向正在运行的 SentinelX Core

  • SENTINELX_TOKEN 与上游核心匹配

  • OIDC 颁发者和 JWKS URI 正确

  • 令牌具有 MCP 层预期的作用域

直接检查上游核心

curl -s -H "Authorization: Bearer changeme" http://127.0.0.1:TU_PUERTO_CORE/state | jq

安全说明

  • 保持 MCP 服务绑定到适合您部署的地址

  • 尽可能优先使用仅限本地的绑定,并配合显式的前端层

  • 使用专用的 OIDC 客户端和最小作用域

  • 定期轮换凭据并审查日志

-
security - not tested
A
license - permissive license
-
quality - not tested

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