Infor数据结构MCP服务器
一个轻量级的MCP(模型上下文协议)服务器,用于通过数据结构SQL查询Infor数据湖。此精简版本专门关注Data Fabric功能,为SQL查询执行、数据目录浏览和ION API发现提供了22种专用工具。
备注:这是轻量级版本。有关完整的M3 API程序访问和商业智能工具,请参阅 @douglaslismeyer/info-mcp服务器.
特性
- 📊 7数据结构工具:使用自动验证对Infor Data Lake执行SQL查询
- 📚 3数据目录工具:从数据湖中浏览表、字段和元数据
- 🔍 6 ION API工具:了解API套件、产品和操作
- 📦 6块管理工具:处理超过MCP令牌限制的大型查询结果
- ✅ 查询验证:根据数据目录元数据自动验证
- 🔧 删除列修复:针对“已删除”列字符串类型问题的内置更正
- ⚡ 响应分块:对100000多条记录的结果进行自动分块
- 🔐 OAuth 2.0身份验证:使用Infor.ionapi密钥格式进行安全身份验证
安装
使用npx(推荐)
无需安装!直接使用npx运行:
npx @douglaslinsmeyer/infor-datafabric-mcp本地安装
npm install -g @douglaslinsmeyer/infor-datafabric-mcp来源
git clone https://github.com/douglaslinsmeyer/infor-ion-mcp-lite.git
cd infor-ion-mcp-lite
npm install
npm run build快速开始
先决条件
- 信息API密钥:你需要一个
.ionapi来自Infor ION API设置的文件 - Node.js:版本18或更高版本
Claude桌面设置
Claude Desktop将MCP配置存储在:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
编辑配置文件并添加:
{
"mcpServers": {
"infor-datafabric": {
"command": "npx",
"args": ["-y", "@douglaslinsmeyer/infor-datafabric-mcp"],
"env": {
"IONAPI_KEY": "{\"ti\":\"YOUR_TENANT_ID\",\"cn\":\"Connection Name\",\"ci\":\"YOUR_CLIENT_ID\",\"cs\":\"YOUR_CLIENT_SECRET\",\"iu\":\"https://your-ionapi.inforcloudsuite.com\",\"pu\":\"https://your-sso.inforcloudsuite.com/tenant/as/\",\"oa\":\"authorization.oauth2\",\"ot\":\"token.oauth2\",\"or\":\"revoke_token.oauth2\",\"sc\":[\"Infor-ION\"],\"v\":\"1.1\",\"saak\":\"YOUR_SAAK\",\"sask\":\"YOUR_SASK\"}"
}
}
}
}备注:IONAPI_KEY必须是带转义引号的单行JSON字符串。
Claude代码设置
# Using .ionapi file
claude mcp add infor-datafabric \
-e IONAPI_KEY="$(cat /path/to/your.ionapi)" \
-- npx -y @douglaslinsmeyer/infor-datafabric-mcp
# Or using individual environment variables
claude mcp add infor-datafabric \
-e INFOR_TENANT_ID="YOUR_TENANT" \
-e INFOR_CLIENT_ID="YOUR_CLIENT_ID" \
-e INFOR_CLIENT_SECRET="YOUR_SECRET" \
-e INFOR_ION_BASE_URL="https://your-ionapi.com" \
-e INFOR_OAUTH_URL="https://your-sso.com/tenant/as/" \
-e INFOR_SAAK="YOUR_SAAK" \
-e INFOR_SASK="YOUR_SASK" \
-- npx -y @douglaslinsmeyer/infor-datafabric-mcp配置后,重新启动Claude Desktop或Claude Code。
可用工具(共22个)
数据结构工具(7)
| 工具 | 说明 |
|---|---|
datafabric_ping | 检查数据结构服务可用性 |
datafabric_build_query | 使用经过验证的表/列名构建SQL查询 |
datafabric_submit_query | 将原始SQL提交到Data Lake执行 |
datafabric_query_status | 检查正在运行的查询的执行状态 |
datafabric_get_results | 使用分页获取已完成的查询结果 |
datafabric_cancel_query | 取消正在运行的数据结构查询 |
datafabric_execute_query | 通过自动轮询端到端执行查询 |
数据目录工具(3)
| 工具 | 说明 |
|---|---|
datacatalog_list_tables | 列出Data Lake中的所有可用表 |
datacatalog_get_table_info | 获取特定表的详细元数据 |
datacatalog_find_tables_with_field | 查找包含特定字段名的表 |
ION API元数据工具(6)
| 工具 | 说明 |
|---|---|
ion_api_suites | 在Infor租户中发现可用的API套件 |
ion_api_suite_details | 获取有关特定API套件的详细信息 |
ion_products | 在Infor租户中查找可用产品 |
ion_operation_search | 搜索API产品运营 |
ion_api_swagger | 获取特定程序的Swagger JSON URL |
force_refresh_token | 强制刷新OAuth身份验证令牌 |
区块管理工具(6)
| 工具 | 说明 |
|---|---|
mcp_response_chunk | 检索存储的响应的特定块 |
mcp_stored_responses | 列出当前存储的所有大型响应 |
mcp_response_summary | 获取有关存储响应的摘要信息 |
mcp_delete_response | 删除已存储的响应以释放内存 |
mcp_storage_stats | 获取有关响应存储使用情况的统计信息 |
mcp_server_version | 获取当前版本和构建信息 |
用法示例
示例1:执行简单查询
// Query customer orders from Data Lake
await datafabric_execute_query({
query: "SELECT OKCONO, OKORNO, OKCUNO, OKDIVI FROM OOLINE WHERE deleted = '0' LIMIT 100"
})示例2:构建已验证的查询
// Build query with automatic table/field validation
await datafabric_build_query({
tables: ["OOLINE"],
fields: ["OKCONO", "OKORNO", "OKCUNO", "OKDIVI"],
conditions: ["deleted = '0'"],
limit: 100
})示例3:浏览可用表
// List all tables with "ORDER" in the name
await datacatalog_list_tables({
searchPattern: "ORDER"
})示例4:获取表架构
// Get detailed schema for OOLINE table
await datacatalog_get_table_info({
tableName: "OOLINE"
})示例5:处理大型结果
// Execute query that returns 10,000+ records
const result = await datafabric_execute_query({
query: "SELECT * FROM OOLINE WHERE deleted = '0'",
records: 50000
})
// If response is too large, it will be automatically chunked
// Use mcp_response_chunk to retrieve specific chunks
await mcp_response_chunk({
responseId: "abc123",
chunkIndex: 0
})环境变量
身份验证变量
| 变量 | 描述 | 必填 |
|---|---|---|
IONAPI_KEY | 以字符串形式完成.ionapi JSON内容 | 是\* |
INFOR_TENANT_ID | Infor租户标识符 | 是\*\* |
INFOR_CLIENT_ID | OAuth客户端ID | 是\*\* |
INFOR_CLIENT_SECRET | OAuth客户端机密 | 是\*\* |
INFOR_ION_BASE_URL | ION API基础URL | 是\*\* |
INFOR_OAUTH_URL | OAuth令牌端点URL | 是\*\* |
INFOR_SAAK | 服务帐户访问密钥 | 可选 |
INFOR_SASK | 服务帐户密钥 | 可选 |
\*如果不使用单个变量,则需要 \*\*如果不使用IONAPI_KEY,则需要
数据结构变量
| 变量 | 描述 | 默认值 |
|---|---|---|
INFOR_DATAFABRIC_MAX_RECORDS | 查询的最大记录数 | 10000 |
INFOR_DATAFABRIC_TIMEOUT | 查询超时(毫秒) | 300000 |
重要说明
关键:“已删除”列数据类型
Infor数据结构文档错误地指出“已删除”列是布尔值。
实际数据类型:字符串值 '0' (虚假)或 '1' (真)
-- ✅ CORRECT
SELECT * FROM OOLINE WHERE deleted = '0'
-- ❌ INCORRECT
SELECT * FROM OOLINE WHERE deleted = falseMCP服务器会自动纠正此错误并提供警告。
数据目录元数据缓存
- 表架构在本地缓存在
datacatalog-metadata.json - 使用更新缓存
npm run fetch-metadata当数据湖模式更改时 - 查询验证可防止常见的SQL错误和拼写错误
- 缓存包含在npm包中,并致力于版本控制
响应分块
大型查询结果(>100KB或>50条记录)会自动分块:
- 存储了超过20000个令牌以供检索
- 每个块显示带有导航指令的“Y块X”
- 使用
mcp_response_chunk检索特定块 - 存储的响应将在30分钟后过期
在完整版和精简版之间进行选择
| 功能 | 信息mcp服务器(完整) | 信息数据结构mcp(精简版) |
|---|---|---|
| 数据结构查询 | ✅ | ✅ |
| 数据目录 | ✅ | ✅ |
| ION API元数据 | ✅ | ✅ |
| 响应分块 | ✅ | ✅ |
| M3 API程序 | ✅ | ❌ |
| 商业智能 | ✅ | ❌ |
| 架构验证 | ✅ | ❌ |
| 安全模式 | ✅ | ❌ |
| 会话管理 | ✅ | ❌ |
| 工具总数 | 82 | 22 |
| 封装大小 | ~8MB | ~5MB |
如果满足以下条件,请使用Lite版本:
- 您只需要数据湖/数据结构查询
- 你想要更快的启动速度和更小的占地面积
- 您不需要M3 API程序访问权限
如果满足以下条件,请使用完整版:
- 您需要M3 API程序(CRS610MI、MMS20MI等)
- 你想要商业智能工具
- 您需要对M3 API进行模式验证
发展
# Run in development mode
npm run dev
# Run tests
npm test
npm run test:watch
npm run test:coverage
# Build
npm run build
# Update Data Catalog metadata
npm run fetch-metadata
# Type checking
npm run typecheck发布过程
此包在推送版本标签时使用自动CD发布到npm。
发布新版本
- 确保所有更改都已提交并推送到主
git status # Verify clean working directory- 创建并推送版本标签
# For a patch release (bug fixes)
git tag v1.0.1
# For a minor release (new features, backward compatible)
git tag v1.1.0
# For a major release (breaking changes)
git tag v2.0.0
# For pre-release versions
git tag v1.1.0-beta.1
# Push the tag to trigger CD pipeline
git push origin v1.0.1- 自动化工作流程
- 从标记名称中提取版本 - 运行测试并构建包 - 更新package.json版本 - 根据提交消息生成更改日志 - 使用changelog创建GitHub版本 - 发布到npmjs.com
- 验证发布
# Check npm package
npm view @douglaslinsmeyer/infor-datafabric-mcp
# Test installation
npx @douglaslinsmeyer/infor-datafabric-mcp@latest --version
# View GitHub release
gh release view v1.0.1提交消息约定
为了获得最佳的变更日志生成,请遵循以下步骤 约定式提交:
feat:-新功能(触发小版本升级)fix:-Bug修复(触发补丁版本升级)docs:-仅文档更改chore:-维护任务、依赖关系更新refactor:-不更改功能的代码重构test:-添加或更新测试perf:-性能改进BREAKING CHANGE:-重大更改(触发主要版本升级)
例子:
git commit -m "feat: add query timeout configuration"
git commit -m "fix: correct deleted column boolean handling in query builder"
git commit -m "docs: update Data Fabric query examples in README"
git commit -m "chore: bump axios to 1.12.0"回滚策略
如果已发布的版本存在关键问题:
- 弃用有问题的版本
npm deprecate @douglaslinsmeyer/infor-datafabric-mcp@1.0.1 "Critical bug in query execution, use 1.0.2 instead"- 发布固定版本
git tag v1.0.2
git push origin v1.0.2- 可选择删除GitHub版本
gh release delete v1.0.1 --yes
git tag -d v1.0.1
git push --delete origin v1.0.1版本号
跟随 语义化版本:
- 重大 (X.0.0)-中断更改,不兼容的API更改
- 次要的 (1.X.0)-新功能,向后兼容
- 补丁 (1.0.X)-错误修复,向后兼容
故障排除
常见问题
“OAuth客户端未初始化”
- 确保您的IONAPI_KEY格式正确
- 检查是否存在所有必填字段
连接超时
- 验证您的ION API URL是否可访问
- 检查防火墙/代理设置
查询错误
- 使用数据目录工具验证表和字段名称
- 记住:“deleted”列需要字符串值(“0”或“1”)
- 对照Infor数据结构文档检查查询语法
大结果处理
- 如果查询超时,请减少
records参数 - 对大于10000条记录的结果使用分块
- 存储的响应将在30分钟后过期
安全考虑
- 安全存储ION API证书
- 切勿将.ionapi文件提交到版本控制
- 对敏感数据使用环境变量
- 数据结构查询本质上是只读的
贡献
欢迎投稿!拜托:
- 克隆该仓库
- 创建要素分支
- 为新功能编写测试
- 确保所有测试通过
- 提交拉取请求
许可证
麻省理工学院
支持
- GitHub问题:https://github.com/douglaslinsmeyer/infor-ion-mcp-lite/issues
- 完整版本:https://github.com/douglaslinsmeyer/infor-ion-mcp
- Infor ION API文档:可在您的Infor门户网站中获得
______________________________________________________________________
正在寻找具有M3 API访问权限的全功能版本? 结账 @douglaslismeyer/info-mcp服务器
