From 530c5f4aa0abda36527d56280d2ad8323d9ab6ca Mon Sep 17 00:00:00 2001 From: lmiranda Date: Mon, 26 Jan 2026 10:54:33 -0500 Subject: [PATCH] fix(gitea-mcp): URL-encode wiki page names and include title in updates Fixes #160: update_wiki_page was renaming pages to "unnamed" Root causes: 1. page_name wasn't URL-encoded, breaking pages with special chars like ':' 2. PATCH request was missing 'title' field, causing Gitea to use default name Changes: - Add URL encoding (urllib.parse.quote) to get_wiki_page, update_wiki_page, delete_wiki_page - Add 'title': page_name to update_wiki_page payload to preserve page name Co-Authored-By: Claude Opus 4.5 --- mcp-servers/gitea/mcp_server/gitea_client.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mcp-servers/gitea/mcp_server/gitea_client.py b/mcp-servers/gitea/mcp_server/gitea_client.py index 3e077af..abe62ba 100644 --- a/mcp-servers/gitea/mcp_server/gitea_client.py +++ b/mcp-servers/gitea/mcp_server/gitea_client.py @@ -239,8 +239,11 @@ class GiteaClient: repo: Optional[str] = None ) -> Dict: """Get a specific wiki page by name.""" + from urllib.parse import quote owner, target_repo = self._parse_repo(repo) - url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}" + # URL-encode the page_name to handle special characters like ':' + encoded_page_name = quote(page_name, safe='') + url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}" logger.info(f"Getting wiki page '{page_name}' from {owner}/{target_repo}") response = self.session.get(url) response.raise_for_status() @@ -271,9 +274,13 @@ class GiteaClient: repo: Optional[str] = None ) -> Dict: """Update an existing wiki page.""" + from urllib.parse import quote owner, target_repo = self._parse_repo(repo) - url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}" + # URL-encode the page_name to handle special characters like ':' + encoded_page_name = quote(page_name, safe='') + url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}" data = { + 'title': page_name, # CRITICAL: include title to preserve page name 'content_base64': self._encode_base64(content) } logger.info(f"Updating wiki page '{page_name}' in {owner}/{target_repo}") @@ -287,8 +294,11 @@ class GiteaClient: repo: Optional[str] = None ) -> bool: """Delete a wiki page.""" + from urllib.parse import quote owner, target_repo = self._parse_repo(repo) - url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}" + # URL-encode the page_name to handle special characters like ':' + encoded_page_name = quote(page_name, safe='') + url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}" logger.info(f"Deleting wiki page '{page_name}' from {owner}/{target_repo}") response = self.session.delete(url) response.raise_for_status()