feat(mcp): add approval creation tool

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
dotta 2026-04-06 21:25:58 -05:00
parent 8cdba3ce18
commit f1bb175584

View file

@ -2,6 +2,7 @@ import { z } from "zod";
import { import {
addIssueCommentSchema, addIssueCommentSchema,
checkoutIssueSchema, checkoutIssueSchema,
createApprovalSchema,
createIssueSchema, createIssueSchema,
updateIssueSchema, updateIssueSchema,
upsertIssueDocumentSchema, upsertIssueDocumentSchema,
@ -113,6 +114,10 @@ const approvalDecisionSchema = z.object({
payloadJson: z.string().optional(), payloadJson: z.string().optional(),
}); });
const createApprovalToolSchema = z.object({
companyId: companyIdOptional,
}).merge(createApprovalSchema);
const apiRequestSchema = z.object({ const apiRequestSchema = z.object({
method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]), method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]),
path: z.string().min(1), path: z.string().min(1),
@ -263,6 +268,15 @@ export function createToolDefinitions(client: PaperclipApiClient): ToolDefinitio
return client.requestJson("GET", `/companies/${client.resolveCompanyId(companyId)}/approvals${qs}`); return client.requestJson("GET", `/companies/${client.resolveCompanyId(companyId)}/approvals${qs}`);
}, },
), ),
makeTool(
"paperclipCreateApproval",
"Create a board approval request, optionally linked to one or more issues",
createApprovalToolSchema,
async ({ companyId, ...body }) =>
client.requestJson("POST", `/companies/${client.resolveCompanyId(companyId)}/approvals`, {
body,
}),
),
makeTool( makeTool(
"paperclipGetApproval", "paperclipGetApproval",
"Get an approval by id", "Get an approval by id",