@mcp-consultant-tools/github-enterprise 1.0.0 → 1.0.2

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.
package/build/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  import { GitHubEnterpriseService } from "./GitHubEnterpriseService.js";
3
- export declare function registerGitHubEnterpriseTools(server: any, service?: GitHubEnterpriseService): void;
4
- export { GitHubEnterpriseService } from "./GitHubEnterpriseService.js";
3
+ export declare function registerGitHubEnterpriseTools(server: any, githubenterpriseService?: GitHubEnterpriseService): void;
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,uBAAuB,QAE3F;AAED,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAKvE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,uBAAuB,CAAC,EAAE,uBAAuB,QAynC3G"}
package/build/index.js CHANGED
@@ -1,17 +1,951 @@
1
1
  #!/usr/bin/env node
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { createMcpServer, createEnvLoader } from "@mcp-consultant-tools/core";
4
- export function registerGitHubEnterpriseTools(server, service) {
5
- console.error("GitHub Enterprise tools registered (tool extraction pending)");
4
+ import { GitHubEnterpriseService } from "./GitHubEnterpriseService.js";
5
+ import { z } from 'zod';
6
+ import * as gheFormatters from './utils/ghe-formatters.js';
7
+ export function registerGitHubEnterpriseTools(server, githubenterpriseService) {
8
+ let service = githubenterpriseService || null;
9
+ function getGitHubEnterpriseService() {
10
+ if (!service) {
11
+ const missingConfig = [];
12
+ let repos = [];
13
+ if (process.env.GHE_REPOS) {
14
+ try {
15
+ repos = JSON.parse(process.env.GHE_REPOS);
16
+ }
17
+ catch (error) {
18
+ throw new Error("Failed to parse GHE_REPOS JSON");
19
+ }
20
+ }
21
+ else {
22
+ missingConfig.push("GHE_REPOS");
23
+ }
24
+ if (!process.env.GHE_TOKEN)
25
+ missingConfig.push("GHE_TOKEN");
26
+ if (missingConfig.length > 0) {
27
+ throw new Error(`Missing GitHub Enterprise configuration: ${missingConfig.join(", ")}`);
28
+ }
29
+ const config = {
30
+ repos,
31
+ baseUrl: process.env.GHE_BASE_URL || 'https://github.com',
32
+ apiVersion: process.env.GHE_API_VERSION || '2022-11-28',
33
+ authMethod: 'pat',
34
+ pat: process.env.GHE_TOKEN,
35
+ enableWrite: process.env.GHE_ENABLE_WRITE === 'true',
36
+ enableCreate: process.env.GHE_ENABLE_CREATE === 'true',
37
+ enableCache: process.env.GHE_ENABLE_CACHE !== 'false',
38
+ cacheTtl: parseInt(process.env.GHE_CACHE_TTL || '300'),
39
+ maxFileSize: parseInt(process.env.GHE_MAX_FILE_SIZE || '1048576'),
40
+ maxSearchResults: parseInt(process.env.GHE_MAX_SEARCH_RESULTS || '100'),
41
+ };
42
+ service = new GitHubEnterpriseService(config);
43
+ console.error("GitHub Enterprise service initialized");
44
+ }
45
+ return service;
46
+ }
47
+ // ========================================
48
+ // PROMPTS
49
+ // ========================================
50
+ server.prompt("ghe-repo-overview", "Get a comprehensive repository overview with branch analysis and recent commits", {
51
+ repoId: z.string().describe("Repository ID from configuration"),
52
+ }, async ({ repoId }) => {
53
+ const service = getGitHubEnterpriseService();
54
+ const repo = service.getRepoById(repoId);
55
+ const [branches, defaultBranchInfo] = await Promise.all([
56
+ service.listBranches(repoId),
57
+ service.getDefaultBranch(repoId),
58
+ ]);
59
+ const recentCommits = await service.getCommits(repoId, defaultBranchInfo.branch, undefined, undefined, undefined, undefined, 10);
60
+ const output = gheFormatters.formatRepositoryOverviewAsMarkdown({
61
+ owner: repo.owner,
62
+ repo: repo.repo,
63
+ url: `${service['config'].baseUrl}/${repo.owner}/${repo.repo}`,
64
+ defaultBranch: defaultBranchInfo.branch,
65
+ description: repo.description,
66
+ active: repo.active,
67
+ }, branches, recentCommits);
68
+ return {
69
+ messages: [
70
+ {
71
+ role: "user",
72
+ content: {
73
+ type: "text",
74
+ text: output,
75
+ },
76
+ },
77
+ ],
78
+ };
79
+ });
80
+ server.prompt("ghe-code-search-report", "Search code across repositories and get formatted results with analysis", {
81
+ query: z.string().describe("Search query"),
82
+ repoId: z.string().optional().describe("Limit to specific repository ID"),
83
+ extension: z.string().optional().describe("Filter by file extension (e.g., 'cs', 'js')"),
84
+ }, async ({ query, repoId, extension }) => {
85
+ const service = getGitHubEnterpriseService();
86
+ const results = await service.searchCode(query, repoId, undefined, extension);
87
+ const output = gheFormatters.formatCodeSearchResultsAsMarkdown(results);
88
+ return {
89
+ messages: [
90
+ {
91
+ role: "user",
92
+ content: {
93
+ type: "text",
94
+ text: output,
95
+ },
96
+ },
97
+ ],
98
+ };
99
+ });
100
+ server.prompt("ghe-branch-comparison-report", "Compare branches and generate deployment-ready summary with checklist", {
101
+ repoId: z.string().describe("Repository ID from configuration"),
102
+ base: z.string().describe("Base branch (e.g., 'main')"),
103
+ head: z.string().describe("Head branch to compare (e.g., 'release/9.0')"),
104
+ }, async ({ repoId, base, head }) => {
105
+ const service = getGitHubEnterpriseService();
106
+ const repo = service.getRepoById(repoId);
107
+ const comparison = await service.compareBranches(repoId, base, head);
108
+ const insights = gheFormatters.analyzeBranchComparison(comparison);
109
+ const checklist = gheFormatters.generateDeploymentChecklist(comparison);
110
+ let output = `# Branch Comparison: ${base} ← ${head}\n\n`;
111
+ output += `**Repository:** ${repo.owner}/${repo.repo}\n`;
112
+ output += `**Comparing:** \`${base}\` (base) ← \`${head}\` (head)\n\n`;
113
+ output += `## Summary\n\n`;
114
+ output += insights.join('\n') + '\n\n';
115
+ if (comparison.commits && comparison.commits.length > 0) {
116
+ output += `## Commits to Deploy\n\n`;
117
+ output += gheFormatters.formatCommitHistoryAsMarkdown(comparison.commits) + '\n\n';
118
+ }
119
+ if (comparison.files && comparison.files.length > 0) {
120
+ output += `## Files Changed (${comparison.files.length})\n\n`;
121
+ const header = '| File | Status | +/- | Changes |';
122
+ const separator = '|------|--------|-----|---------|';
123
+ const rows = comparison.files.slice(0, 20).map((f) => {
124
+ const status = f.status === 'added' ? '🆕 Added' :
125
+ f.status === 'modified' ? '📝 Modified' :
126
+ f.status === 'removed' ? '🗑️ Removed' :
127
+ f.status === 'renamed' ? '📋 Renamed' : f.status;
128
+ return `| \`${f.filename}\` | ${status} | +${f.additions}/-${f.deletions} | ${f.changes} |`;
129
+ });
130
+ output += [header, separator, ...rows].join('\n');
131
+ if (comparison.files.length > 20) {
132
+ output += `\n\n*Showing 20 of ${comparison.files.length} files*`;
133
+ }
134
+ output += '\n\n';
135
+ }
136
+ output += `## Deployment Checklist\n\n`;
137
+ output += checklist.join('\n');
138
+ return {
139
+ messages: [
140
+ {
141
+ role: "user",
142
+ content: {
143
+ type: "text",
144
+ text: output,
145
+ },
146
+ },
147
+ ],
148
+ };
149
+ });
150
+ server.prompt("ghe-troubleshooting-guide", "Generate comprehensive bug troubleshooting report with source code analysis", {
151
+ repoId: z.string().describe("Repository ID to investigate"),
152
+ searchQuery: z.string().describe("Search query (e.g., plugin name, entity name, or code pattern)"),
153
+ branch: z.string().optional().describe("Branch to search (default: auto-detected)"),
154
+ }, async ({ repoId, searchQuery, branch }) => {
155
+ const service = getGitHubEnterpriseService();
156
+ const repo = service.getRepoById(repoId);
157
+ // Search for code
158
+ const codeResults = await service.searchCode(searchQuery, repoId);
159
+ // Search commits for references
160
+ const commitResults = await service.searchCommits(repoId, searchQuery);
161
+ let output = `# Bug Troubleshooting Report\n\n`;
162
+ output += `**Repository:** ${repo.owner}/${repo.repo}\n`;
163
+ output += `**Search Query:** \`${searchQuery}\`\n\n`;
164
+ output += `## Source Code Analysis\n\n`;
165
+ if (codeResults.total_count > 0) {
166
+ output += `Found **${codeResults.total_count} code matches** across ${codeResults.items.length} files:\n\n`;
167
+ output += gheFormatters.formatCodeSearchResultsAsMarkdown(codeResults) + '\n\n';
168
+ }
169
+ else {
170
+ output += `*No code matches found for query: "${searchQuery}"*\n\n`;
171
+ }
172
+ output += `## Related Commits\n\n`;
173
+ if (commitResults.length > 0) {
174
+ output += `Found **${commitResults.length} commits** referencing "${searchQuery}":\n\n`;
175
+ output += gheFormatters.formatCommitHistoryAsMarkdown(commitResults.slice(0, 10)) + '\n\n';
176
+ if (commitResults.length > 10) {
177
+ output += `*Showing 10 of ${commitResults.length} commits*\n\n`;
178
+ }
179
+ }
180
+ else {
181
+ output += `*No commits found referencing "${searchQuery}"*\n\n`;
182
+ }
183
+ output += `## Recommendations\n\n`;
184
+ output += `1. **Review Code Matches**: Check the code search results above for relevant implementations\n`;
185
+ output += `2. **Analyze Recent Changes**: Review commit history for recent modifications\n`;
186
+ output += `3. **Check Branch**: Current search is on branch \`${branch || 'auto-detected'}\`\n`;
187
+ output += `4. **Cross-Reference**: Use ADO work items or PowerPlatform plugin names to correlate issues\n`;
188
+ return {
189
+ messages: [
190
+ {
191
+ role: "user",
192
+ content: {
193
+ type: "text",
194
+ text: output,
195
+ },
196
+ },
197
+ ],
198
+ };
199
+ });
200
+ server.prompt("ghe-deployment-report", "Generate deployment-ready report with code changes, testing checklist, and rollback plan", {
201
+ repoId: z.string().describe("Repository ID"),
202
+ fromBranch: z.string().optional().describe("Source branch (default: main)"),
203
+ toBranch: z.string().optional().describe("Target branch (default: auto-detected)"),
204
+ }, async ({ repoId, fromBranch = "main", toBranch }) => {
205
+ const service = getGitHubEnterpriseService();
206
+ const repo = service.getRepoById(repoId);
207
+ // Auto-detect target branch if not specified
208
+ const targetBranch = toBranch || (await service.getDefaultBranch(repoId)).branch;
209
+ // Get branch comparison
210
+ const comparison = await service.compareBranches(repoId, fromBranch, targetBranch);
211
+ const insights = gheFormatters.analyzeBranchComparison(comparison);
212
+ const checklist = gheFormatters.generateDeploymentChecklist(comparison);
213
+ let output = `# Deployment Report: ${targetBranch} → ${fromBranch}\n\n`;
214
+ output += `**Repository:** ${repo.owner}/${repo.repo}\n`;
215
+ output += `**Source:** \`${targetBranch}\`\n`;
216
+ output += `**Target:** \`${fromBranch}\` (Production)\n`;
217
+ output += `**Date:** ${new Date().toISOString().split('T')[0]}\n\n`;
218
+ output += `## Executive Summary\n\n`;
219
+ output += insights.join('\n') + '\n\n';
220
+ output += `## Changes by Component\n\n`;
221
+ if (comparison.files && comparison.files.length > 0) {
222
+ // Group files by directory/component
223
+ const filesByDir = {};
224
+ comparison.files.forEach((f) => {
225
+ const dir = f.filename.split('/')[0] || 'root';
226
+ if (!filesByDir[dir])
227
+ filesByDir[dir] = [];
228
+ filesByDir[dir].push(f);
229
+ });
230
+ Object.entries(filesByDir).forEach(([dir, files]) => {
231
+ output += `### ${dir}/ (${files.length} files)\n\n`;
232
+ const rows = files.slice(0, 10).map((f) => `- \`${f.filename}\` (+${f.additions}, -${f.deletions})`);
233
+ output += rows.join('\n') + '\n\n';
234
+ if (files.length > 10) {
235
+ output += `*...and ${files.length - 10} more files*\n\n`;
236
+ }
237
+ });
238
+ }
239
+ output += `## Deployment Steps\n\n`;
240
+ output += `### 1. Pre-Deployment Verification\n`;
241
+ output += `\`\`\`bash\n# Review changes\ngit diff ${fromBranch}...${targetBranch}\n\n# Run tests\nnpm test # or: dotnet test\n\`\`\`\n\n`;
242
+ output += `### 2. Merge to Production\n`;
243
+ output += `\`\`\`bash\ngit checkout ${fromBranch}\ngit merge ${targetBranch} --no-ff\ngit push origin ${fromBranch}\n\`\`\`\n\n`;
244
+ output += `### 3. Post-Deployment Verification\n`;
245
+ output += `- [ ] Smoke tests passing\n`;
246
+ output += `- [ ] No errors in logs (first 15 minutes)\n`;
247
+ output += `- [ ] Verify key functionality works\n\n`;
248
+ output += `## Rollback Plan\n\n`;
249
+ output += `If issues occur after deployment:\n\n`;
250
+ output += `\`\`\`bash\n# Option 1: Revert merge commit\ngit revert -m 1 HEAD\ngit push origin ${fromBranch}\n\n`;
251
+ output += `# Option 2: Reset to previous commit (if not pushed)\ngit reset --hard HEAD~1\n\`\`\`\n\n`;
252
+ output += `## Testing Checklist\n\n`;
253
+ output += checklist.join('\n');
254
+ return {
255
+ messages: [
256
+ {
257
+ role: "user",
258
+ content: {
259
+ type: "text",
260
+ text: output,
261
+ },
262
+ },
263
+ ],
264
+ };
265
+ });
266
+ // ========================================
267
+ // TOOLS
268
+ // ========================================
269
+ server.tool("ghe-list-repos", "List all configured GitHub Enterprise repositories (active and inactive)", {}, async () => {
270
+ try {
271
+ const service = getGitHubEnterpriseService();
272
+ const repos = service.getAllRepos();
273
+ const reposWithUrls = repos.map((r) => ({
274
+ ...r,
275
+ url: `${service['config'].baseUrl}/${r.owner}/${r.repo}`
276
+ }));
277
+ return {
278
+ content: [{
279
+ type: "text",
280
+ text: `# Configured GitHub Enterprise Repositories\n\n` +
281
+ `**Total:** ${repos.length} repositories\n` +
282
+ `**Active:** ${repos.filter(r => r.active).length}\n\n` +
283
+ JSON.stringify(reposWithUrls, null, 2)
284
+ }]
285
+ };
286
+ }
287
+ catch (error) {
288
+ console.error("Error listing GitHub Enterprise repositories:", error);
289
+ return {
290
+ content: [{
291
+ type: "text",
292
+ text: `Failed to list repositories: ${error.message}\n\n` +
293
+ `Troubleshooting:\n` +
294
+ `1. Verify GHE_URL is set correctly\n` +
295
+ `2. Verify GHE_PAT or GitHub App credentials are set\n` +
296
+ `3. Verify GHE_REPOS is configured as JSON array\n` +
297
+ `4. Check repository access permissions`
298
+ }]
299
+ };
300
+ }
301
+ });
302
+ server.tool("ghe-list-branches", "List all branches for a GitHub Enterprise repository", {
303
+ repoId: z.string().describe("Repository ID from configuration (e.g., 'plugin-core')"),
304
+ protectedOnly: z.boolean().optional().describe("Filter by protection status (true for protected branches only)"),
305
+ }, async ({ repoId, protectedOnly }) => {
306
+ try {
307
+ const service = getGitHubEnterpriseService();
308
+ const branches = await service.listBranches(repoId, protectedOnly);
309
+ return {
310
+ content: [{
311
+ type: "text",
312
+ text: `# Branches for Repository: ${repoId}\n\n` +
313
+ `**Total:** ${branches.length} branches\n\n` +
314
+ gheFormatters.formatBranchListAsMarkdown(branches)
315
+ }]
316
+ };
317
+ }
318
+ catch (error) {
319
+ console.error("Error listing branches:", error);
320
+ return {
321
+ content: [{
322
+ type: "text",
323
+ text: `Failed to list branches: ${error.message}`
324
+ }]
325
+ };
326
+ }
327
+ });
328
+ server.tool("ghe-get-default-branch", "Auto-detect the default branch for a repository (handles typos, provides alternatives)", {
329
+ repoId: z.string().describe("Repository ID from configuration"),
330
+ userSpecified: z.string().optional().describe("User-specified branch name (overrides auto-detection)"),
331
+ }, async ({ repoId, userSpecified }) => {
332
+ try {
333
+ const service = getGitHubEnterpriseService();
334
+ const result = await service.getDefaultBranch(repoId, userSpecified);
335
+ let output = `# Default Branch for Repository: ${repoId}\n\n`;
336
+ output += `**Selected Branch:** \`${result.branch}\` \n`;
337
+ output += `**Reason:** ${result.reason} \n`;
338
+ output += `**Confidence:** ${result.confidence} \n\n`;
339
+ if (result.alternatives && result.alternatives.length > 0) {
340
+ output += `**Alternative Branches:**\n`;
341
+ result.alternatives.slice(0, 5).forEach(alt => {
342
+ output += `- \`${alt}\`\n`;
343
+ });
344
+ if (result.alternatives.length > 5) {
345
+ output += `- ... and ${result.alternatives.length - 5} more\n`;
346
+ }
347
+ }
348
+ if (result.message) {
349
+ output += `\n**Note:** ${result.message}\n`;
350
+ }
351
+ return {
352
+ content: [{
353
+ type: "text",
354
+ text: output
355
+ }]
356
+ };
357
+ }
358
+ catch (error) {
359
+ console.error("Error getting default branch:", error);
360
+ return {
361
+ content: [{
362
+ type: "text",
363
+ text: `Failed to get default branch: ${error.message}`
364
+ }]
365
+ };
366
+ }
367
+ });
368
+ server.tool("ghe-get-file", "Get file content from a GitHub Enterprise repository", {
369
+ repoId: z.string().describe("Repository ID from configuration"),
370
+ path: z.string().describe("File path (e.g., 'src/Plugins/ContactPlugin.cs')"),
371
+ branch: z.string().optional().describe("Branch name (default: auto-detected)"),
372
+ }, async ({ repoId, path, branch }) => {
373
+ try {
374
+ const service = getGitHubEnterpriseService();
375
+ const file = await service.getFile(repoId, path, branch);
376
+ return {
377
+ content: [{
378
+ type: "text",
379
+ text: `# File: ${path}\n\n` +
380
+ `**Repository:** ${repoId} \n` +
381
+ `**Branch:** \`${file.branch}\` \n` +
382
+ `**Size:** ${file.size} bytes \n` +
383
+ `**SHA:** \`${file.sha}\` \n\n` +
384
+ `## Content\n\n\`\`\`\n${file.decodedContent}\n\`\`\``
385
+ }]
386
+ };
387
+ }
388
+ catch (error) {
389
+ console.error("Error getting file:", error);
390
+ return {
391
+ content: [{
392
+ type: "text",
393
+ text: `Failed to get file: ${error.message}\n\n` +
394
+ `Troubleshooting:\n` +
395
+ `1. Verify file path is correct\n` +
396
+ `2. Verify branch exists (or let auto-detection find it)\n` +
397
+ `3. Check if file size exceeds GHE_MAX_FILE_SIZE (default: 1MB)`
398
+ }]
399
+ };
400
+ }
401
+ });
402
+ server.tool("ghe-search-code", "Search code across GitHub Enterprise repositories", {
403
+ query: z.string().describe("Search query (e.g., 'class ContactPlugin')"),
404
+ repoId: z.string().optional().describe("Limit to specific repository"),
405
+ path: z.string().optional().describe("Filter by file path pattern"),
406
+ extension: z.string().optional().describe("Filter by file extension (e.g., 'cs', 'js')"),
407
+ }, async ({ query, repoId, path, extension }) => {
408
+ try {
409
+ const service = getGitHubEnterpriseService();
410
+ const results = await service.searchCode(query, repoId, path, extension);
411
+ return {
412
+ content: [{
413
+ type: "text",
414
+ text: gheFormatters.formatCodeSearchResultsAsMarkdown(results)
415
+ }]
416
+ };
417
+ }
418
+ catch (error) {
419
+ console.error("Error searching code:", error);
420
+ return {
421
+ content: [{
422
+ type: "text",
423
+ text: `Failed to search code: ${error.message}\n\n` +
424
+ `Troubleshooting:\n` +
425
+ `1. Simplify search query if too complex\n` +
426
+ `2. Check rate limits if search fails\n` +
427
+ `3. Verify repository access permissions`
428
+ }]
429
+ };
430
+ }
431
+ });
432
+ server.tool("ghe-list-files", "List files in a directory of a GitHub Enterprise repository", {
433
+ repoId: z.string().describe("Repository ID from configuration"),
434
+ path: z.string().optional().describe("Directory path (default: root)"),
435
+ branch: z.string().optional().describe("Branch name (default: auto-detected)"),
436
+ }, async ({ repoId, path, branch }) => {
437
+ try {
438
+ const service = getGitHubEnterpriseService();
439
+ const result = await service.listFiles(repoId, path, branch);
440
+ return {
441
+ content: [{
442
+ type: "text",
443
+ text: `# Directory: ${path || '/'}\n\n` +
444
+ `**Repository:** ${repoId} \n` +
445
+ `**Branch:** \`${result.branch}\` \n\n` +
446
+ gheFormatters.formatDirectoryContentsAsMarkdown(result.contents)
447
+ }]
448
+ };
449
+ }
450
+ catch (error) {
451
+ console.error("Error listing files:", error);
452
+ return {
453
+ content: [{
454
+ type: "text",
455
+ text: `Failed to list files: ${error.message}`
456
+ }]
457
+ };
458
+ }
459
+ });
460
+ server.tool("ghe-clear-cache", "Clear cached GitHub Enterprise API responses (useful after pushing code updates)", {
461
+ pattern: z.string().optional().describe("Clear only cache entries matching this pattern (e.g., 'ContactPlugin.cs')"),
462
+ repoId: z.string().optional().describe("Clear cache for specific repository only"),
463
+ }, async ({ pattern, repoId }) => {
464
+ try {
465
+ const service = getGitHubEnterpriseService();
466
+ const cleared = service.clearCache(pattern, repoId);
467
+ return {
468
+ content: [{
469
+ type: "text",
470
+ text: `✅ Cleared ${cleared} cache entries` +
471
+ (pattern ? ` matching pattern '${pattern}'` : '') +
472
+ (repoId ? ` for repository '${repoId}'` : '')
473
+ }]
474
+ };
475
+ }
476
+ catch (error) {
477
+ console.error("Error clearing cache:", error);
478
+ return {
479
+ content: [{
480
+ type: "text",
481
+ text: `Failed to clear cache: ${error.message}`
482
+ }]
483
+ };
484
+ }
485
+ });
486
+ server.tool("ghe-get-commits", "Get commit history for a branch in a GitHub Enterprise repository", {
487
+ repoId: z.string().describe("Repository ID from configuration"),
488
+ branch: z.string().optional().describe("Branch name (default: auto-detected)"),
489
+ since: z.string().optional().describe("ISO 8601 date (e.g., '2025-01-01T00:00:00Z')"),
490
+ until: z.string().optional().describe("ISO 8601 date"),
491
+ author: z.string().optional().describe("Filter by author"),
492
+ path: z.string().optional().describe("Filter by file path"),
493
+ limit: z.number().optional().describe("Max commits (default: 50)"),
494
+ }, async ({ repoId, branch, since, until, author, path, limit }) => {
495
+ try {
496
+ const service = getGitHubEnterpriseService();
497
+ const commits = await service.getCommits(repoId, branch, since, until, author, path, limit || 50);
498
+ return {
499
+ content: [{
500
+ type: "text",
501
+ text: `# Commit History\n\n` +
502
+ `**Repository:** ${repoId} \n` +
503
+ `**Count:** ${commits.length}\n\n` +
504
+ gheFormatters.formatCommitHistoryAsMarkdown(commits)
505
+ }]
506
+ };
507
+ }
508
+ catch (error) {
509
+ console.error("Error getting commits:", error);
510
+ return {
511
+ content: [{
512
+ type: "text",
513
+ text: `Failed to get commits: ${error.message}`
514
+ }]
515
+ };
516
+ }
517
+ });
518
+ server.tool("ghe-get-commit-details", "Get detailed information about a specific commit in a GitHub Enterprise repository", {
519
+ repoId: z.string().describe("Repository ID from configuration"),
520
+ sha: z.string().describe("Commit SHA"),
521
+ }, async ({ repoId, sha }) => {
522
+ try {
523
+ const service = getGitHubEnterpriseService();
524
+ const commit = await service.getCommitDetails(repoId, sha);
525
+ return {
526
+ content: [{
527
+ type: "text",
528
+ text: gheFormatters.formatCommitDetailsAsMarkdown(commit)
529
+ }]
530
+ };
531
+ }
532
+ catch (error) {
533
+ console.error("Error getting commit details:", error);
534
+ return {
535
+ content: [{
536
+ type: "text",
537
+ text: `Failed to get commit details: ${error.message}`
538
+ }]
539
+ };
540
+ }
541
+ });
542
+ server.tool("ghe-search-commits", "Search commits by message or hash (supports work item references like '#1234')", {
543
+ query: z.string().describe("Search query (e.g., '#1234', 'fix bug')"),
544
+ repoId: z.string().optional().describe("Limit to specific repository"),
545
+ author: z.string().optional().describe("Filter by author"),
546
+ since: z.string().optional().describe("ISO 8601 date"),
547
+ until: z.string().optional().describe("ISO 8601 date"),
548
+ }, async ({ query, repoId, author, since, until }) => {
549
+ try {
550
+ const service = getGitHubEnterpriseService();
551
+ const results = await service.searchCommits(query, repoId, author, since, until);
552
+ return {
553
+ content: [{
554
+ type: "text",
555
+ text: `# Commit Search Results\n\n` +
556
+ `**Query:** ${query} \n` +
557
+ `**Total Results:** ${results.total_count} \n` +
558
+ `**Showing:** ${results.items.length}\n\n` +
559
+ gheFormatters.formatCommitHistoryAsMarkdown(results.items)
560
+ }]
561
+ };
562
+ }
563
+ catch (error) {
564
+ console.error("Error searching commits:", error);
565
+ return {
566
+ content: [{
567
+ type: "text",
568
+ text: `Failed to search commits: ${error.message}`
569
+ }]
570
+ };
571
+ }
572
+ });
573
+ server.tool("ghe-get-commit-diff", "Get detailed diff for a commit in unified format", {
574
+ repoId: z.string().describe("Repository ID from configuration"),
575
+ sha: z.string().describe("Commit SHA"),
576
+ format: z.enum(['diff', 'patch']).optional().describe("Format: 'diff' or 'patch' (default: 'diff')"),
577
+ }, async ({ repoId, sha, format }) => {
578
+ try {
579
+ const service = getGitHubEnterpriseService();
580
+ const diff = await service.getCommitDiff(repoId, sha, format || 'diff');
581
+ return {
582
+ content: [{
583
+ type: "text",
584
+ text: `# Commit Diff: ${sha}\n\n` +
585
+ `**Repository:** ${repoId} \n` +
586
+ `**Format:** ${format || 'diff'} \n\n` +
587
+ `\`\`\`diff\n${diff}\n\`\`\``
588
+ }]
589
+ };
590
+ }
591
+ catch (error) {
592
+ console.error("Error getting commit diff:", error);
593
+ return {
594
+ content: [{
595
+ type: "text",
596
+ text: `Failed to get commit diff: ${error.message}`
597
+ }]
598
+ };
599
+ }
600
+ });
601
+ server.tool("ghe-compare-branches", "Compare two branches and show differences", {
602
+ repoId: z.string().describe("Repository ID from configuration"),
603
+ base: z.string().describe("Base branch name"),
604
+ head: z.string().describe("Head branch name"),
605
+ }, async ({ repoId, base, head }) => {
606
+ try {
607
+ const service = getGitHubEnterpriseService();
608
+ const comparison = await service.compareBranches(repoId, base, head);
609
+ const insights = gheFormatters.analyzeBranchComparison(comparison);
610
+ return {
611
+ content: [{
612
+ type: "text",
613
+ text: `# Branch Comparison: ${base} ← ${head}\n\n` +
614
+ `**Repository:** ${repoId} \n\n` +
615
+ `## Summary\n\n` +
616
+ insights.join('\n') + '\n\n' +
617
+ `## Commits (${comparison.commits.length})\n\n` +
618
+ gheFormatters.formatCommitHistoryAsMarkdown(comparison.commits.slice(0, 10))
619
+ }]
620
+ };
621
+ }
622
+ catch (error) {
623
+ console.error("Error comparing branches:", error);
624
+ return {
625
+ content: [{
626
+ type: "text",
627
+ text: `Failed to compare branches: ${error.message}`
628
+ }]
629
+ };
630
+ }
631
+ });
632
+ server.tool("ghe-get-branch-details", "Get detailed information about a specific branch", {
633
+ repoId: z.string().describe("Repository ID from configuration"),
634
+ branch: z.string().describe("Branch name"),
635
+ }, async ({ repoId, branch }) => {
636
+ try {
637
+ const service = getGitHubEnterpriseService();
638
+ const branchInfo = await service.getBranchDetails(repoId, branch);
639
+ return {
640
+ content: [{
641
+ type: "text",
642
+ text: `# Branch Details: ${branch}\n\n` +
643
+ `**Repository:** ${repoId} \n` +
644
+ `**Protected:** ${branchInfo.protected ? '🔒 Yes' : 'No'} \n` +
645
+ `**Last Commit:** \`${branchInfo.commit.sha.substring(0, 7)}\` \n` +
646
+ `**Commit Message:** ${branchInfo.commit.commit.message.split('\n')[0]} \n` +
647
+ `**Author:** ${branchInfo.commit.commit.author.name} \n` +
648
+ `**Date:** ${new Date(branchInfo.commit.commit.author.date).toLocaleString()} \n\n` +
649
+ JSON.stringify(branchInfo, null, 2)
650
+ }]
651
+ };
652
+ }
653
+ catch (error) {
654
+ console.error("Error getting branch details:", error);
655
+ return {
656
+ content: [{
657
+ type: "text",
658
+ text: `Failed to get branch details: ${error.message}`
659
+ }]
660
+ };
661
+ }
662
+ });
663
+ server.tool("ghe-list-pull-requests", "List pull requests for a GitHub Enterprise repository", {
664
+ repoId: z.string().describe("Repository ID from configuration"),
665
+ state: z.enum(['open', 'closed', 'all']).optional().describe("PR state (default: 'open')"),
666
+ base: z.string().optional().describe("Filter by base branch"),
667
+ head: z.string().optional().describe("Filter by head branch"),
668
+ sort: z.enum(['created', 'updated', 'popularity']).optional().describe("Sort order (default: 'created')"),
669
+ limit: z.number().optional().describe("Max results (default: 30)"),
670
+ }, async ({ repoId, state, base, head, sort, limit }) => {
671
+ try {
672
+ const service = getGitHubEnterpriseService();
673
+ const prs = await service.listPullRequests(repoId, state || 'open', base, head, sort || 'created', limit || 30);
674
+ return {
675
+ content: [{
676
+ type: "text",
677
+ text: `# Pull Requests\n\n` +
678
+ `**Repository:** ${repoId} \n` +
679
+ `**State:** ${state || 'open'} \n` +
680
+ `**Count:** ${prs.length}\n\n` +
681
+ gheFormatters.formatPullRequestsAsMarkdown(prs)
682
+ }]
683
+ };
684
+ }
685
+ catch (error) {
686
+ console.error("Error listing pull requests:", error);
687
+ return {
688
+ content: [{
689
+ type: "text",
690
+ text: `Failed to list pull requests: ${error.message}`
691
+ }]
692
+ };
693
+ }
694
+ });
695
+ server.tool("ghe-get-pull-request", "Get detailed information about a specific pull request", {
696
+ repoId: z.string().describe("Repository ID from configuration"),
697
+ prNumber: z.number().describe("Pull request number"),
698
+ }, async ({ repoId, prNumber }) => {
699
+ try {
700
+ const service = getGitHubEnterpriseService();
701
+ const pr = await service.getPullRequest(repoId, prNumber);
702
+ return {
703
+ content: [{
704
+ type: "text",
705
+ text: gheFormatters.formatPullRequestDetailsAsMarkdown(pr)
706
+ }]
707
+ };
708
+ }
709
+ catch (error) {
710
+ console.error("Error getting pull request:", error);
711
+ return {
712
+ content: [{
713
+ type: "text",
714
+ text: `Failed to get pull request: ${error.message}`
715
+ }]
716
+ };
717
+ }
718
+ });
719
+ server.tool("ghe-get-pr-files", "Get files changed in a pull request", {
720
+ repoId: z.string().describe("Repository ID from configuration"),
721
+ prNumber: z.number().describe("Pull request number"),
722
+ }, async ({ repoId, prNumber }) => {
723
+ try {
724
+ const service = getGitHubEnterpriseService();
725
+ const files = await service.getPullRequestFiles(repoId, prNumber);
726
+ const header = '| File | Status | +/- | Changes |';
727
+ const separator = '|------|--------|-----|---------|';
728
+ const rows = files.map(f => {
729
+ const status = f.status === 'added' ? '🆕 Added' :
730
+ f.status === 'modified' ? '📝 Modified' :
731
+ f.status === 'removed' ? '🗑️ Removed' :
732
+ f.status === 'renamed' ? '📋 Renamed' : f.status;
733
+ return `| \`${f.filename}\` | ${status} | +${f.additions}/-${f.deletions} | ${f.changes} |`;
734
+ });
735
+ return {
736
+ content: [{
737
+ type: "text",
738
+ text: `# Pull Request #${prNumber} - Files Changed\n\n` +
739
+ `**Repository:** ${repoId} \n` +
740
+ `**Total Files:** ${files.length}\n\n` +
741
+ [header, separator, ...rows].join('\n')
742
+ }]
743
+ };
744
+ }
745
+ catch (error) {
746
+ console.error("Error getting PR files:", error);
747
+ return {
748
+ content: [{
749
+ type: "text",
750
+ text: `Failed to get PR files: ${error.message}`
751
+ }]
752
+ };
753
+ }
754
+ });
755
+ server.tool("ghe-get-directory-structure", "Get recursive directory tree structure", {
756
+ repoId: z.string().describe("Repository ID from configuration"),
757
+ path: z.string().optional().describe("Directory path (default: root)"),
758
+ branch: z.string().optional().describe("Branch name (default: auto-detected)"),
759
+ depth: z.number().optional().describe("Recursion depth limit (default: 3)"),
760
+ }, async ({ repoId, path, branch, depth }) => {
761
+ try {
762
+ const service = getGitHubEnterpriseService();
763
+ const result = await service.getDirectoryStructure(repoId, path, branch, depth || 3);
764
+ return {
765
+ content: [{
766
+ type: "text",
767
+ text: `# Directory Structure: ${path || '/'}\n\n` +
768
+ `**Repository:** ${repoId} \n` +
769
+ `**Branch:** \`${result.branch}\` \n` +
770
+ `**Max Depth:** ${depth || 3}\n\n` +
771
+ '```\n' + gheFormatters.formatFileTreeAsMarkdown(result.tree) + '\n```'
772
+ }]
773
+ };
774
+ }
775
+ catch (error) {
776
+ console.error("Error getting directory structure:", error);
777
+ return {
778
+ content: [{
779
+ type: "text",
780
+ text: `Failed to get directory structure: ${error.message}`
781
+ }]
782
+ };
783
+ }
784
+ });
785
+ server.tool("ghe-get-file-history", "Get commit history for a specific file", {
786
+ repoId: z.string().describe("Repository ID from configuration"),
787
+ path: z.string().describe("File path"),
788
+ branch: z.string().optional().describe("Branch name (default: auto-detected)"),
789
+ limit: z.number().optional().describe("Max commits (default: 50)"),
790
+ }, async ({ repoId, path, branch, limit }) => {
791
+ try {
792
+ const service = getGitHubEnterpriseService();
793
+ const commits = await service.getFileHistory(repoId, path, branch, limit || 50);
794
+ return {
795
+ content: [{
796
+ type: "text",
797
+ text: `# File History: ${path}\n\n` +
798
+ `**Repository:** ${repoId} \n` +
799
+ `**Commits:** ${commits.length}\n\n` +
800
+ gheFormatters.formatCommitHistoryAsMarkdown(commits)
801
+ }]
802
+ };
803
+ }
804
+ catch (error) {
805
+ console.error("Error getting file history:", error);
806
+ return {
807
+ content: [{
808
+ type: "text",
809
+ text: `Failed to get file history: ${error.message}`
810
+ }]
811
+ };
812
+ }
813
+ });
814
+ server.tool("ghe-create-branch", "Create a new branch (requires GHE_ENABLE_CREATE=true)", {
815
+ repoId: z.string().describe("Repository ID from configuration"),
816
+ branchName: z.string().describe("New branch name"),
817
+ fromBranch: z.string().optional().describe("Source branch (default: auto-detected)"),
818
+ }, async ({ repoId, branchName, fromBranch }) => {
819
+ try {
820
+ const service = getGitHubEnterpriseService();
821
+ const result = await service.createBranch(repoId, branchName, fromBranch);
822
+ return {
823
+ content: [{
824
+ type: "text",
825
+ text: `✅ Branch '${branchName}' created successfully\n\n` +
826
+ JSON.stringify(result, null, 2)
827
+ }]
828
+ };
829
+ }
830
+ catch (error) {
831
+ console.error("Error creating branch:", error);
832
+ return {
833
+ content: [{
834
+ type: "text",
835
+ text: `Failed to create branch: ${error.message}\n\n` +
836
+ `Note: Branch creation requires GHE_ENABLE_CREATE=true`
837
+ }]
838
+ };
839
+ }
840
+ });
841
+ server.tool("ghe-update-file", "Update file content (requires GHE_ENABLE_WRITE=true)", {
842
+ repoId: z.string().describe("Repository ID from configuration"),
843
+ path: z.string().describe("File path"),
844
+ content: z.string().describe("New file content"),
845
+ message: z.string().describe("Commit message"),
846
+ branch: z.string().describe("Branch name"),
847
+ sha: z.string().describe("Current file SHA (for conflict detection)"),
848
+ }, async ({ repoId, path, content, message, branch, sha }) => {
849
+ try {
850
+ const service = getGitHubEnterpriseService();
851
+ const result = await service.updateFile(repoId, path, content, message, branch, sha);
852
+ return {
853
+ content: [{
854
+ type: "text",
855
+ text: `✅ File '${path}' updated successfully\n\n` +
856
+ `**Commit SHA:** \`${result.commit.sha}\` \n` +
857
+ `**Branch:** \`${branch}\` \n` +
858
+ `**Message:** ${message}`
859
+ }]
860
+ };
861
+ }
862
+ catch (error) {
863
+ console.error("Error updating file:", error);
864
+ return {
865
+ content: [{
866
+ type: "text",
867
+ text: `Failed to update file: ${error.message}\n\n` +
868
+ `Note: File updates require GHE_ENABLE_WRITE=true`
869
+ }]
870
+ };
871
+ }
872
+ });
873
+ server.tool("ghe-create-file", "Create a new file (requires GHE_ENABLE_CREATE=true)", {
874
+ repoId: z.string().describe("Repository ID from configuration"),
875
+ path: z.string().describe("File path"),
876
+ content: z.string().describe("File content"),
877
+ message: z.string().describe("Commit message"),
878
+ branch: z.string().describe("Branch name"),
879
+ }, async ({ repoId, path, content, message, branch }) => {
880
+ try {
881
+ const service = getGitHubEnterpriseService();
882
+ const result = await service.createFile(repoId, path, content, message, branch);
883
+ return {
884
+ content: [{
885
+ type: "text",
886
+ text: `✅ File '${path}' created successfully\n\n` +
887
+ `**Commit SHA:** \`${result.commit.sha}\` \n` +
888
+ `**Branch:** \`${branch}\` \n` +
889
+ `**Message:** ${message}`
890
+ }]
891
+ };
892
+ }
893
+ catch (error) {
894
+ console.error("Error creating file:", error);
895
+ return {
896
+ content: [{
897
+ type: "text",
898
+ text: `Failed to create file: ${error.message}\n\n` +
899
+ `Note: File creation requires GHE_ENABLE_CREATE=true`
900
+ }]
901
+ };
902
+ }
903
+ });
904
+ server.tool("ghe-search-repos", "Search repositories by name or description across GitHub Enterprise", {
905
+ query: z.string().describe("Search query"),
906
+ owner: z.string().optional().describe("Filter by organization/owner"),
907
+ }, async ({ query, owner }) => {
908
+ try {
909
+ const service = getGitHubEnterpriseService();
910
+ const results = await service.searchRepositories(query, owner);
911
+ return {
912
+ content: [{
913
+ type: "text",
914
+ text: `# Repository Search Results\n\n` +
915
+ `**Query:** ${query} \n` +
916
+ `**Total Results:** ${results.total_count} \n` +
917
+ `**Showing:** ${results.items.length}\n\n` +
918
+ JSON.stringify(results.items, null, 2)
919
+ }]
920
+ };
921
+ }
922
+ catch (error) {
923
+ console.error("Error searching repositories:", error);
924
+ return {
925
+ content: [{
926
+ type: "text",
927
+ text: `Failed to search repositories: ${error.message}`
928
+ }]
929
+ };
930
+ }
931
+ });
932
+ console.error("github-enterprise tools registered: 22 tools, 5 prompts");
933
+ console.error("GitHub Enterprise tools registered: 22 tools, 5 prompts");
6
934
  }
7
- export { GitHubEnterpriseService } from "./GitHubEnterpriseService.js";
8
935
  if (import.meta.url === `file://${process.argv[1]}`) {
9
936
  const loadEnv = createEnvLoader();
10
937
  loadEnv();
11
- const server = createMcpServer({ name: "@mcp-consultant-tools/github-enterprise", version: "1.0.0", capabilities: { tools: {} } });
938
+ const server = createMcpServer({
939
+ name: "mcp-github-enterprise",
940
+ version: "1.0.0",
941
+ capabilities: { tools: {}, prompts: {} }
942
+ });
12
943
  registerGitHubEnterpriseTools(server);
13
944
  const transport = new StdioServerTransport();
14
- server.connect(transport).catch((error) => { console.error("Failed to start GitHub Enterprise server:", error); process.exit(1); });
15
- console.error("@mcp-consultant-tools/github-enterprise server running");
945
+ server.connect(transport).catch((error) => {
946
+ console.error("Failed to start GitHub Enterprise MCP server:", error);
947
+ process.exit(1);
948
+ });
949
+ console.error("GitHub Enterprise MCP server running");
16
950
  }
17
951
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG9E,MAAM,UAAU,6BAA6B,CAAC,MAAW,EAAE,OAAiC;IAC1F,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAChF,CAAC;AAED,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC;IACV,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,yCAAyC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnI,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3I,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,43 @@
1
1
  {
2
2
  "name": "@mcp-consultant-tools/github-enterprise",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for GitHub Enterprise - repositories, commits, pull requests, and code search",
5
5
  "type": "module",
6
6
  "main": "./build/index.js",
7
7
  "types": "./build/index.d.ts",
8
- "bin": { "mcp-github": "./build/index.js" },
9
- "exports": { ".": { "import": "./build/index.js", "types": "./build/index.d.ts" } },
10
- "files": ["build", "README.md"],
11
- "scripts": { "build": "tsc", "clean": "rm -rf build *.tsbuildinfo", "prepublishOnly": "npm run build" },
12
- "keywords": ["mcp", "model-context-protocol", "github", "github-enterprise", "git", "repositories"],
8
+ "exports": {
9
+ ".": {
10
+ "import": "./build/index.js",
11
+ "types": "./build/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "build",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "clean": "rm -rf build *.tsbuildinfo",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "github",
27
+ "github-enterprise",
28
+ "git",
29
+ "repositories"
30
+ ],
13
31
  "author": "Michal Sobieraj",
14
32
  "license": "MIT",
15
- "repository": { "type": "git", "url": "git+https://github.com/klemensms/mcp-consultant-tools.git", "directory": "packages/github-enterprise" },
16
- "engines": { "node": ">=16.0.0" },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/klemensms/mcp-consultant-tools.git",
36
+ "directory": "packages/github-enterprise"
37
+ },
38
+ "engines": {
39
+ "node": ">=16.0.0"
40
+ },
17
41
  "dependencies": {
18
42
  "@mcp-consultant-tools/core": "^1.0.0",
19
43
  "@modelcontextprotocol/sdk": "^1.0.4",
@@ -22,5 +46,12 @@
22
46
  "jsonwebtoken": "^9.0.2",
23
47
  "zod": "^3.24.1"
24
48
  },
25
- "devDependencies": { "@types/jsonwebtoken": "^9.0.10", "@types/node": "^22.10.5", "typescript": "^5.8.2" }
49
+ "devDependencies": {
50
+ "@types/jsonwebtoken": "^9.0.10",
51
+ "@types/node": "^22.10.5",
52
+ "typescript": "^5.8.2"
53
+ },
54
+ "bin": {
55
+ "mcp-ghe": "./build/index.js"
56
+ }
26
57
  }