Justfile工具服务器

一个通过JSON格式暴露Justfile工具的服务,用于在代码助手代理中安全执行预定义命令,保持代理在任务范围内。

  • by ewired
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ewired/just-mcp

使用说明

只是mcp

此MCP服务器将公开特定于项目的Justfile中的工具 目录。它使用Justfile的JSON转储来构建工具,包括 参数模式和文档注释。当执行配方时,输出将 包括配方中的所有stdout和stderr,以及最后一行指示 退出代码。

为什么

使用代码助理代理时,您可能会发现一个反馈循环 允许代理自己有效地完成大量工作。这可能 需要一个外部shell命令来生成反馈,就像测试套件一样,但是 代理人经常产生幻觉或产生适得其反的命令,甚至 危险。如果自动批准此流,则代理可能会流失 例如,花费150美元购买代币来重构整个Fresh项目 因为它无法运行用于Next.js的命令。 或者举一个更平凡的例子,它会产生幻觉,以自己的方式添加 数据库迁移不可避免地会失败。您可以提供以下列表 在提示模板中显示有关项目的命令和详细信息,但这 编写起来很麻烦,可能会让代理更加困惑。一些前端 支持自动批准的命令列表,但不允许代理指定 它自己的参数,或者具有允许传入的脆弱模式匹配 不需要的命令。

使用Justfile中的工具,您可以将代理保持在定义的循环中,避免 由于命令失败而关闭任务。由于工具说明(以文件形式提供 注释)是每个启用工具的提示的一部分,您的代理通常会收到 这些工具直观,无需其他地方的明确指示。如果你想要 要在完成任务之前始终运行一个工具,请在最小提示中提及 模板。这使代理保持专注于任务的细节, 而不是被项目或中间体的辅助细节所困扰 步骤。

这些工具在自动审批方面也更值得信赖,但请注意 代理可以编辑Justfile,并由 恶意提示这样做。这对于普通任务来说是远远不可能的, 除非特别询问,否则从未发生在我身上。

如何使用

如果你还没有Justfile, 从一开始.确保 你可以为你的食谱添加有用的文档注释,这些注释是为代理人准备的, 比如提到项目的名字来引起它的注意。

确保 德诺 在您的系统上可用,那么 将此服务器添加到MCP客户端配置中,如下所示。这个例子是 GitHub Copilot代理前端。

// In your project at .vscode/mcp.json
{
    "servers": {
        "just": {
            "type": "stdio",
            "command": "deno",
            "args": [
                "run",
                "-A",
                // Use a specific commit unless you really trust me
                "https://raw.githubusercontent.com/ewired/just-mcp/b1dd6a1b871eefc13100d4bbd2ff533e3adad8d2/just.ts"
                // All further arguments are passed first to `just`
            ],
            "env": {
                "PROJECT": "${workspaceFolder}",
                "ALLOWED_RECIPES": "check,build,test,deploy",
                "NO_COLOR": "1" // Good idea to reduce junk characters in the output
            }
        }
    }
}

您可能需要手动指定 PROJECT 如果您的MCP为环境变量 客户端与预期的Justfile不在同一目录中运行。鹅会 在工作目录中运行MCP服务器,但Cline和Copilot在您的 主目录。Copilot可以在其配置中使用VS Code变量替换,因此 您可以指定 PROJECT 像 ${workspaceFolder}.

如果您的代理支持,则禁止对Justfile进行自动批准的编辑 推荐。

环境变量

  • PROJECT:设置工作目录(默认为运行时的工作目录 MCP服务器)
  • ALLOWED_RECIPES:以逗号分隔的要公开的配方名称列表。 小心: 如果不提供此项,则所有这些都将被暴露。
  • ENABLE_DEBUG_TOOL:设置为启用显示工作状态的调试工具 目录

示例用法

此示例使用 ALLOWED_RECIPES env-var如上所示。这个Justfile 包含对项目工作人员和代理有帮助的食谱:

# Type check and lint the entire project. Use after changes to detect errors outside the active files.
check +files="just.ts":
    deno check {{files}}
    deno lint {{files}}

# Run a set of test files, by default all test files in the project.
test *test_files:
    deno test {{test_files}}

# Build the project.
build:
    @echo "The build is successful because you use Deno and there is no build step"

# Deploy the project to a target (production or staging)
deploy target="staging":
    @echo "Deployed to {{target}}"

# Drop the production database (intended only for humans with human brains)
drop_production_db:
    @echo "Sending your production data to heaven"

现在,这些工具已经暴露给你的完全自动化的无薪初级开发人员, 除了那些极其危险的:

食谱建议

我在使用此MCP服务器时开发的一些建议工作流程:

  • 运行测试: 从上面的例子。代理人通常会决定哪种测试 文件是合适的,并且了解何时恢复运行所有测试。
  • 检查/整理: 从上面的例子。某些类型或棉绒错误不会 编辑器将它们暴露给代理,因为它们不在任何活动文件中。 代理可以在完成新功能之前使用此工具并修复这些功能 错误。例如,编辑器/代理未知的源文件可能具有 对已更改的类型进行彻底检查。它有助于包括指导性内容 当整个项目检查失败时,将向代理显示的注释:
    // things.ts
    export type Thing = { name: "A" | "B" | "C" }; // I just added "C" here
    
    // thing_processor.ts
    switch (thing.name) {
        case "A":
            return "It's A!";
        case "B":
            return "Wow, it's B!";
        default: // Error: Type "C" does not satisfy never
            thing.name satisfies never; // Make sure to correctly process any new Things
            return;
    }
    
  • 添加迁移: 如果你正在使用像dbmate这样的数据库迁移工具 按时间戳存储迁移,这将有助于以某种方式添加迁移 代理人可以正确使用。它通常会直观地拿起这个工具 当它打算更改数据库模式时,否则会创建不正确的 没有它的迁移文件。此配方将在VS Code中打开新的迁移 如果配方是由人类用户直接在终端窗格中运行的。
    # Create a new database migration and output the file's path. The migration name should be named in snake_case.
    add_migration name:
      @file=$(dbmate new {{name}} | grep -o "db/.*$") \
          && ([[ ! "${TERM_PROGRAM:-}" == "vscode" ]] || code $file); echo $file
    

路线图

  • [ ] MCP根: 如果MCP Roots能够更换工具,也许可以支持它 基于当前活动的根。