Skip to main content
Glama

Taiga MCP Server

CI npm version Node.js License MCP

Servidor de Model Context Protocol (MCP) para la gestión de proyectos de Taiga, escrito en TypeScript y construido sobre el Model Context Protocol SDK con transporte stdio (con un transporte HTTP transmisible opcional para clientes remotos y web). Conecta clientes LLM a instancias de Taiga para inspeccionar y gestionar proyectos, elementos de trabajo (incidencias, historias de usuario, tareas, épicas), sprints, comentarios, adjuntos y páginas de wiki.

El servidor concentra todas sus capacidades en 6 herramientas de despacho de operaciones diseñadas para un coste mínimo de tokens y respuestas de texto densas, legibles tanto por humanos como por LLM.

Contenido

Related MCP server: @illodev/taiga-mcp

Características

  • Seis herramientas, veintiocho pares de operaciones en proyectos, elementos de trabajo, sprints, comentarios, adjuntos y páginas wiki; toda la carga útil de tools/list es de ~10,493 caracteres (~2,800 tokens).

  • Identificadores sencillos en todas partes: proyectos por ID o slug, elementos de trabajo por ID de base de datos o #reference, miembros por ID, nombre de usuario, nombre completo o "me"; estados, prioridades, severidades, tipos de incidencia y nombres de sprint se resuelven en el servidor.

  • Salida de texto densa: una línea por registro en los listados y vistas de detalle limpias tipo clave-valor; las colecciones vacías se comunican como datos, no como errores.

  • Creación en lote de hasta 20 elementos de trabajo en una sola llamada; los borrados son deliberadamente de un solo elemento.

  • Fiabilidad reforzada: reintentos por límite de peticiones con respeto por Retry-After, tiempos de espera HTTP de 30 segundos, caché de metadatos de 60 segundos y ningún reenvío automático ante errores 5xx (las solicitudes mutantes pueden haberse aplicado).

  • Seguridad de adjuntos: descargas restringidas a nombres de host concretos, límite de 10 MB, protección frente a sobrescritura y no se envía el token portador a los hosts de medios.

  • Doble transporte: stdio por defecto; HTTP transmutable en bucle local cuando TAIGA_HTTP_PORT está definido.

Requisitos y configuración

  • Node.js >= 20.11

  • Una cuenta de Taiga en taiga.io o una instancia de Taiga autoalojada

  • Las tres variables de entorno siguientes:

Variable

Descripción

Predeterminado

TAIGA_API_URL

URL base de la API REST de Taiga (debe incluir /api/v1)

https://api.taiga.io/api/v1

TAIGA_USERNAME

Nombre de usuario o correo electrónico de Taiga

Necesaria

TAIGA_PASSWORD

Contraseña de la cuenta de Taiga

Necesaria

Variables de transporte opcionales:

Variable

Descripción

Predeterminado

TAIGA_HTTP_PORT

Si se define, ofrece MCP sobre HTTP transmutable en lugar de stdio

(sin definir: stdio)

TAIGA_HTTP_HOST

Host de enlace para el transporte HTTP

127.0.0.1

Inicio rápido

La forma más rápida es Claude Desktop con npx (sin necesidad de clonar nada):

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Todas las configuraciones de integración que vienen a continuación siguen esta misma estructura; solo cambia la ubicación del archivo y la sintaxis del contenedor.

Credenciales y .env: un checkout local carga automáticamente el .env de la raíz del repositorio (consulta .env.example). La instalación con npx no lo hace: dotenv resuelve las rutas relative a la ubicación de instalación del paquete dentro de la caché de npm, por lo que las credenciales pasadas mediante npx deben indicarse en el bloque de env de cada integración, como se muestra arriba.

Ejecutar desde el checkout local

git clone https://github.com/negoro26/mcp-taiga.git
cd mcp-taiga && npm ci && npm run build
cp .env.example .env   # fill in TAIGA_USERNAME / TAIGA_PASSWORD

Después apunta cualquier integración al punto de entrada compilado en lugar de a npx:

{
  "mcpServers": {
    "taiga": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-taiga/dist/src/index.js"]
    }
  }
}

Aquí no hace falta bloque env: el servidor carga su propio .env desde la raíz del repositorio. Este repositorio también incluye un .mcp.json listo para usar, de modo que los agentes de codificación abiertos dentro del checkout pueden usar la compilación local directamente.

Instalación y configuración

Configuración por integración con el paquete npm publicado. Cada fragmento pasa las credenciales en env vars; usa tus propios valores.

Claude Code

Ámbito de proyecto (dentro del repositorio, compartido con el equipo):

// .mcp.json at repository root
{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

O desde la CLI (ámbito de usuario con -s user; ámbito local por defecto):

claude mcp add taiga \
  -e TAIGA_USERNAME=your_username \
  -e TAIGA_PASSWORD=your_password \
  -- npx -y mcp-taiga

Compruébalo con claude mcp list o con /mcp dentro de una sesión.

Claude Desktop

Edita el archivo de configuración — claude_desktop_config.json mediante Claude Desktop → Configuración → Desarrollador → Editar configuración, situado en %APPDATA%\Claude\claude_desktop_config.json en Windows o en ~/Library/Application Support/Claude/claude_desktop_config.json en macOS — y reinicia la aplicación de escritorio:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

En Windows, ejecuta npx mediante cmd /c si la forma directa falla: "command": "cmd", "args": ["/c", "npx", "-y", "mcp-taiga"].

VS Code y GitHub Copilot

VS Code admite servidores MCP de forma nativa (1.99+); Copilot Chat los recoge automáticamente.

// .vscode/mcp.json (workspace) or use Command Palette: "MCP: Add Server"
{
  "servers": {
    "taiga": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Puedes iniciarlos desde la vista de extensiones (mcp.json muestra un botón de Start) o ejecutar MCP: Listar servidores en la Paleta de comandos. Las entradas pueden referenciar secretos con el campo "inputs" en lugar de escribir contraseñas en duro.

Cursor

Mediante CLI (espejo de la interfaz de Claude Code):

cursor mcp add taiga -e TAIGA_USERNAME=your_username -e TAIGA_PASSWORD=your_password -- npx -y mcp-taiga

O edita ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Activa el servidor en Configuración de Cursor → MCP e integraciones si no se activa inmediatamente.

Windsurf

Edita ~/.codeium/windsurf/mcp_config.json (o Configuración de Windsurf → Cascade → Servidores MCP → Gestionar MCP → Ver configuración en crudo) y actualiza el panel de MCP después:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Cline, Roo Code y Kilo Code

Las tres extensiones de VS Code usan un archivo de configuración JSON equivalente, editable desde el panel de Servidores MCP de cada extensión (haz clic en el icono del lápiz para abrir el archivo original):

Extensión

Archivo de configuración (rutas de Linux; macOS usa ~/Library/Application Support/Code/User/..., Windows %APPDATA%\Code\User\...)

Cline

~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

Roo Code

~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json

Kilo Code

~/.config/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json

Añade el servidor dentro del objeto "mcpServers" de nivel superior:

{
  "mcpServers": {
    "taiga": {
      "disabled": false,
      "timeout": 60,
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Cuando la extensión lo pida, aprueba el uso de las herramientas del servidor; la aprobación automática por herramienta se puede configurar en el mismo panel.

Continue.dev

Continue lee los servidores MCP desde bloques mcpServers: de su configuración o desde archivos YAML independientes en .continue/mcpServers/ (también acepta configuraciones JSON de Claude, Cursor o Cline colocadas sin cambios en ese directorio):

# ~/.continue/config.yaml (or .continue/mcpServers/taiga.yaml with
# name/version/schema metadata fields added)
name: Assistant
version: 1.0.0
schema: v1
mcpServers:
  - name: Taiga
    type: stdio
    command: npx
    args:
      - -y
      - mcp-taiga
    env:
      TAIGA_USERNAME: your_username
      TAIGA_PASSWORD: your_password

Las herramientas MCP están disponibles en modo agente.

Zed

Añade un servidor de contexto personalizado en settings.json (Zed → Abrir ajustes):

{
  "context_servers": {
    "taiga": {
      "command": {
        "path": "npx",
        "args": ["-y", "mcp-taiga"],
        "env": {
          "TAIGA_USERNAME": "your_username",
          "TAIGA_PASSWORD": "your_password"
        }
      }
    }
  }
}

Entornos JetBrains

Abre Configuración → Herramientas → AI Assistant → MCP (o la página dedicada de ajustes de MCP en versiones recientes), haz clic en Añadir, elige Como JSON y pégalo:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Es necesario el plugin AI Assistant con la opción de MCP habilitada.

Gemini CLI

Edita ~/.gemini/settings.json y reinicia la CLI. Para cada uso de una herramienta se pedirá confirmación, a menos que las añadas a la lista de permitidas:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      },
      "includeTools": ["projects", "work", "sprints", "comments", "attachments", "wiki"]
    }
  }
}

Comprueba el registro con /mcp list dentro de la CLI.

Codex CLI

Añade una tabla de servidores en ~/.codex/config.toml:

[mcp_servers.taiga]
command = "npx"
args = ["-y", "mcp-taiga"]

[mcp_servers.taiga.env]
TAIGA_USERNAME = "your_username"
TAIGA_PASSWORD = "your_password"

Verifica con codex mcp list; las herramientas aparecen como taiga_* en las sesiones.

opencode

Añádelo a opencode.json (raíz del proyecto o ~/.config/opencode/opencode.json):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "taiga": {
      "type": "local",
      "command": ["npx", "-y", "mcp-taiga"],
      "environment": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      },
      "enabled": true
    }
  }
}

Observa la clave singular environment y la forma de array para command, que difieren del esquema exclusivo de Claude.

Amp

Prefiere la CLI para los servidores de ámbito de usuario:

amp mcp add taiga -- npx -y mcp-taiga

O declara amp.mcpServers en ~/.config/amp/settings.json (las variantes de workspace .amp/settings.json requieren ejecutar antes amp mcp approve taiga):

{
  "amp.mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Pi

Pi lee su configuración MCP de Claude desde dos ámbitos: ~/.pi/agent/mcp.json (usuario) y .mcp.json o mcp.json en el directorio de trabajo (proyecto). Edita el archivo de usuario:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Los servidores remotos usan "url" más "transport": "http". Gestiona los servidores con /mcp dentro de una sesión (/mcp add, /mcp list, activar y desactivar por servidor).

Este repositorio incluye su propio .mcp.json, de modo que abrir pi dentro del checkout local toma la compilación local exterior automáticamente (no hacen falta credenciales ahí — el servidor de carga el .env del repo).

Oh My Pi

Aunque comparte el núcleo de agente con pi, omp tiene su propia raíz de configuración. Edita ~/.omp/agent/mcp.json:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Los servidores MCP se conectan cuando la sesión se crea — reinicia omp después de editarlo. Las herramientas aparecen como taiga_*; los ajustes a nivel de proyecto siguen el descubrimiento de pi (incluido el .mcp.json caute del repo).

Clientes remotos y web (transporte HTTP)

Define TAIGA_HTTP_PORT para exponer esas mismas seis herramientas sobre HTTP transmutable, sin lugar a stdio — útil para clientes que no puedan lanzar procesos locales, o para ejecutar una única instancia compartida:

TAIGA_HTTP_PORT=3000 npx -y mcp-taiga
# serves http://127.0.0.1:3000/mcp

Propiedades: modo sin sesión (sin cabeceras de sesión), vinculado a 127.0.0.1; se puede anular con TAIGA_HTTP_HOST (si usas una IP que no sea de bucle local, se imprime una advertencia por «HTTP de texto plano» en stderr), protección frente a rebind intrínsecamente habilitada para el host anunciado, JSON malformado rechazado con -32700, y cualquier método no POST en /mcp se contesta con 405.

Los clientes se conectan por URL en lugar de por comando:

{
  "mcpServers": {
    "taiga": {
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

Equivalente en Continue.dev: type: streamable-http con url:; opencode: type: "remote" con url:. Como el proceso se lanza manualmente en lugar de serlo por el cliente, exporta TAIGA_USERNAME/TAIGA_PASSWORD en esa shell (o usa una unidad systemd, un contenedor, etc.).

Contenedores

El Dockerfile incluido en dos etapas utiliza Node 20 Alpine con un usuario node no root. La etapa de compilación parte del fuente TypeScript, y la etapa de runtime solo empaqueta la salida de dist/src compilada y las dependencias de producción.

Construye la imagen:

docker build -t mcp-taiga .

Rodéalo el contenedor conectado a la entrada/salida estándar:

docker run --rm -i --env-file .env mcp-taiga

Podman funciona por simple sustitución: remplaza docker por podman en los comandos de arriba.

Apunta una configuración de cliente MCP al runner del contenedor:

{
  "mcpServers": {
    "taiga": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "--env-file", "/absolute/path/to/.env", "mcp-taiga"]
    }
  }
}

Para un despliegue mediante HTTP, publica el puerto en alternativa: docker run --rm -p 127.0.0.1:3000:3000 -e TAIGA_HTTP_PORT=3000 --env-file .env mcp-taiga y los clientes basados en URL deben dirigirse a http://127.0.0.1:3000/mcp.# Taiga MCP Server

CI npm version Node.js License MCP

Servidor de Model Context Protocol (MCP) para la gestión de proyectos de Taiga, escrito en TypeScript y construido sobre el Model Context Protocol SDK con transporte stdio (y un transporte HTTP transmisible opcional para clientes remotos y web). Conecta clientes LLM a instancias de Taiga para inspeccionar y gestionar proyectos, elementos de trabajo (incidencias, historias de usuario, tareas, épicas), sprints, comentarios, adjuntos y páginas wiki.

El servidor agrupa todas sus capacidades en 6 herramientas de despacho de operaciones, diseñadas para un consumo mínimo de tokens y respuestas de texto densas y legibles tanto para humanos como para modelos LLM.

Contenido

Características

  • Seis herramientas, veintiocho operaciones (pares de op) entre proyectos, elementos de trabajo, sprints, comentarios, adjuntos y páginas wiki; la carga útil completa de tools/list es de ~10,493 caracteres (~2,800 tokens).

  • Identificadores legibles en todo: proyectos por ID o slug, elementos de rebaja por ID de base de datos o #reference, miembros por ID, nombre de usuario, nombre completo o "me"; estados, prioridades, severidades, tipos de incidencia y nombres de sprint se resuelven en el servidor.

  • Texto denso: una línea por registro en las listas, vistas de detalle claras de tipo clave-valor; colecciones vacías se informan como datos, no como errores.

  • Creación masiva de hasta 20 elementos de trabajo en una sola llamada; los borrados son deliberadamente de un solo objetivo.

  • Guardabarros de fiabilidad: reintentos de límite de velocidad respetando Retry-After en segundos, tiempo de espera HTTP de 30 segundos, una caché de metadatos de 60 segundos y sin reintentos automáticos de errores 5xx (las peticiones mutadoras podrían haber llegado sin servidor).

  • Seguridad de adjuntos: descargas ancladas al host, límite de 10 MB, protección ante sobreescritura y no se envía el token portador a los servidores de medios.

  • **Video}; Doble transporte: stdio por defecto; HTTP de flujo a loopback cuando se define TAIGA_HTTP_PORT.

Requisitos y configuración

  • Node.js >= 20.11

  • Una cuenta de Taiga en taiga.io o unha instancia de Taiga autoalojada

  • Estas tres variables de entorno:

Variable

Descripción

Por defecto

TAIGA_API_URL

URL base de la API REST de Taiga (debe incluir /api/v1)

https://api.taiga.io/api/v1

TAIGA_USERNAME

Usuario o email de Taiga

Obligado

TAIGA_PASSWORD

Contraseña de la cuenta de Taiga

Obligado

Opcionales para el transporte:

Variable

Descripción

Por defecto

TAIGA_HTTP_PORT

Si se define, usar HTTP en lugar de stdio

(sin definir: stdio)

TAIGA_HTTP_HOST

Host donde escuchará el transporte HTTP

127.0.0.1

Inicio rápido

La configuración más rápida es Claude Desktop con npx (no requiere instalación local):

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Todas las configuraciones de los distintos integradores que viene a continuación siguen este esquema; solo cambian la ruta del archivo y la sintaxis de su invocador.

Credenciales y .env: un checkout local carga automáticamente el .env de la raíz del repositorio (consulta .env.example). Una instalación por npx no: dotenv se resuelve relativo a la ubicación de instalación dentro de la caché de npm, así que las credenciales pasadas por npx SIEMPRE deben definirse en el bloque env de cada integración, como se muestra arriba.

Ejecutar desde un checkout local

git clone https://github.com/negoro26/mcp-taiga.git
cd mcp-taiga && npm ci && npm run build
cp .env.example .env   # fill in TAIGA_USERNAME / TAIGA_PASSWORD

Luego apunta cualquier integración al punto de entrada compilado en lugar de npx:

{
  "mcpServers": {
    "taiga": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-taiga/dist/src/index.js"]
    }
  }
}

Aquí no es necesario un bloque env: el servidor carga su .env de la raíz del repositorio. Este repositorio también incluye un .mcp.json ya preparado para que los agentes de código ejecutados en el checkout usen directamente la compilación local.

Instalación y configuración

Las siguientes configuraciones usan el paquete publicado en npm. Cada fragmento incluye credenciales de forma directa; reemplázalas por tus valores reales.

Claude Code

Ámbito de proyecto (guardado en el repo y compartido con tu equipo):

// .mcp.json at repository root
{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

O añade desde la CLI (ámbito de usuario con -s user, ámbito local por defecto):

claude mcp add taiga \
  -e TAIGA_USERNAME=your_username \
  -e TAIGA_PASSWORD=your_password \
  -- npx -y mcp-taiga

Verifícalo con claude mcp list o /mcp con /mcp.

Claude Desktop

Edita el archivo de configuración — claude_desktop_config.json a través de Claude Desktop → Configuración → Developer → Editar configuración, situado en %APPDATA%\Claude\claude_desktop_config.json en Windows o en ~/Library/Application Support/Claude/claude_desktop_config.json en macOS — y reinicia la aplicación de escritorio:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

En Windows, usa cmd /c si la forma directa falla: "command": "cmd", "args": ["/c", "npx", "-y", "mcp-taiga"].

VS Code y GitHub Copilot

VS Code admite servidores MCP de forma nativa (1.99+); Copilot Chat los reconoce automáticamente.

// .vscode/mcp.json (workspace) or use Command Palette: "MCP: Add Server"
{
  "servers": {
    "taiga": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Inícialo desde la vista de Extensiones (mcp.json muestra un botón Iniciar) o ejecuta MCP: Listar Servidores en la Paleta de comandos. Los valores pueden referenciar secretos con el campo "inputs" en lugar de codificar contraseñas en el archivo.

Cursor

Mediante CLI (espejo de Claude Code):

cursor mcp add taiga -e TAIGA_USERNAME=your_username -e TAIGA_PASSWORD=your_password -- npx -y mcp-taiga

O edita ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Si no se activa automáticamente, actívalo en Cursor Settings → MCP & Integrations.

Windsurf

Edita ~/.codeium/windsurf/mcp_config.json (o Windsurf Settings → Cascade → MCP Servers → Manage MCPs → View Raw Config) y actualiza el panel MCP:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Cline, Roo Code y Kilo Code

Las tres extensiones de VS Code usan un archivo de configuración JSON equivalente; se edita desde el panel de servidores MCP de cada extensión (icono de lápiz para abrir el archivo en bruto):

Extensión

Archivo de configuración (rutas de Linux; macOS usa ~/Library/Application Support/Code/User/..., Windows %APPDATA%\Code\User\...)

Cline

~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

Roo Code

~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json

Kilo Code

~/.config/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json

Agrega el servidor dentro del objeto superior "mcpServers":

{
  "mcpServers": {
    "taiga": {
      "disabled": false,
      "timeout": 60,
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Confirma el uso de herramientas cuando la extensión te lo pregunte; la aprobación automática por herramienta se puede configurar en el mismo panel.

Continue.dev

Continue lee los servidores MCP de bloques mcpServers: de su configuración o desde archivos YAML independientes en .continue/mcpServers/ (también acepta configuraciones de Claude, Cursor o Clines en JSON sin cambios):

# ~/.continue/config.yaml (or .continue/mcpServers/taiga.yaml with
# name/version/schema metadata fields added)
name: Assistant
version: 1.0.0
schema: v1
mcpServers:
  - name: Taiga
    type: stdio
    command: npx
    args:
      - -y
      - mcp-taiga
    env:
      TAIGA_USERNAME: your_username
      TAIGA_PASSWORD: your_password

Las herramientas MCP están disponibles en el modo agente.

Zed

Añade un servidor de contexto personalizado en settings.json (zed: open settings):

{
  "context_servers": {
    "taiga": {
      "command": {
        "path": "npx",
        "args": ["-y", "mcp-taiga"],
        "env": {
          "TAIGA_USERNAME": "your_username",
          "TAIGA_PASSWORD": "your_password"
        }
      }
    }
  }
}

JetBrains IDEs

Abre Settings → Tools → AI Assistant → MCP (o la página de servidores MCP dedicada en versiones recientes), haz clic en Añadir, elige Como JSON y pega:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Requiere el plugin de AI Assistant con compatibilidad con MCP habilitada.

Gemini CLI

Edita ~/.gemini/settings.json e inicia de nuevo la CLI. Las herramientas exigen confirmación en cada llamada a menos que las añadas a la lista blanca:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      },
      "includeTools": ["projects", "work", "sprints", "comments", "attachments", "wiki"]
    }
  }
}

Comprueba el registro con /mcp list dentro de la CLI.

Codex CLI

Añade una tabla de servidores a ~/.codex/config.toml:

[mcp_servers.taiga]
command = "npx"
args = ["-y", "mcp-taiga"]

[mcp_servers.taiga.env]
TAIGA_USERNAME = "your_username"
TAIGA_PASSWORD = "your_password"

Verifíca con codex mcp list; dentro de los sesiones las herramientas se llaman taiga_*.

opencode

Agrega a opencode.json (raíz del proyecto o ~/.config/opencode/opencode.json):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "taiga": {
      "type": "local",
      "command": ["npx", "-y", "mcp-taiga"],
      "environment": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      },
      "enabled": true
    }
  }
}

Observa que la clave es singular environment y command va en forma de array, a diferencia del esquema estilo Claude.

Amp

Es mejor usar la CLI para los servidores de ámbito de usuario:

amp mcp add taiga -- npx -y mcp-taiga

O define amp.mcpServers en ~/.config/amp/settings.json (las variantes de workspace .amp/settings.json requieren ejecutar amp mcp approve taiga antes):

{
  "amp.mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Pi

Pi lee su configuración MCP estilo Claude en dos ámbitos: ~/.pi/agent/mcp.json (usuario) y .mcp.json o mcp.json en el directorio de trabajo (proyecto). Edita el archivo de usuario:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Los servidores remotos usan "url" más "transport": "http". Gestiona los servidores con /mcp dentro de una sesión (/mcp add, /mcp list, habilitar/deshabilitar por servidor).

Este repositorio incluye su propia .mcp.json, así que iniciar Pi dentro de un checkout local usará automáticamente la compilación local (no necesita credenciales: el servidor lee su .env).

Oh My Pi

omp comparte el núcleo del agente con Pi pero tiene su propio directorio de configuración. Edita ~/.omp/agent/mcp.json:

{
  "mcpServers": {
    "taiga": {
      "command": "npx",
      "args": ["-y", "mcp-taiga"],
      "env": {
        "TAIGA_USERNAME": "your_username",
        "TAIGA_PASSWORD": "your_password"
      }
    }
  }
}

Los servidores MCP se conectan cuando se construye la sesión; reinicia omp después de editar. Las herramientas aparecen como taiga_*; las configuraciones de proyecto siguen la detección de Pi (incluido el .mcp.json versionado de este repo).

Clientes remotos y web (transporte HTTP)

Definiendo TAIGA_HTTP_PORT se exponen las mismas seis herramientas sobre HTTP Transmisible en lugar de stdio — útil para clientes que no pueden iniciar procesos locales, o para ejecutar una única instancia compartida:

TAIGA_HTTP_PORT=3000 npx -y mcp-taiga
# serves http://127.0.0.1:3000/mcp

Propiedades: modo sin estado (sin encabezados de sesión), escucha en 127.0.0.1 salvo que se sobreescriba TAIGA_HTTP_HOST (los non-loopback escriben una advertencia de HTTP en texto plano en stderr), protección de DNS rebinding activa para el host anunciado, JSON inválido rechazado con -32700, y los métodos no POST en /mcp devuelven 405.

Los clientes se conectan por URL, no por comando:

{
  "mcpServers": {
    "taiga": {
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

Equivalente en Continue.dev: type: streamable-http con url:; en opencode: type: "remote" con url:. Como el proceso se lanza manualmente y no por el cliente, define TAIGA_USERNAME y TAIGA_PASSWORD en ese shell (o usa un unit de systemd, un contenedor, etc.).

Contenedores

El Dockerfile de dos etapas incluido usa Node 20 Alpine con un usuario node no root. La etapa de build compila el TypeScript y la etapa de runtime empaqueta solo de dist/src y las dependencias de producción.

Construye la imagen:

docker build -t mcp-taiga .

Ejecuta el contenedor adjuntado a la entrada/salida estándar:

docker run --rm -i --env-file .env mcp-taiga

Podman funciona con la misma sustitución directa: reemplaza docker por podman en los comandos anteriores.

Apunta tu configuración de cliente MCP al corredor del contenedor:

{
  "mcpServers": {
    "taiga": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "--env-file", "/absolute/path/to/.env", "mcp-taiga"]
    }
  }
}

Para un despliegue HTTP, publica el puerto en sustituto: docker run --rm -p 127.0.0.1:3000:3000 -e TAIGA_HTTP_PORT=3000 --env-file .env mcp-taiga, y apunta los clientes tipo URL a http://127.0.0.1:3000/mcp.

Deliberadamente no hay un archivo de compose. Un servidor MCP stdio debe lanzarse adjuntado directamente a los flujos stdin y stdout de su cliente, y termina cuando ese flujo stdin se cierra. Los supervisores de procesos o las configuraciones de compose que intentan mantener servicios en segundo plano de larga duración provocan bucles de reinicio infinitos y conflictos de nombres de contenedores.

Convenciones

  • Projects: Los argumentos de proyecto aceptan un ID de proyecto numérico (p. ej. 19) o un slug (p. ej. "acme-web").

  • Work Items: Los elementos de trabajo aceptan un ID numérico de base de datos (p. ej. 1888) o una referencia con prefijo de almohadilla (p. ej. "#70"). Una #reference requiere el argumento project para resolverse.

  • People: Los argumentos de miembro aceptan un ID numérico de usuario, un nombre de usuario (p. ej. "jdoe"), un nombre completo (p. ej. "Jane Doe") o el literal "me".

  • Taxonomies: Los estados, prioridades, gravedades, tipos de incidencia y nombres de sprint aceptan nombres legibles para humanos y se resuelven en IDs numéricos en el servidor.

  • Multi-Assignee User Stories: Las historias de usuario de Taiga admiten múltiples asignados mediante assigned_users. El filtrado por assignee en work list type:story coincide con los coasignados, y los listados muestran todos los asignados y no solo el principal.

  • Dense Text Results: Los resultados se muestran como texto plano, formateado con una línea densa por registro o bloques limpios de clave-valor para las vistas de detalle. Ningún consumidor lee structuredContent, por lo que los resultados son solo texto. Una colección vacía se informa como <items> in <project>: 0 en lugar de un error.

  • Full Collections: Los endpoints de listado devuelven colecciones completas porque el cliente envía la cabecera de solicitud x-disable-pagination: true, eliminando así los viajes de ida y vuelta de varias páginas.

Por qué seis herramientas

La proliferación de herramientas de propósito único provoca una sobrecarga considerable en la ventana de contexto antes de invocar cualquier herramienta. Consolidar la funcionalidad en seis herramientas de dominio operadas por despacho (op) mantiene la carga útil de tools/list en unas 10.493 caracteres (~2.800 tokens).

Los esquemas de salida se omiten deliberadamente en los registros de herramientas: los puentes de clientes MCP concatenan el contenido de texto e ignoran outputSchema y structuredContent, por lo que omitir los esquemas de salida elimina la sobrecarga innecesaria de tokens al inicio de la sesión.

Referencia de tool

El servidor expone 6 herramientas que cubren 28 pares de operaciones.

1. projects

Sirve para listar o inspeccionar proyectos de Taiga y verificar credenciales.

Operación

Qué hace

Argumentos obligatorios

Argumentos opcionales

list

Lista los proyectos en los que el usuario autenticado es miembro

(ninguno)

(ninguno)

get

Inspecciona los metadatos del proyecto, propietario, número de miembros y módulos activos

project

(ninguno)

whoami

Verifica las credenciales y muestra información del usuario actual

(ninguno)

(ninguno)

2. work

Gestion de incidencias, historias de usuario, tareas y épicas (type: issue, story, task, epic).

Operación

Qué hace

Argumentos obligatorios

Argumentos opcionales

list

Lista los elementos de trabajo con filtros en el servidor

type, project

assignee, watcher, sprint, status, tags, closed, q, orderBy, limit, parent (tareas)

get

Obtiene los detalles completos y la descripción de un elemento de trabajo

type, item

project (obligatorio si item es #ref)

create

Crea un único elemento de trabajo o elementos en lote

type, project, subject* *(o itemspara lote; las tareas requierenparent`)*

description, status, assignee, sprint, tags, priority (para incidencias), severity (para incidencias), issueType (para incidencias), points (para historias), parent (épica para historias / por defecto para lote)*, items (máx. 20)

update

Actualiza los campos de un elemento de trabajo existente

type, item

project (obligatorio si item es #ref), subject, description, status, assignee, sprint, tags, priority, severity, issueType, points

link

Vincula una historia de usuario a una épica

type (story), item (historia), parent (épica)

project (obligatorio si item o parent es #ref)

unlink

Elimina la relación de una historia de usuario con una épica

type (story), item (historia), parent (épica)

project (obligatorio si item o parent es #ref)

delete

Elimina permanentemente un elemento de trabajo

type, item

project (obligatorio si item es #ref)

3. sprints

Gestión de sprints (hitos) e inspección de las estadísticas de progreso.

Operación

Qué hacer

Argumentos obligatorios

Argumentos opcionales

list

Lista los sprints de un proyecto

project

(ninguno)

get

Obtiene los detalles de un sprint y las historias de usuario asignadas

sprint

project (obligatorio si sprint es un nombre)

create

Crea un nuevo hito de sprint

project, name

fechaInicio (YYYY-MM-DD), fechaFin (YYYY-MM-DD)

stats

Obtiene las estadísticas de progreso y las métricas de finalización del sprint

sprint

project (obligatorio si sprint es un nombre)

La eliminación de sprints no está expuesta intencionadamente: quitar un hito desvincula todas las historias y tareas de ese hito, lo que constituye una edición de todo el tablero que pertenece a la interfaz de Taiga.

4. comments

Operaciones para listar, añadir, editar o eliminar comentarios en elementos de trabajo y páginas wiki (type: issue, story, task, epic, wiki).

Op

Qué hace

Argumentos obligatorios

Argumentos opcionales

list

Lista los comentarios, del más antiguo al más reciente

type, item

project (obligatorio para #ref o slug de wiki), includeDeleted

add

Añade un comentario a un elemento

type, item, text

project (obligatorio para #ref o slug de wiki)

edit

Edita un comentario existente por UUID

type, item, commentId, text

project (obligatorio para #ref o slug de wiki)

delete

Realiza un borrado lógico (soft-delete) de un comentario por UUID

type, item, commentId

project (obligatorio para #ref o slug de wiki)

5. attachments

Operaciones para gestionar archivos adjuntos en elementos de trabajo y páginas wiki (type: issue, story, task, epic, wiki).

Op

Qué hacer docs

Argumentos obligatorios

Argumentos de cada paso

list

Lista los archivos adjuntos de un elemento

type, item

project (obligatorio para #ref o slug de wiki)

upload

Sube un archivo desde una ruta local o desde base64

type, item, filePath o fileContent

project, fileName, mimeType, description

download

obtiene los metadatos de un adjunto; opcionalmente escribe el archivo en el disco

type, attachmentId

savePath (ruta de destino del archivo descargado)

borrar

Elimina permanentemente un archivo adjunto

type, attachmentId

(ninguno)

6. wiki

Gestión de páginas wiki y suscripciones a páginas wiki dentro de un proyecto.

Op

Qué hacer

Argumentos obligatorios

Argumentos opcionales

list

Lista todas las páginas wiki de un proyecto

project

(ninguno)

get

Obtiene los metadatos de una página wiki y su contenido en Markdown

page (ID o slug)

project (obligatorio si page es un slug)

create

Crea una nueva página wiki

project, page (slug)

content

update

Actualiza el contenido de una página wiki

page (ID o slug), content

project (obligatorio si page es un slug)

delete

Elimina permanentemente una página wiki

page (ID o slug)

project (obligatorio si page es un slug)

watch

Marcar o desmarcar las notificaciones de una página wiki

type (wiki), idPage (ID o slug)

project (obligatorio si page es un slug), watch (booleano; por defecto, si true)

Fiabilidad y sesgo de seguridad

  • Límite de tasa (429): El servidor reintenta las respuestas HTTP 429 como máximo dos veces, respetando el encabezado Retry-After del servidor. Si la espera requerida supera el tope de 5 segundos (MAX_THROTTLE_WAIT_MS), lanza de inmediato un mensaje de reintento en lugar de dormir.

  • Errores 5xx nunca reintentados: Las respuestas 5xx no se reintentan nunca automáticamente porque las solicitudes de mutación (como POST) pueden haber sido aplicadas ya en el servidor; repetirlas puede crear registros duplicados.

  • Caché de metadatos: Los metadatos del proyecto (búsquedas de slug, membresías de usuario y listas de taxonomía para estados, prioridades, severidades y tipos de incidencia) se guardan en caché durante 60 segundos (METADATA_TTL_MS) mediante getMetadata. Los elementos de trabajo, comentarios y adjuntos nunca se guardan en caché.

  • Tiempos de espera: Las solicitudes HTTP aplican un tiempo de espera de 30 segundos (REQUEST_TIMEOUT_MS).

  • Aplicación de HTTPS: El servidor emite una advertencia a stderr si TAIGA_API_URL usa HTTP sin cifrado hacia un host que no sea loopback.

  • Descargas de adjuntos restringidas: Las descargas de adjuntos se limitan estrictamente al hostname de Taiga configurado, sin permitir redirecciones (maxRedirects: 0), y con un límite de tamaño máximo de archivo de 10 MB (MAX_ATTACHMENT_BYTES). La solicitud de descarga no envía el bearer token de Taiga a los hosts de medios.

  • Protección contra sobrescritura de archivos: La descarga de adjuntos con savePath se niega a sobrescribir un archivo local existente.

  • Eliminaciones de un solo objetivo: Las operaciones de eliminación aceptan exactamente un objetivo a la vez. Las operaciones por lotes son solo de creación (hasta 20 elementos), lo que evita eliminaciones accidentales en todo el tablero.

Consideraciones de seguridad

  • Las credenciales viajan mediante variables de entorno o archivos de configuración del harness, nunca mediante argumentos de línea de comandos (que se filtran a través de las listas de procesos) y nunca desde el repositorio. Mantén los archivos de configuración del harness que contengan contraseñas incrustadas fuera del control de versiones; .gitignore ya excluye .env* excepto .env.example.

  • El transporte HTTP opcional se vincula a loopback por defecto y activa la protección contra el rebinding de DNS; vincular a una dirección enrutable imprime una advertencia porque el tráfico no está cifrado.

  • Las descargas de adjuntos nunca transportan un bearer token fuera del hostname de Taiga, rechazan redirecciones, limitan el tamaño del archivo y se niegan a sobrescribir archivos existentes.

  • Las superficies de eliminación son de un solo objetivo por diseño; no hay eliminación en lote.

FAQ

¿Qué clientes MCP pueden usarlo? Cualquier cliente que hable stdio MCP — la guía de instalación cubre diecisiete de ellos con configuraciones listas para copiar y pegar — además de los clientes basados en URL a través del transporte HTTP.

¿Funciona con Taiga autoalojado? Sí. Define TAIGA_API_URL en tu instancia incluyendo el sufijo /api/v1 (por ejemplo, https://taiga.example.com/api/v1). Todo lo demás se comporta igual; si las solicitudes devuelven 404, consulta Solución de problemas.

¿Puedo conectar más de una cuenta o instancia de Taiga? No dentro de un proceso de servidor: contiene exactamente un conjunto de credenciales, leído del entorno al arrancar. Registra entradas adicionales en mcpServers (por ejemplo, "taiga-work") con sus propios valores de env; cada una se convierte en un espacio de nombres de herramientas independiente, como mcp__taiga-work__work.

¿A dónde va mi contraseña? Desde tu bloque de entorno a la memoria, y desde ahí solo al host de Taiga configurado durante el intercambio de login; nunca a líneas com conos (que se filtran en listas de procesos), registros, resultados de herramientas ni hosts de descarga de adjuntos. Ver Consideraciones de seguridad.

¿Es de solo lectura? No: crea, actualiza, enlaza/desenlaza y elimina elementos de trabajo, sprints, comentarios, adjuntos y páginas wiki. La eliminación de sprints y por lotes está deliberadamente ausente — consulte Fiabilidad y seguridad.

¿Por qué solo seis herramientas cuando otros servidores MCP exponen docenas? Economía de la ventana de contexto: cada definición de herramienta se paga en cada inicio de sesión. Ver Por qué seis herramientas.

Algo se rompió — ¿por dónde empiezo? Solución de problemas cubre los modos de fallo más comunes; más allá de eso, abre un issue de GitHub con la llamada a la herramienta que falla y la salida de stderr del servidor.

Solución de problemas

  • Fallos de autenticación — ejecuta la herramienta projects con op: whoami; informa exactamente qué intercambio de credenciales falló. Comprueba si hay espacios en blanco en los valores de entorno y que la cuenta funciona en la interfaz web de Taiga.

  • La instancia autoalojada devuelve 404TAIGA_API_URL debe incluir la ruta /api/v1, por ejemplo, https://taiga.example.com/api/v1.

  • El servidor arranca pero el cliente npx no ve herramientas — confirma que Node.js >= 20.11 se ejecuta en el entorno del harness; los lanzadores con interfaz gráfica suelen heredar un PATH distinto al de tu shell.

  • Credenciales ignoradas con npx — las instalaciones de npx no cargan un .env; pon las credenciales en el bloque env del harness (solo los checkouts locales cargan .env automáticamente).

  • Conflictos de puerto en modo HTTP — otro proceso tiene el puerto ocupado; elige otro TAIGA_HTTP_PORT. El servidor sale con código de error no nulo y un error de escucha, en lugar de reintentar.

  • Conjuntos de resultados vacíos — los listados muestran <items> in <project>: 0; esa es una respuesta correcta, no un error.

  • Cursor/Windsurf en server presente pero inactivo — activa el interruptor de servidor habilitado en el panel correspondiente después de editar los archivos de configuración; ambos guardan el estado en caché hasta que se actualizan.

Desarrollo

Estructura de archivos

src/index.ts            # Entrypoint: createServer() factory, stdio vs HTTP transport selection
src/http.ts             # Streamable HTTP transport (node:http, stateless, DNS-rebinding protected)
src/api.ts              # Authenticated axios transport, generic HTTP helpers (get, post, patch, del), token management, retry policy, metadata cache
src/taiga.ts            # Domain helpers: resolution (projects, items, members, taxonomies, sprints) and optimistic concurrency patch
src/types.ts            # Taiga payload interfaces, tool definitions, and type contracts
src/format.ts           # Dense pipe-separated single-line renderers and detail views
src/utils.ts            # MCP response builders (createSuccessResponse, createErrorResponse, guard) and formatting helpers
src/constants.ts        # Endpoints, limits (batch size, attachment size), status labels, error messages
src/tools/index.ts      # Tool registry aggregating all tools and registering with McpServer
src/tools/projects.ts   # projects tool (list, get, whoami)
src/tools/work.ts       # work tool (list, get, create, update, link, unlink, delete across issues, stories, tasks, epics)
src/tools/sprints.ts    # sprints tool (list, get, create, stats)
src/tools/comments.ts   # comments tool (list, add, edit, delete)
src/tools/attachments.ts # attachments tool (list, upload, download, delete)
src/tools/wiki.ts       # wiki tool (list, get, create, update, delete, watch)
test/unitTest.ts        # Offline unit tests for pure helpers, formatting functions, response builders, and tool invariants
test/protocolTest.ts    # Protocol tests verifying MCP stdio handshake, server capabilities, tool count, and tools/list budget
test/httpTest.ts        # Transport tests verifying the streamable HTTP endpoint: handshake, tools/list, routing rejections
test/apiContractTest.ts # Contract tests driving every tool op against an in-process mock Taiga HTTP server, asserting outgoing HTTP requests
test/integration.ts     # Live integration smoke test against a real Taiga instance (read-only, skips without credentials)

Scripts de NPM

  • npm run build: Compila TypeScript desde src/ y test/ a dist/ mediante tsc.

  • npm run check: Ejecuta comprobación de tipos en código TypeScript sin generación de resultados (tsc --noEmit).

  • npm run lint: Ejecuta oxlint sobre src/ y test/.

  • npm start: Ejecuta el servidor compilado (node dist/src/index.js).

  • npm test: Compila y ejecuta las suites de prueba unitarias, de protocolo(x, contrato y de transporte HTTP en secuencia.

  • npm run test:unit: Compila y ejecuta pruebas offline unitarias.

  • npm run test:protocol: Compila y ejecuta las pruebas de protocolo MCP sobre stdio.

  • npm run test:http: Compila y ejecuta las pruebas de transporte HTTP streamable.

  • npm run test:contract: Compila y ejecuta las pruebas de contrato de API contra el servidor de simulación de Taiga.

  • npm run test:integration: Compila y ejecuta pruebas de integración en vivo contra una instancia real.

  • npm run prepublishOnly: Ejecuta type-check, lint y suite completA de pruebas antes de publicar.

Conjuntos de test

  1. Pruebas unitarias (test/unitTest.ts): Pruebas unitarias sin conexión que verifican funciones de formato puro, builders de respuesta, utilidades de resolución de identificadores e invariantes de definición de herramientas sin llamadas de red ni credenciales.

  2. Pruebas de protocolo (test/protocolTest.ts): Pruebas de protocolo que verifican el handshake real de MCP stdio, la versión y capacidades del servidor, los esquemas de herramientas y el presupuesto de caracteres de tools/list contra un proceso servidor lanzado.

  3. Pruebas HTTP (test/httpTest.ts): Lanza el servidor compilado con TAIGA_HTTP_PORT y verifica el handshake real de HTTP streamable, eco de versión de protocolo, comportamiento sin estado, contenido de tools/list y rechazos de ruta 400/404/405 sobre localhost.

  4. Pruebas de contrato (test/apiContractTest.ts): Garantizan que cada herramienta y op envía las solicitudes HTTP de salida esperadas (método, endpoint, parámetros de query, cabeceras y carga) y procesa las respuestas contra un servidor de simulación HTTP Taiga dentro del mismo proceso.

  5. Pruebas de integración (test/integration.ts): Pruebas smoke de integración en vivo que verifican operaciones de solo lectura contra una instancia de Taiga real sobre stdio (omitidas si las credenciales no están configuradas).

Contribuidores

Las pull requests se dirigen a dev; ve a CONTRIBUTING.md para el modelo de ramas (devstagingmain), convenciones de commits y proceso de publicación.

Historial de cambios

Véase CHANGELOG.md.

Licencia

MIT

Available Tools

6 tools
attachmentsAttachmentsA
Destructive

List, upload, download, or delete attachments across work items and wiki pages.

op

required args

optional args

notes

list

type, item

project

List attachments on a work item or wiki page

upload

type, item, filePath OR fileContent

project, fileName, mimeType, description

Upload file to Taiga host from local path (harness resolves local:// URIs) or base64

download

type, attachmentId

savePath

Fetch metadata and bytes; writes to savePath when given

delete

type, attachmentId

Delete attachment by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation to perform: list, upload, download, delete
itemNoItem numeric ID, #ref, or wiki slug
typeNoTarget item type (issue, story, task, epic, wiki)
projectNoProject ID or slug (required for #ref or wiki slug)
fileNameNoFile name including extension
filePathNoLocal file path on the machine running this server to upload to the Taiga host (the omp harness resolves local:// URIs to filesystem paths before invoking this tool)
mimeTypeNoMIME type of uploaded file
savePathNoLocal filesystem path to save downloaded file
descriptionNoAttachment description text
fileContentNoBase64-encoded file content to upload
attachmentIdNoAttachment ID for download or delete

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds helpful behavioral details beyond the annotations: download writes files to savePath when provided, and upload resolves local:// URIs through the harness. The destructiveHint annotation is consistent with the delete operation, and no annotation contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, well organized, and front-loads the core purpose in one clause. The table conveys a large amount of operation-parameter information without unnecessary prose, and every line adds utility.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has many parameters and a multi-operation structure, but the operation table plus schema descriptions cover the calling requirements well. It could offer more on return shapes, permissions, or side effects, though it remains sufficient for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage of 100 percent means baseline is 3, but the description still adds meaningful value through a required/optional argument matrix per operation. It clarifies the relationship between operation and parameter choice, especially the 'filePath OR fileContent' upload requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb set — 'List, upload, download, or delete attachments' — and scopes it to 'work items and wiki pages.' The operation table further disambiguates each action, and the tool name plus resource clearly separates it from sibling tools like comments and wiki.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The table gives clear operational context by mapping each op to required and optional arguments. It implicitly tells the agent when to use an operation but does not explicitly discuss exclusions or mention specific sibling alternatives for choosing between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

commentsCommentsA
Destructive

List, add, edit, or delete comments on issues, user stories, tasks, epics, and wiki pages. Note: Taiga soft-deletes comments on delete.

| op | required args | optional args | | list | type, item | project, includeDeleted | | add | type, item, text | project | | edit | type, item, commentId, text | project | | delete | type, item, commentId | project |

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation to perform
itemNoItem ID, #reference, or wiki slug
textNoComment markdown text (add, edit)
typeNoItem type
projectNoProject ID or slug (required for #ref or wiki slug)
commentIdNoComment UUID (edit, delete)
includeDeletedNoInclude soft-deleted comments (list)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description reveals a key behavioral nuance: 'Taiga soft-deletes comments on delete'. This explains how deletes behave and makes the includeDeleted parameter meaningful. It also implies deletion might be reversible, which adds context not available from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single introductory sentence followed by a compact, readable table. Every piece of content in the table contributes to understanding operation-specific argument requirements, with no fluff or repetition of schema details. The purpose is front-loaded in the first clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, no output schema, 4 operations), the description provides a complete operation-by-operation breakdown of required and optional arguments. The soft-delete note and the includeDeleted parameter are explained in a way that leaves nothing ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameter descriptions (100% coverage), so the baseline is 3. The description's operation matrix adds value by showing which parameters are conditionally required for each 'op' (e.g., commentId only for edit/delete, text only for add/edit), which the schema does not convey. This extra relational information raises the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb phrase ('List, add, edit, or delete') and names the exact resource types (issues, user stories, tasks, epics, wiki pages). It unambiguously identifies this tool as the comment-handling tool, separating it from siblings like 'attachments' and 'wiki'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The operation table gives explicit guidance on which arguments are required for each operation (list vs. add vs. edit vs. delete), helping an agent assemble calls correctly. It lacks an explicit statement of when not to use this tool, but the operations are self-explanatory and no true alternative exists among the listed siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projectsProjectsA
Read-onlyIdempotent

List or inspect Taiga projects and verify credentials.

Credentials come from TAIGA_USERNAME and TAIGA_PASSWORD in the environment; the server authenticates on first use. Use whoami to verify them.

op

required args

optional args

notes

list

List projects where authenticated user is member

get

project

Inspect project metadata, owner, member count, active modules

whoami

Verify credentials and show current user info

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation to perform: list, get, or whoami
projectNoProject ID or slug (required for get)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld hints. The description adds behavioral context: credentials are sourced from environment variables and authentication occurs on first use. This explains the tool's interaction with external state without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured, using a table to organize the three operations. No redundant sentences; all content is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description briefly indicates return types (e.g., 'list projects', 'inspect metadata, owner, member count', 'show current user info'), which is sufficient for a read-only tool. It covers credential handling and operation-specific arguments effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes op and project (100% coverage). The description goes further by mapping each operation to its required/optional arguments, clarifying that get needs project while list and whoami don't, which is not evident from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'List or inspect Taiga projects and verify credentials' and then enumerates three operations (list, get, whoami) in a structured table, making the tool's purpose unmistakable and distinct from siblings like sprints or work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use the whoami operation for credential verification, and the table indicates when each op applies (e.g., get for inspecting a specific project's metadata). While it doesn't name sibling alternatives, the resource-specific scope makes the use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sprintsSprintsA

Manage Taiga sprints (milestones): list, inspect, create, or fetch statistics.

Operations:

  • list: List sprints in a project. Requires project.

  • get: Get sprint details and assigned stories. Requires sprint (ID or name); project required if sprint is a name.

  • stats: Get sprint progress statistics and metrics. Requires sprint; project required if sprint is a name.

Sprint deletion is intentionally not exposed: removing a milestone detaches every story and task on it, so it is a board-wide edit that belongs in the Taiga UI. Delete individual work items with the work tool instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation to perform
nameNoSprint name (for create)
startNoStart date YYYY-MM-DD (for create)
finishNoFinish date YYYY-MM-DD (for create)
sprintNoSprint ID or name (for get, stats)
projectNoProject ID or slug

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-read-only, non-destructive, open-world. The description adds valuable context that sprint deletion is intentionally not exposed because it detaches all stories/tasks, a board-wide edit better done in the UI. This goes beyond annotations by explaining the design rationale, though it does not detail auth or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a brief overview and bullet-pointed operations. Every line provides necessary information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers all operations, required parameters, exclusions (deletion), and points to the correct sibling tool for related actions. It is sufficiently complete for an agent to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. The description adds operational context (e.g., which parameters are required for which op, project needed when sprint is a name) beyond the schema, improving the agent's ability to invoke the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it manages Taiga sprints with specific operations (list, get, create, stats). It distinguishes from siblings by explicitly mentioning the work tool for deletion and implying project tool for project-level tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit operation-specific prerequisites (e.g., 'Requires project' for list, 'project required if sprint is a name' for get/stats). Also gives an alternative: 'Delete individual work items with the work tool instead' when discussing deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wikiWikiA
Destructive

Create, inspect, update, delete, or watch wiki pages in a project.

op

required args

optional args

notes

list

project

List all wiki pages in project

get

page

project

Inspect wiki page metadata and content; project needed if page is slug

create

project, page

content

Create wiki page; page is the slug

update

page, content

project

Update wiki page content (OCC versioned); project needed if page is slug

delete

page

project

Delete wiki page permanently; project needed if page is slug

watch

page

project, watch

Watch (default) or unwatch wiki page; project needed if page is slug

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesOperation to perform: list, get, create, update, delete, watch
pageNoWiki page ID or slug
watchNoTrue to watch, false to unwatch (default true)
contentNoWiki page content in Markdown
projectNoProject ID or slug

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description exposes meaningful behavior beyond the annotations: delete is described as permanent, update is described as OCC versioned, watch defaults to true, and list/get inspect metadata and content. This goes well beyond the bare readOnlyHint=false and destructiveHint=true annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The operation table is a compact and scannable way to present six different modes in one tool. It is mainly efficient, although the repeated 'project needed if page is slug' note could be consolidated; still, the structure gives high clarity without unnecessary prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is highly complete for selecting and invoking each operation because it maps required args, slugs, content format, watch default, and destructive flag. With no output schema, a little more detail about the actual returned data shape would round it out, but the agent can safely and correctly call the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The table adds per-operation required/optional semantics beyond the raw schema, clarifies page as ID/slug, and explains when project is needed. It also documents content as Markdown and watch default behavior, so an agent can invoke each operation correctly without guessing parameter combinations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear action list—'Create, inspect, update, delete, or watch wiki pages'—and then concretely defines each operation against the wiki page resource. This makes the tool's scope unambiguous and keeps the list/get/create/update/delete/watch overloaded operation distinct from sibling resource tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The operation table gives explicit routing for each op and states which arguments are required versus optional, including the important condition that project is needed when page is a slug. It does not explicitly contrast the tool with sibling tools, but the table provides sufficient when-to-use guidance for each operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workWork itemsA
Destructive

Manage Taiga work items (issues, user stories, tasks, epics).

Operations:

  • list: List items with optional filters (project required).

  • get: Get details for a single item (item required).

  • create: Create one item or batch items (project and subject/items required).

  • update: Modify fields on an item (item required).

  • link: Link a user story to an epic (type: story, item: story, parent: epic required).

  • unlink: Remove a user story from an epic (type: story, item: story, parent: epic required).

  • delete: Permanently delete ONE item (item required). Taiga has no trash for work items, so this cannot be undone. Batch is deliberately create-only: up to 20 items can be created in a call, exactly one can be deleted, so a mistaken call cannot clear a board.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFull-text search query
opYesOperation to perform
itemNoItem numeric ID or #ref
tagsNoTags array
typeYesWork item type
itemsNoBatch create items array (max 20)
limitNoMaximum number of items to return
closedNoFilter by closed state
parentNoParent story (tasks) or epic (link/unlink)
pointsNoPoints value matching project point deck (e.g. 1, 3, 5, or "?" for unestimated; stories only)
sprintNoSprint ID or name ("none" to clear)
statusNoStatus name
orderByNoOrder by field, prefix "-" for desc
projectNoProject ID or slug
subjectNoItem subject or title
watcherNoFilter by watcher username, email, or "me"
assigneeNoAssignee username, email, full name, ID, or "me"
priorityNoPriority name (issues only)
severityNoSeverity name (issues only)
issueTypeNoIssue type name (issues only)
descriptionNoItem description markdown

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly warns that delete is permanent and that Taiga has no trash, and explains the batch create-only safeguard prevents accidental board clearing. This adds substantial safety context beyond the destructiveHint annotation, and there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured, starting with a one-line summary followed by a bulleted list of operations. Every sentence provides operational guidance, with no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All seven operations have their required parameters stated, the delete behavior carries a detailed permanence warning with rationale, and the batch limit is explicitly noted. Without an output schema, this description sufficiently covers invocation semantics for a complex 21-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 21 parameters already have descriptions. The tool description only reiterates which parameters are required for specific operations (e.g., project required) without adding new semantic meaning. The schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Manage Taiga work items (issues, user stories, tasks, epics)' and enumerates seven distinct operations with specific verbs (list, get, create, update, link, unlink, delete). This makes the tool's purpose unambiguous and clearly distinguishes it from sibling tools like projects, sprints, and wiki.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The operation list provides clear context with required parameters for each operation (e.g., 'project required', 'item required') and includes a safety warning about delete being permanent. However, it does not explicitly state when to use this tool over alternatives, though the separation from siblings is implicit in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • First observedattachments
    • First observedcomments
    • First observedprojects
    • First observedsprints
    • First observedwiki
    • First observedwork

TDQS

A4.5/5.0
Disambiguation5/5

Each tool maps to a distinct Taiga resource: projects, work items, sprints, comments, attachments, and wiki. Shared type/item parameters are used for child resources, but the tool purposes do not overlap.

Naming Consistency4/5

Top-level tool names are simple lowercase resource nouns and are internally consistent. The pattern is slightly mixed because some names are plural resources while work and wiki are singular, and the internal op verbs vary between add/create and edit/update.

Tool Count5/5

Six resource-scoped tools is a well-balanced surface for a project-management server. Each tool represents a meaningful functional area without making the tool list overwhelming.

Completeness4/5

The server covers most core workflows: project inspection, work-item CRUD, sprints, comments, attachments, and wiki with lifecycle operations. Deliberate gaps such as project creation/deletion and sprint update/delete prevent it from being fully complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Full-featured MCP server for Taiga project management, enabling AI agents to manage projects, epics, user stories, tasks, issues, sprints, wiki pages, memberships, and roles via Taiga API v1.
    100
    46
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Taiga project management API. Enables AI assistants to manage projects, issues, user stories, tasks, epics, sprints, and wiki pages via natural language commands.
    55
    12
    ISC
  • F
    license
    C
    quality
    D
    maintenance
    MCP server for the Zube.io project management API, exposing boards, cards, epics, tickets, sprints, and workspaces as tools for AI assistants.
    42
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/negoro26/mcp-taiga'

If you have feedback or need assistance with the MCP directory API, please join our Discord server