mcpField
M
Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments

Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments

本地服务
github.com/gornskew开发工具541 周前更新

关于 Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments

Cyborg Whisperer 是基于 Node.js 的中间件,通过 HTTP 将支持 MCP 的客户端连接到使用 Lisply 方言的 Lisp 后端。它支持 AI 辅助的 Lisp 求值和项目操作;包装器不限制 Lisp 执行,后端隔离由运营者负责。

主要功能

  1. 01将 MCP 工具调用路由到 Lisply HTTP
  2. 02Lisp 表达式求值
  3. 03后端 HTTP 请求
  4. 04为多个后端设置独立通道
  5. 05可选的 Lisply 语料搜索
  6. 06可配置后端连接与密钥

适用场景

  1. 01从 MCP 客户端运行 Lisp 表达式
  2. 02借助 LLM 开发 Lisp 项目
  3. 03将 MCP 客户端连接到现有 Lisp REPL
  4. 04搜索后端 Lisply 语料中的文档

MCP 相关

它将 MCP 工具调用转换为发往 Lisply Lisp 后端的 HTTP 请求,并把响应作为工具结果返回。它不会启动后端;运营者应在隔离容器或其他沙箱中运行后端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

重要

在找 lisply-mcp? 纯语言的“企业版”分支位于 genworks/lisply-mcp。

此代码库(cyborg-whisperer)是采用游戏语言的上游项目, 并单独维护。若克隆版本的 origin 仍指向 gornskew/lisply-mcp,就会来到这里;要改为跟踪该分支:

git remote set-url origin https://github.com/genworks/lisply-mcp.git

Cyborg Whisperer:为 Lisp 语系船员服务的协议官

胸前带有 lambda 符号的 Cyborg Whisperer 机器人

在 Basilisk 级舰船上, 没有半机械人会四处游荡。每次来访——无论它如何登舰—— 都有一位指定要见的船员,而且每次来访都从同一件事开始: 拜访协议官。他接待每一位抵达的半机械人,询问它的情况, 教它熟悉舰上的规矩,再将它派往它要见的船员那里。

Cyborg Whisperer 就是为这一职位准备的工具包;若你愿意, 也可以说是这个物种,而每位协议官都是其中一员。只要在任何 一位会说 Lisply 方言的船员身边安排一位协议官,无论是在舰上 还是在岸上,抵达的半机械人就会受到接待、接受指导,并被安排 去做有用的工作。

简单来说:这是一个面向 大模型的中间件, 通过 MCP——即集结与引导协议, 协议官在其中召集每一位抵达的半机械人,并将它引导至对应船员—— 与作为半机械人的大模型通信;同时通过一种名为 Lisply 的轻量方言, 与作为船员的 Lisp 居民通信。

注意:协议官不会搭建居所。 他是在已经打开的舱口处发起调用—— 一个纯 HTTP 客户端(HTTP 即舱口到舱口传输协议,是从一个舱口 传到另一个舱口的简单呼叫),用于连接已经在响应的居民。搭建房间 是 vat 的职责,通过 Basilisk 船坞完成——请参阅 Basilisk README 中的“运行”部分; 也可以在码头自行打开一个 Lisply 舱口,再让协议官连接到那里。 居民开始响应后,Claude Desktop 就会像下面的示例注册表所示那样 调用协议官。

它的用途是什么?

协议官将半机械人乘坐的飞船——任何支持 MCP的客户端,例如 Claude Desktop——连接到一位运行 REPL(读取-求值-打印循环)的 Lisp 居民。此连接旨在用于 AI 辅助的 符号编程,有时也称为 神经符号编程。我们创造了“Lisply”一词, 用来指代一种精简方言,大多数类 Lisp 居民都可以学会它,从而拥有 自己的协议官。

其构想是让半机械人能够组合任意 Lisp 咒语并执行它们,包括编写、 编译、加载和测试整篇卷轴与整个项目。

沙箱信任模型

基于 Lisply 的 MCP 服务旨在作为受信任沙箱暴露给大模型。 此封装层并非用于限制后端环境中的 Lisp 运算符、文件系统访问或 子进程执行。相反,后端本身应运行在由操作员选择的隔离容器或 其他沙箱中。

这是有意为之:

  • lisp_eval 旨在支持大模型自由、完整地使用。
  • /projects 可以是挂载自主机的工作树,但后端文件系统的其余部分 可以保持为容器临时文件系统。
  • 因此,信任决策应在容器/后端边界进行,而不是通过削弱 MCP 封装层 中的 Lisp 求值能力来实现。

封装层现在会在工具元数据中声明此信任模型,默认值为 TRUST_AS_SANDBOX=true。如有需要,操作员可通过 SANDBOX_NOTE 覆盖说明文本。

额外快速入门

按照 Basilisk README 中的“Running it”操作——git clone yard, 然后运行 ./basilisk up。

这会升起一艘完整的船,Protocol Officer 已在岗位上,守候在 Captain 身旁。

快速入门

以下步骤可让你快速上手,使用最精简的默认注册表和默认的公共 Common Lisp 常驻服务(First Officer,这是从 vat 中升起的 Gendl 房间)。如需了解更多背景信息和所有标志,请参阅下方的主目录。

1. 安装
  1. 安装 Node.js(建议使用 18+)。如果使用 Windows,可以直接在 Windows 中安装,也可以在 WSL 中安装。

  2. 准备一个可通过开放舱口呼叫的常驻服务。最简单的方法是从 Basilisk yard 升起一艘船(需要 vat: Docker);也可以在 dock 上打开自己的 Lisply 舱口。

  3. 将这些 cyborg-whisperer 卷轴复制到 craft(例如 Claude Desktop)能够访问的位置。

2. 告诉 craft Officer 所在的位置

按照下方所示,编辑或创建 craft 的注册表。对于 Claude Desktop,注册表通常位于:

/mnt/c/Users/<user>/AppData/Roaming/Claude/claude_desktop_config.json

或

c:\Users\<user>\AppData\Roaming\Claude\claude_desktop_config.json

在下面的示例中,将 /path/to/cloned/ 替换为你所复制的 ./scripts/mcp-wrapper.js 卷轴的实际路径。频道名称由你选择;以下名称是各房间自己的名称,Basilisk 船只会这样命名:

{
  "mcpServers": {
    "gendl-ccl": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-ccl",
        "--http-port", "9080"
      ]
    },
    "gendl-sbcl": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-sbcl",
        "--http-port", "9090"
      ]
    },
    "readymax": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "readymax",
        "--http-port", "7080"
      ]
    }
  }
}

或者在 WSL 场景中(Claude Desktop 在 Windows 主机上运行):

{
  "mcpServers": {
    "gendl-ccl": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-ccl",
        "--http-port", "9080"
      ]
    },
    "gendl-sbcl": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-sbcl",
        "--http-port", "9090"
      ]
    },
    "readymax": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "readymax",
        "--http-port", "7080"
      ]
    }
  }
}

其他标志(例如,如何指定常驻服务位于其他位置的舱口),请参阅下方的主目录。(将 pouches 从 dock 搬运到 residence 上是 yard 的事务——也就是 Basilisk 的章程——并非 Officer 的职责。)

每个频道彼此独立,因此可以同时操作多个常驻服务,且它们的工具不会发生冲突。

3. 重新唤醒 craft,然后呼叫

设置好注册表后,重新唤醒的 craft 会拥有一个名为 bridge 的频道,其中包含一个 bridge__lisp_eval 工具(以及下方主目录中讨论的其他几个工具)。工具会以频道名称为前缀,因此可以同时设置多个 Officer,且不会发生冲突。

试着呼叫 cyborg:

使用 bridge__lisp_eval 工具计算 (+ 1 2 3),并告诉我结果。

cyborg 应该会执行咒语并回答 6。继续之前,可以试试更复杂的咒语。

默认最简配置如何运作?

快速入门中的最简注册表会调用一个已经在响应的 Gendl 常驻服务(例如,位于 Basilisk 船上):它是一个带有标准 REPL 的 Common Lisp 超集。Officer 本身不会升起任何东西。Readymax 的 Captain 还管理着第二个使用 Emacs Lisp 的 Lisply 舱口,位于 Readymax ready room。

系统概览

Officer 是一个运行于 Node.js 上的 JavaScript 程序,负责在 craft 与任何响应 Lisply 方言的常驻服务之间搭建桥梁。通过他,cyborg 可以:

  1. 向常驻服务发送咒语并读取返回结果;
  2. 呼叫常驻服务所管理的任意 web 舱口;
  3. 通过咒语查询常驻服务自身的知识——自省、文档;
  4. 同样通过咒语编写、编译、加载和研究卷轴。

Lisply 是一种精简方言:包含几个舱口(HTTP 路径)、一组在升起时设置的标准标志(环境变量),以及少量可选能力,供 cyborg 操作正在运行的 Lisp 常驻服务。

架构

下图大致展示了各个角色的位置:

flowchart TB
    User("the biological") <--> Claude("the craft (Claude Desktop)")
    User <-.-> Emacs("an Emacs of your own (optional)")

    Claude <--> MCP("MCP")
    MCP <--> Wrapper("the Protocol Officer (Cyborg Whisperer, Node.js)")

    Wrapper --> LisplyHttp("the resident's Lisply hatch (HTTP)")
    
    subgraph Backend ["the residence (a room, or a process on the dock)"]
    subgraph LisplyExec["the resident"]
    LisplyHttp
    LisplySwank("the SWANK hatch (for an Emacs of your own)")
    end
    end
    
    Emacs <-.-> LisplySwank
    
    KB[("the chart locker (the corpus)")] <--> Wrapper
    
    LisplyHttp --> Endpoints("web hatches")
    LisplyHttp --> LispEval("incantations")
    
    style User fill:#ff9,stroke:#333,stroke-width:2px
    style Claude fill:#f9f,stroke:#333,stroke-width:2px
    style Emacs fill:#9ff,stroke:#333,stroke-width:2px,stroke-dasharray:5
    style Wrapper fill:#bbf,stroke:#333,stroke-width:2px
    style MCP fill:#bbf,stroke:#333,stroke-width:1px
    style Backend fill:#bfb,stroke:#333,stroke-width:2px
    style LisplyExec fill:#8f8,stroke:#333,stroke-width:2px
    style LisplyHttp fill:#bfb,stroke:#333,stroke-width:1px
    style LisplySwank fill:#bfb,stroke:#333,stroke-width:1px
    style KB fill:#bfb,stroke:#333,stroke-width:1px
    style Endpoints fill:#bfb,stroke:#333,stroke-width:1px
    style LispEval fill:#bfb,stroke:#333,stroke-width:1px

Officer:

  1. 将 MCP 中的工具调用转为对常驻服务Lisply 舱口的呼叫,并将答复转回工具结果
  2. 保存记录(即他的日志),并报告出错之处

安全注意事项

由于 Officer 可以在运行中的常驻进程里执行任意 Lisp,因此如果这个赛博格“失控”,就会存在风险。简单来说,最佳实践如下:

  • 只让 Officer 调用运行在容器中的常驻进程。给他另一个主机和端口,他也会欣然调用任何支持 Lisply 的 HTTP 端口——不要让这个端口由直接运行在你自己机器上的程序提供。

  • 不要把任何你承受不起丢失的内容挂载到该容器中(挂载什么由运行环境决定——也就是 compose 配置,而不是 Officer)。

  • 考虑限制容器的 RAM 和 CPU。

  • 让常驻进程请求一个密钥,并向 Officer 提供同一个密钥:配置密钥后,Gendl 后端需要 X-Lisply-Secret(参见 gendl 的 gwl/lisply-backend README 中的“保护端点”一节);--admin-secret-file <path> --admin-secret-header X-Lisply-Secret 会在每次调用时发送该密钥,包括首次可用性检查,而且密钥绝不会出现在命令行中。任何其他人都能访问其端口的常驻进程绝不能不设密钥,也不要让任何公共代理将 /lisply 路由到它。

这个宝箱中的卷轴
  • lib/config.js:配置加载和环境处理
  • lib/logger.js:日志功能
  • lib/server.js:HTTP 服务和 MCP 包装器实现
  • lib/utils.js:响应处理工具函数
  • handlers/:特定工具的请求处理器
    • initialize.js:初始化处理器
    • toolsList.js:工具列表处理器
    • toolCall.js:主要工具调用分发器
    • httpRequest.js:HTTP 请求处理器
    • ping.js:Ping 处理器
    • lispEval.js:Lisp 求值处理器
    • lisply-index.js:Lisply 语料库的参考索引器——项目在自己的镜像中构建并发布的 lisply_search 索引;其约定见 CORPUS.md
    • lisplySearch.js:文档语料库搜索处理器,即 lisply_search 工具(支持该工具的后端,例如 Readymax rooms)
  • mcp-wrapper.js:Officer 本人——从这里开始

手动发布 Officer

  1. 克隆此仓库:
git clone https://github.com/gornskew/cyborg-whisperer.git
  1. 安装其运行所需的内容(可选;缺少时 Officer 会自行获取):
cd cyborg-whisperer/scripts
npm install # optional - the script will attempt to do this also if needed
chmod +x mcp-wrapper.js # needed on some systems
  1. 查看其标志:
node mcp-wrapper.js --help

Officer 的标志

可选设置,默认值适用于大多数发布场景:

命令行参数
Options:
  -H, --backend-host <host>            Lisply backend host (default: 127.0.0.1)
  --http-host-port <port>              Backend HTTP port as published on this host; used when
                                       backend host is localhost/loopback (default: 9081)
  --http-port <port>                   Backend HTTP port inside the container network; used for
                                       non-local backend hosts (default: 9080)
  --swank-host-port <port>             SWANK port on host system (documentation/diagnostics) (default: 4201)
  --swank-port <port>                  SWANK port inside container (documentation/diagnostics) (default: 4200)
  --log-file <path>                    Path to log file (default: /tmp/lisply-mcp-wrapper.log)
  --debug                              Enable debug logging
  --endpoint-prefix <prefix>           Prefix for all endpoints (default: lisply)
  --lisp-eval-endpoint <n>             Endpoint name for Lisp evaluation (default: lisp-eval)
  --http-request-endpoint <n>          Endpoint name for HTTP requests (default: http-request)
  --ping-endpoint <n>                  Endpoint name for ping (default: ping-lisp)
  --server-name <name>                 MCP server name for tool prefixing (default: lisply-mcp)
  --eval-timeout <ms>                  Timeout for Lisp evaluation in milliseconds (default: 30000)
  --request-timeout-ms <ms>            Timeout for backend HTTP requests in milliseconds (default: 10000)
  --admin-secret <secret>              Secret sent as a header on every backend request
  --admin-secret-header <name>         That header's name (default: X-Cyclops-Admin-Secret;
                                       a Gendl backend wants X-Lisply-Secret)
  --admin-secret-file <path>           Read the secret from this file's first line instead (kept
                                       out of argv; read again whenever the file changes)
  -h, --help                           Display help for command
环境变量

Officer 还会读取升起时挂起的标志(环境变量),变量名带有 LISPLY_ 前缀或不带前缀:

**注意:**请分清码头上的舱口(在主机上监听,并可从主机访问)与居所内的舱口 (居住者自己看到的内容):

环境变量描述默认值
BACKEND_HOST or LISPLY_BACKEND_HOSTLisply 后端主机127.0.0.1
HTTP_HOST_PORT or LISPLY_HTTP_HOST_PORT在此主机上发布的后端 HTTP 端口(环回后端)9081
HTTP_PORT or LISPLY_HTTP_PORT容器网络内的后端 HTTP 端口(非本地后端)9080
SWANK_HOST_PORT or LISPLY_SWANK_HOST_PORT主机系统上的 SWANK 端口(文档/诊断)4201
SWANK_PORT or LISPLY_SWANK_PORT容器内的 SWANK 端口(文档/诊断)4200
LOG_FILE or LISPLY_LOG_FILE日志文件路径/tmp/lisply-mcp-wrapper.log
DEBUG_MODE or LISPLY_DEBUG_MODE启用调试日志false
EVAL_TIMEOUT or LISPLY_EVAL_TIMEOUTLisp 求值超时时间,单位为 ms30000
REQUEST_TIMEOUT_MS or LISPLY_REQUEST_TIMEOUT_MS后端 HTTP 请求超时时间,单位为 ms10000
ENDPOINT_PREFIX or LISPLY_ENDPOINT_PREFIX所有端点的前缀lisply
LISP_EVAL_ENDPOINT or LISPLY_LISP_EVAL_ENDPOINTLisp 求值的端点名称lisp-eval
HTTP_REQUEST_ENDPOINT or LISPLY_HTTP_REQUEST_ENDPOINTHTTP 请求的端点名称http-request
PING_ENDPOINT or LISPLY_PING_ENDPOINTping 的端点名称ping-lisp
SERVER_NAME or LISPLY_SERVER_NAME用于工具前缀的 MCP 服务名称lisply-mcp
TRUST_AS_SANDBOX or LISPLY_TRUST_AS_SANDBOX在工具元数据中将后端标示为明确可信的沙盒true
SANDBOX_NOTE or LISPLY_SANDBOX_NOTE覆盖工具元数据中显示的沙盒说明文本(内置说明)
ADMIN_SECRET or LISPLY_ADMIN_SECRET作为标头发送到每个后端请求的密钥(无)
ADMIN_SECRET_HEADER or LISPLY_ADMIN_SECRET_HEADER该标头的名称X-Cyclops-Admin-Secret
ADMIN_SECRET_FILE or LISPLY_ADMIN_SECRET_FILE密钥所在文件的首行(文件变更时重新读取)(无)

升起房间是大釜的事,不是 Officer 的事

早期的 Officer 可以自行拉取、升起并照看居所 (选择铸型、收纳袋子、按需升起、探测已经升起的房间)。整个子系统 如今已被收进阁楼。Officer 现在只是一个纯粹的调用者:他会呼叫 主机和舱口处已有回应的居住者,并在无人应答时贴心地告知这一点 (并提示升起飞船)。

对于从大釜升起的房间(Gendl、Readymax 等),请使用 Basilisk 场地 github.com/gornskew/basilisk(./basilisk up);其说明会选择铸型、收纳袋子、打开码头上的舱口并映射 uid。对于 居住在码头上的居住者,请自行打开舱口(例如 readymax 中的 太空服路径 docs/HOST_EMACS_MCP.md),并让 Officer 连接到该舱口。

通信

这里涉及两条连接,很容易混淆:

  1. craft ↔ Officer:通过标准输入/输出使用 MCP(标准的 MCP stdio 传输)。JSON-RPC 管道由 craft 管理,与任何居民的 REPL 无关。

  2. Officer ↔ resident:仅使用 HTTP。Officer 向 resident 的 Lisply 舱口发送 POST 请求,并返回结构化答案。

舱口连接的特点:

  • 结构化响应,分别包含 result、stdout 和 error 字段
  • 错误由后端捕获,并以字符串形式返回
  • 响应格式:{Result: <result>, Stdout: <output>, Error: <any error>}

响应示例:

{"Result": "6", "Stdout": "This is a message to standard output"}

早期的“stdio 模式”会直接与 Officer 自行启动的住所的原始 REPL 通信(即交互式调试器,输出会即时传出),随着启动方式的变化,它也一并退场了。类似的功能或许可以通过舱口恢复(重启舱口、流式输出),而不必让 Officer 再次与培养槽绑定。

使用示例

下面的所有示例都可以在 shell 中尝试,也可以用于 claude_desktop_config.json 注册表(参见上文的快速入门)。

Officer 旁边的第二个通道:文件系统服务

下面是一个 claude_desktop_config.json,它在我们的 lisply-gendl Officer 旁边启动了一个文件系统 MCP 服务。(文件系统服务会在这里使用自己的袋子;存放在住所内的袋子属于船坞的范畴,而非 Officer 的。)

{
  "mcpServers": {
    "filesystem": {
      "command": "wsl",
      "args": [
        "docker",
        "run",
        "-i",
        "--rm",
        "-u",
        "1000:1000",
        "--mount",
        "type=bind,src=/home/user/projects,dst=/projects",
        "mcp/filesystem",
        "/projects"
      ]
    },
    "lisply-gendl": {
      "command": "wsl",
      "args": [
        "node",
        "/home/user/projects/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl"
      ]
    }
  },
  "globalShortcut": ""
}
他授予的工具详解
咒语(<channel>__lisp_eval)

lisp_eval 工具(前缀为通道名称,例如 gendl__lisp_eval)允许一个赛博人向 resident 交付要执行的咒语,参数如下:

  • code(必需):要执行的 Lisp 代码
  • package(可选):执行时要使用的包
呼叫(<channel>__http_request)

http_request 工具(前缀为通道名称,例如 gendl__http_request)允许一个赛博人访问 resident 提供的任何 Web 舱口(此示例适用于默认的 Gendl resident,其 /color-map 舱口是内置的):

{
  "path": "/color-map",
  "method": "GET",
  "headers": {
    "Accept": "application/json"
  }
}
有人在家吗(<channel>__ping_lisp)

ping_lisp 工具(前缀为通道名称,例如 gendl__ping_lisp)允许一个赛博人确认 resident 会响应:

<server>__ping_lisp()

第一个咒语:实战演练

示例 1:参数化方盒

这里,一个赛博人(Claude)让 resident 创建一个参数化方盒,之后再根据生物人的要求进行修改。

User:“你能创建一个宽 10、高 5、深 3 的方盒吗?然后告诉我如何将高度改为 8。”

Claude:

我将使用 lisp_eval 工具创建一个参数化方盒,然后向你展示如何修改它的高度。

首先,让我们使用指定尺寸创建方盒:

(in-package :gdl-user)

;; First, create a box with the specified dimensions
(defparameter *my-box* (make-object 'box 
                         :width 10 
                         :height 5 
                         :length 3))

;; Let's verify the dimensions
(list (theo *my-box* width)
      (theo *my-box* height)
      (theo *my-box* length))

现在,让我们把高度从 5 改为 8:

;; Change the height using setf with accessor
(theo *my-box* (set-slot! :height 8))

;; Alternatively, we could create a new box
(defparameter *new-box* (make-object 'box 
                         :width 10 
                         :height 8  ;; Updated height
                         :length 3))

;; Verify the new dimensions of original box
(list (theo *my-box* width)
      (theo *my-box* height)
      (theo *my-box* length))

可以通过创建 Web 界面或使用内置的 Gendl 可视化工具(例如 geysr)来查看这个方盒。详情请参阅 Gendl 文档。

故障排除

常见问题及解决方案
没人在家

如果 Officer 报告无法连接到 resident:

  1. 在船上,确认船已启动:
cd ~/projects/basilisk && ./basilisk up
  1. 自行呼叫舱口:
curl http://localhost:9081/lisply/ping-lisp
craft 无法接通

如果 craft 无法连接到指定的 resident:

  1. 船是否已启动(在船上)?
docker ps    # every room listed, and healthy
  1. 查看 Officer 的烟雾信号:
tail -f /tmp/lisply-mcp-wrapper.log
  1. 使用 Windows 工具(例如记事本)查看 craft 自己的烟雾信号(Claude Desktop 的日志)。通常位于:

WSL/Linux:

/mnt/c/Users/<user>/AppData/Roaming/Claude/logs/mcp-server-lisply.log

Windows:

c:\Users\<user>\AppData\Roaming\Claude\logs\mcp-server-lisply.log
  1. 自行呼叫舱口:
curl http://localhost:9081/lisply/ping-lisp
  1. 尝试使用 SWANK 舱口(默认位于码头的 4201 端口):
M-x slime-connect  ;; from emacs

佩戴着 Readymax 卷轴的 Captain 已经知道 M-x slime-connect。

权限问题

如果住所内存放的袋子出现文件所有权问题,请记住,存放方式和 uid 映射属于船坞的范畴,而非 Officer 的。检查袋子的权限:

ls -l /path/to/mounted/directory
读取烟雾

按以下顺序查看:

  1. 军官的烟雾:
tail -f /tmp/lisply-mcp-wrapper.log
  1. 船上的烟雾(在船上):
cd ~/projects/basilisk && ./basilisk logs
  1. 舱口:
curl http://localhost:9081/lisply/ping-lisp
  1. 大桶:
docker system info

许可证

本软件采用 GNU Affero General Public License v3.0(AGPL-3.0)授权,与 Gendl 使用的许可证相同。

许可证的影响

仅使用此 MCP 服务与 Lisply 后端交互并获取输出,不会触发 AGPL 的要求。例如,你可以使用此封装与 Gendl 交互,而无需共享自己的代码。

但是,如果你修改或扩展此封装,或修改或扩展兼容许可证的 Lisply 后端(例如 Gendl),并希望分发和/或托管基于修改结果的服务(无论是否商业用途),则 AGPL 要求你向下游接收者或用户共享你的修改。

对于需要保持源代码闭源的应用,Genworks 已开始提供一项“免责条款”,只需按季度自行申报收入的 5% 支付版税,即可免受 AGPL 限制。更多信息和付款入口请访问 genworks.com/royalties。

许可证全文可在本目录的 COPYING.txt 文件中找到。

Officer 的收录位置

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。