@amonstack/gitea-mcp 0.1.3 → 0.2.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.
- package/README.md +56 -13
- package/README.zh-CN.md +52 -13
- package/dist/assets/instructions.md +63 -0
- package/dist/assets/resources/field-reference.md +48 -0
- package/dist/assets/resources/label-guide.md +47 -0
- package/dist/assets/resources/tool-cookbook.md +51 -0
- package/dist/assets/skills/gitea-create-issue/SKILL.md +21 -0
- package/dist/assets/skills/gitea-find-issues/SKILL.md +31 -0
- package/dist/assets/skills/gitea-label-issue/SKILL.md +28 -0
- package/dist/assets/skills/gitea-manage-labels/SKILL.md +22 -0
- package/dist/assets/skills/gitea-plan-milestones/SKILL.md +24 -0
- package/dist/assets/skills/gitea-resolve-repo/SKILL.md +18 -0
- package/dist/assets/skills/gitea-summarize-issue/SKILL.md +21 -0
- package/dist/assets/skills/gitea-update-issue/SKILL.md +21 -0
- package/dist/cli.js +23 -11
- package/dist/cli.js.map +1 -1
- package/dist/server.js +171 -26
- package/dist/server.js.map +1 -1
- package/dist/skills.d.ts +24 -0
- package/dist/skills.js +113 -0
- package/dist/skills.js.map +1 -0
- package/package.json +6 -4
package/dist/server.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { z } from "zod";
|
|
3
4
|
import { GiteaClient } from "./gitea-client.js";
|
|
4
5
|
import { ListIssuesSchema, GetIssueSchema, CreateIssueSchema, UpdateIssueSchema, DeleteIssueSchema, SearchIssuesSchema, ListCommentsSchema, CreateCommentSchema, UpdateCommentSchema, DeleteCommentSchema, ListLabelsSchema, CreateLabelSchema, UpdateLabelSchema, DeleteLabelSchema, AddIssueLabelsSchema, RemoveIssueLabelSchema, ReplaceIssueLabelsSchema, ClearIssueLabelsSchema, ListMilestonesSchema, GetMilestoneSchema, CreateMilestoneSchema, UpdateMilestoneSchema, DeleteMilestoneSchema, ResolveRepoSchema, ListMyReposSchema, } from "./tools.js";
|
|
5
6
|
import { readFile } from "node:fs/promises";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
7
8
|
import { createRequire } from "node:module";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
8
10
|
const require = createRequire(import.meta.url);
|
|
9
11
|
const pkg = require("../package.json");
|
|
10
12
|
function parseGitRemoteUrl(remoteUrl) {
|
|
@@ -20,13 +22,25 @@ function parseGitRemoteUrl(remoteUrl) {
|
|
|
20
22
|
}
|
|
21
23
|
export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
22
24
|
const client = new GiteaClient({ baseUrl, token });
|
|
25
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
26
|
+
let instructions;
|
|
27
|
+
try {
|
|
28
|
+
instructions = await readFile(join(moduleDir, "assets", "instructions.md"), "utf-8");
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Guidance assets may be absent during a partial build or `make dev` that did
|
|
32
|
+
// not run copy-assets; the server still works, just without the instructions hint.
|
|
33
|
+
}
|
|
23
34
|
const server = new McpServer({
|
|
24
35
|
name: "gitea-mcp",
|
|
25
36
|
version: pkg.version,
|
|
26
37
|
}, {
|
|
27
38
|
capabilities: {
|
|
28
39
|
tools: {},
|
|
40
|
+
prompts: {},
|
|
41
|
+
resources: {},
|
|
29
42
|
},
|
|
43
|
+
instructions,
|
|
30
44
|
});
|
|
31
45
|
function resolve(input) {
|
|
32
46
|
const owner = input.owner || defaultOwner;
|
|
@@ -38,7 +52,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
38
52
|
}
|
|
39
53
|
// ── Issue CRUD ──
|
|
40
54
|
server.registerTool("list_issues", {
|
|
41
|
-
description: "List issues in a Gitea
|
|
55
|
+
description: "List issues in one Gitea repository. Paginated: page is 1-based, limit <= 100; keep paging until a page returns fewer than `limit`. Filters: state (default open), labels (comma-separated NAMES). RISK: Gitea may include pull requests here; to list only issues use search_issues with type='issues'. Example: list_issues({ state: 'open', page: 1, limit: 50 })",
|
|
42
56
|
inputSchema: ListIssuesSchema.shape,
|
|
43
57
|
}, async (input) => {
|
|
44
58
|
const { owner, repo } = resolve(input);
|
|
@@ -48,7 +62,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
48
62
|
};
|
|
49
63
|
});
|
|
50
64
|
server.registerTool("get_issue", {
|
|
51
|
-
description: "
|
|
65
|
+
description: "Fetch one issue by its `index` — the number shown in the issue URL (e.g. #42), NOT the internal `id`. Use to read the full body, labels, assignee, or milestone of a single issue.",
|
|
52
66
|
inputSchema: GetIssueSchema.shape,
|
|
53
67
|
}, async (input) => {
|
|
54
68
|
const { owner, repo } = resolve(input);
|
|
@@ -58,7 +72,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
58
72
|
};
|
|
59
73
|
});
|
|
60
74
|
server.registerTool("create_issue", {
|
|
61
|
-
description: "Create
|
|
75
|
+
description: "Create an issue. `title` is required. `labels` takes label IDs (numbers) — call list_labels first to map names to IDs, or add labels by name after creation via add_issue_labels. `assignees` is an array of usernames. Returns the created issue including its `number`.",
|
|
62
76
|
inputSchema: CreateIssueSchema.shape,
|
|
63
77
|
}, async (input) => {
|
|
64
78
|
const { owner, repo } = resolve(input);
|
|
@@ -68,7 +82,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
68
82
|
};
|
|
69
83
|
});
|
|
70
84
|
server.registerTool("update_issue", {
|
|
71
|
-
description: "Update
|
|
85
|
+
description: "Update one issue by `index` (PATCH: only provided fields change). RISK: passing `labels` REPLACES the entire label set (give the full desired ID list) — to change a single label use add_issue_labels/remove_issue_label instead. `state` is 'open' or 'closed'; set milestone by ID.",
|
|
72
86
|
inputSchema: UpdateIssueSchema.shape,
|
|
73
87
|
}, async (input) => {
|
|
74
88
|
const { owner, repo } = resolve(input);
|
|
@@ -78,7 +92,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
78
92
|
};
|
|
79
93
|
});
|
|
80
94
|
server.registerTool("delete_issue", {
|
|
81
|
-
description: "
|
|
95
|
+
description: "PERMANENTLY delete an issue by `index`. IRREVERSIBLE (no recycle bin) and may fail if the instance disallows deletion. Confirm the index with the user first; prefer update_issue({ state: 'closed' }) to close instead of delete.",
|
|
82
96
|
inputSchema: DeleteIssueSchema.shape,
|
|
83
97
|
}, async (input) => {
|
|
84
98
|
const { owner, repo } = resolve(input);
|
|
@@ -88,7 +102,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
88
102
|
};
|
|
89
103
|
});
|
|
90
104
|
server.registerTool("search_issues", {
|
|
91
|
-
description: "Search issues across
|
|
105
|
+
description: "Search issues (and pull requests) across ALL repositories the token can see, by keyword/type/state/labels. Use for 'find issues about X' or duplicate detection across repos; set type='issues' to exclude pull requests. For listing one repo's issues use list_issues instead.",
|
|
92
106
|
inputSchema: SearchIssuesSchema.shape,
|
|
93
107
|
}, async (input) => {
|
|
94
108
|
const issues = await client.searchIssues(input);
|
|
@@ -98,7 +112,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
98
112
|
});
|
|
99
113
|
// ── Comments ──
|
|
100
114
|
server.registerTool("list_comments", {
|
|
101
|
-
description: "List comments on a Gitea
|
|
115
|
+
description: "List comments on one issue by its `index`. RISK: returns only the server's DEFAULT first page (this tool exposes no pagination), so long threads may be TRUNCATED — do not assume a short list means few comments. Gitea returns oldest-first. Each comment has an `id` (used to update/delete it), `body` (Markdown), `user`, and timestamps.",
|
|
102
116
|
inputSchema: ListCommentsSchema.shape,
|
|
103
117
|
}, async (input) => {
|
|
104
118
|
const { owner, repo } = resolve(input);
|
|
@@ -108,7 +122,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
108
122
|
};
|
|
109
123
|
});
|
|
110
124
|
server.registerTool("create_comment", {
|
|
111
|
-
description: "
|
|
125
|
+
description: "Add a comment to an issue by its `index`. `body` is required and supports Markdown. Returns the comment including its `id` — retain it to later update_comment/delete_comment that exact comment.",
|
|
112
126
|
inputSchema: CreateCommentSchema.shape,
|
|
113
127
|
}, async (input) => {
|
|
114
128
|
const { owner, repo } = resolve(input);
|
|
@@ -118,7 +132,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
118
132
|
};
|
|
119
133
|
});
|
|
120
134
|
server.registerTool("update_comment", {
|
|
121
|
-
description: "
|
|
135
|
+
description: "Edit a comment by its `id` (NOT the issue `index` — get the id from list_comments). `body` is the full replacement Markdown. Only the comment author or a repo admin may edit (403 otherwise).",
|
|
122
136
|
inputSchema: UpdateCommentSchema.shape,
|
|
123
137
|
}, async (input) => {
|
|
124
138
|
const { owner, repo } = resolve(input);
|
|
@@ -128,7 +142,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
128
142
|
};
|
|
129
143
|
});
|
|
130
144
|
server.registerTool("delete_comment", {
|
|
131
|
-
description: "Delete a comment from a
|
|
145
|
+
description: "Delete a comment by its `id` (NOT the issue `index` — get the id from list_comments). IRREVERSIBLE. Confirm with the user first; only the author or a repo admin may delete (403 otherwise).",
|
|
132
146
|
inputSchema: DeleteCommentSchema.shape,
|
|
133
147
|
}, async (input) => {
|
|
134
148
|
const { owner, repo } = resolve(input);
|
|
@@ -139,7 +153,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
139
153
|
});
|
|
140
154
|
// ── Labels ──
|
|
141
155
|
server.registerTool("list_labels", {
|
|
142
|
-
description: "List labels in a
|
|
156
|
+
description: "List labels in a repo. Paginated (page 1-based, limit <= 100); page until a page returns fewer than `limit`. Each label has `id` (number), `name`, `color` (hex), `description`. ALWAYS call this before any label mutation — label endpoints mix names and ids (add/replace use NAMES, remove/update/delete use IDS).",
|
|
143
157
|
inputSchema: ListLabelsSchema.shape,
|
|
144
158
|
}, async (input) => {
|
|
145
159
|
const { owner, repo } = resolve(input);
|
|
@@ -149,7 +163,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
149
163
|
};
|
|
150
164
|
});
|
|
151
165
|
server.registerTool("create_label", {
|
|
152
|
-
description: "Create a
|
|
166
|
+
description: "Create a label. `name` required and MUST be unique in the repo (a duplicate -> conflict error). `color` is 6-digit hex, with or without a leading '#' (e.g. '#ff0000' or 'ff0000'). `description` optional. Returns the label with its `id`.",
|
|
153
167
|
inputSchema: CreateLabelSchema.shape,
|
|
154
168
|
}, async (input) => {
|
|
155
169
|
const { owner, repo } = resolve(input);
|
|
@@ -159,7 +173,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
159
173
|
};
|
|
160
174
|
});
|
|
161
175
|
server.registerTool("update_label", {
|
|
162
|
-
description: "Update
|
|
176
|
+
description: "Update a label by `id` (number — NOT the name). Provide any of name/color/description (PATCH semantics). `color` is 6-digit hex. Get the id from list_labels.",
|
|
163
177
|
inputSchema: UpdateLabelSchema.shape,
|
|
164
178
|
}, async (input) => {
|
|
165
179
|
const { owner, repo } = resolve(input);
|
|
@@ -169,7 +183,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
169
183
|
};
|
|
170
184
|
});
|
|
171
185
|
server.registerTool("delete_label", {
|
|
172
|
-
description: "
|
|
186
|
+
description: "Permanently delete a label by `id` (number — NOT the name). IRREVERSIBLE and also removes it from EVERY issue that currently has it. Get the id from list_labels and confirm with the user before deleting.",
|
|
173
187
|
inputSchema: DeleteLabelSchema.shape,
|
|
174
188
|
}, async (input) => {
|
|
175
189
|
const { owner, repo } = resolve(input);
|
|
@@ -179,7 +193,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
179
193
|
};
|
|
180
194
|
});
|
|
181
195
|
server.registerTool("add_issue_labels", {
|
|
182
|
-
description: "Add labels to a
|
|
196
|
+
description: "Add labels to an issue by its `index`. `labels` is an array of label NAMES (strings) — NOT ids. Get valid names from list_labels; a name that does not exist errors (404). ADDITIVE: existing labels are kept.",
|
|
183
197
|
inputSchema: AddIssueLabelsSchema.shape,
|
|
184
198
|
}, async (input) => {
|
|
185
199
|
const { owner, repo } = resolve(input);
|
|
@@ -189,7 +203,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
189
203
|
};
|
|
190
204
|
});
|
|
191
205
|
server.registerTool("remove_issue_label", {
|
|
192
|
-
description: "Remove
|
|
206
|
+
description: "Remove ONE label from an issue. Takes the label `id` (number) — NOT the name. Get the id from list_labels (issue labels carry their id). Errors if the label is not currently on the issue.",
|
|
193
207
|
inputSchema: RemoveIssueLabelSchema.shape,
|
|
194
208
|
}, async (input) => {
|
|
195
209
|
const { owner, repo } = resolve(input);
|
|
@@ -199,7 +213,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
199
213
|
};
|
|
200
214
|
});
|
|
201
215
|
server.registerTool("replace_issue_labels", {
|
|
202
|
-
description: "
|
|
216
|
+
description: "REPLACE the issue's ENTIRE label set. `labels` is an array of label NAMES. Every existing label is removed and ONLY the listed ones remain. Read current labels first if any must survive; confirm with the user before replacing.",
|
|
203
217
|
inputSchema: ReplaceIssueLabelsSchema.shape,
|
|
204
218
|
}, async (input) => {
|
|
205
219
|
const { owner, repo } = resolve(input);
|
|
@@ -209,7 +223,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
209
223
|
};
|
|
210
224
|
});
|
|
211
225
|
server.registerTool("clear_issue_labels", {
|
|
212
|
-
description: "Remove
|
|
226
|
+
description: "Remove ALL labels from an issue by its `index`. Destructive for that issue's labels. Confirm with the user first; if a known subset must remain, use replace_issue_labels with that subset instead.",
|
|
213
227
|
inputSchema: ClearIssueLabelsSchema.shape,
|
|
214
228
|
}, async (input) => {
|
|
215
229
|
const { owner, repo } = resolve(input);
|
|
@@ -220,7 +234,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
220
234
|
});
|
|
221
235
|
// ── Milestones ──
|
|
222
236
|
server.registerTool("list_milestones", {
|
|
223
|
-
description: "List milestones in a Gitea
|
|
237
|
+
description: "List milestones in a repo. Paginated (page 1-based, limit <= 100). RISK: Gitea's DEFAULT returns only OPEN milestones — pass state='all' or 'closed' if you need closed/completed ones. Each milestone has `id`, `title`, `state`, `open_issues`, `closed_issues`, `due_on`.",
|
|
224
238
|
inputSchema: ListMilestonesSchema.shape,
|
|
225
239
|
}, async (input) => {
|
|
226
240
|
const { owner, repo } = resolve(input);
|
|
@@ -230,7 +244,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
230
244
|
};
|
|
231
245
|
});
|
|
232
246
|
server.registerTool("get_milestone", {
|
|
233
|
-
description: "
|
|
247
|
+
description: "Fetch one milestone by `id` (the internal id from list_milestones, NOT the title). Returns progress counts (open_issues / closed_issues), description, state, and due_on.",
|
|
234
248
|
inputSchema: GetMilestoneSchema.shape,
|
|
235
249
|
}, async (input) => {
|
|
236
250
|
const { owner, repo } = resolve(input);
|
|
@@ -240,7 +254,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
240
254
|
};
|
|
241
255
|
});
|
|
242
256
|
server.registerTool("create_milestone", {
|
|
243
|
-
description: "Create a
|
|
257
|
+
description: "Create a milestone. `title` required. `description` optional. `due_on` optional ISO 8601 (e.g. '2025-12-31T23:59:59Z'). New milestones start in state 'open'. Returns the milestone with its `id`.",
|
|
244
258
|
inputSchema: CreateMilestoneSchema.shape,
|
|
245
259
|
}, async (input) => {
|
|
246
260
|
const { owner, repo } = resolve(input);
|
|
@@ -250,7 +264,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
250
264
|
};
|
|
251
265
|
});
|
|
252
266
|
server.registerTool("update_milestone", {
|
|
253
|
-
description: "Update
|
|
267
|
+
description: "Update a milestone by `id` (PATCH: only provided fields change). Provide any of title/description/due_on/state. `state` is 'open' or 'closed'. NOTE: closing a milestone does NOT close its open issues (they stay open, merely ungrouped) — close the issues separately if required.",
|
|
254
268
|
inputSchema: UpdateMilestoneSchema.shape,
|
|
255
269
|
}, async (input) => {
|
|
256
270
|
const { owner, repo } = resolve(input);
|
|
@@ -260,7 +274,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
260
274
|
};
|
|
261
275
|
});
|
|
262
276
|
server.registerTool("delete_milestone", {
|
|
263
|
-
description: "
|
|
277
|
+
description: "Permanently delete a milestone by `id`. IRREVERSIBLE. Issues assigned to it are NOT deleted — they keep existing but lose the milestone assignment (milestone becomes null). Confirm with the user first; prefer update_milestone({ state: 'closed' }) to preserve history.",
|
|
264
278
|
inputSchema: DeleteMilestoneSchema.shape,
|
|
265
279
|
}, async (input) => {
|
|
266
280
|
const { owner, repo } = resolve(input);
|
|
@@ -271,7 +285,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
271
285
|
});
|
|
272
286
|
// ── Helpers ──
|
|
273
287
|
server.registerTool("resolve_repo", {
|
|
274
|
-
description: "Detect owner
|
|
288
|
+
description: "Detect owner/repo from a git repository's `origin` remote URL (SSH or HTTPS). `path` defaults to the current directory. Call ONCE at the start of a session to establish owner/repo for later calls instead of guessing. Errors if there is no `origin` remote or the URL cannot be parsed.",
|
|
275
289
|
inputSchema: ResolveRepoSchema.shape,
|
|
276
290
|
}, async (input) => {
|
|
277
291
|
const dir = input.path || process.cwd();
|
|
@@ -294,7 +308,7 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
294
308
|
};
|
|
295
309
|
});
|
|
296
310
|
server.registerTool("list_my_repos", {
|
|
297
|
-
description: "List
|
|
311
|
+
description: "List repositories the authenticated token's user can access (across ALL owners/orgs). Paginated (page 1-based, limit <= 100). Each repo object is large — keep `limit` modest. Use to DISCOVER owner/repo values or find where to work, not to list one repo's issues.",
|
|
298
312
|
inputSchema: ListMyReposSchema.shape,
|
|
299
313
|
}, async (input) => {
|
|
300
314
|
const repos = await client.listMyRepos(input.page, input.limit);
|
|
@@ -302,6 +316,137 @@ export async function createServer(baseUrl, token, defaultOwner, defaultRepo) {
|
|
|
302
316
|
content: [{ type: "text", text: JSON.stringify(repos, null, 2) }],
|
|
303
317
|
};
|
|
304
318
|
});
|
|
319
|
+
// ── Resources (on-demand reference docs for clients that surface them) ──
|
|
320
|
+
const registerDocResource = (name, file, description) => {
|
|
321
|
+
const uri = `gitea-mcp://guide/${name}`;
|
|
322
|
+
server.registerResource(name, uri, { mimeType: "text/markdown", description }, async () => {
|
|
323
|
+
let text;
|
|
324
|
+
try {
|
|
325
|
+
text = await readFile(join(moduleDir, "assets", "resources", file), "utf-8");
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
text = `# ${name}\n\nThis reference is unavailable in the current build.`;
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
contents: [{ uri, mimeType: "text/markdown", text }],
|
|
332
|
+
};
|
|
333
|
+
});
|
|
334
|
+
};
|
|
335
|
+
registerDocResource("field-reference", "field-reference.md", "Gitea object field reference (Issue, Label, Milestone, Comment, Repo, User)");
|
|
336
|
+
registerDocResource("label-guide", "label-guide.md", "Label management guide: name-vs-id matrix, conventions, safe/unsafe operations");
|
|
337
|
+
registerDocResource("tool-cookbook", "tool-cookbook.md", "Task-to-tool recipes: discover, read, create, edit, destructive ops, pagination, errors");
|
|
338
|
+
// ── Prompts (multi-tool workflow triggers; the model runs the tools) ──
|
|
339
|
+
server.registerPrompt("triage_issues", {
|
|
340
|
+
title: "Triage issues",
|
|
341
|
+
description: "List open issues in a repo, read context on ambiguous ones, and propose priority labels + next actions. Returns an instruction the model executes via the tools.",
|
|
342
|
+
argsSchema: {
|
|
343
|
+
owner: z.string().optional().describe("Repository owner (defaults to GITEA_DEFAULT_OWNER)"),
|
|
344
|
+
repo: z.string().optional().describe("Repository name (defaults to GITEA_DEFAULT_REPO)"),
|
|
345
|
+
state: z
|
|
346
|
+
.enum(["open", "closed", "all"])
|
|
347
|
+
.optional()
|
|
348
|
+
.describe("Which issues to triage (default open)"),
|
|
349
|
+
},
|
|
350
|
+
}, async ({ owner, repo, state }) => {
|
|
351
|
+
const target = `${owner ?? "<GITEA_DEFAULT_OWNER>"}/${repo ?? "<GITEA_DEFAULT_REPO>"}`;
|
|
352
|
+
const st = state ?? "open";
|
|
353
|
+
const text = [
|
|
354
|
+
`Triage ${st} issues in the Gitea repository ${target}.`,
|
|
355
|
+
"",
|
|
356
|
+
"Steps:",
|
|
357
|
+
`1. Call list_issues({ state: "${st}", page: 1, limit: 50 }). Page forward while a page returns exactly 50.`,
|
|
358
|
+
" NOTE: list_issues may include pull requests — use search_issues({ type: 'issues' }) if you must exclude PRs.",
|
|
359
|
+
"2. For stale, ambiguous, or high-activity issues, call get_issue + list_comments to read context.",
|
|
360
|
+
"3. Propose for each issue: a priority/severity label, an assignee if obvious, and a one-line next action.",
|
|
361
|
+
"4. Apply labels with add_issue_labels (label NAMES) — confirm with the user first if the change is large.",
|
|
362
|
+
"5. Summarize: total triaged, how many need a human response, how many look stale.",
|
|
363
|
+
"",
|
|
364
|
+
"Do NOT delete issues. To resolve, use update_issue({ state: 'closed' }) after confirmation.",
|
|
365
|
+
].join("\n");
|
|
366
|
+
return {
|
|
367
|
+
description: `Triage ${st} issues in ${target}`,
|
|
368
|
+
messages: [{ role: "user", content: { type: "text", text } }],
|
|
369
|
+
};
|
|
370
|
+
});
|
|
371
|
+
server.registerPrompt("summarize_issue", {
|
|
372
|
+
title: "Summarize an issue",
|
|
373
|
+
description: "Read one issue plus its comment thread and produce a concise status: decisions, open questions, and a recommended next action.",
|
|
374
|
+
argsSchema: {
|
|
375
|
+
owner: z.string().optional().describe("Repository owner (defaults to GITEA_DEFAULT_OWNER)"),
|
|
376
|
+
repo: z.string().optional().describe("Repository name (defaults to GITEA_DEFAULT_REPO)"),
|
|
377
|
+
index: z.number().int().min(1).describe("Issue number (the # shown in the URL)"),
|
|
378
|
+
},
|
|
379
|
+
}, async ({ owner, repo, index }) => {
|
|
380
|
+
const target = `${owner ?? "<GITEA_DEFAULT_OWNER>"}/${repo ?? "<GITEA_DEFAULT_REPO>"}#${index}`;
|
|
381
|
+
const text = [
|
|
382
|
+
`Summarize Gitea issue ${target}.`,
|
|
383
|
+
"",
|
|
384
|
+
"Steps:",
|
|
385
|
+
"1. get_issue to read the title, body, labels, assignee(s), milestone, and state.",
|
|
386
|
+
"2. list_comments to read the discussion (oldest-first).",
|
|
387
|
+
" CAVEAT: list_comments returns only the server's default page and has no pagination here — if the count looks capped, say so.",
|
|
388
|
+
"3. Produce a summary with: a 2-3 sentence status, the key DECISIONS made, unresolved QUESTIONS/blockers, and one recommended NEXT ACTION.",
|
|
389
|
+
"4. Attribute statements to their author (user.login); never invent quotes.",
|
|
390
|
+
"5. Distinguish the reporter from maintainers/assignees.",
|
|
391
|
+
"",
|
|
392
|
+
"Do not edit or delete anything. This is read-only analysis.",
|
|
393
|
+
].join("\n");
|
|
394
|
+
return {
|
|
395
|
+
description: `Summarize issue ${target}`,
|
|
396
|
+
messages: [{ role: "user", content: { type: "text", text } }],
|
|
397
|
+
};
|
|
398
|
+
});
|
|
399
|
+
server.registerPrompt("audit_labels", {
|
|
400
|
+
title: "Audit label taxonomy",
|
|
401
|
+
description: "List every label in a repo and report duplicates, inconsistent colors, missing descriptions, and a proposed cleanup. Read-only analysis; applies nothing.",
|
|
402
|
+
argsSchema: {
|
|
403
|
+
owner: z.string().optional().describe("Repository owner (defaults to GITEA_DEFAULT_OWNER)"),
|
|
404
|
+
repo: z.string().optional().describe("Repository name (defaults to GITEA_DEFAULT_REPO)"),
|
|
405
|
+
},
|
|
406
|
+
}, async ({ owner, repo }) => {
|
|
407
|
+
const target = `${owner ?? "<GITEA_DEFAULT_OWNER>"}/${repo ?? "<GITEA_DEFAULT_REPO>"}`;
|
|
408
|
+
const text = [
|
|
409
|
+
`Audit the label taxonomy of Gitea repository ${target}.`,
|
|
410
|
+
"",
|
|
411
|
+
"Steps:",
|
|
412
|
+
"1. list_labels with page 1, limit 100; page forward while a page returns exactly 100 so the audit is complete.",
|
|
413
|
+
"2. Report: duplicate or near-duplicate NAMES (case/spelling), inconsistent or clashing COLORS, labels missing a description, and any obvious scope/name conventions (e.g. 'scope/name').",
|
|
414
|
+
"3. Propose a concrete cleanup per problem: rename via update_label (by id), recolor, or delete_label (by id).",
|
|
415
|
+
"4. DO NOT apply any change. delete_label removes the label from EVERY issue — only propose it; the user decides.",
|
|
416
|
+
"",
|
|
417
|
+
"Keep the name-vs-id matrix in mind: add/replace use NAMES, remove/update/delete use IDS.",
|
|
418
|
+
].join("\n");
|
|
419
|
+
return {
|
|
420
|
+
description: `Audit labels in ${target}`,
|
|
421
|
+
messages: [{ role: "user", content: { type: "text", text } }],
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
server.registerPrompt("milestone_report", {
|
|
425
|
+
title: "Milestone progress report",
|
|
426
|
+
description: "List all milestones in a repo, compute completion % for each, and flag overdue milestones that still have open issues. Read-only.",
|
|
427
|
+
argsSchema: {
|
|
428
|
+
owner: z.string().optional().describe("Repository owner (defaults to GITEA_DEFAULT_OWNER)"),
|
|
429
|
+
repo: z.string().optional().describe("Repository name (defaults to GITEA_DEFAULT_REPO)"),
|
|
430
|
+
},
|
|
431
|
+
}, async ({ owner, repo }) => {
|
|
432
|
+
const target = `${owner ?? "<GITEA_DEFAULT_OWNER>"}/${repo ?? "<GITEA_DEFAULT_REPO>"}`;
|
|
433
|
+
const text = [
|
|
434
|
+
`Produce a milestone progress report for Gitea repository ${target}.`,
|
|
435
|
+
"",
|
|
436
|
+
"Steps:",
|
|
437
|
+
"1. list_milestones with state='all' (the default returns ONLY open milestones — you would miss completed ones otherwise). Page through if needed.",
|
|
438
|
+
"2. For each milestone compute completion = closed_issues / (open_issues + closed_issues).",
|
|
439
|
+
"3. Flag any milestone whose due_on is in the past AND open_issues > 0 as AT RISK.",
|
|
440
|
+
"4. Summarize as a table: title, state, open/closed counts, % complete, due_on, and an AT RISK marker.",
|
|
441
|
+
"5. Recommend where to focus effort next.",
|
|
442
|
+
"",
|
|
443
|
+
"Do not edit or delete anything. Read-only analysis.",
|
|
444
|
+
].join("\n");
|
|
445
|
+
return {
|
|
446
|
+
description: `Milestone report for ${target}`,
|
|
447
|
+
messages: [{ role: "user", content: { type: "text", text } }],
|
|
448
|
+
};
|
|
449
|
+
});
|
|
305
450
|
return server;
|
|
306
451
|
}
|
|
307
452
|
export async function runServer(baseUrl, token, defaultOwner, defaultRepo) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface InstallOptions {
|
|
2
|
+
project: boolean;
|
|
3
|
+
dir?: string;
|
|
4
|
+
}
|
|
5
|
+
/** Absolute path to the directory of bundled skills shipped inside dist/. */
|
|
6
|
+
export declare function bundledSkillsDir(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Skills root to install into. Each bundled skill (a subdirectory containing a
|
|
9
|
+
* SKILL.md) is copied to `<root>/<skill-name>/`. Precedence: explicit --dir >
|
|
10
|
+
* --project (./.opencode/skills) > global opencode skills dir.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveInstallDir(opts: InstallOptions): string;
|
|
13
|
+
/** Parse `gitea-mcp skills <command> [flags]`. Throws on unknown flags or missing --dir value. */
|
|
14
|
+
export declare function parseInstallArgs(argv: string[]): {
|
|
15
|
+
command: string | undefined;
|
|
16
|
+
opts: InstallOptions;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Implements `gitea-mcp skills install`: copies every bundled opencode skill
|
|
20
|
+
* (each subdirectory of dist/assets/skills containing a SKILL.md) into the
|
|
21
|
+
* opencode skills directory so opencode loads them on next start. Does NOT need
|
|
22
|
+
* GITEA_BASE_URL / GITEA_TOKEN.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runSkillsCommand(argv: string[]): Promise<void>;
|
package/dist/skills.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { readdir, mkdir, copyFile, access } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const BUNDLED_SKILLS_REL = ["assets", "skills"];
|
|
6
|
+
const SKILL_FILENAME = "SKILL.md";
|
|
7
|
+
const USAGE = `Usage: gitea-mcp skills install [--project] [--dir <path>]
|
|
8
|
+
--project install into ./.opencode/skills/ (this project) instead of global
|
|
9
|
+
--dir <path> install into this exact directory (treated as the skills root)`;
|
|
10
|
+
/** Absolute path to the directory of bundled skills shipped inside dist/. */
|
|
11
|
+
export function bundledSkillsDir() {
|
|
12
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
return join(moduleDir, ...BUNDLED_SKILLS_REL);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Skills root to install into. Each bundled skill (a subdirectory containing a
|
|
17
|
+
* SKILL.md) is copied to `<root>/<skill-name>/`. Precedence: explicit --dir >
|
|
18
|
+
* --project (./.opencode/skills) > global opencode skills dir.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveInstallDir(opts) {
|
|
21
|
+
if (opts.dir)
|
|
22
|
+
return opts.dir;
|
|
23
|
+
if (opts.project)
|
|
24
|
+
return join(process.cwd(), ".opencode", "skills");
|
|
25
|
+
const base = process.env.OPENCODE_CONFIG_DIR ?? join(homedir(), ".config", "opencode");
|
|
26
|
+
return join(base, "skills");
|
|
27
|
+
}
|
|
28
|
+
/** Parse `gitea-mcp skills <command> [flags]`. Throws on unknown flags or missing --dir value. */
|
|
29
|
+
export function parseInstallArgs(argv) {
|
|
30
|
+
const opts = { project: false };
|
|
31
|
+
let command;
|
|
32
|
+
for (let i = 0; i < argv.length; i++) {
|
|
33
|
+
const a = argv[i];
|
|
34
|
+
if (a === "--project") {
|
|
35
|
+
opts.project = true;
|
|
36
|
+
}
|
|
37
|
+
else if (a === "--dir") {
|
|
38
|
+
const val = argv[++i];
|
|
39
|
+
if (!val)
|
|
40
|
+
throw new Error("--dir requires a path argument");
|
|
41
|
+
opts.dir = val;
|
|
42
|
+
}
|
|
43
|
+
else if (a.startsWith("--dir=")) {
|
|
44
|
+
opts.dir = a.slice("--dir=".length);
|
|
45
|
+
}
|
|
46
|
+
else if (command === undefined && !a.startsWith("-")) {
|
|
47
|
+
command = a;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error(`Unknown argument: ${a}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { command, opts };
|
|
54
|
+
}
|
|
55
|
+
/** Recursively copy a directory tree (no experimental fs.cp dependency). */
|
|
56
|
+
async function copyTree(src, dest) {
|
|
57
|
+
await mkdir(dest, { recursive: true });
|
|
58
|
+
const entries = await readdir(src, { withFileTypes: true });
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
const from = join(src, entry.name);
|
|
61
|
+
const to = join(dest, entry.name);
|
|
62
|
+
if (entry.isDirectory()) {
|
|
63
|
+
await copyTree(from, to);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await copyFile(from, to);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Implements `gitea-mcp skills install`: copies every bundled opencode skill
|
|
72
|
+
* (each subdirectory of dist/assets/skills containing a SKILL.md) into the
|
|
73
|
+
* opencode skills directory so opencode loads them on next start. Does NOT need
|
|
74
|
+
* GITEA_BASE_URL / GITEA_TOKEN.
|
|
75
|
+
*/
|
|
76
|
+
export async function runSkillsCommand(argv) {
|
|
77
|
+
const { command, opts } = parseInstallArgs(argv);
|
|
78
|
+
if (command !== "install") {
|
|
79
|
+
const reason = command ? `Unknown skills subcommand: ${command}` : "Missing skills subcommand";
|
|
80
|
+
throw new Error(`${reason}\n${USAGE}`);
|
|
81
|
+
}
|
|
82
|
+
const srcDir = bundledSkillsDir();
|
|
83
|
+
let entries;
|
|
84
|
+
try {
|
|
85
|
+
entries = await readdir(srcDir, { withFileTypes: true });
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
throw new Error(`Bundled skills not found at ${srcDir}. The package may be corrupted or was installed without its assets.`);
|
|
89
|
+
}
|
|
90
|
+
const destRoot = resolveInstallDir(opts);
|
|
91
|
+
const installed = [];
|
|
92
|
+
for (const entry of entries) {
|
|
93
|
+
if (!entry.isDirectory())
|
|
94
|
+
continue;
|
|
95
|
+
const srcSkill = join(srcDir, entry.name);
|
|
96
|
+
try {
|
|
97
|
+
await access(join(srcSkill, SKILL_FILENAME));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
continue; // not a skill directory — skip
|
|
101
|
+
}
|
|
102
|
+
await copyTree(srcSkill, join(destRoot, entry.name));
|
|
103
|
+
installed.push(entry.name);
|
|
104
|
+
}
|
|
105
|
+
if (installed.length === 0) {
|
|
106
|
+
throw new Error(`No skills found to install under ${srcDir}.`);
|
|
107
|
+
}
|
|
108
|
+
process.stdout.write(`Installed ${installed.length} gitea-mcp skill(s) -> ${destRoot}\n`);
|
|
109
|
+
for (const name of installed)
|
|
110
|
+
process.stdout.write(` - ${name}\n`);
|
|
111
|
+
process.stdout.write("Restart opencode for the skills to take effect.\n");
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|