Backlog Remote MCP Server
Backlog Remote MCP Server
Un servidor MCP (Model Context Protocol) remoto para Backlog. Desplegable en Cloudflare Workers o AWS.
English | 日本語
Características
Multi-espacio — sirve varios espacios de Backlog desde un solo servidor
Guardia de solo lectura — marca un espacio compartido como
readOnlypara rechazar toda llamada de escritura a la APIOAuth 2.1 + PKCE — admite el registro dinámico de clientes (DCR), por lo que los clientes MCP se conectan directamente
Lista de permitidos por correo electrónico — restringe quién puede usar el servidor
Dos entornos de ejecución — la misma lógica de negocio se ejecuta en Cloudflare o AWS
Related MCP server: backlog-mcp-server
Elección del despliegue
Cloudflare Workers | AWS | |
Entorno de ejecución | Workers (edge) | Lambda + API Gateway HTTP API |
Sesión MCP | Durable Objects | Sin estado |
Servidor de autorización OAuth |
| MCP SDK |
Proveedor de identidad ascendente | Cloudflare Access | Amazon Cognito |
Almacenamiento de estado | Workers KV | DynamoDB (TTL) |
Secretos | Workers Secrets | Secrets Manager |
IaC | wrangler | AWS SAM |
Archivo de configuración |
|
|
Las herramientas y su comportamiento son idénticos en ambos.
Costo estimado
Nota Estas cifras son solo de referencia. Los cargos reales varían según la región, el uso y los cambios de precios. Usa las calculadoras oficiales para estimaciones reales.
Supuestos
Uso personal o un equipo pequeño.
Elemento | Supuesto |
Usuarios | 1–5 |
Solicitudes MCP | ~3,000 / mes |
Espacios de Backlog | 3 |
Retención de registros | 30 días |
Costos fijos (se cobran incluso en inactividad)
Cloudflare | AWS | |
Entorno de ejecución | $0 (El plan gratuito funciona) | $0 |
Plataforma de autenticación | $0 (Zero Trust gratuito hasta 50 usuarios) | $0 (dentro del nivel gratuito de Cognito) |
Secretos | $0 (Workers Secrets es gratuito) | ~$0.80 (2 secretos de Secrets Manager) |
Certificados | $0 | $0 (los certificados ACM públicos son gratuitos) |
Total | $0 | ~$1/mes |
En AWS, el costo fijo es esencialmente solo Secrets Manager, que factura por secreto al mes, se use o no. Cloudflare no tiene costo fijo porque Workers Secrets es gratuito.
Qué se mide
Cloudflare | AWS | |
Solicitudes | Workers | Lambda + API Gateway |
Almacenamiento de estado | Durable Objects + KV | DynamoDB |
Registros | Workers Logs | CloudWatch Logs |
Con el volumen supuesto (~3,000 solicitudes/mes), ambos se mantienen dentro de las asignaciones gratuitas. La API HTTP de API Gateway no tiene nivel gratuito perpetuo, por lo que AWS acumula un pequeño cargo proporcional al número de solicitudes (aproximadamente $1 por millón de solicitudes).
Umbrales que vale la pena conocer
Cloudflare — la línea de 50 usuarios para Zero Trust
Zero Trust (Access) es gratuito hasta 50 usuarios. Más allá de eso, pasas a un plan de pago que se factura por usuario al mes. Este es el costo que escala con el número de empleados.
Cloudflare — límites del plan gratuito de Workers
Este proyecto utiliza Durable Objects respaldados por SQLite, que están disponibles en el plan gratuito de Workers. El plan gratuito limita las solicitudes diarias y otros usos, y superar un límite devuelve errores. Para un uso sostenido, considera Workers de pago (desde $5/mes).
AWS — el nivel gratuito de Lambda es perpetuo
Lambda incluye un nivel gratuito perpetuo de 1M de solicitudes y 400,000 GB-segundos al mes. API Gateway y Secrets Manager no tienen nivel gratuito perpetuo.
AWS — CloudWatch Logs
Los registros se facturan según el volumen de ingesta. Esta plantilla gestiona la retención explícitamente mediante LogRetentionDays (por defecto 30), por lo que los registros no se acumulan indefinidamente.
Resumen
Escala | Cloudflare | AWS |
Personal | aproximadamente $0 | ~$1/mes |
Decenas de usuarios (≤50) | aproximadamente $0–$5 | $1 a unos pocos dólares al mes |
Más de 51 usuarios | Zero Trust cambia a facturación por usuario | depende del nivel gratuito de MAU de Cognito |
Para equipos pequeños, Cloudflare es más barato y no tiene costo fijo. AWS conlleva el costo fijo de Secrets Manager, pero vale la pena si quieres consolidarte en una infraestructura AWS existente o gobernar el acceso mediante IAM.
Configuración
0. Requisitos previos
Node.js 20 o posterior.
git clone <this-repo>
cd backlog-remote-mcp-server
npm installLas herramientas adicionales dependen del objetivo de despliegue:
Objetivo | Requisitos |
Cloudflare Workers | Cuenta de Cloudflare con Workers habilitado, dominio personalizado (opcional) |
AWS | Cuenta de AWS, AWS CLI v2, AWS SAM CLI |
Orden a seguir
Claves de API de Backlog y configuración del espacio — compartido por ambas plataformas
Elige un proveedor de identidad
Elige un objetivo de despliegue
Si algo sale mal
Las secciones de solución de problemas se encuentran al final de cada guía de despliegue.
Arquitectura
MCP client (Claude, Kiro, Cursor, ...)
↓ Streamable HTTP + OAuth
Runtime (Cloudflare Workers or AWS Lambda)
↓ Upstream IdP (Cloudflare Access or Amazon Cognito)
↓ Email allowlist check
↓ Backlog API key routing
Backlog space A / B / C ...Estructura de directorios
La lógica de negocio está separada del cableado del entorno de ejecución.
src/
core/ Runtime-independent
backlog-client.ts Backlog API client (including the readOnly guard)
tools/ 40 MCP tools
create-server.ts MCP server assembly and authorization
platforms/
cloudflare/ Cloudflare Workers wiring
aws/ AWS Lambda wiring
infra/
aws/ SAM template and parameterssrc/core depende solo de @modelcontextprotocol/sdk y zod y no hace referencia a ninguna API específica del entorno de ejecución. Añadir una plataforma significa añadir un adaptador en src/platforms/ mientras se comparten las mismas implementaciones de herramientas.
Conexión desde clientes MCP
Claude Desktop / Kiro / Cursor (a través del proxy mcp-remote)
{
"mcpServers": {
"backlog": {
"command": "npx",
"args": [
"mcp-remote",
"https://<MCP_HOSTNAME>/mcp"
]
}
}
}En la primera conexión, se abre una ventana del navegador para la autenticación.
MCP Inspector (para pruebas)
npx @modelcontextprotocol/inspector@latestIntroduce https://<MCP_HOSTNAME>/mcp en el inspector y completa el flujo OAuth mediante la configuración de OAuth.
Uso
Especificar un espacio
Todas las herramientas aceptan un parámetro opcional space:
# Use default space
"Show me the issues for PROJECT-KEY"
# Specify a particular space
"List projects in the PERSONAL space"
→ space: "PERSONAL"Ejemplos
# List configured spaces
"What Backlog spaces are available?" → list_spaces
# List projects
"Show COMPANY_A projects" → get_project_list(space: "COMPANY_A")
# Create an issue
"Create a new bug issue in PROJECT-KEY" → add_issue(...)
# List pull requests
"Show open PRs in repo-name" → get_pull_requests(...)Herramientas disponibles
Categoría | Herramientas |
Espacio | list_spaces, get_space, get_users, get_myself |
Proyecto | get_project_list, get_project, add_project, update_project, delete_project, get_project_users |
Problema | get_issue, get_issues, count_issues, add_issue, update_issue, delete_issue, get_issue_comments, add_issue_comment, get_priorities, get_issue_types, get_categories, get_version_milestones, add_version_milestone, get_resolutions |
Wiki | get_wiki_pages, get_wikis_count, get_wiki, add_wiki |
Git | get_git_repositories, get_git_repository, get_pull_requests, get_pull_request, add_pull_request, update_pull_request, get_pull_request_comments, add_pull_request_comment |
Notificación | get_notifications, get_notifications_count, reset_unread_notification_count, mark_notification_as_read |
add_*, update_* y delete_* son operaciones de escritura. Llamarlas contra un espacio configurado con readOnly: true se rechaza antes de que cualquier solicitud llegue a la API de Backlog. Usa list_spaces para ver el estado readOnly de cada espacio.
Seguridad
Autenticación: Cloudflare Access → Google / Microsoft Entra ID. Todo el flujo OAuth es gestionado por Cloudflare
Autorización:
ALLOWED_EMAILSproporciona una lista de permitidos por correo electrónico a nivel de aplicaciónDoble verificación: Política de acceso (lado de Cloudflare) + lista de permitidos en la aplicación (lado del Worker)
Protección de claves de API: Las claves de API de Backlog se almacenan en Cloudflare Secrets y nunca se exponen a los clientes
PKCE + CSRF: El flujo OAuth está protegido con PKCE (S256) y tokens CSRF
Consentimiento del cliente: El registro dinámico de clientes está abierto a cualquiera, por lo que la autorización se controla mediante una pantalla de consentimiento que nombra al cliente y su destino de redirección y requiere una aprobación protegida por CSRF. Las aprobaciones se basan en
client_id+redirect_uri, por lo que volver a registrarse con un destino de redirección diferente no puede heredar una aprobación anteriorGuardia de escritura: Los espacios marcados con
readOnly: truerechazan toda llamada que no sea GET. La verificación se encuentra en la capa de llamadas a la API desrc/core/backlog-client.ts, por lo que no depende de implementaciones individuales de herramientasAislamiento de configuración: Todos los valores específicos del entorno se encuentran en
.dev.vars(sin seguimiento). El repositorio contiene solo marcadores de posición
Notas operativas
ALLOWED_EMAILSes el límite de autorización efectivo para este servidor. No hay ninguna aplicación de Access a nivel de zona delante del Workernpm run deploysobrescribe los secretos de producción con los valores de.dev.vars. Si necesitas valores diferentes localmente y en producción, usadeploy:no-secretspara despliegues rutinarios y envía los secretos explícitamente consecrets:pushUna clave de API de Backlog conlleva los permisos completos de su propietario. Para espacios que no necesitan escrituras, emite una clave de solo lectura y establece
readOnly: true
Desarrollo local
Las ejecuciones locales usan la compilación de Cloudflare Workers (wrangler dev). Como la lógica de negocio vive en src/core, todo lo que verifiques aquí también se aplica al despliegue en AWS.
cp .dev.vars.example .dev.vars # fill in your values
npm run dev
# Server starts at http://localhost:8788/mcpwrangler dev emula KV y Durable Objects localmente, por lo que nunca toca recursos reales de Cloudflare.
Verificar la configuración
Ejecuta la verificación completa de OAuth a llamada de herramienta en un solo comando:
npm run check:localRealiza lo siguiente, abriendo un navegador a mitad de camino para que puedas iniciar sesión:
Obtener los metadatos del servidor de autorización
Registro dinámico de clientes
Aprobar en el navegador → inicio de sesión del IdP
Intercambio de tokens con PKCE
initialize/tools/listLlamar a
get_spacey mostrar la respuesta real de Backlog
Si tools/list devuelve solo access_denied, el correo con el que iniciaste sesión no está en la lista de permitidos.
También funciona contra un endpoint desplegado:
npm run check:local -- --base https://your-deployed-hostEjecución sobre HTTPS
Úsalo cuando el IdP no acepte una URL de redirección http://.
npm run dev:https
# Server starts at https://localhost:8788/mcp (self-signed certificate)Comprobación de tipos y pruebas
Los tipos están divididos por plataforma, por lo que usar incorrectamente un global de Workers en código de AWS (o viceversa) es un error de tipo.
npm run type-check # both tsconfig.cloudflare.json and tsconfig.aws.json
npm test # runs all suites belowComando | Cubre |
| Lógica del servidor de autorización OAuth (DCR, PKCE, tokens de un solo uso, ámbitos, revocación) |
| Pantalla de consentimiento (escapado HTML, cookies firmadas, CSRF, puerta de aprobación) |
| Almacén DynamoDB de TTL de registro de clientes y renovación |
Ninguna de ellas llega a servicios externos: DynamoDB y el IdP ascendente están simulados.
Archivos de configuración
Archivo | Propósito | Git |
| Desarrollo local + despliegue en Cloudflare | ignorado |
| Plantilla del anterior | confirmado |
| Despliegue en AWS | ignorado |
| Plantilla del anterior | confirmado |
Consulta las guías de despliegue para saber cómo rellenarlos.
Licencia
MIT
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with Bitbucket Cloud repositories, allowing users to manage pull requests, comments, tasks, and branches through natural language commands.4,1381MIT
- AlicenseBqualityDmaintenanceEnables interaction with Backlog project management tools, allowing users to manage projects, issues, and wikis through natural language.1233,209MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Atlassian Cloud APIs for Confluence and Jira, supporting document management, search, issue tracking, and sprint operations through natural language.2MIT
- 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 AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
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/midnight480/backlog-remote-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server