Hooks MCP
H

Hooks MCP

HooksMCP是一個通過YAML配置文件為編碼代理提供MCP訪問權限的工具,支持代碼檢查、測試、格式化等功能,簡化開發流程並提升安全性。
2.5分
6.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助手提供最新微軟技術文檔的搜索和獲取功能
9.9K
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
8.9K
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
11.1K
5分
M
Markdownify MCP
Markdownify是一個多功能文件轉換服務,支持將PDF、圖片、音頻等多種格式及網頁內容轉換為Markdown格式。
TypeScript
20.6K
5分
B
Baidu Map
已認證
百度地圖MCP Server是國內首個兼容MCP協議的地圖服務,提供地理編碼、路線規劃等10個標準化API接口,支持Python和Typescript快速接入,賦能智能體實現地圖相關功能。
Python
27.4K
4.5分
F
Firecrawl MCP Server
Firecrawl MCP Server是一個集成Firecrawl網頁抓取能力的模型上下文協議服務器,提供豐富的網頁抓取、搜索和內容提取功能。
TypeScript
66.3K
5分
S
Sequential Thinking MCP Server
一個基於MCP協議的結構化思維服務器,通過定義思考階段幫助分解複雜問題並生成總結
Python
20.8K
4.5分
M
Magic MCP
Magic Component Platform (MCP) 是一個AI驅動的UI組件生成工具,通過自然語言描述幫助開發者快速創建現代化UI組件,支持多種IDE集成。
JavaScript
16.5K
5分
N
Notion Api MCP
已認證
一個基於Python的MCP服務器,通過Notion API提供高級待辦事項管理和內容組織功能,實現AI模型與Notion的無縫集成。
Python
13.4K
4.5分
E
Edgeone Pages MCP Server
EdgeOne Pages MCP是一個通過MCP協議快速部署HTML內容到EdgeOne Pages並獲取公開URL的服務
TypeScript
15.4K
4.8分
C
Context7
Context7 MCP是一個為AI編程助手提供即時、版本特定文檔和代碼示例的服務,通過Model Context Protocol直接集成到提示中,解決LLM使用過時信息的問題。
TypeScript
44.3K
4.7分
AIBase
智啟未來,您的人工智慧解決方案智庫
© 2025AIBase