mcp_osgi
一个专用于在OSGi环境中提供有用工具的MCP服务器
🎯 主要用例:此MCP服务器专为 GitHub复制品编码代理 在存储库范围的代理模式下。代理在GitHub Actions中运行,并通过HTTP/SSE传输连接到服务器。
📖 文档: 用MCP扩展编码代理
备注:此项目现在使用 官方MCP Java SDK (v0.14.1)而不是自制程序实现。这提供了一个标准化的、生产就绪的模型上下文协议实现,具有更好的可维护性和功能支持。
引言
什么是MCP?
模型上下文协议(MCP)是一种开放协议,可实现LLM应用程序与外部数据源和工具之间的无缝集成。MCP提供:
- 标准化集成:将人工智能助手与各种工具和数据源连接的通用协议
- 工具曝光:一种公开AI代理可以发现和调用的工具的方法
- 双向通信:基于JSON-RPC 2.0的客户端-服务器通信协议
- 丰富的功能:支持具有结构化模式的资源、提示和工具
MCP对于GitHub Copilot Coding Agents等AI工作流特别有用,这些工作流可以使用MCP服务器访问专用工具和特定领域的功能。
什么是OSGi?
OSGi(开放服务网关倡议)是一个用于开发和部署模块化软件程序和库的Java框架。主要特征包括:
- 模块化:应用程序由可重用的包(带元数据的JAR文件)构建
- 动态服务模型:服务可以在运行时动态安装、启动、停止、更新和卸载
- 版本控制:具有版本范围的复杂依赖关系管理
- 服务注册中心:用于组件之间松耦合的动态服务注册表
- 生命周期管理:完全控制捆绑包生命周期
OSGi广泛应用于企业应用程序、IDE平台(如Eclipse)和嵌入式系统。
前期工作和用例
当前实施状态
该项目提供了一个示例MCP服务器实现,该实现通过MCP协议公开了与OSGi相关的工具,使AI代理能够与OSGi环境交互。
实施的示例工具:
hello_osgi-一个演示工具,显示OSGi环境下MCP服务器的基本功能bundle_info-分析JAR或MANIFEST。MF文件,以确定它们是否是OSGi捆绑包并返回元数据find-搜索OSGi包、捆绑包或功能,并返回下载信息
用于MCP暴露的潜在OSGi工具
以下OSGi工具和命令对于通过MCP进行人工智能辅助开发非常有价值:
捆绑包管理
- list_bundles -列出所有已安装的捆绑包及其状态、版本和符号名称
- bundle_info -获取特定捆绑包的详细信息
- install_bundle -从URL或本地路径安装新捆绑包
- start_bundle -启动特定捆绑包
- stop_bundle -停止特定捆绑包
- update_bundle -更新现有捆绑包
- 卸载捆绑包 -卸载捆绑包
服务管理
- list_services -列出所有已注册的OSGi服务
- service_info -获取有关服务的详细信息(接口、属性、使用捆绑包)
- 服务引用 -查找与筛选器匹配的服务引用
相关性分析
- check_dependency -分析捆绑包依赖关系并确定缺失的需求
- 为什么没有解决 -诊断捆绑包未解决的原因
- 包装布线 -显示线束之间的包装接线
- 能力要求 -分析捆绑包功能和需求
配置和管理
- list_configurations -列出配置管理配置
- getconfig配置 -检索特定配置
- update_configuration -更新配置属性
- 删除配置 -删除配置
诊断和故障排除
- 诊断框架 -获取OSGi框架状态和诊断
- 联邦首脑 -显示捆绑清单标题
- bundle_classpath -显示捆绑包类路径条目
- find_class -查找导出特定类/包的捆绑包
构建与开发
- resolve_bundles -尝试解析捆绑包
- refresh_bundles -刷新线束布线
- validate_manifest -验证捆绑包清单文件
- 生成清单 -从Maven/Gradle元数据生成OSGi清单
人工智能辅助开发的好处
通过MCP公开OSGi工具,AI编码代理可以:
- 了解OSGi应用程序:分析捆绑包结构、依赖关系和服务关系
- 解决问题:诊断捆绑包解析问题、缺少依赖项和配置问题
- 自动化任务:执行常规OSGi管理任务,如安装、启动和配置捆绑包
- 生成代码:使用正确的清单和元数据创建结构正确的OSGi捆绑包
- 提供指导:根据实际OSGi框架状态提供上下文感知建议
示例:Hello OSGi MCP服务器
此存储库包括一个基于Maven的示例MCP服务器,演示了如何:
- 使用设置Java MCP服务器 官方MCP Java SDK
- 通过MCP协议定义和公开工具
- 使用OSGi上下文实现工具处理程序
- 支持多种传输模式:stdio和HTTP以及SSE(服务器发送事件)
服务器使用官方 MCP Java SDK v0.14.1 其提供:
- 模型上下文协议的标准化实施
- 用于进程间通信的内置stdio传输
- 用于基于服务器的部署的HTTP/SSE传输
- Project Reactor的异步服务器功能
- JSON模式验证和工具注册API
建立和运行
# Build the project
mvn clean package服务器支持两种传输模式:
- stdio模式 (默认):通过JSON-RPC 2.0在stdin/stdout上进行通信。可用于本地测试和开发。
- 服务器模式:使用SSE(服务器发送事件)传输运行嵌入式HTTP服务器。 这是GitHub Copilot编码代理使用的模式。
备注GitHub Copilot Coding Agent会自动构建并启动服务器,无需手动运行。以下命令仅用于本地开发和测试。
# Run the MCP server in stdio mode (for local testing)
java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar
# Run the MCP server in server mode (for testing GitHub Copilot configuration locally)
java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar server 3000与GitHub Copilot编码代理一起使用
此MCP服务器设计用于 GitHub复制品编码代理 在存储库范围的代理模式下,代理在GitHub Actions中运行,可以通过MCP服务器访问自定义工具。
📖 官方文件: 用MCP扩展编码代理
运作原理
- 导航 转到GitHub.com上的存储库
- 调用 从web界面访问GitHub Copilot编码代理
- 自动设置:代理自动:
- 运行 .github/workflows/copilot-setup-steps.yml 构建服务器的工作流 - 使用中的配置以HTTP/SSE模式启动服务器 .mcp/config.json - 通过SSE(服务器发送事件)传输连接到服务器 - 使所有注册的工具可供Copilot代理使用
配置文件
.mcp/config.json -GitHub Copilot编码代理的MCP服务器配置:
{
"mcpServers": {
"osgi": {
"command": "java",
"args": ["-jar", "/home/runner/tools/osgi_mcp/server.jar", "server", "3000"],
"url": "http://localhost:3000/mcp/sse"
}
}
}.github/workflows/copilot-setup-steps.yml -构建MCP服务器JAR并将其部署到预期位置的工作流。
⚠️ 重要:这些文件是专门为GitHub Copilot编码代理环境配置的。工作流作业和步骤名称必须符合GitHub的要求,除非明确需要,否则不应进行修改。
可用工具
服务器向Copilot代理公开以下工具:
hello_osgi-展示MCP服务器基本功能的演示工具bundle_info-分析JAR或MANIFEST。MF文件,以确定它们是否是OSGi捆绑包find-搜索OSGi包、捆绑包或功能,并返回下载信息
有关配置的更多详细信息,请参阅 .mcp/README.md.
______________________________________________________________________
本地开发和测试
虽然此服务器主要是为GitHub Copilot Coding Agent设计的,但您也可以在本地运行它进行开发和测试。
在本地运行服务器
# Build the project
mvn clean package
# Run in stdio mode (default - for command-line testing)
java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar
# Run in server mode (HTTP/SSE - for testing the GitHub Copilot configuration locally)
java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar server 3000使用stdio模式进行测试
在stdio模式下,服务器通过JSON-RPC 2.0通过stdin/stdout进行通信:
# Start the server and pipe a test request
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0"}}}' | java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar使用服务器模式(HTTP/SSE)进行测试
在服务器模式下,服务器运行一个具有SSE传输的HTTP服务器:
# Start the server
java -jar target/mcp-osgi-server-1.0.0-SNAPSHOT.jar server 3000
# In another terminal, test the SSE endpoint
curl http://localhost:3000/mcp/sse备注:stdio模式对于本地测试和开发很有用,但是 它没有被使用 GitHub Copilot编码代理。GitHub代理仅使用中配置的HTTP/SSE服务器模式 .mcp/config.json.项目结构
mcp_osgi/
├── .github/
│ ├── workflows/
│ │ ├── pr-verification.yml # CI workflow for PR verification
│ │ └── copilot-setup-steps.yml # Setup steps for Copilot Coding Agent
│ └── copilot-instructions.md # GitHub Copilot instructions
├── src/
│ ├── main/
│ │ └── java/
│ │ └── io/github/laeubi/mcp/osgi/
│ │ └── OsgiMcpServer.java # Main MCP server implementation
│ └── test/
│ └── java/
│ └── io/github/laeubi/mcp/osgi/
│ ├── OsgiMcpServerTest.java # Tests for stdio mode
│ └── OsgiMcpServerModeTest.java # Tests for server mode
├── pom.xml # Maven build configuration
├── local-development-config-example.json # Example config for local stdio testing (NOT for GitHub Copilot)
├── .gitignore # Git ignore patterns
├── README.md # This file
└── LICENSE # Eclipse Public License 2.0关键文件
- OsgiMcpServer.java:使用官方MCP Java SDK的主要MCP服务器实现,该SDK公开了OSGi工具(
hello_osgi,bundle_info,find) - pom.xml文件:Maven配置,带有MCP Java SDK(v0.14.1)和SLF4J(日志)的依赖关系
- 本地开发配置example.json:本地测试的stdio配置示例(不适用于GitHub Copilot)
- 复印机设置步骤.yml:用于在Copilot Coding Agent中设置环境的GitHub操作工作流
实现细节
服务器实现利用了官方的MCP Java SDK:
- 传输层:用途
StdioServerTransportProvider用于基于stdio的通信 - 服务器类型:内置
McpServer.async()用于非阻塞异步操作 - 工具注册:使用SDK注册工具
toolCall()具有正确模式定义的方法 - JSON处理:使用SDK内置的Jackson集成进行JSON序列化
- 响应式流:工具处理程序返回
Mono用于反应性加工
贡献
欢迎投稿!请随时通过以下方式提交拉取请求:
- 用于MCP暴露的其他OSGi工具
- 对现有工具的改进
- 文档增强
- 错误修复
许可证
此项目在Eclipse Public License 2.0下获得许可-请参阅 许可证 文件以获取详细信息。
