BCS MCP Atlassian
Форк sooperset/mcp-atlassian: MCP-сервер для Jira и Confluence.
Оригинальный README в переводе вынесен отдельно: Readme.original.ru.md. Этот файл описывает именно BCS-форк: что добавлено, как использовать, как дорабатывать и как публиковать.
Что Это За Проект
Репозиторий предоставляет Jira/Confluence tools через Model Context Protocol (MCP). Форк ориентирован на BCS-инфраструктуру и внутренние сценарии:
- дефолты для
jira.bcs.ruиconfluence.bcs.ru; - long-running HTTP MCP service через
streamable-http; - Docker-first разработка без Python/uv на хосте;
- GitLab CI pipeline: wheel -> unit tests -> Docker image -> GitLab Container Registry;
- маскирование контента через
CONTENT_MASK_SERVICE_URL.
Что Добавлено В Форке
Dockerfile.localдля локальной сборки из исходников.Dockerfile.ciдля CI/prod-style образа из готового wheel.- Скрипты локальной Docker-разработки:
scripts/docker_test_local_docker.shscripts/docker_build_local_ci.shscripts/docker_run_local.shscripts/docker_package_wheel_local.sh
.gitlab-ci.ymlдля сборки wheel, тестов и публикации Docker image.- Runtime-дефолты в Docker image:
JIRA_URL=https://jira.bcs.ruCONFLUENCE_URL=https://confluence.bcs.ru- выбранные
TOOLSETS/ENABLED_TOOLS CONTENT_MASK_SERVICE_URL
- Маскирование, кэширование, retry и расширенные логи в
src/mcp_atlassian/utils/content_mask.py. - Черновики и рабочие гипотезы в
todos/.
Пути Использования
Есть два основных варианта.
Python Package / uvx
Подходит, если MCP-клиент запускает subprocess и пакет опубликован в PyPI или корпоративный Python index.
{
"mcpServers": {
"bcs-mcp-atlassian": {
"command": "uvx",
"args": ["bcs-mcp-atlassian"],
"env": {
"JIRA_URL": "https://jira.bcs.ru",
"JIRA_PERSONAL_TOKEN": "<put-your-token-here>",
"CONFLUENCE_URL": "https://confluence.bcs.ru",
"CONFLUENCE_PERSONAL_TOKEN": "<put-your-token-here>",
"CONTENT_MASK_SERVICE_URL": "https://apis.tusvc.bcs.ru/mai-ms-masking-it-proxy/mask/chat"
}
}
}
}
Этот путь требует uvx на машине, где запускается MCP-клиент.
Docker HTTP Service
Подходит, если нужен один долгоживущий MCP-сервер вместо нового процесса на каждую клиентскую сессию.
Локально из исходников:
scripts/docker_build_local_ci.sh
scripts/docker_run_local.sh
Endpoint:
http://localhost:9000/mcp
Healthcheck:
http://localhost:9000/healthz
Минимальная MCP-конфигурация для HTTP transport:
{
"mcpServers": {
"bcs-mcp-atlassian-http": {
"url": "http://localhost:9000/mcp"
}
}
}
Контейнер не обязан хранить Atlassian credentials. В shared-service HTTP-схеме клиент может передавать авторизацию в headers:
Authorization: Bearer <oauth_token>Authorization: Token <personal_access_token>Authorization: Basic <base64(email:api_token)>X-Atlassian-Cloud-Id: <cloud_id>для Cloud, если нужно
Пример Codex config:
[mcp_servers.bcs-mcp-atlassian]
url = "http://localhost:9000/mcp"
http_headers = { "X-Atlassian-Jira-Url" = "https://jira.bcs.ru", "X-Atlassian-Confluence-Url" = "https://confluence.bcs.ru" }
env_http_headers = { "X-Atlassian-Jira-Personal-Token" = "JIRA_PERSONAL_TOKEN", "X-Atlassian-Confluence-Personal-Token" = "CONFLUENCE_PERSONAL_TOKEN" }
Пути Доработки
Есть два поддерживаемых workflow.
Без Python/uv На Хосте
Предпочтительный лёгкий вариант: редактируем файлы на хосте, а restore зависимостей, тесты и сборку выполняем внутри Docker.
На хосте нужны:
- Git
- Docker
Команды:
# Unit tests внутри Docker.
scripts/docker_test_local_docker.sh
# Runtime image из текущих исходников.
scripts/docker_build_local_ci.sh
# Запуск собранного image.
scripts/docker_run_local.sh
Dockerfile.local использует builder image с uv, поэтому Python tooling живёт внутри контейнера, а не на хосте.
С Python/uv На Хосте
Подходит, если нужна локальная virtualenv, прямые pytest-запуски, сборка wheel или публикация Python package.
uv sync --frozen --all-extras --dev
uv run pytest tests/unit/ -q
uv build -o dist/
Prod-style локальный image из wheel:
scripts/docker_package_wheel_local.sh
Этот скрипт требует uv на хосте, потому что сначала собирает dist/*.whl, а затем запускает Dockerfile.ci.
Docker Images
Dockerfile.local— local/dev image из исходников. Используйте для разработки без host Python tooling.Dockerfile.ci— CI/prod image изdist/*.whl. Используйте для проверки той же формы артефакта, которую публикует CI.
Локальные скрипты поддерживают переменные:
IMAGE_NAME, defaultbcs-mcp-atlassianIMAGE_TAG, defaultlatestдля runtime build иtestдля test imageDOCKER_IMAGE, полный image reference дляscripts/docker_run_local.shPYTHON_RUNTIME_IMAGEHTTP_PROXY,HTTPS_PROXY,NO_PROXYUV_INDEX_URL,UV_EXTRA_INDEX_URL,UV_BUILD_TOOLS_INDEX_URL
Локальные override можно положить в scripts/docker-build-local.env. Не коммитьте этот файл.
Docker images по умолчанию включают MCP_VERBOSE=true и MCP_LOGGING_STDOUT=true, чтобы runtime INFO-логи, включая content masking timings/cache hits, были видны через docker logs и docker attach.
GitLab CI И Registry
После push в branch или tag GitLab CI выполняет:
build:wheel -> test:wheel -> docker:mcp-atlassian
Последняя job собирает image через Dockerfile.ci и публикует его в GitLab Container Registry.
Шаблон имени image:
$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
Для этого проекта путь в GitLab относительно registry host:
bcs-mai/mcp/bcs-mcp-atlassian
Страница опубликованных образов в GitLab:
https://gitlab.bcs.ru/bcs-mai/mcp/bcs-mcp-atlassian/container_registry/9503
Если имя ветки содержит /, в Docker tag оно заменяется на -. Точный target печатается в логе job docker:mcp-atlassian строкой:
Target image ...
Подробный процесс релиза, соглашение об именах веток release/X.Y.Z и извлечение номера версии из ветки — docs/RELEASES.md. Release notes — docs/RELEASE_NOTES.md.
Запуск опубликованного image локально:
docker login registry.gitlab.bcs.ru
docker pull registry.gitlab.bcs.ru/bcs-mai/mcp/bcs-mcp-atlassian:<branch-or-tag>
DOCKER_IMAGE=registry.gitlab.bcs.ru/bcs-mai/mcp/bcs-mcp-atlassian:<branch-or-tag> \
scripts/docker_run_local.sh
docker pull из GitLab Registry может требовать логин. Используйте корпоративную учётную запись или GitLab token с правом чтения registry.
Варианты Распространения
Проект можно распространять двумя независимыми способами:
- Python package: публикация в PyPI, запуск через
uvx bcs-mcp-atlassian. Скриптыscripts/publish_pypi.sh/scripts/publish_pypi.ps1, переменные — docs/RELEASES.md (раздел «Публикация на PyPI»), шаблонscripts/publish-pypi.env.example. - Docker image: публикация в GitLab Container Registry, запуск как long-running HTTP MCP service.
Python package ближе к upstream-сценарию. Docker image — основной операционный путь BCS-форка.
Content Masking
Если задан CONTENT_MASK_SERVICE_URL, в masking service перед возвратом MCP-клиенту отправляется:
- Jira контент (
jira_get_issue,jira_search):description,comments[].body(длинный текст — с чанкингом) - Jira user-поля:
reporter,assignee,comments[].author(display_name,emailи т.д.) - Confluence (страницы):
content.value,author - Confluence (комментарии):
body,author
Не маскируются через proxy: diff версий страниц Confluence.
Длинный контент разбивается на последовательные запросы к proxy (по умолчанию до 4000 символов на запрос), ответы склеиваются. User-поля — короткие отдельные запросы без чанкинга.
Полезные настройки:
CONTENT_MASK_SERVICE_URLCONTENT_MASK_CHUNK_MAX_CHARS(default4000;0— без чанкинга)CONTENT_MASK_REQUEST_TIMEOUT_SECONDSCONTENT_MASK_REQUEST_RETRY_COUNTCONTENT_MASK_MAX_CONCURRENCYCONTENT_MASK_CACHE_MAX_SIZECONTENT_MASK_CACHE_TTL_SECONDS
Логи masking содержат correlation_id, path, размер текста, chunk_index / chunk_count, номер попытки, elapsed time, cache hits и найденные masked fragments.
Карта Репозитория
| Path | Purpose |
|---|---|
src/mcp_atlassian/ |
Python source |
src/mcp_atlassian/servers/ |
MCP server definitions |
src/mcp_atlassian/jira/ |
Jira client and mixins |
src/mcp_atlassian/confluence/ |
Confluence client and mixins |
src/mcp_atlassian/utils/content_mask.py |
Content masking integration |
tests/ |
Unit, integration, and e2e tests |
scripts/ |
Local Docker, packaging, OAuth, docs, and data scripts |
docs/RELEASES.md |
Процесс релиза: ветки release/X.Y.Z, CI, Docker tags |
docs/RELEASE_NOTES.md |
Release notes по версиям |
todos/ |
Working notes and hypotheses |
Readme.original.ru.md |
Russian translation of upstream README |
Upstream Документация
Общую документацию по MCP Atlassian смотрите в upstream:
- Original repository: sooperset/mcp-atlassian
- Original docs: mcp-atlassian.soomiles.com
- Перевод upstream README: Readme.original.ru.md
Security
Не коммитьте токены и локальные env-файлы. Предпочитайте передачу Atlassian credentials из окружения MCP-клиента или HTTP headers. .env и scripts/docker-build-local.env должны оставаться локальными.
Metadata
Release files for bcs-mcp-atlassian 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| bcs_mcp_atlassian-0.2.1.tar.gz | 790.0 kB | Without provenance | Details for bcs_mcp_atlassian-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bcs_mcp_atlassian-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for bcs_mcp_atlassian-0.2.1-py3-none-any.whl |
Total release size: 1.1 MB
Release files / bcs_mcp_atlassian-0.2.1.tar.gz
| Download URL | bcs_mcp_atlassian-0.2.1.tar.gz |
|---|---|
| Size | 790.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e657bf061b56c36c93b17ce3023e2e9cfc9dd5129a10851fc43c5a7d66dda96a
|
|
BLAKE2b-256 checksum How to use checksums |
6493d21aa3cb622170ba6c669444d274ce114828760cd5913686c17bf7ae20e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.8
|
Release files / bcs_mcp_atlassian-0.2.1-py3-none-any.whl
| Download URL | bcs_mcp_atlassian-0.2.1-py3-none-any.whl |
|---|---|
| Size | 295.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
80fe29b79c10ddadd1078b12e44e4cb06e3c8f0aac9f6df6d3ee931afcf4f166
|
|
BLAKE2b-256 checksum How to use checksums |
8b52bba3262603df7a0302ea1ca0542a282679b66844f049e21cbe4f16448eaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.8
|
Security for bcs-mcp-atlassian 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.