Skip to main content
Glama
SourceCraft MCP Server

SourceCraft MCP Server

by ramgml

SourceCraft MCP Server

MCP (Model Context Protocol) сервер для интеграции с платформой SourceCraft. Позволяет ИИ-агентам и IDE работать с репозиториями, issues, pull requests, CI/CD пайплайнами и релизами SourceCraft.

Пакет также включает CLI утилиту sourcecraft для работы с SourceCraft из терминала (см. CLI утилита).

Установка

Через pip

pip install sourcecraft-mcp

Через uv (рекомендуется)

uv pip install sourcecraft-mcp

Из исходников

git clone https://github.com/ramgml/sourcecraft-mcp.git
cd sourcecraft-mcp
uv pip install -e .

Установка без PyPI

1. Установка из Git репозитория

Добавьте в pyproject.toml другого проекта:

[tool.uv.sources]
sourcecraft-mcp = { git = "https://github.com/ramgml/sourcecraft-mcp.git" }

Или установите напрямую:

uv pip install "git+https://github.com/ramgml/sourcecraft-mcp.git"

2. Настройка MCP с использованием uv и git зависимостей

{
  "mcpServers": {
    "sourcecraft": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "git+https://github.com/ramgml/sourcecraft-mcp.git",
        "--with",
        "git+https://github.com/ramgml/pysourcecraft.git@v0.1.5",
        "python",
        "-m",
        "sourcecraft_mcp.server"
      ],
      "env": {
        "SOURCECRAFT_API_TOKEN": "your-api-token"
      }
    }
  }
}

3. Локальная разработка

Установите в режиме для разработки:

uv pip install -e /path/to/sourcecraft-mcp

Конфигурация MCP с PYTHONPATH:

{
  "mcpServers": {
    "sourcecraft": {
      "command": "python",
      "args": ["-m", "sourcecraft_mcp.server"],
      "env": {
        "SOURCECRAFT_API_TOKEN": "your-api-token",
        "PYTHONPATH": "/path/to/sourcecraft-mcp/src"
      }
    }
  }
}

4. Использование точки входа (после установки из git)

{
  "mcpServers": {
    "sourcecraft": {
      "command": "sourcecraft-mcp",
      "env": {
        "SOURCECRAFT_API_TOKEN": "your-api-token"
      }
    }
  }
}

Related MCP server: GitHub Agent MCP Server

Настройка

Получение API токена

  1. Войдите в SourceCraft

  2. Перейдите в Settings → Access → Personal Access Tokens

  3. Создайте новый токен с необходимыми правами

Настройка окружения

Установите переменную окружения:

export SOURCECRAFT_API_TOKEN="your-api-token-here"

Или добавьте в .env файл:

SOURCECRAFT_API_TOKEN=your-api-token-here
SOURCECRAFT_BASE_URL=https://api.sourcecraft.tech  # опционально

Настройка MCP клиента

Добавьте в конфигурацию MCP клиента (например, .vscode/mcp.json или claude_desktop_config.json):

{
  "mcpServers": {
    "sourcecraft": {
      "command": "uvx",
      "args": ["sourcecraft-mcp@latest"],
      "env": {
        "SOURCECRAFT_API_TOKEN": "your-api-token"
      }
    }
  }
}

Или для локальной разработки:

{
  "mcpServers": {
    "sourcecraft": {
      "command": "python",
      "args": ["-m", "sourcecraft_mcp.server"],
      "env": {
        "SOURCECRAFT_API_TOKEN": "your-api-token"
      }
    }
  }
}

Доступные инструменты

Repositories (8 инструментов)

Инструмент

Описание

list_repositories

Список репозиториев пользователя

list_organization_repositories

Список репозиториев организации

get_repository

Информация о репозитории

create_repository

Создать репозиторий

update_repository

Обновить репозиторий

delete_repository

Удалить репозиторий

list_branches

Список веток

list_tags

Список тегов

get_file_tree

Дерево файлов

Issues (10 инструментов)

Инструмент

Описание

list_issues

Список issues с фильтрами

get_issue

Информация об issue

create_issue

Создать issue

update_issue

Обновить issue

close_issue

Закрыть issue

reopen_issue

Переоткрыть issue

list_issue_comments

Список комментариев

add_issue_comment

Добавить комментарий

Pull Requests (10 инструментов)

Инструмент

Описание

list_pull_requests

Список PR с фильтрами

get_pull_request

Информация о PR

create_pull_request

Создать PR

update_pull_request

Обновить PR

merge_pull_request

Смержить PR

publish_pull_request

Опубликовать draft PR

discard_pull_request

Отклонить PR

list_pr_reviewers

Список ревьюеров

add_pr_reviewer

Добавить ревьюера

set_review_decision

Установить решение ревью

CI/CD (6 инструментов)

Инструмент

Описание

list_ci_runs

Список CI запусков

get_ci_run

Информация о CI запуске

get_workflow

Информация о workflow

get_cube_logs

Логи CI cube

get_artifacts

Артефакты CI

trigger_workflows

Запустить workflows

Releases (7 инструментов)

Инструмент

Описание

list_releases

Список релизов

get_release

Информация о релизе

get_latest_release

Последний релиз

create_release

Создать релиз

update_release

Обновить релиз

publish_release

Опубликовать релиз

discard_release

Отклонить релиз

Users & Organizations (7 инструментов)

Инструмент

Описание

get_current_user

Текущий пользователь

get_user

Информация о пользователе

list_my_issues

Мои issues

list_user_pull_requests

PR пользователя

list_organizations

Список организаций

get_organization

Информация об организации

list_organization_members

Члены организации

Примеры использования

Работа с репозиториями

> Покажи мне репозитории в организации myorg

Использую list_organization_repositories...

📦 frontend-app - Web application
📦 backend-api - API service
🔒 internal-tools - Internal utilities

Работа с issues

> Найди все открытые issues с приоритетом critical в репозитории myorg/backend-api

Использую list_issues с фильтрами status=open и priority=critical...

🟢 #42 ⚠️ Database connection timeout
   Status: open | Priority: critical | Assignee: @dev1

🟢 #38 ⚠️ Memory leak in worker processes
   Status: open | Priority: critical | Assignee: @dev2

Работа с Pull Requests

> Создай PR для ветки feature/new-auth в main в репозитории myorg/backend-api

Использую create_pull_request...

Pull request создан как draft!

#45: Implement new authentication flow
Branch: feature/new-auth → main
Author: @current-user

Мониторинг CI/CD

> Покажи статус последних CI запусков в myorg/backend-api

Использую list_ci_runs...

CI/CD runs in 'myorg/backend-api':

✅ Run #abc123 - success
   Event: push
   Created: 2024-01-15 10:30 UTC

❌ Run #abc122 - failed
   Event: pull_request
   Created: 2024-01-15 09:45 UTC

CLI утилита

Пакет включает CLI sourcecraft для работы с SourceCraft из терминала. Покрывает все домены API: репозитории, issues, pull requests, CI/CD, релизы, пользователи и организации.

Аутентификация

export SOURCECRAFT_API_TOKEN="your-api-token"
# опционально
export SOURCECRAFT_BASE_URL="https://api.sourcecraft.tech"

Токен также можно передать флагом --token.

Примеры команд

# Репозитории
sourcecraft repo list --org myorg
sourcecraft repo get myorg/backend-api
sourcecraft repo create my-service --visibility private
sourcecraft repo branches myorg/backend-api
sourcecraft repo tree myorg/backend-api --recursive

# Issues
sourcecraft issue list myorg/backend-api --status open
sourcecraft issue create myorg/backend-api --title "Bug" --body "Описание"
sourcecraft issue close myorg/backend-api 42

# Pull requests
sourcecraft pr list myorg/backend-api --status open
sourcecraft pr create myorg/backend-api --title "Fix" --source feature/x --target main --publish
sourcecraft pr merge myorg/backend-api 45 --squash
sourcecraft pr review myorg/backend-api 45 --decision approve

# CI/CD
sourcecraft ci runs myorg/backend-api
sourcecraft ci run myorg/backend-api <run-slug>
sourcecraft ci logs myorg/backend-api <run> <workflow> <task> <cube>
sourcecraft ci trigger myorg/backend-api build --branch main

# Релизы
sourcecraft release list myorg/backend-api
sourcecraft release create myorg/backend-api v1.0.0 --title "First release" --publish

# Пользователи и организации
sourcecraft user me
sourcecraft user prs username --role reviewer
sourcecraft org list
sourcecraft org members myorg

Формат вывода

По умолчанию вывод — читаемые таблицы (Rich). Глобальный флаг --json переключает вывод в JSON для скриптов:

sourcecraft --json repo list --org myorg | jq '.repositories[].slug'

Разработка

Установка зависимостей

uv sync

Запуск тестов

uv run pytest

Линтинг

uv run ruff check .
uv run ruff format .

Структура проекта

src/sourcecraft_mcp/
├── __init__.py
├── server.py          # Точка входа MCP сервера
├── cli/               # CLI утилита (команда `sourcecraft`)
│   ├── app.py         # Точка входа CLI, глобальные опции
│   ├── common.py      # Общие хелперы (клиент, вывод, ошибки)
│   ├── repos.py
│   ├── issues.py
│   ├── prs.py
│   ├── cicd.py
│   ├── releases.py
│   ├── users.py
│   └── orgs.py
├── tools/             # Инструменты по доменам
│   ├── repositories.py
│   ├── issues.py
│   ├── pull_requests.py
│   ├── cicd.py
│   ├── releases.py
│   ├── users.py
│   └── organizations.py
└── utils.py           # Утилиты

Agent Skill

В каталоге skill/ лежит opencode/claude-скилл sourcecraft-cli — инструкции для ИИ-агента по работе с CLI sourcecraft.

Установка скилла в систему

# opencode / claude (глобально)
git clone https://github.com/ramgml/sourcecraft-mcp.git
cp -r sourcecraft-mcp/skill/sourcecraft-cli ~/.agents/skills/
# или: cp -r ... ~/.claude/skills/  |  ~/.config/opencode/skills/

# для конкретного проекта
cp -r sourcecraft-mcp/skill/sourcecraft-cli /path/to/project/.opencode/skills/

Без клонирования, напрямую из репозитория:

mkdir -p ~/.agents/skills/sourcecraft-cli
curl -sSL "https://raw.githubusercontent.com/ramgml/sourcecraft-mcp/main/skill/sourcecraft-cli/SKILL.md" \
  -o ~/.agents/skills/sourcecraft-cli/SKILL.md

После установки перезапустите opencode/claude, чтобы скилл подхватился.

Лицензия

MIT License

Available Tools

48 tools
_add_issue_commentD

Inputs: body (required), repo (required), owner (required), issue_number (required). Returns: result

_add_pr_reviewerD

Inputs: repo (required), owner (required), user_id (required), pull_number (required). Returns: result

_close_issueD

Inputs: repo (required), owner (required), issue_number (required). Returns: result

_create_issueD

Inputs: repo (required), owner (required), title (required), priority, +3 more. Returns: result

_create_pull_requestD

Inputs: repo (required), owner (required), title (required), source_branch (required), +4 more. Returns: result

_create_releaseD

Inputs: tag (required), repo (required), owner (required), title (required), +3 more. Returns: result

create_repositoryA

Create a new repository for the authenticated user.

Args: name: Repository name description: Repository description visibility: Repository visibility (public, internal, private)

Inputs: name (required), visibility, description. Returns: result

delete_repositoryB

Delete a repository.

Args: owner: Repository owner repo: Repository name

Inputs: repo (required), owner (required). Returns: result

_discard_pull_requestD

Inputs: repo (required), owner (required), pull_number (required). Returns: result

_discard_releaseD

Inputs: tag (required), repo (required), owner (required). Returns: result

_get_artifactsD

Inputs: repo (required), owner (required), run_slug (required), cube_slug (required), +2 more. Returns: result

_get_ci_runD

Inputs: repo (required), owner (required), run_slug (required). Returns: result

_get_cube_logsD

Inputs: repo (required), owner (required), run_slug (required), cube_slug (required), +3 more. Returns: result

_get_current_userD

Inputs: no named parameters. Returns: result

get_file_treeA

Get the file tree of a repository.

Args: owner: Repository owner repo: Repository name revision: Git reference (branch, tag, or commit SHA). Uses default branch if empty. path: Path within repository. Root if empty. recursive: Whether to retrieve recursively

Inputs: repo (required), owner (required), path, revision, +1 more. Returns: result

_get_issueD

Inputs: repo (required), owner (required), issue_number (required). Returns: result

_get_latest_releaseD

Inputs: repo (required), owner (required). Returns: result

_get_organizationD

Inputs: org (required). Returns: result

_get_pull_requestD

Inputs: repo (required), owner (required), pull_number (required). Returns: result

_get_releaseD

Inputs: tag (required), repo (required), owner (required). Returns: result

_get_repositoryC

Get detailed information about a repository.

Args: owner: Repository owner repo: Repository name

Inputs: repo (required), owner (required). Returns: result

_get_userD

Inputs: username (required). Returns: result

_get_workflowD

Inputs: repo (required), owner (required), run_slug (required), workflow_slug (required). Returns: result

list_branchesC

List branches in a repository.

Args: owner: Repository owner repo: Repository name page: Page number per_page: Items per page

Inputs: repo (required), owner (required), page, per_page. Returns: result

_list_ci_runsD

Inputs: repo (required), owner (required), page_size, page_token. Returns: result

_list_issue_commentsD

Inputs: repo (required), owner (required), issue_number (required), page, +1 more. Returns: result

_list_issuesD

Inputs: repo (required), owner (required), page, label, +4 more. Returns: result

_list_my_issuesD

Inputs: page_size, page_token. Returns: result

_list_organization_membersD

Inputs: org (required), page, per_page. Returns: result

_list_organization_repositoriesD

Inputs: org (required), page, per_page. Returns: result

list_organization_repositoriesB

List repositories in an organization.

Args: org: Organization name page: Page number per_page: Items per page

Inputs: org (required), page, per_page. Returns: result

_list_organizationsD

Inputs: page, per_page. Returns: result

_list_pr_reviewersD

Inputs: repo (required), owner (required), pull_number (required). Returns: result

_list_pull_requestsD

Inputs: repo (required), owner (required), page, author, +4 more. Returns: result

_list_releasesD

Inputs: repo (required), owner (required), page_size, page_token. Returns: result

_list_repositoriesC

List repositories for a user or the authenticated user.

Args: username: Username to list repos for (None for authenticated user) page: Page number per_page: Items per page

Inputs: page, per_page, username. Returns: result

list_tagsB

List tags in a repository.

Args: owner: Repository owner repo: Repository name page: Page number per_page: Items per page

Inputs: repo (required), owner (required), page, per_page. Returns: result

_list_user_pull_requestsD

Inputs: username (required), role, page_size, page_token. Returns: result

_merge_pull_requestD

Inputs: repo (required), owner (required), pull_number (required), squash, +3 more. Returns: result

_publish_pull_requestD

Inputs: repo (required), owner (required), pull_number (required). Returns: result

_publish_releaseD

Inputs: tag (required), repo (required), owner (required). Returns: result

_reopen_issueD

Inputs: repo (required), owner (required), issue_number (required). Returns: result

_set_review_decisionD

Inputs: repo (required), owner (required), decision (required), pull_number (required). Returns: result

_trigger_workflowsD

Inputs: repo (required), owner (required), workflows (required), tag, +2 more. Returns: result

_update_issueD

Inputs: repo (required), owner (required), issue_number (required), title, +4 more. Returns: result

_update_pull_requestD

Inputs: repo (required), owner (required), pull_number (required), title, +1 more. Returns: result

_update_releaseD

Inputs: tag (required), repo (required), owner (required), title, +1 more. Returns: result

update_repositoryC

Update repository settings.

Args: owner: Repository owner repo: Repository name description: New description (optional) default_branch: New default branch (optional) visibility: New visibility (optional)

Inputs: repo (required), owner (required), visibility, description, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    D1.5/5.0

    Scored across 48 tools

    Disambiguation2/5

    There are duplicate tools (`_list_organization_repositories` and `list_organization_repositories`) and several similar lifecycle actions (`_create_release` vs `_publish_release`, `_update_pull_request` vs `_publish_pull_request`) that are hard to tell apart. Vague names like `_trigger_workflows` and `_get_cube_logs` further obscure their exact purpose relative to other CI tools.

    Naming Consistency2/5

    Most tools follow a snake_case verb_noun pattern, but the leading underscore prefix is applied inconsistently: some tools like `create_repository`, `list_branches`, and `get_file_tree` have no underscore. The duplicate `_list_organization_repositories` / `list_organization_repositories` pair and odd names like `_get_cube_logs` also break the naming pattern.

    Tool Count2/5

    48 tools is a very large surface for a source-management server, especially when several tools appear duplicative or could be consolidated (`_publish_release` vs `_discard_release`, `_trigger_workflows` vs `_get_workflow`). The scope spans users, orgs, repos, issues, PRs, releases, and CI, which feels heavy rather than focused.

    Completeness3/5

    Major workflows for repositories, issues, pull requests, releases, and CI are covered with CRUD/lifecycle actions in most areas. However, there are notable gaps for a source-management tool: no commit listing/inspection, no branch or tag creation/deletion, and no repository search or org member management beyond listing.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers