目录
- query_connx - update_connx - find_customers
CONNX MCP服务器
该项目是一个演示和参考实施,旨在展示如何在本地构建、配置和托管MCP服务器,以通过软件AG CONNX实现人工智能辅助访问大型机VSAM数据。
服务器不是一个完整的或强化的生产解决方案。相反,它提供了一个集中的、最小的MCP概念示例,包括工具定义、资源公开、ANSI SQL-92查询模式以及与遗留数据源的安全交互。
如有任何问题或建议,请联系Demos Economacos(Demos.Economacos(at)softwareageg.com)。
特性
- 与CONNX的ODBC连接,用于统一数据库访问。
- MCP工具:例如
query_connx,update_connx. - 资源:模式发现。
- 异步支持提高效率。
先决条件
- Python 3.8或更高版本(用Python 3.11/3.12测试)
- 已安装并配置CONNX ODBC驱动程序
- 对于Windows:CONNX ODBC驱动程序。 - 对于Linux:带CONNX驱动程序的unixODBC
- 系统中配置的有效CONNX DSN(数据源名称)
- 具有适当读/写权限的数据库和CONNX凭据
安装
- 克隆仓库:
git clone https://github.com/SoftwareAG/CONNX_MCP_Sample.git - 安装依赖项:
pip install -r requirements.txt - 配置CONNX DSN(请参阅下面的配置部分)
- 配置克劳德桌面MCP连接
配置
环境变量
创建 .env 项目根目录中的文件:
CONNX_DSN=your_connx_dsn_name
CONNX_USER=your_username
CONNX_PASSWORD=your_password
CONNX_TIMEOUT=30连接字符串格式
或者,在中配置 connx_server.py:
connection_string = (
f"DSN={CONNX_DSN};"
f"UID={CONNX_USER};"
f"PWD={CONNX_PASSWORD};"
)安全说明:永远不要将凭据提交到版本控制。始终在生产中使用环境变量或安全凭据管理。
用法
此服务器设计为由MCP主机(例如Claude Desktop)使用stdio传输启动。看 集成到MCP主机配置中
除了冒烟测试,您通常不会手动运行Python代码。
______________________________________________________________________
MCP工具
此服务器通过以下方式公开功能 MCP工具,允许客户端使用结构化、经过验证的入口点对CONNX连接的数据源执行数据库操作。
MCP工具提供了一个安全、定义良好的接口,用于与CONNX支持的数据进行交互,而不会向客户端暴露原始数据库连接。
当前可用工具示例
query_connx
目的 对CONNX连接的数据库执行SQL SELECT语句并返回结果。
参数
query(str):SQL SELECT语句
行为
- 异步执行
- 在内部使用参数化执行
- 以字典列表的形式返回结果
- 自动清理输入以降低SQL注入风险
返回格式
{
"results": [
{ "COLUMN1": "value", "COLUMN2": 123 },
...
],
"count": 10
}示例
SELECT CUSTOMER_ID, CUSTOMER_NAME
FROM CUSTOMERS
WHERE STATE = 'CA'______________________________________________________________________
update_connx
目的 通过CONNX执行数据修改SQL语句(INSERT、UPDATE、DELETE)。
参数
operation(str):插入、更新、删除之一query(str):完整的SQL语句
行为
- 执行前验证操作类型
- 在交易中执行
- 承诺成功,放弃失败
返回格式
{
"affected_rows": 5,
"message": "Update completed successfully."
}示例
UPDATE CUSTOMERS
SET STATUS = 'INACTIVE'
WHERE LAST_LOGIN '2024-01-01'"
}
}示例:批量更新
{
"tool": "update_connx",
"arguments": {
"operation": "update",
"query": "UPDATE INVENTORY SET STATUS = 'REORDER' WHERE QUANTITY Dict[str, Any]:
"""
Return the number of rows in a table.
"""
query = f"SELECT COUNT(*) AS ROW_COUNT FROM {sanitize_input(table_name)}"
try:
results = await execute_query_async(query)
return {
"table": table_name,
"row_count": results[0]["ROW_COUNT"]
}
except ValueError as e:
return {"error": str(e)}用法
{
"tool": "count_connx",
"arguments": {
"table_name": "CUSTOMERS"
}
}______________________________________________________________________
什么是MCP?
模型上下文协议(MCP)是由Anthropic开发的开源标准,于2024年11月发布。它使人工智能模型和应用程序能够通过标准化的界面安全地连接到外部数据源、工具和工作流并与之交互。
MCP充当AI的通用“USB-C”端口,允许无缝集成,无需为每个连接定制代码。该协议基于工具使用和函数调用等现有概念,但对其进行了标准化,减少了人工智能集成中的碎片化。通过提供对真实世界实时数据的访问,MCP使像Claude这样的大型语言模型(LLM)能够执行任务,提供准确的见解,并处理超出其原始训练数据的操作。
MCP解决了人工智能模型与实时数据和外部功能隔离的挑战。它使LLM能够:
- 访问来自不同来源的当前数据。
- 代表用户执行操作,例如查询数据库或发送电子邮件。
- 利用专门的工具和工作流程,无需自定义集成。
为什么选择CONNX的MCP?
CONNX已经提供了对不同数据源的统一访问,MCP在上面添加了一个人工智能驱动的自然语言界面。这种组合可以实现:
- 简化传统访问:使用简单的英语而不是复杂的SQL查询大型机和遗留系统
- 民主化数据:非技术用户可以在没有SQL知识的情况下访问企业数据
- 降低集成复杂性:一个MCP服务器提供对所有CONNX连接源的AI访问
- 企业安全:利用CONNX经过验证的安全模型,同时添加AI功能
- 更快的洞察时间:从提问到回答只需几秒钟,而不是几个小时
______________________________________________________________________
积木
MCP服务器通过三个主要构建块公开功能,这些构建块标准化了AI应用程序与外部系统的交互方式:
| 功能 | 说明 | 示例 | 谁控制它 |
|---|---|---|---|
| 工具 | LLM可以根据用户请求调用的活动函数。这些可以执行写入数据库、调用API或修改文件等操作。主机在调用之前必须获得用户同意。 | 搜索航班、发送消息、创建日历事件 | 模型(LLM决定何时呼叫) |
| 资源 | 提供上下文的被动、只读数据源,如文件内容、数据库架构或API文档。 | 检索文档、访问知识库、读取日历 | 应用程序(主机管理访问权限) |
| 提示 | 指导LLM有效使用工具和资源的预构建模板或工作流程。 | 计划假期、总结会议、起草电子邮件 | 用户(选择或自定义) |
______________________________________________________________________
MCP的工作原理
MCP的核心是允许LLM向外部系统请求帮助以完成用户查询。该过程涉及发现、调用、执行和响应。
简化工作流示例
考虑一个用户查询:“在我们的数据库中查找最新的销售报告,并将其通过电子邮件发送给我的经理。”
- 请求和发现LLM认识到它需要外部访问(例如,数据库查询和电子邮件发送)。通过MCP客户端,它可以发现可用的服务器和相关工具,例如
database_query和email_sender.
- 工具调用:LLM生成结构化请求。客户端将其发送到适当的服务器(例如,首先调用
database_query报告详情)。
- 外部行动和响应:服务器翻译请求(例如,转换为安全的SQL查询),在后端系统上执行它,检索数据,并将其以格式化的响应形式返回给客户端。
- 后续行动:LLM使用数据调用下一个工具(例如。,
email_sender),服务器确认完成。
- 最终响应LLM回复用户:“我找到了最新的销售报告,并通过电子邮件发送给了您的经理。”
这种双向流确保了高效、安全的交互。现实世界的例子包括从Figma设计生成web应用程序,通过自然语言分析多个数据库中的数据,或在Blender中创建3D模型进行打印。
______________________________________________________________________
CONNX MCP用例
商业智能与分析
- 自然语言查询:“显示2024年第四季度收入排名前10的客户”
- 跨数据库分析:在单个对话中查询来自多个CONNX连接源(大型机、Oracle、SQL Server)的数据
- 趋势分析:“比较过去3个季度各地区的销售业绩”
数据运营
- 批量更新:“更新自2022年以来未登录的所有非活跃客户”
- 数据验证:“检查重复的客户记录并显示冲突”
- 数据迁移:“从遗留系统中提取客户数据,为转型做好准备”
企业集成
- 主机访问:通过自然语言访问遗留VSAM、IMS或DB2数据
- 多平台查询:在单个查询中组合来自AS/400、Oracle和SQL Server的数据
- 实时报告:从实时企业数据生成报告,无需手动SQL
开发与测试
- 模式探索:“哪些表包含客户信息?”
- 数据采样:“显示订单表中的示例记录”
- 查询优化:在人工智能的帮助下测试和优化查询
______________________________________________________________________
安全最佳实践
- 输入净化:所有查询都经过净化,以防止SQL注入攻击
- 参数化查询:尽可能使用参数化执行
- 最小特权:仅授予数据库用户必要的权限
- 审计日志:启用CONNX审核日志以跟踪所有数据库操作
- 凭据管理:使用环境变量或密钥管理服务(AWS Secrets Manager、Azure密钥库)
- 网络安全:使用VPN或专用网络进行数据库连接
- 速率限制:考虑对MCP工具调用实施速率限制
______________________________________________________________________
免责声明
本项目按原样提供,不提供任何形式的保修。
其目的是:
- 学习资源
- 参考实现
- 安全MCP服务器开发的起点
它并不打算取代企业级安全控制。
