Connectors · Work & projects
Forgejo MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Forgejo and the rest of your systems. It gives your agent 485 Forgejo actions (249 reads, 150 writes and 86 that wait for a confirmation) and holds the Forgejo credential itself, so the agent never does. It paces Forgejo's limits and records every call.
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/mcpdo { action: "forgejo.admin_users.list", intent: "check which Forgejo account is connected"}# Search users according filter conditions · read · 1 upstream call- 485actionsin one signed file
- 249readlook, never change
- 150writecreate and update
- 86wait for a yesdestructive, confirmed first
Set up
Connect Forgejo in three steps.
- 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 - 02
Connect Forgejo.
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_tokenForgejo access token (Settings > Applications > Generate New Token, or POST /api/v1/users/{username}/tokens), with…hostWhere your Forgejo lives: your host
account { op: "connections.requirements", service: "forgejo" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "forgejo.admin_users.list" }# search users according filter conditions · read · 1 upstream callcheck { action: "forgejo.repo_issues.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Forgejo 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
- Forgejo API v1 (Swagger 2.0, 16.0.0-dev-785-465b60ef+gitea-1.22.0), at your Forgejo instance's API base URL, which you enter when connecting (path /api/v1)
- Built from
- Forgejo's documentation, read 23 October 2026codeberg.orgforgejo.org
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 240 of 249 reads, for up to 5 minutes; a write clears what it affects
- Shared entities
- 7, so ask can line Forgejo up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Forgejo.
485 actions in 232 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 249readlook, never change
- 150writecreate and update
- 86destructivewait for a confirmation
Repo contents
62 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
Repo flags
62 read · 2 write · 2 destructive
List a repository's flags · Add a flag to a repository · Check if a repository has a given flag · Replace all flags of a repository
Repos
63 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
Admin hooks
52 read · 2 write · 1 destructive
Create a hook · List global (system) webhooks · Get a hook · Update a hook
Admin quota rules
52 read · 2 write · 1 destructive
Create a new quota rule · List the available quota rules · Get information about a quota rule · Change an existing quota rule
Me actions variables
52 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
Me applications oauth2
52 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
Me hooks
52 read · 2 write · 1 destructive
Create a hook · List the authenticated user's webhooks · Get a hook · Update a hook
112 more areas · 442 actions
- Org actions variables 5
- Org hooks 5
- Org labels 5
- Orgs 5
- Repo actions variables 5
- Repo branch protections 5
- Repo branches 5
- Repo hooks 5
- Repo issue labels 5
- Repo issues 5
- Repo labels 5
- Repo milestones 5
- Repo pull reviews 5
- Repo pulls 5
- Repo releases 5
- Repo tag protections 5
- Admin actions runners 4
- Admin quota groups 4
- Admin users 4
- Me actions runners 4
- Me following 4
- Me GPG keys 4
- Me keys 4
- Me starred 4
- Org actions runners 4
- Org public members 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 pull review comments 4
- Repo push mirrors 4
- Repo release assets 4
- Repo sync fork 4
- Repo tags 4
- Repo teams 4
- Repo topics 4
- Team members 4
- Team repos 4
- Admin quota group users 3
- Admin unadopted 3
- Admin user tokens 3
- Me emails 3
- Org actions secrets 3
- Org members 3
- Org repos 3
- Repo actions artifacts 3
- Repo actions runs 3
- Repo actions secrets 3
- Repo git notes 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 pull merge 3
- Repo subscription 3
- Repo wiki page 3
- Teams 3
- User tokens 3
- Admin cron 2
- Admin quota group rules 2
- Admin user emails 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
- Package 2
- Repo avatar 2
- Repo forks 2
- Repo git blobs 2
- Repo git refs 2
- Repo notifications 2
- Repo pull requested reviewers 2
- Repo releases tags 2
- Repo statuses 2
- Repo times 2
- User following 2
- Actions run 1
- Activitypub actor 1
- Activitypub actor outbox 1
- Activitypub repository id 1
- Activitypub repository id outbox 1
- Activitypub user id 1
- Activitypub user id activities 1
- Activitypub user id activity activity 1
- Activitypub user id outbox 1
- Admin actions runners jobs 1
- Admin actions runners registration token 1
- Admin emails 1
- Admin emails search 1
- Admin orgs 1
- Admin runners jobs 1
- Admin runners registration token 1
- Admin user orgs 1
- Admin user quota 1
- Admin user quota groups 1
- 113 smaller areas 113
Top actions
The Forgejo API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 96 of Forgejo's 96 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
forgejo.repo_issues.listList a repository's issues | List a repository's issues. | read | work.task.list122 connectors |
forgejo.admin_users.listSearch users according filter conditions | Search users according filter conditions. | read | identity.user.list474 connectors |
forgejo.me_repos.listList the repos that the authenticated user owns | List the repos that the authenticated user owns. | read | devops.repository.list28 connectors |
forgejo.org_teams.listList an organization's teams | List an organization's teams. | read | identity.group.list262 connectors |
forgejo.orgs.listList all organizations | List all organizations. | read | work.workspace.list50 connectors |
forgejo.repo_pulls.listList a repo's pull requests. If a pull request is selected but fails to be retrieved for any reason, it will be a null value in the list of results. | List a repo's pull requests. If a pull request is selected but fails to be retrieved for any reason, it will be a null value in the list of results. | read | devops.pull_request.list12 connectors |
forgejo.repo_issues.createCreate 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.create127 connectors |
forgejo.me_repos.createCreate a repository | Create a repository. | write | devops.repository.create18 connectors |
forgejo.admin_users.createCreate a user account | Create a user account. | write | identity.user.create262 connectors |
forgejo.org_teams.createCreate a team | Create a team. | write | identity.group.create205 connectors |
forgejo.orgs.createCreate an organization | Create an organization. | write | work.workspace.create36 connectors |
forgejo.repo_issues.deleteDelete an issue | Delete an issue. | destructive | work.task.delete107 connectors |
Try it
Prompts to paste into Claude.
Each one names the Forgejo actions it will call, so you know what it reads and what it changes before you send it.
- Readread
Which Forgejo tasks are overdue, and who owns each one?
calls
forgejo.repo_issues.list - Writewrite
Create an issue. If using deadline only the date will be taken into account, and time of day ignored in Forgejo. Show me exactly what you will send before you save it.
calls
forgejo.repo_issues.create
Governance for Forgejo
Destructive actions wait for a yes.
86 Forgejo actions are destructive. The first 10:
- Delete an issue
forgejo.repo_issues.delete - Delete a repository
forgejo.repos.delete - Delete user account
forgejo.admin_users.delete - Delete a team
forgejo.teams.delete - Delete an organization
forgejo.orgs.delete - Delete a repo-level variable
forgejo.repo_actions_variables.delete - Mark an artifact for deletion
forgejo.repo_actions_artifacts.delete - Delete a repository's tag by name
forgejo.repo_tags.delete - Delete a specific branch from a repository
forgejo.repo_branches.delete - Delete a particular runner that belongs to a repository
forgejo.repo_actions_runners.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.
Delete an issue?
intent: the user asked me to delete an issue
account { op: "keys.create", name: "forgejo-agent", allowed_actions: ["forgejo.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "forgejo.repo_issues.delete", approver: "[email protected]" }, { match: "forgejo.repos.delete", approver: "[email protected]" }, { match: "forgejo.admin_users.delete", approver: "[email protected]" } ]}Cost
What Forgejo costs on actionlake.
Every Forgejo action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Forgejo 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.
- 1upstream call per actionall 485 Forgejo actions
- 485actions pageeach page of a long list is one call
- 240reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Forgejo action.
485 actions by area: the id your agent calls, what it does, and its effect.
Repo contents6
forgejo.repo_contents.change_filesModify multiple files in a repositorywriteforgejo.repo_contents.createCreate a file in a repositorywrite- and 4 more in this area
Repo flags6
forgejo.repo_flags.addAdd a flag to a repositorywriteforgejo.repo_flags.getCheck if a repository has a given flagread- and 4 more in this area
Repos6
forgejo.issues.searchSearch for issues across the repositories that the user has access toreadforgejo.repos.deleteDelete a repositorydestructive- and 4 more in this area
Admin hooks5
forgejo.admin_hooks.createCreate a hookwriteforgejo.admin_hooks.getGet a hookread- and 3 more in this area
Admin quota rules5
forgejo.admin_quota_rules.createCreate a new quota rulewriteforgejo.admin_quota_rules.getGet information about a quota ruleread- and 3 more in this area
Me actions variables5
forgejo.me_actions_variables.createCreate a user-level variablewriteforgejo.me_actions_variables.getGet a user-level variable which is created by current doerread- and 3 more in this area
Me applications oauth25
forgejo.me_applications_oauth2.createCreates a new OAuth2 applicationwriteforgejo.me_applications_oauth2.getGet an OAuth2 applicationread- and 3 more in this area
Me hooks5
forgejo.me_hooks.createCreate a hookwriteforgejo.me_hooks.getGet a hookread- and 3 more in this area
Org actions variables5
forgejo.org_actions_variables.createCreate a new variable in organizationwriteforgejo.org_actions_variables.getGet organization's variable by nameread- and 3 more in this area
Org hooks5
forgejo.org_hooks.createCreate a hookwriteforgejo.org_hooks.getGet a hookread- and 3 more in this area
Org labels5
forgejo.org_labels.createCreate a label for an organizationwriteforgejo.org_labels.getGet a single labelread- and 3 more in this area
Orgs5
forgejo.orgs.createCreate an organizationwriteforgejo.orgs.getGet an organizationread- and 3 more in this area
Repo actions variables5
forgejo.repo_actions_variables.createCreate a repo-level variablewriteforgejo.repo_actions_variables.getGet a repo-level variableread- and 3 more in this area
Repo branch protections5
forgejo.repo_branch_protections.createCreate a branch protections for a repositorywriteforgejo.repo_branch_protections.getGet a specific branch protection for the repositoryread- and 3 more in this area
Repo branches5
forgejo.repo_branches.createCreate a branchwriteforgejo.repo_branches.deleteDelete a specific branch from a repositorydestructive- and 3 more in this area
Repo hooks5
forgejo.repo_hooks.createCreate a hookwriteforgejo.repo_hooks.getGet a hookread- and 3 more in this area
Repo issue labels5
forgejo.repo_issue_labels.clearRemove all labels from an issuedestructiveforgejo.repo_issue_labels.createAdd a label to an issuewrite- and 3 more in this area
Repo issues5
forgejo.repo_issues.createCreate an issue. If using deadline only the date will be taken into account, and time of day ignored.writeforgejo.repo_issues.getGet an issueread- and 3 more in this area
Repo labels5
forgejo.repo_labels.createCreate a labelwriteforgejo.repo_labels.getGet a single labelread- and 3 more in this area
Repo milestones5
forgejo.repo_milestones.createCreate a milestonewriteforgejo.repo_milestones.getGet a milestoneread- and 3 more in this area
Repo pull reviews5
forgejo.repo_pull_reviews.createCreate a review to an pull requestwriteforgejo.repo_pull_reviews.deleteDelete a specific review from a pull requestdestructive- and 3 more in this area
Repo pulls5
forgejo.repo_pulls.createCreate a pull requestwriteforgejo.repo_pulls.getGet a pull requestread- and 3 more in this area
Repo releases5
forgejo.repo_releases.createCreate a releasewriteforgejo.repo_releases.getGet a releaseread- and 3 more in this area
Repo tag protections5
forgejo.repo_tag_protections.createCreate a tag protections for a repositorywriteforgejo.repo_tag_protections.getGet a specific tag protection for the repositoryread- and 3 more in this area
Admin actions runners4
forgejo.admin_actions_runners.createRegister a new global runnerwriteforgejo.admin_actions_runners.deleteDelete a particular runner, no matter whether it is a global runner or scoped to an organization, user, or repositorydestructive- and 2 more in this area
Admin quota groups4
forgejo.admin_quota_groups.createCreate a new quota groupwriteforgejo.admin_quota_groups.deleteDelete a quota groupdestructive- and 2 more in this area
Admin users4
forgejo.admin_users.createCreate a user accountwriteforgejo.admin_users.deleteDelete user accountdestructive- and 2 more in this area
Me actions runners4
forgejo.me_actions_runners.createRegister a new user-level runnerwriteforgejo.me_actions_runners.deleteDelete a particular user-level runnerdestructive- and 2 more in this area
Me following4
forgejo.me_following.addFollow a userwriteforgejo.me_following.deleteUnfollow a userdestructive- and 2 more in this area
Me GPG keys4
forgejo.me_gpg_keys.createAdd a GPG public key to current user's accountwriteforgejo.me_gpg_keys.deleteRemove a GPG public key from current user's accountdestructive- and 2 more in this area
Me keys 4Me starred 4Org actions runners 4Org public members 4Repo actions runners 4Repo collaborators 4Repo hooks git 4Repo issue assets 4Repo issue comments 4Repo issue times 4Repo issues comment assets 4Repo issues comments 4Repo keys 4Repo pull review comments 4Repo push mirrors 4Repo release assets 4Repo sync fork 4Repo tags 4Repo teams 4Repo topics 4Team members 4Team repos 4Admin quota group users 3Admin unadopted 3Admin user tokens 3Me emails 3Org actions secrets 3Org members 3Org repos 3Repo actions artifacts 3Repo actions runs 3Repo actions secrets 3Repo git notes 3Repo issue blocks 3Repo issue dependencies 3Repo issue pin 3Repo issue reactions 3Repo issue subscriptions 3Repo issues comment reactions 3Repo pull merge 3Repo subscription 3Repo wiki page 3Teams 3User tokens 3Admin cron 2Admin quota group rules 2Admin user emails 2Admin user keys 2Gitignore templates 2Label templates 2Licenses 2Me actions secrets 2Me avatar 2Me repos 2Me settings 2Notifications 2Notifications threads 2Org avatar 2Org teams 2Package 2Repo avatar 2Repo forks 2Repo git blobs 2Repo git refs 2Repo notifications 2Repo pull requested reviewers 2Repo releases tags 2Repo statuses 2Repo times 2User following 2Actions run 1Activitypub actor 1Activitypub actor outbox 1Activitypub repository id 1Activitypub repository id outbox 1Activitypub user id 1Activitypub user id activities 1Activitypub user id activity activity 1Activitypub user id outbox 1Admin actions runners jobs 1Admin actions runners registration token 1Admin emails 1Admin emails search 1Admin orgs 1Admin runners jobs 1Admin runners registration token 1Admin user orgs 1Admin user quota 1Admin user quota groups 1113 smaller areas 113
This index shows a sample of each area. All 485 actions, with their inputs and prices, are in the catalogue, which a free sandbox key can search.
Questions
The Forgejo MCP server, answered.
Is there a Forgejo MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 485 Forgejo actions across repo contents, repo flags, 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 Forgejo.
What do I need to connect Forgejo?
Forgejo access token (Settings > Applications > Generate New Token, or POST /api/v1/users/{username}/tokens), with…. Plus your host. The free call account { op: "connections.requirements", service: "forgejo" } lists exactly what to paste.
Can an AI agent delete or change things in Forgejo?
Only if its key allows it, and only with an explicit confirmation. 86 Forgejo actions are destructive, including delete an issue, delete a repository and delete user account. 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 Forgejo API limit?
actionlake paces every call to the limits in the Forgejo service file: 20 calls a second per connection. Repeated reads are answered from cache (240 Forgejo actions can be), which never reaches Forgejo.
What does a Forgejo action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (485 Forgejo actions page). Cache hits, searches, dry runs and calls Forgejo 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 Forgejo API does it cover?
The Forgejo API v1 (Swagger 2.0, 16.0.0-dev-785-465b60ef+gitea-1.22.0) at your Forgejo instance's API base URL, which you enter when connecting (path /api/v1). It is built from Forgejo's documentation as read on 23 October 2026. 485 actions in 232 areas, each one in the signed service file (version 1.0.0).
Does actionlake keep my Forgejo 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 Forgejo 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.
Give your agent Forgejo today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.