Skip to content

Latest commit

 

History

History
757 lines (569 loc) · 64.2 KB

CHANGELOG.md

File metadata and controls

757 lines (569 loc) · 64.2 KB

Changelog

All notable changes to this project will be documented in this file. Dates are displayed in UTC.

Generated by auto-changelog.

Unreleased

Changed
  • Tool results that were still pretty-printed JSON (pipeline schedules, snippets, CI catalog, update_project, and delete/status confirmations) are now compact JSON like every other tool, which saves about 20% of the output size for list results. gitlab_api_request is unchanged (#857)
  • rebase_merge_request with wait true (default) now also returns previous_sha (the head sha before the rebase) and head_changed, so a caller sees at once whether the rebase moved the head (#862).
  • Boolean tool arguments now parse the string "false" as false (#848). Other non-boolean strings such as "" or "yes", previously coerced to true, are now rejected with a validation error.
  • Tool argument validation failures are now returned as tool results with isError: true instead of JSON-RPC errors, so the model sees which arguments to fix and can retry. The message names the tool and each invalid field, for example Invalid arguments for verify_namespace: path: Invalid input: expected string, received undefined. Clients that caught these as protocol errors (MCP error -32603) must now check isError on the result. GitLab responses that fail schema parsing are still JSON-RPC errors, now reported as Unexpected GitLab response for <tool>: ... instead of Invalid arguments: ....
Added
  • MCP resources: the server advertises the resources capability and serves three static Markdown docs through resources/list and resources/read: gitlab-mcp://docs/auth-setup, gitlab-mcp://docs/toolsets, and gitlab-mcp://docs/permission-modes. No tool is added and the tool list is unchanged (#842)
  • server.json now sets title ("GitLab MCP Server") and websiteUrl for the MCP Registry, serverInfo reports a description and websiteUrl, and package.json sets homepage. serverInfo.name is unchanged, including the MCP_SERVER_NAME override (#858)
  • Claude Desktop MCP Bundle: each GitHub release now ships gitlab-mcp.mcpb for one-click install, with the Personal Access Token stored as a sensitive value and GITLAB_API_URL, GITLAB_PERMISSION_MODE, GITLAB_TOOLSETS, and GITLAB_MASKING_ENABLED as install-time settings. Build it locally with npm run pack:mcpb.
  • The Docker image docker.io/zereight050/gitlab-mcp is listed as an OCI package in server.json for the MCP Registry, next to the npm package. The image now carries the io.modelcontextprotocol.server.name label, so the registry entry is accepted starting with the next release image.
  • rebase_merge_request in the merge_requests toolset rebases the source branch of a merge request onto its target branch and, by default, waits until GitLab ends the rebase (#250). skip_ci skips the pipeline, and timeout_seconds and poll_interval_seconds match wait_for_pipeline. It is a destructive write (readonly hides it); modify still allows it, matching merge_merge_request.
  • Protected tag tools in the tags toolset: list_protected_tags, get_protected_tag, protect_tag, and unprotect_tag (#802). protect_tag and unprotect_tag are writes (readonly hides them). unprotect_tag is also blocked in modify, matching unprotect_branch.
  • Explicit opt-in api toolset with gitlab_api_request for one GitLab REST call under /api/v4. Not enabled by GITLAB_TOOLSETS=all, discover_tools, or GITLAB_TOOLS. Readonly allows GET only; modify rejects DELETE (#804)
  • Opt-in snippets toolset: list_snippets, get_snippet, create_snippet, update_snippet, and delete_snippet for personal and project snippets (#730)
  • Standalone zereight-mcp-gitlab auth device-flow command for SSO / headless OAuth (#591)
  • create_webhook, update_webhook, and delete_webhook for project and group hooks (#713)
  • push_files optional per-file action (create/update/delete/move) and encoding (text/base64); create_or_update_file optional encoding. Existing callers keep action: create and the configured GITLAB_REPO_FILE_ENCODING. GITLAB_PERMISSION_MODE=modify rejects delete and move (based on #513 by @hodyhq)
  • Streamable HTTP GET /mcp SSE listen stream and tools.listChanged capability (#649, #651)
  • Add list_group_members tool for searching group members by name or username (#631)
  • Add list_group_merge_requests tool for listing merge requests across every project of a group and its subgroups
Fixed
  • Startup logs no longer print the tail of a GitLab password that contains a comma: a GITLAB_API_URL entry such as https://user:pass,word@host is no longer split at the comma when the password has no unencoded @, /, ?, #, or whitespace. A password whose part before a comma is empty or a number from 0 to 65535, followed by http: or https: (for example https://alice:123,https:word@host), is still read as two URLs. Percent-encode a comma in a password as %2C. Userinfo in one-slash URLs such as https:/user:pass@host, and token parameters in URL fragments such as #private_token= and #access_token=, are now redacted too (#826)
  • A jmespath filter that turns structuredContent into an array, a scalar, or null (for example items[].title) now drops structuredContent instead of returning a value the MCP SDK rejects. The filtered JSON is still in the text content. No tool sets structuredContent today (#873)
  • Tool calls that cannot reach GitLab now name the reason (for example ECONNREFUSED, ENOTFOUND, or a TLS certificate code) and a hint, instead of only fetch failed (#856)
  • Values interpolated into GitLab URL paths (project/group ids, file paths, branch and tag names, keys, slugs) are now fully percent-decoded and rejected when they contain a ./.. segment, a leading /, an empty path segment, or a control character such as NUL (#760). Because values are decoded before encoding, a name that literally contains a percent escape (for example a tag named release%2F1.0) now resolves to the decoded name (release/1.0), and a value mixing a valid escape with a stray % is rejected
  • execute_graphql in GITLAB_PERMISSION_MODE=modify now rejects destructive GraphQL mutations whose top-level field names use teardown verbs (for example environmentStop, pipelineCancel, and jobUnschedule), not only delete-style names (#755)
  • Blank list filters (empty strings, whitespace, and empty arrays) are no longer sent as empty query parameters such as labels[]= or iids=, which made GitLab reject the request with HTTP 400 (#740)
  • list_issues, my_issues, and get_issue descriptions now include issue-management classification hints so agent clients are less likely to bucket them under group or repository tools (#736)
  • merge_merge_request no longer strips sha, which GitLab 19.2+ groups may require when merging (#665)
  • list_job_artifacts no longer fails when GitLab returns mode: null on artifact tree entries (#661)
  • create_tag no longer fails when GitLab omits release from the tag response (#653)
  • wait_for_pipeline, wait_for_job, play_pipeline_jobs, and rebase_merge_request now report Timed out waiting for terminal status when a status request is still running at timeout_seconds, instead of The operation was aborted due to timeout
Deprecated
  • GITLAB_READ_ONLY_MODE and --read-only=true — use GITLAB_PERMISSION_MODE=readonly or --permission-mode=readonly instead (removed in next major (v3.0.0))
  • GITLAB_ALLOWED_GROUPS — use GITLAB_OAUTH_ALLOWED_GROUPS instead (removed in next major (v3.0.0))
  • USE_GITLAB_WIKI, USE_MILESTONE, USE_PIPELINE and --use-wiki, --use-milestone, --use-pipeline — use GITLAB_TOOLSETS=core,wiki, core,milestones, or core,pipelines (pipelines also need GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint) instead (removed in next major (v3.0.0))
Breaking changes
  • update_issue now returns a slim confirmation by default; pass full_response=true for the previous full issue object
  • Minimum Node.js version is now 18.17.0 (undici fetch)
  • Callback proxy mode (GITLAB_OAUTH_CALLBACK_PROXY=true) shows a consent page once per client and callback, and rejects client registrations whose callback is not in GITLAB_OAUTH_ALLOWED_REDIRECT_URIS. Use defaults,<url> to add a client, or * to allow any callback.
  • download_attachment saves files under GITLAB_DOWNLOAD_DIR (default .gitlab-mcp-downloads) instead of the working directory, local_path is relative to that directory, and existing files are no longer replaced. In readonly mode it only returns images inline, and download_job_artifacts is rejected.
  • With GITLAB_USE_OAUTH=true, stdio sessions can share one OAuth callback port only when they run as the same OS user with the same home directory and on a release that has the callback key. Restart all sessions after upgrading.
  • With GITLAB_OAUTH_ALLOWED_GROUPS set, /mcp rejects JOB-TOKEN header auth with 403, and Private-Token or Bearer tokens of users outside the allowed groups also get 403.
Added
  • OAUTH_REGISTER_RATE_LIMIT_PER_HOUR — tune per-IP POST /register rate limit when GITLAB_MCP_OAUTH=true (default 20/hour) (#630)
  • health_check reports GitLab instance version from /api/v4/version when authenticated (#617)
  • GITLAB_PERMISSION_MODE with readonly, modify, and full permission tiers
  • Startup new-version notice (disable with GITLAB_DISABLE_VERSION_CHECK=true) (#573)
  • update_issue slim response by default (#572)
Changed
  • Replace node-fetch with undici fetch so installs no longer pull deprecated node-domexception (#712)
  • fix: sanitize top-level null optional tool arguments before Zod validation (#281)
    • preserve intentional nested nulls (GraphQL variables, diff line numbers, label priority)
    • reject partial merge request position SHAs via schema preprocess instead of silently dropping position
Security
  • GHSA-cv3r-c5h8-f4g5 / CVE-2026-61560: unauthenticated SSE transport plus upload_markdown file_path could exfiltrate server credentials (#554, #482). Upgrade to v2.1.27+ and set SSE_AUTH_TOKEN for SSE deployments.
  • GHSA-5648-rgj9-v224: execute_graphql could bypass read-only mode and GITLAB_ALLOWED_PROJECT_IDS; Streamable HTTP/SSE could expose server GitLab credentials without MCP auth; garbage tokens could exhaust session slots; CI job traces were returned without untrusted framing (#571). Upgrade to v2.1.30+.
  • GHSA-4rm9-rfp2-j39q: download_release_asset direct_asset_path could escape the release download route and reach other GitLab API paths on the same host, bypassing GITLAB_ALLOWED_PROJECT_IDS (#598). Upgrade to v2.1.41+.
  • GHSA-qcj2-qcc2-5fg4: with REMOTE_AUTHORIZATION=true and ENABLE_DYNAMIC_PROJECT_SCOPE=true, a later request on an existing session could drop or replace the session's X-GitLab-Allowed-Project-Ids scope by omitting or changing the header next to a live token (stateless Mcp-Session-Id), or by sending a different token (stateful sessions). The scope is now bound to the session: a request without the header keeps it, and a request with a different value is rejected with 401. Re-initialize to change the scope.
  • GHSA-5w3p-qj7g-79v5: with GITLAB_MCP_OAUTH=true and GITLAB_OAUTH_CALLBACK_PROXY=true, a client registered with any redirect_uri could receive another user's authorization and redeem it for their GitLab tokens. Client callbacks are now checked against GITLAB_OAUTH_ALLOWED_REDIRECT_URIS (default: Claude, ChatGPT, Cursor and loopback callbacks), and /authorize shows a consent page naming the client and callback host.
  • GHSA-vhp9-2xfv-rrfv: download_attachment in stdio mode could create or overwrite any file under the working directory, including .git and editor config, and was allowed in readonly mode. Downloads now go to GITLAB_DOWNLOAD_DIR (default .gitlab-mcp-downloads) as new files only, names starting with a dot are rejected, and readonly mode no longer writes files.
  • GHSA-ffr3-5f57-gf93: with GITLAB_ALLOWED_PROJECT_IDS set, create_issue_link and create_merge_request did not check target_project_id, and the work item note emoji tools acted on any note_id. All three now stay inside the allowlist. Namespace tools also use the X-GitLab-API-URL instance when ENABLE_DYNAMIC_API_URL=true.
  • GHSA-64g9-hrwx-9g6m: with GITLAB_USE_OAUTH=true, the shared local OAuth callback server returned new tokens to any caller of /auth-request. It now requires a per-process key from ~/.gitlab-mcp-oauth-<port>.key and only answers loopback hosts (or the GITLAB_OAUTH_REDIRECT_URI host). Sessions sharing a callback port must run as the same OS user and on a patched release.
  • GHSA-3gfg-wh5g-cf74: GITLAB_TOOL_POLICY_HIDDEN made tools callable even when their toolset was off (including gitlab_api_request and execute_graphql). Hidden tools are now callable only when the other filters would list them.
  • GHSA-2jv7-p2g4-9f2h: GITLAB_OAUTH_ALLOWED_GROUPS was only checked when an OAuth code was exchanged. It now also applies to Bearer tokens, Private-Token, sealed session IDs and refreshes (cached for five minutes); non-members and JOB-TOKEN get 403.
  • GHSA-g4cw-m236-q72h: session IDs were written to the log in full, and in MCP OAuth mode a session accepted another user's token. Session IDs are now redacted in logs, and MCP OAuth sessions answer 404 to tokens of a different user.
Token Optimization & Tool Policy
  • Security: Refuse unauthenticated Streamable HTTP startup when a server-side GitLab token is configured without MCP-layer authorization
  • Schema slimming (C): Strip $schema and additionalProperties from tool input schemas, reducing per-tool payload by ~40%
  • Tool annotations (E): Add MCP annotations (readOnlyHint, destructiveHint, confirmationHint, openWorldHint) to all tools
  • Tool policy - approve (F): GITLAB_TOOL_POLICY_APPROVE env var / --tool-policy-approve CLI - comma-separated tool names that require _confirmed: true before execution
  • Tool policy - hidden (F): GITLAB_TOOL_POLICY_HIDDEN env var / --tool-policy-hidden CLI - comma-separated tool names excluded from tools/list
  • Dynamic discovery (H): discover_tools meta-tool always available; agents call it to activate toolsets on demand instead of receiving all tools upfront
  • Centralized registry (A/B): tools/registry.ts exports allTools, readOnlyTools, destructiveTools, TOOLSET_DEFINITIONS
  • Audit logging (G): Structured pino logs for every tool call (tool_call_done with duration, tool name)
  • Tests: 34 tests covering schema slimming, raw HTTP annotations, policy edge cases (hidden/approve precedence, regex+hidden combo, annotation overlap), dynamic discovery, and hidden+discover_tools bypass prevention
  • Add include_inheritance support to list_project_members #316
  • feat: approve and unapprove merge requests #308
  • Add cookie file reload and session warmup for proxy authenticationFix cookie warmup #315
  • feat: add excluded_file_patterns parameter to get_merge_request_diffs #313
  • fix: remove obsolete readonly MCP tests and update test scripts b72bc76
  • refactor: extract filterDiffsByPatterns util and add ReDoS protection f1adeec
  • ci: add test:mock to PR validation workflow 78ac4a6

15 January 2026

  • feat(gitlab): expose merge request version tools #272
  • feat(docker): add Docker support with example environment and README #270
  • fix: make create_draft_note position parameter flexible #269
  • feat: add CLI arguments support for configuration #291
  • refactor: unify test scripts structure #304
  • refactor: fix deprecated lint issues and security vulnerability #303
  • fix: update dependencies for @modelcontextprotocol/sdk and add @hono/node-server 3a07d08
  • fix: use getEffectiveApiUrl and getFetchConfig in MR version functions bc205a5
  • fix: restore original package name and remove fork references 0c001f5

4 January 2026

  • ci: add missing tests to PR workflow #302
  • refactor(list_merge_requests): improve code quality and docs #301
  • feat: allow global merge request listing (optional project_id) #293
  • chore(deps): bump qs from 6.14.0 to 6.14.1 #300

21 December 2025

  • fix: change default HOST from 0.0.0.0 to 127.0.0.1 #289
  • chore(deps-dev): bump js-yaml #296
  • chore(deps): bump body-parser #297
  • ci: remove matrix strategy and unify Node.js to 22.21.1 in all workflows c8c2ac7
  • chore: remove 'peer' property from multiple dependencies in package-lock.json 6d56742
  • chore: update step 2 image in documentation b235c32

20 December 2025

20 December 2025

  • feat: add OAuth2 support and update documentation 52661c4
  • feat: add OAuth2 configuration examples and update documentation for Docker deployments 1f6f2f8

20 December 2025

  • chore: bump version to 2.0.18 and update changelog 55c7896
  • ci: upgrade npm for OIDC trusted publishing support cf4a57f

20 December 2025

  • chore: bump version to 2.0.17 and update changelog d4cef6e
  • ci: update npm-publish to use OIDC trusted publishing 4eabe16

20 December 2025

  • Revert to npm registry and add OTP support df5b223

20 December 2025

  • Switch publishing to GitHub Packages a2b7882

20 December 2025

  • Add support for dynamic GitLab API URLs and connection pooling #290
  • Update changelog for v2.0.14 e10a3bc
  • Bump version to 2.0.14 124ba79
  • Add gitignore entry for local docs c0d20d1

24 November 2025

  • chore: bump version to 2.0.12 in package.json and update CHANGELOG 1d9d6ae
  • chore: bump version to 2.0.13 in package.json and package-lock.json 3f33859

23 November 2025

  • fix: pin zod-to-json-schema to 3.24.5 to prevent breakage from v3.25.0 #285

7 November 2025

  • Fix #266 #273
  • Support Oauth client authentication with Gitlab #261
  • Fix #266 (#273) #266
  • chore: bump version to 2.0.11 in package.json and update CHANGELOG 9202826

7 November 2025

5 November 2025

  • Added documentation integration with strands agents mcp tools #265
  • Fix regex for GitLab PAT token validation #267
  • feat(gitlab): GitLab Merge Request Notes and Discussions: Full CRUD + Thread Resolution #260
  • chore: bump version to 2.0.8 in package.json and update CHANGELOG 3656011
  • chore: bump version to 2.0.9 in package.json 88b8a1b

27 October 2025

  • feat: implement gitlab releases endpoint #259
  • Add support for remote authorization in Streamable HTTP transport #258
  • docs: update CHANGELOG for version 2.0.7 3bb35ab
  • ci: add remote auth tests to PR workflow db4f724
  • 릴리즈배포의 서브태스크 (vibe-kanban 06e3f5cb) 4d66c93

11 October 2025

  • execute graphql #253
  • removed flexibleBoolean and replaced with z.boolean() #251
  • Squashed commit of the following: ba4dfcf
  • bump version to 2.0.7 in package.json a794e28

20 September 2025

  • Fix/inline schemas #242
  • Add "full_diff" parameter to get_commit_diff so we can retreive more than 20 files #244
  • refactor(schemas): replace custom boolean validators with native zod boolean #245
  • Feat/add delete to streamhttp #246
  • Fix: Add 'logic' and 'style' line types to enum for mr_discussions #248
  • bump version to 2.0.5 and update dependencies in package-lock.json d1d3f1a
  • Bump version to 2.0.6 in package.json 7a3f89f

9 September 2025

  • Add ability to trigger / retry / cancel individual jobs #233
  • chore: add expose to docker file #222
  • Pull Request: Add GitLab Events API Tools #235
  • bump version to 2.0.5 in package.json 3e1bdd1
  • docs: update README to include new pipeline-related tools f051153

31 August 2025

  • Fixes coverage parsing error on Pipelines related types #230
  • FEAT: add GITLAB_DENIED_TOOLS_REGEX env to disable some tools #206
  • Feat/modify email #225
  • v1.0.77 #209
  • FIX: docker hub repo user name #210
  • feat: Add NPM publish workflow for automated package publishing #208
  • Fix list of tools in README.md #205
  • FIX: flexible boolean #201
  • feat(attachement):download attachement, e.g. images #200
  • FEAT: merge MR #193
  • FEAT: get draft note #197
  • feat: Add createDraftNote api support, useful for bulk code review #183
  • feat: add my_issues and list_project_members tools #133
  • feat(pipeline): Add list_pipeline_trigger_jobs tools #194
  • (feat): add tool to upload file for markdown content #196
  • Bump version to 1.0.76 #182
  • FEAT: iteration #179
  • Bump version to 1.0.75 #178
  • Allow accessing issues without project id #168
  • Feat/deploy script #176
  • FEAT: target project on create MR #174
  • Bump version to 1.0.74 #175
  • FEAT: add logging #162
  • FEAT: id is string or number #161
  • FIX string or number #160
  • FIX: id string or number #158
  • FIX: deploy script #156
  • chore: Bump version 1.0.72 #154
  • FEAT: enable string for boolean for claude #150
  • Bump version to 1.0.71 #152
  • tag with image push #151
  • FIX: string | number for gemini #149
  • FIX: format boolean for claude #148
  • Print logs to stderr #147
  • FIX: CreateMergeRequestSchema #146
  • chore: Bump version to 1.0.70 #145
  • FIX: sse #144
  • FIX: default project id #141
  • FEAT: format boolean #143
  • FIX: console to stderr #135
  • FIX: create pipeline #138
  • FEAT: Add support for Streamable HTTP transport #128
  • FIX: notable iid #126
  • FEAT: reviewer on update MR #118
  • FEAT: not call create fork repo on set default project id #116
  • FEAT: project id , vscode doc #113
  • feat(simple healthcheck): #112
  • FIX: new,old path nullable #108
  • fix: avoid error caused by line_range type: null in discussion #107
  • FIX: sse readme #103
  • FEAT: mr discussion with code diff #93
  • feat: add cookie-based authentication support for enterprise GitLab #101
  • Fix notification_level null handling for GitLab group owners #99
  • feat: add pagination support for CI job logs to prevent context window flooding #97
  • FIX: private token auth #91
  • FEAT: private token auth #89
  • FIX: list issues assginee username #87
  • FEAT: add support for remove_source_branch and squash options for merge requests #86
  • Fix for null error #85
  • FIX: bug get issues #83
  • Add support for retrieving wiki page content in list_wiki_pages #82
  • DOC: readme docker image #81
  • Add pagination to merge request discussions, similar to issue discussions #80
  • fix: merge_requests_template can be null #79
  • FIX: issue param #78
  • FIX: get issues labels #77
  • FEAT: MCP SSE #76
  • Feat: Enrich Merge Request Creation #68
  • Feat/custom ssl #72
  • FEAT: multi platform #71
  • FEAT: ci push docker hub #65
  • feat: add pipeline management commands #64
  • [main] docs: update README with comments on GITLAB configuration options #63
  • test #61
  • Fix GitHub Actions workflow syntax errors #62
  • feat: add tools for milestones #59
  • FEAT: docker image push script #60
  • fix(schemas): make illustration nullable in GitLabPipelineSchema #58
  • feat: implement list_merge_requests functionality #56
  • fix(schemas): make avatar_url nullable in GitLabUserSchema #55
  • FIX: description null error #53
  • feat(release): 1.0.44 adds pipeline jobs tool #52
  • feat: add support for creating and updating issue notes #47
  • fix: fix README #45
  • feat: add issue discussions support #44
  • feat: add docker image and push to dockerhub #42
  • fixed resolve_outdated_diff_discussions nullable #41
  • fix: add expanded to start and end for GitLabDiscussionNoteSchema #40
  • Adds threaded comment support for merge requests #38
  • Support resolving merge request discussion notes #37
  • feat: Gitlab list repository tree tool #35
  • feat: support search by branch for get_merge_request #34
  • feat: Implement proxy configuration for HTTP/HTTPS/SOCKS #33
  • feat: Add read-only mode support #29
  • Add schemas for GitLab discussion notes and merge request discussions #26
  • ✨ Add list_group_projects tool #25
  • Update README.md #24
  • Fixed types for create_merge_request and get_merge_request tools. #23
  • Authentication Header Consistency Fix #22
  • Labels API Support #21
  • Improve README documentation with detailed tool descriptions #18
  • Implement GitLab Issues and Issue Links API #17
  • Add GitLab Projects API support #16
  • Add GitLab Namespaces API support #15
  • Fix GitLab API fork repository parameter handling #14
  • Fix GitLab API parameter handling in create_or_update_file #13
  • Improve code documentation with bilingual JSDoc comments #11
  • Fix URL construction with smart API URL normalization #10
  • Fix createNote function URL construction: use plural resource names and avoid duplicate /api/v4 #7
  • Added missing api url part to create_note #3
  • Deployment: Dockerfile and Smithery config #2
  • add MCP server badge #1
  • [feat/pipeline-support] feat: add pipeline management commands #46
  • chore: update CHANGELOG for version 2.0.4 e26c169
  • Squashed commit of the following: 73f21db
  • Squashed commit of the following: 750e1c6

17 August 2025

  • fix: Update Docker image repository name in workflow b97b264
  • chore: Update version to 2.0.3 in package.json 196aee3

15 August 2025

  • chore: update version in package.json to 2.0.2 0c5e667
  • chore: update version in CHANGELOG to 2.0.1 e3b0144

15 August 2025

  • v1.0.77 #209
  • FIX: docker hub repo user name #210
  • feat: Add NPM publish workflow for automated package publishing #208
  • Fix list of tools in README.md #205
  • Squashed commit of the following: 291fb10
  • Fix list of tools 4ab6eb1
  • fix: update Docker Hub repository username in workflow 4ed895b

15 August 2025

  • User based authentication methods #130
  • feat: update version to 2.0.0-canary.0 1751d1d
  • fix: update version to 2.0.0 in package.json and package-lock.json cce5d07
  • fix: update version to 2.0.0-beta.0 and rename deploy scripts d5a652d

13 August 2025

  • feat: Add NPM publish workflow for automated package publishing #208
  • Fix list of tools in README.md #205
  • FIX: flexible boolean #201
  • feat(attachement):download attachement, e.g. images #200
  • FEAT: merge MR #193
  • FEAT: get draft note #197
  • feat: Add createDraftNote api support, useful for bulk code review #183
  • feat: add my_issues and list_project_members tools #133
  • feat(pipeline): Add list_pipeline_trigger_jobs tools #194
  • (feat): add tool to upload file for markdown content #196
  • Fix list of tools 4ab6eb1
  • feat: replace GITLAB_LOCK_PROJECT with GITLAB_ALLOWED_PROJECT_IDS 009ad97
  • feat: add GITLAB_LOCK_PROJECT environment variable c899a7d

25 July 2025

  • Bump version to 1.0.76 #182
  • FEAT: iteration #179
  • Bump version to 1.0.75 #178
  • Merge pull request #181 from zereight/feat/166-1 6adbeea
  • FIX 46f8405
  • FIX: default null 6e82e7e

18 July 2025

  • Allow accessing issues without project id #168
  • Feat/deploy script #176
  • FEAT: target project on create MR #174
  • Bump version to 1.0.74 #175
  • FIX 2872aed
  • fix(list_issues): make project_id optional b242522
  • Bump version to 1.0.75 b0411ba

17 July 2025

13 July 2025

9 July 2025

  • chore: Bump version 1.0.72 #154
  • FEAT: enable string for boolean for claude #150
  • Bump version to 1.0.71 #152
  • tag with image push #151
  • FIX: string | number for gemini #149
  • FIX: format boolean for claude #148
  • Print logs to stderr #147
  • FIX: CreateMergeRequestSchema #146
  • chore: Bump version to 1.0.70 #145
  • FIX: sse #144
  • FIX: default project id #141
  • FEAT: format boolean #143
  • FIX: console to stderr #135
  • FIX: create pipeline #138
  • FEAT: Add support for Streamable HTTP transport #128
  • FIX: notable iid #126
  • FEAT: reviewer on update MR #118
  • FEAT: not call create fork repo on set default project id #116
  • FEAT: project id , vscode doc #113
  • feat(simple healthcheck): #112
  • FIX: new,old path nullable #108
  • fix: avoid error caused by line_range type: null in discussion #107
  • FIX: sse readme #103
  • REVIEW FIX 3ad2954
  • fix: avoid error caused by line_range: null in discussion d50b7fd
  • FIX b109392

16 June 2025

  • FEAT: mr discussion with code diff #93
  • docs: update README and version to 1.0.64 cced1c1

16 June 2025

  • feat: add cookie-based authentication support for enterprise GitLab #101
  • Fix notification_level null handling for GitLab group owners #99

12 June 2025

  • docs: add CHANGELOG entry for v1.0.63 8d70627

12 June 2025

  • feat: add pagination support for CI job logs to prevent context window flooding #97
  • [version-update] fix: correct Private-Token header authentication for GitLab API 🔐 3c23675
  • chore: bump version to 1.0.63 62f0fff

10 June 2025

  • FIX: private token auth #91
  • FEAT: private token auth #89
  • style: format code for consistency and readability ✨ 1ba5434
  • [version-update] feat: bump version to 1.0.60 🎉 29659db
  • [version-update] feat: bump version to 1.0.62 🎉 8df87c6

7 June 2025

  • FIX: list issues assginee username #87
  • FEAT: add support for remove_source_branch and squash options for merge requests #86

4 June 2025

  • Fix for null error #85
  • FIX: bug get issues #83
  • Add support for retrieving wiki page content in list_wiki_pages #82
  • DOC: readme docker image #81
  • [version-update] feat: bump version to 1.0.59 🎉 0930ce3
  • [feat] update: bump version to 1.0.58 8cb7703

3 June 2025

  • Add pagination to merge request discussions, similar to issue discussions #80
  • fix: merge_requests_template can be null #79
  • [feat] update: bump version to 1.0.57 c07356b

2 June 2025

  • FIX: issue param #78
  • FIX: get issues labels #77
  • FEAT: MCP SSE #76
  • Feat: Enrich Merge Request Creation #68
  • feat: add branch comparison functionality and update related schemas c834ebc
  • fix: remove duplicate entry for get_branch_diffs in tools list 6bc1379
  • feat: add user retrieval functions and schemas for GitLab API integration 005b46a

31 May 2025

  • Feat/custom ssl #72
  • FEAT: multi platform #71
  • Release v1.0.54: Add multi-platform support and custom SSL configuration 459161e
  • chore: remove outdated release notes for version 1.0.40 e9493b2
  • [main] chore: bump version to v1.0.54 🚀 4a8088c

30 May 2025

  • FEAT: ci push docker hub #65
  • [main] fix: make old_line and new_line optional for image diff discussions cb36c00
  • [main] chore: bump version to v1.0.53 fcb71e2

30 May 2025

  • feat: add pipeline management commands #64
  • [main] docs: update README with comments on GITLAB configuration options #63
  • test #61
  • Fix GitHub Actions workflow syntax errors #62
  • [feat/pipeline-support] feat: add pipeline management commands #46
  • [feat/pipeline-support] feat: add USE_PIPELINE environment variable for conditional pipeline feature activation de0b138
  • [main] docs: update README to remove automated testing section 📝 37203ba
  • [main] debug: temporarily disable MCP server startup test 8e2b6e6

29 May 2025

  • [main] feat: update milestone management tools and improve code formatting ✨ 181f1e9

29 May 2025

  • feat: add tools for milestones #59
  • FEAT: docker image push script #60
  • [main] chore: v1.0.48 버전 업데이트 2a80988
  • feat: add milestone management commands to README 5762b32

29 May 2025

  • fix(schemas): make illustration nullable in GitLabPipelineSchema #58
  • feat: implement list_merge_requests functionality #56
  • fix(schemas): make avatar_url nullable in GitLabUserSchema #55
  • feat: implement list_merge_requests functionality cc84777
  • [main] release: v1.0.47 a2c2ac1

27 May 2025

  • FIX: description null error #53
  • [main] fix: description null error handling f8b1444

24 May 2025

  • feat(release): 1.0.44 adds pipeline jobs tool #52
  • chore(release): 1.0.43 - get_repository_tree is added read_only_mode 1406203
  • [main] docs: update changelog for v1.0.45 pipeline tools 8ba3398
  • docs: translate issue notes changelog from Korean to English 3d7aa80

22 May 2025

  • feat: add support for creating and updating issue notes #47
  • fix: fix README #45
  • chore(release): 1.0.42 - issue note 기능 추가 (#47) 25be194
  • docs: update release notes for v1.0.40 (2025-05-21) b326f4c

21 May 2025

  • feat: add issue discussions support #44

20 May 2025

  • feat: add docker image and push to dockerhub #42
  • fixed resolve_outdated_diff_discussions nullable #41
  • docs: add release-notes.md 676bbcd
  • 버전 1.0.39로 업데이트 e4a28a9

17 May 2025

  • fix: add expanded to start and end for GitLabDiscussionNoteSchema #40
  • Bump version 0bb59a3

15 May 2025

  • Adds threaded comment support for merge requests #38
  • Support resolving merge request discussion notes #37
  • feat: Add create_merge_request_thread tool for diff notes 026dd58
  • feat: Implement add_merge_request_thread_note function for adding notes to existing MR threads 3f2b355
  • feat: support resolving merge request notes bde83c0

13 May 2025

  • feat: Decode project_id for GitLab API calls 08ab135
  • [main] refactor: update label_id schema to use string type bf250b0
  • [main] chore: update version to 1.0.35 🚀 651072d

7 May 2025

  • feat: Gitlab list repository tree tool #35
  • feat: support search by branch for get_merge_request #34
  • fix: rename to source branch 7b8cbc0
  • [main] docs: update README with detailed descriptions for merge request functions 3a25e7c
  • [main] chore: update version to 1.0.34 23a9bbc

1.0.32

25 April 2025

  • feat: Implement proxy configuration for HTTP/HTTPS/SOCKS #33
  • feat: Add read-only mode support #29
  • Add schemas for GitLab discussion notes and merge request discussions #26
  • ✨ Add list_group_projects tool #25
  • Update README.md #24
  • Fixed types for create_merge_request and get_merge_request tools. #23
  • Authentication Header Consistency Fix #22
  • Labels API Support #21
  • Improve README documentation with detailed tool descriptions #18
  • Implement GitLab Issues and Issue Links API #17
  • Add GitLab Projects API support #16
  • Add GitLab Namespaces API support #15
  • Fix GitLab API fork repository parameter handling #14
  • Fix GitLab API parameter handling in create_or_update_file #13
  • Improve code documentation with bilingual JSDoc comments #11
  • Fix URL construction with smart API URL normalization #10
  • Fix createNote function URL construction: use plural resource names and avoid duplicate /api/v4 #7
  • Added missing api url part to create_note #3
  • Deployment: Dockerfile and Smithery config #2
  • add MCP server badge #1
  • build: test-note.js 파일 삭제 61ee124
  • Add compiled JavaScript files for Issue Links API schema fix a4d7795
  • Build upd. 5d10401