Files
kanboard/kanboard_mcp.py
T

136 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# kanboard_mcp.py
"""
Servidor FastMCP para controlar Kanboard desde un LLM.
Este módulo expone las funciones del paquete `kanboard_utils`
como herramientas del protocolo MCP (Model Context Protocol),
permitiendo a modelos de lenguaje (LLMs) listar, crear, mover
y editar tareas en Kanboard de forma segura y programática.
Requisitos:
uv add fastmcp requests
"""
from fastmcp import FastMCP
from kanboard_utils import (
listar_proyectos,
listar_usuarios,
listar_tareas,
listar_subtareas,
listar_tareas_por_columna,
mover_tarea_columna,
crear_tarea,
editar_tarea,
)
# Instancia principal del servidor MCP
mcp = FastMCP("Kanboard Controller", instructions="""
Controlador MCP para Kanboard que permite a un LLM gestionar tareas,
proyectos y usuarios de un tablero Kanboard mediante JSON-RPC.
""")
# === Herramientas expuestas ===
@mcp.tool
def list_projects(api_url: str, usuario: str, token: str) -> list[dict]:
"""
📁 Listar todos los proyectos de Kanboard.
Permite recuperar todos los proyectos accesibles para un usuario.
Ideal para que el modelo entienda qué tableros existen antes de operar.
Parámetros:
api_url (str): URL del endpoint JSON-RPC, por ejemplo http://localhost:8080/jsonrpc.php
usuario (str): Nombre de usuario con permisos API
token (str): Token de autenticación
Retorna:
list[dict]: Proyectos con campos como 'id', 'name', 'identifier', etc.
"""
return listar_proyectos(api_url, usuario, token)
@mcp.tool
def list_users(api_url: str, usuario: str, token: str) -> list[dict]:
"""
👥 Listar todos los usuarios disponibles en Kanboard.
Devuelve la lista de usuarios con sus IDs, nombres y nombres de usuario.
"""
return listar_usuarios(api_url, usuario, token)
@mcp.tool
def list_tasks(api_url: str, usuario: str, token: str, project_id: int) -> list[dict]:
"""
🗂️ Listar todas las tareas de un proyecto.
Permite a un LLM inspeccionar las tareas dentro de un proyecto específico.
"""
return listar_tareas(api_url, usuario, token, project_id)
@mcp.tool
def list_subtasks(api_url: str, usuario: str, token: str, task_id: int) -> list[dict]:
"""
📋 Listar las subtareas de una tarea específica.
Útil para analizar el desglose de una tarea compleja.
"""
return listar_subtareas(api_url, usuario, token, task_id)
@mcp.tool
def list_tasks_by_column(api_url: str, usuario: str, token: str, project_id: int) -> dict:
"""
🧩 Agrupa las tareas por columna del tablero Kanboard.
Permite al modelo entender la estructura actual del flujo de trabajo.
"""
return listar_tareas_por_columna(api_url, usuario, token, project_id)
@mcp.tool
def move_task(api_url: str, usuario: str, token: str, project_id: int,
task_id: int, column_id: int, position: int = 1, swimlane_id: int = 0) -> bool:
"""
🔄 Mover una tarea entre columnas del tablero.
Permite cambiar el estado de una tarea dentro del flujo de trabajo (por ejemplo, de "To Do" a "En progreso").
"""
return mover_tarea_columna(api_url, usuario, token, project_id, task_id, column_id, position, swimlane_id)
@mcp.tool
def create_task(api_url: str, usuario: str, token: str, project_id: int, titulo: str,
descripcion: str = "", swimlane_id: int | None = None, assignee_id: int | None = None,
tags: list[str] | None = None, priority: int | None = None) -> dict:
"""
Crear una nueva tarea en un proyecto Kanboard.
Ideal para automatizar la creación de tickets desde prompts naturales.
"""
return crear_tarea(api_url, usuario, token, project_id, titulo, descripcion,
swimlane_id, assignee_id, tags, priority)
@mcp.tool
def edit_task(api_url: str, usuario: str, token: str, task_id: int,
titulo: str | None = None, descripcion: str | None = None,
swimlane_id: int | None = None, assignee_id: int | None = None,
tags: list[str] | None = None, priority: int | None = None) -> dict:
"""
✏️ Editar una tarea existente en Kanboard.
Actualiza campos específicos sin alterar los demás.
Permite editar título, descripción, prioridad o etiquetas.
"""
return editar_tarea(api_url, usuario, token, task_id, titulo, descripcion,
swimlane_id, assignee_id, tags, priority)
# === Punto de entrada del servidor ===
if __name__ == "__main__":
mcp.run()