返回市场
麦普

麦普

作者:40ants40 星标更新:2025-06-29

项目介绍

技术文档摘要

<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>

40ants-mcp - 在Common Lisp中构建MCP服务器和客户端的框架。

<a id="40-ants-mcp-asdf-system-details"></a>

40ANTS-MCP ASDF系统详情

  • 描述:在Common Lisp中构建MCP服务器和客户端的框架。
  • 许可证:无许可证
  • 作者:Alexander Artemenko svetlyak.40wt@gmail.com
  • 官方网站:[https://40ants.com/mcp/][7318]
  • Bug跟踪器:[https://github.com/40ants/mcp/issues][6ed2]
  • 源代码控制:[GIT][e31f]
  • 依赖项:[alexandria][8236], [bordeaux-threads][3dbf], [cl-ppcre][49b9], [clack][482d], [clack-sse][b0a4], [jsonrpc][a9bd], [lack][63d7], [lack-request][6a02], [lack-response][521b], [local-time][46a1], [log4cl][7f8b], [log4cl-extras][691c], [openrpc-client][b8fd], [openrpc-server][c8e7], [sento][626d], [serapeum][c41d], [sse-server][0027], [trivial-gray-streams][588d], [uuid][d6b3], [yason][aba2]

[][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模式验证的自定义工具
  • 基于OpenRPC:利用强大的[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>

API

<a id="x-2840ANTS-MCP-DOCS-2FINDEX-3A-3A-4040ANTS-MCP-2FCONTENT-2FBASE-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>

40ANTS-MCP/CONTENT/BASE

<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>

CONTENT

<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>

40ANTS-MCP/CONTENT/TEXT

<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>

TEXT-CONTENT

<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>

40ANTS-MCP/HTTP-TRANSPORT

<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>

HTTP-TRANSPORT

<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