{"id":26661334,"url":"https://github.com/yoda-digital/mcp-gitlab-server","last_synced_at":"2025-04-11T17:22:45.104Z","repository":{"id":283061575,"uuid":"950515508","full_name":"yoda-digital/mcp-gitlab-server","owner":"yoda-digital","description":"Enhanced MCP server for GitLab: group projects listing and activity tracking","archived":false,"fork":false,"pushed_at":"2025-04-10T07:31:25.000Z","size":274,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T08:32:55.040Z","etag":null,"topics":["ai","anthropic","git","gitlab","llm","mcp","modelcontextprotocol"],"latest_commit_sha":null,"homepage":"https://yoda.digital","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoda-digital.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"nalyk","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-03-18T09:31:57.000Z","updated_at":"2025-04-10T08:05:39.000Z","dependencies_parsed_at":"2025-04-10T08:26:07.880Z","dependency_job_id":"c9a8ca6e-2a19-4471-9cf5-9b3e40ed38a9","html_url":"https://github.com/yoda-digital/mcp-gitlab-server","commit_stats":null,"previous_names":["yoda-digital/mcp-gitlab-server"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoda-digital%2Fmcp-gitlab-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoda-digital%2Fmcp-gitlab-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoda-digital%2Fmcp-gitlab-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoda-digital%2Fmcp-gitlab-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoda-digital","download_url":"https://codeload.github.com/yoda-digital/mcp-gitlab-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248189459,"owners_count":21062264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","git","gitlab","llm","mcp","modelcontextprotocol"],"created_at":"2025-03-25T13:16:41.671Z","updated_at":"2025-04-11T17:22:45.087Z","avatar_url":"https://github.com/yoda-digital.png","language":"TypeScript","readme":"# GitLab MCP Server\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/repo-logo.png\" alt=\"GitLab MCP Server Logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@yoda.digital/gitlab-mcp-server\"\u003e\n    \u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/v/@yoda.digital/gitlab-mcp-server?color=blue\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/yoda-digital/mcp-gitlab-server/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/yoda-digital/mcp-gitlab-server/issues\"\u003e\n    \u003cimg alt=\"GitHub issues\" src=\"https://img.shields.io/github/issues/yoda-digital/mcp-gitlab-server\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/yoda-digital/mcp-gitlab-server/stargazers\"\u003e\n    \u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/yoda-digital/mcp-gitlab-server\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eA powerful Model Context Protocol (MCP) server for GitLab integration, enabling AI assistants to interact with your GitLab resources.\u003c/b\u003e\n\u003c/p\u003e\n\n## ✨ Features\n\n- **Comprehensive GitLab API Integration** - Access repositories, issues, merge requests, wikis, and more\n- **Both Transports Supported** - Use with stdio or Server-Sent Events (SSE)\n- **Consistent Response Formatting** - Standardized pagination and response structures\n- **Strong TypeScript Typing** - Built with the MCP SDK for type safety\n- **Complete Documentation** - Examples for all available tools\n\n### 🔍 Supported Operations\n\n- **Repository Management** - Search, create, fork repositories\n- **File Handling** - Read, create, update files\n- **Branch Operations** - Create and manage branches\n- **Issue Tracking** - Create, list, filter issues\n- **Merge Requests** - Create, list, review merge requests\n- **Group Management** - List group projects and members\n- **Project Activity** - Track events and commit history\n- **Wiki Management** - Full support for project and group wikis with attachments\n- **Member Management** - List and manage project/group members\n\n## 🚀 Getting Started\n\n### Installation\n\n#### From npm (Recommended)\n\n```bash\nnpm install @yoda.digital/gitlab-mcp-server\n```\n\n#### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/yoda-digital/mcp-gitlab-server.git\ncd mcp-gitlab-server\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n```\n\n### Configuration\n\n#### Environment Variables\n\nThe server requires the following environment variables:\n\n| Variable                       | Required | Default                     | Description                                        |\n| ------------------------------ | -------- | --------------------------- | -------------------------------------------------- |\n| `GITLAB_PERSONAL_ACCESS_TOKEN` | Yes      | -                           | Your GitLab personal access token                  |\n| `GITLAB_API_URL`               | No       | `https://gitlab.com/api/v4` | GitLab API URL                                     |\n| `PORT`                         | No       | `3000`                      | Port for SSE transport                             |\n| `USE_SSE`                      | No       | `false`                     | Set to 'true' to use SSE transport                 |\n| `GITLAB_READ_ONLY_MODE`        | No       | `false`                     | Set to 'true' to enable read-only mode (see below) |\n\n#### Read-Only Mode\n\nWhen `GITLAB_READ_ONLY_MODE` is set to `true`, the server will only expose read operations. This is useful for client applications that shouldn't have write access to your GitLab resources. In read-only mode, the following tools will be available:\n\n- `search_repositories`\n- `get_file_contents`\n- `list_group_projects`\n- `get_project_events`\n- `list_commits`\n- `list_issues`\n- `list_merge_requests`\n- `list_project_wiki_pages`\n- `get_project_wiki_page`\n- `list_group_wiki_pages`\n- `get_group_wiki_page`\n- `list_project_members`\n- `list_group_members`\n\nAny attempt to use write operations (create, update, delete) will result in an error when in read-only mode.\n\n#### MCP Settings Configuration\n\nAdd the GitLab MCP server to your MCP settings file:\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@yoda.digital/gitlab-mcp-server\"],\n      \"env\": {\n        \"GITLAB_PERSONAL_ACCESS_TOKEN\": \"your_token_here\",\n        \"GITLAB_API_URL\": \"https://gitlab.com/api/v4\"\n      },\n      \"alwaysAllow\": [],\n      \"disabled\": false\n    }\n  }\n}\n```\n\nFor read-only mode, add the `GITLAB_READ_ONLY_MODE` environment variable:\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab-readonly\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@yoda.digital/gitlab-mcp-server\"],\n      \"env\": {\n        \"GITLAB_PERSONAL_ACCESS_TOKEN\": \"your_token_here\",\n        \"GITLAB_API_URL\": \"https://gitlab.com/api/v4\",\n        \"GITLAB_READ_ONLY_MODE\": \"true\"\n      },\n      \"alwaysAllow\": [],\n      \"disabled\": false\n    }\n  }\n}\n```\n\n### Usage\n\n#### With stdio transport (default)\n\n```bash\n# Set your GitLab personal access token\nexport GITLAB_PERSONAL_ACCESS_TOKEN=your_token_here\n\n# Run the server\nnpm start\n```\n\n#### With SSE transport\n\n```bash\n# Set your GitLab personal access token and enable SSE\nexport GITLAB_PERSONAL_ACCESS_TOKEN=your_token_here\nexport GITLAB_READ_ONLY_MODE=false\nexport USE_SSE=true\nexport PORT=3000  # Optional, defaults to 3000\n\n# Run the server\nnpm start\n```\n\n#### With npx\n\n```bash\n# Run directly with npx\nGITLAB_PERSONAL_ACCESS_TOKEN=your_token_here npx @yoda.digital/gitlab-mcp-server\n```\n\n## 🛠️ Available Tools\n\n### Repository Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003esearch_repositories\u003c/b\u003e: Search for GitLab projects\u003c/summary\u003e\n\n```json\n{\n  \"search\": \"project-name\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_repository\u003c/b\u003e: Create a new GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"name\": \"new-project\",\n  \"description\": \"A new project\",\n  \"visibility\": \"private\",\n  \"initialize_with_readme\": true\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003efork_repository\u003c/b\u003e: Fork a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"namespace\": \"target-namespace\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_group_projects\u003c/b\u003e: List all projects within a specific GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"archived\": false,\n  \"visibility\": \"public\",\n  \"include_subgroups\": true,\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n### File Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eget_file_contents\u003c/b\u003e: Get the contents of a file from a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"file_path\": \"path/to/file.txt\",\n  \"ref\": \"main\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_or_update_file\u003c/b\u003e: Create or update a single file in a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"file_path\": \"path/to/file.txt\",\n  \"content\": \"File content here\",\n  \"commit_message\": \"Add/update file\",\n  \"branch\": \"main\",\n  \"previous_path\": \"old/path/to/file.txt\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003epush_files\u003c/b\u003e: Push multiple files to a GitLab project in a single commit\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"files\": [\n    {\n      \"path\": \"file1.txt\",\n      \"content\": \"Content for file 1\"\n    },\n    {\n      \"path\": \"file2.txt\",\n      \"content\": \"Content for file 2\"\n    }\n  ],\n  \"commit_message\": \"Add multiple files\",\n  \"branch\": \"main\"\n}\n```\n\n\u003c/details\u003e\n\n### Branch Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_branch\u003c/b\u003e: Create a new branch in a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"branch\": \"new-branch\",\n  \"ref\": \"main\"\n}\n```\n\n\u003c/details\u003e\n\n### Issue Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_issue\u003c/b\u003e: Create a new issue in a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"title\": \"Issue title\",\n  \"description\": \"Issue description\",\n  \"assignee_ids\": [1, 2],\n  \"milestone_id\": 1,\n  \"labels\": [\"bug\", \"critical\"]\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_issues\u003c/b\u003e: Get issues for a GitLab project with filtering\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"state\": \"opened\",\n  \"labels\": \"bug,critical\",\n  \"milestone\": \"v1.0\",\n  \"author_id\": 1,\n  \"assignee_id\": 2,\n  \"search\": \"keyword\",\n  \"created_after\": \"2023-01-01T00:00:00Z\",\n  \"created_before\": \"2023-12-31T23:59:59Z\",\n  \"updated_after\": \"2023-06-01T00:00:00Z\",\n  \"updated_before\": \"2023-06-30T23:59:59Z\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_issue_notes\u003c/b\u003e: Get all comments and system notes for a GitLab issue\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"issue_iid\": 42,\n  \"sort\": \"desc\",\n  \"order_by\": \"created_at\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n**Response Format:**\n\n```json\n{\n  \"count\": 15,\n  \"notes\": [\n    {\n      \"id\": 123456,\n      \"body\": \"This is a comment on the issue\",\n      \"author\": {\n        \"id\": 1,\n        \"username\": \"username\",\n        \"name\": \"User Name\"\n      },\n      \"created_at\": \"2023-01-01T00:00:00Z\",\n      \"updated_at\": \"2023-01-01T00:00:00Z\",\n      \"system\": false,\n      \"type\": \"comment\"\n    },\n    {\n      \"id\": 123457,\n      \"body\": \"added label ~bug\",\n      \"author\": {\n        \"id\": 1,\n        \"username\": \"username\",\n        \"name\": \"User Name\"\n      },\n      \"created_at\": \"2023-01-02T00:00:00Z\",\n      \"updated_at\": \"2023-01-02T00:00:00Z\",\n      \"system\": true,\n      \"type\": \"system\"\n    }\n    // ... other notes\n  ]\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_issue_discussions\u003c/b\u003e: Get all discussions (threaded comments) for a GitLab issue\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"issue_iid\": 42,\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n**Response Format:**\n\n```json\n{\n  \"count\": 5,\n  \"discussions\": [\n    {\n      \"id\": \"discussion-123\",\n      \"individual_note\": true,\n      \"notes\": [\n        {\n          \"id\": 123456,\n          \"body\": \"This is a comment on the issue\",\n          \"author\": {\n            \"id\": 1,\n            \"username\": \"username\",\n            \"name\": \"User Name\"\n          },\n          \"created_at\": \"2023-01-01T00:00:00Z\",\n          \"updated_at\": \"2023-01-01T00:00:00Z\",\n          \"system\": false,\n          \"type\": \"comment\"\n        }\n      ]\n    },\n    {\n      \"id\": \"discussion-124\",\n      \"individual_note\": false,\n      \"notes\": [\n        {\n          \"id\": 123457,\n          \"body\": \"This is a thread starter\",\n          \"author\": {\n            \"id\": 1,\n            \"username\": \"username\",\n            \"name\": \"User Name\"\n          },\n          \"created_at\": \"2023-01-02T00:00:00Z\",\n          \"updated_at\": \"2023-01-02T00:00:00Z\",\n          \"system\": false,\n          \"type\": \"comment\"\n        },\n        {\n          \"id\": 123458,\n          \"body\": \"This is a reply in the thread\",\n          \"author\": {\n            \"id\": 2,\n            \"username\": \"username2\",\n            \"name\": \"User Name 2\"\n          },\n          \"created_at\": \"2023-01-03T00:00:00Z\",\n          \"updated_at\": \"2023-01-03T00:00:00Z\",\n          \"system\": false,\n          \"type\": \"comment\"\n        }\n      ]\n    }\n    // ... other discussions\n  ]\n}\n```\n\n\u003c/details\u003e\n\n### Merge Request Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_merge_request\u003c/b\u003e: Create a new merge request in a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"title\": \"Merge request title\",\n  \"description\": \"Merge request description\",\n  \"source_branch\": \"feature-branch\",\n  \"target_branch\": \"main\",\n  \"allow_collaboration\": true,\n  \"draft\": false\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_merge_requests\u003c/b\u003e: Get merge requests for a GitLab project with filtering\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"state\": \"opened\",\n  \"order_by\": \"created_at\",\n  \"sort\": \"desc\",\n  \"milestone\": \"v1.0\",\n  \"labels\": \"feature,enhancement\",\n  \"created_after\": \"2023-01-01T00:00:00Z\",\n  \"created_before\": \"2023-12-31T23:59:59Z\",\n  \"updated_after\": \"2023-06-01T00:00:00Z\",\n  \"updated_before\": \"2023-06-30T23:59:59Z\",\n  \"author_id\": 1,\n  \"assignee_id\": 2,\n  \"search\": \"keyword\",\n  \"source_branch\": \"feature-branch\",\n  \"target_branch\": \"main\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n### Project Activity\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eget_project_events\u003c/b\u003e: Get recent events/activities for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"action\": \"pushed\",\n  \"target_type\": \"issue\",\n  \"before\": \"2023-12-31T23:59:59Z\",\n  \"after\": \"2023-01-01T00:00:00Z\",\n  \"sort\": \"desc\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_commits\u003c/b\u003e: Get commit history for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"sha\": \"branch-or-commit-sha\",\n  \"path\": \"path/to/file\",\n  \"since\": \"2023-01-01T00:00:00Z\",\n  \"until\": \"2023-12-31T23:59:59Z\",\n  \"all\": true,\n  \"with_stats\": true,\n  \"first_parent\": true,\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n\u003c/details\u003e\n\n### Member Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_project_members\u003c/b\u003e: List all members of a GitLab project (including inherited members)\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"query\": \"search term\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n**Response Format:**\n\n```json\n{\n  \"count\": 3,\n  \"items\": [\n    {\n      \"id\": 123,\n      \"username\": \"username\",\n      \"name\": \"User Name\",\n      \"state\": \"active\",\n      \"avatar_url\": \"https://gitlab.com/avatar.png\",\n      \"web_url\": \"https://gitlab.com/username\",\n      \"access_level\": 50,\n      \"access_level_description\": \"Owner\"\n    }\n    // ... other members\n  ]\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_group_members\u003c/b\u003e: List all members of a GitLab group (including inherited members)\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"query\": \"search term\",\n  \"page\": 1,\n  \"per_page\": 20\n}\n```\n\n**Response Format:**\n\n```json\n{\n  \"count\": 5,\n  \"items\": [\n    {\n      \"id\": 456,\n      \"username\": \"username\",\n      \"name\": \"User Name\",\n      \"state\": \"active\",\n      \"avatar_url\": \"https://gitlab.com/avatar.png\",\n      \"web_url\": \"https://gitlab.com/username\",\n      \"access_level\": 30,\n      \"access_level_description\": \"Developer\"\n    }\n    // ... other members\n  ]\n}\n```\n\n\u003c/details\u003e\n\n### Project Wiki Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_project_wiki_pages\u003c/b\u003e: List all wiki pages for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"with_content\": false\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eget_project_wiki_page\u003c/b\u003e: Get a specific wiki page for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"slug\": \"page-slug\",\n  \"render_html\": false,\n  \"version\": \"commit-sha\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_project_wiki_page\u003c/b\u003e: Create a new wiki page for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"title\": \"Page Title\",\n  \"content\": \"Wiki page content\",\n  \"format\": \"markdown\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eedit_project_wiki_page\u003c/b\u003e: Edit an existing wiki page for a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"slug\": \"page-slug\",\n  \"title\": \"New Page Title\",\n  \"content\": \"Updated wiki page content\",\n  \"format\": \"markdown\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003edelete_project_wiki_page\u003c/b\u003e: Delete a wiki page from a GitLab project\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"slug\": \"page-slug\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eupload_project_wiki_attachment\u003c/b\u003e: Upload an attachment to a GitLab project wiki\u003c/summary\u003e\n\n```json\n{\n  \"project_id\": \"username/project\",\n  \"file_path\": \"path/to/attachment.png\",\n  \"content\": \"base64-encoded-content\",\n  \"branch\": \"main\"\n}\n```\n\n\u003c/details\u003e\n\n### Group Wiki Operations\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003elist_group_wiki_pages\u003c/b\u003e: List all wiki pages for a GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"with_content\": false\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eget_group_wiki_page\u003c/b\u003e: Get a specific wiki page for a GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"slug\": \"page-slug\",\n  \"render_html\": false,\n  \"version\": \"commit-sha\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ecreate_group_wiki_page\u003c/b\u003e: Create a new wiki page for a GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"title\": \"Page Title\",\n  \"content\": \"Wiki page content\",\n  \"format\": \"markdown\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eedit_group_wiki_page\u003c/b\u003e: Edit an existing wiki page for a GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"slug\": \"page-slug\",\n  \"title\": \"New Page Title\",\n  \"content\": \"Updated wiki page content\",\n  \"format\": \"markdown\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003edelete_group_wiki_page\u003c/b\u003e: Delete a wiki page from a GitLab group\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"slug\": \"page-slug\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eupload_group_wiki_attachment\u003c/b\u003e: Upload an attachment to a GitLab group wiki\u003c/summary\u003e\n\n```json\n{\n  \"group_id\": \"group-name\",\n  \"file_path\": \"path/to/attachment.png\",\n  \"content\": \"base64-encoded-content\",\n  \"branch\": \"main\"\n}\n```\n\n\u003c/details\u003e\n\n## 🔧 Development\n\n### Requirements\n\n- Node.js 16+\n- npm 7+\n- A GitLab account with a personal access token\n\n### Building the Project\n\n```bash\nnpm run build\n```\n\n### Running Tests\n\n```bash\nnpm test\n```\n\n### Code Style and Linting\n\n```bash\nnpm run lint\n```\n\n### Release Process\n\n1. Update version in `package.json`\n2. Update CHANGELOG.md\n3. Create a new release on GitHub\n4. Publish to npm with `npm publish`\n\n## 📖 Documentation\n\nFor more detailed documentation, please visit our [documentation site](https://yoda-digital.github.io/mcp-gitlab-server/) or check the TypeScript definitions in the source code.\n\n## 💼 Use Cases\n\n- **AI-powered Development Workflows** - Enable AI assistants to interact with your GitLab repositories\n- **Automated Issue and PR Management** - Streamline development processes with AI support\n- **Wiki Management** - Automate documentation updates and knowledge base management\n- **Team Collaboration** - Integrate AI assistants into your team's GitLab workflow\n\n## 📊 Roadmap\n\n- [ ] GitLab CI/CD Integration\n- [ ] Advanced Project Analytics\n- [ ] Comprehensive Test Suite\n- [ ] Support for GitLab GraphQL API\n- [ ] Extended Webhook Support\n\n## 🤝 Contributing\n\nContributions are welcome and appreciated! Here's how you can contribute:\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\nPlease make sure to update tests as appropriate and follow the code style of the project.\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 👥 Contributors\n\nThanks to all the contributors who have helped improve this project:\n\n\u003ca href=\"https://github.com/yoda-digital/mcp-gitlab-server/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=yoda-digital/mcp-gitlab-server\" /\u003e\n\u003c/a\u003e\n\nSpecial thanks to:\n\n- [thomasleveil](https://github.com/thomasleveil) - Implemented GitLab member listing functionality for projects and groups with consistent response formatting\n\n## 📦 NPM Package\n\nThis package is available on npm:  \n[https://www.npmjs.com/package/@yoda.digital/gitlab-mcp-server](https://www.npmjs.com/package/@yoda.digital/gitlab-mcp-server)\n","funding_links":["https://github.com/sponsors/nalyk"],"categories":["Project Management MCP Servers","🤖 AI/ML","Version Control","Task and Project Management"],"sub_categories":["How to Submit"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoda-digital%2Fmcp-gitlab-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoda-digital%2Fmcp-gitlab-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoda-digital%2Fmcp-gitlab-server/lists"}