字形
一个模型上下文协议(MCP)服务器,使用Tree sitter的声明性查询语言从代码库中提取符号轮廓。通过干净、高效的符号提取为LLM编码代理提供所需的上下文。也可以用作独立的CLI工具。
安装
macOS
安装Go:
$ brew install go安装最新版本的字形:
$ GOBIN=/usr/local/bin go install "github.com/benmyles/glyph@latest"它做什么
glyph采用文件路径glob,递归地发现匹配的代码文件,并使用Tree sitter强大的查询语言对其进行解析,以生成准确的符号轮廓。您可以控制细节级别——从高级结构到带有可见性修饰符的完整函数签名。
为什么是字形?
LLM编码代理在理解代码结构时效果最佳。字形通过提供干净的多文件符号映射来弥合这一差距,这些符号映射作为高效的上下文,没有压倒性的令牌限制。
主要特点
- 基于声明式查询的提取 -使用Tree sitter的查询语言进行精确、可维护的符号提取
- 基于Glob的文件发现 -用熟悉的模式指向你的代码
- 语言无关架构 -只需查询模式即可轻松添加新语言
- 可配置的细节级别 -选择你需要多少上下文
- 多文件支持 -获得整个项目的统一视图
- MCP本地 -专为与AI编码工作流程无缝集成而构建
- 高性能 -优化了Tree sitter查询以实现快速提取
支持的语言
- 去 -函数、方法、类型、结构、接口、常量、变量
- Java -类、接口、方法、构造函数、字段、枚举、记录、注释
- JavaScript/TypeScript -函数、类、方法、箭头函数、变量、接口、类型别名
- python -函数、类、装饰定义、作业
- 易于扩展 -添加新语言只需要大约20行查询模式
建筑
glyph使用了一种现代的声明性方法:
- 树保姆查询 替换复杂的AST遍历逻辑
- 特定语言的查询模式 定义要提取的符号
- 统一提取引擎 适用于所有语言
- 模块化设计 分别关注查询、提取、格式化和文件处理
符号类型
glyph使用简洁的符号类型名称来最大限度地减少令牌的使用:
func-函数和类函数声明method-类/结构体方法class-课程interface-接口struct-结构(Go)type-类型声明(Go)const-常量var-变量field-类/结构体字段constructor-施工人员enum-枚举record-记录(Java)annotation-注释(Java)property-属性(TypeScript)
用法
与AI编码助手集成
克劳德代码
使用MCP命令将字形添加到Claude代码中:
# Add glyph as a local MCP server (for your current project)
claude mcp add glyph /usr/local/bin/glyph mcp要验证安装:
# List all configured servers
claude mcp list
# Check glyph server details
claude mcp get glyph您还可以使用Claude Code随时检查服务器状态 /mcp 命令。
光标
将字形添加到光标MCP配置中:
- 打开光标设置(Cmd/Ctrl+,)
- 搜索“MCP”或导航到扩展→ MCP
- 将字形添加到MCP服务器:
{
"mcpServers": {
"glyph": {
"command": "/usr/local/bin/glyph",
"args": ["mcp"]
}
}
}配置后,您可以通过MCP接口使用字形从代码库中提取符号轮廓,帮助AI更好地理解您的代码结构。
MCP服务器模式(默认)
将glyph作为MCP服务器运行,以便与LLM编码代理集成:
$ glyph mcp命令行接口命令模式
直接从命令行使用字形提取符号:
$ glyph cli '/path/to/project/*.go'$ glyph cli -detail=minimal '/path/to/project/**/*.js'选项:
-detail:详细程度(minimal,standard,或full).默认值为standard.
注意:所有文件模式都必须是绝对路径。
细节级别
最小化
仅显示带有行号的符号名称和类型:
- func: main (line 15)
- struct: Server (line 5)
- method: Start (line 10)标准(默认)
显示签名和声明:
- func: func main()
- struct: type Server struct
- method: func (s *Server) Start() error满的
显示包含代码块的完整符号定义:
- func (lines 15-20):函数main(){ 服务器:=服务器{} 服务器。开始() }
发展
$ git clone https://github.com/benmyles/glyph
$ cd glyph$ make clean$ make test$ make build$ make install DESTDIR=/usr/local/bin添加新语言
得益于基于查询的架构,添加对新语言的支持非常简单:
- 添加语言检测 在……里面
file_utils.go(约2行) - 添加查询模式 在……里面
queries.go(约10-20行) - 添加到查询调度程序 在……里面
queries.go(~5行)
添加Rust支持的示例:
// In file_utils.go
case ".rs":
return rust.GetLanguage(), nil
// In queries.go
var rustQueries = map[string]string{
"functions": `
(function_item
name: (identifier) @name
) @function
`,
"structs": `
(struct_item
name: (type_identifier) @name
) @struct
`,
// ... more patterns
}演出
- 快速解析 使用Tree sitter的增量解析
- 优化查询 用于高效的符号提取
- 最小内存使用 具有流式文件处理功能
- 解析器重用 跨多个文件实现更好的性能
