Osquery 的完整模型上下文协议(MCP)实现,包括一个 Spring Boot 服务器和一个基于 Spring AI 的 CLI 客户端,使AI助手能够通过自然语言回答系统诊断问题。
Osquery MCP 服务器充当AI模型与操作系统之间的智能桥梁。它将诸如“为什么我的风扇这么热?”或“什么占用了我所有的内存?”这样的自然语言问题转换成精确的 Osquery SQL 查询,允许AI助手诊断系统问题、监控性能并调查安全问题。
该项目包括一个完整的 Spring AI MCP 客户端实现,演示了如何通过模型上下文协议使用 Spring AI 的自动配置与服务器通信,提供程序化访问和交互式CLI。
SyncMcpToolCallbackProvider 发现工具。osqueryi 在你的PATH中可用git clone https://github.com/yourusername/OsqueryMcpServer.git
cd OsqueryMcpServer
./gradlew build # 构建服务器
./gradlew bootJar # 创建可执行JAR
cd client-springai && ../gradlew build # 构建Spring AI客户端
./gradlew bootRun
# 自然语言查询
cd client-springai && ../gradlew run --args="\"什么在占用我的CPU?\""
# 交互模式
../gradlew run --args="--interactive"
# 自定义SQL查询
../gradlew run --args="\"SELECT name FROM system_info\""
# 运行测试套件
./test-client-springai.sh
./gradlew test --tests OsqueryServiceTest # 服务器测试
cd client-springai && ../gradlew test # Spring AI客户端测试
服务器以STDIO模式运行,并提供了九种专门的工具用于系统诊断:
客户端提供了多种方式与服务器交互:
cd client-springai
../gradlew run --args="\"什么在占用我的CPU?\""
../gradlew run --args="\"显示网络连接\""
../gradlew run --args="\"为什么我的风扇在运转?\""
../gradlew run --args="\"显示系统健康状况\""
../gradlew run --args="\"SELECT name, pid, cpu_time FROM processes ORDER BY cpu_time DESC LIMIT 5\""
../gradlew run --args="\"SELECT * FROM system_info\""
../gradlew run --args="--interactive"
# 然后可以交互式地输入查询,输入'help'获取帮助,'exit'退出
executeOsquery(sql):执行任何有效的 Osquery SQL 查询listOsqueryTables():获取系统上所有可用的 Osquery 表getTableSchema(tableName):发现任何表的列和类型getHighCpuProcesses():查找消耗最多CPU的进程getHighMemoryProcesses():查找使用最多内存的进程getNetworkConnections():显示带有进程信息的活动网络连接getTemperatureInfo():获取系统温度和风扇速度(macOS)getCommonQueries():获取常见诊断场景的示例查询getSystemHealthSummary():获取关于CPU、内存、磁盘、网络和温度的综合概述无需编写复杂的SQL,现在可以通过自然语言提问:
“为什么我的电脑运行缓慢?” → AI 使用 getHighCpuProcesses() 和 getHighMemoryProcesses()
“什么连接到了互联网?” → AI 使用 getNetworkConnections()
“为什么我的风扇这么响?” → AI 使用 getTemperatureInfo() 来检查系统温度
“显示所有Chrome进程” → AI 使用 executeOsquery() 并结合模式发现
“给我一个整体的系统健康检查” → AI 使用 getSystemHealthSummary() 进行综合诊断
应用程序通过 src/main/resources/application.properties 进行配置:
此服务器使用 Spring AI 的 MCP 服务器启动器实现了模型上下文协议(MCP)。它可以与支持MCP的AI工具集成,例如:
对于 Claude Desktop,添加到您的配置中:
{
"mcpServers": {
"osquery": {
"command": "java",
"args": ["-jar", "path/to/osquery-mcp-server.jar"]
}
}
}
⚠️ 警告:此服务器以运行用户的权限执行系统命令。考虑以下安全措施:
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/kousenit/osquerymcpserver/
│ │ │ ├── OsqueryMcpServerApplication.java
│ │ │ └── OsqueryService.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
└── build.gradle.kts
├── src/ # MCP 服务器(Spring Boot)
│ ├── main/java/com/kousenit/osquerymcpserver/
│ │ ├── OsqueryM
│ │ │ cpServerApplication.java # 主应用程序
│ │ └── OsqueryService.java # MCP 工具
│ └── test/java/com/kousenit/osquerymcpserver/
│ └── OsqueryServiceTest.java # 服务器测试
├── client-springai/ # Spring AI MCP 客户端
│ ├── src/main/java/com/kousenit/osqueryclient/springai/
│ │ └── SpringAiOsqueryClientApplication.java # CLI 应用程序
│ ├── src/test/java/com/kousenit/osqueryclient/springai/
│ │ └── QueryMappingTest.java # 单元测试
│ ├── application.yml # Spring AI 配置
│ └── test-client-springai.sh # 测试运行器
└── build.gradle.kts # 服务器构建配置
./gradlew test # 服务器测试
cd client-springai && ../gradlew test # Spring AI 客户端测试
./test-client-springai.sh # 完整客户端测试套件
服务器包含了针对常见诊断场景的预构建查询。使用 getCommonQueries() 查看所有可用的示例:
-- 消耗最多CPU的进程
SELECT name, pid, uid, (user_time + system_time) AS cpu_time FROM processes ORDER BY cpu_time DESC LIMIT 10;
-- 按进程的内存使用情况
SELECT name, pid, resident_size, total_size FROM processes ORDER BY resident_size DESC LIMIT 10;
-- 活动网络连接
SELECT pid, local_address, local_port, remote_address, remote_port, state
FROM process_open_sockets WHERE state = 'ESTABLISHED'
-- 整体系统信息
SELECT hostname, cpu_brand, physical_memory, hardware_vendor, hardware_model FROM system_info;
-- 最近的文件更改
SELECT path, mtime, size FROM file WHERE path LIKE '/Users/%'
AND mtime > (strftime('%s', 'now') - 3600)
AI 可以使用这些作为模板,或者直接调用专门的诊断工具。
欢迎贡献!请随时提交拉取请求。
MIT 许可证。详情见 许可证。