Files
holocron/plugins/gitea/skills/gitea-branches/references/branches.md
Defame1297 0f2bb242ad chore(plugins): sync generated content mirrors
Regenerates `plugins/*/skills`, `plugins/*/agents`, both per-plugin `plugin.json` manifests and the
two marketplace mirrors from `.apm/` per ADR-0017, via `scripts/sync-plugin-content.sh --all`.

The manifests matter beyond tidiness here: `plugin.json` carries the plugin version and wins over
the marketplace entry at install time (calculatePluginVersion precedence). Until this ran, the patch
bumps in the preceding commit were inert for anyone installing these plugins.

ADR: 0017
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeH8SCbcrCAQrtymkNuhKP
2026-09-09 05:15:53 +00:00

4.5 KiB

topic, source_keys
topic source_keys
branches
gitea-mcp-repo
gitea-mcp-slim-go

Branch operations

Call signatures below were verified live against the deployed gitea-mcp server via ToolSearch, not copied from research docs — this is deliberate: research docs are generated from source code at a point in time and can drift from the server actually deployed. Last verified against gitea-mcp v1.7.0, as reported by get_gitea_mcp_server_version. Re-verify against the live schema if the deployed version differs or these tools behave differently than documented here.

list_branches

Parameters:

  • owner (string, required)
  • repo (string, required)
  • page (number, optional, default: 1)
  • per_page (number, optional, default: 30)

Call:

list_branches owner: <owner> repo: <repo>

Response: one object per branch: name, protected (bool), commit_sha (present when the underlying commit data is available).

Paginate if you need the full list (see Gotchas in SKILL.md) — iterate page until the returned count is less than per_page.

create_branch

Parameters:

  • owner (string, required)
  • repo (string, required)
  • branch (string, required) — new branch name
  • old_branch (string, optional) — source branch; if omitted, defaults to the repo's default branch server-side (not necessarily your current local checkout)

Call:

create_branch owner: <owner> repo: <repo> branch: <new-name> old_branch: <source-branch>

Default dispatch: if the user gives a base ("branch off of X", "from X"), pass it as old_branch. If they don't specify a base and you're mid-task on a local branch, pass your current branch (rtk git branch --show-current) as old_branch so the new branch forks from where you're actually working, rather than silently falling back to the repo default. If neither applies (e.g. a fresh top-level request with no working branch context), omit old_branch and let it default server-side.

A branch name collision returns 409 Conflict.

rename_branch

Parameters:

  • owner (string, required)
  • repo (string, required)
  • branch (string, required) — the branch's current name
  • new_name (string, required) — the name to move it to

Call:

rename_branch owner: <owner> repo: <repo> branch: <current-name> new_name: <new-name>

A rename moves the ref server-side; it is not a delete-plus-create, and no commit history is rewritten. What it does to things pointing at the old name — open pull requests using it as head or base, a branch protection rule matching it, CI config, and tracking branches on every other clone — is not confirmed by this skill's sources: the deployed tool describes itself only as "Rename an existing branch in a repository". Treat a rename of a branch with open PRs or a protection rule as a change needing verification afterward (list_branches, plus gitea-prs for the PR side), and confirm with the user first, exactly as for delete_branch below. A collision with an existing branch name is expected to return 409 Conflict by analogy with create_branch, not separately confirmed.

delete_branch

Parameters:

  • owner (string, required)
  • repo (string, required)
  • branch (string, required)

Call:

delete_branch owner: <owner> repo: <repo> branch: <name>

Before calling this, see the delete_branch Gotcha in SKILL.md. If the target branch's name isn't obviously a scratch/feature branch, call list_branches first and check protected on the matching entry — name-matching main/master alone isn't authoritative, since a repo can protect a differently-named default branch. Confirm explicitly with the user before deleting anything protected, every time, regardless of how the request is phrased.

Token scope

list_branches, create_branch and delete_branch all require write:repository. Gitea gates reads behind write scope for repo-scoped operations, so list_branches needs the same scope as the write operations, not write:issue alone. An earlier version of this doc claimed write:issue alone was sufficient for list_branches, based on empirical testing under a token that held both write:issue and write:repository simultaneously — that test didn't isolate the variable, so it couldn't actually establish write:issue alone as sufficient.

rename_branch is a write on the same repo-scoped surface and is inferred to need write:repository too — inferred by analogy, not separately confirmed.