{"_id":"@anupsahu/gitlab-mcp","_rev":"6-89ceb442692b4e6fc359309afa4dadf7","name":"@anupsahu/gitlab-mcp","dist-tags":{"latest":"1.2.2"},"versions":{"1.0.0":{"name":"@anupsahu/gitlab-mcp","version":"1.0.0","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"author":{"name":"Anup Sahu"},"license":"MIT","_id":"@anupsahu/gitlab-mcp@1.0.0","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"bin":{"gitlab-mcp":"build/index.js"},"dist":{"shasum":"0bff3d6d0bc8d23d900076206cd1b5b5e16c36d3","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.0.0.tgz","fileCount":16,"integrity":"sha512-5jkPbdUxRpajsDgSHM4qb7kzulcCiy5k/CZnETt433tIrSrUB201J4wgyZsIRWoy5A9B1Wk053iXm8jd8J5dPQ==","signatures":[{"sig":"MEUCIQDu+FZrPMx4BCBjoUWxEjsehGGL/USNxJH3v9Z+jfGolQIgdTkF1+i1ITL1jIonEjnOs3IQFX8Ojr98Xocyzut+eMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":328347},"type":"module","engines":{"node":">=14"},"gitHead":"6383ef9042830e811bbd2dc5e63d52aae2ee2a70","scripts":{"dev":"npm run build && node build/index.js","lint":"eslint . --ext .ts","test":"node test/validate-api.js","build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","watch":"tsc --watch","deploy":"npm publish --access public","format":"prettier --write \"**/*.{js,ts,json,md}\"","prepare":"npm run build","lint:fix":"eslint . --ext .ts --fix","changelog":"auto-changelog -p","test:server":"npm run build && node build/test/test-all-transport-server.js","format:check":"prettier --check \"**/*.{js,ts,json,md}\"","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","test:integration":"node test/validate-api.js"},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"repository":{"url":"git+https://github.com/anupsahu/gitlab-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","directories":{},"_nodeVersion":"23.11.0","dependencies":{"pino":"^9.7.0","express":"^5.1.0","crypto-js":"^4.2.0","form-data":"^4.0.0","node-fetch":"^3.3.2","pino-pretty":"^13.0.0","fetch-cookie":"^3.1.0","tough-cookie":"^5.1.2","express-session":"^1.18.2","@types/crypto-js":"^4.2.2","http-proxy-agent":"^7.0.2","@types/node-fetch":"^2.6.12","https-proxy-agent":"^7.0.6","socks-proxy-agent":"^8.0.5","zod-to-json-schema":"^3.23.5","@types/express-session":"^1.18.2","@modelcontextprotocol/sdk":"^1.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","eslint":"^9.18.0","ts-node":"^10.9.2","prettier":"^3.4.2","typescript":"^5.8.2","@types/node":"^22.13.10","@types/express":"^5.0.2","auto-changelog":"^2.4.0","@typescript-eslint/parser":"^8.21.0","@typescript-eslint/eslint-plugin":"^8.21.0"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp_1.0.0_1754900492979_0.7591792128764323","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@anupsahu/gitlab-mcp","version":"1.0.1","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"author":{"name":"Anup Sahu"},"license":"MIT","_id":"@anupsahu/gitlab-mcp@1.0.1","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"bin":{"gitlab-mcp":"build/index.js"},"dist":{"shasum":"626957328bb46e4a566c7d4c3569a13a4ff12a8c","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.0.1.tgz","fileCount":16,"integrity":"sha512-JsDC5uGZuhN2H7HtuPzoRXU25pZu//gxJei1+t68xAly2mG50ErIA1+po8QWpE6eTv9aFnbE8acJ+PWiE2YLaw==","signatures":[{"sig":"MEQCIAeasCPL6F3Iai5eRQgnOyy7gpLGIMgqnqYOkgba75NwAiA8ZntuR6FVSgtmekZ6jvWpJK0M283Zyu80ZgEyrPNMzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":328742},"type":"module","engines":{"node":">=14"},"gitHead":"d4a4fc982dcf9a46e1cf40bce3413b10b4005a52","scripts":{"dev":"npm run build && node build/index.js","lint":"eslint . --ext .ts","test":"node test/validate-api.js","build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","watch":"tsc --watch","deploy":"npm publish --access public","format":"prettier --write \"**/*.{js,ts,json,md}\"","prepare":"npm run build","lint:fix":"eslint . --ext .ts --fix","changelog":"auto-changelog -p","test:server":"npm run build && node build/test/test-all-transport-server.js","format:check":"prettier --check \"**/*.{js,ts,json,md}\"","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","test:integration":"node test/validate-api.js"},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"repository":{"url":"git+https://github.com/anupsahu/gitlab-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","directories":{},"_nodeVersion":"23.11.0","dependencies":{"pino":"^9.7.0","express":"^5.1.0","crypto-js":"^4.2.0","form-data":"^4.0.0","node-fetch":"^3.3.2","pino-pretty":"^13.0.0","fetch-cookie":"^3.1.0","tough-cookie":"^5.1.2","express-session":"^1.18.2","@types/crypto-js":"^4.2.2","http-proxy-agent":"^7.0.2","@types/node-fetch":"^2.6.12","https-proxy-agent":"^7.0.6","socks-proxy-agent":"^8.0.5","zod-to-json-schema":"^3.23.5","@types/express-session":"^1.18.2","@modelcontextprotocol/sdk":"^1.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","eslint":"^9.18.0","ts-node":"^10.9.2","prettier":"^3.4.2","typescript":"^5.8.2","@types/node":"^22.13.10","@types/express":"^5.0.2","auto-changelog":"^2.4.0","@typescript-eslint/parser":"^8.21.0","@typescript-eslint/eslint-plugin":"^8.21.0"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp_1.0.1_1754978952673_0.16085780807814842","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@anupsahu/gitlab-mcp","version":"1.1.0","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"author":{"name":"Anup Sahu"},"license":"MIT","_id":"@anupsahu/gitlab-mcp@1.1.0","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"bin":{"gitlab-mcp":"build/index.js"},"dist":{"shasum":"729a57252e71fbb536b6f6143e23258974dcd22b","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.1.0.tgz","fileCount":16,"integrity":"sha512-a/pVd3fBl3QQ3bRMk08+9LoB/pfLqaSCiQpVD7ulGfsNrk6h6OtWdguAONzRDH5cv3eG5NDwG8BtifQCaFEQoA==","signatures":[{"sig":"MEYCIQCQo5tgE6rEAsDQFWJDM7XwGt++eQ6ep9p9VKGHMNa9WgIhAKO4pLomRGg6o1+P2QtSSqTHbx1rrgYIqPU82HAE5IIt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332112},"type":"module","engines":{"node":">=14"},"gitHead":"03f9078fb82c1881d290db7ddfa87342ad3468a6","scripts":{"dev":"npm run build && node build/index.js","lint":"eslint . --ext .ts","test":"node test/validate-api.js","build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","watch":"tsc --watch","deploy":"npm publish --access public","format":"prettier --write \"**/*.{js,ts,json,md}\"","prepare":"npm run build","lint:fix":"eslint . --ext .ts --fix","changelog":"auto-changelog -p","test:server":"npm run build && node build/test/test-all-transport-server.js","format:check":"prettier --check \"**/*.{js,ts,json,md}\"","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","test:integration":"node test/validate-api.js"},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"repository":{"url":"git+https://github.com/anupsahu/gitlab-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","directories":{},"_nodeVersion":"23.11.0","dependencies":{"pino":"^9.7.0","express":"^5.1.0","crypto-js":"^4.2.0","form-data":"^4.0.0","node-fetch":"^3.3.2","pino-pretty":"^13.0.0","fetch-cookie":"^3.1.0","tough-cookie":"^5.1.2","express-session":"^1.18.2","@types/crypto-js":"^4.2.2","http-proxy-agent":"^7.0.2","@types/node-fetch":"^2.6.12","https-proxy-agent":"^7.0.6","socks-proxy-agent":"^8.0.5","zod-to-json-schema":"^3.23.5","@types/express-session":"^1.18.2","@modelcontextprotocol/sdk":"^1.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","eslint":"^9.18.0","ts-node":"^10.9.2","prettier":"^3.4.2","typescript":"^5.8.2","@types/node":"^22.13.10","@types/express":"^5.0.2","auto-changelog":"^2.4.0","@typescript-eslint/parser":"^8.21.0","@typescript-eslint/eslint-plugin":"^8.21.0"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp_1.1.0_1754991691955_0.20952905374685127","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@anupsahu/gitlab-mcp","version":"1.2.0","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"author":{"name":"Anup Sahu"},"license":"MIT","_id":"@anupsahu/gitlab-mcp@1.2.0","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"bin":{"gitlab-mcp":"build/index.js"},"dist":{"shasum":"7f6575fd832ce50d69bac32342096c0be9646afd","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.2.0.tgz","fileCount":16,"integrity":"sha512-RDXonROYSZyAd7avgp1dNONLGTXz/6GUK41/iLB9+/31SQlybmtosyGW4uIeIdrww9Xoxow74KinDhphlxqDxA==","signatures":[{"sig":"MEUCIBAkVYPLrPjGlSOBNVooaiFyBpeMKs5xElDIxwOsxCYiAiEA7EEKZhp0+qOO1oZ0fzNgMgIPJ9BaaMbrSqDFkZ728YE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":331825},"type":"module","engines":{"node":">=14"},"gitHead":"0d2bb2b395889ad9771017089a768e83a89fb4aa","scripts":{"dev":"npm run build && node build/index.js","lint":"eslint . --ext .ts","test":"node test/validate-api.js","build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","watch":"tsc --watch","deploy":"npm publish --access public","format":"prettier --write \"**/*.{js,ts,json,md}\"","prepare":"npm run build","lint:fix":"eslint . --ext .ts --fix","changelog":"auto-changelog -p","test:server":"npm run build && node build/test/test-all-transport-server.js","format:check":"prettier --check \"**/*.{js,ts,json,md}\"","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","test:integration":"node test/validate-api.js"},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"repository":{"url":"git+https://github.com/anupsahu/gitlab-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","directories":{},"_nodeVersion":"23.11.0","dependencies":{"pino":"^9.7.0","express":"^5.1.0","crypto-js":"^4.2.0","form-data":"^4.0.0","node-fetch":"^3.3.2","pino-pretty":"^13.0.0","fetch-cookie":"^3.1.0","tough-cookie":"^5.1.2","express-session":"^1.18.2","@types/crypto-js":"^4.2.2","http-proxy-agent":"^7.0.2","@types/node-fetch":"^2.6.12","https-proxy-agent":"^7.0.6","socks-proxy-agent":"^8.0.5","zod-to-json-schema":"^3.23.5","@types/express-session":"^1.18.2","@modelcontextprotocol/sdk":"^1.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","eslint":"^9.18.0","ts-node":"^10.9.2","prettier":"^3.4.2","typescript":"^5.8.2","@types/node":"^22.13.10","@types/express":"^5.0.2","auto-changelog":"^2.4.0","@typescript-eslint/parser":"^8.21.0","@typescript-eslint/eslint-plugin":"^8.21.0"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp_1.2.0_1754993046726_0.4563062379854814","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@anupsahu/gitlab-mcp","version":"1.2.1","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"author":{"name":"Anup Sahu"},"license":"MIT","_id":"@anupsahu/gitlab-mcp@1.2.1","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"bin":{"gitlab-mcp":"build/index.js"},"dist":{"shasum":"09803c045b803a3f56e6d21a01cc12197350c4cc","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.2.1.tgz","fileCount":16,"integrity":"sha512-RAiFoVvdvJSpb8besHIjy3ziDfQ9qWcg78RMA4hGjXmgCnXrCngWu8Pq3Z6kcSIbEgvgvdbwkXphD0inhI3flg==","signatures":[{"sig":"MEUCIQCh0ivvq8McP8fqarv2yjr8PH/XjaiK4zAF+48OUOKqRQIgD/tg/YIZp0Ux8UHc6wZY5uBf9sl1+oLmcIVlyUp9FUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332319},"type":"module","engines":{"node":">=14"},"gitHead":"e78054606fd8bbd7f30ca5fdc9261fce55f31df9","scripts":{"dev":"npm run build && node build/index.js","lint":"eslint . --ext .ts","test":"node test/validate-api.js","build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","watch":"tsc --watch","deploy":"npm publish --access public","format":"prettier --write \"**/*.{js,ts,json,md}\"","prepare":"npm run build","lint:fix":"eslint . --ext .ts --fix","changelog":"auto-changelog -p","test:server":"npm run build && node build/test/test-all-transport-server.js","format:check":"prettier --check \"**/*.{js,ts,json,md}\"","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","test:integration":"node test/validate-api.js"},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"repository":{"url":"git+https://github.com/anupsahu/gitlab-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","directories":{},"_nodeVersion":"23.11.0","dependencies":{"pino":"^9.7.0","express":"^5.1.0","crypto-js":"^4.2.0","form-data":"^4.0.0","node-fetch":"^3.3.2","pino-pretty":"^13.0.0","fetch-cookie":"^3.1.0","tough-cookie":"^5.1.2","express-session":"^1.18.2","@types/crypto-js":"^4.2.2","http-proxy-agent":"^7.0.2","@types/node-fetch":"^2.6.12","https-proxy-agent":"^7.0.6","socks-proxy-agent":"^8.0.5","zod-to-json-schema":"^3.23.5","@types/express-session":"^1.18.2","@modelcontextprotocol/sdk":"^1.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.2","eslint":"^9.18.0","ts-node":"^10.9.2","prettier":"^3.4.2","typescript":"^5.8.2","@types/node":"^22.13.10","@types/express":"^5.0.2","auto-changelog":"^2.4.0","@typescript-eslint/parser":"^8.21.0","@typescript-eslint/eslint-plugin":"^8.21.0"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp_1.2.1_1754993852474_0.05000889438830125","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@anupsahu/gitlab-mcp","version":"1.2.2","description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","license":"MIT","author":{"name":"Anup Sahu"},"repository":{"type":"git","url":"git+https://github.com/anupsahu/gitlab-mcp.git"},"homepage":"https://github.com/anupsahu/gitlab-mcp#readme","bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"type":"module","bin":{"gitlab-mcp":"build/index.js"},"publishConfig":{"access":"public"},"engines":{"node":">=14"},"scripts":{"build":"tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"","prepare":"npm run build","dev":"npm run build && node build/index.js","watch":"tsc --watch","deploy":"npm publish --access public","generate-tools":"npx ts-node scripts/generate-tools-readme.ts","changelog":"auto-changelog -p","test":"node test/validate-api.js","test:integration":"node test/validate-api.js","test:server":"npm run build && node build/test/test-all-transport-server.js","lint":"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix","format":"prettier --write \"**/*.{js,ts,json,md}\"","format:check":"prettier --check \"**/*.{js,ts,json,md}\""},"dependencies":{"@modelcontextprotocol/sdk":"^1.10.0","@types/crypto-js":"^4.2.2","@types/express-session":"^1.18.2","@types/node-fetch":"^2.6.12","crypto-js":"^4.2.0","express":"^5.1.0","express-session":"^1.18.2","fetch-cookie":"^3.1.0","form-data":"^4.0.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","node-fetch":"^3.3.2","pino":"^9.7.0","pino-pretty":"^13.0.0","socks-proxy-agent":"^8.0.5","tough-cookie":"^5.1.2","zod-to-json-schema":"^3.23.5"},"devDependencies":{"@types/express":"^5.0.2","@types/node":"^22.13.10","@typescript-eslint/eslint-plugin":"^8.21.0","@typescript-eslint/parser":"^8.21.0","auto-changelog":"^2.4.0","eslint":"^9.18.0","prettier":"^3.4.2","ts-node":"^10.9.2","typescript":"^5.8.2","zod":"^3.24.2"},"_id":"@anupsahu/gitlab-mcp@1.2.2","gitHead":"e78054606fd8bbd7f30ca5fdc9261fce55f31df9","_nodeVersion":"23.11.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Tx/UfnFipwBEVLOVmwk5Cp24c/gGWVhvmht+8KFYUkTekXiF7Q+DDRveMR5+tYTqRUs+DIvpmdMe2Zw8/2eETQ==","shasum":"681c414b16b846960fba34c024fb1115ef0f4429","tarball":"https://registry.npmjs.org/@anupsahu/gitlab-mcp/-/gitlab-mcp-1.2.2.tgz","fileCount":16,"unpackedSize":332319,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDCftAxEVYTRKZxPH8HuB7bozACz6ugul0wN475Es8v4AiEAsJryNr274zYIGpLfCR+6j7VLqDDISwHrHV/X9GllLaI="}]},"_npmUser":{"name":"anupsahu","email":"anupsahu02@gmail.com"},"directories":{},"maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gitlab-mcp_1.2.2_1755153150110_0.5053189856401394"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-11T08:21:32.866Z","modified":"2025-08-14T06:32:30.572Z","1.0.0":"2025-08-11T08:21:33.254Z","1.0.1":"2025-08-12T06:09:12.875Z","1.1.0":"2025-08-12T09:41:32.176Z","1.2.0":"2025-08-12T10:04:06.907Z","1.2.1":"2025-08-12T10:17:32.655Z","1.2.2":"2025-08-14T06:32:30.301Z"},"bugs":{"url":"https://github.com/anupsahu/gitlab-mcp/issues"},"author":{"name":"Anup Sahu"},"license":"MIT","homepage":"https://github.com/anupsahu/gitlab-mcp#readme","keywords":["mcp","gitlab","oauth","api","server","pkce","authentication","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/anupsahu/gitlab-mcp.git"},"description":"Production-ready MCP server for GitLab API with OAuth 2.0 PKCE authentication","maintainers":[{"name":"anupsahu","email":"anupsahu02@gmail.com"}],"readme":"# GitLab MCP Server\n\n## @anupsahu/gitlab-mcp\n\nMCP (Model Context Protocol) server for GitLab API with OAuth 2.0 PKCE authentication.\n\n## Features\n\n- 🔐 **OAuth 2.0 PKCE Authentication** - Secure authentication with token persistence\n- 🔄 **Automatic Token Refresh** - Seamless token renewal with retry logic\n- 📁 **Complete GitLab API Coverage** - Merge requests, issues, files, commits, and more\n- 💾 **Token Persistence** - Sessions survive server restarts\n- 🛡️ **Production Ready** - Clean codebase with comprehensive error handling\n- 🔧 **Easy Configuration** - Simple setup with environment variables\n\n## Installation\n\n```bash\nnpm install -g @anupsahu/gitlab-mcp\n```\n\n## Quick Start\n\n### 1. OAuth Authentication (Recommended)\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@anupsahu/gitlab-mcp\"],\n      \"env\": {\n        \"USE_OAUTH\": \"true\",\n        \"GITLAB_API_URL\": \"https://gitlab.com/api/v4\"\n      }\n    }\n  }\n}\n```\n\n### 2. Personal Access Token (Alternative)\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@anupsahu/gitlab-mcp\"],\n      \"env\": {\n        \"GITLAB_PERSONAL_ACCESS_TOKEN\": \"your_gitlab_token\",\n        \"GITLAB_API_URL\": \"https://gitlab.com/api/v4\"\n      }\n    }\n  }\n}\n```\n\n## OAuth Authentication\n\nThe server supports OAuth 2.0 PKCE authentication for secure access to GitLab:\n\n1. **Start the server** with `USE_OAUTH=true`\n2. **Authenticate** using the `oauth_login_pkce` tool\n3. **Tokens are automatically saved** and persist across restarts\n4. **Port requirement**: OAuth callback always uses http://localhost:7171 for compatibility with GitLab's official OAuth app. Ensure port 7171 is free during authentication.\n\n5. **Automatic token refresh** handles expiration seamlessly\n\n### OAuth Tools\n\n- `oauth_login_pkce` - Initiate OAuth authentication\n- `oauth_status` - Check authentication status\n- `oauth_logout` - Logout and clear tokens\n\n## Configuration\n\n### Environment Variables\n\n| Variable                        | Description                                  | Default                     |\n| ------------------------------- | -------------------------------------------- | --------------------------- |\n| `USE_OAUTH`                     | Enable OAuth 2.0 authentication              | `false`                     |\n| `GITLAB_API_URL`                | GitLab API URL                               | `https://gitlab.com/api/v4` |\n| `GITLAB_PERSONAL_ACCESS_TOKEN`  | Personal access token (if not using OAuth)   | -                           |\n| `GITLAB_PROJECT_ID`             | Default project ID                           | -                           |\n| `GITLAB_ALLOWED_PROJECT_IDS`    | Comma-separated list of allowed project IDs  | -                           |\n| `GITLAB_READ_ONLY_MODE`         | Enable read-only mode                        | `false`                     |\n| `OAUTH_REDIRECT_PORT_PREFERRED` | Preferred localhost callback port            | `7171`                      |\n| `OAUTH_REDIRECT_PORT_RANGE`     | Fallback range for callback port (inclusive) | `7171-7199`                 |\n\n## Available Tools\n\n### Repository Operations\n\n- `search_repositories` - Search for repositories\n- `get_repository_tree` - Get repository file tree\n- `get_file_contents` - Read file contents\n- `create_or_update_file` - Create or update files\n- `push_files` - Push multiple files\n\n### Merge Request Operations\n\n- `get_merge_request` - Get merge request details\n- `get_merge_request_diffs` - Get merge request changes\n- `create_merge_request` - Create new merge request\n- `update_merge_request` - Update merge request\n- `merge_merge_request` - Merge a merge request\n\n### Issue Operations\n\n- `create_issue` - Create new issue\n- `get_issue` - Get issue details\n- `update_issue` - Update issue\n- `list_issues` - List issues\n\n### Commit Operations\n\n- `list_commits` - List repository commits\n- `get_commit` - Get commit details\n- `get_commit_diff` - Get commit changes\n\n### Branch Operations\n\n- `create_branch` - Create new branch\n- `fork_repository` - Fork repository\n\n## Token Storage\n\nOAuth tokens are automatically saved to:\n\n- **Path**: `~/.config/gitlab-mcp/oauth-config.json`\n- **Format**: JSON configuration file\n- **Persistence**: Tokens survive server restarts\n- **Security**: Automatic token refresh and expiration handling\n\n## Examples\n\n### Authenticate with OAuth\n\n```javascript\n// Use the oauth_login_pkce tool\n{\n  \"sessionId\": \"my-session\" // optional\n}\n```\n\n### Get Merge Request Details\n\n```javascript\n{\n  \"project_id\": \"12345\",\n  \"merge_request_iid\": \"123\",\n  \"sessionId\": \"my-session\"\n}\n```\n\n### Create Issue\n\n```javascript\n{\n  \"project_id\": \"12345\",\n  \"title\": \"Bug Report\",\n  \"description\": \"Description of the issue\",\n  \"sessionId\": \"my-session\"\n}\n```\n\n## Development\n\n```bash\n# Clone repository\ngit clone https://gitlab.com/anupsahu/gitlab-mcp.git\ncd gitlab-mcp\n\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Run with OAuth\nUSE_OAUTH=true GITLAB_API_URL=https://gitlab.com/api/v4 node build/index.js\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Submit a merge request\n\n## Support\n\nFor issues and questions:\n\n- Create an issue in the [GitLab repository](https://gitlab.com/anupsahu/gitlab-mcp)\n- Check existing documentation and examples\n\n---\n\n**Built with ❤️ for the MCP ecosystem**\n","readmeFilename":"README.md"}