Connect your AI assistant to Forgejo repositories. Manage issues, pull requests, files, and more through natural language.
Connect your AI assistant to Forgejo repositories. Manage issues, pull requests, files, and more through natural language.
Compare MCP servers by category, or browse hosted MCP servers if you prefer an endpoint over a local process.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| User | |
| get_my_user_info | Get information about the authenticated user |
| check_notifications | Check and list user notifications |
| get_notification_thread | Get detailed info on a single notification thread |
| mark_notification_read | Mark a single notification thread as read |
| mark_all_notifications_read | Acknowledge all notifications |
| list_repo_notifications | Filter notifications scoped to a single repository |
| mark_repo_notifications_read | Mark all notifications in a specific repo as read |
| search_users | Search for users |
| Repositories | |
| list_my_repos | List all repositories you own |
| get_repo | Get a single repository by owner and name |
| create_repo | Create a new repository |
| fork_repo | Fork a repository |
| edit_repo | Edit repository settings. Only fields you pass change; omitted fields are left unchanged. Providing no fields is an error. |
| search_repos | Search for repositories |
| Topics | |
| list_repo_topics | List a repository's topics. Bounded by page (default 1) + limit (default 100); returns {topics, page, limit, count}. |
| set_repo_topics | Replace all topics. topics is a required comma-separated string; an empty string clears. Invalid names are rejected before the request. |
| add_repo_topic | Add one topic |
| delete_repo_topic | Delete one topic |
| Branches | |
| list_branches | List all branches in a repository |
| create_branch | Create a new branch |
| delete_branch | Delete a branch |
| list_branch_protections | List a repository's branch protection rules. Bounded by page (1-based) + limit (page size); the response echoes page/limit so callers can fetch the next page. |
| get_branch_protection | Get a single rule by rule name |
| create_branch_protection | Create a rule. Requires branch_name; status_check_contexts is a comma-separated list of required checks (e.g. "ci/build,ci/test"). |
| edit_branch_protection | Edit a rule by rule name. Only fields you pass change; omitted fields are left unchanged. |
| delete_branch_protection | Delete a rule by rule name |
| Webhooks | |
| list_repo_hooks | List repository webhooks. Bounded by page (default 1) + limit (default 30, no server-imposed ceiling); returns total_count when Forgejo reports X-Total-Count. |
| get_repo_hook | Get a single repository webhook by ID |
| create_repo_hook | Create a repository webhook. The secret is accepted but never echoed in the response. |
| edit_repo_hook | Edit a repository webhook. Only fields you pass change; omitted fields are left unchanged. |
| delete_repo_hook | Delete a repository webhook by ID |
| test_repo_hook | Trigger a test delivery for a repository webhook — WARNING: triggers a live HTTP delivery |
| Files | |
| get_file_content | Get the content of a file. Optional start_line/end_line request a 1-indexed inclusive line range (clamps to file extent; ignored when with_metadata=true). |
| list_repo_contents | List files and directories at a path. path="" lists the repository root. Returns one level; for a full tree use get_repo_tree with recursive=true. |
| get_repo_tree | Get the Git tree. recursive=true returns the complete file tree in one response (subject to the server's tree-endpoint size cap); recursive=false (default) retu |
| create_file | Create a new file. Supply exactly one of plain-text content or binary-safe content_base64 (strict standard Base64). |
| update_file | Update an existing file. Supply exactly one of plain-text content or binary-safe content_base64 (strict standard Base64). |
| delete_file | Delete a file |
| change_files | Atomically create, update, and delete multiple files in one native Forgejo commit; create/update operations accept content or content_base64. |
| Commits | |
| list_repo_commits | List commits in a repository |
| get_commit_statuses | List per-context commit statuses for a full 40-character SHA. Bounded by page (default 1) + limit (default 30, maximum 50); returns {sha, statuses, page, limit, |
| Issues | |
| list_repo_issues | List issues in a repository (page/limit). Optional sort orders server-side: relevance, latest, oldest, recentupdate, leastupdate, mostcomment, leastcomment, nea |
| search_issues | Search issues across every repository of one owner (page/limit); returns {issues,page,limit,count,has_next,total_count} — total_count is present only when Forge |
| get_issue_by_index | Get a specific issue |
| create_issue | Create a new issue. Optional labels (comma-separated names or IDs), assignees (comma-separated usernames) and milestone (numeric ID) are applied by the same req |
| add_issue_labels | Add labels to an issue. labels takes comma-separated label names or numeric IDs; an unrecognised name is an error and nothing is applied. |
| remove_issue_labels | Remove labels from an issue. labels takes comma-separated label names or numeric IDs. |
| update_issue | Update an existing issue (requires numeric milestone ID). due_date sets the deadline (RFC3339); clear_due_date=true removes it. The two are mutually exclusive — |
| issue_state_change | Open or close an issue |
| list_issue_dependencies | List issues the given issue depends on. Bounded by page (1-based) + limit (page size); the response echoes page/limit so callers can fetch the next page. |
| list_issue_dependents | List issues that depend on the given issue. Bounded by page (1-based) + limit (page size); the response echoes page/limit so callers can fetch the next page. |
| add_issue_dependency | Make one issue depend on another. The dependency may live in a different repository: optional depends_on_owner/depends_on_repo default to owner/repo. |
| remove_issue_dependency | Remove a dependency from an issue. For a cross-repo dependency, optional dependency_owner/dependency_repo default to owner/repo. |
| list_repo_milestones | List milestones with their IDs (use with update_issue) |
| list_repo_labels | List labels with their IDs. Merges org-level labels for org-owned repos (set include_org_labels=false to opt out). Each entry carries a scope field ("repo" or " |
| list_org_labels | List organization-level labels with their IDs. The assignment tools accept label names directly, so this is for discovery and for the rare name that exists in b |
| create_repo_label | Create a repository label (name, color as 6-digit hex, optional description). Returns the numeric id; add_issue_labels also takes the name. |
| edit_repo_label | Edit a repository label (PATCH — only supplied fields change: name, color, description). |
| delete_repo_label | Delete a repository label. Refuses by default when the label is in use (reports count); set delete_mode=force to override. |
| get_repo_label | Get a single repository label by numeric id. |
| create_org_label | Create an organization-level label. Same fields as create_repo_label. |
| edit_org_label | Edit an organization-level label (PATCH semantics). |
| delete_org_label | Delete an organization-level label. In-use guard counts across visible org repos (best-effort); delete_mode=force overrides. |
| get_org_label | Get a single organization-level label by numeric id. |
| Comments | |
| list_issue_comments | List comments on an issue or PR |
| get_issue_comment | Get a specific comment |
| create_issue_comment | Add a comment to an issue or PR |
| edit_issue_comment | Edit a comment |
| delete_issue_comment | Delete a comment |
| list_repo_pull_requests | List pull requests in a repository |
| get_pull_request_by_index | Get a specific pull request |
| create_pull_request | Create a new pull request |
| update_pull_request | Update an existing pull request |
| list_pull_reviews | List reviews for a pull request |
| get_pull_review | Get a specific pull request review |
| list_pull_review_comments | List comments on a pull request review |
| list_pull_request_files | List changed files in a pull request (paginated). Use the returned filenames as the file_path argument to get_pull_request_diff. |
| get_pull_request_diff | Get the unified diff of a pull request. Optional file_path returns only that file's hunks (matches on either pre- or post-rename path). |
| merge_pull_request | Merge a pull request (style: merge/rebase/rebase-merge/squash; optional title/message/delete-branch/force-merge/wait-for-checks). |
| create_pull_review | Create a review on a pull request (state: APPROVED/REQUEST_CHANGES/COMMENT) with optional inline comments. |
| submit_pull_review | Submit a pending pull request review |
| dismiss_pull_review | Dismiss a pull request review |
| delete_pull_review | Delete a pending pull request review |
| create_review_requests | Request reviews from specific users or teams |
| delete_review_requests | Cancel pending review requests |
| Packages | |
| list_packages | List package versions of a user or org (one row per version). Optional type and q. Server-paged via page/limit (default 30, max 50). Envelope {packages, page, l |
| get_package | Get one package version. Does not embed owner/creator users |
| delete_package | Delete one package version (not every version of the name). No preflight. 4xx/5xx stay errors |
| list_package_files | List files of one package version. Client-paged via page/limit (default 30, max 50); envelope {files, page, limit, count, has_next, total_count} (total_count is |
| Actions | |
| dispatch_workflow | Trigger a workflow run via workflow_dispatch event |
| list_workflow_runs | List workflow runs with optional filtering by status, event, or SHA |
| get_workflow_run | Get details of a specific workflow run by ID |
| list_action_run_jobs | List jobs for a Forgejo v16+ workflow run with client-side page and limit bounds |
| get_action_job_logs | Read a Forgejo v16+ job log with resumable offset and max_bytes bounds; defaults to the tail |
| cancel_workflow_run | Cancel a pending or running workflow run. Already-finished runs also return success (HTTP 204); the run is left unchanged |
| delete_workflow_run | Delete a completed workflow run. A live run is an API error. Removes the run and its job logs; Forgejo marks that run's artifacts deleted |
| list_action_run_artifacts | List artifacts of a workflow run. Server-paged via page/limit (default 30, max 50); optional name filter. Envelope {artifacts, page, limit, count, total_count?} |
| get_action_artifact | Get metadata for one Actions artifact. Does not download the zip |
| list_repo_action_secrets | List a repository's Actions secrets (names only; Forgejo never returns values). Client-paged via page/limit (default 30, max 50) |
| create_or_update_repo_action_secret | Create or update a repository Actions secret. Overwrites any existing secret with the same name; the value is never echoed back |
| delete_repo_action_secret | Delete a repository Actions secret |
| list_org_action_secrets | List an organization's Actions secrets (names only; Forgejo never returns values). Client-paged via page/limit (default 30, max 50) |
| create_or_update_org_action_secret | Create or update an organization Actions secret. Overwrites any existing secret with the same name; the value is never echoed back |
| delete_org_action_secret | Delete an organization Actions secret |
| Organizations | |
| list_my_orgs | List my organizations |
| list_user_orgs | List a user's organizations |
| get_org | Get organization details |
| create_org | Create an organization |
| edit_org | Edit organization settings |
| delete_org | Delete an organization — destructive and irreversible: all repos, teams and data are permanently removed |
| list_org_members | List members of an organization |
| check_org_membership | Check if a user is a member of an organization |
| remove_org_member | Remove a member from an organization |
| list_org_teams | List teams in an organization |
| search_org_teams | Search for teams in an organization |
| create_org_team | Create a team in an organization |
| add_team_member | Add a user to a team |
| remove_team_member | Remove a user from a team |
| add_team_repo | Add a repository to a team |
| remove_team_repo | Remove a repository from a team |
| list_issue_tracked_times | List tracked time entries on an issue or PR |
| list_repo_tracked_times | List tracked time entries across a repository |
| list_my_tracked_times | List your own tracked time entries |
| add_issue_time | Log time against an issue or PR (accepts seconds or duration like 15m) |
| reset_issue_time | Delete ALL tracked time entries on an issue or PR (destructive) |
| delete_issue_time_entry | Delete a single tracked time entry by ID |
| start_issue_stopwatch | Start a stopwatch on an issue or PR |
| stop_issue_stopwatch | Stop a running stopwatch and record the elapsed time |
| cancel_issue_stopwatch | Cancel a running stopwatch without recording |
| list_my_stopwatches | List currently running stopwatches |
| Attachments | |
| list_issue_attachments | List attachments on an issue or PR |
| get_issue_attachment | Get metadata for a single issue/PR attachment |
| download_issue_attachment | Download an issue/PR attachment (inline if < 1 MiB; metadata + URL otherwise) |
| create_issue_attachment | Upload a new attachment to an issue or PR (base64 content or a file path on the MCP host) |
| edit_issue_attachment | Rename an issue/PR attachment |
| delete_issue_attachment | Delete an issue/PR attachment |
| list_comment_attachments | List attachments on an issue/PR comment |
| get_comment_attachment | Get metadata for a single comment attachment |
| download_comment_attachment | Download a comment attachment (inline if < 1 MiB; metadata + URL otherwise) |
| create_comment_attachment | Upload a new attachment to an issue/PR comment (base64 content or a file path on the MCP host) |
| edit_comment_attachment | Rename a comment attachment |
| delete_comment_attachment | Delete a comment attachment |
| Releases | |
| list_releases | List releases for a repository (page/limit + client-side state filter: all/draft/prerelease/published) |
| get_release_by_id | Get a release by numeric ID |
| get_release_by_tag | Get a release by tag name |
| get_latest_release | Get the latest non-draft, non-prerelease release |
| create_release | Create a new release (pass target_commitish to also create the tag) |
| edit_release | Update fields of an existing release (only supplied fields are sent) |
| delete_release | Delete a release by numeric ID — destructive |
| delete_release_by_tag | Delete a release by tag name — destructive, verify tag |
| list_release_attachments | List attachments on a release (response fetched in full, sliced client-side) |
| get_release_attachment | Get metadata for a single release attachment |
| download_release_attachment | Download a release attachment (inline if < 1 MiB; metadata + URL otherwise) |
| create_release_attachment | Upload a new attachment to a release (base64 content or a file path on the MCP host) |
| edit_release_attachment | Rename a release attachment |
| delete_release_attachment | Delete a release attachment — destructive |
| Wiki | |
| list_wiki_pages | List pages using page/limit; returns has_next and, when Forgejo reports X-Total-Count, total_count. total_count counts upstream's raw wiki tree entries, so it c |
| get_wiki_page | Read decoded Markdown; optional start_line/end_line, always returns total_lines. |
| get_wiki_revisions | List revision history using page/limit; returns has_next and total_count, the page's total revision count as reported in the response body. |
| create_wiki_page | Create a page and return its server-normalized page_name; slash-separated titles are a flat subpage naming convention (no hierarchy and no automatic parent page |
| update_wiki_page | Update content/title by normalized page_name; last writer wins. |
| delete_wiki_page | Delete a page by normalized page_name. |
| Server | |
| get_forgejo_mcp_server_version | Get the MCP server version |
{
"mcpServers": {
"forgejo": {
"command": "forgejo-mcp",
"args": [
"--transport",
"stdio",
"--url",
"https://your-forgejo-instance.org"
],
"env": {
"FORGEJO_ACCESS_TOKEN": "YOUR_FORGEJO_ACCESS_TOKEN",
"FORGEJO_USER_AGENT": "forgejo-mcp/1.0.0"
}
}
}
}From the project documentation. Replace placeholders and example paths before connecting.
| Variable | Description | Required |
|---|---|---|
| FORGEJO_ACCESS_TOKEN | Declared in the maintainer’s client configuration. | Check documentation |
| FORGEJO_USER_AGENT | Declared in the maintainer’s client configuration. | Check documentation |
Read, search and edit files inside allowed directories with the Model Context Protocol reference Filesystem server.
Retrieve version-aware library documentation and code examples with Context7 MCP, using resolve-library-id and query-docs.
Search and analyze channels, posts, audience growth, views, and engagement in the MAX messenger.
Vanlife & RV data: roadbooks, fuel, tolls, visas, holidays, hazards, weather, currency. openvan.camp
A comprehensive set of samples of creating and using MCP servers and clients with .NET
<h4> Full Zabbix API access from Claude, Codex, VS Code, JetBrains, and other MCP clients. </h4>