sova
Un marco de TypeScript para crear servidores MCP capaces de manejar sesiones de cliente.
[!NOTA]
Para una implementación de Python, consulte sova .
Características
- Herramienta sencilla, recurso, definición rápida
- Autenticación
- Sesiones
- Contenido de la imagen
- Contenido de audio
- Explotación florestal
- Manejo de errores
- SSE
- CORS (habilitado por defecto)
- Notificaciones de progreso
- Eventos de servidor tipificados
- Completado automático de argumentos
- Muestreo
- Pings SSE automatizados
- Raíces
- CLI para pruebas y depuración
Instalación
Inicio rápido
[!NOTA]
Existen numerosos ejemplos reales del uso de sova en la naturaleza. Vea ejemplos en el Showcase .
¡Listo! Ya tienes un servidor MCP funcionando.
Puedes probar el servidor en la terminal con:
SSE
Los eventos enviados por el servidor (SSE) proporcionan un mecanismo para que los servidores envíen actualizaciones en tiempo real a los clientes mediante una conexión HTTPS. En el contexto de MCP, SSE se utiliza principalmente para habilitar la comunicación remota de MCP, lo que permite acceder a un MCP alojado en una máquina remota y retransmitir actualizaciones a través de la red.
También puedes ejecutar el servidor con soporte SSE:
Esto iniciará el servidor y escuchará conexiones SSE en http://localhost:8080/sse
.
Luego puede usar SSEClientTransport
para conectarse al servidor:
Conceptos básicos
Herramientas
Las herramientas en MCP permiten a los servidores exponer funciones ejecutables que pueden ser invocadas por los clientes y utilizadas por los LLM para realizar acciones.
Sova utiliza la especificación del Esquema Estándar para definir los parámetros de la herramienta. Esto le permite usar su biblioteca de validación de esquemas preferida (como Zod, ArkType o Valibot) siempre que implemente la especificación.
Ejemplo de Zod:
Ejemplo de ArkType:
Ejemplo de Valibot:
Valibot requiere la dependencia de pares @valibot/to-json-schema.
Devolviendo una cadena
execute
puede devolver una cadena:
Esto último es equivalente a:
Devolviendo una lista
Si desea devolver una lista de mensajes, puede devolver un objeto con una propiedad content
:
Devolviendo una imagen
Utilice imageContent
para crear un objeto de contenido para una imagen:
La función imageContent
toma las siguientes opciones:
url
: La URL de la imagen.path
: la ruta al archivo de imagen.buffer
: Los datos de la imagen como buffer.
Solo se debe especificar uno de los siguientes: url
, path
o buffer
.
El ejemplo anterior es equivalente a:
Devolviendo un audio
Utilice audioContent
para crear un objeto de contenido para un audio:
La función audioContent
toma las siguientes opciones:
url
: La URL del audio.path
: La ruta al archivo de audio.buffer
: Los datos de audio como buffer.
Solo se debe especificar uno de los siguientes: url
, path
o buffer
.
El ejemplo anterior es equivalente a:
Tipo de combinación de retorno
Puedes combinar varios tipos de esta manera y enviarlos de vuelta a la IA.
Explotación florestal
Las herramientas pueden registrar mensajes en el cliente utilizando el objeto log
en el objeto de contexto:
El objeto log
tiene los siguientes métodos:
debug(message: string, data?: SerializableValue)
error(message: string, data?: SerializableValue)
info(message: string, data?: SerializableValue)
warn(message: string, data?: SerializableValue)
Errores
Los errores que se deben mostrar al usuario deben generarse como instancias UserError
:
Progreso
Las herramientas pueden informar el progreso llamando reportProgress
en el objeto de contexto:
Anotaciones de herramientas
A partir de la Especificación MCP (26/03/2025), las herramientas pueden incluir anotaciones que brindan un contexto y un control más completos al agregar metadatos sobre el comportamiento de una herramienta:
Las anotaciones disponibles son:
Anotación | Tipo | Por defecto | Descripción |
---|---|---|---|
title | cadena | - | Un título legible para humanos para la herramienta, útil para la visualización de la interfaz de usuario |
readOnlyHint | booleano | false | Si es verdadero, indica que la herramienta no modifica su entorno. |
destructiveHint | booleano | true | Si es verdadero, la herramienta puede realizar actualizaciones destructivas (solo tiene sentido cuando readOnlyHint es falso) |
idempotentHint | booleano | false | Si es verdadero, llamar a la herramienta repetidamente con los mismos argumentos no tiene ningún efecto adicional (solo es significativo cuando readOnlyHint es falso) |
openWorldHint | booleano | true | Si es cierto, la herramienta puede interactuar con un "mundo abierto" de entidades externas. |
Estas anotaciones ayudan a los clientes y a los LLM a comprender mejor cómo utilizar las herramientas y qué esperar al llamarlas.
Recursos
Los recursos representan cualquier tipo de datos que un servidor MCP desea poner a disposición de los clientes. Esto puede incluir:
- Contenido del archivo
- Capturas de pantalla e imágenes
- Y más
Cada recurso se identifica mediante un URI único y puede contener texto o datos binarios.
[!NOTA]
load
puede devolver múltiples recursos. Esto podría usarse, por ejemplo, para devolver una lista de archivos dentro de un directorio al leerlo.
También puedes devolver contenido binario en load
:
Plantillas de recursos
También puedes definir plantillas de recursos:
Completado automático de argumentos de plantillas de recursos
Proporcionar funciones complete
para los argumentos de la plantilla de recursos para permitir la finalización automática:
Indicaciones
Los avisos permiten a los servidores definir plantillas de avisos y flujos de trabajo reutilizables que los clientes pueden mostrar fácilmente a los usuarios y a los LLM. Ofrecen una potente herramienta para estandarizar y compartir interacciones comunes de LLM.
Completado automático de argumentos rápidos
Los mensajes pueden proporcionar autocompletado para sus argumentos:
Completado automático de argumentos mediante enum
Si proporciona una matriz enum
para un argumento, el servidor proporcionará automáticamente compleciones para el argumento.
Autenticación
Sova le permite authenticate
clientes mediante una función personalizada:
Ahora puedes acceder a los datos de la sesión autenticada en tus herramientas:
Proporcionar instrucciones
Puede proporcionar instrucciones al servidor utilizando la opción instructions
:
Sesiones
El objeto session
es una instancia de sovaSession
y describe sesiones de cliente activas.
Asignamos una nueva instancia de servidor para cada conexión de cliente para permitir la comunicación 1:1 entre un cliente y el servidor.
Eventos de servidor tipificados
Puedes escuchar los eventos emitidos por el servidor utilizando el método on
:
sovaSession
sovaSession
representa una sesión de cliente y proporciona métodos para interactuar con el cliente.
Consulte Sesiones para obtener ejemplos de cómo obtener una instancia sovaSession
.
requestSampling
requestSampling
crea una solicitud de muestreo y devuelve la respuesta.
clientCapabilities
La propiedad clientCapabilities
contiene las capacidades del cliente.
loggingLevel
La propiedad loggingLevel
describe el nivel de registro establecido por el cliente.
roots
La propiedad roots
contiene las raíces establecidas por el cliente.
server
La propiedad server
contiene una instancia del servidor MCP que está asociado con la sesión.
Eventos de sesión tipificados
Puedes escuchar los eventos emitidos por la sesión utilizando el método on
:
Ejecución de su servidor
Prueba con mcp-cli
La forma más rápida de probar y depurar su servidor es con sova dev
:
Esto ejecutará su servidor con mcp-cli
para probar y depurar su servidor MCP en la terminal.
Inspeccionar con MCP Inspector
Otra forma es utilizar el MCP Inspector
para inspeccionar su servidor con una interfaz web:
Preguntas frecuentes
¿Cómo utilizar con Claude Desktop?
Siga la guía https://modelcontextprotocol.io/quickstart/user y agregue la siguiente configuración:
Expresiones de gratitud
- sova está inspirado en la implementación de Python de Jonathan Lowin .
- Partes del código base fueron adoptadas de LiteMCP .
- Partes del código base se adoptaron del protocolo Model Context でSSEをやってみる.
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Un marco de TypeScript para crear servidores MCP con funciones para sesiones de cliente, autenticación, contenido de imagen/audio y eventos de servidor tipificados.
Related MCP Servers
- AsecurityAlicenseAqualityA TypeScript-based server that allows calling other MCP clients from your own MCP client, facilitating task delegation and context window offloading for enhanced multi-agent interactions.Last updated -314JavaScriptMIT License
- AsecurityFlicenseAqualityA TypeScript-based MCP server designed for experimentation and integration with Calude Desktop and Cursor IDE, offering a modular playground for extending server capabilities.Last updated -21,1334JavaScript
- -securityFlicense-qualityA TypeScript framework for building Model Context Protocol (MCP) servers with automatic discovery and loading of tools, resources, and prompts.Last updated -67TypeScript
- -securityFlicense-qualityA simple TypeScript library for creating Model Context Protocol (MCP) servers with features like type safety, parameter validation, and a minimal code API.Last updated -1TypeScriptMIT License