@structured-world/gitlab-mcp 6.5.0 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +30 -11
  2. package/dist/src/config.d.ts +1 -0
  3. package/dist/src/config.js +2 -1
  4. package/dist/src/config.js.map +1 -1
  5. package/dist/src/entities/snippets/index.d.ts +7 -0
  6. package/dist/src/entities/snippets/index.js +31 -0
  7. package/dist/src/entities/snippets/index.js.map +1 -0
  8. package/dist/src/entities/snippets/registry.d.ts +5 -0
  9. package/dist/src/entities/snippets/registry.js +186 -0
  10. package/dist/src/entities/snippets/registry.js.map +1 -0
  11. package/dist/src/entities/snippets/schema-readonly.d.ts +26 -0
  12. package/dist/src/entities/snippets/schema-readonly.js +51 -0
  13. package/dist/src/entities/snippets/schema-readonly.js.map +1 -0
  14. package/dist/src/entities/snippets/schema.d.ts +60 -0
  15. package/dist/src/entities/snippets/schema.js +123 -0
  16. package/dist/src/entities/snippets/schema.js.map +1 -0
  17. package/dist/src/entities/variables/registry.js +61 -80
  18. package/dist/src/entities/variables/registry.js.map +1 -1
  19. package/dist/src/entities/variables/schema-readonly.d.ts +9 -9
  20. package/dist/src/entities/variables/schema-readonly.js +14 -11
  21. package/dist/src/entities/variables/schema-readonly.js.map +1 -1
  22. package/dist/src/entities/variables/schema.d.ts +8 -26
  23. package/dist/src/entities/variables/schema.js +20 -69
  24. package/dist/src/entities/variables/schema.js.map +1 -1
  25. package/dist/src/registry-manager.js +10 -0
  26. package/dist/src/registry-manager.js.map +1 -1
  27. package/dist/src/server.js +4 -2
  28. package/dist/src/server.js.map +1 -1
  29. package/dist/structured-world-gitlab-mcp-6.7.0.tgz +0 -0
  30. package/dist/tsconfig.build.tsbuildinfo +1 -1
  31. package/package.json +1 -1
  32. package/dist/structured-world-gitlab-mcp-6.5.0.tgz +0 -0
package/README.md CHANGED
@@ -54,6 +54,7 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
54
54
  "USE_PIPELINE": "false", // use pipeline api?
55
55
  "USE_VARIABLES": "true", // use variables api?
56
56
  "USE_WEBHOOKS": "true", // use webhooks api?
57
+ "USE_SNIPPETS": "true", // use snippets api?
57
58
  "SKIP_TLS_VERIFY": "false" // skip SSL cert verification (dev only)
58
59
  }
59
60
  }
@@ -123,6 +124,8 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
123
124
  "USE_VARIABLES",
124
125
  "-e",
125
126
  "USE_WEBHOOKS",
127
+ "-e",
128
+ "USE_SNIPPETS",
126
129
  "ghcr.io/structured-world/gitlab-mcp:latest"
127
130
  ],
128
131
  "env": {
@@ -133,7 +136,8 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
133
136
  "USE_MILESTONE": "true",
134
137
  "USE_PIPELINE": "true",
135
138
  "USE_VARIABLES": "true",
136
- "USE_WEBHOOKS": "true"
139
+ "USE_WEBHOOKS": "true",
140
+ "USE_SNIPPETS": "true"
137
141
  }
138
142
  }
139
143
  }
@@ -467,9 +471,10 @@ When OAuth is enabled, the following endpoints are available:
467
471
  - `USE_LABELS`: When set to 'true', enables the label-related tools (list_labels, get_label, create_label, update_label, delete_label). By default, label features are enabled.
468
472
  - `USE_MRS`: When set to 'true', enables the merge request-related tools (browse_merge_requests, browse_mr_discussions, manage_merge_request, manage_mr_discussion, manage_draft_notes). These 5 CQRS tools consolidate all MR operations. By default, merge request features are enabled.
469
473
  - `USE_FILES`: When set to 'true', enables the file-related tools (browse_files, manage_files). These 2 CQRS tools consolidate all file operations. By default, file operation features are enabled.
470
- - `USE_VARIABLES`: When set to 'true', enables the CI/CD variables-related tools (list_variables, get_variable, create_variable, update_variable, delete_variable). Supports both project-level and group-level variables. By default, variables features are enabled.
474
+ - `USE_VARIABLES`: When set to 'true', enables the CI/CD variables-related tools (browse_variables, manage_variable). These 2 CQRS tools consolidate all variable operations. Supports both project-level and group-level variables. By default, variables features are enabled.
471
475
  - `USE_WORKITEMS`: When set to 'true', enables the work items-related tools (browse_work_items, manage_work_item). These 2 CQRS tools consolidate all work item operations using GitLab GraphQL API. By default, work items features are enabled.
472
476
  - `USE_WEBHOOKS`: When set to 'true', enables the webhooks-related tools (list_webhooks, manage_webhook). These 2 tools provide full CRUD operations plus testing for both project and group webhooks. Group webhooks require GitLab Premium tier. By default, webhooks features are enabled.
477
+ - `USE_SNIPPETS`: When set to 'true', enables the snippets-related tools (list_snippets, manage_snippet). These 2 CQRS tools provide full listing and CRUD operations for both personal and project snippets. Supports multi-file snippets, visibility control, and flexible scoping. By default, snippets features are enabled.
473
478
  - `GITLAB_AUTH_COOKIE_PATH`: Path to an authentication cookie file for GitLab instances that require cookie-based authentication. When provided, the cookie will be included in all GitLab API requests.
474
479
  - `SKIP_TLS_VERIFY`: When set to 'true', skips TLS certificate verification for all GitLab API requests (both REST and GraphQL). **WARNING**: This bypasses SSL certificate validation and should only be used for testing with self-signed certificates or trusted internal GitLab instances. Never use this in production environments.
475
480
  - `SSL_CERT_PATH`: Path to PEM certificate file for direct HTTPS/TLS termination. Requires `SSL_KEY_PATH` to also be set.
@@ -538,11 +543,11 @@ export GITLAB_TOOL_MANAGE_WORK_ITEM="Create and manage tickets for our sprint pl
538
543
  - **Case Sensitivity**: Tool names in environment variables must be UPPERCASE (e.g., `LIST_PROJECTS` not `list_projects`)
539
544
  - **Invalid Names**: Invalid tool names in environment variables are ignored with a warning in debug logs
540
545
  - **Content Guidelines**: Descriptions can be any valid string but should be kept concise for better UX
541
- - **Scope**: Works with all 58 available tools across all entities (Core, Work Items, Merge Requests, Files, etc.)
546
+ - **Scope**: Works with all 59 available tools across all entities (Core, Work Items, Merge Requests, Files, Snippets, etc.)
542
547
 
543
548
  ## Tools 🛠️
544
549
 
545
- **60 Tools Available** - Organized by entity and functionality below.
550
+ **59 Tools Available** - Organized by entity and functionality below.
546
551
 
547
552
  ### Key Features:
548
553
  - **CQRS Pattern** - Consolidated action-based tools: `browse_*` for reads, `manage_*` for writes
@@ -614,14 +619,14 @@ Requires USE_FILES=true environment variable (enabled by default). Uses CQRS pat
614
619
  - 📖 **`browse_files`**: BROWSE repository files. Actions: "tree" lists files/folders with pagination, "content" reads file contents. Use for exploring project structure or reading source code.
615
620
  - ✏️ **`manage_files`**: MANAGE repository files. Actions: "single" creates/updates one file, "batch" commits multiple files atomically, "upload" adds markdown attachments.
616
621
 
617
- ### CI/CD Variables (5 tools)
618
- Requires USE_VARIABLES=true environment variable (enabled by default). Supports both project-level and group-level variables.
622
+ ### CI/CD Variables (2 CQRS tools)
623
+ Requires USE_VARIABLES=true environment variable (enabled by default). Uses CQRS pattern with action-based tools. Supports both project-level and group-level variables.
624
+
625
+ #### Variable Browsing (Query)
626
+ - 📖 **`browse_variables`**: BROWSE CI/CD variables. Actions: "list" shows all variables in project/group with pagination, "get" retrieves single variable details by key with optional environment scope filter.
619
627
 
620
- - 📖 **`list_variables`**: List all CI/CD variables for a project or group with their configuration and security settings
621
- - 📖 **`get_variable`**: Get a specific CI/CD variable by key from a project or group, optionally filtered by environment scope
622
- - ✏️ **`create_variable`**: Create a new CI/CD variable for automated deployments and pipeline configuration in a project or group
623
- - ✏️ **`update_variable`**: Update an existing CI/CD variable's value, security settings, or configuration in a project or group
624
- - ✏️ **`delete_variable`**: Remove a CI/CD variable from a project or group
628
+ #### Variable Management (Command)
629
+ - ✏️ **`manage_variable`**: MANAGE CI/CD variables. Actions: "create" adds new variable (requires key and value), "update" modifies existing variable, "delete" removes variable permanently. Supports environment scoping and protection settings.
625
630
 
626
631
  ### Work Items (2 CQRS tools)
627
632
  Modern GraphQL API for issues, epics, tasks, and more. Requires USE_WORKITEMS=true (enabled by default). Uses CQRS pattern with action-based tools.
@@ -696,6 +701,20 @@ Webhooks can be configured to trigger on:
696
701
  - **Subgroup events** - Subgroup created/removed (group webhooks only)
697
702
  - **Project events** - Project created/removed (group webhooks only)
698
703
 
704
+ ### Snippets Management (2 tools)
705
+ Requires USE_SNIPPETS=true environment variable (enabled by default). Uses CQRS pattern with action-based tools. Supports personal, project, and public snippets with multi-file support.
706
+
707
+ #### Snippet Browsing (Query)
708
+ - 📖 **`list_snippets`**: LIST GitLab code snippets with flexible scoping. Use scope='personal' for current user's snippets, scope='project' for project-specific snippets (requires projectId), or scope='public' to discover all public snippets. Filter by visibility level (private/internal/public) and creation date. Supports pagination.
709
+
710
+ #### Snippet Management (Command)
711
+ - ✏️ **`manage_snippet`**: MANAGE GitLab snippets with full CRUD operations via action parameter. Actions: "read" retrieves snippet metadata or raw content, "create" creates new snippet with multiple files and visibility control, "update" modifies title/description/visibility/files (supports file create/update/delete/move actions), "delete" permanently removes snippet. Supports both personal and project snippets.
712
+
713
+ #### Multi-file Snippet Support
714
+ Snippets can contain multiple files with individual operations:
715
+ - **Create action** - Files array with `file_path` and `content` for each file
716
+ - **Update action** - Files array with `action` field: "create" (add new), "update" (modify existing), "delete" (remove), "move" (rename with `previous_path`)
717
+
699
718
  ## CLI Tools 🔧
700
719
 
701
720
  ### list-tools - Browse Available Tools
@@ -11,6 +11,7 @@ export declare const USE_LABELS: boolean;
11
11
  export declare const USE_MRS: boolean;
12
12
  export declare const USE_FILES: boolean;
13
13
  export declare const USE_VARIABLES: boolean;
14
+ export declare const USE_SNIPPETS: boolean;
14
15
  export declare const USE_WEBHOOKS: boolean;
15
16
  export declare const HOST: string;
16
17
  export declare const PORT: string | number;
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.packageVersion = exports.packageName = exports.GITLAB_ALLOWED_PROJECT_IDS = exports.GITLAB_PROJECT_ID = exports.GITLAB_API_URL = exports.GITLAB_BASE_URL = exports.GITLAB_CA_CERT_PATH = exports.NODE_TLS_REJECT_UNAUTHORIZED = exports.HTTPS_PROXY = exports.HTTP_PROXY = exports.SKIP_TLS_VERIFY = exports.RATE_LIMIT_SESSION_MAX_REQUESTS = exports.RATE_LIMIT_SESSION_WINDOW_MS = exports.RATE_LIMIT_SESSION_ENABLED = exports.RATE_LIMIT_IP_MAX_REQUESTS = exports.RATE_LIMIT_IP_WINDOW_MS = exports.RATE_LIMIT_IP_ENABLED = exports.API_TIMEOUT_MS = exports.TRUST_PROXY = exports.SSL_PASSPHRASE = exports.SSL_CA_PATH = exports.SSL_KEY_PATH = exports.SSL_CERT_PATH = exports.PORT = exports.HOST = exports.USE_WEBHOOKS = exports.USE_VARIABLES = exports.USE_FILES = exports.USE_MRS = exports.USE_LABELS = exports.USE_WORKITEMS = exports.USE_PIPELINE = exports.USE_MILESTONE = exports.USE_GITLAB_WIKI = exports.GITLAB_DENIED_TOOLS_REGEX = exports.GITLAB_READ_ONLY_MODE = exports.IS_OLD = exports.GITLAB_AUTH_COOKIE_PATH = exports.GITLAB_TOKEN = void 0;
36
+ exports.packageVersion = exports.packageName = exports.GITLAB_ALLOWED_PROJECT_IDS = exports.GITLAB_PROJECT_ID = exports.GITLAB_API_URL = exports.GITLAB_BASE_URL = exports.GITLAB_CA_CERT_PATH = exports.NODE_TLS_REJECT_UNAUTHORIZED = exports.HTTPS_PROXY = exports.HTTP_PROXY = exports.SKIP_TLS_VERIFY = exports.RATE_LIMIT_SESSION_MAX_REQUESTS = exports.RATE_LIMIT_SESSION_WINDOW_MS = exports.RATE_LIMIT_SESSION_ENABLED = exports.RATE_LIMIT_IP_MAX_REQUESTS = exports.RATE_LIMIT_IP_WINDOW_MS = exports.RATE_LIMIT_IP_ENABLED = exports.API_TIMEOUT_MS = exports.TRUST_PROXY = exports.SSL_PASSPHRASE = exports.SSL_CA_PATH = exports.SSL_KEY_PATH = exports.SSL_CERT_PATH = exports.PORT = exports.HOST = exports.USE_WEBHOOKS = exports.USE_SNIPPETS = exports.USE_VARIABLES = exports.USE_FILES = exports.USE_MRS = exports.USE_LABELS = exports.USE_WORKITEMS = exports.USE_PIPELINE = exports.USE_MILESTONE = exports.USE_GITLAB_WIKI = exports.GITLAB_DENIED_TOOLS_REGEX = exports.GITLAB_READ_ONLY_MODE = exports.IS_OLD = exports.GITLAB_AUTH_COOKIE_PATH = exports.GITLAB_TOKEN = void 0;
37
37
  exports.getEffectiveProjectId = getEffectiveProjectId;
38
38
  exports.getToolDescriptionOverrides = getToolDescriptionOverrides;
39
39
  const path = __importStar(require("path"));
@@ -54,6 +54,7 @@ exports.USE_LABELS = process.env.USE_LABELS !== "false";
54
54
  exports.USE_MRS = process.env.USE_MRS !== "false";
55
55
  exports.USE_FILES = process.env.USE_FILES !== "false";
56
56
  exports.USE_VARIABLES = process.env.USE_VARIABLES !== "false";
57
+ exports.USE_SNIPPETS = process.env.USE_SNIPPETS !== "false";
57
58
  exports.USE_WEBHOOKS = process.env.USE_WEBHOOKS !== "false";
58
59
  exports.HOST = process.env.HOST ?? "0.0.0.0";
59
60
  exports.PORT = process.env.PORT ?? 3002;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "../shared";
2
+ export * from "./schema-readonly";
3
+ export * from "./schema";
4
+ export * from "./registry";
5
+ import type { ToolDefinition } from "../../types";
6
+ export declare const snippetsTools: ToolDefinition[];
7
+ export declare const snippetsReadOnlyTools: string[];
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.snippetsReadOnlyTools = exports.snippetsTools = void 0;
18
+ __exportStar(require("../shared"), exports);
19
+ __exportStar(require("./schema-readonly"), exports);
20
+ __exportStar(require("./schema"), exports);
21
+ __exportStar(require("./registry"), exports);
22
+ const registry_1 = require("./registry");
23
+ const isReadOnly = process.env.GITLAB_READONLY === "true";
24
+ const snippetsToolsFromRegistry = (0, registry_1.getFilteredSnippetsTools)(isReadOnly);
25
+ exports.snippetsTools = snippetsToolsFromRegistry.map((tool) => ({
26
+ name: tool.name,
27
+ description: tool.description,
28
+ inputSchema: tool.inputSchema,
29
+ }));
30
+ exports.snippetsReadOnlyTools = (0, registry_1.getSnippetsReadOnlyToolNames)();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/entities/snippets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,4CAA0B;AAG1B,oDAAkC;AAGlC,2CAAyB;AAGzB,6CAA2B;AAG3B,yCAAoF;AAIpF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;AAG1D,MAAM,yBAAyB,GAAG,IAAA,mCAAwB,EAAC,UAAU,CAAC,CAAC;AAG1D,QAAA,aAAa,GAAqB,yBAAyB,CAAC,GAAG,CAC1E,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;CAC9B,CAAC,CACH,CAAC;AAGW,QAAA,qBAAqB,GAAG,IAAA,uCAA4B,GAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolRegistry, EnhancedToolDefinition } from "../../types";
2
+ export declare const snippetsToolRegistry: ToolRegistry;
3
+ export declare function getSnippetsReadOnlyToolNames(): string[];
4
+ export declare function getSnippetsToolDefinitions(): EnhancedToolDefinition[];
5
+ export declare function getFilteredSnippetsTools(readOnlyMode?: boolean): EnhancedToolDefinition[];
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.snippetsToolRegistry = void 0;
37
+ exports.getSnippetsReadOnlyToolNames = getSnippetsReadOnlyToolNames;
38
+ exports.getSnippetsToolDefinitions = getSnippetsToolDefinitions;
39
+ exports.getFilteredSnippetsTools = getFilteredSnippetsTools;
40
+ const z = __importStar(require("zod"));
41
+ const schema_readonly_1 = require("./schema-readonly");
42
+ const schema_1 = require("./schema");
43
+ const gitlab_api_1 = require("../../utils/gitlab-api");
44
+ const ManageSnippetSchema = z.discriminatedUnion("action", [
45
+ schema_readonly_1.GetSnippetSchema,
46
+ schema_1.CreateSnippetSchema,
47
+ schema_1.UpdateSnippetSchema,
48
+ schema_1.DeleteSnippetSchema,
49
+ ]);
50
+ exports.snippetsToolRegistry = new Map([
51
+ [
52
+ "list_snippets",
53
+ {
54
+ name: "list_snippets",
55
+ description: "List GitLab code snippets with flexible scoping. Use scope='personal' for current user's snippets, scope='project' for project-specific snippets (requires projectId), or scope='public' to discover all public snippets. Filter by visibility level (private/internal/public) and creation date. Snippets are reusable code blocks, configs, or text that support versioning and can be shared.",
56
+ inputSchema: z.toJSONSchema(schema_readonly_1.ListSnippetsSchema),
57
+ handler: async (args) => {
58
+ const options = schema_readonly_1.ListSnippetsSchema.parse(args);
59
+ let path;
60
+ if (options.scope === "personal") {
61
+ path = "snippets";
62
+ }
63
+ else if (options.scope === "public") {
64
+ path = "snippets/public";
65
+ }
66
+ else {
67
+ if (!options.projectId) {
68
+ throw new Error("projectId is required for project scope");
69
+ }
70
+ const encodedProjectId = encodeURIComponent(options.projectId);
71
+ path = `projects/${encodedProjectId}/snippets`;
72
+ }
73
+ return gitlab_api_1.gitlab.get(path, {
74
+ query: (0, gitlab_api_1.toQuery)(options, ["scope", "projectId"]),
75
+ });
76
+ },
77
+ },
78
+ ],
79
+ [
80
+ "manage_snippet",
81
+ {
82
+ name: "manage_snippet",
83
+ description: "Manage GitLab snippets with full CRUD operations via action parameter. action='read': retrieve snippet metadata or raw content. action='create': create new snippet with multiple files, visibility control. action='update': modify title, description, visibility, or files (supports create/update/delete/move file actions). action='delete': permanently remove snippet. Supports both personal and project snippets. Multi-file snippets enable organizing related code in one place.",
84
+ inputSchema: z.toJSONSchema(ManageSnippetSchema),
85
+ handler: async (args) => {
86
+ const options = ManageSnippetSchema.parse(args);
87
+ switch (options.action) {
88
+ case "read": {
89
+ const encodedId = options.id.toString();
90
+ let path;
91
+ if (options.projectId) {
92
+ const encodedProjectId = encodeURIComponent(options.projectId);
93
+ path = `projects/${encodedProjectId}/snippets/${encodedId}`;
94
+ }
95
+ else {
96
+ path = `snippets/${encodedId}`;
97
+ }
98
+ if (options.raw) {
99
+ path = `${path}/raw`;
100
+ }
101
+ return gitlab_api_1.gitlab.get(path);
102
+ }
103
+ case "create": {
104
+ const body = {
105
+ title: options.title,
106
+ visibility: options.visibility,
107
+ files: options.files,
108
+ };
109
+ if (options.description) {
110
+ body.description = options.description;
111
+ }
112
+ let path;
113
+ if (options.projectId) {
114
+ const encodedProjectId = encodeURIComponent(options.projectId);
115
+ path = `projects/${encodedProjectId}/snippets`;
116
+ }
117
+ else {
118
+ path = "snippets";
119
+ }
120
+ return gitlab_api_1.gitlab.post(path, {
121
+ body,
122
+ contentType: "json",
123
+ });
124
+ }
125
+ case "update": {
126
+ const encodedId = options.id.toString();
127
+ const body = {};
128
+ if (options.title !== undefined) {
129
+ body.title = options.title;
130
+ }
131
+ if (options.description !== undefined) {
132
+ body.description = options.description;
133
+ }
134
+ if (options.visibility !== undefined) {
135
+ body.visibility = options.visibility;
136
+ }
137
+ if (options.files !== undefined) {
138
+ body.files = options.files;
139
+ }
140
+ let path;
141
+ if (options.projectId) {
142
+ const encodedProjectId = encodeURIComponent(options.projectId);
143
+ path = `projects/${encodedProjectId}/snippets/${encodedId}`;
144
+ }
145
+ else {
146
+ path = `snippets/${encodedId}`;
147
+ }
148
+ return gitlab_api_1.gitlab.put(path, {
149
+ body,
150
+ contentType: "json",
151
+ });
152
+ }
153
+ case "delete": {
154
+ const encodedId = options.id.toString();
155
+ let path;
156
+ if (options.projectId) {
157
+ const encodedProjectId = encodeURIComponent(options.projectId);
158
+ path = `projects/${encodedProjectId}/snippets/${encodedId}`;
159
+ }
160
+ else {
161
+ path = `snippets/${encodedId}`;
162
+ }
163
+ await gitlab_api_1.gitlab.delete(path);
164
+ return { deleted: true, id: options.id };
165
+ }
166
+ default:
167
+ throw new Error(`Unknown action: ${options.action}`);
168
+ }
169
+ },
170
+ },
171
+ ],
172
+ ]);
173
+ function getSnippetsReadOnlyToolNames() {
174
+ return ["list_snippets"];
175
+ }
176
+ function getSnippetsToolDefinitions() {
177
+ return Array.from(exports.snippetsToolRegistry.values());
178
+ }
179
+ function getFilteredSnippetsTools(readOnlyMode = false) {
180
+ if (readOnlyMode) {
181
+ const readOnlyNames = getSnippetsReadOnlyToolNames();
182
+ return Array.from(exports.snippetsToolRegistry.values()).filter(tool => readOnlyNames.includes(tool.name));
183
+ }
184
+ return getSnippetsToolDefinitions();
185
+ }
186
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/entities/snippets/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export declare const ListSnippetsSchema: z.ZodObject<{
3
+ scope: z.ZodEnum<{
4
+ project: "project";
5
+ public: "public";
6
+ personal: "personal";
7
+ }>;
8
+ projectId: z.ZodOptional<z.ZodString>;
9
+ visibility: z.ZodOptional<z.ZodEnum<{
10
+ private: "private";
11
+ internal: "internal";
12
+ public: "public";
13
+ }>>;
14
+ created_after: z.ZodOptional<z.ZodString>;
15
+ created_before: z.ZodOptional<z.ZodString>;
16
+ page: z.ZodOptional<z.ZodNumber>;
17
+ per_page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
18
+ }, z.core.$strip>;
19
+ export declare const GetSnippetSchema: z.ZodObject<{
20
+ action: z.ZodLiteral<"read">;
21
+ id: z.ZodNumber;
22
+ projectId: z.ZodOptional<z.ZodString>;
23
+ raw: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
24
+ }, z.core.$strip>;
25
+ export type ListSnippetsOptions = z.infer<typeof ListSnippetsSchema>;
26
+ export type GetSnippetOptions = z.infer<typeof GetSnippetSchema>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSnippetSchema = exports.ListSnippetsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const shared_1 = require("../shared");
6
+ const SnippetScopeSchema = zod_1.z.enum(["personal", "project", "public"]);
7
+ exports.ListSnippetsSchema = zod_1.z
8
+ .object({
9
+ scope: SnippetScopeSchema.describe('The scope of snippets to list: "personal" for current user snippets, "project" for project-specific snippets, "public" for all public snippets'),
10
+ projectId: zod_1.z
11
+ .string()
12
+ .optional()
13
+ .describe("Project ID or URL-encoded path (required when scope is 'project'). Example: '123' or 'group/project'"),
14
+ visibility: zod_1.z
15
+ .enum(["private", "internal", "public"])
16
+ .optional()
17
+ .describe("Filter snippets by visibility level. Private: only author can see. Internal: authenticated users can see. Public: anyone can see"),
18
+ created_after: zod_1.z
19
+ .string()
20
+ .optional()
21
+ .describe("Return snippets created after this date (ISO 8601 format). Example: '2024-01-01T00:00:00Z'"),
22
+ created_before: zod_1.z
23
+ .string()
24
+ .optional()
25
+ .describe("Return snippets created before this date (ISO 8601 format). Example: '2024-12-31T23:59:59Z'"),
26
+ })
27
+ .merge(shared_1.PaginationOptionsSchema)
28
+ .refine(data => data.scope !== "project" || data.projectId, {
29
+ message: "projectId is required when scope is 'project'",
30
+ path: ["projectId"],
31
+ });
32
+ const GetSnippetActionSchema = zod_1.z.literal("read");
33
+ exports.GetSnippetSchema = zod_1.z
34
+ .object({
35
+ action: GetSnippetActionSchema.describe("Must be 'read' for retrieving snippet details"),
36
+ id: zod_1.z.number().int().positive().describe("The ID of the snippet to retrieve"),
37
+ projectId: zod_1.z
38
+ .string()
39
+ .optional()
40
+ .describe("Project ID or URL-encoded path (required for project snippets). Leave empty for personal snippets"),
41
+ raw: zod_1.z
42
+ .boolean()
43
+ .optional()
44
+ .default(false)
45
+ .describe("Return raw content of the snippet files instead of metadata. Useful for downloading snippet content directly"),
46
+ })
47
+ .refine(data => !data.projectId || typeof data.projectId === "string", {
48
+ message: "projectId must be a string when provided",
49
+ path: ["projectId"],
50
+ });
51
+ //# sourceMappingURL=schema-readonly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-readonly.js","sourceRoot":"","sources":["../../../../src/entities/snippets/schema-readonly.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,sCAAoD;AAKpD,MAAM,kBAAkB,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGxD,QAAA,kBAAkB,GAAG,OAAC;KAChC,MAAM,CAAC;IACN,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAChC,gJAAgJ,CACjJ;IACD,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sGAAsG,CACvG;IACH,UAAU,EAAE,OAAC;SACV,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SACvC,QAAQ,EAAE;SACV,QAAQ,CACP,kIAAkI,CACnI;IACH,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;IACH,cAAc,EAAE,OAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,6FAA6F,CAC9F;CACJ,CAAC;KACD,KAAK,CAAC,gCAAuB,CAAC;KAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;IAC1D,OAAO,EAAE,+CAA+C;IACxD,IAAI,EAAE,CAAC,WAAW,CAAC;CACpB,CAAC,CAAC;AAGL,MAAM,sBAAsB,GAAG,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAGpC,QAAA,gBAAgB,GAAG,OAAC;KAC9B,MAAM,CAAC;IACN,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACxF,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC7E,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mGAAmG,CACpG;IACH,GAAG,EAAE,OAAC;SACH,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,8GAA8G,CAC/G;CACJ,CAAC;KACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;IACrE,OAAO,EAAE,0CAA0C;IACnD,IAAI,EAAE,CAAC,WAAW,CAAC;CACpB,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ declare const SnippetFileSchema: z.ZodObject<{
3
+ file_path: z.ZodString;
4
+ content: z.ZodOptional<z.ZodString>;
5
+ action: z.ZodOptional<z.ZodEnum<{
6
+ create: "create";
7
+ update: "update";
8
+ delete: "delete";
9
+ move: "move";
10
+ }>>;
11
+ previous_path: z.ZodOptional<z.ZodString>;
12
+ }, z.core.$strip>;
13
+ export declare const CreateSnippetSchema: z.ZodObject<{
14
+ action: z.ZodLiteral<"create">;
15
+ projectId: z.ZodOptional<z.ZodString>;
16
+ title: z.ZodString;
17
+ description: z.ZodOptional<z.ZodString>;
18
+ visibility: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
19
+ private: "private";
20
+ internal: "internal";
21
+ public: "public";
22
+ }>>>>;
23
+ files: z.ZodArray<z.ZodObject<{
24
+ file_path: z.ZodString;
25
+ content: z.ZodString;
26
+ }, z.core.$strip>>;
27
+ }, z.core.$strip>;
28
+ export declare const UpdateSnippetSchema: z.ZodObject<{
29
+ action: z.ZodLiteral<"update">;
30
+ id: z.ZodNumber;
31
+ projectId: z.ZodOptional<z.ZodString>;
32
+ title: z.ZodOptional<z.ZodString>;
33
+ description: z.ZodOptional<z.ZodString>;
34
+ visibility: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
35
+ private: "private";
36
+ internal: "internal";
37
+ public: "public";
38
+ }>>>;
39
+ files: z.ZodOptional<z.ZodArray<z.ZodObject<{
40
+ file_path: z.ZodString;
41
+ content: z.ZodOptional<z.ZodString>;
42
+ action: z.ZodOptional<z.ZodEnum<{
43
+ create: "create";
44
+ update: "update";
45
+ delete: "delete";
46
+ move: "move";
47
+ }>>;
48
+ previous_path: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strip>>>;
50
+ }, z.core.$strip>;
51
+ export declare const DeleteSnippetSchema: z.ZodObject<{
52
+ action: z.ZodLiteral<"delete">;
53
+ id: z.ZodNumber;
54
+ projectId: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>;
56
+ export type CreateSnippetOptions = z.infer<typeof CreateSnippetSchema>;
57
+ export type UpdateSnippetOptions = z.infer<typeof UpdateSnippetSchema>;
58
+ export type DeleteSnippetOptions = z.infer<typeof DeleteSnippetSchema>;
59
+ export type SnippetFile = z.infer<typeof SnippetFileSchema>;
60
+ export {};