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

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 en STDIO
  • ✅ Transporte HTTP Transmisible: Permite crear servidores MCP alojados remotamente
  • ✅ Sistema de Herramientas: Registra y ejecuta herramientas personalizadas con validación de Esquema JSON
  • ✅ Construido sobre OpenRPC: Aprovecha la robusta biblioteca 40ants OpenRPC
  • ✅ Basado en CLOS: Diseño orientado a objetos con encapsulación adecuada
  • ✅ Integración Fácil: API simple para agregar funcionalidad
  • ✅ Manejo de Errores: Gestión integral de errores con códigos de error JSON-RPC adecuados
  • ✅ Edición Interactiva: Las herramientas MCP se pueden editar y actualizar sobre la marcha, utilizando un enfoque impulsado por REPL

Hoja de Ruta

  • 🔄 Soporte Completo de la Especificación MCP: Implementación completa del protocolo MCP versió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 servidores MCP

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.


[generado por 40ANTS-DOC]