使用说明
HexDocs MCP
HexDocs MCP是一个为Hex包文档提供语义搜索功能的项目,专为AI应用程序设计。它由两个主要部分组成:
- 从Hex包文档下载、处理和生成嵌入的Elixir二进制文件
- 一个实现模型上下文协议(MCP)的TypeScript服务器,它调用Elixir二进制文件来获取和搜索文档
安装
MCP客户端配置
TypeScript MCP服务器实现了 模型上下文协议(MCP) 并且设计用于MCP兼容客户端,如Cursor、Claude Desktop App、Continue等。服务器提供了对Hex文档进行语义搜索的工具。有关MCP兼容客户端的完整列表,请参阅 MCP客户文件.
将此添加到客户端的MCP json配置中:
{
"mcpServers": {
"hexdocs-mcp": {
"command": "npx",
"args": [
"-y",
"hexdocs-mcp@0.5.0"
]
}
}
}
此命令将自动将长生不老药二进制文件下载到fetch_docs和搜索文档中。虽然服务器处理二进制文件的下载,但您仍然需要在系统上安装Elixir和Mix,以便HexDocs获取功能正常工作。
史密瑟里
或者,您可以使用 史密瑟里 自动将MCP服务器添加到您的客户端配置中。
例如,对于Cursor,可以使用以下命令:
npx -y @smithery/cli@latest install @bradleygolden/hexdocs-mcp --client cursor
Elixir套装
或者,如果您不想使用mcp服务器,可以将hexdocs_mcp包添加到您的项目中。
{:hexdocs_mcp, "~> 0.5.0", only: :dev, runtime: false}
如果你使用floki或任何其他标记为仅在中可用的依赖项
在另一个环境中,将其更新为可用 :dev 环境也是。
例如,floki通常用于 :test:
{:floki, ">= 0.30.0", only: :test}
但您可以将其更新为在:dev环境中可用:
{:floki, ">= 0.30.0", only: [:dev, :test]}
需求
- 奥拉马 -生成嵌入所需
- 跑
ollama pull mxbai-embed-large下载推荐的嵌入模型 - 在使用嵌入功能之前,确保Olama正在运行
- 跑
- Elixir 1.16+和Erlang/OTP 26+
- 在CI环境中自动安装
- 当地发展所需
- Mix-Elixir构建工具(附带Elixir安装)
- Node.js 22或更高版本(适用于MCP服务器)
突破性变化:模型迁移(v0.6.0+)
⚠️ 重要:版本0.6.0引入了默认嵌入模型的突破性更改。
发生了什么变化:
- 默认模型已更改
nomic-embed-text(384个维度)至mxbai-embed-large(1024个维度) - 现有嵌入不兼容,将在升级期间清除
升级:
-
拉动新模型:
ollama pull mxbai-embed-large -
当您首次运行任何命令时,您现有的嵌入将被自动清除
-
为您的包重新生成嵌入:
mix hex.docs.mcp fetch_docs phoenix
为什么会发生这种变化: mxbai-embed-large 在所有平台(Windows/MOSC/Linux)上提供了明显更好的语义搜索质量和一致的维度。
配置
环境变量
以下环境变量可用于配置该工具:
| 变量 | 描述 | 默认值 |
|---|---|---|
HEXDOCS_MCP_PATH |
数据存储路径 | ~/.hexdocs_mcp |
HEXDOCS_MCP_MIX_PROJECT_PATHS |
以逗号分隔的mix.exs文件路径列表 | (无) |
示例:
# Set custom storage location
export HEXDOCS_MCP_PATH=/path/to/custom/directory
# Configure common project paths to avoid specifying --project flag each time
export HEXDOCS_MCP_MIX_PROJECT_PATHS="/path/to/project1/mix.exs,/path/to/project2/mix.exs"
MCP服务器配置
您还可以在服务器的MCP配置中配置环境变量:
{
"mcpServers": {
"hexdocs-mcp": {
"command": "...",
"args": [
"..."
],
"env": {
"HEXDOCS_MCP_PATH": "/path/to/custom/directory",
"HEXDOCS_MCP_MIX_PROJECT_PATHS": "/path/to/project1/mix.exs,/path/to/project2/mix.exs"
}
}
}
}
用法
AI工具
MCP服务器可供任何与MCP兼容的AI工具使用。服务器将在需要时自动获取文档并将其存储在配置的数据目录中。
请注意,大型软件包的下载和处理需要时间。
Elixir套装
用于矢量存储和检索的SQLite数据库是在需要时自动创建的。
获取文档、处理并生成包的嵌入:
mix hex.docs.mcp fetch_docs phoenix
获取特定版本的文档:
mix hex.docs.mcp fetch_docs phoenix 1.5.9
使用项目中的版本获取包的文档:
mix hex.docs.mcp fetch_docs phoenix --project path/to/mix.exs
配置项目路径以避免每次都指定它们:
export HEXDOCS_MCP_MIX_PROJECT_PATHS="/path/to/project1/mix.exs,/path/to/project2/mix.exs"
mix hex.docs.mcp fetch_docs phoenix # Will use the first path from HEXDOCS_MCP_MIX_PROJECT_PATHS
在现有嵌入中搜索:
mix hex.docs.mcp semantic_search phoenix --query "channels"
检查包是否存在嵌入:
mix hex.docs.mcp check_embeddings phoenix
mix hex.docs.mcp check_embeddings phoenix 1.7.0
致谢
- hex2文本 -作为最初的想法和参考
发展
此项目使用 布置 (前身为rtx)来管理开发工具和任务。Mise在整个项目中提供一致的工具版本和任务自动化。
设置开发环境
-
安装mise(如果您还没有):
# macOS with Homebrew brew install mise # Using the installer script curl https://mise.run | sh -
克隆存储库并设置开发环境:
git clone https://github.com/bradleygolden/hexdocs-mcp.git cd hexdocs-mcp mise install # Installs the right versions of Elixir and Node.js -
安装依赖关系:
mise build
开发任务
Mise定义了几个有用的开发任务:
mise build-构建Elixir和TypeScript组件mise test-运行所有测试mise mcp_inspect-启动MCP检查器以测试服务器mise start_mcp_server-启动MCP服务器(主要用于调试)
没有Mise
如果你不想使用mise,你需要:
- 灵丹妙药1.18.x
- Node.js 22.x
然后,您可以直接运行这些命令:
# Instead of mise run setup_elixir
mix setup
# Instead of mise run setup_ts
npm install
# Instead of mise run build
mix compile --no-optional-deps --warnings-as-errors
npm run build
# Instead of mise run test
mix test
mix format --check-formatted
mix deps --check-unused
mix deps.unlock --all
mix deps.get
mix test
# Instead of mise run mcp_inspect
MCP_INSPECTOR=true npx @modelcontextprotocol/inspector node dist/index.js
AI助手集成
该项目包括人工智能助手的自定义说明,以帮助您在使用Hex文档时优化工作流程。
自定义说明示例
您可以在存储库中找到示例自定义说明:
- 光标规则 -游标编辑器的自定义规则
- GitHub Copilot -GitHub Copilot的自定义说明
建议内容
When working with Elixir projects that use Hex packages:
## HexDocs MCP Workflow
1. Use `search` to find relevant documentation
2. Use `fetch` to fetch documentation for a package
发布指南
在准备新版本时,请遵循以下准则以确保一致性:
版本管理
-
SemVer合规性:关注 语义版本控制 严格来说:
- 主要:不兼容的API更改
- MINOR:向后兼容功能
- 补丁:向后兼容的错误修复
-
版本同步:
- 十六进制包版本(in
mix.exs)和npm包版本(inpackage.json)必须相同 - 更改版本时更新两个文件
- 十六进制包版本(in
代码的风格
- 格式和注释:
- 遵循.formatter.exs中定义的Elixir格式化程序规则
- 除非上下文有绝对必要,否则不要在代码中添加注释
- 首选具有清晰函数名的自文档代码
- 使用模块和函数文档(@moduledoc和@doc)而不是内联注释
变更日志管理
-
更新CHANGELOG.md:
- 在适当的标题下记录所有更改(添加、更改、固定等)
- 包括新版本号和日期
- 保留[未发布]部分以跟踪当前更改
- 跟随 保存变更日志 格式
-
输入格式:
- 使用现在时态、祈使式风格(例如,“添加特征”而不是“添加的特征”)
- 在适用的情况下,包括问题/PR编号
- 集团相关变更
发布过程
-
发布前:
- 跑
mix test确保所有测试通过 - 跑
mix format确保代码格式正确 - 验证CHANGELOG.md是否已更新
- 跑
-
发布承诺:
- 创建一个版本碰撞提交,更新:
- mix.exs
- package.json
- CHANGELOG.md(将[未发布]移动到新版本)
- 用版本号标记提交(v0.1.0格式)
- 创建一个版本碰撞提交,更新:
-
释放后:
- 在CHANGELOG.md中添加一个新的[未发布]部分
- 更新CHANGELOG.md底部的版本链接
这些指南适用于参与此项目的人类贡献者和人工智能助理。
贡献
欢迎投稿!请随时提交拉取请求。对于重大更改,请先打开一个问题来讨论您想要更改的内容。
该项目在麻省理工学院获得许可-请参阅 许可证 文件以获取详细信息。