使用说明
霍马尔·麦克普
MCP服务器 霍马尔 仪表板管理。通过模型上下文协议以编程方式管理板、应用程序、组和用户。
特性
- 板子:列出、创建、复制、重命名、删除、更改可见性、查看权限
- 应用:列出、获取、创建、更新、删除应用程序磁贴/书签
- 群组:列出、获取、添加/删除成员
- 用户:列表,搜索
设置
先决条件
- Python 3.12+
- 紫外线 包管理器
- 带有API密钥的正在运行的Homarr实例
安装
git clone https://github.com/TETRA-2023/homarr-mcp.git
cd homarr-mcp
uv sync
配置
cp .env.example .env
# Edit .env with your Homarr URL and API key
在Homarr中创建一个API密钥: 管理>工具>API密钥
| 变量 | 描述 | 默认值 |
|---|---|---|
HOMARR_URL |
Homarr实例URL | http://localhost:7575 |
HOMARR_API_KEY |
API密钥(<id>.<token> 格式) |
必需的 |
HOMARR_TRANSPORT |
运输方式(stdio, sse, streamable-http) |
stdio |
MCP_HOST |
HTTP传输的绑定地址 | 127.0.0.1 |
MCP_PORT |
HTTP传输的侦听端口 | 8000 |
MCP_BEARER_TOKEN |
在HTTP传输上强制使用可选承载令牌(stdio没有操作) | 取消设置 |
用法
stdio(克劳德代码/本地)
uv run python src/server.py
可流式传输的http(Docker/remote)
uv run python src/server.py --streamable-http
Claude代码配置
添加到您的Claude Code MCP设置中:
{
"mcpServers": {
"homarr": {
"command": "uv",
"args": ["run", "--directory", "/path/to/homarr-mcp", "python", "src/server.py"],
"env": {
"HOMARR_URL": "https://your-homarr-instance.com",
"HOMARR_API_KEY": "your_api_key_here"
}
}
}
}
码头工人
docker build -t homarr-mcp .
docker run --env-file .env homarr-mcp --streamable-http
HTTP网关后的部署
当在包装器前面加上网关(LiteLLM、Kong、NGINX等)时
共享网络,设置 MCP_BEARER_TOKEN 一个随机的秘密。包装将
然后拒绝任何不匹配的HTTP请求
Authorization: Bearer <token> 头球
export MCP_BEARER_TOKEN="$(openssl rand -hex 32)"
export HOMARR_TRANSPORT=streamable-http
export MCP_HOST=0.0.0.0 # bind to all interfaces inside the container
uv run python src/server.py
客户端通过标准的承载方案传递令牌。使用a的示例 通用MCP客户端:
POST /mcp HTTP/1.1
Authorization: Bearer <your_token>
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc": "2.0", "method": "initialize", ...}
笔记:
MCP_BEARER_TOKEN是 运输意识 --当HOMARR_TRANSPORT=stdio(没有HTTP层)。现有stdio 消费者不受影响地工作。- 这
Bearer方案名称不区分大小写匹配(RFC 7235§2.1); 将令牌本身逐字节与secrets.compare_digest用于抵御定时神谕的恒定时间防御。 - 两条401路径(缺少标头、标记错误)都发出相同的主体,因此 客户无法区分它们。
- 在网关处将承载与TLS配对,这样令牌就不会在 电线。
- 要免除健康/探测路径的身份验证,请使用以下命令实例化中间件
skip_paths=("/healthz",).还没有公共的env-var钩子--添加一个 如果您在生产中需要,可以自定义入口点。
工具参考
板子
| 工具 | 说明 |
|---|---|
list_boards |
列出所有板 |
get_board |
按名称获取电路板(包括部分、项目、布局) |
create_board |
创建新板 |
duplicate_board |
按ID复制电路板 |
rename_board |
重命名板 |
delete_board |
删除板 |
change_board_visibility |
将板设置为公共或私人 |
get_board_permissions |
查看用户/组权限 |
应用
| 工具 | 说明 |
|---|---|
list_apps |
列出所有应用程序/书签 |
get_app |
按ID获取应用程序 |
create_app |
创建应用程序(名称、href、描述、icon_url、ping_url) |
update_app |
更新应用程序字段 |
delete_app |
删除应用程序 |
群组
| 工具 | 说明 |
|---|---|
list_groups |
列出所有有成员的组 |
get_group |
按ID获取组 |
add_group_member |
将用户添加到组 |
remove_group_member |
从组中删除用户 |
用户
| 工具 | 说明 |
|---|---|
list_users |
列出所有用户 |
search_users |
按姓名/电子邮件搜索用户 |
所有查询工具都支持 verbosity 参数: minimal, standard (默认),或 full.
发展
# Install dev dependencies
uv sync --all-extras --dev
# Run tests
uv run pytest tests/test_server.py -v
# Lint
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
# Pre-commit hooks
uv run pre-commit install
许可证
麻省理工学院
