diff --git a/README.md b/README.md index 74e7908..ac60cb7 100644 --- a/README.md +++ b/README.md @@ -250,12 +250,15 @@ If `connection` is omitted, the `defaultConnection` is used. | `gitea_webhooks_list` | List webhooks for a repository | | `gitea_webhook_create` | Create a webhook | -### Wiki (2 tools) +### Wiki (5 tools) | Tool | Description | |------|-------------| | `gitea_wiki_pages_list` | List wiki pages | | `gitea_wiki_page_get` | Get a wiki page | +| `gitea_wiki_page_create` | Create a new wiki page | +| `gitea_wiki_page_edit` | Edit an existing wiki page | +| `gitea_wiki_page_delete` | Delete a wiki page | ### Notifications (2 tools) diff --git a/src/index.ts b/src/index.ts index 3679c3f..ea4cb4c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1059,6 +1059,59 @@ server.tool( async ({ owner, repo, page_name, connection }) => formatResponse(await clientFor(connection).get(`/repos/${owner}/${repo}/wiki/page/${page_name}`)), ); +server.tool( + 'gitea_wiki_page_create', + 'Create a new wiki page', + { + ...OwnerRepo, + title: z.string().describe('Page title'), + content: z.string().describe('Page content (markdown)'), + message: z.string().optional().describe('Commit message for the wiki change'), + ...ConnectionParam, + }, + async ({ owner, repo, title, content, message, connection }) => { + const body: Record = { + title, + content_base64: Buffer.from(content).toString('base64'), + }; + if (message) body.message = message; + return formatResponse(await clientFor(connection).post(`/repos/${owner}/${repo}/wiki/new`, body)); + }, +); + +server.tool( + 'gitea_wiki_page_edit', + 'Edit an existing wiki page', + { + ...OwnerRepo, + page_name: z.string().describe('Current page name/slug'), + content: z.string().describe('New page content (markdown)'), + title: z.string().optional().describe('New page title (to rename)'), + message: z.string().optional().describe('Commit message for the wiki change'), + ...ConnectionParam, + }, + async ({ owner, repo, page_name, content, title, message, connection }) => { + const body: Record = { + content_base64: Buffer.from(content).toString('base64'), + }; + if (title) body.title = title; + if (message) body.message = message; + return formatResponse(await clientFor(connection).patch(`/repos/${owner}/${repo}/wiki/page/${page_name}`, body)); + }, +); + +server.tool( + 'gitea_wiki_page_delete', + 'Delete a wiki page', + { + ...OwnerRepo, + page_name: z.string().describe('Page name/slug to delete'), + ...ConnectionParam, + }, + async ({ owner, repo, page_name, connection }) => + formatResponse(await clientFor(connection).delete(`/repos/${owner}/${repo}/wiki/page/${page_name}`)), +); + // ── Notifications ─────────────────────────────────────────────────────── server.tool(