SentinelX Core MCP
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:8092SentinelX Core MCP:
http://127.0.0.1:8099
典型的安装配对示例:
SentinelX Core:
http://127.0.0.1:8091SentinelX 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 进行最小化手动测试需要:
初始化会话
发送
notifications/initialized调用
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' | jq4. 调用公共 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 持有者令牌而设计。
这意味着在典型的部署中有两个不同的身份验证层:
外部 MCP 身份验证
由
sentinelx-core-mcp验证基于
OIDC_ISSUER、OIDC_JWKS_URI和可选的OIDC_EXPECTED_AUDIENCE旨在供 ChatGPT 或其他 MCP 消费者等 MCP 客户端使用
内部 SentinelX Core 身份验证
由
sentinelx-core验证基于
SENTINELX_TOKEN仅在 MCP 桥接器将请求转发到上游时使用
建议
对于生产级部署,请使用真实的 OIDC 提供程序。
Keycloak 是一个很好的参考实现,因为它广为人知,并且是本项目最初使用的参考。然而,存储库应保持可移植性,因此文档将 Keycloak 视为示例,而不是硬性依赖。
从哪里开始
如需通用概述,请使用此 README
如需具体的 Keycloak 演练,请参阅
docs/keycloak-example.md
故障排除
MCP 启动但工具调用失败
检查:
SENTINELX_URL指向正在运行的 SentinelX CoreSENTINELX_TOKEN与上游核心匹配OIDC 颁发者和 JWKS URI 正确
令牌具有 MCP 层预期的作用域
直接检查上游核心
curl -s -H "Authorization: Bearer changeme" http://127.0.0.1:TU_PUERTO_CORE/state | jq安全说明
保持 MCP 服务绑定到适合您部署的地址
尽可能优先使用仅限本地的绑定,并配合显式的前端层
使用专用的 OIDC 客户端和最小作用域
定期轮换凭据并审查日志
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