Gitea

Gitea

Self-hosted Git server — manage repos, issues, and PRs from an AI agent.

Score 56(?)CommunityMITVerified Top MCPs for Git & Repo Workflows

Quick answer

What it does

Wraps the Gitea REST API for repository, issue, PR, label, and release operations — read by default, write behind explicit per-tool gates.

Best for

  • Self-hosted Git workflows
  • Issue triage and PR review
  • Release management on Gitea
  • Migrating a GitHub-centric agent stack to self-hosted

Not for

  • Pure GitHub.com teams (use the GitHub MCP)
  • Workflows that need GitHub Actions (Gitea Actions has a different API)

Setup recipe

Pick your client, then follow the three steps.

  1. 1

    Install

    claude_desktop_config.json
    {
      "mcpServers": {
        "gitea": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GITEA_URL",
            "-e",
            "GITEA_TOKEN",
            "ghcr.io/kazuph/mcp-gitea:latest"
          ],
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    Paste under mcpServers. Fully quit and reopen Claude after editing.

    CLI or .mcp.json
    # export GITEA_URL=https://gitea.example.com
    # export GITEA_TOKEN=changeme
    claude mcp add gitea -- docker run --rm -i -e GITEA_URL -e GITEA_TOKEN ghcr.io/kazuph/mcp-gitea:latest

    Run from your repo. Commit .mcp.json to share with your team.

    .cursor/mcp.json
    {
      "mcpServers": {
        "gitea": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GITEA_URL",
            "-e",
            "GITEA_TOKEN",
            "ghcr.io/kazuph/mcp-gitea:latest"
          ],
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    Global path: ~/.cursor/mcp.json. Reload window after editing.

    .vscode/mcp.json
    {
      "servers": {
        "gitea": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GITEA_URL",
            "-e",
            "GITEA_TOKEN",
            "ghcr.io/kazuph/mcp-gitea:latest"
          ],
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    VS Code uses the "servers" key (not "mcpServers").

    ~/.codeium/windsurf/mcp_config.json
    {
      "mcpServers": {
        "gitea": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GITEA_URL",
            "-e",
            "GITEA_TOKEN",
            "ghcr.io/kazuph/mcp-gitea:latest"
          ],
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    Open via Cascade → hammer icon → Configure.

    cline_mcp_settings.json
    {
      "mcpServers": {
        "gitea": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GITEA_URL",
            "-e",
            "GITEA_TOKEN",
            "ghcr.io/kazuph/mcp-gitea:latest"
          ],
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    Open via the Cline sidebar → MCP Servers → Edit.

    ~/.continue/config.json
    {
      "experimental": {
        "modelContextProtocolServers": [
          {
            "transport": {
              "type": "stdio",
              "command": "docker",
              "args": [
                "run",
                "--rm",
                "-i",
                "-e",
                "GITEA_URL",
                "-e",
                "GITEA_TOKEN",
                "ghcr.io/kazuph/mcp-gitea:latest"
              ],
              "env": {
                "GITEA_URL": "${GITEA_URL}",
                "GITEA_TOKEN": "${GITEA_TOKEN}"
              }
            }
          }
        ]
      }
    }

    Continue uses modelContextProtocolServers with a transport block.

    ~/.codex/config.toml
    # ~/.codex/config.toml
    [mcp_servers.gitea]
    command = "docker"
    args = [
      "run",
      "--rm",
      "-i",
      "-e",
      "GITEA_URL",
      "-e",
      "GITEA_TOKEN",
      "ghcr.io/kazuph/mcp-gitea:latest",
    ]
    env = { GITEA_URL = "${GITEA_URL}", GITEA_TOKEN = "${GITEA_TOKEN}" }

    Codex uses TOML. Each server is a [mcp_servers.<name>] subtable.

    ~/.config/zed/settings.json
    {
      "context_servers": {
        "gitea": {
          "command": {
            "path": "docker",
            "args": [
              "run",
              "--rm",
              "-i",
              "-e",
              "GITEA_URL",
              "-e",
              "GITEA_TOKEN",
              "ghcr.io/kazuph/mcp-gitea:latest"
            ]
          },
          "env": {
            "GITEA_URL": "${GITEA_URL}",
            "GITEA_TOKEN": "${GITEA_TOKEN}"
          }
        }
      }
    }

    Zed calls them "context_servers". Settings live-reload on save.

    ChatGPT → Apps directory

    Gitea doesn't ship a hosted HTTPS endpoint today. ChatGPT supports remote MCP servers only — to use this server in ChatGPT you'll need to deploy it to a public HTTPS URL first (e.g. via Cloudflare Workers or Vercel) or wait for an official remote build.

  2. 2

    Set required secrets

    Set GITEA_URL, GITEA_TOKEN in your shell environment before launching your MCP client.

  3. 3

    Try a minimum working prompt

    Minimum working prompt pending verification. Try any prompt from the MCP’s README once installed.

Tools & permissions

ToolDescriptionArgsSide effects
list_reposList repositories visible to the token.Read
get_repoReturn metadata for a repo.owner: string, repo: stringRead
list_issuesList issues in a repo.owner: string, repo: stringRead
create_issueOpen an issue. Requires write scope.owner: string, repo: string, title: string, body?: stringWrite
list_pull_requestsList PRs in a repo.owner: string, repo: stringRead

Security & scope

Access scope
Read-only
Sandbox
Authenticates with a Gitea personal access token scoped to the smallest set of permissions the workflow needs. The MCP defaults to read-only tools; writes require an explicit toggle.
Gotchas
  • Tokens carry whatever permissions they were created with — always scope to a specific repo or org.
  • Self-hosted Gitea uses self-signed TLS by default; export GITEA_INSECURE=true only on internal-only hosts.
  • Gitea Actions have a different API surface from GitHub Actions; do not assume the same tool names.

Agent prompt pack

— copy into Claude, Cursor, or ChatGPT.
Paste into Claude, Cursor, or ChatGPT. Edit the [brackets] before sending.
Recommend the best MCP servers for [task: e.g. git & repo workflows work] in [client: Claude].

Constraints:
- Prefer tools that are [official | open-source | read-only] — pick what matters for my use case.
- Exclude MCPs that require [e.g. a paid plan, OAuth-only flows, remote-only transport].
- Return at most 3 picks, ranked.

For each pick include:
1. One-sentence rationale.
2. The ready-to-paste install snippet for my client.
3. Any required secrets I need to create before installing.

Cross-check the top-mcps.com listing: https://top-mcps.com/top-mcps-for-git-repo-workflows
Compare Gitea against a real alternative. Swap the second MCP in [brackets] if you want a different match.
Compare Gitea MCP vs [GitHub MCP] for the following job: [describe the job, e.g. "let an agent create GitHub issues on bug triage"].

Judge them on:
- Setup time and complexity (what a new user hits first).
- Auth model (none / API key / OAuth 2.1) and credential risk.
- Transport (stdio / Streamable HTTP / SSE) and where the server runs.
- Required secrets and the blast radius if they leak.
- Operational risk in an unattended agent loop.
- Which one is "good enough" for a weekend prototype vs. production.

End with one sentence: which should I pick for my scenario, which is: [my scenario].

References:
- https://top-mcps.com/mcp/gitea
- top-mcps.com listing for GitHub
Asks the agent to install and verify. Works inside Claude Code, Cursor Agent, Codex CLI.
Install the Gitea MCP server for my [client: Claude] at the default config path for that client.

Use the exact install snippet published at https://top-mcps.com/mcp/gitea (fetch https://top-mcps.com/mcp/gitea.json for the canonical server.json if you can read URLs).

Before finishing:
1. Create the required secrets (GITEA_URL, GITEA_TOKEN) and put them in the appropriate env block — do not hard-code them.
2. Restart or reload the client so it picks up the new server.
3. Verify the server is connected (green / running state) and at least one tool is listed.
4. If anything fails, read the client's MCP logs and report the exact error — do not silently retry.

Confirm when done and list the tools the server now exposes.

Frequently asked questions

What changed

2 updates tracked.
  1. Refreshed install snippets and fact sheet; verified for 2026.

  2. Initial directory listing.

More Git & Repo Workflows MCPs

Other tools in the same category worth evaluating.

Official

Full GitHub API access: repos, PRs, issues, and code search.

git, github, repos, prs
5 minLow
GitLab

Full GitLab API access: repos, MRs, issues, pipelines, and registries.

git, gitlab, repos, mrs
5 minLow
Git
Official

Local Git operations: commit, diff, log, branch, and more.

git, local, commits, diff
2 minLow

Compared with Gitea

Side-by-side breakdowns for the choices people most often weigh against this MCP.

Exploring Top MCPs for Git & Repo Workflows? See all Git & Repo Workflows MCPs →