summaryrefslogtreecommitdiff
path: root/servers/gitlab_python/src/mcp_server_gitlab_python
diff options
context:
space:
mode:
authorDawid Rycerz <dawid@rycerz.xyz>2025-07-17 10:39:49 +0300
committerDawid Rycerz <dawid@rycerz.xyz>2025-07-17 10:39:49 +0300
commit3df20b30a974a063eeed0983d98396a3ea74fe0e (patch)
tree528dc6d446a05c19f6f615f2da14edc880873650 /servers/gitlab_python/src/mcp_server_gitlab_python
parent9fbb9b43fa81ce04665fddbaaa64ab455158a44e (diff)
feat: add debug messages to detect version change
Diffstat (limited to 'servers/gitlab_python/src/mcp_server_gitlab_python')
-rw-r--r--servers/gitlab_python/src/mcp_server_gitlab_python/server.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/servers/gitlab_python/src/mcp_server_gitlab_python/server.py b/servers/gitlab_python/src/mcp_server_gitlab_python/server.py
index 6688a1a..2f03b84 100644
--- a/servers/gitlab_python/src/mcp_server_gitlab_python/server.py
+++ b/servers/gitlab_python/src/mcp_server_gitlab_python/server.py
@@ -5,6 +5,7 @@ from typing import Any
import gitlab
import yaml
from mcp.server.fastmcp import FastMCP
+import mcp_server_gitlab_python
logger = logging.getLogger("mcp_gitlab_python_server")
@@ -96,6 +97,7 @@ def get_gitlab_settings(working_directory: str) -> tuple[str, str]:
class GitLabPythonServer:
def __init__(self, working_directory: str) -> None:
+ logger.info(f"Starting GitLabPythonServer version: {mcp_server_gitlab_python.__version__}")
url, token = get_gitlab_settings(working_directory)
self.gl = gitlab.Gitlab(url, private_token=token)
self.gl.auth()
@@ -192,22 +194,34 @@ class GitLabPythonServer:
try:
proj = self.gl.projects.get(project)
mr = proj.mergerequests.get(mr_iid)
- # Get the diff as a list of dicts (one per file)
diffs = mr.diffs.list(get_all=True)
- # Build unified diff string
+ logger.debug(f"Fetched {len(diffs)} diffs for MR {mr_iid} in project {project}")
+ if diffs:
+ logger.debug(f"First diff type: {type(diffs[0])}, attributes: {dir(diffs[0])}")
diff_content = ""
- for diff in diffs:
- old_path = diff.old_path
- new_path = diff.new_path
- # Filter by extension
+ for i, diff in enumerate(diffs):
+ logger.debug(f"Processing diff #{i}: type={type(diff)}, attrs={dir(diff)}")
+ if all(hasattr(diff, attr) for attr in ("old_path", "new_path", "diff")):
+ old_path = diff.old_path
+ new_path = diff.new_path
+ diff_text = diff.diff
+ logger.debug(f"Using direct attributes for diff #{i}: old_path={old_path}, new_path={new_path}")
+ else:
+ logger.debug(f"Fetching full diff object for diff #{i} (id={getattr(diff, 'id', None)})")
+ full_diff = mr.diffs.get(diff.id)
+ old_path = full_diff.old_path
+ new_path = full_diff.new_path
+ diff_text = full_diff.diff
if any(
old_path.endswith(ext) or new_path.endswith(ext)
for ext in filter_extensions
):
+ logger.debug(f"Skipping diff #{i} due to filter extension: {old_path}, {new_path}")
continue
diff_content += f"diff --git a/{old_path} b/{new_path}\n"
- diff_content += diff.diff + "\n"
+ diff_content += diff_text + "\n"
diff_size_kb = len(diff_content.encode("utf-8")) / 1024
+ logger.debug(f"Total diff size: {diff_size_kb:.2f} KB")
if diff_size_kb > max_size_kb:
try:
with tempfile.NamedTemporaryFile(
@@ -219,6 +233,7 @@ class GitLabPythonServer:
) as temp_file:
temp_file.write(diff_content)
temp_path = temp_file.name
+ logger.info(f"Diff too large, saved to {temp_path}")
return {
"diff_too_large": True,
"size_kb": round(diff_size_kb, 2),
@@ -231,6 +246,7 @@ class GitLabPythonServer:
)
}
except Exception as e:
+ logger.error(f"Failed to create temp file for large diff: {e}")
return {
"error": (
f"Diff is too large ({diff_size_kb:.2f} KB) and failed to "
@@ -243,6 +259,7 @@ class GitLabPythonServer:
"temp_file_path": None
}
except Exception as e:
+ logger.error(f"Exception in get_mr_diff: {e}", exc_info=True)
return {"error": str(e)}
def run_ci_pipeline(