@ric_/forgejo-mcp 0.1.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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/dist/client.d.ts +35 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +107 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +10 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +86 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/http.d.ts +3 -0
  12. package/dist/http.d.ts.map +1 -0
  13. package/dist/http.js +108 -0
  14. package/dist/http.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +16 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/server.d.ts +4 -0
  20. package/dist/server.d.ts.map +1 -0
  21. package/dist/server.js +27 -0
  22. package/dist/server.js.map +1 -0
  23. package/dist/tools/admin.d.ts +4 -0
  24. package/dist/tools/admin.d.ts.map +1 -0
  25. package/dist/tools/admin.js +261 -0
  26. package/dist/tools/admin.js.map +1 -0
  27. package/dist/tools/helpers.d.ts +16 -0
  28. package/dist/tools/helpers.d.ts.map +1 -0
  29. package/dist/tools/helpers.js +30 -0
  30. package/dist/tools/helpers.js.map +1 -0
  31. package/dist/tools/issues.d.ts +4 -0
  32. package/dist/tools/issues.d.ts.map +1 -0
  33. package/dist/tools/issues.js +337 -0
  34. package/dist/tools/issues.js.map +1 -0
  35. package/dist/tools/organizations.d.ts +4 -0
  36. package/dist/tools/organizations.d.ts.map +1 -0
  37. package/dist/tools/organizations.js +232 -0
  38. package/dist/tools/organizations.js.map +1 -0
  39. package/dist/tools/pullrequests.d.ts +4 -0
  40. package/dist/tools/pullrequests.d.ts.map +1 -0
  41. package/dist/tools/pullrequests.js +251 -0
  42. package/dist/tools/pullrequests.js.map +1 -0
  43. package/dist/tools/repository.d.ts +4 -0
  44. package/dist/tools/repository.d.ts.map +1 -0
  45. package/dist/tools/repository.js +437 -0
  46. package/dist/tools/repository.js.map +1 -0
  47. package/dist/tools/users.d.ts +4 -0
  48. package/dist/tools/users.d.ts.map +1 -0
  49. package/dist/tools/users.js +204 -0
  50. package/dist/tools/users.js.map +1 -0
  51. package/dist/validation.d.ts +35 -0
  52. package/dist/validation.d.ts.map +1 -0
  53. package/dist/validation.js +68 -0
  54. package/dist/validation.js.map +1 -0
  55. package/package.json +49 -0
@@ -0,0 +1,437 @@
1
+ import { z } from "zod";
2
+ import { formatResponse, formatError } from "./helpers.js";
3
+ import { zOwner, zRepo, zBranch, zFilePath, zPage, zLimit, zTitle, zBody, zSha, zSearchQuery } from "../validation.js";
4
+ export function registerRepositoryTools(server, client) {
5
+ // 1. search_repos
6
+ server.tool("search_repos", "Search for repositories on the Forgejo instance", {
7
+ q: zSearchQuery.optional(),
8
+ page: zPage,
9
+ limit: zLimit,
10
+ }, async (params) => {
11
+ try {
12
+ const data = await client.get("/repos/search", {
13
+ q: params.q,
14
+ page: params.page,
15
+ limit: params.limit,
16
+ });
17
+ return formatResponse(data);
18
+ }
19
+ catch (err) {
20
+ return formatError(err);
21
+ }
22
+ });
23
+ // 2. get_repo
24
+ server.tool("get_repo", "Get details of a repository by owner and name", {
25
+ owner: zOwner,
26
+ repo: zRepo,
27
+ }, async (params) => {
28
+ try {
29
+ const data = await client.get(`/repos/${params.owner}/${params.repo}`);
30
+ return formatResponse(data);
31
+ }
32
+ catch (err) {
33
+ return formatError(err);
34
+ }
35
+ });
36
+ // 3. create_repo
37
+ server.tool("create_repo", "Create a new repository for the authenticated user", {
38
+ name: zTitle.describe("Name of the new repository"),
39
+ description: zBody.optional(),
40
+ private: z.boolean().optional().describe("Whether the repository is private"),
41
+ auto_init: z.boolean().optional().describe("Initialize the repository with a README"),
42
+ default_branch: zBranch.optional(),
43
+ }, async (params) => {
44
+ try {
45
+ const data = await client.post("/user/repos", {
46
+ name: params.name,
47
+ description: params.description,
48
+ private: params.private,
49
+ auto_init: params.auto_init,
50
+ default_branch: params.default_branch,
51
+ });
52
+ return formatResponse(data);
53
+ }
54
+ catch (err) {
55
+ return formatError(err);
56
+ }
57
+ });
58
+ // 4. create_org_repo
59
+ server.tool("create_org_repo", "Create a new repository in an organization", {
60
+ org: zOwner,
61
+ name: zTitle.describe("Name of the new repository"),
62
+ description: zBody.optional(),
63
+ private: z.boolean().optional().describe("Whether the repository is private"),
64
+ auto_init: z.boolean().optional().describe("Initialize the repository with a README"),
65
+ }, async (params) => {
66
+ try {
67
+ const data = await client.post(`/orgs/${params.org}/repos`, {
68
+ name: params.name,
69
+ description: params.description,
70
+ private: params.private,
71
+ auto_init: params.auto_init,
72
+ });
73
+ return formatResponse(data);
74
+ }
75
+ catch (err) {
76
+ return formatError(err);
77
+ }
78
+ });
79
+ // 5. delete_repo
80
+ server.tool("delete_repo", "Delete a repository by owner and name", {
81
+ owner: zOwner,
82
+ repo: zRepo,
83
+ }, async (params) => {
84
+ try {
85
+ const data = await client.delete(`/repos/${params.owner}/${params.repo}`);
86
+ return formatResponse(data);
87
+ }
88
+ catch (err) {
89
+ return formatError(err);
90
+ }
91
+ });
92
+ // 6. fork_repo
93
+ server.tool("fork_repo", "Fork a repository", {
94
+ owner: zOwner,
95
+ repo: zRepo,
96
+ organization: zOwner.optional(),
97
+ name: zTitle.optional().describe("Name for the forked repository"),
98
+ }, async (params) => {
99
+ try {
100
+ const data = await client.post(`/repos/${params.owner}/${params.repo}/forks`, {
101
+ organization: params.organization,
102
+ name: params.name,
103
+ });
104
+ return formatResponse(data);
105
+ }
106
+ catch (err) {
107
+ return formatError(err);
108
+ }
109
+ });
110
+ // 7. list_branches
111
+ server.tool("list_branches", "List branches of a repository", {
112
+ owner: zOwner,
113
+ repo: zRepo,
114
+ page: zPage,
115
+ limit: zLimit,
116
+ }, async (params) => {
117
+ try {
118
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/branches`, {
119
+ page: params.page,
120
+ limit: params.limit,
121
+ });
122
+ return formatResponse(data);
123
+ }
124
+ catch (err) {
125
+ return formatError(err);
126
+ }
127
+ });
128
+ // 8. get_branch
129
+ server.tool("get_branch", "Get details of a specific branch", {
130
+ owner: zOwner,
131
+ repo: zRepo,
132
+ branch: zBranch,
133
+ }, async (params) => {
134
+ try {
135
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/branches/${params.branch}`);
136
+ return formatResponse(data);
137
+ }
138
+ catch (err) {
139
+ return formatError(err);
140
+ }
141
+ });
142
+ // 9. create_branch
143
+ server.tool("create_branch", "Create a new branch in a repository", {
144
+ owner: zOwner,
145
+ repo: zRepo,
146
+ new_branch_name: zBranch,
147
+ old_branch_name: zBranch.optional(),
148
+ }, async (params) => {
149
+ try {
150
+ const data = await client.post(`/repos/${params.owner}/${params.repo}/branches`, {
151
+ new_branch_name: params.new_branch_name,
152
+ old_branch_name: params.old_branch_name,
153
+ });
154
+ return formatResponse(data);
155
+ }
156
+ catch (err) {
157
+ return formatError(err);
158
+ }
159
+ });
160
+ // 10. delete_branch
161
+ server.tool("delete_branch", "Delete a branch from a repository", {
162
+ owner: zOwner,
163
+ repo: zRepo,
164
+ branch: zBranch,
165
+ }, async (params) => {
166
+ try {
167
+ const data = await client.delete(`/repos/${params.owner}/${params.repo}/branches/${params.branch}`);
168
+ return formatResponse(data);
169
+ }
170
+ catch (err) {
171
+ return formatError(err);
172
+ }
173
+ });
174
+ // 11. list_repo_commits
175
+ server.tool("list_repo_commits", "List commits in a repository", {
176
+ owner: zOwner,
177
+ repo: zRepo,
178
+ sha: z.string().optional().describe("SHA or branch name to list commits from"),
179
+ page: zPage,
180
+ limit: zLimit,
181
+ }, async (params) => {
182
+ try {
183
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/commits`, {
184
+ sha: params.sha,
185
+ page: params.page,
186
+ limit: params.limit,
187
+ });
188
+ return formatResponse(data);
189
+ }
190
+ catch (err) {
191
+ return formatError(err);
192
+ }
193
+ });
194
+ // 12. get_file_contents
195
+ server.tool("get_file_contents", "Get the contents of a file in a repository", {
196
+ owner: zOwner,
197
+ repo: zRepo,
198
+ filepath: zFilePath,
199
+ ref: z.string().max(255).optional().describe("Branch, tag, or commit SHA to get the file from"),
200
+ }, async (params) => {
201
+ try {
202
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/contents/${params.filepath}`, { ref: params.ref });
203
+ return formatResponse(data);
204
+ }
205
+ catch (err) {
206
+ return formatError(err);
207
+ }
208
+ });
209
+ // 13. create_file
210
+ server.tool("create_file", "Create a new file in a repository", {
211
+ owner: zOwner,
212
+ repo: zRepo,
213
+ filepath: zFilePath,
214
+ content: z.string().max(10_485_760).describe("Base64 encoded file content"),
215
+ message: zTitle.describe("Commit message for creating the file"),
216
+ branch: zBranch.optional(),
217
+ new_branch: zBranch.optional(),
218
+ }, async (params) => {
219
+ try {
220
+ const data = await client.post(`/repos/${params.owner}/${params.repo}/contents/${params.filepath}`, {
221
+ content: params.content,
222
+ message: params.message,
223
+ branch: params.branch,
224
+ new_branch: params.new_branch,
225
+ });
226
+ return formatResponse(data);
227
+ }
228
+ catch (err) {
229
+ return formatError(err);
230
+ }
231
+ });
232
+ // 14. update_file
233
+ server.tool("update_file", "Update an existing file in a repository", {
234
+ owner: zOwner,
235
+ repo: zRepo,
236
+ filepath: zFilePath,
237
+ content: z.string().max(10_485_760).describe("Base64 encoded new file content"),
238
+ sha: zSha.describe("Blob SHA of the existing file (for conflict detection)"),
239
+ message: zTitle.describe("Commit message for the update"),
240
+ branch: zBranch.optional(),
241
+ }, async (params) => {
242
+ try {
243
+ const data = await client.patch(`/repos/${params.owner}/${params.repo}/contents/${params.filepath}`, {
244
+ content: params.content,
245
+ sha: params.sha,
246
+ message: params.message,
247
+ branch: params.branch,
248
+ });
249
+ return formatResponse(data);
250
+ }
251
+ catch (err) {
252
+ return formatError(err);
253
+ }
254
+ });
255
+ // 15. delete_file
256
+ server.tool("delete_file", "Delete a file from a repository", {
257
+ owner: zOwner,
258
+ repo: zRepo,
259
+ filepath: zFilePath,
260
+ sha: zSha.describe("Blob SHA of the file to delete"),
261
+ message: zTitle.describe("Commit message for the deletion"),
262
+ branch: zBranch.optional(),
263
+ }, async (params) => {
264
+ try {
265
+ const data = await client.request("DELETE", `/repos/${params.owner}/${params.repo}/contents/${params.filepath}`, {
266
+ body: {
267
+ sha: params.sha,
268
+ message: params.message,
269
+ branch: params.branch,
270
+ },
271
+ });
272
+ return formatResponse(data);
273
+ }
274
+ catch (err) {
275
+ return formatError(err);
276
+ }
277
+ });
278
+ // 16. list_releases
279
+ server.tool("list_releases", "List releases of a repository", {
280
+ owner: zOwner,
281
+ repo: zRepo,
282
+ page: zPage,
283
+ limit: zLimit,
284
+ }, async (params) => {
285
+ try {
286
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/releases`, {
287
+ page: params.page,
288
+ limit: params.limit,
289
+ });
290
+ return formatResponse(data);
291
+ }
292
+ catch (err) {
293
+ return formatError(err);
294
+ }
295
+ });
296
+ // 17. create_release
297
+ server.tool("create_release", "Create a new release for a repository", {
298
+ owner: zOwner,
299
+ repo: zRepo,
300
+ tag_name: z.string().max(255).describe("Tag name for the release"),
301
+ name: zTitle.optional().describe("Title of the release"),
302
+ body: zBody.optional(),
303
+ draft: z.boolean().optional().describe("Whether this is a draft release"),
304
+ prerelease: z.boolean().optional().describe("Whether this is a pre-release"),
305
+ target_commitish: z.string().max(255).optional().describe("Branch or commit SHA to tag"),
306
+ }, async (params) => {
307
+ try {
308
+ const data = await client.post(`/repos/${params.owner}/${params.repo}/releases`, {
309
+ tag_name: params.tag_name,
310
+ name: params.name,
311
+ body: params.body,
312
+ draft: params.draft,
313
+ prerelease: params.prerelease,
314
+ target_commitish: params.target_commitish,
315
+ });
316
+ return formatResponse(data);
317
+ }
318
+ catch (err) {
319
+ return formatError(err);
320
+ }
321
+ });
322
+ // 18. list_tags
323
+ server.tool("list_tags", "List tags of a repository", {
324
+ owner: zOwner,
325
+ repo: zRepo,
326
+ page: zPage,
327
+ limit: zLimit,
328
+ }, async (params) => {
329
+ try {
330
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/tags`, {
331
+ page: params.page,
332
+ limit: params.limit,
333
+ });
334
+ return formatResponse(data);
335
+ }
336
+ catch (err) {
337
+ return formatError(err);
338
+ }
339
+ });
340
+ // 19. list_repo_topics
341
+ server.tool("list_repo_topics", "Get the list of topics for a repository", {
342
+ owner: zOwner,
343
+ repo: zRepo,
344
+ }, async (params) => {
345
+ try {
346
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/topics`);
347
+ return formatResponse(data);
348
+ }
349
+ catch (err) {
350
+ return formatError(err);
351
+ }
352
+ });
353
+ // 20. update_repo_topics
354
+ server.tool("update_repo_topics", "Set the topics for a repository (replaces all existing topics)", {
355
+ owner: zOwner,
356
+ repo: zRepo,
357
+ topics: z.array(z.string()).describe("List of topic names to set"),
358
+ }, async (params) => {
359
+ try {
360
+ const data = await client.patch(`/repos/${params.owner}/${params.repo}/topics`, {
361
+ topics: params.topics,
362
+ });
363
+ return formatResponse(data);
364
+ }
365
+ catch (err) {
366
+ return formatError(err);
367
+ }
368
+ });
369
+ // 21. list_forks
370
+ server.tool("list_forks", "List forks of a repository", {
371
+ owner: zOwner,
372
+ repo: zRepo,
373
+ page: zPage,
374
+ limit: zLimit,
375
+ }, async (params) => {
376
+ try {
377
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/forks`, {
378
+ page: params.page,
379
+ limit: params.limit,
380
+ });
381
+ return formatResponse(data);
382
+ }
383
+ catch (err) {
384
+ return formatError(err);
385
+ }
386
+ });
387
+ // 22. list_collaborators
388
+ server.tool("list_collaborators", "List collaborators of a repository", {
389
+ owner: zOwner,
390
+ repo: zRepo,
391
+ }, async (params) => {
392
+ try {
393
+ const data = await client.get(`/repos/${params.owner}/${params.repo}/collaborators`);
394
+ return formatResponse(data);
395
+ }
396
+ catch (err) {
397
+ return formatError(err);
398
+ }
399
+ });
400
+ // 23. add_collaborator
401
+ server.tool("add_collaborator", "Add a collaborator to a repository", {
402
+ owner: zOwner,
403
+ repo: zRepo,
404
+ collaborator: zOwner,
405
+ permission: z.enum(["read", "write", "admin"]).optional(),
406
+ }, async (params) => {
407
+ try {
408
+ const data = await client.patch(`/repos/${params.owner}/${params.repo}/collaborators/${params.collaborator}`, { permission: params.permission });
409
+ return formatResponse(data);
410
+ }
411
+ catch (err) {
412
+ return formatError(err);
413
+ }
414
+ });
415
+ // 24. transfer_repo
416
+ server.tool("transfer_repo", "Transfer a repository to a new owner", {
417
+ owner: zOwner,
418
+ repo: zRepo,
419
+ new_owner: zOwner,
420
+ team_ids: z
421
+ .array(z.number())
422
+ .optional()
423
+ .describe("Team IDs to add to the repository after transfer"),
424
+ }, async (params) => {
425
+ try {
426
+ const data = await client.post(`/repos/${params.owner}/${params.repo}/transfer`, {
427
+ new_owner: params.new_owner,
428
+ team_ids: params.team_ids,
429
+ });
430
+ return formatResponse(data);
431
+ }
432
+ catch (err) {
433
+ return formatError(err);
434
+ }
435
+ });
436
+ }
437
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/tools/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ForgejoClient } from "../client.js";
3
+ export declare function registerUserTools(server: McpServer, client: ForgejoClient): void;
4
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAuQhF"}
@@ -0,0 +1,204 @@
1
+ import { z } from "zod";
2
+ import { formatResponse, formatError } from "./helpers.js";
3
+ import { zOwner, zRepo, zPage, zLimit, zSearchQuery } from "../validation.js";
4
+ export function registerUserTools(server, client) {
5
+ // 1. get_authenticated_user
6
+ server.tool("get_authenticated_user", "Get the currently authenticated user", {}, async () => {
7
+ try {
8
+ const data = await client.get("/user");
9
+ return formatResponse(data);
10
+ }
11
+ catch (err) {
12
+ return formatError(err);
13
+ }
14
+ });
15
+ // 2. get_user
16
+ server.tool("get_user", "Get a user's profile by username", {
17
+ username: zOwner.describe("Username of the user"),
18
+ }, async (params) => {
19
+ try {
20
+ const data = await client.get(`/users/${params.username}`);
21
+ return formatResponse(data);
22
+ }
23
+ catch (err) {
24
+ return formatError(err);
25
+ }
26
+ });
27
+ // 3. list_user_repos
28
+ server.tool("list_user_repos", "List repositories owned by a user", {
29
+ username: zOwner.describe("Username of the user"),
30
+ page: zPage,
31
+ limit: zLimit,
32
+ }, async (params) => {
33
+ try {
34
+ const data = await client.get(`/users/${params.username}/repos`, {
35
+ page: params.page,
36
+ limit: params.limit,
37
+ });
38
+ return formatResponse(data);
39
+ }
40
+ catch (err) {
41
+ return formatError(err);
42
+ }
43
+ });
44
+ // 4. list_user_orgs
45
+ server.tool("list_user_orgs", "List organizations a user belongs to", {
46
+ username: zOwner.describe("Username of the user"),
47
+ page: zPage,
48
+ limit: zLimit,
49
+ }, async (params) => {
50
+ try {
51
+ const data = await client.get(`/users/${params.username}/orgs`, {
52
+ page: params.page,
53
+ limit: params.limit,
54
+ });
55
+ return formatResponse(data);
56
+ }
57
+ catch (err) {
58
+ return formatError(err);
59
+ }
60
+ });
61
+ // 5. search_users
62
+ server.tool("search_users", "Search for users on the Forgejo instance", {
63
+ q: zSearchQuery.describe("Search query string"),
64
+ page: zPage,
65
+ limit: zLimit,
66
+ }, async (params) => {
67
+ try {
68
+ const data = await client.get("/users/search", {
69
+ q: params.q,
70
+ page: params.page,
71
+ limit: params.limit,
72
+ });
73
+ return formatResponse(data);
74
+ }
75
+ catch (err) {
76
+ return formatError(err);
77
+ }
78
+ });
79
+ // 6. list_followers
80
+ server.tool("list_followers", "List a user's followers", {
81
+ username: zOwner.describe("Username of the user"),
82
+ page: zPage,
83
+ limit: zLimit,
84
+ }, async (params) => {
85
+ try {
86
+ const data = await client.get(`/users/${params.username}/followers`, {
87
+ page: params.page,
88
+ limit: params.limit,
89
+ });
90
+ return formatResponse(data);
91
+ }
92
+ catch (err) {
93
+ return formatError(err);
94
+ }
95
+ });
96
+ // 7. list_following
97
+ server.tool("list_following", "List who a user is following", {
98
+ username: zOwner.describe("Username of the user"),
99
+ page: zPage,
100
+ limit: zLimit,
101
+ }, async (params) => {
102
+ try {
103
+ const data = await client.get(`/users/${params.username}/following`, {
104
+ page: params.page,
105
+ limit: params.limit,
106
+ });
107
+ return formatResponse(data);
108
+ }
109
+ catch (err) {
110
+ return formatError(err);
111
+ }
112
+ });
113
+ // 8. list_user_starred
114
+ server.tool("list_user_starred", "List repositories starred by a user", {
115
+ username: zOwner.describe("Username of the user"),
116
+ page: zPage,
117
+ limit: zLimit,
118
+ }, async (params) => {
119
+ try {
120
+ const data = await client.get(`/users/${params.username}/starred`, {
121
+ page: params.page,
122
+ limit: params.limit,
123
+ });
124
+ return formatResponse(data);
125
+ }
126
+ catch (err) {
127
+ return formatError(err);
128
+ }
129
+ });
130
+ // 9. list_my_starred
131
+ server.tool("list_my_starred", "List repositories starred by the authenticated user", {
132
+ page: zPage,
133
+ limit: zLimit,
134
+ }, async (params) => {
135
+ try {
136
+ const data = await client.get("/user/starred", {
137
+ page: params.page,
138
+ limit: params.limit,
139
+ });
140
+ return formatResponse(data);
141
+ }
142
+ catch (err) {
143
+ return formatError(err);
144
+ }
145
+ });
146
+ // 10. star_repo
147
+ server.tool("star_repo", "Star a repository for the authenticated user", {
148
+ owner: zOwner,
149
+ repo: zRepo,
150
+ }, async (params) => {
151
+ try {
152
+ const data = await client.put(`/user/starred/${params.owner}/${params.repo}`);
153
+ return formatResponse(data);
154
+ }
155
+ catch (err) {
156
+ return formatError(err);
157
+ }
158
+ });
159
+ // 11. unstar_repo
160
+ server.tool("unstar_repo", "Unstar a repository for the authenticated user", {
161
+ owner: zOwner,
162
+ repo: zRepo,
163
+ }, async (params) => {
164
+ try {
165
+ const data = await client.delete(`/user/starred/${params.owner}/${params.repo}`);
166
+ return formatResponse(data);
167
+ }
168
+ catch (err) {
169
+ return formatError(err);
170
+ }
171
+ });
172
+ // 12. list_my_notifications
173
+ server.tool("list_my_notifications", "List notifications for the authenticated user", {
174
+ page: zPage,
175
+ limit: zLimit,
176
+ status_types: z
177
+ .enum(["unread", "read", "pinned"])
178
+ .optional()
179
+ .describe("Filter by status type: unread, read, or pinned"),
180
+ }, async (params) => {
181
+ try {
182
+ const data = await client.get("/notifications", {
183
+ page: params.page,
184
+ limit: params.limit,
185
+ status_types: params.status_types,
186
+ });
187
+ return formatResponse(data);
188
+ }
189
+ catch (err) {
190
+ return formatError(err);
191
+ }
192
+ });
193
+ // 13. mark_notifications_read
194
+ server.tool("mark_notifications_read", "Mark all notifications as read for the authenticated user", {}, async () => {
195
+ try {
196
+ const data = await client.put("/notifications");
197
+ return formatResponse(data);
198
+ }
199
+ catch (err) {
200
+ return formatError(err);
201
+ }
202
+ });
203
+ }
204
+ //# sourceMappingURL=users.js.map