К основному содержанию
скилл CX Codex

issue-create — скилл для Claude Code: завести issue по всем правилам

Проводит создание issue в репозитории от проверки дублей до карточки на доске с приоритетом. Пригодится, когда работа нашлась по ходу задачи и её нужно завести отдельно.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add modelcontextprotocol/servers --skill issue-create -a claude-code
Открыть на GitHub

Что делает issue-create

Скилл описывает семь шагов, и issue не считается созданным, пока не сделан каждый. Сначала поиск по всем состояниям, не только открытым: закрытая issue — тоже дубль, её могли завершить, отклонить или заменить другой. Искать советует двумя-тремя формулировками — по симптому, имени сервера, тексту ошибки — и отдельно проверять доску, где у одобренной работы уже есть карточка.

Дальше метки: v2 всегда, ровно одна из bug / enhancement / documentation / chore / question, плюс server-<name>, если issue касается одного сервера. Метки и milestone ставятся при создании, а не задним числом: issue без метки не попадёт в выборку по v2, а без milestone тихо выпадет из планирования релиза. Milestone — это корзина релиза, поэтому выбирают по тому, когда работа выйдет, а не по её размеру.

Шаги с карточкой на доске Servers V2 (#43), статусом и приоритетом требуют ID доски, а они есть только у скилла board-ops. Его нужно загрузить перед пятым шагом — это первое действие шага. Приоритет (Urgent / High / Medium / Low) — поле доски, не метка; в спорном случае скилл отсылает к рубрике из issue-triage. Черновики карточек создавать нельзя: каждая запись на доске — настоящая GitHub issue.

Какие задачи решает

  • проверить, не заведена ли уже такая issue, включая закрытые
  • выбрать метку типа, не сваливая документацию в enhancement
  • проставить milestone по сроку релиза, а не наугад
  • добавить карточку на доску и задать ей статус и приоритет
  • завести issue для работы, найденной по ходу другой задачи

Примеры запросов агенту

  • заведи issue про падение server-filesystem при чтении пустого файла
  • проверь, нет ли уже issue про эту ошибку, и если нет — создай с метками и milestone
  • по ходу правки нашёл баг в server-git — заведи на него отдельную issue

Как установить issue-create

1Через Skills CLI (Vercel)

npx skills add modelcontextprotocol/servers --skill issue-create -a claude-code

2Вручную: положить файлы

~/.claude/skills/issue-create/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/issue-create/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора7

testing Скилл объясняет, как писать и запускать тесты для серверов MCP: где лежит файл, какой раннер и как пройти порог покрытия. Пригодится, когда тест молча пропускается или проходит на устаревшей сборке. CX Codex +1 ★ 91 547звёзд репо release Проводит один milestone-релиз от релизного issue до публикации GitHub Release: аудит, бампы версий, merge PR и release ledger. CX Codex +1 ★ 91 547звёзд репо project-structure Скилл разбирает устройство репозитория modelcontextprotocol/servers и подсказывает, в какой файл или каталог добавить новый код. CX Codex +1 ★ 91 547звёзд репо pr-flow Проводит задачу от issue до пул-реквеста и закрывает её после мержа: ветка, DCO-подпись, гейт, ревью Copilot. CX Codex +1 ★ 91 547звёзд репо local-dev Скилл для локальной разработки MCP-серверов: ставит зависимости, собирает TypeScript, запускает сервер по stdio, SSE или Streamable HTTP. CX Codex +1 ★ 91 547звёзд репо client-smoke Прогоняет локально собранный MCP-сервер через Inspector CLI, веб-интерфейс Inspector и LLM-клиент. Пригодится перед открытием PR. CX Codex +1 ★ 91 547звёзд репо

Похожие

create-issue dyoshikawa Скилл, который оформляет GitHub issue по шагам: собирает данные, изучает код, пишет описание на английском и ставит метки. Пригодится, когда лень вручную разбираться с шаблоном и gh label list. CX Codex +1 ★ 1 552звёзд репо gh-issue-sync mitsuhiko Синхронизирует GitHub Issues с локальными Markdown-файлами. Подходит для поиска, правок, создания и разбора задач из редактора или терминала. CX Codex +1 23 300установок oss-issue-triage Samuel Berthe Проектирует систему разбора issues и пул-реквестов под реальные силы команды мейнтейнеров: метки, приём заявок, сроки ответа, дежурства. CX Codex +1 10 400установок draft-issue-to-external-repository dyoshikawa Готовит GitHub issue для репозитория, которым вы не владеете: изучает шаблоны и стиль проекта, уточняет замысел с вами и сохраняет текст в файл. CX Codex +1 ★ 1 552звёзд репо Refine Requirement or Issue официальный github Субагент дополняет описание задачи в GitHub критериями приёмки и рисками. Помогает подготовить тикет к разработке без рутины. ★ 40 418звёзд репо

Рядом в теме «Git и GitHub»

Всё по теме «Git и GitHub» →

Вопросы о issue-create

Как установить issue-create в Claude?

Выполните npx skills add modelcontextprotocol/servers --skill issue-create -a claude-code. Файл скилла окажется по пути ~/.claude/skills/issue-create/SKILL.md.

Что делает issue-create?

Проводит создание issue целиком: проверка дублей, метки v2 и типа, метка сервера, milestone, карточка на доске Servers V2 со статусом и приоритетом.

Что нужно, чтобы скилл дошёл до карточки на доске?

Шаги с карточкой, статусом и приоритетом опираются на ID доски, которые держит скилл board-ops. Его загружают перед пятым шагом.

Исходный текст

SKILL.md · Apache-2.0
---
name: issue-create
description: "Create a tracked issue in this repo end to end — duplicate check, v2 label, type label, server-scope label, milestone, board card, Status and Priority. Use when asked to file, create, open or raise an issue; when picking its labels or its milestone; when checking whether one already exists; or when work discovered mid-task needs an issue of its own."
disable-model-invocation: false
---

# Creating an issue

An issue **you** create is not "created" until every step below is done. A
label is a repo tag, the milestone is a release bucket, and the board is a
separate org project: `--label v2` does **not** add a board card, and adding a
card does **not** set a Status or a Priority.

| # | Step | Applies |
| --- | --- | --- |
| 1 | **`v2` label** | Always |
| 2 | **Type label**: exactly one of `bug` / `enhancement` / `documentation` / `chore` / `question` | Always |
| 3 | **Scope label**: `server-<name>` | Only when the issue concerns **one** server |
| 4 | **Milestone** | Always |
| 5 | **A card on the Servers V2 board (#43)** | Always |
| 6 | **Status** on that card: `Todo` (or `In Progress` if you start now) | Always |
| 7 | **Priority** on that card | Always |

The rules behind each row are in [`AGENTS.md`](../../../AGENTS.md) under
**Issue-driven work style**; this skill is the procedure. Rows 5–7 need the
board's IDs, which only the `board-ops` skill holds, so **load `board-ops`
before step 5**; it is step 5's first action.

Set the labels and milestone at **create time**, never by backfilling: an
unlabeled issue appears in no `v2`-filtered query, and an unmilestoned one drops
out of release planning silently.

**Never create a duplicate.** **Never create a draft card** (a board card with
no issue number): every board item is a real GitHub issue. The one exception, a
private security advisory's `[GHSA-…]` card, is the `security-advisory` skill's.

## 0. Check for an existing issue first

Search **all** states, not just open. A closed issue is still a duplicate: it
may have been completed, rejected, or filed and superseded, and refiling it
loses that history. When one matches, the call is whether to reopen it or file
genuinely new work; either way you need to have seen it.

```sh
gh issue list --repo modelcontextprotocol/servers --state all --limit 200 \
  --search "<keywords>" --json number,title,state,stateReason,labels,milestone
```

This repository has thousands of issues, most from outside contributors, so
search with two or three phrasings (the symptom, the tool or server name, the
error text) before concluding there is none. Also check the board itself, where
approved work already has a card:

```sh
BOARD=$(gh project item-list 43 --owner modelcontextprotocol --format json --limit 2000)
# --limit truncates silently: trust the listing only when it is complete.
if jq -e '(.items | length) == .totalCount' <<<"$BOARD" >/dev/null; then
  jq -r '.items[] | "\(.content.number)\t\(.status)\t\(.title)"' <<<"$BOARD" \
    | grep -i "<keyword>"
else
  echo "board listing incomplete or failed — raise --limit; not concluding anything" >&2
fi
```

## 1. Pick the labels

**`v2`.** Every issue created through this flow carries it. It marks work
tracked by this workflow; there is no other version label in this repository.

**Type.** Exactly one:

| Type | Use for | Not for |
| --- | --- | --- |
| `bug` | Something is broken, wrong, or regressed against its intended behavior, including a server that reports something false about the protocol | A missing capability that was never built |
| `enhancement` | A new capability, or extending an existing one: features, protocol-feature demonstrations, tracking issues | A cleanup with no behavior change |
| `documentation` | Prose deliverables: READMEs, `docs/`, `AGENTS.md` rules, skills | Code that happens to need a doc update |
| `chore` | Maintenance with no user-facing behavior change: dependencies, build and CI tooling, refactors, release plumbing | Anything a user of a server would notice |
| `question` | An open question or discussion with no agreed deliverable yet | Work someone has already decided to do |

**Don't force the binary.** `bug` and `enhancement` are the two most reached
for, and pressing a docs task or a dependency pin into `enhancement` degrades it
to "not a bug", at which point filtering by it stops telling you anything.

**Scope.** When the issue concerns exactly one server, add its label:

| Server directory | Scope label |
| --- | --- |
| `src/everything/` | `server-everything` |
| `src/filesystem/` | `server-filesystem` |
| `src/memory/` | `server-memory` |
| `src/sequentialthinking/` | `server-sequentialthinking` |
| `src/fetch/` | `server-fetch` |
| `src/git/` | `server-git` |
| `src/time/` | `server-time` |

An issue about the repository as a whole (CI, root scripts, `AGENTS.md`,
skills, release tooling) carries **no** scope label. An issue that really spans
two or three servers takes each of their labels; one that spans them all is
repository-wide and takes none.

## 2. Pick the milestone

If the user didn't name one, use the **current** milestone: the open `v2.x`
milestone with the nearest due date.

```sh
gh api repos/modelcontextprotocol/servers/milestones --jq \
  'map(select(.state=="open" and (.title|startswith("v2")))) | sort_by(.due_on == null, .due_on)
   | .[] | "\(.title)\tdue \(.due_on // "none" | .[0:10])\topen=\(.open_issues)"'
```

The first line is the default. Milestones are **release** buckets, so pick by
_when the work ships_, not by size. If a new issue plainly can't make the
current milestone, say so and put it in the next one rather than leaving it
blank. A sub-issue normally inherits its parent's milestone.

## 3. Pick the Priority

Priority is a board field (Urgent / High / Medium / Low), not a label. Pick it
by impact and urgency, and say in one line why:

| Priority | For |
| --- | --- |
| Urgent | A security problem, a broken release, or something blocking other work now |
| High | A real defect users hit, or work other planned work depends on |
| Medium | The default for planned work |
| Low | Nice to have; nothing waits on it |

This table is the short form of the scored rubric in `issue-triage`, which is
how triage prioritizes inflow. When the choice here is not obvious, score it
with that rubric instead.

## 4. Create it

```sh
gh issue create --repo modelcontextprotocol/servers \
  --title "<title>" \
  --label v2 --label "<type from step 1>" --label "<server-name from step 1>" \
  --milestone "<milestone from step 2>" \
  --body "<body>"
```

Drop the `server-…` label for a repository-wide issue, and repeat it for each
server when an issue spans a few. `gh issue create` prints
the new issue's URL; keep it for the next step.

A good body states the problem, how to reproduce it (the server, its
configuration, the client, the request), the expected behavior, and which spec
era it concerns when that matters.

## 5. Board it, in Todo, with its Priority

Filing an issue for work you intend to happen **is** approving it, so it starts
in **Todo** with its milestone already set, not in `Incoming`, which is the queue
for issues nobody has evaluated yet. Work you are starting immediately goes
straight to **In Progress**.

**Load the `board-ops` skill now** and run its add-card recipe with the Status
and the Priority from step 3. This file cannot board the issue on its own: the
project, field and option IDs live in `board-ops` and only there. An
option ID is regenerated whenever its field's option list is edited, so a
second copy here would go stale silently and break issue creation even after
`board-ops` was fixed.

## 6. Verify

Read the issue back and confirm every row of the table at the top:

```sh
N=<ISSUE_NUMBER>
gh api graphql -F n="$N" -f query='query($n:Int!){
  repository(owner:"modelcontextprotocol",name:"servers"){issue(number:$n){
    number title milestone{title} labels(first:20){nodes{name}}
    projectItems(first:100){nodes{project{number owner{... on Organization{login}}}
      fieldValues(first:20){nodes{... on ProjectV2ItemFieldSingleSelectValue{
        name field{... on ProjectV2SingleSelectField{name}}}}}}}}}}' \
  --jq '.data.repository.issue | {number, title, milestone: .milestone.title,
        labels: [.labels.nodes[].name],
        board: [.projectItems.nodes[]
                | select(.project.number==43 and .project.owner.login=="modelcontextprotocol")
                | [.fieldValues.nodes[] | select(.field) | {(.field.name): .name}] | add]}'
```

The issue is created when `labels` holds `v2`, exactly one type and the scope
label if one applies, `milestone` is set, and `board` holds exactly one entry
with both a `Status` and a `Priority`. The filter matches the board's owner as
well as its number, because project numbers are only unique per owner.

## Issues that arrive from elsewhere

An issue opened through the GitHub UI, by an outside reporter or by a
maintainer, arrives with **no milestone and no card**, and with no labels unless
it came through an issue form (the forms apply `v2` and `bug` or `enhancement`,
never a scope label). That is
normal on arrival, not a defect to fix the moment it lands: it is not approved
yet, so it enters the board in **Incoming**, unmilestoned, through triage (the
`issue-triage` skill), never through this flow.

© modelcontextprotocol · Apache-2.0 · modelcontextprotocol/servers

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой