atlassian-mcp
atlassian-mcp
Un servidor Model Context Protocol (MCP) para Jira autoalojado (Server / Data Center) y Bitbucket autoalojado (Server / Data Center). Expone herramientas para flujos de trabajo en lenguaje natural en torno a tickets, pull requests, hilos de revisión y contexto de git.
Nota: Este servidor solo admite instancias autoalojadas. Jira Cloud y Bitbucket Cloud usan APIs diferentes y no son compatibles.
Herramientas
Flujo de trabajo
Herramienta | Descripción |
| Punto de entrada principal: estado de git + ticket de Jira vinculado + PR abierto con estado de revisor/bloqueador y sugerencias de siguientes pasos |
| Inicia un ticket de Jira: lo obtiene, crea una rama local ( |
| Cierra el trabajo terminado: fusiona el PR abierto y mueve el ticket de Jira a Done |
Git
Herramienta | Descripción |
| Rama, estado del upstream, URL del remoto, commits recientes, estado del árbol de trabajo, estadísticas de diff y claves de Jira en el nombre de la rama |
| Diff de cambios sin confirmar o entre dos refs; admite paginación mediante |
Jira
Herramienta | Descripción |
| Descubre recursos: |
| Detalles completos de una incidencia: resumen, descripción, estado, sprint, transiciones, comentarios y lista de adjuntos |
| Obtiene un adjunto de Jira por ID. Las imágenes, vídeos, imágenes animadas (GIF/APNG/WebP animado), audio y PDF se decodifican en línea para que el modelo pueda verlos/escucharlos. Texto/JSON en línea. Los adjuntos sobredimensionados o no renderizables se guardan automáticamente en un archivo temporal y se devuelve la ruta. |
| Crear, actualizar, transicionar, comentar, vincular, añadir a sprint o registrar trabajo, todo en una sola llamada |
| Añadir, actualizar o eliminar un comentario en una incidencia ( |
| Gestionar versiones de corrección/lanzamientos ( |
Bitbucket
Herramienta | Descripción |
| Descubre recursos: |
| Detalles completos del PR: metadatos, commits, comentarios, bloqueadores, estado de build, diff opcional y cualquier adjunto referenciado desde la descripción o los comentarios |
| Obtiene un adjunto del repositorio por ID. Mismo pipeline de decodificación que |
| Crear/actualizar un PR, o realizar acciones del ciclo de vida: |
| Añadir, actualizar o eliminar un comentario en un PR; para cambios de código usa |
| Contenido de archivo sin procesar desde Bitbucket en una rama, etiqueta o commit |
| Gestionar tareas del PR (elementos de la lista de verificación): |
Ejemplos de lenguaje natural
"¿en qué estoy trabajando?" →
get_dev_context"crea una rama para FOO-123" →
start_work"publica esto / fusiona y cierra el ticket" →
complete_work"muestra mis PRs pendientes de revisión" →
bitbucket_searchwithmine=true"lista los PRs abiertos de este repositorio desde feature/ABC-123" →
bitbucket_searchwithfromBranch"dame una visión completa del PR 42" →
bitbucket_get_pr"abre un PR desde mi rama actual a master" →
bitbucket_mutatewithcreate"aprobar / fusionar / rechazar el PR 42" →
bitbucket_mutatewithaction"responder al comentario 123 en el PR 42" →
bitbucket_commentwithcommentId=123"resolver este bloqueador en el PR 42" →
bitbucket_commentwithaction=update,severity=BLOCKER,state=RESOLVED"listar las tareas de la lista de verificación del PR" →
bitbucket_pr_taskswithaction=list"encontrar bugs asignados a mí en el proyecto PAY" →
jira_searchwithmine=true,issueType=Bug"¿qué hay en el sprint actual?" →
jira_searchwithresource=board_overview"mover FOO-123 a In Progress" →
jira_mutatewithtransitionName="In Progress""registrar 2h en FOO-123" →
jira_mutatewithworklog"crear la versión 9.1.0 en PAY" →
jira_versionwithaction=create,projectKey=PAY,name=9.1.0"listar los lanzamientos de PAY" →
jira_searchwithresource=versions,project=PAY"publicar la versión 12345" →
jira_versionwithaction=release,id=12345"establecer la versión de corrección 9.1.0 en FOO-123" →
jira_mutatewithupdate.fixVersion=9.1.0"crear una tarea bajo la épica FOO-100" →
jira_mutatewithcreate.issueType=Task,create.parent=FOO-100(detecta automáticamente la épica y establece Epic Link)"mover FOO-123 bajo la épica FOO-100" →
jira_mutatewithupdate.epicLink=FOO-100"crear una épica" →
jira_mutatewithcreate.issueType=Epic(Epic Name se establece por defecto al resumen)"establecer los story points en 5" →
jira_mutatewithupdate.customFields={"Story Points": 5}— los valores son simples (etiqueta de opción, nombre de usuario, fecha, array de etiquetas); el servidor los envuelve según el esquema del campo"¿qué puedo establecer en este ticket / en una épica?" →
jira_search resource=fieldswithissueKey=FOO-123(pantalla de edición) oproject=FOO+issueType=Epic(pantalla de creación): campos obligatorios y opcionales, formas de los valores, valores permitidos
Related MCP server: Bitbucket Server MCP
Configuración
1. Crea un archivo de configuración
Crea ~/.atlassian-mcp.json:
{
"$schema": "https://raw.githubusercontent.com/stubbedev/atlassian-mcp/master/atlassian-mcp.schema.json",
"jira": {
"url": "https://jira.example.com",
"token": "your-jira-personal-access-token"
},
"bitbucket": {
"url": "https://bitbucket.example.com",
"token": "your-bitbucket-personal-access-token"
}
}El campo $schema es opcional, pero permite el autocompletado y la validación en el editor.
projectKeysignifica un código de proyecto:Ejemplo de Jira:
PAYen el ticketPAY-123Ejemplo de Bitbucket: proyecto
ENGen la ruta de repositorioENG/payments-service
También puedes usar alias ergonómicos:
Jira:
project(alias deprojectKey)Bitbucket:
projectyrepo(alias deprojectKeyyrepoSlug)
Para las herramientas de Bitbucket,
projectKeyyrepoSlugse suelen detectar automáticamente desde tu remotooriginlocal.bitbucket_create_pull_requesttambién detecta automáticamentefromBranchdesde tu rama actual y devuelve el PR abierto existente si ya hay uno para esa rama.Las llamadas de Jira con ámbito de proyecto aceptan
projectKeyy funcionan mejor cuando se proporciona.Si se omite
projectKeypara la creación de incidencias o la consulta de tipos en Jira, el servidor intenta inferirlo a partir de la clave de ticket de tu rama actual; si solo hay un proyecto visible, recurre a la selección automática; de lo contrario, devuelve una lista numerada de proyectos para elegir.
Alternativamente, usa variables de entorno (o un archivo .env en este directorio):
JIRA_URL=https://jira.example.com
JIRA_ACCESS_TOKEN=your-jira-personal-access-token
BITBUCKET_URL=https://bitbucket.example.com
BITBUCKET_ACCESS_TOKEN=your-bitbucket-personal-access-tokenLa configuración se resuelve en este orden: argumento CLI --config <path> → variable de entorno ATLASSIAN_MCP_CONFIG → ~/.atlassian-mcp.json → $XDG_CONFIG_HOME/atlassian-mcp/config.json (por defecto ~/.config/atlassian-mcp/config.json) → .atlassian-mcp.json en el directorio de trabajo actual → variables de entorno.
2. Conecta a tu herramienta de IA
No se requiere clonar ni compilar: solo apunta tu herramienta a npx @stubbedev/atlassian-mcp@latest y se instalará y ejecutará automáticamente.
Nota:
--prefer-onlinepuede romper el inicio de MCP en algunos clientes. Mantén el comando simple y usa los pasos de actualización a continuación cuando quieras actualizar.
Claude Code
claude mcp add atlassian -- npx -y @stubbedev/atlassian-mcp@latest --config ~/.atlassian-mcp.jsonCursor
Añade a ~/.cursor/mcp.json (global) o .cursor/mcp.json (solo proyecto):
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": ["-y", "@stubbedev/atlassian-mcp@latest", "--config", "/Users/you/.atlassian-mcp.json"]
}
}
}Windsurf
Añade a ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": ["-y", "@stubbedev/atlassian-mcp@latest", "--config", "/Users/you/.atlassian-mcp.json"]
}
}
}Zed
Añade a ~/.config/zed/settings.json:
{
"context_servers": {
"atlassian": {
"command": {
"path": "npx",
"args": ["-y", "@stubbedev/atlassian-mcp@latest", "--config", "/home/you/.atlassian-mcp.json"]
}
}
}
}OpenCode
Añade a opencode.json en la raíz de tu proyecto (o ~/.config/opencode/opencode.json para global):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"atlassian": {
"type": "local",
"command": ["npx", "-y", "@stubbedev/atlassian-mcp@latest", "--config", "/home/you/.atlassian-mcp.json"]
}
}
}Codex CLI
Añade a ~/.codex/config.yaml:
mcpServers:
atlassian:
command: npx
args:
- -y
- @stubbedev/atlassian-mcp@latest
- --config
- /home/you/.atlassian-mcp.jsonCualquier otra herramienta compatible con MCP
La mayoría de las herramientas que admiten MCP aceptan el mismo formato JSON. Usa npx como comando con ["-y", "@stubbedev/atlassian-mcp@latest", "--config", "/path/to/config.json"] como argumentos.
Actualizar instalaciones existentes
Si tu cliente MCP ya está configurado y quieres la versión más reciente del paquete:
npx clear-npx-cacheA continuación, reinicia tu cliente MCP.
Instalar sin npm
El servidor es un único binario estático de Go. La ruta con npx de arriba descarga el binario precompilado para tu plataforma en la primera ejecución; estas alternativas omiten Node por completo:
# Go toolchain — installs to $GOBIN / $GOPATH/bin
go install github.com/stubbedev/atlassian-mcp@latest
# Nix flake
nix run github:stubbedev/atlassian-mcp -- --config ~/.atlassian-mcp.jsonLuego apunta el command de tu cliente MCP al binario atlassian-mcp resultante, en lugar de npx. En estas rutas, ffmpeg/ffprobe deben estar disponibles en PATH (o define ATLASSIAN_MCP_FFMPEG_PATH / ATLASSIAN_MCP_FFPROBE_PATH); el envoltorio de npm los incluye automáticamente.
Ejecutar como servidor HTTP (compartido / detrás de un proxy)
Por defecto, el servidor habla MCP sobre stdio (un proceso por cliente, lanzado por tu editor). También puede ejecutarse como un servidor Streamable HTTP de larga duración que comparten muchos clientes, útil detrás de un proxy inverso:
atlassian-mcp --http # binds 127.0.0.1:7337
atlassian-mcp --http 127.0.0.1:9000 # custom address
ATLASSIAN_MCP_HTTP=1 atlassian-mcp # same, via envUn único endpoint
POST /mcp(JSON-RPC) más un flujo SSE opcionalGET /mcpque transporta las peticiones servidor→cliente (roots/list, elicitación). El servidor es con estado:initializecrea una sesión y devuelve una cabeceraMcp-Session-Id, que el cliente debe repetir en cada petición posterior y en el flujo SSE. Las peticiones con un id de sesión ausente/desconocido/expirado reciben un HTTP 404 para que el cliente se reinicialice (comportamiento estándar de los clientes MCP). Cada cliente/worktree conectado es una sesión aislada.Autenticación: en un enlace de loopback no se necesita token. Enlazar una dirección que no sea loopback requiere
ATLASSIAN_MCP_HTTP_TOKEN(los clientes lo envían comoAuthorization: Bearer …); de lo contrario, el servidor se niega a arrancar. Termina la TLS en tu proxy.GET /healthzes una sonda de actividad sin autenticar (devuelveok) para proxies/balanceadores de carga. Las sesiones inactivas se eliminan a después de 1 h.
El contexto del repositorio proviene del cliente, no del directorio de trabajo del servidor. Las herramientas que necesitan un repositorio (las herramientas git_*, get_dev_context, start_work, complete_work y la auto-detección de proyecto/repositorio de Bitbucket) lo resuelven en este orden: un argumento repoPath explícito → una raíz fijada mediante cabecera de petición (ver debajo) → las raíces del espacio de trabajo MCP del cliente (el servidor lo pide vía roots/list, las caché por sesión y las refresca con notifications/roots/list_changed) → el cwd del proceso (solo stdio). Así, un servidor HTTP compartido único maneja muchos worktrees: el workspace de cada cliente dirige sus llamadas. Cuando una sesión expone varias raíces (múltiples worktrees), una herramienta sin repoPath usa la primera raíz que sea un repositorio git; pasa repoPath (una ruta absoluta o un nombre/basename de worktree que coincida con una de las raíces) para dirigirte a un worktree concreto. Para Bitbucket, pasar projectKey+repoSlug explícitamente omite por completo la detección de repositorios. Los repositorios deben ser accesibles desde el host del servidor (las herramientas git ejecutan git localmente).
Fijar la raíz a través de una cabecera de petición (HTTP). Un proxy inverso o un harness que ya conozca el árbol de trabajo puede pasárselo directamente al servidor, evitando ir y volver con roots/list (y funcionando incluso cuando el cliente nunca anunció la capability roots). Envía un URI file:// o una ruta absoluta (separadas por comas para varias; gana la primera git repo):
X-Mcp-Root: file:///srv/myrepo
X-Mcp-Roots: /srv/a, /srv/bNombres de cabecera aceptados: X-Mcp-Roots, X-Mcp-Root, Mcp-Roots, Mcp-Root. El valor de una cabecera es autoritativo: prevalece sobre roots/list y sobrevive a list_changed.
Configuración de cliente para un servidor HTTP ya en marcha (ejemplo te con Claude Code):
claude mcp add --transport http atlassian http://127.0.0.1:7337/mcpProceso de decodificación de archivos adjuntos
Las herramientas de adjuntos (jira_get_attachment, bitbucket_get_attachment) decodifican los adjuntos binarios en contenido legible por el modelo antes de devolverlos:
Entrada | Qué se devuelve | Cómo |
Imágenes estáticas (PNG/JPEG/WebP/BMP/TIFF/GIF/SVG…) | Bloques de contenido de imagen redimensionados | Go nativo ( |
Imágenes animadas (GIF/APNG/WebP animado) | N fotogramas muestreados como bloques de contenido de imagen |
|
Vídeo (mp4/webm/mov/…) | N fotogramas muestreados como bloques de contenido de imagen |
|
Audio (mp3/wav/ogg/…) | Bloque de contenido de audio MCP | passthrough |
PDFs | Texto extraído — o páginas rasterizadas para textos vacíos (PDFs escaneados) | Extracción de texto en Go nativo ( |
Similares a texto (json/xml/yaml/…) | Bloque de contenido de texto | passthrough |
Todo lo demás (o demasiado grande) | Guardado automáticamente en un archivo temporal; se devuelve su ruta |
|
Los archivos guardados automáticamente se cortan de forma periódica por TTL y cuota de tamaño total; consulta Anulaciones de entorno más abajo.
Herramientas externas (opcionales)
La decodificación de imágenes y del texto de los PDF es Go puro y no necesita nada posterior a su instalación. Las dos tuberías que no tienen implementación en Go puro llaman a binarios externos:
ffmpeg+ffprobe— muestreo de fotogramas de vídeo e imágenes animadas. El envoltorio de npm incluyeffmpeg-static/ffprobe-statice inyecta sus rutas, así que el camino de instalación connpxno requiere configuración. En las rutas dego install/ Nix, instalaffmpeg(que incluyeffprobe) o define las variables de entorno de abajo.pdftoppm(poppler) omutool(MuPDF) — solo se necesitan para rasterizar los PDFs escaneados sin texto extraíble. Si, si no encuentras ninguno enPATH, esos PDFs se guardan en disco.
Anulaciones de entorno
Variable | Viaje | Default Default |
| Ejecutar como servidor HTTP | sin definir (stdio) |
| Token Bearer para el modo HTTP. Opcional en enlaces de loopback; necesario en enlaces que no son loopback. | sin definir |
| Ruta al binario | npm: |
| Ruta al binario | npm: |
| Los adjuntos auto-guardados anteriores a esto se eliminan. |
|
| Cuota de tamaño total para archivos adjuntos auto-guardados en |
|
Lanzamientos (Mantenedores)
Este paquete se publica en npm como @stubbedev/atlassian-mcp.
Usa versionado semántico para los lanzamientos. Los cambios que afecten a la superficie de las herramientas deben incrementar la versión múltiple mientras sea <1.0.0 (por ejemplo, 0.0.x -> 0.1.0).
Al hacer push de un tag v*, .github/workflows/publish.yml recopila de manera cruzada el binario de Go para 14 plataformas/arquitecturas, lo adjunta a un release de GitHub y publica el envoltorio npm (que descarga el binario correspondiente al instalar).
Flujo de lanzamiento:
# choose one: patch | minor | major (also: npm run release:patch / :minor / :major)
npm version patch # bumps package.json, commits, tags vX.Y.Z
git push origin HEAD --follow-tagsflake.nix lee su versión desde package.json, por lo que el paquete Nix sigue automáticamente esa subida de versión. GitHub Actions compiles + publica a partir del tag enviado.
El flujo de trabajo está configurado para npm Trusted Publisher (OIDC), por lo que no se necesita secreto
NPM_TOKEN
Configuración npm necesaria (una sola vez):
En los ajustes del paquete npm, añade este repo/flujo de GitHub como Trusted Publisher.
Creación de tokens de acceso personal
Jira Server / Data Center
Los tokens de acceso personal están soportados a a partir de Jira 8.14.
Inicia sesión en tu instancia de Jira.
Haz clic en el avatar de tu perfil en la esquina superior derecha y selecciona Perfil.
En la barra lateral izquierda, haz clic en Tokens de acceso personal.
Haz clic en Crear token.
Ponle un nombre al token (por ejemplo,
atlassian-mcp) y, si quieres, fija una fecha de caducidad.Haz clic en Crear y copia el token; solo se mostrará una vez.
Pega el token como el valor token bajo jira en tu archivo de configuración.
Si tu versión de Jira es anterior a 8.14, puedes usar HTTP Basic Auth en su lugar, pero este servidor solo admite autenticación con token Bearer (PAT).
Bitbucket Server / Data Center
Los tokens de acceso personal están soportados desde Bitbucket Server 5.5.
Inicia sesión en tu instancia de Bitbucket.
Haz clic en el avatar de tu perfil en la esquina superior derecha y selecciona Administrar cuenta.
En la barra lateral izquierda, bajo Seguridad, haz clic en Tokens de acceso personal.
Haz clic en Crear un token.
Ponle un nombre al token (por ejemplo,
atlassian-mcp).Configura los permisos:
Proyectos: Lectura
Repositorios: Lectura + Escritura (la escritura es necesaria para crear pull requests y añadir comentarios)
Opcionalmente, fija una fecha de caducidad.
Haz clic en Crear y copia el token; solo se mostrará una vez.
Pega el token como el valor token bajo bitbucket en tu archivo de configuración.
Desarrollo
El servidor es un único módulo de Go en la raíz del repositorio (sin árbol src/).
# Build the binary
go build -o atlassian-mcp .
# Run it
./atlassian-mcp --config /path/to/config.json
# Vet + unit tests
go vet ./...
go test ./...
# Test the tool list
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | ./atlassian-mcp
# Quick release smoke check (build + tools/list validation)
npm run smokeMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Bitbucket Cloud and self-hosted instances for pull request reviews, code search, repository operations, and managing PR comments and approvals.19GPL 3.0
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Bitbucket Server/Data Center for reviewing pull requests, managing repositories, searching users, and more.1494MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with self-hosted Jira instances for issue management, search, comments, and workflow transitions.19MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with Atlassian Cloud (Jira, Confluence, Bitbucket) through natural language, providing CRUD operations for issues, pages, pull requests, and more.8620MIT
Related MCP Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Git-backed platform for skills, tools, and context for AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/stubbedev/atlassian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server