Text Classification (Model2Vec)

Un servidor para clasificación de texto que utiliza embeddings estáticos de Model2Vec, compatible con múltiples transportes como stdio y HTTP/SSE.

Documentación

Servidor MCP de Clasificación de Texto (Model2Vec)

Un potente servidor de Protocolo de Contexto de Modelo (MCP) que proporciona herramientas integrales de clasificación de texto utilizando incrustaciones estáticas rápidas de Model2Vec (Minish Lab).

🛠️ Herramientas y Recursos MCP Completos

Este servidor proporciona 6 herramientas esenciales, 2 recursos y 1 plantilla de prompt para la clasificación de texto:

🏷️ Herramientas de Clasificación

  • classify_text - Clasificar texto individual con puntuaciones de confianza
  • batch_classify - Clasificar múltiples textos simultáneamente

📝 Herramientas de Gestión de Categorías

  • add_custom_category - Agregar categorías personalizadas individuales
  • batch_add_custom_categories - Agregar múltiples categorías a la vez
  • list_categories - Ver todas las categorías disponibles
  • remove_categories - Eliminar categorías no deseadas

📊 Recursos

  • categories://list - Acceder a la lista de categorías programáticamente
  • model://info - Obtener información del modelo y del sistema

💬 Plantillas de Prompt

  • classification_prompt - Plantilla de prompt de clasificación lista para usar

🚀 Características Clave

  • Sin instalación: Solo uv run — las dependencias se declaran en línea (PEP 723)
  • Múltiples Transportes: Soporta stdio (local), HTTP/SSE y HTTP Streamable
  • Clasificación Rápida: Utiliza incrustaciones estáticas eficientes de Model2Vec
  • 10 Categorías Predeterminadas: Tecnología, negocios, salud, deportes, entretenimiento, política, ciencia, educación, viajes, comida
  • Categorías Personalizadas: Agrega tus propias categorías con descripciones
  • Procesamiento por Lotes: Clasifica múltiples textos a la vez
  • Puntos de Acceso de Recursos: Accede a listas de categorías e información del modelo
  • Plantillas de Prompt: Prompts integrados para tareas de clasificación

📋 Instalación

Requisitos Previos

  • Python 3.10+
  • uv gestor de paquetes

Configuración Rápida

No se necesita un paso de instalación separado — las dependencias se declaran en línea en el script (PEP 723) y se resuelven automáticamente por uv.

🏃‍♂️ Ejecutando el Servidor

Transporte Stdio (Predeterminado)

uv run text_classifier_server.py

Transporte HTTP/SSE

# SSE on default port 8000
uv run text_classifier_server.py --http

# SSE on custom port
uv run text_classifier_server.py --http 9000

Transporte HTTP Streamable

uv run text_classifier_server.py --streamable-http

🔧 Configuración

Para Claude Desktop

Transporte Stdio (Local)

Agregar a ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "text-classifier": {
      "command": "uv",
      "args": ["run", "/path/to/text_classifier_server.py"]
    }
  }
}

Transporte HTTP (Remoto)

Inicia el servidor con uv run text_classifier_server.py --http, luego agrega:

{
  "mcpServers": {
    "text-classifier": {
      "url": "http://localhost:8000/sse"
    }
  }
}

Para Claude Code

claude mcp add text-classifier -- uv run /Users/olivier/DEV/mcp-text-classifier/text_classifier_server.py

🛠️ Herramientas Disponibles

classify_text

Clasifica un texto individual en categorías predefinidas con puntuaciones de confianza.

Parámetros:

  • text (cadena): El texto a clasificar
  • top_k (entero, opcional): Número de categorías principales a devolver (predeterminado: 3)

Devuelve: JSON con predicciones, puntuaciones de confianza y descripciones de categorías

Ejemplo:

classify_text("Apple announced new AI features", top_k=3)

batch_classify

Clasifica múltiples textos simultáneamente para un procesamiento eficiente.

Parámetros:

  • texts (lista): Lista de textos a clasificar
  • top_k (entero, opcional): Número de categorías principales por texto (predeterminado: 1)

Devuelve: JSON con resultados de clasificación por lotes

Ejemplo:

batch_classify(["Tech news", "Sports update", "Business report"], top_k=2)

add_custom_category

Agrega una nueva categoría personalizada para clasificación.

Parámetros:

  • category_name (cadena): Nombre de la nueva categoría
  • description (cadena): Descripción para generar la incrustación de la categoría

Devuelve: JSON con el resultado de la operación

Ejemplo:

add_custom_category("automotive", "Cars, vehicles, transportation, automotive industry")

batch_add_custom_categories

Agrega múltiples categorías personalizadas en una sola operación para mayor eficiencia.

Parámetros:

  • categories_data (lista): Lista de diccionarios con claves 'name' y 'description'

Devuelve: JSON con resultados de operación por lotes

Ejemplo:

batch_add_custom_categories([
    {"name": "automotive", "description": "Cars, vehicles, transportation"},
    {"name": "music", "description": "Music, songs, artists, albums, concerts"}
])

list_categories

Lista todas las categorías disponibles y sus descripciones.

Parámetros: Ninguno

Devuelve: JSON con todas las categorías y sus descripciones

remove_categories

Elimina una o múltiples categorías del sistema de clasificación.

Parámetros:

  • category_names (lista): Lista de nombres de categorías a eliminar

Devuelve: JSON con resultados de eliminación para cada categoría

Ejemplo:

remove_categories(["automotive", "custom_category"])

📚 Recursos Disponibles

  • categories://list: Obtener lista de categorías disponibles con metadatos
  • model://info: Obtener información sobre el modelo Model2Vec cargado y el estado del sistema

💬 Prompts Disponibles

  • classification_prompt: Plantilla para tareas de clasificación de texto con contexto e instrucciones

Parámetros:

  • text (cadena): El texto a clasificar

Devuelve: Prompt formateado para clasificación con categorías disponibles listadas

🧪 Pruebas

Probar con MCP Inspector

npx @modelcontextprotocol/inspector uv run text_classifier_server.py

🔍 Solución de Problemas

La descarga del modelo falla

# Manual model download
uv run python -c "from model2vec import StaticModel; StaticModel.from_pretrained('minishlab/potion-base-8M')"

📖 Detalles Técnicos

  • Modelo: minishlab/potion-base-8M de Model2Vec
  • Similitud: Similitud coseno entre incrustaciones de texto y categorías
  • Rendimiento: Modelo de ~30MB, inferencia rápida con incrustaciones estáticas
  • Protocolo: Especificación MCP 2024-11-05
  • Transportes: stdio, HTTP+SSE, HTTP Streamable

🤝 Contribuciones

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. Agrega pruebas para la nueva funcionalidad
  4. Envía una solicitud de extracción

📄 Licencia

Licencia MIT - consulta el archivo LICENSE para más detalles.

🙏 Agradecimientos

  • Model2Vec de Minish Lab por las incrustaciones estáticas rápidas
  • Anthropic por la especificación del Protocolo de Contexto de Modelo
  • FastMCP por el excelente framework MCP de Python

¿Necesitas ayuda? Consulta la sección de solución de problemas o abre un problema en el repositorio.