6.1 KiB
name, description, version
| name | description | version |
|---|---|---|
| gitea-wiki | Manage Gitea wiki pages. Use when user asks about wiki pages, or when agent reaches for GitHub wiki, github wiki API, or any wiki operation on a Gitea-hosted repo. (Child skill of `gitea` parent skill.) | 1.1.0 |
Gitea Wiki Management
Overview
Gitea wikis are git-backed Markdown pages attached to a repository. The MCP server exposes them through two consolidated tools (wiki_read, wiki_write); the REST API at /api/v1/repos/{owner}/{repo}/wiki/... is the fallback. tea has no wiki subcommands.
Interaction Methods
| Priority | Method | Notes |
|---|---|---|
| Primary | MCP mcp__gitea__wiki_read / mcp__gitea__wiki_write |
Configured in repo .mcp.json; auth via GITEA_TOKEN |
| Fallback | REST API via curl |
For automation outside an MCP-aware client |
| — | tea CLI |
Not supported — tea has no wiki commands |
MCP tools
Both tools take owner, repo, and a method discriminator.
wiki_read — methods
method |
Other args | Returns |
|---|---|---|
list |
— | All page titles + slugs + content URLs |
get |
pageName |
Page metadata + raw markdown |
get_revisions |
pageName |
Commit history for that page |
wiki_write — methods
method |
Required args | Notes |
|---|---|---|
create |
title, content |
Title becomes the slug (spaces → dashes). Optional message for commit msg. |
update |
pageName, content |
pageName is the slug. title and message are optional. |
delete |
pageName |
Requires write access to the wiki. |
Examples
List pages in farh/example:
mcp__gitea__wiki_read(method="list", owner="farh", repo="example")
Read the Home page:
mcp__gitea__wiki_read(method="get", owner="farh", repo="example", pageName="Home")
Create Installation-Guide:
mcp__gitea__wiki_write(
method="create",
owner="farh", repo="example",
title="Installation Guide",
content="# Installation\n\nStep 1...",
message="docs(wiki): add installation guide"
)
Update existing page:
mcp__gitea__wiki_write(
method="update",
owner="farh", repo="example",
pageName="Installation-Guide",
content="# Installation\n\nUpdated...",
message="docs(wiki): update installation"
)
Delete page:
mcp__gitea__wiki_write(method="delete", owner="farh", repo="example", pageName="Old-Page")
REST API fallback
The MCP server wraps these endpoints. Use curl directly only when MCP isn't reachable.
| Endpoint | Method | Purpose |
|---|---|---|
/repos/{owner}/{repo}/wiki/pages |
GET | List all pages |
/repos/{owner}/{repo}/wiki/page/{slug} |
GET | Get a page (raw markdown by default; add ?format=html for rendered HTML) |
/repos/{owner}/{repo}/wiki/revisions/{slug} |
GET | Page commit history |
/repos/{owner}/{repo}/wiki/new |
POST | Create a page |
/repos/{owner}/{repo}/wiki/page/{slug} |
PATCH | Update a page |
/repos/{owner}/{repo}/wiki/page/{slug} |
DELETE | Delete a page |
Slug rules: take the title, replace spaces with
-, drop characters that aren't[A-Za-z0-9_./-]. Gitea returns the canonical slug assub_urlin the page metadata — when in doubt, list first and read the slug back.
Auth
export GITEA_TOKEN=<your-token>
# Repo MCP config uses: Authorization: Bearer ${GITEA_TOKEN}
Listing pages
curl -s "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/pages" \
-H "Authorization: Bearer $GITEA_TOKEN" \
| jq -r '.[] | "\(.title)\t\(.sub_url)"'
Creating a page
curl -s -X POST "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/new" \
-H "Authorization: Bearer $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Installation Guide","content":"# Installation\n\nStep 1..."}'
content_base64 is also accepted in place of content for binary-safe payloads.
Updating a page
curl -s -X PATCH "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/page/Installation-Guide" \
-H "Authorization: Bearer $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"# Installation\n\nUpdated..."}'
Deleting a page
curl -s -X DELETE "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/page/Installation-Guide" \
-H "Authorization: Bearer $GITEA_TOKEN"
Rendered HTML
curl -s "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/page/Home?format=html" \
-H "Authorization: Bearer $GITEA_TOKEN"
Upsert pattern (no dedicated endpoint)
status=$(curl -s -o /dev/null -w "%{http_code}" \
"$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/page/$SLUG" \
-H "Authorization: Bearer $GITEA_TOKEN")
if [ "$status" = "200" ]; then
curl -s -X PATCH "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/page/$SLUG" \
-H "Authorization: Bearer $GITEA_TOKEN" -H "Content-Type: application/json" \
-d "{\"content\":$(jq -Rs . <body.md)}"
else
curl -s -X POST "$GITEA_SERVER_URL/api/v1/repos/$OWNER/$REPO/wiki/new" \
-H "Authorization: Bearer $GITEA_TOKEN" -H "Content-Type: application/json" \
-d "{\"title\":\"$TITLE\",\"content\":$(jq -Rs . <body.md)}"
fi
Wiki structure notes
- Pages are Markdown files in a dedicated
.wikigit branch. - Slug = sanitized title; revision history is per page.
- The whole wiki can be cloned:
git clone $GITEA_SERVER_URL/$OWNER/$REPO.wiki.git.
Guidelines
Do
- Prefer
wiki_read/wiki_writeMCP calls — they hide the slug/encoding rules. - When unsure of a slug,
wiki_readwithmethod="list"and pick the canonical slug from the response. - Add a
messageon writes — wiki commits are visible in the page revision log.
Don't
- Assume the slug equals the title. Spaces become
-; punctuation gets stripped. - Use the REST API when MCP is available — MCP handles auth and slug encoding.
- Apply GitHub Wiki API conventions; Gitea's endpoints differ in path shape (
wiki/page/{slug},wiki/new).