Backlog Remote MCP Server
Backlog Remote MCP Server
Backlog для удалённого MCP-сервера (Model Context Protocol). Можно развернуть либо на Cloudflare Workers, либо на AWS.
English | 日本語
Возможности
Multi-space — обслуживание нескольких пространств (spaces) Backlog с одного сервера
Режим только для чтения — пометка общего пространства как
readOnlyотклоняет любые записывающие вызовы APIOAuth 2.1 + PKCE — поддержка Dynamic Client Registration (DCR), поэтому MCP-клиенты подключаются напрямую
Список разрешённых email — ограничение круга пользователей сервера
Два окружения выполнения — одна и та же бизнес-логика работает на Cloudflare или AWS
Related MCP server: backlog-mcp-server
Выбор варианта развёртывания
Cloudflare Workers | AWS | |
Среда выполнения | Workers (edge) | Lambda (API Gateway HTTP API) |
Сессия MCP | Durable Objects | Stateless |
OAuth-сервер авторизации |
| MCP SDK |
Внешний IdP | Cloudflare Access | Amazon Cognito |
Хранение состояния | Workers KV | DynamoDB (TTL) |
Секреты | Workers Secrets (секреты) | Secrets Manager |
IaC | wrangler | AWS SAM |
Файл конфигурации |
|
|
Инструменты и их поведение в обоих вариантах идентичны.
Оценочная стоимость
Примечание Это лишь ориентировочные цифры. Фактические расходы зависят от региона, объёмов использования и изменений в тарифах. Для реальной оценки пользуйтесь официальными калькуляторами.
Допущения
Личное использование или небольшая команда.
Позиция | Допущение |
Пользователи | 1–5 |
MCP-запросы | ~3,000 / месяц |
Пространства Backlog | 3 |
Хранение логов | 30 дней |
Фиксированные расходы (даже при отсутствии нагрузки)
Cloudflare | AWS | |
Среда выполнения | $0 (подходит бесплатный тариф) | $0 |
Платформа авторизации | $0 (Zero Trust бесплатен до 50 пользователей) | $0 (в пределах бесплатного тарифа Cognito) |
Секреты | $0 (Workers Secrets — бесплатно) | ~$0.80 (2 секрета в Secrets Manager) |
Сертификаты | $0 | $0 (публичные сертификаты ACM — бесплатны) |
Итого | $0 | ~$1/мес |
Основные фиксированные расходы на AWS — практически только Secrets Manager, который тарифицируется за каждый секрет в месяц, независимо от того, используется ли он. Cloudflare не имеет фиксированных расходов, поскольку секреты Workers бесплатны.
Что оплачивается по факту
| Запросы | Workers | Lambda + API Gateway | | Хранение состояний | Durable Objects + KV | DynamoDB | | Логи | Workers Logs | CloudWatch Logs |
При предполагаемом объёме (~3 000 запросов/месяц) где оба варианта остаются в пределах бесплатных лимитов. У HTTP API API Gateway нет постоянного бесплатного тарифа, поэтому AWS начисляет небольшую сумму (примерно $1 за миллион запросов).
О порогах, которые стоит знать
Cloudflare — лимит 50 пользователей в Zero Trust
Zero Trust (Access) бесплатен для групп до 50 пользователей. Дальше требуется переход на платный тариф с тарификацией за каждого пользователя в месяц. Именно эти расходы растут вместе с числом сотрудников.
Cloudflare — лимиты бесплатного тарифа Workers
Этот проект использует Durable Objects на базе SQLite, которые доступны на бесплатном тарифе Workers. Бесплатный тариф ограничивает суточное число запросов и другие параметры использования, а при превышении лимита возвращаются ошибки. Для постоянной нагрузки стоит рассмотреть платный тариф Workers (от $5/мес).
AWS — бесплатный тариф Lambda бессрочен
Lambda включает бессрочный бесплатный тариф: 1 миллион запросов и 400 000 ГБ-секунд в месяц. API Gateway и Secrets Manager не имеют бессрочного бесплатного тарифа.
AWS — CloudWatch Logs
Логи оплачиваются по объёму принятых данных. В этом шаблоне срок хранения задаётся явно через
LogRetentionDays (по умолчанию 30), поэтому логи не копятся бесконечно.
Сводка
Масштаб | Cloudflare | AWS |
Личное использование | примерно $0 | ~$1/мес |
Десятки пользователей (≤50) | примерно $0–$5 | $1 – несколько долларов в месяц |
51+ пользователей | Zero Trust переводится на оплату за пользователя | зависит от бесплатного лимита Cognito MAU |
Для небольших команд Cloudflare дешевле и не имеет фиксированных расходов. AWS несёт фиксированные расходы на Secrets Manager, но это оправдано, если вы хотите вписаться в существующую инфраструктуру AWS или управлять доступом через IAM.
Настройка
0. Предварительные требования
Node.js версии 20 или более поздняя.
git clone <this-repo>
cd backlog-remote-mcp-server
npm installДополнительные инструменты зависят от выбранного варианта развёртывания:
Целевая платформа | Требования |
Cloudflare Workers | Аккаунт Cloudflare с включённым Workers, свой домен (необязательно) |
AWS | Аккаунт AWS, AWS CLI v2, AWS SAM CLI |
Порядок действий
Ключи API Backlog и настройка пространства — общие для обеих платформ
Выберите поставщика учётных записей (identity provider)
Выберите вариант развёртывания
Если что-то пошло не так
Раздел по устранению неполадок находится в конце каждого руководства по развёртыванию.
Архитектура
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 ...Структура каталогов
Бизнес-логика отделена от привязки к среде выполнения.
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зависит только от @modelcontextprotocol/sdk и zod и не ссылается на API среды выполнения. Добавление новой платформы — это добавление адаптера в src/platforms/ с повторным использованием тех же реализаций инструментов.
Подключение MCP-клиентов
Claude Desktop / Kiro / Cursor (через прокси mcp-remote)
{
"mcpServers": {
"backlog": {
"command": "npx",
"args": [
"mcp-remote",
"https://<MCP_HOSTNAME>/mcp"
]
}
}
}При первом подключении для аутентификации открывается окно браузера.
MCP Inspector (для тестирования)
npx @modelcontextprotocol/inspector@latestВведите https://<MCP_HOSTNAME>/mcp в инспекторе и завершите OAuth-проход через OAuth Settings (настройки OAuth).
Использование
Указание пространства
Все инструменты принимают необязательный параметр space:
# Use default space
"Show me the issues for PROJECT-KEY"
# Specify a particular space
"List projects in the PERSONAL space"
→ space: "PERSONAL"Примеры
# 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(...)Доступные инструменты
Категория | Инструменты |
Пространство | list_spaces, get_space, get_users, get_myself |
Проект | get_project_list, get_project, add_project, update_project, delete_project, get_project_users |
Задача (Issue) | 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_page_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 |
Уведомления | get_notifications, get_notification_count, reset_notification_count, mark_notification_as_read |
add_*, update_* и delete_* — операции, изменяющие данные. Вызов их для пространства с readOnly: true отклоняется ещё до отправки запроса к Backlog API. Через list_spaces можно увидеть статус readOnly каждого пространства.
Безопасность
Аутентификация: Cloudflare Access → Google / Microsoft Entra ID. Весь процесс OAuth управляется Cloudflare
Авторизация:
ALLOWED_EMAILSзадаёт список разрешённых адресов на уровне пользовательского уровняДвойная проверка обнаружения: политика доступа (на стороне Cloudflare) + список разрешённых внутри приложения (на стороне Worker)
Защита API-ключей: ключи API Backlog хранятся в Cloudflare Secrets и никогда не передаются клиентам
PKCE + CSRF: OAuth защищается PKCE (S256) и CSRF-токенами
Согласие клиента: Dynamic Client Registration открыта для всех, поэтому авторизация требует экрана согласия, где указан клиент и его redirect-цель, а подтверждение требует подтверждения CSRF-защиты. Одобренные заявки привязаны к паре
client_id+redirect_uri, поэтому повторная регистрация с другим redirect_uri не наследует предыдущее согласиеЗащита от записи: пространства с
readOnly: trueотклоняют все записи, кроме GET. Проверка находится в слое вызовов API вsrc/core/backlog-client.ts, поэтому она не зависит от отдельных инструментовИзоляция конфигурации: все значения окружения хранятся в
.dev.vars(не отслеживаются). В репозитории есть только заполнители.
Эксплуатационные заметки
ALLOWED_EMAILS— фактическая граница авторизации для этого сервера. Перед Worker нет приложения Access на уровне зоныnpm run deployперезаписывает production-секреты значениями из.dev.vars. Если локально и в production нужны разные значения, используйтеdeploy:no-secretsдля обычных развёртываний и явно отправляйте секреты черезsecrets:push.Ключ Backend API несёт все права своего владельца. Для пространств, где запись не нужна, используйте ключ только для чтения и укажите
readOnly: true.
Локальная разра разработка
Локальные запуски используют сборку Cloudflare Workers (wrangler dev). Поскольку бизнес-логика находится в src/core, всё, что проверяется здесь, касается и развёртывания на AWS.
cp .dev.vars.example .dev.vars # fill in your values
npm run dev
# Server starts at http://localhost:8788/mcpwrangler dev локально эмулирует KV и Durable Objects, поэтому не затрагивает реальные ресурсы Cloudflare.
Проверка настройки
Запустите полную проверку от OAuth до вызова инструмента одной командой:
npm run check:localОн выполняется автоматически, при этом часть процесса открывается браузер для входа: ...
Получить метаданные сервера авторизации
Динамическая регистрация клиента
Подтвердить в браузере → вход в IdP
Обмен токена с PKCE
initialize/tools/listВызвать
get_spaceи показать реальный ответ от Backlog
Если tools/list возвращает только access_denied, значит, email, с которым вы вошли, отсутствует в списке разрешённых.
Это также работает с развёрнутым endpoint:
npm run check:local -- --base https://your-deployed-hostРабота по HTTPS
Используйте это, когда IdP не принимает URL перенаправления http://.
npm run dev:https
# Server starts at https://localhost:8788/mcp (self-signed certificate)Проверка типов и тесты
Типы разделены по платформам, поэтому неправильное использование глобала Workers в коде AWS (или наоборот) является ошибкой типов.
npm run type-check # both tsconfig.cloudflare.json and tsconfig.aws.json
npm test # runs all suites belowКоманда | Покрытие |
| Логика сервера авторизации OAuth (DCR, PKCE, одноразовые токены, области, отзыв) |
| Экран согласия (экранирование HTML, подписанные cookie, CSRF, шлюз одобрения) |
| Хранилище DynamoDB: TTL регистрации клиента и её продление |
Ни один из них не обращается к внешним сервисам — DynamoDB и вышестоящий IdP заменены заглушками.
Файлы конфигурации
Файл | Назначение | Git |
| Локальная разработка + развёртывание Cloudflare | игнорируется |
| Шаблон для вышеуказанного | коммитится |
| Развёртывание AWS | игнорируется |
| Шаблон для вышеуказанного | коммитится |
См. руководства по развёртыванию, чтобы узнать, как их заполнить.
Лицензия
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