40ants MCP
Un marco para construir servidores del Protocolo de Contexto de Modelo (MCP) en Common Lisp.
Documentación
40ants-mcp - El framework para construir servidores y clientes MCP en Common Lisp.
Detalles del Sistema ASDF 40ANTS-MCP
- Descripción: El framework para construir
MCPservidores y clientes en Common Lisp. - Licencia: Unlicense
- Autor: Alexander Artemenko svetlyak.40wt@gmail.com
- Página principal: https://40ants.com/mcp/
- Rastreador de errores: https://github.com/40ants/mcp/issues
- Control de fuente: GIT
- Depende de: alexandria, bordeaux-threads, cl-ppcre, clack, clack-sse, jsonrpc, lack, lack-request, lack-response, local-time, log4cl, log4cl-extras, openrpc-client, openrpc-server, sento, serapeum, sse-server, trivial-gray-streams, uuid, yason
Acerca de
Un framework integral para construir servidores Model Context Protocol (MCP) en Common Lisp. Esta biblioteca proporciona una implementación completa de la especificación MCP con una API fácil de usar para crear servidores que puedan interactuar con asistentes AI como Claude Desktop.
El desarrollo activo está en curso y es probable que la interfaz cambie.
Características
- ✅ Transporte
STDIO: Soporte nativo para comunicación basada enSTDIO - ✅ Transporte
HTTPTransmisible: Permite crear servidoresMCPalojados remotamente - ✅ Sistema de Herramientas: Registra y ejecuta herramientas personalizadas con validación de Esquema
JSON - ✅ Construido sobre Open
RPC: Aprovecha la robusta biblioteca 40ants OpenRPC - ✅ Basado en
CLOS: Diseño orientado a objetos con encapsulación adecuada - ✅ Integración Fácil:
APIsimple para agregar funcionalidad - ✅ Manejo de Errores: Gestión integral de errores con códigos de error
JSON-RPCadecuados - ✅ Edición Interactiva: Las herramientas
MCPse pueden editar y actualizar sobre la marcha, utilizando un enfoque impulsado porREPL
Hoja de Ruta
- 🔄 Soporte Completo de la Especificación
MCP: Implementación completa del protocoloMCPversión 2025-06-18 - 🔄 Sistema de Recursos: Sirve recursos dinámicos y estáticos a través de
URI - 🔄 Sistema de Prompts: Proporciona plantillas de prompts con interpolación de argumentos
- 🔄 Protocolo de Cliente
MCP: Implementa el protocolo del lado del cliente para conectarse a servidoresMCP
Instalación
Puedes instalar esta biblioteca desde Quicklisp, pero si deseas recibir actualizaciones rápidamente, instálala desde Ultralisp.org:
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)
(ql:quickload :40ants-mcp)
Uso
Aquí hay un ejemplo rápido de cómo crear un servidor MCP con herramientas personalizadas:
(defpackage #:my-mcp-server
(:use #:cl)
(:import-from #:40ants-mcp/content/text
#:text-content)
(:import-from #:openrpc-server))
(in-package #:my-mcp-server)
;; Define your API
(openrpc-server:define-api (my-tools :title "My Custom Tools"))
;; Define a tool that adds two numbers
(40ants-mcp/tools:define-tool (my-tools add) (a b)
(:summary "Adds two numbers and returns the result.")
(:param a integer "First number to add.")
(:param b integer "Second number to add.")
(:result (soft-list-of text-content))
(list (make-instance 'text-content
:text (format nil "The sum of ~A and ~A is: ~A"
a b (+ a b)))))
;; Start the server
(40ants-mcp/server/definition:start-server my-tools)
Ejecutar como un Script
Para uso en producción, puedes crear un script de Roswell. Crea un archivo my-mcp.ros:
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 \"$@\"
|#
(ql:quickload '(:40ants-mcp :alexandria) :silent t)
;; Your package and tool definitions here...
(defun main (&rest argv)
(declare (ignore argv))
(40ants-mcp/server/definition:start-server my-tools))
Compila y ejecuta el script:
# Build the script
ros build my-mcp.ros
# Run the server
./my-mcp
# With remote debugging support
SLYNK_PORT=4005 ./my-mcp
Cada herramienta que definas debe devolver una lista de elementos de contenido. El tipo de contenido más común es text-content, pero también puedes devolver otros tipos definidos en la especificación MCP.
Para más ejemplos, consulta el directorio examples/ en el código fuente.
API
40ANTS-MCP/CONTENT/BASE
package 40ants-mcp/content/base
Clases
CONTENT
class 40ants-mcp/content/base:content ()
Lectores
reader 40ants-mcp/content/base:content-type (content) (:TYPE = "unknown")
40ANTS-MCP/CONTENT/TEXT
package 40ants-mcp/content/text
Clases
TEXT-CONTENT
class 40ants-mcp/content/text:text-content (content)
Lectores
reader 40ants-mcp/content/text:content-text (text-content) (:text)
40ANTS-MCP/HTTP-TRANSPORT
package 40ants-mcp/http-transport
Clases
HTTP-TRANSPORT
class 40ants-mcp/http-transport:http-transport ()
Implementación del transporte HTTP para la comunicación MCP (Model Context Protocol).
Esta clase maneja el intercambio de mensajes JSON-RPC a través de solicitudes HTTP POST.
Lectores
reader 40ants-mcp/http-transport:transport-lack-app (http-transport) ()
Instancia de la aplicación Lack
reader 40ants-mcp/http-transport:transport-message-handler (http-transport) ()
Función para manejar mensajes entrantes
reader 40ants-mcp/http-transport:transport-port (http-transport) (:port = 8080)
Número de puerto para escuchar.
reader 40ants-mcp/http-transport:transport-running-p (http-transport) (= t)
Indicador que señala si el transporte está activo
reader 40ants-mcp/http-transport:transport-server (http-transport) ()
Instancia del servidor Clack
Accesores
accessor 40ants-mcp/http-transport:transport-lack-app (http-transport) ()
Instancia de la aplicación Lack
accessor 40ants-mcp/http-transport:transport-message-handler (http-transport) ()
Función para manejar mensajes entrantes
accessor 40ants-mcp/http-transport:transport-running-p (http-transport) (= t)
Indicador que señala si el transporte está activo
accessor 40ants-mcp/http-transport:transport-server (http-transport) ()
Instancia del servidor Clack
40ANTS-MCP/SERVER/DEFINITION
package 40ants-mcp/server/definition
Clases
MCP-SERVER
class 40ants-mcp/server/definition:mcp-server (api)
Lectores
reader 40ants-mcp/server/definition:server-tools-collections (mcp-server) (collections = nil)
Funciones
function 40ants-mcp/server/definition:start-server tools-collections &key (transport :stdio) (port 8080)
Inicia el servidor MCP con el transporte especificado.
TRANSPORT puede ser :stdio o :http.
PORT solo se usa cuando el transporte es :http.
40ANTS-MCP/SERVER/ERRORS
package 40ants-mcp/server/errors
Clases
TOOL-ERROR
condition 40ants-mcp/server/errors:tool-error ()
Debes señalar este error en caso de que la herramienta no pueda realizar su trabajo.
Lectores
reader 40ants-mcp/server/errors:tool-error-content (tool-error) (:content)
40ANTS-MCP/STDIO-TRANSPORT
package 40ants-mcp/stdio-transport
Clases
STDIO-TRANSPORT
class 40ants-mcp/stdio-transport:stdio-transport ()
Implementación del transporte STDIO para la comunicación MCP (Model Context Protocol).
Esta clase maneja el intercambio de mensajes JSON-RPC a través de flujos estándar de entrada/salida.
Está diseñada para trabajar con la especificación del protocolo MCP para la comunicación de modelos AI.
Lectores
reader 40ants-mcp/stdio-transport:transport-input (stdio-transport) (:input-stream = *standard-input*)
Flujo de entrada para leer mensajes JSON-RPC. Por defecto es standard-input.
reader 40ants-mcp/stdio-transport:transport-output (stdio-transport) (:output-stream = *standard-output*)
Flujo de salida para escribir respuestas JSON-RPC. Por defecto es standard-output.
reader 40ants-mcp/stdio-transport:transport-running-p (stdio-transport) (= t)
Indicador que señala si el transporte está activo y procesando mensajes.
Accesores
accessor 40ants-mcp/stdio-transport:transport-input (stdio-transport) (:input-stream = *standard-input*)
Flujo de entrada para leer mensajes JSON-RPC. Por defecto es standard-input.
accessor 40ants-mcp/stdio-transport:transport-output (stdio-transport) (:output-stream = *standard-output*)
Flujo de salida para escribir respuestas JSON-RPC. Por defecto es standard-output.
accessor 40ants-mcp/stdio-transport:transport-running-p (stdio-transport) (= t)
Indicador que señala si el transporte está activo y procesando mensajes.
Genéricos
generic-function 40ants-mcp/transport/base:receive-message transport
Recibe un mensaje JSON-RPC, devuelve un mensaje o NIL.
generic-function 40ants-mcp/transport/base:send-message transport message
Envía un mensaje JSON-RPC, no devuelve valores.
40ANTS-MCP/TOOLS
package 40ants-mcp/tools
Macros
macro 40ants-mcp/tools:define-tool name args &body body
40ANTS-MCP/TRANSPORT/BASE
package 40ants-mcp/transport/base
Genéricos
generic-function 40ants-mcp/transport/base:receive-message transport
Recibe un mensaje JSON-RPC, devuelve un mensaje o NIL.
generic-function 40ants-mcp/transport/base:send-message transport message
Envía un mensaje JSON-RPC, no devuelve valores.
generic-function 40ants-mcp/transport/base:start-loop transport message-handler
Inicia el procesamiento de mensajes usando el transporte dado.
generic-function 40ants-mcp/transport/base:stop-loop transport
Detiene el procesamiento de mensajes usando el transporte dado.