跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

MCP、LSP 与 Hooks

在 crushrc 里添加 stdio / http / sse 的 MCP 服务器与 OAuth、无会话服务器,配置 LSP,以及目前支持的 PreToolUse Hook。

MCP

Crush 通过三种传输类型支持 MCP 服务器:stdio(命令行服务器)、http、sse。

# crushrc
mcp add filesystem --command node --args /path/to/mcp-server.js --timeout 10 --disabled-tools some-tool-name --env NODE_ENV production
mcp add github --type http --url https://api.github.com/mcp/ --timeout 10 --header Authorization "Bearer $GH_PAT" --disabled-tools create_issue
mcp add streaming-service --type sse --url "https://example.com/mcp/sse" --header API-Key "$API_KEY"

--disabled-tools(可重复)隐藏某个 MCP 服务器的特定工具。MCP OAuth:需要 OAuth 的 HTTP 和 SSE 服务器可使用内置的授权码流程,不必用静态 Authorization 头:在(JSON 配置)里设 "oauth": true。GitHub、Slack 等不支持动态客户端注册的服务器,要先向提供方注册 OAuth 应用,直接提供 oauth_client_id、oauth_client_secret、oauth_callback_port(值支持 shell 展开);设了 oauth_client_id 就跳过动态注册,没设则自动尝试动态注册(Linear、Notion 等支持 RFC 7591 的服务器可用)。无会话服务器:有些 HTTP MCP 服务器不发 Mcp-Session-Id 并拒绝 Crush 为列表变更通知打开的 subscriptions/listen 流;Crush 自动识别已知的(GitHub MCP 等),其他的要显式标记 "sessionless": true(crushrc 里 --sessionless true),代价是该服务器不会推送工具/提示/资源列表变更的实时通知。

LSP

Crush 像你一样用 LSP 获取额外上下文,手动添加:

# crushrc
lsp add go --command "gopls" --env "GOTOOLCHAIN go1.24.5"
lsp add typescript --command "typescript-language-server" --args --stdio
lsp add nix --command "nil"

Hooks

Hooks 是在智能体生命周期事件发生时运行的用户自定义 shell 脚本,让你在其上构建、定制行为,对智能体施加确定性的控制。要点:hook 就是 shell 命令,可以用任何语言写(Bash、Python、Node、Rust 等);与 Claude Code 兼容;Crush 内置 crush-hook 技能帮你写和配置;目前只支持 PreToolUse 一个事件,计划支持更多;多个 hook 并行运行,但结果按配置顺序组合以保证确定性。能做的事:阻止危险命令、改写工具输入(如把 node 调用换成 deno、清除命令里的密钥)、注入上下文(如「编辑 Go 文件后记得跑 gofumpt」)、对已知安全的 bash 命令自动批准、记录工具调用。示例配置(项目级 crush.json,全局的 ~/.config/crush/crush.json 里要用绝对路径):

{
  "hooks": {
    "PreToolUse": [
      { "matcher": "^bash$", "command": "./no-haskell.sh" }
    ]
  }
}

脚本通过环境变量(如 $CRUSH_TOOL_INPUT_COMMAND)读取工具输入,以退出码 2 阻止工具调用,并把反馈输出到 stderr。Hooks 通过 Crush 内嵌的 POSIX shell 运行(与 bash 工具同一个解释器),在 macOS、Linux、Windows 上行为一致,Windows 上无需 WSL 或 Git Bash;PowerShell 脚本要显式用 powershell -File 调用。完整执行模型与事件细节见官方 Hooks 指南。