返回市场
卡尔瓦-MCP服务器

卡尔瓦-MCP服务器

作者:BetterThanTomorrow39 星标更新:2025-11-01

项目介绍

将CoPilot转变为交互式编程伙伴

Clojure Tools for CoPilot

这也是一个适用于Calva的MCP服务器。

(本README的部分内容由Claude Sonnet编写。如有营销语言,请谅解,我将进行清理。)

VS Code扩展 问题 许可证

这是一个用于Calva(Clojure/ClojureScript的VS Code扩展)的语言模型扩展,使AI助手能够利用REPL的强大功能。

此扩展通过VS Code语言模型API直接向CoPilot提供AI工具,并且可以通过可选的MCP服务器向任何AI助手/代理提供这些工具。

功能

  • 工具:评估代码 访问Clojure REPL以随意评估代码
  • 工具:创建Clojure文件 创建自动平衡括号的Clojure文件
  • 工具:追加代码 向Clojure文件追加代码并自动平衡括号
  • 工具:替换顶层形式 结构化编辑,包括格式化、括号平衡和代码检查
  • 工具:插入顶层形式 结构化编辑,包括格式化、括号平衡和代码检查
  • 工具:括号平衡器 帮助模型正确地平衡括号(由Parinfer驱动)
  • 工具:符号信息查询,AI可以查询感兴趣的符号,并获取文档字符串、参数信息等
  • 工具:clojuredocs.org查询,文档、示例以及Clojure核心符号的“参见”信息
  • 资源:符号信息查询,(实验性)与工具相同
  • 资源:clojuredocs.org查询,(实验性)与工具相同

请注意,对于编辑工具,没有UI来审查编辑。建议使用源代码控制工具来审查AI编辑活动。

配置

评估结果大小限制

为了防止大型REPL评估结果淹没代理的上下文窗口,Backseat Driver会自动限制返回结果的大小:

  • calva-backseat-driver.evaluation.maxLength(默认值 25)——集合中显示的最大项数。使用 0 可禁用长度限制。
  • calva-backseat-driver.evaluation.maxDepth(默认值 7)——最大嵌套深度;更深的结构将被替换为 ##。使用 0 可禁用深度限制。

编辑器配置

插入和替换顶层形式的结构化编辑工具尊重两个Backseat Driver编辑器设置:

  • calva-backseat-driver.editor.fuzzyLineTargetingPadding(默认值 2)——在匹配目标文本时,AI允许扫描请求行两侧的行数。如果在较大的重构过程中形式移动,请增加此值;设置为 0 可实现精确行定位。权衡:较高的值容忍行位移,但增加了代理缓冲区过期时匹配附近相似形式的风险。
  • calva-backseat-driver.editor.lineContextResponsePadding(默认值 10)——当目标定位失败时,返回的故障排除片段中包含的请求行两侧的行数。减少此值以保持响应较短,或增加它以获得更多的周围上下文。权衡:较大的值为代理提供了更多重试线索,但可能会额外消耗令牌(或时间)。

为什么选择Calva Backseat Driver?

“我希望CoPilot不仅能猜测代码可能做什么,还能实际运行我的Clojure代码。”

Calva Backseat Driver通过赋予AI编码助手访问您的REPL的能力,将其从静态代码生成器转变为交互式编程伙伴。(在开始使用之前,请务必考虑其影响。)

将您的AI代理转变为交互式编程伙伴

厌倦了那些编写的Clojure代码看起来合理但在运行时崩溃的AI工具?Calva Backseat Driver让您的AI助手能够:

  • 在实际环境中评估代码 —— 不再有“这可能有效”的猜测
  • 查看真实的数据结构,而不仅仅是预测它们的形状
  • 使用真实的输入测试函数 在提出建议之前
  • 与您一起调试,具有访问运行时错误的能力
  • 从您的代码库的实际行为中学习

对于重视交互式编程的Clojurians

作为Clojure开发者,我们知道REPL不仅仅是一个控制台——它是我们的工作流程中心。现在,您的AI助手可以加入这个工作流程,理解数据和函数实际上是如何存在的,而不仅仅是它们在静态代码中的样子。

开始使用

先决条件

CoPilot说明

对于默认设置下的CoPilot,系统提示可以通过CoPilot指令、聊天模式和提示提供。在Awesome Copilot存储库中有Clojure CoPilot Starter Pack指令包。我推荐使用Awesome Copilot Joyride Script快速搜索和找到Clojure相关内容。

以下是我用来取得良好效果的一次性实现提示,其中代理会在REPL上反复尝试直到有一个计划,并与我验证该计划,然后实施:

/记住交互式编程 [问题和任务描述(可以相当简略)]

请:

1. 浏览代码并使用REPL理解[模型需要理解的内容]
2. 与我验证对任务的理解
3. 制定评价代码变更的标准,“数据导向、最小、聚焦明确的变更”最重要,决定什么是一个10/10评分
4. 与我验证标准
5. 使用REPL迭代更改计划,直到达到10/10标准
6. 使用REPL验证计划
7. 与我验证计划
8. 使用结构化编辑工具实施

我将其与交互式编程聊天模式一起使用。最佳模型是gpt-5-codexclaude-sonnet-4.5。可以看到,它从一个提示开始(我称之为微提示,非常小,但很有影响力),关于记住交互式编程。并且确保在上下文中包含一些相关的代码文件,因为这会让CoPilot收集正确的指令文件(通用Clojure指令、项目Clojure指令以及我的偏好等)。

CoPilot聊天输入一次性实现

此仓库已激活讨论。请使用它来分享经验和提示。

配置(如果使用MCP服务器)

由于评估Clojure代码可能存在风险,MCP服务器默认禁用评估,因此您可以使用服务器执行其他操作。在VS Code设置中搜索Backseat Driver以启用它。

请注意,这里有多层安全模型。此服务器启动时评估能力被禁用,合规的MCP服务器将默认处于低信任模式,并在每次LLM想要使用工具时询问您的确认。如果您在Calva MCP设置中启用了工具,并配置了AI客户端允许其无须询问即可使用,则全开YOLO模式将被启用。

MCP服务器作为一个普通的套接字服务器在VS Code扩展主机中运行,在启动时写入端口文件。然后,MCP客户端需要启动一个stdio中继/代理/包装器。包装器脚本接受端口或端口文件作为参数。由于这些和其他原因,每个工作区将有一个Calva Backseat Driver,端口文件将写入工作区根目录下的.calva目录。

  • 套接字服务器的默认端口是1664。如果不可用,则使用随机的高可用端口号。
  • 您可以通过设置calva-backseat-driver.mcpSocketServerPort来配置尝试的第一个端口。使用 0 可使用随机的高可用端口号。
  1. 打开您的项目
  2. 启动Calva MCP套接字服务器
    • 这将创建一个端口文件:${workspaceFolder}/.calva/mcp-server/port

    • 当服务器启动时,会显示一个确认对话框。该对话框有一个按钮,可以让您将启动stdio包装器的命令复制到剪贴板。

      MCP服务器启动消息及复制命令按钮

  3. 添加MCP服务器配置(根据MCP客户端的不同而有所不同)

工作区/项目级别配置

Backseat Driver是一个按项目的MCP服务器,因此应该在项目级别进行配置,如果使用的助手支持的话。

  • 如果可以使用项目/工作区级别的配置,则最好使用端口文件作为stdio脚本的参数。如果您的MCP客户端不支持项目级别的配置。
  • 如果您的MCP客户端不支持项目/工作区配置,则可以配置Backseat Driver为不同的项目使用不同的套接字服务器端口。然后根据会话配置您的MCP客户端使用适当的端口号。

对不起,这有点混乱。很明显,MCP还比较新,创建MCP时可能没有考虑到项目级别的MCP服务器。我已经尽力理解和应对这些限制,并尽可能提供配置性和用户体验。

Cursor配置

Cursor支持项目级别的配置。

在项目中的.cursor/mcp.json添加一个"backseat-driver"条目如下所示:

{
  "mcpServers": {
    "backseat-driver": {
      "command": "node",
      "args": [
  "<用户主配置目录中calva-mcp-server.js的绝对路径>",
        "<指向项目中.calva/mcp-server/port的端口文件的绝对路径>"
      ]
    }
  }
}

上述所需的两个绝对路径可以通过点击启动MCP服务器时显示的复制命令按钮方便地确定,然后按照上面的配置部分所述粘贴到mcp.json文件中。

Cursor会检测服务器配置并提供启动选项。

您可能希望查阅Cursor MCP文档

Windsurf配置

Windsurf可以通过其MCP服务器使用Backseat Driver。然而,这有点笨拙。Windsurf不支持工作区级别的MCP服务器配置,因此它们只能是全局的。这意味着:

  • 实际上您只能有一个Backseat Driver支持的项目
  • 最好使用端口号作为stdio命令的参数
  • 如果使用端口文件作为参数,必须是绝对路径(据我所知)

Windsurf的配置文件与Cursor的形状相同,位于:~/.codeium/windsurf/mcp_config.json(至少在我的机器上是这样)。

Windsurf的AI助手不知道它的MCP配置,并且会不断尝试为CoPilot创建MCP配置。这是愚蠢的,因为它不会为Windsurf工作,而且CoPilot不需要它。

笨拙:即使设置了MCP服务器自动启动,Windsurf在启动时通常比MCP服务器更快地刷新其MCP服务器。您可能需要在Windsurf中刷新工具。然而,Windsurf似乎无法很好地处理超过一次的刷新。它只是不断地旋转刷新按钮。

重要:Windsurf默认情况下使用MCP工具而不征求用户的同意。这对于Backseat Driver的四个工具中的三个来说是可以的,但对于REPL工具来说不太理想。我认为一些Windsurf用户应该报告这种不符合MCP规范的问题。

Claude桌面

Claude Desktop不在VS Code中运行,也没有其他项目/工作区的概念,所以您将使用全局配置。应用程序有一个按钮可以找到其配置文件。配置使用端口作为stdio命令的参数可能是最简单的。

{
  "mcpServers": {
    "backseat-driver": {
      "command": "node",
      "args": [
  "<用户主配置目录中calva-mcp-server.js的绝对路径>",
        "1664"
      ]
    }
  }
}

似乎没有方法刷新/重新加载服务器信息,因此如果您在Claude之后启动了Backseat Driver MCP服务器,您可能需要重启Claude以便刷新。

其他MCP客户端?

请为其他AI客户端添加配置!🙏

使用

  1. 将Calva连接到您的Clojure/ClojureScript项目
  2. 如果希望AI拥有完整的REPL权限,请在设置中启用此功能。

所有工具都可以在聊天中引用:

  • #clojure-eval
  • #replace-top-level-form
  • #insert-top-level-form
  • #balance-brackets
  • #clojure-create-file
  • #append-code
  • #clojure-symbol
  • #clojuredocs
  • #calva-output

它如何工作(评估代码)

  1. 当您的AI助手需要更好地理解您的代码时,它可以将其执行在您的REPL中
  2. 结果流回AI,使其了解实际的数据形状和函数行为
  3. 这创建了一个强大的反馈循环,其中建议基于运行时信息得到改进
  4. 您仍然控制着这一过程,受益于真正理解您正在运行的代码的AI伙伴
flowchart TD
    subgraph InteractiveProgrammers["交互式程序员"]
        User([您])
        AIAgent([AI代理])
        User <--> AIAgent
    end

    subgraph VSCode["VS Code"]

        MCP["Calva Backseat Driver"]

        subgraph Calva["Calva"]
            REPLClient["REPL客户端"]
        end

        subgraph Project["Clojure项目"]

            subgraph RunningApp["运行的应用程序"]
                SourceCode["源代码"]
                REPL["REPL"]
            end
        end
    end

    User --> SourceCode
    User --> Calva
    REPLClient --> REPL
    AIAgent --> SourceCode
    AIAgent --> MCP
    MCP --> Calva

    classDef users fill:#ffffff,stroke:#63b132,stroke-width:1px,color:#63b132;
    classDef programmers fill:#63b132,stroke:#000000,stroke-width:2px,color:#ffffff;
    classDef vscode fill:#0078d7,stroke:#000000,stroke-width:1px,color:#ffffff;
    classDef calva fill:#df793b,stroke:#ffffff,stroke-width:1px,color:#ffffff;
    classDef highlight fill:#ffffff,stroke:#000000,stroke-width:1px,color:#000000;
    classDef dark fill:#333333,stroke:#ffffff,stroke-width:1px,color:#ffffff;
    classDef repl fill:#5881d8,stroke:#ffffff,stroke-width:1px,color:#ffffff;
    classDef running fill:#63b132,stroke:#ffffff,stroke-width:1px,color:#ffffff;
    classDef project fill:#888888,stroke:#ffffff,stroke-width:1px,color:#ffffff;

    class User,AIAgent users;
    class VSCode vscode;
    class Calva,MCP calva;
    class REPLClient repl;
    class Project project;
    class SourceCode dark;
    class RunningApp running;
    class REPL repl;
    class InteractiveProgrammers programmers;

MCP

Calva Backseat Driver实现了Model Context Protocol(MCP),在AI助手和您的REPL之间建立桥梁。

替代方案

一些项目/工具可以补充Backseat Driver,或者替代它:

  • Clojure MCP - Bruce Hauman 的版本。一套非常全面的工具、资源、提示和代理,用于使用AI生成比我们自己能做的更易于维护的代码。
  • nREPL MCP Server,给AI工具连接到正在运行的nREPL服务器并评估代码(以及其他功能)的能力。
  • Babashka AI Coding Tools,用于AI代理的Clojure测试运行器。

进展

这都是非常早期的、基础的和实验性的。

请告诉我们您希望看到哪些功能。

贡献

欢迎贡献!无论是问题、PR还是其他。在提交PR之前,我们希望您先提交一个问题说明要解决的问题。您也可以在开始工作前讨论这个问题。

许可证 🍻🗽

MIT

赞助我的开源工作 ♥️

欢迎您通过以下链接展示您喜欢我的工作: