Skip to main content
Glama
midnight480

Backlog Remote MCP Server

by midnight480

Backlog Remote MCP Server

Backlog для удалённого MCP-сервера (Model Context Protocol). Можно развернуть либо на Cloudflare Workers, либо на AWS.

English | 日本語

Возможности

  • Multi-space — обслуживание нескольких пространств (spaces) Backlog с одного сервера

  • Режим только для чтения — пометка общего пространства как readOnly отклоняет любые записывающие вызовы API

  • OAuth 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-сервер авторизации

@cloudflare/workers-oauth-provider

MCP SDK mcpAuthRouter

Внешний IdP

Cloudflare Access

Amazon Cognito

Хранение состояния

Workers KV

DynamoDB (TTL)

Секреты

Workers Secrets (секреты)

Secrets Manager

IaC

wrangler

AWS SAM

Файл конфигурации

.dev.vars

infra/aws/params.yaml

Инструменты и их поведение в обоих вариантах идентичны.

Оценочная стоимость

Примечание Это лишь ориентировочные цифры. Фактические расходы зависят от региона, объёмов использования и изменений в тарифах. Для реальной оценки пользуйтесь официальными калькуляторами.

Допущения

Личное использование или небольшая команда.

Позиция

Допущение

Пользователи

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

Порядок действий

  1. Ключи API Backlog и настройка пространства — общие для обеих платформ

  2. Выберите поставщика учётных записей (identity provider)

  3. Выберите вариант развёртывания

Если что-то пошло не так

Раздел по устранению неполадок находится в конце каждого руководства по развёртыванию.

Архитектура

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 parameters

src/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/mcp

wrangler dev локально эмулирует KV и Durable Objects, поэтому не затрагивает реальные ресурсы Cloudflare.

Проверка настройки

Запустите полную проверку от OAuth до вызова инструмента одной командой:

npm run check:local

Он выполняется автоматически, при этом часть процесса открывается браузер для входа: ...

  1. Получить метаданные сервера авторизации

  2. Динамическая регистрация клиента

  3. Подтвердить в браузере → вход в IdP

  4. Обмен токена с PKCE

  5. initialize / tools/list

  6. Вызвать 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

Команда

Покрытие

npm run test:aws-oauth

Логика сервера авторизации OAuth (DCR, PKCE, одноразовые токены, области, отзыв)

npm run test:aws-consent

Экран согласия (экранирование HTML, подписанные cookie, CSRF, шлюз одобрения)

npm run test:aws-store

Хранилище DynamoDB: TTL регистрации клиента и её продление

Ни один из них не обращается к внешним сервисам — DynamoDB и вышестоящий IdP заменены заглушками.

Файлы конфигурации

Файл

Назначение

Git

.dev.vars

Локальная разработка + развёртывание Cloudflare

игнорируется

.dev.vars.example

Шаблон для вышеуказанного

коммитится

infra/aws/params.yaml

Развёртывание AWS

игнорируется

infra/aws/params.example.yaml

Шаблон для вышеуказанного

коммитится

См. руководства по развёртыванию, чтобы узнать, как их заполнить.

Лицензия

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/midnight480/backlog-remote-mcp-server'

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