MREF OSLC MCP服务器
⚠️ 进行中 -该项目正在积极开发中。测试尚未完成。在生产环境中使用,风险自负。
模型上下文协议(MCP)服务器,为Claude等人工智能助手提供对IBM MREF的OSLC(生命周期协作开放服务)API的直接访问,通过自然语言实现智能设施管理、工单创建、资产跟踪和位置管理。
🎯 它的作用
此MCP服务器将MREF的OSLC API公开为大型语言模型可用于以下用途的工具集合:
- 查询资源:搜索工作任务、地点、资产、人员和其他MREF记录
- 创建记录:通过适当的工作流操作生成工单、任务和其他记录
- 更新记录:使用状态转换和字段更新修改现有记录
- 发现架构:动态探索可用的资源类型、字段和功能
- 执行工作流:触发MREF工作流操作,如“创建草稿”、“完成”、“退役”
- 管理位置:搜索建筑物、楼层、空间并导航位置层次结构
- 跟踪资产:查询和管理设备、装置和实物资产
LLM可以使用自然语言与MREF交互,无需了解OSLC语法、MREF内部结构或API详细信息。
🏗️ 建筑
┌─────────────┐
│ Claude │ Natural Language: "Create a work order for HVAC repair"
│ AI │
└──────┬──────┘
│ MCP Protocol
│
┌──────▼──────────────────────────────┐
│ MREF OSLC MCP Server │
│ ├─ Tool Discovery (findShape) │
│ ├─ Schema Discovery (discover) │
│ ├─ Query Tools (query, search) │
│ ├─ CRUD Tools (create, update) │
│ └─ Workflow Tools (actions) │
└──────┬──────────────────────────────┘
│ OSLC HTTP/REST
│
┌──────▼──────────────────────────────┐
│ IBM MREF Platform │
│ ├─ Work Management │
│ ├─ Space & Location │
│ ├─ Asset Management │
│ └─ Custom Applications │
└─────────────────────────────────────┘✨ 主要特点
🔍 智能发现
- 自动编目所有OSLC服务提供商和资源形状
- 发现查询功能、创建工厂和可用字段
- 处理内置和自定义MREF资源
- 无硬编码假设-适应任何MREF配置
🎨 多种查询功能
资源可以有多个专门的查询端点(例如,“建筑查找”、“楼层查找”、《一般位置》)。服务器公开所有这些,让LLM选择最合适的一个。
📦 响应优化
- 自动解析详细的OSLC RDF/XML响应
- 删除冗余的命名空间声明和样板
- 响应大小平均减少约75%
- 保留所有数据-无截断或限制
- 返回干净、LLM友好的格式
🔐 安全
- 支持用户范围的身份验证(每个会话凭据)
- XML解析中的XXE攻击防御
- 所有参数的输入验证
- 全面的错误处理和记录
🧩 符合OSLC标准
- 从服务目录读取查询功能(不是硬编码模式)
- 从服务目录读取创建工厂
- 通过POST更新模式支持MREF的PATCH
- 处理MREF特定的约定(内联子项的LR后缀)
🚀 快速开始
先决条件
- Java 17或更高版本
- Maven 3.6+
- 在启用OSLC的情况下访问MREF实例
- 具有适当权限的MREF用户凭据
安装
- 克隆存储库
git clone https://github.com/yourusername/tririga-mcp-server.git
cd tririga-mcp-server- 配置MREF连接
设置环境变量:
export MREF_URL=https://your-MREF-server.com
export MREF_USER=your-username
export MREF_PASS=your-password或创建 application.properties:
MREF_URL=https://your-MREF-server.com
MREF_USER=your-username
MREF_PASS=your-password- 构建项目
mvn clean package- 运行服务器
java -jar target/tririga-mcp-server.jar服务器将于启动 http://localhost:8080 默认情况下。
与Claude Desktop一起使用
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"MREF": {
"command": "java",
"args": [
"-jar",
"/path/to/tririga-mcp-server.jar"
],
"env": {
"MREF_URL": "https://your-MREF-server.com",
"MREF_USER": "your-username",
"MREF_PASS": "your-password"
}
}
}
}📚 示例用法
连接后,您可以通过自然语言与MREF进行交互:
示例1:创建工单
User: "Create a work order to fix the HVAC system in Building A, due by end of week"
Claude: I'll create that work order for you.
→ Calls findShape("work task")
→ Calls discoverResource("triWorkTask") to see available fields
→ Calls createWorkTask(
title="Fix HVAC System - Building A",
description="HVAC repair needed",
plannedStart="2026-03-04T08:00:00",
plannedEnd="2026-03-07T17:00:00",
action="Create Draft"
)
→ Returns: Work order 147665710 created successfully示例2:搜索地点
User: "Find all conference rooms on the 3rd floor"
Claude: Let me search for those conference rooms.
→ Calls discoverResource("triLocation")
→ Sees multiple query capabilities available
→ Calls queryByUrl(
"http://host/oslc/spq/triFloorandSpaceLookupQC",
"spi:triLevelNU=3"
)
→ Returns: Found 5 conference rooms on floor 3示例3:更新工作任务状态
User: "Mark work task 147665710 as complete"
Claude: I'll complete that work task.
→ Calls readResource("triWorkTask", "147665710") to get current state
→ Calls getAvailableActions("triWorkTask", "147665710")
→ Sees available actions: ["Save", "Complete", "Cancel"]
→ Calls updateWorkTask(recordId="147665710", action="Complete")
→ Returns: Work task completed successfully🛠️ 可用工具
服务器提供30多种工具,按类别组织:
发现和模式
findShape-按关键字搜索资源类型discoverResource-获取资源的完整字段目录describeShape-获取详细的形状信息
查询和搜索
queryResource-带过滤的常规资源查询queryByUrl-使用特定查询功能进行查询searchWorkTasks-跨工作任务的全文搜索queryMyAssignedWorkTasks-获取用户分配的任务lookupBuildings-搜索建筑物lookupFloorsAndSpaces-搜索楼层和空间
CRUD操作
createResource-创建任何MREF记录createWorkTask-工作任务的便利方法readResource-获取完整记录详细信息updateResource-更新任何MREF记录updateWorkTask-工作任务的便利方法deleteResource-删除记录
工作流程和操作
getAvailableActions-获取记录当前状态的有效操作getWorkTaskStatuses-获取所有有效的状态值getPriorities-获取所有优先级getTaskTypes-获取所有任务类型
公用事业
oslcFetch-直接获取任何OSLC URLrefreshCatalog-重新加载服务目录refreshShape-重新加载特定的资源形状
🏗️ 项目结构
src/main/java/com/microsoft/mcp/sample/server/
├── McpServerApplication.java # Spring Boot main application
├── config/
│ └── StartupConfig.java # Startup configuration
├── controller/
│ └── HealthController.java # Health check endpoint
├── exception/
│ └── GlobalExceptionHandler.java # Exception handling
├── oslc/
│ ├── OslcResponseParser.java # XML response parser
│ ├── OslcServiceCatalog.java # Service provider catalog
│ ├── OslcShape.java # Resource shape parser
│ ├── OslcShapeEntry.java # Catalog entry
│ ├── OslcProperty.java # Field metadata
│ ├── OslcJsonBuilder.java # JSON request builder
│ └── OslcCreateResult.java # Creation response
└── service/
├── MREFOSLCService.java # Main MCP service (30+ tools)
└── CalculatorService.java # Example service (unused)🔧 配置
环境变量/应用程序属性
| 变量 | 描述 | 必填 | 默认 |
|---|---|---|---|
MREF_URL | MREF基本URL | 是 | - |
MREF_USER | MREF用户名 | 是 | - |
MREF_PASS | MREF密码 | 是 | - |
日志记录
配置登录 src/main/resources/logback.xml:
System.err
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
重要:对于基于STDIO的MCP服务器,所有日志记录必须转到stderr,而不是stdout。
📊 性能优化
响应大小减小
- 查询结果:减少约75%(XML→ 解析格式)
- 单个记录:减少约20-40%
- 参考数据:减少约80-95%
- 所有数据均已保存 -无截断
示例:130条状态记录
- 之前:42000+个XML字符
- 之后:约8000个字符的干净数据
- 减少:81%
HTTP客户端优化
- 单共享HttpClient实例(连接池)
- 10秒连接超时
- 30秒请求超时
- 自动重定向跟踪
缓存
- 启动时构建一次服务目录
- 首次加载后缓存的资源形状
- 用于线程安全的内存并发哈希映射
🧪 测试状态
⚠️ 测试未完成
✅ 测试和工作
- 基本的CRUD操作(创建、读取、更新、删除)
- 带过滤的查询操作
- 资源发现和模式检查
- 支持多种查询功能
- 响应解析和大小缩减
- 常见场景的错误处理
⚙️ 进行中
- 完整的集成测试套件
- 性能基准测试
- 边缘案例处理
- 自定义资源类型测试
- 并发操作测试
- 会话管理测试
📋 待办事项
- 单元测试覆盖率(目标:80%+)
- 负载测试
- 安全审计
- 文档审查
- 生产部署指南
🐛 已知问题
- 自定义资源类型:使用客户特定(cst前缀)资源进行有限测试
- 内联子创建:复杂的嵌套记录创建需要更多的测试
- 大型结果集:1000+条记录查询的性能需要优化
- 会话清理:未完全实现每会话凭据清理
🤝 贡献
欢迎投稿!请注意,这是一项正在进行的工作。
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
📞 支持
- 问题:请通过以下方式报告错误和功能请求
- 讨论:对于问题和讨论,请使用
🗺️ 路线图
- \[\]完整的测试覆盖率
- \[\]生产硬化
- \[\]高级查询生成器
- \[\]批量操作支持
- \[\]实时通知
- \[\]GraphQL支持
- \[\]Docker容器化
- \[\]Kubernetes部署示例
- \[\]OAuth2身份验证支持
- \[\]多租户支持
______________________________________________________________________
状态: 🚧 工作正在进行中| 版本:0.1.0-α| 最后更新2026年3月
