Common Lisp开发协议服务器

cl-tron-mcp是一个用于Common Lisp开发的模型上下文协议(MCP)服务器,支持Swank会话连接、对象检查、调试状态读取、代码评估、热修复重载和重启调用等功能。

  • by Alba-Intelligence
  • Common Lisp
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 Alba-Intelligence/cl-tron-mcp

使用说明

CL-TRON-MCP

cl-tron-mcp 是用于Common Lisp开发的模型上下文协议(MCP)服务器。它启动或连接到实时Swank会话,并允许MCP客户端检查对象、读取调试器状态、评估代码、热重新加载修复程序、调用重启,并在同一Lisp映像中继续工作。

Tron是什么

Tron是围绕Common Lisp工作流构建的,这对代理编程最为重要:

  1. 保持一个Lisp会话运行,
  2. 遇到错误,
  3. 检查烟囱和当地人,
  4. 编译修复程序而不重新启动,
  5. 继续或从调试器重新启动。

Tron经过测试,可在SBCL或ECL下运行。

一张图片中的建筑

SBCL + Swank  <---->  Tron (MCP server)  <---->  MCP client / AI agent
your code              tools/resources            Cursor, Copilot, etc.
debugger state         approval flow
loaded systems         stdio or HTTP transport

快速开始

1.使用Quicklisp安装

最简单的方法是将仓库克隆到Quicklisp本地项目中:

git clone https://github.com/Alba-Intelligence/cl-tron-mcp.git ~/quicklisp/local-projects/cl-tron-mcp
cd ~/quicklisp/local-projects/cl-tron-mcp

如果您将repo放在其他地方,请确保Quicklisp仍然可以通过将目录推送到 ql:*local-project-directories* 或者通过符号链接到 ~/quicklisp/local-projects/.

2.预加载系统一次

这避免了SBCL首次编译项目时可能发生的第一个客户端启动超时:

sbcl --non-interactive \
  --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' \
  --eval '(ql:quickload :cl-tron-mcp :silent t)'

3.启动Tron

最简单的方法是从存储库根开始:

./start-mcp.sh                # long-running HTTP/combined mode 
./start-mcp.sh --stdio-only   # for stdio-based MCP clients
./start-mcp.sh --http-only    # for http-based MCP clients

./start-mcp.sh --use-sbcl   # choose your weapon of choice
./start-mcp.sh --use-ecl   

start-mcp.sh 是规范运行时入口点。 run-mcp.sh 仅作为可选的便利包装存在 devenv 用户。 对于长时间运行的模式, Ctrl+C 被拦截并干净地停止发射器; ./start-mcp.sh --stop 同时关闭正在运行的实例。

4.开始Swank会话

如果没有Swank服务器正在运行,则会自动启动一个。否则,一个已经在运行,Tron将只启动MCP服务器。

在Lisp映像中,您希望代理使用:

(ql:quickload :swank)
(swank:create-server :port 4006 :dont-close t)

5.验证MCP是否启动

# Assuming that the MCP was actually started on port 4006
curl -X POST http://127.0.0.1:4006/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}

您应该收到一个JSON-RPC响应,显示所有可用的命令/工具。

6.将Tron连接到Swank

MCP服务器运行后,使用以下任一方法:

  • repl_connect 对于更高级别的统一工作流,或
  • swank_connect 用于低级Swank访问。

示例工具调用:

{
  "name": "repl_connect",
  "arguments": { "port": 4006 }
}

工具表面

当前注册表公开 91工具 穿过 14个类别,包括:

  • 调试器工具(debugger_*, breakpoint_*, step_frame)
  • 统一的REPL工具(repl_*)
  • 原始Swank工具(swank_*)
  • 热装工具(code_compile_string, reload_system)
  • 检查、分析、跟踪、监视、日志记录、外部参照、安全性和托管Swank流程工具

看 docs/tools/index.md 完整的每种工具参考 docs/code-reference.md 对于源代码级映射。

推荐工作流程

对于交互式调试和热重新加载:

  1. 用Swank启动目标Lisp映像,
  2. 启动Tron,
  3. 联系 repl_connect,
  4. 使用 repl_eval, repl_backtrace, repl_frame_locals, repl_get_restarts,以及 repl_compile,
  5. 继续 repl_continue 或调用重启。

如果您需要从Tron本身启动一次性SBCL会话,请使用托管流程工具:

  • swank_launch
  • swank_process_list
  • swank_process_status
  • swank_kill

文档地图

需要 阅读
启动/安装/运行Tron docs/starting-the-mcp.md
了解架构 docs/architecture.md
浏览完整的工具目录 docs/tools/index.md
了解源代码布局 docs/code-reference.md
贡献变革 贡献.md
在代码库中工作 docs/DEVELOPERS.md
从代理处消耗MCP 代理商.md

可选的Nix/devenv支持

该项目仍在运输 devenv.nix 适用于希望预装SBCL、ECL和辅助工具的可重复shell的贡献者。现在这是一个 可选开发环境,而不是主要的安装故事。

当前警告

  • 最受支持的调试器工作流程是 SBCL+Swank.
  • 当没有连接REPL时,本地热重新加载回退非常有用,但完整的调试器/重启工作流需要一个实时Swank会话。
  • 有些功能是特定于实现的;医生会在相关的地方打电话给他们。

测试

使用以下命令运行现有套件:

(asdf:test-system :cl-tron-mcp)

或者从外壳:

cd ~/quicklisp/local-projects/cl-tron-mcp
sbcl --non-interactive \
  --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' \
  --eval '(pushnew (truename ".") ql:*local-project-directories* :test (function equal))' \
  --eval '(asdf:test-system :cl-tron-mcp)'