[!CAUTION] 这是用Vibe编码的。我对Rust了解不多。我已经阅读了代码,但请自行承担风险使用。
这是一个MCP(模型上下文协议)服务器,提供查找Elm包文档的工具。该服务器允许AI助手读取elm.json文件并从官方Elm包仓库获取包文档。
最简单的方式是通过npx(仅限macOS)。
claude mcp add elm-packages npx @caseywebb/elm-package-mcp-server
{
"mcpServers": {
"elm-package": {
"command": "npx",
"args": ["@caseywebb/elm-package-mcp-server"]
}
}
}
最简单的安装方式是从最新发布下载预构建二进制文件。
下载适合您平台的二进制文件:
elm-package-mcp-server-linux-x86_64.tar.gzelm-package-mcp-server-macos-x86_64.tar.gzelm-package-mcp-server-macos-aarch64.tar.gz解压二进制文件:
tar xzf elm-package-mcp-server-*.tar.gz
将二进制文件移动到PATH中的位置:
# 全局安装
sudo mv elm-package-mcp-server /usr/local/bin/
# 用户安装
mv elm-package-mcp-server ~/.local/bin/
确保二进制文件可执行:
chmod +x /path/to/elm-package-mcp-server
cargo build --release
二进制文件将在target/release/elm-package-mcp-server处可用。服务器必须从包含elm.json文件的目录或Elm项目的任何子目录运行。它会自动通过向上搜索目录树找到elm.json文件。
服务器提供了五个用于处理Elm包的工具。所有工具都以elm为前缀,以便在处理Elm语言项目时更容易发现。
列出elm.json文件中的所有Elm包。此工具发现项目中的可用Elm语言依赖项。
参数:
include_indirect(可选,布尔值):是否包含间接依赖项(默认:false)示例响应:
{
"packages": [
{
"author": "elm",
"name": "core",
"version": "1.0.5",
"type": "direct"
}
],
"total": 1,
"direct_count": 1,
"indirect_count": 0
}
搜索Elm包注册表中匹配查询的包。对包名和描述进行模糊匹配。非常适合发现新包。
参数:
query(必需,字符串):搜索查询——可以是包名、关键词或您正在寻找的内容的描述(例如,“json decode”,“http”,“日期格式化”)already_included(可选,布尔值):是否包含已在elm.json中的包(默认:true)。设置为false仅显示尚未安装的包。示例响应:
{
"query": "json",
"results": [
{
"name": "elm/json",
"summary": "编码和解码JSON值",
"license": "BSD-3-Clause",
"version": "1.1.3"
}
],
"count": 1,
"excluded_installed": false
}
从package.elm-lang.org获取特定Elm语言包的README文档。
参数:
author(必需,字符串):包作者(例如,“elm”)name(必需,字符串):包名(例如,“core”)version(必需,字符串):包版本(例如,“1.0.5”)获取Elm包模块的所有导出及其类型签名,但不包括注释。这比get_elm_package_docs更高效,当你只需要探索可用函数时。
参数:
author(必需,字符串):包作者(例如,“elm”)name(必需,字符串):包名(例如,“core”)version(必需,字符串):包版本(例如,“1.0.5”)module(可选,字符串):过滤到特定模块示例响应包括按类型(联合、别名、值、二元运算符)组织的所有导出及其类型签名,但没有文档注释。
获取Elm包模块中特定导出(函数、类型或别名)的文档注释。
参数:
author(必需,字符串):包作者(例如,“elm”)name(必需,字符串):包名(例如,“core”)version(必需,字符串):包版本(例如,“1.0.5”)module(必需,字符串):模块名(例如,“List”)export_name(必需,字符串):要获取注释的导出名(例如,“map”,“Maybe”)示例响应:
{
"author": "elm",
"name": "core",
"version": "1.0.5",
"module": "List",
"export_name": "map",
"export_type": "value",
"type_annotation": "map : (a -> b) -> List a -> List b",
"comment": "将一个函数应用于列表中的每个元素..."
}
list_installed_packages发现项目中的可用包,或者使用search_packages查找新包:
list_installed_packages返回所有包及其作者、名称和版本search_packages在Elm注册表中查找匹配您查询的包get_elm_package_readme获取概览get_elm_package_exports查看所有可用函数和类型,但不包括注释get_elm_package_export_docs获取特定项目的详细文档项目的elm.json文件,作为资源访问。
服务器提供了六个提示,帮助常见的Elm开发工作流:
分析您的Elm项目的依赖项,解释每个包的作用,并提出优化建议。当您询问关于elm.json或项目结构的问题时,主动使用。
无需参数
通过检查其导出、模块和关键函数来探索特定Elm包的能力。
参数:
package(必需):包名,格式为'author/name'(例如,'elm/core')示例: /explore-package package=elm/json
搜索跨您的Elm依赖项的函数,匹配特定功能或用例。
参数:
capability(必需):您想要完成的任务(例如,“解析JSON”,“映射列表”,“处理HTTP错误”)示例: /find-function capability="解析JSON"
解释从特定Elm模块导入的功能和类型。当您遇到导入错误或有关导入可用函数的问题时,非常有用。
参数:
module_path(必需):完整的模块路径(例如,“List”,“Html.Attributes”,“Json.Decode”)示例: /debug-import module_path=Json.Decode
根据特定需求或用例发现新的Elm包。当您描述可能需要新包的问题时,主动使用。
参数:
need(必需):您需要完成的任务(例如,“解析CSV”,“处理日期”,“发送HTTP请求”)示例: /discover-packages need="处理日期"
比较两个Elm包,帮助选择最适合特定用例的包。
参数:
package1(必需):第一个包,格式为'author/name'package2(必需):第二个包,格式为'author/name'示例: /package-comparison package1=elm/json package2=NoRedInk/elm-json-decode-pipeline
服务器默认以MCP服务器模式运行。使用以下选项检查服务器的功能:
--tools:显示可用的Elm包工具--resources:显示可用资源--prompts:显示可用提示--json:以JSON格式输出信息此服务器使用以下技术构建:
要构建并发布npm包(仅限macOS):
# 准备当前架构的二进制文件
just npm-prepare-binaries
# 创建npm包tarball
just npm-pack
# 本地测试
just npm-test-local
# 发布到npm(需要npm登录)
just npm-publish
Apache-2.0