<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="40-ants-mcp-asdf-system-details"></a>
MCP服务器和客户端的框架。[][04f0]
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-40ABOUT-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
一个全面的框架,用于在Common Lisp中构建[模型上下文协议(MCP)][473e]服务器。此库提供了完整的MCP规范实现,并提供了一个易于使用的API来创建可以与如Claude Desktop等AI助手交互的服务器。
正在进行积极开发,接口可能会发生变化。
<a id="features"></a>
STDIO传输:支持基于STDIO的通信HTTP传输:允许创建远程托管的MCP服务器JSON模式验证的自定义工具RPC:利用强大的[40ants OpenRPC库][348e]CLOS基础:面向对象设计,具有适当的封装API用于添加功能JSON-RPC错误码MCP工具可以在运行时通过REPL驱动的方法进行编辑和更新<a id="roadmap"></a>
MCP规范支持:完成MCP协议版本2025-06-18的实现URI提供动态和静态资源MCP客户端协议:实现连接到MCP服务器的客户端协议<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-40INSTALLATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
你可以从Quicklisp安装这个库,但如果你想快速接收更新,可以从Ultralisp.org安装:
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)
(ql:quickload :40ants-mcp)
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-40USAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
这里有一个快速示例,展示如何使用自定义工具创建一个MCP服务器:
(defpackage #:my-mcp-server
(:use #:cl)
(:import-from #:40ants-mcp/content/text
#:text-content)
(:import-from #:openrpc-server))
(in-package #:my-mcp-server)
;; 定义你的API
(openrpc-server:define-api (my-tools :title "我的自定义工具"))
;; 定义一个加法工具
(40ants-mcp/tools:define-tool (my-tools add) (a b)
(:summary "加两个数并返回结果。")
(:param a integer "要相加的第一个数。")
(:param b integer "要相加的第二个数。")
(:result (soft-list-of text-content))
(list (make-instance 'text-content
:text (format nil "~A 和 ~A 的和是: ~A"
a b (+ a b)))))
;; 启动服务器
(40ants-mcp/server/definition:start-server my-tools)
<a id="running-as-a-script"></a>
为了生产用途,你可以创建一个Roswell脚本。创建一个文件my-mcp.ros:
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 \"$@\"
|#
(ql:quickload '(:40ants-mcp :alexandria) :silent t)
;; 你的包和工具定义在这里...
(defun main (&rest argv)
(declare (ignore argv))
(40ants-mcp/server/definition:start-server my-tools))
构建并运行脚本:
# 构建脚本
ros build my-mcp.ros
# 运行服务器
./my-mcp
# 带有远程调试支持
SLYNK_PORT=4005 ./my-mcp
每个定义的工具都应该返回一个内容项列表。最常见的内容类型是text-content,但你也可以返回MCP规范中定义的其他类型。
更多示例,请查看源代码中的examples/目录。
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-40API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FCONTENT-2FBASE-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-28-23A-28-2823-29-20BASE-CHAR-20-2E-20-2240ANTS-MCP-2FCONTENT-2FBASE-22-29-20PACKAGE-29"></a>
40ants-mcp/content/base<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-7C-4040ANTS-MCP-2FCONTENT-2FBASE-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FCONTENT-2FBASE-24CONTENT-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-2FCONTENT-2FBASE-3ACONTENT-20CLASS-29"></a>
40ants-mcp/content/base:content ()读取器
<a id="x-2840ANTS-MCP-2FCONTENT-2FBASE-3ACONTENT-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FCONTENT-2FBASE-3ACONTENT-29-29"></a>
40ants-mcp/content/base:content-type (content) (:TYPE = "未知")<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FCONTENT-2FTEXT-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-28-23A-28-2823-29-20BASE-CHAR-20-2E-20-2240ANTS-MCP-2FCONTENT-2FTEXT-22-29-20PACKAGE-29"></a>
40ants-mcp/content/text<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-7C-4040ANTS-MCP-2FCONTENT-2FTEXT-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FCONTENT-2FTEXT-24TEXT-CONTENT-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-2FCONTENT-2FTEXT-3ATEXT-CONTENT-20CLASS-29"></a>
40ants-mcp/content/text:text-content (content)读取器
<a id="x-2840ANTS-MCP-2FCONTENT-2FTEXT-3ACONTENT-TEXT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FCONTENT-2FTEXT-3ATEXT-CONTENT-29-29"></a>
40ants-mcp/content/text:content-text (text-content) (:text)<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FHTTP-TRANSPORT-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-28-23A-28-2825-29-20BASE-CHAR-20-2E-20-2240ANTS-MCP-2FHTTP-TRANSPORT-22-29-20PACKAGE-29"></a>
40ants-mcp/http-transport<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-7C-4040ANTS-MCP-2FHTTP-TRANSPORT-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FHTTP-TRANSPORT-24HTTP-TRANSPORT-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-20CLASS-29"></a>
40ants-mcp/http-transport:http-transport ()HTTP传输实现用于MCP(模型上下文协议)通信。
此类处理通过HTTP POST请求交换JSON-RPC消息。
读取器
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-LACK-APP-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-lack-app (http-transport) ()Lack应用程序实例
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-MESSAGE-HANDLER-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-message-handler (http-transport) ()处理传入消息的函数
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-PORT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-port (http-transport) (:port = 8080)监听端口号。
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-RUNNING-P-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-running-p (http-transport) (= t)表示传输是否活跃的标志
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-SERVER-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-server (http-transport) ()Clack服务器实例
访问器
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-LACK-APP-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-lack-app (http-transport) ()Lack应用程序实例
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-MESSAGE-HANDLER-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-message-handler (http-transport) ()处理传入消息的函数
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-RUNNING-P-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-running-p (http-transport) (= t)表示传输是否活跃的标志
<a id="x-2840ANTS-MCP-2FHTTP-TRANSPORT-3ATRANSPORT-SERVER-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-2040ANTS-MCP-2FHTTP-TRANSPORT-3AHTTP-TRANSPORT-29-29"></a>
40ants-mcp/http-transport:transport-server (http-transport) ()Clack服务器实例
<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4