Hooks MCP
H

Hooks MCP

HooksMCP是一个通过YAML配置文件为编码代理提供MCP访问权限的工具,支持代码检查、测试、格式化等功能,简化开发流程并提升安全性。
2.5分
7.1K

安装

复制以下命令到你的Client进行配置
注意:您的密钥属于敏感信息,请勿与任何人分享。

🚀 编码代理MCP访问工具

本项目可让编码代理MCP访问代码检查、测试、格式化等功能,只需一个YAML文件即可实现。

🚀 快速开始

  1. 使用 uv 进行安装:
uv tool install hooks-mcp
  1. 在项目根目录创建一个 文件,用于定义你的工具。例如:
actions:
  - name: "all_tests"
    description: "Run all tests in the project"
    command: "uv run python -m pytest ./tests"
    
  - name: "check_format"
    description: "Check if the source code is formatted correctly"
    command: "uvx ruff format --check ."
    
  - name: "typecheck"
    description: "Typecheck the source code"
    command: "uv run pyright ."

  - name: "test_file"
    description: "Run tests in a specific file or directory"
    command: "python -m pytest $TEST_PATH"
    parameters:
      - name: "TEST_PATH"
        type: "project_file_path"
        description: "Path to test file or directory"
  1. 启动服务器:
uvx hooks-mcp

有关更多运行时选项,包括如何在 Cursor、Windsurf 等中运行,请参阅 运行 HooksMCP。

✨ 主要特性

  1. 设置简单:只需一个 YAML 文件,就能为你的编码代理创建一个自定义的 MCP 服务器。类似于 package.json 脚本或 Github Actions 工作流,但命令由 MCP 函数触发。将 YAML 文件添加到你的仓库,即可与团队共享。
  2. 工具发现:编码代理可以了解哪些开发工具可用,以及它们所需的确切参数。无需再猜测 CLI 字符串。
  3. 增强安全性:限制代理可以运行的命令。验证代理生成的参数(例如,确保文件路径在项目内部)。
  4. 广泛适用:可在任何支持 MCP 的地方使用,如 Cursor、Windsurf、Cline 等。
  5. 速度提升:使用 MCP 可以实现并行执行,生成命令所需的令牌更少,并消除需要迭代的命令中的错误。
  6. 其他特性:去除 ANSI 代码/控制字符、加载 .env 文件、定义所需的机密信息而无需提交、支持退出代码/标准输出/标准错误等。

📦 安装指南

安装步骤如下:

  1. 使用 uv 进行安装:
uv tool install hooks-mcp
  1. 在项目根目录创建一个 hooks_mcp.yaml 文件。
  2. 启动服务器:
uvx hooks-mcp

💻 使用示例

基础用法

以下是一个简单的 hooks_mcp.yaml 文件示例:

actions:
  - name: "all_tests"
    description: "Run all tests in the project"
    command: "uv run python -m pytest ./tests"
    
  - name: "check_format"
    description: "Check if the source code is formatted correctly"
    command: "uvx ruff format --check ."
    
  - name: "typecheck"
    description: "Typecheck the source code"
    command: "uv run pyright ."

  - name: "test_file"
    description: "Run tests in a specific file or directory"
    command: "python -m pytest $TEST_PATH"
    parameters:
      - name: "TEST_PATH"
        type: "project_file_path"
        description: "Path to test file or directory"

📚 详细文档

配置文件说明

hooks_mcp.yaml 文件用于定义通过 MCP 服务器公开的工具。 可参考本项目的 hooks_mcp.yaml 作为示例。

顶级字段

  • server_name(可选):MCP 服务器的名称(默认:"HooksMCP")
  • server_description(可选):MCP 服务器的描述(默认:"通过 MCP 公开的特定于项目的开发工具")
  • actions(必需):操作定义数组

操作字段

actions 数组中的每个操作可以有以下字段:

  • name(必需):工具的唯一标识符
  • description(必需):工具功能的可读描述
  • command(必需):要执行的 CLI 命令。可以包含动态参数,如 $TEST_FILE_PATH
  • parameters(可选):命令中使用的每个参数的定义。
  • run_path(可选):命令应从项目根目录开始执行的相对路径。对于单仓库项目很有用。
  • timeout(可选):命令执行的超时时间(秒)(默认:60 秒)

参数字段

操作的 parameters 数组中的每个参数可以有以下字段:

  • name(必需):要替换到命令中的参数名称。例如 TEST_FILE_PATH
  • type(必需):以下参数类型之一:
    • project_file_path:项目内的本地路径,相对于项目根目录。经过验证,确保它在项目边界内且存在。
    • required_env_var:服务器启动前必须设置的环境变量。调用模型不指定。
    • optional_env_var:可选的环境变量。调用模型不指定。
    • insecure_string:来自模型的任何字符串。不进行验证。使用时需谨慎。
  • description(可选):参数的可读描述
  • default(可选):参数的默认值

参数类型解释

project_file_path

这种参数类型通过验证路径是否在项目边界内来确保安全性:

- name: "test_file"
  description: "Run tests in a specific file"
  command: "python -m pytest $TEST_FILE"
  parameters:
    - name: "TEST_FILE"
      type: "project_file_path"
      description: "Path to test file"
      default: "./tests"

服务器将验证 TEST_FILE 是否在项目内且存在。

required_env_var

这些参数必须在服务器启动前在环境中设置。如果未设置,服务器将在启动时失败,并要求用户设置这些变量。

- name: "deploy"
  description: "Deploy the application"
  command: "deploy-tool --key=$DEPLOY_KEY"
  parameters:
    - name: "DEPLOY_KEY"
      type: "required_env_var"
      description: "Deployment key for the service"

HooksMCP 将从环境中加载环境变量,以及工作目录中的 .env 文件中设置的任何变量。

optional_env_var

required_env_var 类似,但为可选:

- name: "build"
  description: "Build the application"
  command: "build-tool"
  parameters:
    - name: "BUILD_FLAGS"
      type: "optional_env_var"
      description: "Additional build flags"

insecure_string

允许来自编码助手的任何字符串输入,不进行验证。使用时需谨慎:

- name: "grep_code"
  description: "Search code for pattern"
  command: "grep -r $PATTERN src/"
  parameters:
    - name: "PATTERN"
      type: "insecure_string"
      description: "Pattern to search for"

运行 HooksMCP

建议使用 uvx 运行 HooksMCP:

# 安装
uv tool install hooks-mcp
# 运行
uvx hooks-mcp 

可选的命令行参数包括:

  • --working-directory/-wd:通常是项目根目录的路径。如果不是从项目根目录运行,则需要设置。
  • 最后一个参数是 hooks_mcp.yaml 文件的路径,如果不使用默认的 ./hooks_mcp.yaml

与编码助手一起运行

Cursor

Install MCP Server 或者打开 此 Cursor 深度链接。

Windsurf/VSCode 等

大多数其他 IDE 使用 mcp.json 的变体。为 HooksMCP 创建一个条目。 注意:确保从项目根目录运行,或者在启动时手动传递工作目录:

{
  "HooksMCP": {
    "command": "uvx",
    "args": [
      "hooks-mcp",
      "--working-directory",
      "."
    ]
  }
}

🔧 技术细节

安全特性

安全优势

HooksMCP 实现了多项安全措施,有助于提高为代理提供终端命令访问的安全性:

  1. 命令白名单:你的代理只能运行 hooks_mcp.yaml 中允许的命令,而不是任意的终端命令。
  2. 路径参数验证:所有 project_file_path 参数都经过验证,以确保它们:
    • 在项目目录内
    • 在项目中实际存在
  3. 环境变量控制
    • required_env_varoptional_env_var 参数由开发人员管理,而不是编码助手。这可以防止编码助手访问敏感变量。
  4. 安全命令执行
    • 使用 Python subprocess.run 并设置 shell=False 以防止 shell 注入
    • 使用 shlex.split 正确分隔命令参数
    • 实现超时机制以防止命令无限运行

安全风险

使用 HooksMCP 存在一些风险:

  1. 如果你的代理可以编辑 hooks_mcp.yaml,它可以添加命令,然后通过 MCP 运行这些命令。
  2. 如果你的代理可以向项目中添加代码,并且你的任何操作将调用任意代码(如测试运行器),代理可以使用此模式运行任意代码。
  3. HooksMCP 可能包含错误或安全问题。

我们不能保证它是完美的,但它可能比给代理无限制的终端访问要好。建议在容器内运行代理。

起源故事

我为自己构建 Kiln 时开发了这个项目。初稿由 Qwen-Coder-405b 编写,然后由我进行编辑。有关提示信息,请参阅 初始提交

📄 许可证

本项目采用 MIT 许可证。

替代品

M
MCP
微软官方MCP服务器,为AI助手提供最新微软技术文档的搜索和获取功能
8.7K
5分
A
Aderyn
Aderyn是一个开源的Solidity智能合约静态分析工具,由Rust编写,帮助开发者和安全研究人员发现Solidity代码中的漏洞。它支持Foundry和Hardhat项目,可生成多种格式报告,并提供VSCode扩展。
Rust
5.9K
5分
D
Devtools Debugger MCP
Node.js调试器MCP服务器,提供基于Chrome DevTools协议的完整调试功能,包括断点设置、单步执行、变量检查和表达式评估等
TypeScript
5.4K
4分
S
Scrapling
Scrapling是一个自适应网页抓取库,能自动学习网站变化并重新定位元素,支持多种抓取方式和AI集成,提供高性能解析和开发者友好体验。
Python
7.8K
5分
M
Mcpjungle
MCPJungle是一个自托管的MCP网关,用于集中管理和代理多个MCP服务器,为AI代理提供统一的工具访问接口。
Go
0
4.5分
C
Cipher
Cipher是一个专为编程AI代理设计的开源记忆层框架,通过MCP协议与各种IDE和AI编码助手集成,提供自动记忆生成、团队记忆共享和双系统记忆管理等核心功能。
TypeScript
0
5分
N
Nexus
Nexus是一个AI工具聚合网关,支持连接多个MCP服务器和LLM提供商,通过统一端点提供工具搜索、执行和模型路由功能,支持安全认证和速率限制。
Rust
0
4分
S
Shadcn Ui MCP Server
一个为AI工作流提供shadcn/ui组件集成的MCP服务器,支持React、Svelte和Vue框架,包含组件源码、示例和元数据访问功能。
TypeScript
12.1K
5分
D
Duckduckgo MCP Server
已认证
DuckDuckGo搜索MCP服务器,为Claude等LLM提供网页搜索和内容抓取服务
Python
56.6K
4.3分
F
Firecrawl MCP Server
Firecrawl MCP Server是一个集成Firecrawl网页抓取能力的模型上下文协议服务器,提供丰富的网页抓取、搜索和内容提取功能。
TypeScript
96.4K
5分
F
Figma Context MCP
Framelink Figma MCP Server是一个为AI编程工具(如Cursor)提供Figma设计数据访问的服务器,通过简化Figma API响应,帮助AI更准确地实现设计到代码的一键转换。
TypeScript
56.6K
4.5分
M
Minimax MCP Server
MiniMax Model Context Protocol (MCP) 是一个官方服务器,支持与强大的文本转语音、视频/图像生成API交互,适用于多种客户端工具如Claude Desktop、Cursor等。
Python
45.4K
4.8分
B
Baidu Map
已认证
百度地图MCP Server是国内首个兼容MCP协议的地图服务,提供地理编码、路线规划等10个标准化API接口,支持Python和Typescript快速接入,赋能智能体实现地图相关功能。
Python
37.7K
4.5分
C
Context7
Context7 MCP是一个为AI编程助手提供实时、版本特定文档和代码示例的服务,通过Model Context Protocol直接集成到提示中,解决LLM使用过时信息的问题。
TypeScript
71.4K
4.7分
E
Exa Web Search
已认证
Exa MCP Server是一个为AI助手(如Claude)提供网络搜索功能的服务器,通过Exa AI搜索API实现实时、安全的网络信息获取。
TypeScript
40.0K
5分
E
Edgeone Pages MCP Server
EdgeOne Pages MCP是一个通过MCP协议快速部署HTML内容到EdgeOne Pages并获取公开URL的服务
TypeScript
25.4K
4.8分
AIBase
智启未来,您的人工智能解决方案智库
© 2025AIBase