关于 Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments
Cyborg Whisperer 是基于 Node.js 的中间件,通过 HTTP 将支持 MCP 的客户端连接到使用 Lisply 方言的 Lisp 后端。它支持 AI 辅助的 Lisp 求值和项目操作;包装器不限制 Lisp 执行,后端隔离由运营者负责。
主要功能
- 01将 MCP 工具调用路由到 Lisply HTTP
- 02Lisp 表达式求值
- 03后端 HTTP 请求
- 04为多个后端设置独立通道
- 05可选的 Lisply 语料搜索
- 06可配置后端连接与密钥
适用场景
- 01从 MCP 客户端运行 Lisp 表达式
- 02借助 LLM 开发 Lisp 项目
- 03将 MCP 客户端连接到现有 Lisp REPL
- 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 语系船员服务的协议官

在 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. 安装
-
安装 Node.js(建议使用 18+)。如果使用 Windows,可以直接在 Windows 中安装,也可以在 WSL 中安装。
-
准备一个可通过开放舱口呼叫的常驻服务。最简单的方法是从 Basilisk yard 升起一艘船(需要 vat: Docker);也可以在 dock 上打开自己的 Lisply 舱口。
-
将这些
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 可以:
- 向常驻服务发送咒语并读取返回结果;
- 呼叫常驻服务所管理的任意 web 舱口;
- 通过咒语查询常驻服务自身的知识——自省、文档;
- 同样通过咒语编写、编译、加载和研究卷轴。
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:
- 将 MCP 中的工具调用转为对常驻服务Lisply 舱口的呼叫,并将答复转回工具结果
- 保存记录(即他的日志),并报告出错之处
安全注意事项
由于 Officer 可以在运行中的常驻进程里执行任意 Lisp,因此如果这个赛博格“失控”,就会存在风险。简单来说,最佳实践如下:
-
只让 Officer 调用运行在容器中的常驻进程。给他另一个主机和端口,他也会欣然调用任何支持 Lisply 的 HTTP 端口——不要让这个端口由直接运行在你自己机器上的程序提供。
-
不要把任何你承受不起丢失的内容挂载到该容器中(挂载什么由运行环境决定——也就是 compose 配置,而不是 Officer)。
-
让常驻进程请求一个密钥,并向 Officer 提供同一个密钥:配置密钥后,Gendl 后端需要
X-Lisply-Secret(参见 gendl 的gwl/lisply-backendREADME 中的“保护端点”一节);--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
- 克隆此仓库:
git clone https://github.com/gornskew/cyborg-whisperer.git
- 安装其运行所需的内容(可选;缺少时 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
- 查看其标志:
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_HOST | Lisply 后端主机 | 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_TIMEOUT | Lisp 求值超时时间,单位为 ms | 30000 |
REQUEST_TIMEOUT_MS or LISPLY_REQUEST_TIMEOUT_MS | 后端 HTTP 请求超时时间,单位为 ms | 10000 |
ENDPOINT_PREFIX or LISPLY_ENDPOINT_PREFIX | 所有端点的前缀 | lisply |
LISP_EVAL_ENDPOINT or LISPLY_LISP_EVAL_ENDPOINT | Lisp 求值的端点名称 | lisp-eval |
HTTP_REQUEST_ENDPOINT or LISPLY_HTTP_REQUEST_ENDPOINT | HTTP 请求的端点名称 | http-request |
PING_ENDPOINT or LISPLY_PING_ENDPOINT | ping 的端点名称 | 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 连接到该舱口。
通信
这里涉及两条连接,很容易混淆:
-
craft ↔ Officer:通过标准输入/输出使用 MCP(标准的 MCP stdio 传输)。JSON-RPC 管道由 craft 管理,与任何居民的 REPL 无关。
-
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:
- 在船上,确认船已启动:
cd ~/projects/basilisk && ./basilisk up
- 自行呼叫舱口:
curl http://localhost:9081/lisply/ping-lisp
craft 无法接通
如果 craft 无法连接到指定的 resident:
- 船是否已启动(在船上)?
docker ps # every room listed, and healthy
- 查看 Officer 的烟雾信号:
tail -f /tmp/lisply-mcp-wrapper.log
- 使用 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
- 自行呼叫舱口:
curl http://localhost:9081/lisply/ping-lisp
- 尝试使用 SWANK 舱口(默认位于码头的 4201 端口):
M-x slime-connect ;; from emacs
佩戴着 Readymax 卷轴的 Captain 已经知道 M-x slime-connect。
权限问题
如果住所内存放的袋子出现文件所有权问题,请记住,存放方式和 uid 映射属于船坞的范畴,而非 Officer 的。检查袋子的权限:
ls -l /path/to/mounted/directory
读取烟雾
按以下顺序查看:
- 军官的烟雾:
tail -f /tmp/lisply-mcp-wrapper.log
- 船上的烟雾(在船上):
cd ~/projects/basilisk && ./basilisk logs
- 舱口:
curl http://localhost:9081/lisply/ping-lisp
- 大桶:
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 的收录位置
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。