fix: deep scan — issue search, asset upload, metadata guard, file create #26
+21
-12
@@ -61,7 +61,7 @@ const OwnerRepo = {
|
||||
|
||||
const server = new McpServer({
|
||||
name: 'mokogitea-api-mcp',
|
||||
version: '1.0.0',
|
||||
version: '1.4.2',
|
||||
});
|
||||
|
||||
// ── User / Auth ─────────────────────────────────────────────────────────
|
||||
@@ -551,7 +551,7 @@ server.tool(
|
||||
if (state) params['state'] = state;
|
||||
if (labels) params['labels'] = labels;
|
||||
if (type) params['type'] = type;
|
||||
return formatResponse(await clientFor(connection).get('/repos/search', params));
|
||||
return formatResponse(await clientFor(connection).get('/repos/issues/search', params));
|
||||
},
|
||||
);
|
||||
|
||||
@@ -871,14 +871,23 @@ server.tool(
|
||||
...ConnectionParam,
|
||||
},
|
||||
async ({ owner, repo, release_id, name, content_base64, connection }) => {
|
||||
const client = clientFor(connection);
|
||||
// Gitea expects multipart form data for asset upload
|
||||
// For now, use the API with the binary content
|
||||
const res = await client.post(
|
||||
`/repos/${owner}/${repo}/releases/${release_id}/assets?name=${encodeURIComponent(name)}`,
|
||||
Buffer.from(content_base64, 'base64'),
|
||||
);
|
||||
return formatResponse(res);
|
||||
const conn = getConnection(config, connection);
|
||||
const baseUrl = conn.baseUrl.replace(/\/+$/, '') + '/api/v1';
|
||||
const url = `${baseUrl}/repos/${owner}/${repo}/releases/${release_id}/assets?name=${encodeURIComponent(name)}`;
|
||||
const buf = Buffer.from(content_base64, 'base64');
|
||||
const resp = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Authorization': `token ${conn.token}`,
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Length': String(buf.byteLength),
|
||||
},
|
||||
body: buf,
|
||||
});
|
||||
const raw = await resp.text();
|
||||
let data: unknown;
|
||||
try { data = JSON.parse(raw); } catch { data = raw; }
|
||||
return formatResponse({ status: resp.status, data });
|
||||
},
|
||||
);
|
||||
|
||||
@@ -929,7 +938,7 @@ server.tool(
|
||||
results.push({ repo, status: 'updated' });
|
||||
} else {
|
||||
// Create new file
|
||||
await client.post(`/repos/${owner}/${repo}/contents/${path}`, {
|
||||
await client.put(`/repos/${owner}/${repo}/contents/${path}`, {
|
||||
content: content_base64,
|
||||
message,
|
||||
branch: targetBranch,
|
||||
@@ -1742,7 +1751,7 @@ server.tool(
|
||||
async ({ owner, repo, connection, ...fields }) => {
|
||||
const c = clientFor(connection);
|
||||
const current = await c.get(`/repos/${owner}/${repo}/metadata`);
|
||||
const merged = { ...(current.data as Record<string, unknown>) };
|
||||
const merged = current.status < 400 ? { ...(current.data as Record<string, unknown>) } : {};
|
||||
for (const [k, v] of Object.entries(fields)) {
|
||||
if (v !== undefined) merged[k] = v;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user