@zhanglc77/bitbucket-mcp-server 1.0.1

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 (56) hide show
  1. package/CHANGELOG.md +280 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1090 -0
  4. package/build/handlers/branch-handlers.d.ts +55 -0
  5. package/build/handlers/branch-handlers.d.ts.map +1 -0
  6. package/build/handlers/branch-handlers.js +522 -0
  7. package/build/handlers/branch-handlers.js.map +1 -0
  8. package/build/handlers/file-handlers.d.ts +33 -0
  9. package/build/handlers/file-handlers.d.ts.map +1 -0
  10. package/build/handlers/file-handlers.js +308 -0
  11. package/build/handlers/file-handlers.js.map +1 -0
  12. package/build/handlers/pull-request-handlers.d.ts +101 -0
  13. package/build/handlers/pull-request-handlers.d.ts.map +1 -0
  14. package/build/handlers/pull-request-handlers.js +955 -0
  15. package/build/handlers/pull-request-handlers.js.map +1 -0
  16. package/build/handlers/review-handlers.d.ts +67 -0
  17. package/build/handlers/review-handlers.d.ts.map +1 -0
  18. package/build/handlers/review-handlers.js +252 -0
  19. package/build/handlers/review-handlers.js.map +1 -0
  20. package/build/handlers/search-handlers.d.ts +20 -0
  21. package/build/handlers/search-handlers.d.ts.map +1 -0
  22. package/build/handlers/search-handlers.js +151 -0
  23. package/build/handlers/search-handlers.js.map +1 -0
  24. package/build/index.d.ts +3 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +120 -0
  27. package/build/index.js.map +1 -0
  28. package/build/tools/definitions.d.ts +1191 -0
  29. package/build/tools/definitions.d.ts.map +1 -0
  30. package/build/tools/definitions.js +655 -0
  31. package/build/tools/definitions.js.map +1 -0
  32. package/build/types/bitbucket.d.ts +483 -0
  33. package/build/types/bitbucket.d.ts.map +1 -0
  34. package/build/types/bitbucket.js +2 -0
  35. package/build/types/bitbucket.js.map +1 -0
  36. package/build/types/guards.d.ts +140 -0
  37. package/build/types/guards.d.ts.map +1 -0
  38. package/build/types/guards.js +140 -0
  39. package/build/types/guards.js.map +1 -0
  40. package/build/utils/api-client.d.ts +22 -0
  41. package/build/utils/api-client.d.ts.map +1 -0
  42. package/build/utils/api-client.js +111 -0
  43. package/build/utils/api-client.js.map +1 -0
  44. package/build/utils/diff-parser.d.ts +42 -0
  45. package/build/utils/diff-parser.d.ts.map +1 -0
  46. package/build/utils/diff-parser.js +165 -0
  47. package/build/utils/diff-parser.js.map +1 -0
  48. package/build/utils/formatters.d.ts +8 -0
  49. package/build/utils/formatters.d.ts.map +1 -0
  50. package/build/utils/formatters.js +207 -0
  51. package/build/utils/formatters.js.map +1 -0
  52. package/build/utils/suggestion-formatter.d.ts +6 -0
  53. package/build/utils/suggestion-formatter.d.ts.map +1 -0
  54. package/build/utils/suggestion-formatter.js +17 -0
  55. package/build/utils/suggestion-formatter.js.map +1 -0
  56. package/package.json +55 -0
@@ -0,0 +1,308 @@
1
+ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
2
+ import { isListDirectoryContentArgs, isGetFileContentArgs } from '../types/guards.js';
3
+ import * as path from 'path';
4
+ export class FileHandlers {
5
+ apiClient;
6
+ baseUrl;
7
+ // Default lines by file extension
8
+ DEFAULT_LINES_BY_EXT = {
9
+ '.yml': 200, '.yaml': 200, '.json': 200, // Config files
10
+ '.md': 300, '.txt': 300, // Docs
11
+ '.ts': 500, '.js': 500, '.py': 500, // Code
12
+ '.tsx': 500, '.jsx': 500, '.java': 500, // More code
13
+ '.log': -100 // Last 100 lines for logs
14
+ };
15
+ constructor(apiClient, baseUrl) {
16
+ this.apiClient = apiClient;
17
+ this.baseUrl = baseUrl;
18
+ }
19
+ async handleListDirectoryContent(args) {
20
+ if (!isListDirectoryContentArgs(args)) {
21
+ throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments for list_directory_content');
22
+ }
23
+ const { workspace, repository, path: dirPath = '', branch } = args;
24
+ try {
25
+ let apiPath;
26
+ let params = {};
27
+ let response;
28
+ if (this.apiClient.getIsServer()) {
29
+ // Bitbucket Server API
30
+ apiPath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/browse`;
31
+ if (dirPath) {
32
+ apiPath += `/${dirPath}`;
33
+ }
34
+ if (branch) {
35
+ params.at = `refs/heads/${branch}`;
36
+ }
37
+ response = await this.apiClient.makeRequest('get', apiPath, undefined, { params });
38
+ }
39
+ else {
40
+ // Bitbucket Cloud API
41
+ const branchOrDefault = branch || 'HEAD';
42
+ apiPath = `/repositories/${workspace}/${repository}/src/${branchOrDefault}`;
43
+ if (dirPath) {
44
+ apiPath += `/${dirPath}`;
45
+ }
46
+ response = await this.apiClient.makeRequest('get', apiPath);
47
+ }
48
+ // Format the response
49
+ let contents = [];
50
+ let actualBranch = branch;
51
+ if (this.apiClient.getIsServer()) {
52
+ // Bitbucket Server response
53
+ const entries = response.children?.values || [];
54
+ contents = entries.map((entry) => ({
55
+ name: entry.path.name,
56
+ type: entry.type === 'FILE' ? 'file' : 'directory',
57
+ size: entry.size,
58
+ path: dirPath ? `${dirPath}/${entry.path.name}` : entry.path.name
59
+ }));
60
+ // Get the actual branch from the response if available
61
+ if (!branch && response.path?.components) {
62
+ // Server returns default branch info in the response
63
+ actualBranch = 'default';
64
+ }
65
+ }
66
+ else {
67
+ // Bitbucket Cloud response
68
+ const entries = response.values || [];
69
+ contents = entries.map((entry) => ({
70
+ name: entry.path.split('/').pop() || entry.path,
71
+ type: entry.type === 'commit_file' ? 'file' : 'directory',
72
+ size: entry.size,
73
+ path: entry.path
74
+ }));
75
+ // Cloud returns the branch in the response
76
+ actualBranch = branch || response.commit?.branch || 'main';
77
+ }
78
+ return {
79
+ content: [
80
+ {
81
+ type: 'text',
82
+ text: JSON.stringify({
83
+ path: dirPath || '/',
84
+ branch: actualBranch,
85
+ contents,
86
+ total_items: contents.length
87
+ }, null, 2),
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ catch (error) {
93
+ return this.apiClient.handleApiError(error, `listing directory '${dirPath}' in ${workspace}/${repository}`);
94
+ }
95
+ }
96
+ async handleGetFileContent(args) {
97
+ if (!isGetFileContentArgs(args)) {
98
+ throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments for get_file_content');
99
+ }
100
+ const { workspace, repository, file_path, branch, start_line, line_count, full_content = false } = args;
101
+ try {
102
+ let fileContent;
103
+ let fileMetadata = {};
104
+ const fileSizeLimit = 1024 * 1024; // 1MB default limit
105
+ if (this.apiClient.getIsServer()) {
106
+ // Bitbucket Server - get file metadata first to check size
107
+ const browsePath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/browse/${file_path}`;
108
+ const browseParams = {};
109
+ if (branch) {
110
+ browseParams.at = `refs/heads/${branch}`;
111
+ }
112
+ try {
113
+ const metadataResponse = await this.apiClient.makeRequest('get', browsePath, undefined, { params: browseParams });
114
+ fileMetadata = {
115
+ size: metadataResponse.size || 0,
116
+ path: file_path
117
+ };
118
+ // Check file size
119
+ if (!full_content && fileMetadata.size > fileSizeLimit) {
120
+ return {
121
+ content: [
122
+ {
123
+ type: 'text',
124
+ text: JSON.stringify({
125
+ error: 'File too large',
126
+ file_path,
127
+ size: fileMetadata.size,
128
+ size_mb: (fileMetadata.size / (1024 * 1024)).toFixed(2),
129
+ message: `File exceeds size limit. Use full_content: true to force retrieval or use start_line/line_count for partial content.`
130
+ }, null, 2),
131
+ },
132
+ ],
133
+ isError: true,
134
+ };
135
+ }
136
+ }
137
+ catch (e) {
138
+ // If browse fails, continue to try raw endpoint
139
+ }
140
+ // Get raw content
141
+ const rawPath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/raw/${file_path}`;
142
+ const rawParams = {};
143
+ if (branch) {
144
+ rawParams.at = `refs/heads/${branch}`;
145
+ }
146
+ const response = await this.apiClient.makeRequest('get', rawPath, undefined, {
147
+ params: rawParams,
148
+ responseType: 'text',
149
+ headers: { 'Accept': 'text/plain' }
150
+ });
151
+ fileContent = response;
152
+ }
153
+ else {
154
+ // Bitbucket Cloud - first get metadata
155
+ const branchOrDefault = branch || 'HEAD';
156
+ const metaPath = `/repositories/${workspace}/${repository}/src/${branchOrDefault}/${file_path}`;
157
+ const metadataResponse = await this.apiClient.makeRequest('get', metaPath);
158
+ fileMetadata = {
159
+ size: metadataResponse.size,
160
+ encoding: metadataResponse.encoding,
161
+ path: metadataResponse.path,
162
+ commit: metadataResponse.commit
163
+ };
164
+ // Check file size
165
+ if (!full_content && fileMetadata.size > fileSizeLimit) {
166
+ return {
167
+ content: [
168
+ {
169
+ type: 'text',
170
+ text: JSON.stringify({
171
+ error: 'File too large',
172
+ file_path,
173
+ size: fileMetadata.size,
174
+ size_mb: (fileMetadata.size / (1024 * 1024)).toFixed(2),
175
+ message: `File exceeds size limit. Use full_content: true to force retrieval or use start_line/line_count for partial content.`
176
+ }, null, 2),
177
+ },
178
+ ],
179
+ isError: true,
180
+ };
181
+ }
182
+ // Follow the download link to get actual content
183
+ const downloadUrl = metadataResponse.links.download.href;
184
+ const downloadResponse = await this.apiClient.makeRequest('get', downloadUrl, undefined, {
185
+ baseURL: '', // Use full URL
186
+ responseType: 'text',
187
+ headers: { 'Accept': 'text/plain' }
188
+ });
189
+ fileContent = downloadResponse;
190
+ }
191
+ // Apply line filtering if requested
192
+ let processedContent = fileContent;
193
+ let lineInfo = null;
194
+ if (!full_content || start_line !== undefined || line_count !== undefined) {
195
+ const lines = fileContent.split('\n');
196
+ const totalLines = lines.length;
197
+ // Determine default line count based on file extension
198
+ const ext = path.extname(file_path).toLowerCase();
199
+ const defaultLineCount = this.DEFAULT_LINES_BY_EXT[ext] || 500;
200
+ const shouldUseTail = defaultLineCount < 0;
201
+ // Calculate start and end indices
202
+ let startIdx;
203
+ let endIdx;
204
+ if (start_line !== undefined) {
205
+ if (start_line < 0) {
206
+ // Negative start_line means from end
207
+ startIdx = Math.max(0, totalLines + start_line);
208
+ endIdx = totalLines;
209
+ }
210
+ else {
211
+ // 1-based to 0-based index
212
+ startIdx = Math.max(0, start_line - 1);
213
+ endIdx = startIdx + (line_count || Math.abs(defaultLineCount));
214
+ }
215
+ }
216
+ else if (!full_content && fileMetadata.size > 50 * 1024) {
217
+ // Auto-truncate large files
218
+ if (shouldUseTail) {
219
+ startIdx = Math.max(0, totalLines + defaultLineCount);
220
+ endIdx = totalLines;
221
+ }
222
+ else {
223
+ startIdx = 0;
224
+ endIdx = Math.abs(defaultLineCount);
225
+ }
226
+ }
227
+ else {
228
+ // Return full content for small files
229
+ startIdx = 0;
230
+ endIdx = totalLines;
231
+ }
232
+ // Ensure indices are within bounds
233
+ startIdx = Math.max(0, Math.min(startIdx, totalLines));
234
+ endIdx = Math.max(startIdx, Math.min(endIdx, totalLines));
235
+ // Extract the requested lines
236
+ const selectedLines = lines.slice(startIdx, endIdx);
237
+ processedContent = selectedLines.join('\n');
238
+ lineInfo = {
239
+ total_lines: totalLines,
240
+ returned_lines: {
241
+ start: startIdx + 1,
242
+ end: endIdx
243
+ },
244
+ truncated: startIdx > 0 || endIdx < totalLines,
245
+ message: endIdx < totalLines
246
+ ? `Showing lines ${startIdx + 1}-${endIdx} of ${totalLines}. File size: ${(fileMetadata.size / 1024).toFixed(1)}KB`
247
+ : null
248
+ };
249
+ }
250
+ // Build response
251
+ const response = {
252
+ file_path,
253
+ branch: branch || (this.apiClient.getIsServer() ? 'default' : 'main'),
254
+ size: fileMetadata.size || fileContent.length,
255
+ encoding: fileMetadata.encoding || 'utf-8',
256
+ content: processedContent
257
+ };
258
+ if (lineInfo) {
259
+ response.line_info = lineInfo;
260
+ }
261
+ if (fileMetadata.commit) {
262
+ response.last_modified = {
263
+ commit_id: fileMetadata.commit.hash,
264
+ author: fileMetadata.commit.author?.user?.display_name || fileMetadata.commit.author?.raw,
265
+ date: fileMetadata.commit.date,
266
+ message: fileMetadata.commit.message
267
+ };
268
+ }
269
+ return {
270
+ content: [
271
+ {
272
+ type: 'text',
273
+ text: JSON.stringify(response, null, 2),
274
+ },
275
+ ],
276
+ };
277
+ }
278
+ catch (error) {
279
+ // Handle specific not found error
280
+ if (error.status === 404) {
281
+ return {
282
+ content: [
283
+ {
284
+ type: 'text',
285
+ text: `File '${file_path}' not found in ${workspace}/${repository}${branch ? ` on branch '${branch}'` : ''}`,
286
+ },
287
+ ],
288
+ isError: true,
289
+ };
290
+ }
291
+ return this.apiClient.handleApiError(error, `getting file content for '${file_path}' in ${workspace}/${repository}`);
292
+ }
293
+ }
294
+ // Helper method to get default line count based on file extension
295
+ getDefaultLines(filePath, fileSize) {
296
+ // Small files: return full content
297
+ if (fileSize < 50 * 1024) { // 50KB
298
+ return { full: true };
299
+ }
300
+ const ext = path.extname(filePath).toLowerCase();
301
+ const defaultLines = this.DEFAULT_LINES_BY_EXT[ext] || 500;
302
+ return {
303
+ start: defaultLines < 0 ? defaultLines : 1,
304
+ count: Math.abs(defaultLines)
305
+ };
306
+ }
307
+ }
308
+ //# sourceMappingURL=file-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-handlers.js","sourceRoot":"","sources":["../../src/handlers/file-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { BitbucketApiClient } from '../utils/api-client.js';
2
+ export declare class PullRequestHandlers {
3
+ private apiClient;
4
+ private baseUrl;
5
+ private username;
6
+ constructor(apiClient: BitbucketApiClient, baseUrl: string, username: string);
7
+ private getFilteredPullRequestDiff;
8
+ handleGetPullRequest(args: any): Promise<{
9
+ content: {
10
+ type: string;
11
+ text: string;
12
+ }[];
13
+ isError: boolean;
14
+ } | {
15
+ content: {
16
+ type: string;
17
+ text: string;
18
+ }[];
19
+ }>;
20
+ handleListPullRequests(args: any): Promise<{
21
+ content: {
22
+ type: string;
23
+ text: string;
24
+ }[];
25
+ isError: boolean;
26
+ } | {
27
+ content: {
28
+ type: string;
29
+ text: string;
30
+ }[];
31
+ }>;
32
+ handleCreatePullRequest(args: any): Promise<{
33
+ content: {
34
+ type: string;
35
+ text: string;
36
+ }[];
37
+ isError: boolean;
38
+ } | {
39
+ content: {
40
+ type: string;
41
+ text: string;
42
+ }[];
43
+ }>;
44
+ handleUpdatePullRequest(args: any): Promise<{
45
+ content: {
46
+ type: string;
47
+ text: string;
48
+ }[];
49
+ isError: boolean;
50
+ } | {
51
+ content: {
52
+ type: string;
53
+ text: string;
54
+ }[];
55
+ }>;
56
+ handleAddComment(args: any): Promise<{
57
+ content: {
58
+ type: string;
59
+ text: string;
60
+ }[];
61
+ isError: boolean;
62
+ } | {
63
+ content: {
64
+ type: string;
65
+ text: string;
66
+ }[];
67
+ }>;
68
+ handleMergePullRequest(args: any): Promise<{
69
+ content: {
70
+ type: string;
71
+ text: string;
72
+ }[];
73
+ isError: boolean;
74
+ } | {
75
+ content: {
76
+ type: string;
77
+ text: string;
78
+ }[];
79
+ }>;
80
+ private fetchPullRequestComments;
81
+ private fetchPullRequestFileChanges;
82
+ private resolveLineFromCode;
83
+ private findCodeMatches;
84
+ private calculateConfidence;
85
+ private getPreview;
86
+ private extractContext;
87
+ private selectBestMatch;
88
+ handleListPrCommits(args: any): Promise<{
89
+ content: {
90
+ type: string;
91
+ text: string;
92
+ }[];
93
+ isError: boolean;
94
+ } | {
95
+ content: {
96
+ type: string;
97
+ text: string;
98
+ }[];
99
+ }>;
100
+ }
101
+ //# sourceMappingURL=pull-request-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-request-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/pull-request-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AA6B5D,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBAFR,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM;YAGZ,0BAA0B;IAqClC,oBAAoB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAgG9B,sBAAsB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAmFhC,uBAAuB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAmFjC,uBAAuB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IAkGjC,gBAAgB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;IA8I1B,sBAAsB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;YA4DxB,wBAAwB;YA2HxB,2BAA2B;YAkE3B,mBAAmB;IAsGjC,OAAO,CAAC,eAAe;IAyGvB,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,eAAe;IAIjB,mBAAmB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;CAwFpC"}