archivo pytrhon y mcp creados

This commit is contained in:
2025-10-21 21:04:40 +02:00
parent b1992c0753
commit 009b1975dc
5 changed files with 1286 additions and 1 deletions
+135
View File
@@ -0,0 +1,135 @@
# 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()