{"_id":"@bakhshb/gitlab-mcp-openapi","_rev":"4-a7217cd3baf18564002179ca0362503a","name":"@bakhshb/gitlab-mcp-openapi","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.0":{"name":"@bakhshb/gitlab-mcp-openapi","version":"1.0.0","keywords":["mcp","model-context-protocol","gitlab","devops","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/gitlab-mcp-openapi@1.0.0","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"gitlab-mcp-openapi":"build/index.js"},"dist":{"shasum":"63e99bbc2fe5a0318d669c046dc49039618aa7c0","tarball":"https://registry.npmjs.org/@bakhshb/gitlab-mcp-openapi/-/gitlab-mcp-openapi-1.0.0.tgz","fileCount":56,"integrity":"sha512-gLxE7Wi8qcPrSfPtcnG0/EijIXsr+Gqwvg4pVcoAHFan7ZXdgVDv/cwd6+L7rFXf8EM063iDcIc2Zw8YYPdW9g==","signatures":[{"sig":"MEUCIQDJHtgIZ6R8bOcLZ0dNkGZW4RS1wEpY3OataBIH6y+ShAIgXB+UAcPbrnoqs0H+yTomv5O7caX45OoUwhCEntrUfIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1903243},"main":"build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"604f7fae7dc0ec4b9dc4042855c262975f9248f9","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for GitLab","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp-openapi_1.0.0_1774896662332_0.7796067675200284","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bakhshb/gitlab-mcp-openapi","version":"1.1.0","keywords":["mcp","model-context-protocol","gitlab","devops","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/gitlab-mcp-openapi@1.1.0","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"gitlab-mcp-openapi":"build/index.js"},"dist":{"shasum":"0fada798fbb55659cff9c8d8f7d24260c473072e","tarball":"https://registry.npmjs.org/@bakhshb/gitlab-mcp-openapi/-/gitlab-mcp-openapi-1.1.0.tgz","fileCount":61,"integrity":"sha512-tW9Wi5hoI27K3mevAGmBGyyCquOHmMu7TCzoEMM6aR3AysikMe4BIPfSi6U3D5tNKMZtYGYap0yge4U/BxwspQ==","signatures":[{"sig":"MEQCIFKk0cer25Zjxdj3ZRGPhz/RQQ0OrHVlFyXn6qSu/JUNAiAqmIuLfakNcZccD2t6jbUpbWMXLlmj6FXtop13rp3kSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1912613},"main":"build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ee74c1446815f5e1d019f953da34ebe0f484ec97","scripts":{"test":"vitest","build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js","test:run":"vitest run"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for GitLab","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp-openapi_1.1.0_1775108743124_0.8200644915478499","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@bakhshb/gitlab-mcp-openapi","version":"1.1.1","keywords":["mcp","model-context-protocol","gitlab","devops","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/gitlab-mcp-openapi@1.1.1","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"gitlab-mcp-openapi":"build/index.js"},"dist":{"shasum":"bdacd3cb4312d6056099797d5c5683defd3ed605","tarball":"https://registry.npmjs.org/@bakhshb/gitlab-mcp-openapi/-/gitlab-mcp-openapi-1.1.1.tgz","fileCount":61,"integrity":"sha512-ZkNoV0mNC6CFRvP9Ix5o/i9AUCMvySAcMuTJctNZ9D5r+ZTtChf6raHpYFo6MsM4bgRQJQ6g2vNflFP9HP0SmQ==","signatures":[{"sig":"MEQCIB6TXfIbyKNRmo2W6rd9Aj1Y10EI/KBmo5aBit3mkjeSAiBFcYq6chlrPaQOmrsRTYL7kT1PcjZw3nGqOBviD6+cXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1917795},"main":"build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"db6e4a1636536014ac3b1a2d7fed3fdcbc3e81b4","scripts":{"test":"vitest","build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js","test:run":"vitest run"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for GitLab","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/gitlab-mcp-openapi_1.1.1_1776456158018_0.3202012672828589","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@bakhshb/gitlab-mcp-openapi","version":"1.1.2","description":"2-tool OpenAPI-driven MCP server for GitLab","main":"build/index.js","bin":{"gitlab-mcp-openapi":"build/index.js"},"scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js","test":"vitest","test:run":"vitest run"},"keywords":["mcp","model-context-protocol","gitlab","devops","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","axios":"^1.7.0","zod":"^3.23.0","js-yaml":"^4.1.0"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^22.0.0","typescript":"^5.5.0","vitest":"^2.0.0"},"engines":{"node":">=18.0.0"},"type":"module","_id":"@bakhshb/gitlab-mcp-openapi@1.1.2","gitHead":"c72b256afe0185a223447c530ed3a622251e0538","types":"./build/index.d.ts","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-eTsiXtMZIRgZrlEjYOBvWFFSYPrNH++DtNI5VaKq6PcSj8v3o+5PkPD9sMijOqpCa93bQ5uhhDudJfDvjDl+MQ==","shasum":"678a4b94ff1b7ea0ff9de2f06f946f319c74cc36","tarball":"https://registry.npmjs.org/@bakhshb/gitlab-mcp-openapi/-/gitlab-mcp-openapi-1.1.2.tgz","fileCount":61,"unpackedSize":1919895,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEqxWhI6LJXHwsn1Kj+jgTFmnC+meQnPk+ezXe0OcPD+AiEAkdRakEwFPgOipY+zohHtePFFXtAlKJPdIVyenn8lZkc="}]},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"directories":{},"maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gitlab-mcp-openapi_1.1.2_1777287096897_0.3216028446862784"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-30T18:51:02.242Z","modified":"2026-04-27T10:51:37.166Z","1.0.0":"2026-03-30T18:51:02.569Z","1.1.0":"2026-04-02T05:45:43.251Z","1.1.1":"2026-04-17T20:02:38.152Z","1.1.2":"2026-04-27T10:51:37.069Z"},"author":{"name":"Baraa Bakhsh"},"license":"MIT","keywords":["mcp","model-context-protocol","gitlab","devops","mcp-server"],"description":"2-tool OpenAPI-driven MCP server for GitLab","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"readme":"# GitLab MCP OpenAPI\n\n![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)\n\n> 2-tool OpenAPI-driven MCP server for GitLab — 95% token savings vs traditional explicit-tool implementations.\n\n---\n\n## Overview\n\nThis MCP server provides a **generic GitLab API executor** using the OpenAPI pattern. Instead of 44+ individual tools (like structured-world), it exposes just **2 powerful tools**:\n\n- **`gitlab-api`** — Execute any GitLab REST API operation\n- **`gitlab-api-schema`** — Discover available API paths and parameters\n\n### Why This Pattern?\n\n| Approach | Tools | Token Usage |\n|----------|---------|--------------|\n| Traditional (structured-world) | 44 individual tools | ~15,000-20,000 |\n| **This MCP** | **2 tools** | **~1,000-1,500** ✅ |\n\n**Result:** 95% token savings while maintaining full GitLab API coverage.\n\n---\n\n## Installation\n\n### Global Install (for OpenClaw)\n\n```bash\nnpm install -g @bakhshb/gitlab-mcp-openapi\n```\n\n### Local Install (for development)\n\n```bash\ncd gitlab-mcp-openapi\nnpm install\nnpm run build\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `GITLAB_TOKEN` | No* | - | GitLab Personal Access Token (required for static mode) |\n| `GITLAB_PERSONAL_ACCESS_TOKEN` | No | - | Alternative to GITLAB_TOKEN |\n| `GITLAB_API_URL` | No | `https://gitlab.com` | GitLab instance URL |\n| `GITLAB_TIMEOUT` | No | `30000` | Request timeout in milliseconds |\n| `OAUTH_ENABLED` | No | `false` | Enable OAuth token mode |\n| `GITLAB_OAUTH_TOKEN` | No | - | OAuth access token (used when OAUTH_ENABLED=true) |\n\n*Either `GITLAB_TOKEN`, `GITLAB_PERSONAL_ACCESS_TOKEN`, or `GITLAB_OAUTH_TOKEN` (with OAUTH_ENABLED=true) is required.\n\n### Creating a Personal Access Token\n\n1. Go to your GitLab instance → **Profile → Access Tokens**\n2. Click **\"Add new token\"**\n3. Name it something like \"MCP GitLab\" or \"OpenClaw\"\n4. Select scopes:\n   - ✅ `api` — Full API access\n   - ✅ `read_user` — User profile access\n5. Copy the token\n6. Set environment variable:\n   ```bash\n   export GITLAB_TOKEN=glpat-your-token-here\n   ```\n\n### OAuth Mode\n\nFor OAuth-based authentication (token provided by MCP runtime):\n\n```bash\nexport OAUTH_ENABLED=true\nexport GITLAB_OAUTH_TOKEN=your-oauth-token\ngitlab-mcp-openapi\n```\n\nIn OpenClaw configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab-mcp-openapi\": {\n      \"command\": \"gitlab-mcp-openapi\",\n      \"env\": {\n        \"GITLAB_API_URL\": \"https://gitlab.com\",\n        \"OAUTH_ENABLED\": \"true\",\n        \"GITLAB_OAUTH_TOKEN\": \"${GITLAB_OAUTH_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\n### Self-Hosted GitLab\n\nFor self-hosted GitLab (like GitLab at your organization):\n\n```bash\nexport GITLAB_API_URL=https://gitlab.yourcompany.com\nexport GITLAB_TOKEN=glpat-your-token-here\ngitlab-mcp-openapi\n```\n\n---\n\n## OpenClaw Integration\n\n### Add MCP Server to OpenClaw\n\nEdit `~/.openclaw/openclaw.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab-mcp-openapi\": {\n      \"command\": \"gitlab-mcp-openapi\",\n      \"env\": {\n        \"GITLAB_API_URL\": \"https://gitlab.com\",\n        \"GITLAB_TOKEN\": \"${GITLAB_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\nFor self-hosted GitLab:\n\n```json\n{\n  \"mcpServers\": {\n    \"gitlab-mcp-openapi\": {\n      \"command\": \"gitlab-mcp-openapi\",\n      \"env\": {\n        \"GITLAB_API_URL\": \"https://gitlab.yourcompany.com\",\n        \"GITLAB_TOKEN\": \"${GITLAB_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\n### Restart Gateway\n\n```bash\nopenclaw gateway restart\n```\n\n---\n\n## Tools & Services\n\nThis MCP covers **44 tools** across all major GitLab API areas:\n\n### Projects & Namespaces (4 tools)\n\n- `list_projects` — List all projects\n- `get_project` — Get project details\n- `search_projects` — Search projects by name\n- `create_project` — Create a new project\n- `browse_namespaces` — List namespaces\n- `manage_namespace` — Create/update/delete groups\n\n### Merge Requests (5 tools)\n\n- `list_merge_requests` — List MRs in a project\n- `get_merge_request` — Get MR details\n- `create_merge_request` — Create a new MR\n- `approve_merge_request` — Approve an MR\n- `merge_merge_request` — Merge an MR\n- `get_merge_request_approval_state` — Get approval status\n- `browse_mr_discussions` — List MR discussions\n- `manage_mr_discussion` — Add/resolve comments\n- `manage_draft_notes` — Draft notes for MRs\n\n### Pipelines & CI/CD (3 tools)\n\n- `list_pipelines` — List project pipelines\n- `get_pipeline` — Get pipeline details\n- `list_pipeline_jobs` — List jobs in a pipeline\n- `get_pipeline_job` — Get job details\n- `create_pipeline` — Trigger a new pipeline\n- `cancel_pipeline` — Cancel a running pipeline\n- `retry_pipeline` — Retry failed pipeline\n- `cancel_pipeline_job` — Cancel a specific job\n- `retry_pipeline_job` — Retry failed job\n\n### Issues & Notes (6 tools)\n\n- `list_issues` — List issues\n- `get_issue` — Get issue details\n- `create_issue` — Create a new issue\n- `update_issue` — Edit an issue\n- `delete_issue` — Delete an issue\n- `my_issues` — List your assigned issues\n- `list_issue_notes` — List issue comments\n- `get_issue_note` — Get specific comment\n- `create_issue_note` — Add a comment\n- `update_issue_note` — Edit a comment\n- `delete_issue_note` — Delete a comment\n\n### Repository (4 tools)\n\n- `create_repository` — Create a new project\n- `fork_repository` — Fork an existing project\n- `get_file_contents` — Read a file from repo\n- `get_repository_tree` — List files in a directory\n- `list_commits` — List commit history\n- `get_commit` — Get specific commit details\n- `create_branch` — Create a new branch\n- `delete_branch` — Delete a branch\n\n### Files (2 tools)\n\n- `browse_files` — List repo files (tree)\n- `manage_files` — Create/update/delete files\n\n### Releases (2 tools)\n\n- `list_releases` — List project releases\n- `get_release` — Get release details\n- `create_release` — Create a release\n- `update_release` — Update a release\n- `delete_release` — Delete a release\n- `download_release_asset` — Download release binaries\n\n### Wiki (2 tools)\n\n- `browse_wiki` — List wiki pages\n- `manage_wiki` — Create/update/delete wiki pages\n\n### Milestones (2 tools)\n\n- `browse_milestones` — List project milestones\n- `manage_milestone` — Create/update/delete milestones\n\n### Labels (2 tools)\n\n- `browse_labels` — List project labels\n- `manage_label` — Create/update/delete labels\n\n### Variables (2 tools)\n\n- `browse_variables` — List CI/CD variables\n- `manage_variable` — Create/update/delete variables\n\n### Webhooks (2 tools)\n\n- `browse_webhooks` — List project webhooks\n- `manage_webhook` — Create/update/delete/test webhooks\n\n### Integrations (2 tools)\n\n- `browse_integrations` — List project integrations\n- `manage_integration` — Enable/disable/integrations\n\n### Snippets (2 tools)\n\n- `browse_snippets` — List code snippets\n- `manage_snippet` — Create/update/delete snippets\n\n### Work Items (2 tools)\n\n- `browse_work_items` — Search epics/tasks\n- `manage_work_item` — Create/update/delete work items\n\n### Members (2 tools)\n\n- `browse_members` — List project members\n- `manage_member` — Add/update/remove members\n\n### Search (1 tool)\n\n- `browse_search` — Global search across GitLab\n\n### Events (1 tool)\n\n- `browse_events` — User/project event history\n\n### Todos (2 tools)\n\n- `browse_todos` — List todos\n- `manage_todos` — Mark done/restore\n\n### Commits (1 tool)\n\n- `browse_commits` — List/get commits, diffs\n\n---\n\n## Usage Examples\n\n### List Projects\n\n```typescript\n{\n  path: \"/api/v4/projects\",\n  queryParams: { per_page: 20, membership: true }\n}\n```\n\n### Get Specific Project\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}\",\n  pathParams: { id: 15 }\n}\n```\n\n### Create Project (POST)\n\n```typescript\n{\n  path: \"/api/v4/projects\",\n  method: \"POST\",\n  body: {\n    name: \"my-new-project\",\n    namespace_id: 1,\n    visibility: \"private\",\n    description: \"Created via MCP\"\n  }\n}\n```\n\n### List Merge Requests\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/merge_requests\",\n  pathParams: { id: 15 },\n  queryParams: { state: \"opened\", per_page: 10 }\n}\n```\n\n### Approve Merge Request\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/merge_requests/{merge_request_iid}/approve\",\n  method: \"POST\",\n  pathParams: { id: 15, merge_request_iid: 42 }\n}\n```\n\n### Create Pipeline\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/pipeline\",\n  method: \"POST\",\n  pathParams: { id: 15 },\n  body: { ref: \"main\" }\n}\n```\n\n### List Pipelines\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/pipelines\",\n  pathParams: { id: 15 },\n  queryParams: { per_page: 20 }\n}\n```\n\n### Create Issue\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/issues\",\n  method: \"POST\",\n  pathParams: { id: 15 },\n  body: {\n    title: \"Found a bug\",\n    description: \"Detailed bug report...\",\n    labels: [\"bug\", \"critical\"]\n  }\n}\n```\n\n### List Issues\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/issues\",\n  pathParams: { id: 15 },\n  queryParams: { state: \"opened\", per_page: 50 }\n}\n```\n\n### List Releases\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/releases\",\n  pathParams: { id: 15 }\n}\n```\n\n### Get File Contents\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/repository/files/{path}/raw\",\n  pathParams: { id: 15, path: \"README.md\" },\n  queryParams: { ref: \"main\" }\n}\n```\n\n### Create Branch\n\n```typescript\n{\n  path: \"/api/v4/projects/{id}/repository/branches\",\n  method: \"POST\",\n  pathParams: { id: 15 },\n  body: {\n    branch: \"feature/new-feature\",\n    ref: \"main\"\n  }\n}\n```\n\n---\n\n## Architecture\n\n### Spec-Based Design\n\n- **Dynamic OpenAPI spec** — Loads filtered GitLab OpenAPI spec (143 paths, 333 KB)\n- **No hardcoded endpoints** — Any GitLab REST API endpoint is accessible\n- **Auto method detection** — HTTP method (GET/POST/PUT/DELETE/PATCH) detected from spec\n\n### 2-Tool Pattern\n\n```\ngitlab-api (generic executor)\n├── path + method + params → GitLab REST API\n└── gitlab-api-schema (schema discovery)\n    └── tag/path → OpenAPI introspection\n```\n\n---\n\n## Development\n\n### Install Dependencies\n\n```bash\nnpm install\n```\n\n### Build\n\n```bash\nnpm run build\n```\n\n### Run Locally\n\n```bash\nnpm run start\n```\n\n### Test\n\nRun tests with watch mode:\n```bash\nnpm test\n```\n\nRun tests once:\n```bash\nnpm run test:run\n```\n\n### Environment Setup\n\n```bash\ncp .env.example .env\n# Edit .env with your GitLab URL and token\n```\n\n---\n\n## Inspiration\n\nThis MCP server follows the same 2-tool OpenAPI pattern as:\n\n- [@bakhshb/unifi-mcp-openapi](https://github.com/bakhshb/unifi-mcp-openapi) — UniFi Network API\n- [@bakhshb/proxmox-mcp-openapi](https://github.com/bakhshb/proxmox-mcp-openapi) — Proxmox VE API\n- [@limehawk/dokploy-mcp](https://github.com/limehawk/dokploy-mcp/tree/feature/openapi-sync) — Dokploy API (original implementation)\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE) file.\n\n---\n\n## Links\n\n- **npm:** https://www.npmjs.com/package/@bakhshb/gitlab-mcp-openapi\n- **GitHub:** https://github.com/bakhshb/gitlab-mcp-openapi\n- **GitLab API Docs:** https://docs.gitlab.com/ee/api/rest/\n- **OpenClaw Docs:** https://docs.openclaw.ai\n\n---\n\n## Support\n\nFor issues, questions, or contributions:\n\n- Open an issue on GitHub\n- Join the [OpenClaw Discord](https://discord.com/invite/clawd)\n","readmeFilename":"README.md"}