Go代码现代化工具

modex是一个MCP服务器,通过索引Go标准库和项目依赖文档到本地SQLite FTS5数据库,帮助LLMs生成现代、惯用的Go代码,避免依赖幻觉、版本偏差和过时的习惯用法。

  • by 0xCarbon
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 0xCarbon/modex

使用说明

modex

modex (模块专家/现代化专家)是一个MCP服务器,使LLM擅长编写现代、地道的Go代码。

它将Go标准库和项目依赖文档索引到本地SQLite FTS5数据库中,这样LLM就可以在使用API之前验证API是否存在,从而消除依赖幻觉、版本偏差和过时的习惯用法。

为什么

LLM经常生成Go代码,这些代码:

  • 引用已安装版本中不存在的函数或类型
  • 使用被新的stdlib添加所取代的已弃用模式
  • 从内存中发明方法签名,而不是检查实际的API

modex为模型提供了一个本地的、可搜索的真实文档索引——相同的文档 go doc 会显示出来,这样它就可以在写之前查看。

特性

  • 全文搜索 通过stdlib+项目依赖文档(FTS5、porter词干)
  • 背景索引 具有进度跟踪功能--不阻塞模型
  • 去重 --重新索引时跳过内容/版本不变的包
  • 诊断编排 --通过一个工具构建/过时/安全/现代化检查
  • 现代化应用模式 --奔跑 go fix 使用模拟运行支持进行更改
  • 运输 --stdio和流式HTTP(建议:作为持久HTTP服务运行)
  • 纯Go SQLite --无CGo,无需系统库

工具

工具 说明
ping 健康检查-退货 pong.
register_project 注册Go项目目录以进行索引。确认 go.mod 存在并启动stdlib+所有项目依赖项的后台索引。
get_index_status 检查已注册项目的索引进度。返回阶段、总计/索引/跳过/失败计数。
reindex_project 重新启动已注册项目的索引(首先取消任何活动的索引)。
search_docs 使用模式搜索索引文档 auto, text, symbol,或 fts5,以及可选的包/种类/父过滤器。
get_diagnostics 对项目运行诊断程序。类别: build, outdated, security, modernize (默认情况下为所有类别)。
apply_modernize 申请 go fix 具有可选选择性修复器的现代化, aggressive,以及 dry_run 模式。

快速资产

prompts/coding_modern_go.md 包含一个系统提示,用于使用modex编写现代、地道的Go代码。

安装

先决条件: 转到1.26+(modex使用 go fix 1.26中添加了现代化器;它可以为使用任何Go版本构建的项目建立索引)

从源代码构建:

git clone https://github.com/0xCarbon/modex
cd modex
go build -o modex ./cmd/modex

或直接安装:

go install github.com/0xCarbon/modex/cmd/modex@latest

用法

modex被设计为作为一个持久的HTTP服务运行——启动一次并从任意数量的Claude会话连接。

启动服务器

modex --transport http --addr 127.0.0.1:3838

MCP端点在根路径上提供服务,例如。 http://127.0.0.1:3838/mcp.

stdio传输

对于单会话使用(例如macOS/Windows上的Claude Desktop):

modex --transport stdio

数据库位置

索引存储在 ~/.cache/modex/modex.db 默认情况下。覆盖 --db:

modex --db /path/to/modex.db

Claude代码配置

将modex添加为全局MCP服务器,使其在每个项目中都可用:

claude mcp add --transport http modex http://127.0.0.1:3838/mcp

或编辑 ~/.claude.json 直接添加到顶级 mcpServers:

{
  "mcpServers": {
    "modex": {
      "type": "http",
      "url": "http://127.0.0.1:3838/mcp"
    }
  }
}

Claude桌面配置

对于stdio传输,请添加 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "modex": {
      "command": "modex"
    }
  }
}

工作流程

  1. 注册您的项目一次:

    register_project(project_path="/path/to/your/project")
    
  2. 索引在后台运行。检查进度:

    get_index_status(project_path="/path/to/your/project")
    
  3. 曾经 phase 是 ready,在编写代码之前搜索文档:

    search_docs(query="bytes.Buffer.Write", mode="symbol")
    
  4. 需要时运行诊断程序:

    get_diagnostics(project_path="/path/to/your/project", categories=["build","security"])
    
  5. 应用现代化(或预览 dry_run=true):

    apply_modernize(project_path="/path/to/your/project", dry_run=true)
    

建筑

cmd/modex/          main entry point, flag parsing, transport setup
internal/
  db/               SQLite wrapper, FTS5 schema, auto-sync triggers
  diagnostics/      build, outdated, security, modernize orchestration
  docs/             go/doc extraction, background indexer, progress tracking
  server/           MCP server, tool handlers
prompts/            coding_modern_go.md system prompt

储存: SQLite具有FTS5虚拟表,由 docs 内容表。自动同步触发器使FTS5与INSERT/DELETE/UPDATE操作保持同步,无需任何手动管理。

索引管道:

  1. 枚举stdlib和项目包(轻量级 NeedName|NeedModule)
  2. 对于每个未重复数据消除的包:满载语法,通过提取 go/doc,插入交易

除尘: SHA256哈希值 packagePath@moduleVersion本地包(无版本)使用其源文件的内容指纹。

发展

# Build
go build ./...

# Fast tests (skips integration tests that index stdlib ~30s)
go test -short ./...

# All tests
go test ./... -timeout 10m

# Specific packages
go test ./internal/db/... -v
go test ./internal/docs/... -v
go test ./internal/server/... -v

路线图

  • [x] MODEX-001:核心MCP服务器(ping、限速、并发中间件)
  • [x] MODEX-002:文档索引(SQLite FTS5、go/doc提取、后台索引器)
  • [x] 型号-003: search_docs 工具
  • [x] 型号-004: get_diagnostics 编排器
  • [x] MODEX-005:构建诊断(通过 get_diagnostics 类别 build)
  • [x] MODEX-006:过时的诊断(通过 get_diagnostics 类别 outdated)
  • [x] MODEX-007:安全诊断(通过 get_diagnostics 类别 security)
  • [x] MODEX-008:使诊断现代化(通过 get_diagnostics 类别 modernize)
  • [x] 型号-009: apply_modernize
  • [x] 型号-010: coding_modern_go 提示

许可证

麻省理工学院