--- topic: commits source_keys: - gitea-mcp-repo - gitea-mcp-slim-go --- # Commit operations Read-only commit history, scoped to a repo (optionally to one branch or one path). Call signatures below were verified live against the deployed `gitea-mcp` server via `ToolSearch` at authoring time, not copied from research docs, for the same drift-avoidance reason noted in `references/branches.md`. This domain has no prior skill precedent — it's new coverage added alongside branches because commit history is naturally scoped to a branch (a "what happened on this branch" question), not because it shares any tool family with branch create/delete. ## `list_commits` **Parameters:** - `owner` (string, required) - `repo` (string, required) - `sha` (string, optional) — starting SHA or branch name; if omitted, gitea-mcp uses the repo's default branch - `path` (string, optional) — restrict results to commits that touched this file/path - `page` (number, optional, default: `1`, minimum: `1`) - `per_page` (number, optional, default: `30`, minimum: `1`) **Call:** ``` list_commits owner: repo: sha: path: ``` Dispatch defaults: - "commits on ``" → pass `` as `sha`. - "commits touching ``" (no branch mentioned) → pass `path` alone, `sha` omitted (defaults to the repo's default branch). - Both given → pass both; the result is history for that path, walked from that branch/SHA. - Neither given → omit both; this returns default-branch history, which is a reasonable default for an open-ended "what's the recent history here" question. **Response:** one object per commit: `sha`, `html_url`, `created`, `message` (when available), `author` (`{name, email, date}`, when available). Paginate per the manual-pagination Gotcha in SKILL.md if you need more than one page of history. ## `get_commit` **Parameters:** - `owner` (string, required) - `repo` (string, required) - `sha` (string, required) **Call:** ``` get_commit owner: repo: sha: ``` **Response:** same shape as a `list_commits` entry, but always fully populated (`message` and `author` are guaranteed present, not conditional). Use this when the user asks about one specific commit by SHA rather than browsing history — `list_commits` entries may omit `message`/`author` in edge cases, `get_commit` will not. ## Token scope Both tools are believed to require `write:repository`, even though they're read-only — inferred by analogy with the scope-gating principle in `overview.md` (Gitea gates reads behind write scope for repo-scoped operations), not a claim `overview.md` makes for commits by name: its explicit `write:repository` enumeration lists PR, branch, file, release, and tag operations, but doesn't mention commits. An earlier version of this doc claimed `write:issue` alone worked, based on empirical testing under a token that held both `write:issue` and `write:repository` simultaneously — that test didn't isolate the variable either. Treat this as unverified until tested under a token scoped to `write:issue` only (no `write:repository`).