EBX SQL网关MCP服务器
此MCP服务器通过基于令牌的身份验证将TIBCO EBX作为工具本地公开。它是用 FastMCP 并通过uvicorn通过HTTP提供服务。
与代理API服务器不同(server.py),该服务器直接与EBX数据服务REST API和ESL脚本端点进行对话,在没有中间件层的情况下为您提供完全控制。 与代理API服务器不同(server.py),该服务器直接与EBX数据服务REST API和ESL脚本端点进行对话,在没有中间件层的情况下为您提供完全控制。
工具
服务器提供了五个必须按顺序调用的工具:
1. login_to_ebx
使用EBX进行身份验证并返回 auth_token 弦。
参数:
username(必填):EBX用户名password(必填):EBX密码
退货: 令牌字符串(例如。 "Token abc123…").将此传递给后续的每次工具调用。
______________________________________________________________________
2. search_ebx_repository
发现可用的数据空间和数据集。
参数:
auth_token(必填):令牌来自login_to_ebxdataspace_name(可选):如果省略,则返回所有打开的数据空间。如果提供,则返回该数据空间内的所有数据集。
退货: 带有标签和描述的数据空间或数据集的格式化列表。
______________________________________________________________________
3. list_tables_in_dataset
爬取数据集的元模型以查找所有可查询的表路径。
参数:
auth_token(必填):令牌来自login_to_ebxdataspace(必填):数据空间名称(来自search_ebx_repository)dataset(必填):数据集名称(来源search_ebx_repository)
退货: 表路径和标签的Markdown表。
______________________________________________________________________
4. inspect_table
返回编写SQL查询所需的确切列名、类型和结构。
参数:
auth_token(必填):令牌来自login_to_ebxdataspace(必填):数据空间名称dataset(必填):数据集名称table_path(必填):表路径(例如。/root/Customer)从list_tables_in_dataset
退货: 列名、类型、标签以及字段是否为必填项的Markdown表。
重要提示: 注意每个字段的返回类型——非字符串类型必须包装在CAST(… AS VARCHAR)并且需要外键FK_AS_STRING(…)在SQL中。
______________________________________________________________________
5. execute_ebx_sql
对EBX执行Apache Calcite SQL查询。
参数:
auth_token(必填):令牌来自login_to_ebxsql(必填):SQL SELECT查询dataspace(必填):数据空间名称dataset(必填):数据集名称expected_columns(必填):与完全匹配的列别名列表ASSQL中的别名
退货: JSON查询结果。
SQL规则(关键-API没有提供有关错误SQL的错误详细信息)
| 规则 | 正确 | 不正确 |
|---|---|---|
| 表路径必须用别名双引号括起来 | FROM "/root/Customer" c | FROM /root/Customer |
| 每个字段都必须以表别名作为前缀 | c.Address.city | Address.city |
| 必须强制转换非字符串字段 | CAST(c.age AS VARCHAR) AS age | c.age AS age |
| 外键字段必须使用本机函数 | FK_AS_STRING(c.household) AS household_id | CAST(c.household AS VARCHAR) |
| 每个选定的列都必须有一个显式别名 | c.name AS name | c.name |
expected_columns 必须与SQL别名完全匹配 | ["name", "age"] 匹配 AS name, AS age | 名称不匹配 |
查询示例:
SELECT
c.Identification.firstName AS first_name,
CAST(c.Metrics.age AS VARCHAR) AS age,
FK_AS_STRING(c.household) AS household_id
FROM "/root/Person" cEBX ESL脚本设置(必填)
在运行MCP服务器之前,您必须导入并发布 AI_SQL_Gateway_ESL.xml 将脚本写入EBX实例。这将部署 SqlExecutor MCP服务器调用的REST端点。
步骤1--打开脚本IDE
以管理员身份登录EBX并导航到:
行政 → 脚本IDE
(编写IDE文档)
步骤2——导入脚本
- 在脚本IDE工具栏中,单击 行动 → 导入.
- 在导入对话框中,选择 选择文件 并挑选
AI_SQL_Gateway_ESL.xml从这个存储库。 - 点击 导入.剧本
rest/SqlExecutor(标签 *AI SQL网关*)将出现在脚本树中。
步骤3——发布脚本
- 选择
rest/SqlExecutor树上的脚本。 - 点击 行动 → 发布 在工具栏中。
- 确认对话框。EBX将编译并发布脚本,使REST端点生效。
端点现在将在以下位置可用:
http:///ebx-dataservices/script/SqlExecutor/execute注: 如果更改脚本路径(idePath在XML中),更新EBX_ESL_REST_URL在server_ESL.py因此。
______________________________________________________________________
设置
- 创建虚拟环境:
python3 -m venv .venv
source .venv/bin/activate # macOS/Linux
# or
.venv\Scripts\activate # Windows- 安装依赖项:
pip install -r requirements.txt- 确保TIBCO EBX正在运行
http://localhost:8081而且SqlExecutorESL脚本部署在/ebx-dataservices/script/SqlExecutor/execute.
运行服务器
python server_ESL.py在端口上启动服务器 8001MCP终点为:
- MCP端点:
http://localhost:8001/mcp
API配置
在顶部修改这些常量 server_ESL.py 指向不同的环境:
| 常量 | 默认值 |
|---|---|
EBX_HOST | http://localhost:8081 |
EBX_ESL_REST_URL | {EBX_HOST}/ebx-dataservices/script/SqlExecutor/execute |
EBX_DATASERVICES_REST_URL | {EBX_HOST}/ebx-dataservices/rest/data/v1 |
集成
GitHub副本(VS代码)
添加 .vscode/mcp.json:
{
"servers": {
"ebx-sql-gateway": {
"type": "http",
"url": "http://localhost:8001/mcp"
}
}
}克劳德桌面版
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"ebx-agent-tools": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8001/mcp"
]
}
}
}OpenWeb用户界面
OpenWebUI可以将此MCP服务器用作外部工具提供者。这些步骤假设您已经配置了模型(例如通过Ollama)。需要一个能够进行代理/函数调用行为的适度强大的模型,例如 gpt-oss:20b 或等效物。
步骤1--将MCP服务器注册为外部工具
- 打开 管理面板 → 设置 → 外部工具.
- 点击 + 添加新条目。
- 设置 统一资源定位符 指向MCP服务器。\
例如,如果OpenWebUI在Docker中运行,而MCP服务器在主机上运行,请使用:
http://host.docker.internal:8001/mcp- 填写 ID, 名字,以及 描述 (自由格式,仅用于显示)。
- 在 函数名称筛选器列表 字段,键入一个逗号(
,).这是针对当前错误的一种解决方法,如果字段为空,则阻止所有工具暴露。 - 切换 启用 然后单击 检查连接 以验证服务器是否可访问。
步骤2——在OpenWebUI工作区中创建模型
- 首选 工作区 → 模型 并创建一个由您选择的基础模型支持的新模型。
- 系统提示 --粘贴一个系统提示,指示模型正确使用EBX工具。文件
System_Prompt_ESL和System_Prompt_XPath这个存储库中有现成的起点。 - 高级参数 → set 函数调用 到 本土的.
- 工具 → 勾选您在步骤1中注册的MCP服务器条目旁边的复选框。
- 保存模型并确保通过切换启用它。您现在可以与它聊天,它将自动调用EBX MCP工具。
______________________________________________________________________
推荐工作流程
始终按以下顺序调用工具:
login_to_ebx--验证并获取令牌search_ebx_repository--找到正确的数据空间(省略dataspace_name)search_ebx_repository--找到正确的数据集(passdataspace_name)list_tables_in_dataset--查找确切的表路径inspect_table--在编写SQL之前确认确切的字段名和类型execute_ebx_sql--运行查询
卷曲测试
# Initialize session
curl -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'
# List available tools
curl -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":2}'