Extensión MCP para SillyTavern
Esta extensión agrega soporte de ejecución de herramientas basada en WebSocket a SillyTavern, lo que permite registrar y ejecutar herramientas externas a través de una interfaz estandarizada.
Características
Servidor WebSocket para comunicación en tiempo real
Sistema de registro y ejecución de herramientas
Validación de esquemas JSON para definiciones de herramientas
Actualizaciones del estado de ejecución en tiempo real
Configuración de registro y WebSocket configurables
Interfaz de usuario de configuración basada en web integrada en SillyTavern
Related MCP server: Modular MCP Server & Client
Instalación
Método 1: Interfaz web (recomendado)
Consulte INSTRUCCIONES.md para obtener instrucciones paso a paso sobre la instalación a través de la interfaz web de SillyTavern.
Método 2: Instalación manual
Clona este repositorio en tu directorio de complementos de SillyTavern:
cd /path/to/SillyTavern/plugins git clone https://github.com/CG-Labs/SillyTavern-MCP-Extension.git mcp-extensionInstalar dependencias:
cd mcp-extension npm installReiniciar SillyTavern
Configuración
La extensión se puede configurar a través de la interfaz de usuario de SillyTavern en Configuración > Extensiones > Extensión MCP.
Configuraciones disponibles
Puerto WebSocket : el número de puerto para el servidor WebSocket (predeterminado: 5005)
Nivel de registro : nivel de verbosidad del registro (depuración, información, advertencia, error)
Uso
Registrar una herramienta
Para registrar una herramienta, envíe un mensaje WebSocket con el siguiente formato:
{
"type": "register_tool",
"data": {
"name": "example_tool",
"schema": {
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "First parameter"
},
"param2": {
"type": "number",
"description": "Second parameter"
}
},
"required": ["param1"]
}
}
}Ejecución de una herramienta
Para ejecutar una herramienta registrada, envíe un mensaje WebSocket con el siguiente formato:
{
"type": "execute_tool",
"data": {
"executionId": "unique_execution_id",
"name": "example_tool",
"args": {
"param1": "value1",
"param2": 42
}
}
}Actualizaciones del estado de ejecución
La extensión transmite actualizaciones del estado de ejecución a todos los clientes conectados:
Ejecución iniciada
{
"type": "tool_execution_started",
"data": {
"executionId": "unique_execution_id",
"name": "example_tool",
"args": {
"param1": "value1",
"param2": 42
}
}
}Ejecución completada
{
"type": "tool_execution_completed",
"data": {
"executionId": "unique_execution_id",
"result": {
// Tool-specific result data
}
}
}Ejecución fallida
{
"type": "tool_execution_failed",
"data": {
"executionId": "unique_execution_id",
"error": {
"code": "ERROR_CODE",
"message": "Error message"
}
}
}Códigos de error
INVALID_NAME: Nombre de herramienta no válidoINVALID_SCHEMA: Esquema de herramienta no válidoINVALID_URI: URI de recurso no válidoINVALID_HANDLER: Implementación de controlador no válidaINVALID_ARGUMENTS: Argumentos de herramienta no válidosTOOL_EXISTS: Herramienta ya registradaTOOL_NOT_FOUND: Herramienta no encontradaTOOL_EXECUTION_FAILED: Falló la ejecución de la herramientaSERVER_ERROR: Error interno del servidor
Desarrollo
Estructura del proyecto
mcp-extension/
├── index.js # Main plugin entry point
├── manifest.json # Plugin manifest
├── package.json # Dependencies and scripts
├── public/ # Public assets
│ ├── script.js # Client-side JavaScript
│ ├── style.css # Client-side styles
│ └── templates/ # HTML templates
├── utils/ # Utility modules
│ ├── errors.js # Error handling
│ ├── logger.js # Logging utility
│ └── validation.js # Input validation
└── README.md # This documentationAgregar nuevas herramientas
Para agregar una nueva herramienta:
Conectarse al servidor WebSocket
Registre su herramienta con un esquema
Escuchar solicitudes de ejecución
Manejar la ejecución y devolver resultados
Ejemplo de implementación de la herramienta:
const ws = new WebSocket('ws://localhost:5005');
ws.onopen = () => {
// Register tool
ws.send(JSON.stringify({
type: 'register_tool',
data: {
name: 'example_tool',
schema: {
type: 'object',
properties: {
input: {
type: 'string'
}
},
required: ['input']
}
}
}));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'execute_tool' &&
message.data.name === 'example_tool') {
// Handle execution
const result = doSomething(message.data.args.input);
// Send result
ws.send(JSON.stringify({
type: 'tool_execution_completed',
data: {
executionId: message.data.executionId,
result
}
}));
}
};Contribuyendo
Bifurcar el repositorio
Crear una rama de características
Confirme sus cambios
Empujar hacia la rama
Crear una solicitud de extracción
Apoyo
Si encuentra algún problema o tiene preguntas:
Consulte los problemas de GitHub para ver los problemas existentes
Crea un nuevo problema si tu problema no ha sido reportado
Únete a la comunidad Discord de SillyTavern para obtener ayuda.
Licencia
Licencia MIT: consulte el archivo de LICENCIA para obtener más detalles