Yandex Tracker

Interactúa con las APIs de Yandex Tracker para la gestión y búsqueda de incidencias.

Documentación

Servidor MCP de Yandex Tracker

PyPI - Version Test Workflow Release Workflow

mcp-name: io.github.aikts/yandex-tracker-mcp

Un servidor integral del Protocolo de Contexto de Modelo (MCP) que permite a los asistentes de IA interactuar con las API de Yandex Tracker. Este servidor proporciona acceso seguro y autenticado a problemas, colas, comentarios, registros de trabajo y funcionalidad de búsqueda de Yandex Tracker, con caché opcional de Redis para mejorar el rendimiento.

La documentación en ruso está disponible aquí / Documentation in English is available here.

Características

  • Gestión completa de colas: Lista y accede a todas las colas disponibles de Yandex Tracker con soporte de paginación, recuperación de etiquetas y metadatos detallados
  • Gestión de usuarios: Recupera información de cuentas de usuario, incluidos detalles de inicio de sesión, direcciones de correo electrónico, estado de licencia y datos organizativos
  • Ciclo de vida completo de problemas: Crea, lee, actualiza y gestiona problemas con soporte para campos personalizados, archivos adjuntos y transiciones de flujo de trabajo
  • Gestión de flujos de trabajo de estado: Ejecuta transiciones de estado, cierra problemas con resoluciones y navega por flujos de trabajo complejos
  • Gestión de campos: Accede a campos globales, campos locales específicos de cola, estados, tipos de problemas, prioridades y resoluciones
  • Lenguaje de consulta avanzado: Soporte completo del Lenguaje de Consulta de Yandex Tracker con filtrado complejo, ordenación y funciones de fecha
  • Caché de rendimiento: Capa de caché opcional de Redis para mejorar los tiempos de respuesta
  • Controles de seguridad: Restricciones de acceso a colas configurables y manejo seguro de tokens
  • Múltiples opciones de transporte: Soporte para transportes stdio, SSE (obsoleto) y HTTP para una integración flexible
  • Autenticación OAuth 2.0: Autenticación dinámica basada en tokens con soporte de renovación automática como alternativa a los tokens API estáticos
  • Soporte organizativo: Compatible con IDs de organización estándar y de nube

Configuración del ID de organización

Elige una de las siguientes opciones según tu tipo de organización de Yandex:

  • Organización de Yandex Cloud: Usa la variable de entorno TRACKER_CLOUD_ORG_ID más adelante para organizaciones gestionadas por Yandex Cloud
  • Organización de Yandex 360: Usa la variable de entorno TRACKER_ORG_ID más adelante para organizaciones de Yandex 360

Puedes encontrar tu ID de organización en la URL de Yandex Tracker o en la configuración de la organización.

Configuración del cliente MCP

Instalación de la extensión en Claude Desktop

El Servidor MCP de Yandex Tracker se puede instalar con un clic en Claude Desktop como extensión.

Instalación

  1. Descarga el archivo *.mcpb desde GitHub Releases.
  2. Haz doble clic en el archivo descargado para instalarlo en Claude Desktop. img.png
  3. Proporciona tu token OAuth de Yandex Tracker cuando se te solicite. img.png
  4. Asegúrate de que la extensión esté habilitada; ahora puedes usar este Servidor MCP.

Instalación manual

Requisitos previos

  • uv instalado globalmente
  • Token API válido de Yandex Tracker con los permisos adecuados

Las siguientes secciones muestran cómo configurar el servidor MCP para diferentes clientes de IA. Puedes usar uvx yandex-tracker-mcp@latest o la imagen de Docker ghcr.io/aikts/yandex-tracker-mcp:latest. Ambos requieren estas variables de entorno:

  • Autenticación (una de las siguientes):
    • TRACKER_TOKEN - Tu token OAuth de Yandex Tracker
    • TRACKER_IAM_TOKEN - Tu token IAM
    • TRACKER_SA_KEY_ID, TRACKER_SA_SERVICE_ACCOUNT_ID, TRACKER_SA_PRIVATE_KEY - Credenciales de cuenta de servicio
  • TRACKER_CLOUD_ORG_ID o TRACKER_ORG_ID - Tu ID de organización de Yandex Cloud (o Yandex 360)
Claude Desktop

Ruta del archivo de configuración:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Usando uvx:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Usando Docker:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}
Claude Code

Usando uvx:

claude mcp add yandex-tracker uvx yandex-tracker-mcp@latest \
  -e TRACKER_TOKEN=your_tracker_token_here \
  -e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here \
  -e TRACKER_ORG_ID=your_org_id_here \
  -e TRANSPORT=stdio

Usando Docker:

claude mcp add yandex-tracker docker "run --rm -i -e TRACKER_TOKEN=your_tracker_token_here -e TRACKER_CLOUD_ORG_ID=your_cloud_org_id_here -e TRACKER_ORG_ID=your_org_id_here -e TRANSPORT=stdio ghcr.io/aikts/yandex-tracker-mcp:latest"
Cursor

Ruta del archivo de configuración:

  • Específico del proyecto: .cursor/mcp.json en el directorio de tu proyecto
  • Global: ~/.cursor/mcp.json

Usando uvx:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Usando Docker:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}
Windsurf

Ruta del archivo de configuración:

  • ~/.codeium/windsurf/mcp_config.json

Acceso mediante: Configuración de Windsurf → pestaña Cascade → Servidores del Protocolo de Contexto de Modelo (MCP) → "Ver configuración sin procesar"

Usando uvx:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Usando Docker:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}
Zed

Ruta del archivo de configuración:

  • ~/.config/zed/settings.json

Acceso mediante: Cmd+, (macOS) o Ctrl+, (Linux/Windows) o paleta de comandos: "zed: open settings"

Nota: Se requiere la versión Zed Preview para soporte MCP.

Usando uvx:

{
  "context_servers": {
    "yandex-tracker": {
      "source": "custom",
      "command": {
        "path": "uvx",
        "args": ["yandex-tracker-mcp@latest"],
        "env": {
          "TRACKER_TOKEN": "your_tracker_token_here",
          "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
          "TRACKER_ORG_ID": "your_org_id_here"
        }
      }
    }
  }
}

Usando Docker:

{
  "context_servers": {
    "yandex-tracker": {
      "source": "custom",
      "command": {
        "path": "docker",
        "args": [
          "run", "--rm", "-i",
          "-e", "TRACKER_TOKEN",
          "-e", "TRACKER_CLOUD_ORG_ID",
          "-e", "TRACKER_ORG_ID",
          "ghcr.io/aikts/yandex-tracker-mcp:latest"
        ],
        "env": {
          "TRACKER_TOKEN": "your_tracker_token_here",
          "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
          "TRACKER_ORG_ID": "your_org_id_here"
        }
      }
    }
  }
}
GitHub Copilot (VS Code)

Ruta del archivo de configuración:

  • Espacio de trabajo: .vscode/mcp.json en el directorio de tu proyecto
  • Global: VS Code settings.json

Opción 1: Configuración del espacio de trabajo (recomendada por seguridad)

Crea .vscode/mcp.json:

Usando uvx:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "tracker-token",
      "description": "Yandex Tracker Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "cloud-org-id",
      "description": "Yandex Cloud Organization ID"
    },
    {
      "type": "promptString",
      "id": "org-id",
      "description": "Yandex Tracker Organization ID (optional)"
    }
  ],
  "servers": {
    "yandex-tracker": {
      "type": "stdio",
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "${input:tracker-token}",
        "TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
        "TRACKER_ORG_ID": "${input:org-id}",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Usando Docker:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "tracker-token",
      "description": "Yandex Tracker Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "cloud-org-id",
      "description": "Yandex Cloud Organization ID"
    },
    {
      "type": "promptString",
      "id": "org-id",
      "description": "Yandex Tracker Organization ID (optional)"
    }
  ],
  "servers": {
    "yandex-tracker": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "${input:tracker-token}",
        "TRACKER_CLOUD_ORG_ID": "${input:cloud-org-id}",
        "TRACKER_ORG_ID": "${input:org-id}",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Opción 2: Configuración global

Agrega a VS Code settings.json:

Usando uvx:

{
  "github.copilot.chat.mcp.servers": {
    "yandex-tracker": {
      "type": "stdio",
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Usando Docker:

{
  "github.copilot.chat.mcp.servers": {
    "yandex-tracker": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}
Otros clientes compatibles con MCP

Para otros clientes compatibles con MCP, usa el formato estándar de configuración del servidor MCP:

Usando uvx:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Usando Docker:

{
  "mcpServers": {
    "yandex-tracker": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRACKER_TOKEN",
        "-e", "TRACKER_CLOUD_ORG_ID",
        "-e", "TRACKER_ORG_ID",
        "ghcr.io/aikts/yandex-tracker-mcp:latest"
      ],
      "env": {
        "TRACKER_TOKEN": "your_tracker_token_here",
        "TRACKER_CLOUD_ORG_ID": "your_cloud_org_id_here",
        "TRACKER_ORG_ID": "your_org_id_here"
      }
    }
  }
}

Notas importantes:

  • Reemplaza los valores de marcador de posición con tus credenciales reales
  • Reinicia tu cliente de IA después de los cambios de configuración
  • Asegúrate de que uvx esté instalado y disponible en la RUTA de tu sistema
  • Para uso en producción, considera usar variables de entorno en lugar de codificar tokens

Herramientas MCP disponibles

El servidor expone las siguientes herramientas a través del protocolo MCP:

Gestión de colas
  • queues_get_all: Lista todas las colas disponibles de Yandex Tracker

    • Parámetros:
      • fields (opcional): Campos a incluir en la respuesta (por ejemplo, ["key", "name"]). Ayuda a optimizar el uso de la ventana de contexto seleccionando solo los campos necesarios. Si no se especifica, devuelve todos los campos disponibles.
      • page (opcional): Número de página a devolver. Si no se especifica, recupera todas las páginas automáticamente.
      • per_page (opcional): Número de elementos por página (predeterminado: 100)
    • Devuelve información de colas paginada con inclusión selectiva de campos
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • queue_get_tags: Obtiene todas las etiquetas de una cola específica

    • Parámetros: queue_id (cadena, clave de cola como "SOMEPROJECT")
    • Devuelve la lista de etiquetas disponibles en la cola especificada
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • queue_get_versions: Obtiene todas las versiones de una cola específica

    • Parámetros: queue_id (cadena, clave de cola como "SOMEPROJECT")
    • Devuelve la lista de versiones disponibles en la cola especificada con detalles como nombre, descripción, fechas y estado
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • queue_create_version: Crea una nueva versión en una cola específica

    • Parámetros:
      • queue_id (cadena, obligatorio): Clave de cola como "SOMEPROJECT"
      • name (cadena, obligatorio): Nombre de la versión
      • description (cadena, opcional): Descripción de la versión
      • start_date (fecha, opcional): Fecha de inicio de la versión en formato YYYY-MM-DD
      • due_date (fecha, opcional): Fecha de vencimiento de la versión en formato YYYY-MM-DD
    • Devuelve la versión creada con detalles como nombre, descripción, fechas y estado
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • queue_get_fields: Obtiene los campos de una cola específica

    • Parámetros:
      • queue_id (cadena, obligatorio): Clave de cola como "SOMEPROJECT"
      • include_local_fields (booleano, opcional, predeterminado: true): Si se deben incluir campos locales específicos de la cola
    • Devuelve la lista de campos globales y opcionalmente campos locales (específicos de la cola)
    • Realiza solicitudes en paralelo para obtener ambos tipos de campos cuando include_local_fields es verdadero
    • La propiedad schema.required indica si un campo es obligatorio
    • Úsalo para encontrar campos disponibles y obligatorios antes de crear un problema con la herramienta issue_create
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • queue_get_metadata: Obtiene metadatos detallados sobre una cola específica

    • Parámetros:
      • queue_id (cadena, obligatorio): Clave de cola como "SOMEPROJECT"
      • expand (matriz de cadenas, opcional): Campos a expandir en la respuesta. Opciones disponibles: all, projects, components, versions, types, team, workflows, fields, issueTypesConfig
    • Devuelve información de la cola, incluidos nombre, descripción, tipo/prioridad predeterminados y, opcionalmente, datos expandidos
    • Usa expand: ["issueTypesConfig"] para obtener las resoluciones disponibles para cada tipo de problema (necesario para la herramienta issue_close)
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
Gestión de usuarios
  • users_get_all: Obtiene información sobre las cuentas de usuario registradas en la organización

    • Parámetros:
      • per_page (opcional): Número de usuarios por página (predeterminado: 50)
      • page (opcional): Número de página a devolver (predeterminado: 1)
    • Devuelve una lista paginada de usuarios con inicio de sesión, correo electrónico, estado de licencia y detalles organizativos
    • Incluye metadatos de usuario como estado externo, estado de despido y preferencias de notificación
  • user_get: Obtiene información sobre un usuario específico por inicio de sesión o UID

    • Parámetros: user_id (cadena, inicio de sesión de usuario como "john.doe" o UID como "12345")
    • Devuelve información detallada del usuario, incluidos inicio de sesión, correo electrónico, estado de licencia y detalles organizativos
    • Admite tanto nombres de inicio de sesión como IDs numéricos de usuario para una identificación flexible
  • user_get_current: Obtiene información sobre el usuario autenticado actual

    • No requiere parámetros
    • Devuelve información detallada sobre el usuario asociado con el token de autenticación actual
    • Incluye inicio de sesión, correo electrónico, nombre para mostrar y detalles organizativos del usuario autenticado
  • users_search: Busca un usuario según inicio de sesión, correo electrónico o nombre real (nombre o apellido, o ambos)

    • Parámetros: login_or_email_or_name (cadena, inicio de sesión, correo electrónico o nombre real del usuario a buscar)
    • Devuelve un solo usuario o varios usuarios si varios coinciden con la consulta, o una lista vacía si ningún usuario coincide
    • Usa coincidencia difusa para nombres reales con un umbral de similitud del 80%
    • Prioriza coincidencias exactas para inicio de sesión y correo electrónico sobre coincidencias difusas de nombres
Gestión de campos
  • get_global_fields: Obtiene todos los campos globales disponibles en Yandex Tracker
    • Devuelve la lista completa de campos globales que se pueden usar en problemas
    • Incluye esquema de campo, información de tipo y configuración
Gestión de estados y tipos
  • get_statuses: Obtiene todos los estados de problemas disponibles

    • Devuelve la lista completa de estados de problemas que se pueden asignar
    • Incluye IDs de estado, nombres e información de tipo
  • get_issue_types: Obtiene todos los tipos de problemas disponibles

    • Devuelve la lista completa de tipos de problemas para crear/actualizar problemas
    • Incluye IDs de tipo, nombres y detalles de configuración
  • get_priorities: Obtener todas las prioridades de incidencias disponibles

    • Devuelve la lista completa de prioridades que se pueden asignar a las incidencias
    • Incluye claves de prioridad, nombres e información de orden
  • get_resolutions: Obtener todas las resoluciones de incidencias disponibles

    • Devuelve la lista completa de resoluciones que se pueden usar al cerrar incidencias
    • Incluye claves de resolución, nombres, descripciones e información de orden
Operaciones con incidencias
  • issue_get: Recuperar información detallada de una incidencia por ID

    • Parámetros:
      • issue_id (cadena, formato: "QUEUE-123")
      • include_description (booleano, opcional, valor predeterminado: true): Si se debe incluir la descripción de la incidencia en el resultado. Puede ser grande, así que úsalo solo cuando sea necesario.
    • Devuelve datos completos de la incidencia, incluidos estado, asignado, descripción, etc.
  • issue_get_url: Generar URL web para una incidencia

    • Parámetros: issue_id (cadena)
    • Devuelve: https://tracker.yandex.ru/{issue_id}
  • issue_get_comments: Obtener todos los comentarios de una incidencia

    • Parámetros: issue_id (cadena)
    • Devuelve lista cronológica de comentarios con metadatos
  • issue_add_comment: Añadir un comentario a una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • text (cadena, obligatorio): Texto del comentario (markdown compatible con Tracker)
      • summonees (matriz de cadenas, opcional): Usuarios a mencionar (inicios de sesión o IDs). Esta es la forma de la API para mencionar/llamar a usuarios (las notificaciones se activan mediante este campo, no mediante @login en el texto).
      • maillist_summonees (matriz de cadenas, opcional): Listas de correo a mencionar (correos electrónicos)
      • markup_type (cadena, opcional): Usa md para YFM (markdown)
      • is_add_to_followers (booleano, opcional, valor predeterminado: true): Añadir al autor del comentario a los seguidores
    • Devuelve el objeto de comentario creado
  • issue_update_comment: Actualizar un comentario existente en una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • comment_id (entero, obligatorio): ID del comentario
      • text (cadena, obligatorio): Nuevo texto del comentario (markdown compatible con Tracker)
      • summonees (matriz de cadenas, opcional): Usuarios a mencionar (inicios de sesión o IDs)
      • maillist_summonees (matriz de cadenas, opcional): Listas de correo a mencionar (correos electrónicos)
      • markup_type (cadena, opcional): Usa md para YFM (markdown)
    • Devuelve el objeto de comentario actualizado
  • issue_delete_comment: Eliminar un comentario de una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • comment_id (entero, obligatorio): ID del comentario
    • Devuelve: null (éxito)
  • issue_add_link: Crear un enlace entre una incidencia y otra incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123"): La incidencia actual
      • relationship (cadena, obligatorio): Tipo de enlace que describe cómo se relaciona issue_id con la incidencia enlazada. Uno de: relates, is dependent by, depends on, is subtask for, is parent task for, duplicates, is duplicated by, is epic of, has epic
      • issue (cadena, obligatorio): ID o clave de la incidencia a enlazar (p. ej., "TEST-123")
    • Devuelve el objeto de enlace creado
  • issue_delete_link: Eliminar un enlace entre una incidencia y otra incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • link_id (entero, obligatorio): ID del enlace (tal como lo devuelve issue_get_links)
    • Devuelve: null (éxito)
  • issue_get_links: Obtener enlaces de incidencias relacionadas

    • Parámetros: issue_id (cadena)
    • Devuelve enlaces a incidencias relacionadas, bloqueadas o duplicadas
  • issue_get_worklogs: Recuperar entradas de registro de trabajo

    • Parámetros: issue_ids (matriz de cadenas)
    • Devuelve datos de seguimiento de tiempo para las incidencias especificadas
  • issue_add_worklog: Añadir una entrada de registro de trabajo (registrar tiempo invertido) a una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • duration (cadena, obligatorio): Duración ISO-8601 (p. ej., PT1H30M)
      • comment (cadena, opcional): Comentario del registro de trabajo
      • start (fecha y hora, opcional): Fecha y hora de inicio del trabajo (se asume UTC si no se proporciona la zona horaria)
    • Devuelve la entrada de registro de trabajo creada
  • issue_update_worklog: Actualizar una entrada de registro de trabajo (registro de tiempo invertido) en una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • worklog_id (entero, obligatorio): ID de la entrada de registro de trabajo
      • duration (cadena, opcional): Duración ISO-8601 (p. ej., PT1H30M)
      • comment (cadena, opcional): Comentario del registro de trabajo
      • start (fecha y hora, opcional): Fecha y hora de inicio del trabajo (se asume UTC si no se proporciona la zona horaria)
    • Devuelve la entrada de registro de trabajo actualizada
  • issue_delete_worklog: Eliminar una entrada de registro de trabajo (registro de tiempo invertido) de una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123")
      • worklog_id (entero, obligatorio): ID de la entrada de registro de trabajo
    • Devuelve: null (éxito)
  • issue_get_attachments: Obtener archivos adjuntos de una incidencia

    • Parámetros: issue_id (cadena, formato: "QUEUE-123")
    • Devuelve lista de archivos adjuntos con metadatos para la incidencia especificada
  • issue_get_checklist: Obtener elementos de lista de verificación de una incidencia

    • Parámetros: issue_id (cadena, formato: "QUEUE-123")
    • Devuelve lista de elementos de lista de verificación, incluidos texto, estado, asignado e información de fecha límite
  • issue_get_transitions: Obtener transiciones de estado posibles para una incidencia

    • Parámetros: issue_id (cadena, formato: "QUEUE-123")
    • Devuelve lista de transiciones disponibles que se pueden realizar en la incidencia
    • Cada transición incluye un ID, nombre para mostrar e información del estado de destino
  • issue_get_changelog: Obtener el historial de cambios (registro de cambios) de una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123"): La clave de la incidencia
      • per_page (entero, opcional, valor predeterminado: 50): Número de entradas por página
      • cursor (cadena, opcional): El valor de next_cursor devuelto por la llamada anterior; pásalo para obtener la siguiente página (paginación por cursor)
      • field (cadena, opcional): Filtrar el registro de cambios por una clave de campo (p. ej., status)
      • type (cadena, opcional): Filtrar por tipo de cambio (p. ej., IssueWorkflow para transiciones de estado)
    • Devuelve un objeto con entries (transiciones de estado y ediciones de campos, incluido quién cambió qué de from a to y cuándo, además de cambios de comentarios y disparadores ejecutados) y next_cursor (pásalo de vuelta como cursor para la siguiente página; null cuando no haya más páginas)
  • issue_execute_transition: Ejecutar una transición de estado para una incidencia

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123"): La clave de la incidencia
      • transition_id (cadena, obligatorio): El ID de transición a ejecutar. IMPORTANTE: Debe ser uno de los IDs devueltos por la herramienta issue_get_transitions
      • comment (cadena, opcional): Comentario opcional para añadir al ejecutar la transición
      • fields (objeto, opcional): Diccionario de campos adicionales para establecer durante la transición. Los campos comunes incluyen resolution (p. ej., 'fixed', 'wontFix') para cerrar incidencias, assignee para reasignar, etc.
    • Devuelve lista de transiciones disponibles para el nuevo estado después de ejecutar la transición
    • Nota de uso: PRIMERO debes llamar a issue_get_transitions para recuperar las transiciones disponibles y luego pasar uno de los IDs de transición devueltos. No uses IDs de transición arbitrarios.
  • issue_close: Cerrar una incidencia con una resolución (herramienta de conveniencia)

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123"): La clave de la incidencia
      • resolution_id (cadena, obligatorio): El ID de resolución para establecer al cerrar (p. ej., 'fixed', 'wontFix', 'duplicate')
      • comment (cadena, opcional): Comentario opcional para añadir al cerrar la incidencia
    • Busca automáticamente una transición a un estado 'done' y la ejecuta con la resolución especificada
    • Devuelve lista de transiciones disponibles para el nuevo estado (cerrado)
    • Nota de uso: Antes de cerrar, DEBES:
      1. Llamar a issue_get para recuperar el campo type de la incidencia
      2. Llamar a get_queue_metadata con expand: ["issueTypesConfig"] para obtener las resoluciones disponibles
      3. Elegir una resolución de la entrada issueTypesConfig que coincida con el tipo de la incidencia: cada tipo de incidencia tiene su propio conjunto de resoluciones válidas
  • issue_create: Crear una nueva incidencia en una cola

    • Parámetros:
      • queue (cadena, obligatorio): Clave de la cola donde crear la incidencia (p. ej., 'MYQUEUE')
      • summary (cadena, obligatorio): Título/resumen de la incidencia
      • type (entero, opcional): ID del tipo de incidencia (de la herramienta get_issue_types)
      • description (cadena, opcional): Descripción de la incidencia
      • assignee (cadena o entero, opcional): Inicio de sesión o UID del asignado
      • priority (cadena, opcional): Clave de prioridad (de la herramienta get_priorities)
      • fields (objeto, opcional): Campos adicionales para establecer durante la creación de la incidencia. IMPORTANTE: Antes de crear una incidencia, DEBES llamar a queue_get_fields para obtener los campos disponibles (devuelve tanto campos globales como locales de forma predeterminada). Los campos con schema.required=true son obligatorios. Usa la propiedad id del campo como clave en este mapa (p. ej., {"fieldId": "value"})
    • Devuelve el objeto de incidencia recién creado con todos los campos estándar de incidencia
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • issue_update: Actualizar una incidencia existente

    • Parámetros:
      • issue_id (cadena, obligatorio, formato: "QUEUE-123"): La clave de la incidencia a actualizar
      • summary (cadena, opcional): Nuevo título/resumen de la incidencia
      • description (cadena, opcional): Nueva descripción de la incidencia
      • markup_type (cadena, opcional): Tipo de marcado para el texto de la descripción (usa 'md' para marcado YFM)
      • parent (IssueUpdateParent, opcional): Referencia a la incidencia principal con id (cadena) y/o key (cadena, p. ej., 'QUEUE-123')
      • sprint (matriz de IssueUpdateSprint, opcional): Asignaciones de sprint: matriz de objetos con campo id (entero)
      • type (IssueUpdateType, opcional): Tipo de incidencia con id (cadena) y/o key (cadena, p. ej., 'bug', 'task')
      • priority (IssueUpdatePriority, opcional): Prioridad con id (cadena) y/o key (cadena, p. ej., 'critical', 'normal')
      • followers (matriz de IssueUpdateFollower, opcional): Seguidores: matriz de objetos con id (cadena, ID de usuario o inicio de sesión)
      • project (IssueUpdateProject, opcional): Proyecto con primary (entero, shortId del proyecto principal) y secondary opcional (matriz de enteros)
      • tags (matriz de cadenas, opcional): Etiquetas de la incidencia
      • version (entero, opcional): Versión de la incidencia para bloqueo optimista: los cambios solo se aplican a la versión actual
      • fields (objeto, opcional): Campos adicionales para actualizar. Usa queue_get_fields para descubrir los campos disponibles.
    • Devuelve el objeto de incidencia actualizado con todos los campos estándar de incidencia
    • Solo se actualizan los campos proporcionados; los campos omitidos permanecen sin cambios
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
  • issue_move: Mover un issue a una cola diferente

    • Parámetros:
      • issue_id (string, obligatorio, formato: "QUEUE-123"): La clave del issue a mover
      • queue (string, obligatorio): Clave de la cola de destino (p. ej., 'MYQUEUE')
      • notify (boolean, opcional, predeterminado true): Notificar a los usuarios mencionados en los campos del issue
      • notify_author (boolean, opcional, predeterminado false): Notificar al autor del issue
      • move_all_fields (boolean, opcional, predeterminado false): Transferir versiones, componentes y proyectos cuando existan coincidencias en la cola de destino; de lo contrario, se eliminan
      • initial_status (boolean, opcional, predeterminado false): Restablecer el estado del issue al valor inicial (usar cuando la cola de destino tenga un flujo de trabajo diferente)
    • Devuelve el objeto del issue actualizado con su nueva clave en la cola de destino (p. ej., TASKS-1NEWQUEUE-42)
    • Cuando el cliente MCP admite elicitación, se solicita al usuario confirmar los indicadores booleanos antes de realizar el movimiento; rechazar o cancelar aborta el movimiento. Los clientes sin soporte de elicitación continúan con los valores proporcionados
    • Respeta las restricciones de TRACKER_LIMIT_QUEUES
Búsqueda y Descubrimiento
  • issues_find: Buscar issues usando Yandex Tracker Query Language

    • Parámetros:
      • query (obligatorio): Cadena de consulta usando la sintaxis de Yandex Tracker Query Language
      • include_description (boolean, opcional, predeterminado: false): Si se debe incluir la descripción del issue en los resultados. Puede ser grande, así que úsalo solo cuando sea necesario.
      • fields (lista de strings, opcional): Campos a incluir en la respuesta. Ayuda a optimizar el uso de la ventana de contexto seleccionando solo los campos necesarios. Si no se especifica, devuelve todos los campos disponibles.
      • page (opcional): Número de página para la paginación (predeterminado: 1)
      • per_page (opcional): Número de elementos por página (predeterminado: 100). Puede reducirse si los resultados exceden la ventana de contexto.
    • Devuelve hasta el número especificado de issues por página
  • issues_count: Contar issues que coinciden con una consulta usando Yandex Tracker Query Language

    • Parámetros:
      • query (obligatorio): Cadena de consulta usando la sintaxis de Yandex Tracker Query Language
    • Devuelve el recuento total de issues que coinciden con los criterios especificados
    • Admite todas las funciones del lenguaje de consulta: filtrado de campos, funciones de fecha, operadores lógicos y expresiones complejas
    • Útil para análisis, informes y comprensión de la distribución de issues sin recuperar datos completos de issues

Transporte http

El servidor MCP también puede ejecutarse en modo streamable-http para integraciones basadas en web o cuando el transporte stdio no es adecuado.

Variables de Entorno del Modo streamable-http

# Required - Set transport to streamable-http mode
TRANSPORT=streamable-http

# Server Configuration
HOST=0.0.0.0  # Default: 0.0.0.0 (all interfaces)
PORT=8000     # Default: 8000

Iniciando el Servidor streamable-http

# Basic streamable-http server startup
TRANSPORT=streamable-http uvx yandex-tracker-mcp@latest

# With custom host and port
TRANSPORT=streamable-http \
HOST=localhost \
PORT=9000 \
uvx yandex-tracker-mcp@latest

# With all environment variables
TRANSPORT=streamable-http \
HOST=0.0.0.0 \
PORT=8000 \
TRACKER_TOKEN=your_token \
TRACKER_CLOUD_ORG_ID=your_org_id \
uvx yandex-tracker-mcp@latest

Puedes omitir la configuración de TRACKER_CLOUD_ORG_ID o TRACKER_ORG_ID si usas el siguiente formato al conectarte al Servidor MCP (ejemplo para Claude Code):

claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?cloudOrgId=your_cloud_org_id&"

o

claude mcp add --transport http yandex-tracker "http://localhost:8000/mcp/?orgId=org_id&"

También puedes omitir la configuración de la variable de entorno global TRACKER_TOKEN si eliges usar autenticación OAuth 2.0 (ver más abajo).

Autenticación OAuth 2.0

El Servidor MCP de Yandex Tracker admite autenticación OAuth 2.0 como una alternativa segura a los tokens API estáticos. Cuando está configurado, el servidor actúa como un proveedor OAuth, facilitando la autenticación entre tu cliente MCP y los servicios OAuth de Yandex.

Cómo Funciona OAuth

El servidor MCP implementa un flujo estándar de código de autorización OAuth 2.0:

  1. Registro del Cliente: Tu cliente MCP se registra con el servidor para obtener credenciales de cliente
  2. Autorización: Los usuarios son redirigidos a Yandex OAuth para autenticarse
  3. Intercambio de Tokens: El servidor intercambia códigos de autorización por tokens de acceso
  4. Acceso a la API: Los clientes usan tokens bearer para todas las solicitudes de API
  5. Renovación de Tokens: Los tokens caducados pueden renovarse sin reautenticación
MCP Client → MCP Server → Yandex OAuth → User Authentication
    ↑                                           ↓
    └────────── Access Token ←─────────────────┘

Configuración de OAuth

Para habilitar la autenticación OAuth, establece las siguientes variables de entorno:

# Enable OAuth mode
OAUTH_ENABLED=true

# Yandex OAuth Application Credentials (required for OAuth)
OAUTH_CLIENT_ID=your_yandex_oauth_app_id
OAUTH_CLIENT_SECRET=your_yandex_oauth_app_secret

# Public URL of your MCP server (required for OAuth callbacks)
MCP_SERVER_PUBLIC_URL=https://your-mcp-server.example.com

# Optional OAuth settings
OAUTH_SERVER_URL=https://oauth.yandex.ru  # Default Yandex OAuth server

# When OAuth is enabled, TRACKER_TOKEN becomes optional

Configuración de la Aplicación OAuth de Yandex

  1. Ve a Yandex OAuth y crea una nueva aplicación
  2. Establece la URL de devolución de llamada a: {MCP_SERVER_PUBLIC_URL}/oauth/yandex/callback
  3. Solicita los siguientes permisos:
    • tracker:read - Permisos de lectura para Tracker
    • tracker:write - Permisos de escritura para Tracker
  4. Guarda tu ID de Cliente y Secreto de Cliente

OAuth vs Autenticación con Token Estático

CaracterísticaOAuthToken Estático
SeguridadTokens dinámicos con caducidadTokens estáticos de larga duración
Experiencia de UsuarioFlujo de inicio de sesión interactivoConfiguración única
Gestión de TokensRenovación automáticaRotación manual
Control de AccesoAutenticación por usuarioToken compartido
Complejidad de ConfiguraciónRequiere configuración de la aplicación OAuthConfiguración simple de token

Limitaciones del Modo OAuth

  • Actualmente, el modo OAuth requiere que el servidor MCP sea accesible públicamente para las URL de devolución de llamada
  • El modo OAuth es más adecuado para clientes interactivos que admiten flujos de autenticación basados en web

Uso de OAuth con Clientes MCP

Cuando OAuth está habilitado, los clientes MCP deberán:

  1. Admitir el flujo de código de autorización OAuth 2.0
  2. Manejar la renovación de tokens cuando caduquen los tokens de acceso
  3. Almacenar tokens de renovación de forma segura para autenticación persistente

Nota: No todos los clientes MCP admiten actualmente la autenticación OAuth. Consulta la documentación de tu cliente para verificar la compatibilidad con OAuth.

Ejemplo de configuración para Claude Code:

claude mcp add --transport http yandex-tracker https://your-mcp-server.example.com/mcp/ -s user

Almacenamiento de Datos OAuth

El servidor MCP admite dos backends de almacenamiento diferentes para datos OAuth (registros de clientes, tokens de acceso, tokens de renovación y estados de autorización):

Almacenamiento en Memoria (Predeterminado)

El almacenamiento en memoria mantiene todos los datos OAuth en la memoria del servidor. Esta es la opción predeterminada y no requiere configuración adicional.

Características:

  • Persistencia: Los datos se pierden cuando el servidor se reinicia
  • Rendimiento: Acceso muy rápido ya que los datos se almacenan en memoria
  • Escalabilidad: Limitado a una única instancia del servidor
  • Configuración: No requiere dependencias adicionales
  • Ideal para: Desarrollo, pruebas o implementaciones de una sola instancia donde perder sesiones OAuth al reiniciar sea aceptable

Configuración:

OAUTH_STORE=memory  # Default value, can be omitted
Almacenamiento Redis

El almacenamiento Redis proporciona almacenamiento persistente para datos OAuth usando una base de datos Redis. Esto asegura que las sesiones OAuth sobrevivan a los reinicios del servidor y permite implementaciones de múltiples instancias.

Características:

  • Persistencia: Los datos persisten entre reinicios del servidor
  • Rendimiento: Acceso rápido con sobrecarga de red
  • Escalabilidad: Admite múltiples instancias del servidor que comparten la misma base de datos Redis
  • Configuración: Requiere instalación y configuración del servidor Redis
  • Ideal para: Implementaciones de producción, configuraciones de alta disponibilidad o cuando las sesiones OAuth deben persistir

Configuración:

# Enable Redis store for OAuth data
OAUTH_STORE=redis

# Redis connection settings (same as used for tools caching)
REDIS_ENDPOINT=localhost                  # Default: localhost
REDIS_PORT=6379                           # Default: 6379
REDIS_DB=0                                # Default: 0
REDIS_PASSWORD=your_redis_password        # Optional: Redis password
REDIS_POOL_MAX_SIZE=10                    # Default: 10

Comportamiento de Almacenamiento:

  • Información del Cliente: Almacenada de forma persistente
  • Estados OAuth: Almacenados con TTL (tiempo de vida) por seguridad
  • Códigos de Autorización: Almacenados con TTL y limpiados automáticamente después de su uso
  • Tokens de Acceso: Almacenados con caducidad automática según la vida útil del token
  • Tokens de Renovación: Almacenados de forma persistente hasta que se revoquen
  • Espacios de Nombres de Claves: Usa prefijos oauth:* para evitar conflictos con otros datos de Redis
Cifrado de Tokens (Requerido para Almacenamiento Redis)

Al usar almacenamiento Redis, debes configurar el cifrado para proteger los tokens OAuth en reposo. Los valores de los tokens se cifran usando Fernet (AES-128) y las claves de Redis usan hashes SHA-256 en lugar de tokens sin procesar, evitando la exposición de tokens si Redis se ve comprometido.

Generar una clave de cifrado:

python3 -c "import base64, os; print(base64.b64encode(os.urandom(32)).decode())"

Configuración:

# Single encryption key
OAUTH_ENCRYPTION_KEYS=<base64-encoded-32-byte-key>

# Multiple keys for rotation (first encrypts, all decrypt)
OAUTH_ENCRYPTION_KEYS=<new-key>,<old-key>

La rotación de claves permite actualizaciones de claves sin interrupciones: agrega la nueva clave primero, espera a que caduquen los tokens antiguos y luego elimina la clave antigua.

Notas Importantes:

  • Ambos almacenamientos usan la misma configuración de conexión Redis que el sistema de caché de herramientas
  • Al usar almacenamiento Redis, asegúrate de que tu instancia de Redis esté correctamente asegurada y accesible
  • La configuración OAUTH_STORE solo afecta el almacenamiento de datos OAuth; el caché de herramientas usa TOOLS_CACHE_ENABLED
  • El almacenamiento Redis usa serialización JSON para una mejor compatibilidad entre lenguajes y depuración

Autenticación

El Servidor MCP de Yandex Tracker admite múltiples métodos de autenticación con un orden de prioridad claro. El servidor usará el primer método de autenticación disponible según esta jerarquía:

Orden de Prioridad de Autenticación

  1. Token OAuth Dinámico (mayor prioridad)

    • Cuando OAuth está habilitado y un usuario se autentica mediante el flujo OAuth
    • Los tokens se obtienen y renuevan dinámicamente por sesión de usuario
    • Admite tanto OAuth estándar de Yandex como OAuth federativo de Yandex Cloud
    • Variables de entorno requeridas: OAUTH_ENABLED=true, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, MCP_SERVER_PUBLIC_URL
    • Variables adicionales para OAuth federativo: OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth, OAUTH_TOKEN_TYPE=Bearer, OAUTH_USE_SCOPES=false
  2. Token OAuth Bearer de Paso Directo

    • Cuando el middleware OAuth de MCP no proporciona un token, el servidor puede leer un token OAuth de Yandex del encabezado Authorization: Bearer <token> entrante
    • Útil detrás de un proxy inverso o puerta de enlace de confianza que autentica usuarios, resuelve su token OAuth de Yandex almacenado y lo inyecta por solicitud
    • El token de MCP OAuth aún tiene prioridad cuando el modo OAuth está habilitado y activo
  3. Token OAuth Estático

    • Token OAuth tradicional proporcionado mediante variable de entorno
    • Un solo token usado para todas las solicitudes
    • Variable de entorno requerida: TRACKER_TOKEN (tu token OAuth)
  4. Token IAM Estático

    • Token IAM (Identity and Access Management) para autenticación de servicio a servicio
    • Adecuado para sistemas automatizados y pipelines de CI/CD
    • Variable de entorno requerida: TRACKER_IAM_TOKEN (tu token IAM)
  5. Token IAM Dinámico (menor prioridad)

    • Se obtiene automáticamente usando credenciales de cuenta de servicio
    • El token se obtiene y renueva automáticamente
    • Variables de entorno requeridas: TRACKER_SA_KEY_ID, TRACKER_SA_SERVICE_ACCOUNT_ID, TRACKER_SA_PRIVATE_KEY

Escenarios de Autenticación

Escenario 1: OAuth con Tokens Dinámicos (Recomendado para Uso Interactivo)

# Enable OAuth mode
OAUTH_ENABLED=true
OAUTH_CLIENT_ID=your_oauth_app_id
OAUTH_CLIENT_SECRET=your_oauth_app_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com

# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Escenario 2: Token OAuth Estático (Configuración Simple)

# OAuth token
TRACKER_TOKEN=your_oauth_token

# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Escenario 3: Token Bearer de Paso Directo Detrás de un Proxy Inverso

Usa este modo cuando una puerta de enlace de confianza maneja la autenticación de usuarios, busca el token OAuth de Yandex del usuario y reenvía la solicitud al servidor MCP con ese token en el encabezado de la solicitud:

Authorization: Bearer <user_yandex_oauth_token>
# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Este token de paso directo se usa solo cuando el middleware OAuth de MCP no ha proporcionado un token de acceso para la solicitud. En implementaciones con OAuth habilitado y una sesión MCP OAuth activa, el token de MCP OAuth tiene prioridad.

Escenario 4: Token IAM Estático

# IAM token
TRACKER_IAM_TOKEN=your_iam_token

# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Escenario 5: Token IAM Dinámico con Cuenta de Servicio

# Service account credentials
TRACKER_SA_KEY_ID=your_key_id
TRACKER_SA_SERVICE_ACCOUNT_ID=your_service_account_id
TRACKER_SA_PRIVATE_KEY=your_private_key

# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Escenario 6: OAuth Federativo para Aplicaciones OIDC (Avanzado)

# Enable OAuth with Yandex Cloud federation
OAUTH_ENABLED=true
OAUTH_SERVER_URL=https://auth.yandex.cloud/oauth
OAUTH_TOKEN_TYPE=Bearer
OAUTH_USE_SCOPES=false
OAUTH_CLIENT_ID=your_oidc_client_id
OAUTH_CLIENT_SECRET=your_oidc_client_secret
MCP_SERVER_PUBLIC_URL=https://your-server.com

# Organization ID (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id  # or TRACKER_ORG_ID

Esta configuración permite la autenticación a través de aplicaciones OIDC de Yandex Cloud, que es necesaria para cuentas federadas en Yandex Cloud. Los usuarios federados se autentican a través del proveedor de identidad (IdP) de su organización y usan este flujo OAuth para acceder a las APIs de Yandex Tracker.

Notas Importantes

  • El servidor verifica los métodos de autenticación en el orden indicado anteriormente
  • Solo se usará un método de autenticación a la vez
  • Para uso en producción, se recomiendan tokens dinámicos (OAuth o IAM) para una mejor seguridad
  • Los tokens IAM tienen una vida útil más corta que los tokens OAuth y pueden requerir renovación más frecuente
  • Al usar cuentas de servicio, asegúrate de que la cuenta tenga los permisos apropiados para Yandex Tracker

Configuración

Variables de Entorno

# Authentication (use one of the following methods)
# Method 1: OAuth Token
TRACKER_TOKEN=your_yandex_tracker_oauth_token

# Method 2: IAM Token
TRACKER_IAM_TOKEN=your_iam_token

# Method 3: Service Account (for dynamic IAM token)
TRACKER_SA_KEY_ID=your_key_id                    # Service account key ID
TRACKER_SA_SERVICE_ACCOUNT_ID=your_sa_id        # Service account ID
TRACKER_SA_PRIVATE_KEY=your_private_key          # Service account private key

# Organization Configuration (choose one)
TRACKER_CLOUD_ORG_ID=your_cloud_org_id    # For Yandex Cloud organizations
TRACKER_ORG_ID=your_org_id                # For Yandex 360 organizations

# API Configuration (optional)
TRACKER_API_BASE_URL=https://api.tracker.yandex.net  # Default: https://api.tracker.yandex.net

# Security - Restrict access to specific queues (optional)
TRACKER_LIMIT_QUEUES=PROJ1,PROJ2,DEV      # Comma-separated queue keys - allow-list of accessible queues
TRACKER_READ_ONLY_QUEUES=PROJ2            # Comma-separated queue keys - allowed for reads but reject writes (per-queue read-only)

# Server Configuration
HOST=0.0.0.0                              # Default: 0.0.0.0
PORT=8000                                 # Default: 8000
TRANSPORT=stdio                           # Options: stdio, streamable-http, sse

# Redis connection settings (used for caching and OAuth store)
REDIS_ENDPOINT=localhost                  # Default: localhost
REDIS_PORT=6379                           # Default: 6379
REDIS_DB=0                                # Default: 0
REDIS_PASSWORD=your_redis_password        # Optional: Redis password
REDIS_POOL_MAX_SIZE=10                    # Default: 10

# Tools caching configuration (optional)
TOOLS_CACHE_ENABLED=true                  # Default: false
TOOLS_CACHE_REDIS_TTL=3600                # Default: 3600 seconds (1 hour)

# OAuth 2.0 Authentication (optional)
OAUTH_ENABLED=true                        # Default: false
OAUTH_STORE=redis                         # Options: memory, redis (default: memory)
OAUTH_SERVER_URL=https://oauth.yandex.ru  # Default: https://oauth.yandex.ru (use https://auth.yandex.cloud/oauth for federation)
OAUTH_TOKEN_TYPE=<Bearer|OAuth|<empty>>   # Default: <empty> (required to be Bearer for Yandex Cloud federation)
OAUTH_USE_SCOPES=true                     # Default: true (set to false for Yandex Cloud federation)
OAUTH_CLIENT_ID=your_oauth_client_id      # Required when OAuth enabled
OAUTH_CLIENT_SECRET=your_oauth_secret     # Required when OAuth enabled
MCP_SERVER_PUBLIC_URL=https://your.server.com  # Required when OAuth enabled
TRACKER_READ_ONLY=true                    # Default: false - Disable all write tools for the whole instance

Control de Acceso a Colas

El acceso a las colas se puede delimitar en tres niveles, de amplio a detallado:

  • TRACKER_LIMIT_QUEUES — lista de permitidos de claves de cola. Las colas fuera de la lista se tratan como no encontradas / no permitidas tanto para lecturas como para escrituras.
  • TRACKER_READ_ONLY — cuando true, todas las herramientas de escritura se dan de baja, por lo que toda la instancia es de solo lectura.
  • TRACKER_READ_ONLY_QUEUES — lista de permitidos de solo lectura por cola. Las herramientas de escritura permanecen registradas, pero cualquier llamada de mutación (crear/actualizar/mover/comentar/worklog/enlazar, creación de versión de cola) dirigida a una cola listada se rechaza, mientras que las lecturas siguen funcionando. Las colas no listadas aquí permanecen de lectura-escritura.

Esto permite que una única instancia sea de lectura-escritura en algunas colas y de solo lectura en otras al mismo tiempo — p. ej. TRACKER_LIMIT_QUEUES=DEV,MGMT junto con TRACKER_READ_ONLY_QUEUES=MGMT da acceso completo a DEV y visibilidad de solo lectura a MGMT. Esto es especialmente útil para una puerta de enlace MCP compartida donde los usuarios finales llegan a Tracker solo a través del servidor y nunca tienen el token sin procesar ellos mismos.

Estas comprobaciones son salvaguardas dentro del proceso. Para clientes que tienen el token sin procesar de Tracker directamente, los límites reales también deberían aplicarse en el propio token.

Despliegue con Docker

Usando la Imagen Precompilada (Recomendado)

# Using environment file
docker run --env-file .env -p 8000:8000 ghcr.io/aikts/yandex-tracker-mcp:latest

# With inline environment variables
docker run -e TRACKER_TOKEN=your_token \
           -e TRACKER_CLOUD_ORG_ID=your_org_id \
           -p 8000:8000 \
           ghcr.io/aikts/yandex-tracker-mcp:latest

Compilando la Imagen Localmente

docker build -t yandex-tracker-mcp .

Docker Compose

Usando la imagen precompilada:

version: '3.8'
services:
  mcp-tracker:
    image: ghcr.io/aikts/yandex-tracker-mcp:latest
    ports:
      - "8000:8000"
    environment:
      - TRACKER_TOKEN=${TRACKER_TOKEN}
      - TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}

Compilando localmente:

version: '3.8'
services:
  mcp-tracker:
    build: .
    ports:
      - "8000:8000"
    environment:
      - TRACKER_TOKEN=${TRACKER_TOKEN}
      - TRACKER_CLOUD_ORG_ID=${TRACKER_CLOUD_ORG_ID}

Configuración de Desarrollo

# Clone and setup
git clone https://github.com/aikts/yandex-tracker-mcp
cd yandex-tracker-mcp

# Install development dependencies
uv sync --dev

# Formatting and static checking
task

Licencia

Este proyecto está licenciado bajo los términos especificados en el archivo LICENSE.

Soporte

Para problemas y preguntas: