一键导入
report-issue
// File a bug or feature request against this repository (cyanheads/git-mcp-server) using the `gh` CLI. Use for tool logic bugs, git provider misbehavior, transport issues, auth/config problems, or new feature proposals.
// File a bug or feature request against this repository (cyanheads/git-mcp-server) using the `gh` CLI. Use for tool logic bugs, git provider misbehavior, transport issues, auth/config problems, or new feature proposals.
Exercise git tools, resources, and prompts against a live HTTP server via MCP JSON-RPC over curl. Starts the server, surfaces the catalog, runs real and adversarial inputs, and produces a tight report with concrete findings and numbered follow-up options. Use after adding or modifying definitions, or when the user asks to test, try out, or verify the MCP surface.
Investigate, adopt, and verify dependency updates. Captures what changed, understands why, cross-references against the codebase, and runs final checks. Supports two entry modes: run the full flow end-to-end, or review updates you already applied.
Finalize documentation and project metadata for a ship-ready release. Use after implementation is complete, tests pass, and devcheck is clean. Safe to run at any stage — each step checks current state and only acts on what still needs work.
Ship a release end-to-end across every registry this project targets (npm, MCP Registry). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already complete — this skill is the post-wrapup publish workflow. Halts and alerts the user on the first failure.
| name | report-issue |
| description | File a bug or feature request against this repository (cyanheads/git-mcp-server) using the `gh` CLI. Use for tool logic bugs, git provider misbehavior, transport issues, auth/config problems, or new feature proposals. |
| metadata | {"author":"cyanheads","version":"1.0","type":"workflow"} |
Typical triggers:
CliGitProvider) fails or misbehaves — wrong output parsing, error transformation, timeout handling.describe() on schema fields causing poor LLM tool useFor general gh CLI workflows outside issue filing (PRs, workflows, API access), see the github-cli skill.
Confirm the repo:
gh repo view --json nameWithOwner -q '.nameWithOwner'
Should output cyanheads/git-mcp-server.
Search existing issues:
gh issue list --search "your error message or keyword"
Reproduce the issue — confirm it's reproducible. Note the exact input, transport mode (stdio/http), git provider (cli), and any relevant env vars (GIT_SIGN_COMMITS, GIT_BASE_DIR, STORAGE_PROVIDER_TYPE, etc.).
Check logs — review server output and, if running HTTP, the response body for structured error details (McpError code + context).
Capture versions — bun pm ls @cyanheads/git-mcp-server, bun --version, git --version, OS version.
Good issues are scannable, concrete, and self-contained. These patterns apply to both bugs and features — the guidance targets any prose block (Description, Additional context, feature proposals).
git_merge throws McpError(INTERNAL_ERROR) on a CONFLICT exit instead of returning {conflicts: true}" beats "Merge is broken." A reader should know what's wrong before the end of the first sentence.[Hono](https://hono.dev/), [tsyringe](https://github.com/microsoft/tsyringe), [jose](https://github.com/panva/jose). Link to the canonical repo so readers can verify the dependency and reach docs in one click.owner/repo#N for cross-repo issue references. GitHub auto-renders them as linked references (e.g. cyanheads/mcp-ts-template#46). Bare #N only works for same-repo issues.Related: #N line near the top when the issue grows from prior context (discussions, other issues, PRs). Makes provenance clickable.### Scope from ### Out of scope. The latter is as important as the former — it pre-empts scope-creep debates in comments and signals you've thought about the boundaries.Depends on: owner/repo#N to declare ordering explicitly when implementation is blocked on another issue landing first.GitHub issues are public. Do not include secrets, credentials, API keys, JWT tokens, or git remote URLs that encode credentials. Redact sensitive values from env vars, headers, logs, and git URLs before submitting. Replace with obvious placeholders: REDACTED, sk-...REDACTED, https://REDACTED@github.com/.... Do not rely on partial masking — partial keys can still be exploited.
This repo does not currently ship .github/ISSUE_TEMPLATE/ YAML form templates, so use free-form titles and bodies. Structure the body with the sections below so the maintainer has everything needed to triage without asking.
gh issue create \
--title "bug(git_merge): conflicts thrown as McpError instead of structured success" \
--label "bug" \
--body "$(cat <<'ISSUE'
### Version
git-mcp-server v2.11.1
### Runtime
Bun 1.2.21 on macOS 15.x
### Transport
http (also reproduces on stdio)
### Git provider
cli (git 2.x)
### Description
`git_merge` currently throws `McpError(INTERNAL_ERROR)` when the merge exits non-zero due to a `CONFLICT` marker. Callers have to parse error messages and re-run `git_status` to recover state, even though `CONFLICT` is a documented success state.
### Steps to reproduce
1. Set up a repo with two divergent branches that touch the same line
2. `git_checkout { "branch": "main" }`
3. `git_merge { "branch": "feature" }` → throws instead of returning conflict info
### Actual behavior
```
McpError: INTERNAL_ERROR — git merge failed with exit code 1
```
### Expected behavior
```json
{
"success": true,
"conflicts": true,
"conflictedFiles": ["path/to/file.ts"],
"message": "Merge had conflicts — resolve and commit to finish"
}
```
### Additional context
`git_rebase`, `git_cherry_pick`, `git_pull` share the same pattern and exhibit the same behavior.
ISSUE
)"
gh issue create --web
Opens the standard GitHub issue form; use the body template above as a guide.
Format: type(scope): description
bug, feat, docs, chore, perf, refactorgit_status, git_merge), subsystem (cli-provider, transport, auth, storage, config), or typesExamples:
bug(git_commit): signing fails silently when gpg agent is unavailablefeat(git_log): add --follow renames output flagdocs(config): GIT_BASE_DIR interaction with session working dir is unclearperf(cli-provider): spawn overhead dominates short git_status calls| Label | When |
|---|---|
bug | Something broken |
enhancement | New feature or improvement |
docs | Documentation issue |
config | Configuration or environment issue |
regression | Worked before, broken after a change |
performance | Slow path, memory issue |
security | Security-relevant (path traversal, command injection, auth bypass) |
Combine labels: --label "bug" --label "regression".
bun run dev:stdio 2>&1 | head -200 > /tmp/git-mcp-error.log
# As part of a new issue
gh issue create \
--title "bug(transport): stdio crashes on large diff payload" \
--label "bug" \
--body-file /tmp/git-mcp-error.log
# Or as a comment on an existing issue
gh issue comment <number> --body-file /tmp/git-mcp-error.log
For HTTP errors, capture the full JSON-RPC response (envelope + result.content[] or error) so the maintainer can see both the protocol frame and the tool error.
Template below demonstrates the richer structure. Omit sections you don't need — simple requests don't require Flow / Design / Dependencies blocks.
gh issue create \
--title "feat(git_log): add follow-renames flag" \
--label "enhancement" \
--body "$(cat <<'ISSUE'
`git_log` currently does not expose `--follow`, so callers cannot trace the full history of a renamed file without falling back to raw `git log`. This is a common workflow when reviewing long-lived code paths.
Related: #N
## Proposal
Add `followRenames: boolean` to the `git_log` input schema. When `true` and exactly one `pathspec` is provided, thread `--follow` into the underlying git invocation. Default `false` to preserve current behavior.
### Proposed behavior
```ts
// Input schema addition
followRenames: z
.boolean()
.default(false)
.describe('Follow renames across the history. Requires exactly one pathspec.'),
```
Validation: if `followRenames: true` and `pathspec.length !== 1`, throw `McpError(INVALID_PARAMS)` with an actionable message.
### Scope
- `src/mcp-server/tools/definitions/git-log.tool.ts` — schema + logic
- `src/services/git/providers/cli/operations/commits/log.ts` — thread the flag into the `git log` argv
- README table entry for `git_log` updated if user-facing
### Out of scope
- Supporting `--follow` with zero or multiple pathspecs (git itself rejects it)
- Rewriting the output shape — same `GitLogResult` structure
### Alternatives considered
Auto-detect single-pathspec + enable `--follow` silently. Rejected: surprising default, and some callers deliberately want non-following history even with a single path.
ISSUE
)"
# View issue details
gh issue view <number>
# Add context
gh issue comment <number> --body "Additional findings..."
# List your open issues
gh issue list --author @me
# Close if resolved
gh issue close <number> --reason completed --comment "Fixed in <commit or PR>"
git-mcp-server, not an underlying git CLI issue