mcpField
U
Ummon

Ummon

本地服务
github.com/Nayshins开发工具3880 周前更新

关于 Ummon

Ummon 是一个用于软件工程的代码分析工具,可从代码库构建知识图谱,把代码实体与领域概念关联起来。它面向需要理解复杂系统的开发者和 AI 助手,项目仍处于早期开发阶段,接口可能发生较大变化。

主要功能

  1. 01构建代码知识图谱并支持增量更新
  2. 02支持 Rust、Python、JavaScript 和 Java
  3. 03结构化查询与自然语言查询
  4. 04Relevance Agent 按相关性对文件排序
  5. 05基于 LLM 的领域模型提取

适用场景

  1. 01为修复特定问题定位相关代码文件
  2. 02查询某类函数或模块在代码库中的分布
  3. 03将业务概念映射到实现代码

MCP 相关

README 中未说明与 MCP 的直接集成方式,仅在仓库标签中提及 MCP。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

██╗   ██╗███╗   ███╗███╗   ███╗ ██████╗ ███╗   ██╗
██║   ██║████╗ ████║████╗ ████║██╔═══██╗████╗  ██║
██║   ██║██╔████╔██║██╔████╔██║██║   ██║██╔██╗ ██║
██║   ██║██║╚██╔╝██║██║╚██╔╝██║██║   ██║██║╚██╗██║
╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║╚██████╔╝██║ ╚████║
 ╚═════╝ ╚═╝     ╚═╝╚═╝     ╚═╝ ╚═════╝ ╚═╝  ╚═══╝

"WHAT ARE THE ACTIVITIES OF A SYSTEM?
 I HAVE NOT THE SLIGHTEST IDEA.
 THE PATH APPEARS"

⚠️ 警告:此项目仍处于早期开发阶段,尚不稳定。不同版本之间的 API 和功能可能会有重大变化。

Ummon 是一款代码分析工具,可从代码库构建知识图谱,以增强理解、改进 AI 助手,并支持复杂查询。它会在代码实体(函数、类、模块)与领域概念之间建立关联,让复杂软件系统更易于分析,并帮助识别特定任务所需的相关代码。

本项目以 Dan Simmons 的《海伯利安诗篇》中的 AI Ummon 命名,旨在深入洞察代码库,帮助人类和 AI 助手更好地理解软件系统。

核心功能

  1. 知识图谱构建

    • 为代码编制索引,以创建语义表示
    • 映射代码实体之间的关系(调用、导入、依赖)
    • 支持多种语言(Rust、Python、JavaScript、Java)
    • 支持增量更新和完整重建
    • 跟踪文件修改,以尽量减少重复处理
    • 更多详情请参阅知识图谱文档
  2. 高级查询系统

    • 使用功能强大的结构化查询语言或自然语言查询代码库
    • 两种主要查询类型:
      • 选择查询:select [entity_type] where [conditions]
      • 遍历查询:[source_type] [relationship] [target_type] where [conditions]
    • 支持自然语言转换,便于用户交互
    • 提供丰富的筛选功能,包括属性条件和逻辑运算符
    • 支持多种输出格式(文本、JSON、CSV、树形)
    • 示例:"select functions where name like 'auth%'"、"显示所有身份验证函数"
    • 更多详情请参阅查询系统文档
  3. 相关性 Agent

    • 推荐与拟议更改或查询相关的代码文件
    • 使用语义分析从自然语言描述中提取技术关键词
    • 利用实体关系在知识图谱中识别相关实体
    • 根据邻近度和图中心性指标评估文件的相关性
    • 提供按相关性排序的文件列表,实现上下文感知的辅助
    • 示例:对于“修复身份验证漏洞”,它会识别与身份验证相关的文件
    • 更多详情请参阅相关性 Agent 文档
  4. 领域模型提取

    • 使用大模型识别业务实体和概念
    • 将领域概念映射到实现细节
    • 在技术理解与业务理解之间搭建桥梁
    • 更多详情请参阅领域提取文档

安装与设置

cargo install ummon

使用方法

# Index a codebase (performs incremental update by default)
ummon index /path/to/codebase

# Perform a full rebuild of the knowledge graph
ummon index /path/to/codebase --full

# Index with domain model extraction enabled
ummon index /path/to/codebase --enable-domain-extraction

# Specify a custom domain directory for extraction
ummon index /path/to/codebase --enable-domain-extraction --domain-dir models/

# Query using natural language
ummon query "show all authentication functions"

# Query using structured query language
ummon query "select functions where name like 'auth%'" --no-llm

# Find relationships between entities (traversal query)
ummon query "functions calling functions where name like 'validate%'" --no-llm

# Query with different output formats
ummon query "select functions" --format json
ummon query "select functions" --format csv
ummon query "select functions" --format tree

# Filter query results by type
ummon query "find api" --type-filter function

# Filter by file path pattern
ummon query "show all entities" --path src/auth

# Limit the number of results
ummon query "select functions" --limit 10

# Skip LLM processing for structured queries
ummon query "select functions where file_path like 'src/auth/%'" --no-llm

# Generate AI-assisted recommendations
ummon assist "implement a user registration function"

# Get relevant file suggestions for a proposed change
ummon assist --suggest-files "fix authentication token validation"

配置

Ummon 仅使用环境变量存储敏感信息:

  • OPENROUTER_API_KEY:大模型服务的 API 密钥(查询和领域提取所需)

其他所有配置均通过命令行标志处理。

架构

Ummon 采用模块化架构构建:

  • 用于代码分析的特定语言解析器
  • 用于存储实体和关系的基于图的存储
  • 使用元数据跟踪实现高效更新的 SQLite 数据库
  • 用于增量编制索引的智能更新机制
  • 用于语义理解的大模型集成
  • 用于上下文感知辅助的相关性 Agent
  • 用于用户交互的命令行界面
语言支持

Ummon 支持解析和分析多种编程语言:

  • Rust:类/结构体、trait、实现、函数、模块
  • Python:类、函数、装饰器、导入
  • JavaScript:类、函数、箭头函数、导入
  • Java:类、接口、方法、构造函数、字段

Java 解析器支持解析:

  • 带修饰符的类和接口定义
  • 构造函数声明
  • 带参数类型的方法声明
  • 带类型的字段声明
  • 包声明和导入(包括通配符导入和静态导入)
  • 提取文档注释
  • 方法调用和关系

知识图谱更新

Ummon 提供两种更新知识图谱的方式:

增量更新(默认)

不带 --full 标志运行时,Ummon 将执行增量更新:

  • 跟踪上次索引操作的时间戳
  • 根据文件修改时间检测自上次索引后修改的文件
  • 仅删除与修改文件关联的实体和关系
  • 仅重新索引修改过的文件,同时保留图谱的其余部分
  • 对于改动较小的大型代码库,速度显著更快
完全重建

带 --full 标志运行时,Ummon 将执行完全重建:

  • 清除数据库中的所有实体和关系
  • 从头开始重新索引整个代码库
  • 适用于重大更改后,或图谱可能处于不一致状态时

文档

如需更详细的文档,请参阅:

开发

构建和测试命令
# Build the project
cargo build

# Run the project
cargo run

# Run with specific command
cargo run -- index .              # Incremental index of current directory
cargo run -- index . --full       # Full rebuild of the knowledge graph
cargo run -- query "show funcs"   # Query the knowledge graph

# Run tests
cargo test
cargo test -- --nocapture  # Show test output
cargo test <test_name>     # Run specific test

# Format code
cargo fmt
测试资源
  • test/java/:用于解析器测试的 Java 测试文件
    • Test.java:用于基础解析的简单 Java 类
    • ComplexExample.java:包含高级 Java 特性(泛型、注解等)的示例
  • test/javascript/:用于测试的 JavaScript 测试文件

许可证

APACHE 许可证

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。