---
title: "Gitea MCP server for AI agents - actionlake"
description: "Give Claude 518 Gitea actions through one MCP server: repo branches, repo contents, repos. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/gitea
updated: 2026-10-22
---

Connectors · Work & projects

# Gitea MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Gitea and the rest of your systems. It gives your agent 518 Gitea actions (248 reads, 177 writes and 93 that wait for a confirmation) and holds the Gitea credential itself, so the agent never does. It paces Gitea's limits and records every call.

[Connect Gitea free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "gitea.admin_users.list",
  intent: "check which Gitea account is connected"
}
# Search users according filter conditions · read · 1 upstream call
```

- 518 actions in one signed file
- 248 read look, never change
- 177 write create and update
- 93 wait for a yes destructive, confirmed first

Set up

## Connect Gitea in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Gitea.
   Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `access_token` Gitea access token (Settings > Applications > Generate New Token, or POST /api/v1/users/{username}/tokens), with the…
   - `host` Where your Gitea lives: your host
   ```
   account { op: "connections.requirements", service: "gitea" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "gitea.admin_users.list" }
   # search users according filter conditions · read · 1 upstream call
   check { action: "gitea.repo_issues.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Gitea at a glance

**Sign-in**

Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`access_token`

**Setup fields**

`host`

**Limits we pace to**

20 calls a second, per connection

**API covered**

Gitea API v1 (Swagger 2.0, 29.0.0+dev-160-g55186ca39b), at your Gitea instance's API base URL, which you enter when connecting (path /api/v1)

**Built from**

Gitea's documentation, read 22 October 2026[gitea.com](https://gitea.com/swagger.v1.json) [docs.gitea.com](https://docs.gitea.com/api/1.24/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

244 of 248 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

7, so ask can line Gitea up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Gitea.

518 actions in 242 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **248** read look, never change
- **177** write create and update
- **93** destructive wait for a confirmation

1. ### Repo branches
   6
   2 read · 3 write · 1 destructive
   List a repository's branches · Create a branch · Retrieve a specific branch from a repository, including its effective branch protection · Delete a specific branch from a repository
2. ### Repo contents
   6
   2 read · 3 write · 1 destructive
   Modify multiple files in a repository · Create a file in a repository · Gets the metadata of all the entries of the root dir. · Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir.
3. ### Repos
   6
   3 read · 2 write · 1 destructive
   Get a repository · Edit a repository's properties. Only fields that are set will be changed. · Search for issues across the repositories that the user has access to · Delete a repository
4. ### Admin hooks
   5
   2 read · 2 write · 1 destructive
   Create a hook · List system's webhooks · Get a hook · Update a hook
5. ### Me actions variables
   5
   2 read · 2 write · 1 destructive
   Create a user-level variable · Get the user-level list of variables which is created by current doer · Get a user-level variable which is created by current doer · Update a user-level variable which is created by current doer
6. ### Me applications oauth2
   5
   2 read · 2 write · 1 destructive
   creates a new OAuth2 application · List the authenticated user's oauth2 applications · get an OAuth2 Application · update an OAuth2 Application, this includes regenerating the client secret
7. ### Me hooks
   5
   2 read · 2 write · 1 destructive
   Create a hook · List the authenticated user's webhooks · Get a hook · Update a hook
8. ### Me project columns
   5
   2 read · 2 write · 1 destructive
   Create a column in a project · List a project's columns · Get a project column · Edit a project column

**112 more areas · 475 actions**

- Me projects **5**
- Org actions variables **5**
- Org hooks **5**
- Org labels **5**
- Org project columns **5**
- Org projects **5**
- Orgs **5**
- Repo actions variables **5**
- Repo branch protections **5**
- Repo hooks **5**
- Repo issue labels **5**
- Repo issues **5**
- Repo labels **5**
- Repo milestones **5**
- Repo project columns **5**
- Repo projects **5**
- Repo pull reviews **5**
- Repo pulls **5**
- Repo releases **5**
- Repo tag protections **5**
- Admin actions runners **4**
- Admin users **4**
- Me actions runners **4**
- Me blocks **4**
- Me following **4**
- Me GPG keys **4**
- Me keys **4**
- Me starred **4**
- Org actions runners **4**
- Org blocks **4**
- Org public members **4**
- Org repos **4**
- Package **4**
- Repo actions runners **4**
- Repo collaborators **4**
- Repo hooks git **4**
- Repo issue assets **4**
- Repo issue comments **4**
- Repo issue times **4**
- Repo issues comment assets **4**
- Repo issues comments **4**
- Repo keys **4**
- Repo push mirrors **4**
- Repo release assets **4**
- Repo tags **4**
- Repo teams **4**
- Repo topics **4**
- Team members **4**
- Team repos **4**
- Admin unadopted **3**
- Admin user badges **3**
- Me emails **3**
- Me project column issues **3**
- Org actions secrets **3**
- Org members **3**
- Org project column issues **3**
- Repo actions artifacts **3**
- Repo actions runs **3**
- Repo actions secrets **3**
- Repo issue assignees **3**
- Repo issue blocks **3**
- Repo issue dependencies **3**
- Repo issue pin **3**
- Repo issue reactions **3**
- Repo issue subscriptions **3**
- Repo issues comment reactions **3**
- Repo project column issues **3**
- Repo pull merge **3**
- Repo subscription **3**
- Repo wiki page **3**
- Teams **3**
- User tokens **3**
- Admin cron **2**
- Admin user keys **2**
- Gitignore templates **2**
- Label templates **2**
- Licenses **2**
- Me actions secrets **2**
- Me avatar **2**
- Me repos **2**
- Me settings **2**
- Notifications **2**
- Notifications threads **2**
- Org avatar **2**
- Org teams **2**
- Repo actions jobs **2**
- Repo actions workflows **2**
- Repo assignees **2**
- Repo avatar **2**
- Repo file contents **2**
- Repo forks **2**
- Repo git refs **2**
- Repo issue lock **2**
- Repo notifications **2**
- Repo pull requested reviewers **2**
- Repo releases tags **2**
- Repo statuses **2**
- Repo times **2**
- Token **2**
- User following **2**
- Admin actions jobs **1**
- Admin actions runners registration token **1**
- Admin actions runs **1**
- Admin emails **1**
- Admin emails search **1**
- Admin orgs **1**
- Admin packages **1**
- Admin user orgs **1**
- Admin user rename **1**
- Admin user repos **1**
- Me **1**
- 123 smaller areas **123**

Top actions

## The Gitea API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 106 of Gitea's 106 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `gitea.repo_issues.list` List a repository's issues | List a repository's issues. | read | `work.task.list` 122 connectors |
| `gitea.admin_users.list` Search users according filter conditions | Search users according filter conditions. | read | `identity.user.list` 474 connectors |
| `gitea.me_repos.list` List the repos that the authenticated user owns | List the repos that the authenticated user owns. | read | `devops.repository.list` 28 connectors |
| `gitea.org_teams.list` List an organization's teams | List an organization's teams. | read | `identity.group.list` 262 connectors |
| `gitea.orgs.list` Get list of organizations | Get list of organizations. | read | `work.workspace.list` 50 connectors |
| `gitea.repo_pulls.list` List a repo's pull requests | List a repo's pull requests. | read | `devops.pull_request.list` 12 connectors |
| `gitea.repo_issues.create` Create an issue. If using deadline only the date will be taken into account, and time of day ignored. | Create an issue. If using deadline only the date will be taken into account, and time of day ignored. | write | `work.task.create` 127 connectors |
| `gitea.me_repos.create` Create a repository | Create a repository. | write | `devops.repository.create` 18 connectors |
| `gitea.admin_users.create` Create a user | Create a user. | write | `identity.user.create` 262 connectors |
| `gitea.org_teams.create` Create a team | Create a team. | write | `identity.group.create` 205 connectors |
| `gitea.orgs.create` Create an organization | Create an organization. | write | `work.workspace.create` 36 connectors |
| `gitea.repo_issues.delete` Delete an issue | Delete an issue. | destructive | `work.task.delete` 107 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Gitea actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which Gitea tasks are overdue, and who owns each one?
   calls `gitea.repo_issues.list`
2. Write write
   Create an issue. If using deadline only the date will be taken into account, and time of day ignored in Gitea. Show me exactly what you will send before you save it.
   calls `gitea.repo_issues.create`

Governance for Gitea

## Destructive actions wait for a yes.

93 Gitea actions are destructive. The first 10:

- Delete an issue `gitea.repo_issues.delete`
- Delete a repository `gitea.repos.delete`
- Delete a user `gitea.admin_users.delete`
- Delete a team `gitea.teams.delete`
- Delete an organization `gitea.orgs.delete`
- Delete a project `gitea.org_projects.delete`
- Delete a repo-level variable `gitea.repo_actions_variables.delete`
- Deletes a specific artifact for a workflow run `gitea.repo_actions_artifacts.delete`
- Delete a repository's tag by name `gitea.repo_tags.delete`
- Delete a specific branch from a repository `gitea.repo_branches.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do gitea.repo_issues.delete confirm_policy: **human**

Delete an issue?

**intent:** the user asked me to delete an issue

run suspended · waiting for a named person · key _gitea-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "gitea-agent",
  allowed_actions: ["gitea.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "gitea.repo_issues.delete", approver: "lead@example.com" },
    { match: "gitea.repos.delete", approver: "lead@example.com" },
    { match: "gitea.admin_users.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Gitea only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Gitea costs on actionlake.

Every Gitea action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Gitea refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 518 Gitea actions
- 518 actions page each page of a long list is one call
- 244 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Gitea action.

518 actions by area: the id your agent calls, what it does, and its effect.

**Repo branches 6**

- `gitea.repo_branches.create` Create a branch write
- `gitea.repo_branches.delete` Delete a specific branch from a repository destructive
- and 4 more in this area

**Repo contents 6**

- `gitea.repo_contents.change_files` Modify multiple files in a repository write
- `gitea.repo_contents.create` Create a file in a repository write
- and 4 more in this area

**Repos 6**

- `gitea.issues.search` Search for issues across the repositories that the user has access to read
- `gitea.repos.delete` Delete a repository destructive
- and 4 more in this area

**Admin hooks 5**

- `gitea.admin_hooks.create` Create a hook write
- `gitea.admin_hooks.get` Get a hook read
- and 3 more in this area

**Me actions variables 5**

- `gitea.me_actions_variables.create` Create a user-level variable write
- `gitea.me_actions_variables.get` Get a user-level variable which is created by current doer read
- and 3 more in this area

**Me applications oauth2 5**

- `gitea.me_applications_oauth2.create` creates a new OAuth2 application write
- `gitea.me_applications_oauth2.get` get an OAuth2 Application read
- and 3 more in this area

**Me hooks 5**

- `gitea.me_hooks.create` Create a hook write
- `gitea.me_hooks.get` Get a hook read
- and 3 more in this area

**Me project columns 5**

- `gitea.me_project_columns.create` Create a column in a project write
- `gitea.me_project_columns.get` Get a project column read
- and 3 more in this area

**Me projects 5**

- `gitea.me_projects.create` Create a project owned by the authenticated user write
- `gitea.me_projects.get` Get a project read
- and 3 more in this area

**Org actions variables 5**

- `gitea.org_actions_variables.create` Create an org-level variable write
- `gitea.org_actions_variables.get` Get an org-level variable read
- and 3 more in this area

**Org hooks 5**

- `gitea.org_hooks.create` Create a hook write
- `gitea.org_hooks.get` Get a hook read
- and 3 more in this area

**Org labels 5**

- `gitea.org_labels.create` Create a label for an organization write
- `gitea.org_labels.get` Get a single label read
- and 3 more in this area

**Org project columns 5**

- `gitea.org_project_columns.create` Create a column in a project write
- `gitea.org_project_columns.get` Get a project column read
- and 3 more in this area

**Org projects 5**

- `gitea.org_projects.create` Create a project owned by an organization write
- `gitea.org_projects.get` Get a project read
- and 3 more in this area

**Orgs 5**

- `gitea.orgs.create` Create an organization write
- `gitea.orgs.get` Get an organization read
- and 3 more in this area

**Repo actions variables 5**

- `gitea.repo_actions_variables.create` Create a repo-level variable write
- `gitea.repo_actions_variables.get` Get a repo-level variable read
- and 3 more in this area

**Repo branch protections 5**

- `gitea.repo_branch_protections.create` Create a branch protections for a repository write
- `gitea.repo_branch_protections.get` Get a specific branch protection for the repository read
- and 3 more in this area

**Repo hooks 5**

- `gitea.repo_hooks.create` Create a hook write
- `gitea.repo_hooks.get` Get a hook read
- and 3 more in this area

**Repo issue labels 5**

- `gitea.repo_issue_labels.clear` Remove all labels from an issue destructive
- `gitea.repo_issue_labels.create` Add a label to an issue write
- and 3 more in this area

**Repo issues 5**

- `gitea.repo_issues.create` Create an issue. If using deadline only the date will be taken into account, and time of day ignored. write
- `gitea.repo_issues.get` Get an issue read
- and 3 more in this area

**Repo labels 5**

- `gitea.repo_labels.create` Create a label write
- `gitea.repo_labels.get` Get a single label read
- and 3 more in this area

**Repo milestones 5**

- `gitea.repo_milestones.create` Create a milestone write
- `gitea.repo_milestones.get` Get a milestone read
- and 3 more in this area

**Repo project columns 5**

- `gitea.repo_project_columns.create` Create a column in a project write
- `gitea.repo_project_columns.get` Get a project column read
- and 3 more in this area

**Repo projects 5**

- `gitea.repo_projects.create` Create a project owned by a repository write
- `gitea.repo_projects.get` Get a project read
- and 3 more in this area

**Repo pull reviews 5**

- `gitea.repo_pull_reviews.create` Create a review to a pull request write
- `gitea.repo_pull_reviews.delete` Delete a specific review from a pull request destructive
- and 3 more in this area

**Repo pulls 5**

- `gitea.repo_pulls.create` Create a pull request write
- `gitea.repo_pulls.get` Get a pull request read
- and 3 more in this area

**Repo releases 5**

- `gitea.repo_releases.create` Create a release write
- `gitea.repo_releases.get` Get a release read
- and 3 more in this area

**Repo tag protections 5**

- `gitea.repo_tag_protections.create` Create a tag protections for a repository write
- `gitea.repo_tag_protections.get` Get a specific tag protection for the repository read
- and 3 more in this area

**Admin actions runners 4**

- `gitea.admin_actions_runners.delete` Delete a global runner destructive
- `gitea.admin_actions_runners.get` Get a global runner read
- and 2 more in this area

**Admin users 4**

- `gitea.admin_users.create` Create a user write
- `gitea.admin_users.delete` Delete a user destructive
- and 2 more in this area

Me actions runners **4** Me blocks **4** Me following **4** Me GPG keys **4** Me keys **4** Me starred **4** Org actions runners **4** Org blocks **4** Org public members **4** Org repos **4** Package **4** Repo actions runners **4** Repo collaborators **4** Repo hooks git **4** Repo issue assets **4** Repo issue comments **4** Repo issue times **4** Repo issues comment assets **4** Repo issues comments **4** Repo keys **4** Repo push mirrors **4** Repo release assets **4** Repo tags **4** Repo teams **4** Repo topics **4** Team members **4** Team repos **4** Admin unadopted **3** Admin user badges **3** Me emails **3** Me project column issues **3** Org actions secrets **3** Org members **3** Org project column issues **3** Repo actions artifacts **3** Repo actions runs **3** Repo actions secrets **3** Repo issue assignees **3** Repo issue blocks **3** Repo issue dependencies **3** Repo issue pin **3** Repo issue reactions **3** Repo issue subscriptions **3** Repo issues comment reactions **3** Repo project column issues **3** Repo pull merge **3** Repo subscription **3** Repo wiki page **3** Teams **3** User tokens **3** Admin cron **2** Admin user keys **2** Gitignore templates **2** Label templates **2** Licenses **2** Me actions secrets **2** Me avatar **2** Me repos **2** Me settings **2** Notifications **2** Notifications threads **2** Org avatar **2** Org teams **2** Repo actions jobs **2** Repo actions workflows **2** Repo assignees **2** Repo avatar **2** Repo file contents **2** Repo forks **2** Repo git refs **2** Repo issue lock **2** Repo notifications **2** Repo pull requested reviewers **2** Repo releases tags **2** Repo statuses **2** Repo times **2** Token **2** User following **2** Admin actions jobs **1** Admin actions runners registration token **1** Admin actions runs **1** Admin emails **1** Admin emails search **1** Admin orgs **1** Admin packages **1** Admin user orgs **1** Admin user rename **1** Admin user repos **1** Me **1** 123 smaller areas **123**

This index shows a sample of each area. All 518 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The Gitea MCP server, answered.

**Is there a Gitea MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 518 Gitea actions across repo branches, repo contents, repos and admin hooks, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Gitea.

**What do I need to connect Gitea?**

Gitea access token (Settings > Applications > Generate New Token, or POST /api/v1/users/{username}/tokens), with the…. Plus your host. The free call account { op: "connections.requirements", service: "gitea" } lists exactly what to paste.

**Can an AI agent delete or change things in Gitea?**

Only if its key allows it, and only with an explicit confirmation. 93 Gitea actions are destructive, including delete an issue, delete a repository and delete a user. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Gitea API limit?**

actionlake paces every call to the limits in the Gitea service file: 20 calls a second per connection. Repeated reads are answered from cache (244 Gitea actions can be), which never reaches Gitea.

**What does a Gitea action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (518 Gitea actions page). Cache hits, searches, dry runs and calls Gitea refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Gitea API does it cover?**

The Gitea API v1 (Swagger 2.0, 29.0.0+dev-160-g55186ca39b) at your Gitea instance's API base URL, which you enter when connecting (path /api/v1). It is built from Gitea's documentation as read on 22 October 2026. 518 actions in 242 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my Gitea data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Gitea credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Gitea

Shares the most action names with

- [Forgejo 96](https://actionlake.com/connectors/forgejo)
- [OpenProject 28](https://actionlake.com/connectors/openproject)
- [JetBrains YouTrack 26](https://actionlake.com/connectors/jetbrains-youtrack)
- [Todoist 24](https://actionlake.com/connectors/todoist)
- [Miro 23](https://actionlake.com/connectors/miro)
- [Toggl Track 22](https://actionlake.com/connectors/toggl-track)

Joins with, on shared entities

- [GitLab 4](https://actionlake.com/connectors/gitlab)
- [Azure DevOps Services 4](https://actionlake.com/connectors/azure-devops-services)
- [GitHub 4](https://actionlake.com/connectors/github)
- [Sourcegraph 4](https://actionlake.com/connectors/sourcegraph)
- [Hugging Face 4](https://actionlake.com/connectors/hugging-face)
- [Cloudsmith 4](https://actionlake.com/connectors/cloudsmith)

Browse

- [All Work & projects connectors](https://actionlake.com/connectors/category/work-and-projects)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Gitea; the name is the vendor's own. Counts are from the Gitea service file, version 1.0.0.

## Give your agent Gitea today.

[Connect Gitea free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/gitea
More: https://actionlake.com/llms.txt
