Add delete tasks to mcp

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-02-16 18:35:04 +01:00
parent 9dcd95adfc
commit 90911a55f7
4 changed files with 70 additions and 0 deletions

View File

@@ -1448,6 +1448,21 @@ func (r *Resolver) UnassignTaskTool(ctx context.Context, req *mcp.CallToolReques
}, nil
}
func (r *Resolver) DeleteTaskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.DeleteTaskInput) (*mcp.CallToolResult, types.DeleteTaskOutput, error) {
r.MustAuthorize(ctx, input.ID, probo.ActionTaskDelete)
svc := r.ProboService(ctx, input.ID)
err := svc.Tasks.Delete(ctx, input.ID)
if err != nil {
return nil, types.DeleteTaskOutput{}, fmt.Errorf("failed to delete task: %w", err)
}
return nil, types.DeleteTaskOutput{
DeletedTaskID: input.ID,
}, nil
}
func (r *Resolver) ListSnapshotsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListSnapshotsInput) (*mcp.CallToolResult, types.ListSnapshotsOutput, error) {
r.MustAuthorize(ctx, input.OrganizationID, probo.ActionSnapshotList)

View File

@@ -72,6 +72,7 @@ type ResolverInterface interface {
UpdateTaskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateTaskInput) (*mcp.CallToolResult, types.UpdateTaskOutput, error)
AssignTaskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AssignTaskInput) (*mcp.CallToolResult, types.AssignTaskOutput, error)
UnassignTaskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UnassignTaskInput) (*mcp.CallToolResult, types.UnassignTaskOutput, error)
DeleteTaskTool(ctx context.Context, req *mcp.CallToolRequest, input *types.DeleteTaskInput) (*mcp.CallToolResult, types.DeleteTaskOutput, error)
ListSnapshotsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListSnapshotsInput) (*mcp.CallToolResult, types.ListSnapshotsOutput, error)
GetSnapshotTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetSnapshotInput) (*mcp.CallToolResult, types.GetSnapshotOutput, error)
TakeSnapshotTool(ctx context.Context, req *mcp.CallToolRequest, input *types.TakeSnapshotInput) (*mcp.CallToolResult, types.TakeSnapshotOutput, error)
@@ -842,6 +843,19 @@ func registerToolHandlers(server *mcp.Server, resolver ResolverInterface) {
},
resolver.UnassignTaskTool,
)
mcp.AddTool(
server,
&mcp.Tool{
Name: "deleteTask",
Description: "Delete a task",
InputSchema: types.DeleteTaskToolInputSchema,
OutputSchema: types.DeleteTaskToolOutputSchema,
Annotations: &mcp.ToolAnnotations{
DestructiveHint: boolPtr(true),
},
},
resolver.DeleteTaskTool,
)
mcp.AddTool(
server,
&mcp.Tool{

View File

@@ -3386,6 +3386,24 @@ components:
task:
$ref: "#/components/schemas/Task"
DeleteTaskInput:
type: object
required:
- id
properties:
id:
$ref: "#/components/schemas/GID"
description: Task ID
DeleteTaskOutput:
type: object
required:
- deleted_task_id
properties:
deleted_task_id:
$ref: "#/components/schemas/GID"
description: Deleted task ID
SnapshotsType:
type: string
enum:
@@ -4898,6 +4916,15 @@ tools:
$ref: "#/components/schemas/UnassignTaskInput"
outputSchema:
$ref: "#/components/schemas/UnassignTaskOutput"
- name: deleteTask
description: Delete a task
hints:
readonly: false
destructive: true
inputSchema:
$ref: "#/components/schemas/DeleteTaskInput"
outputSchema:
$ref: "#/components/schemas/DeleteTaskOutput"
- name: listSnapshots
description: List all snapshots for the organization
hints:

View File

@@ -54,6 +54,8 @@ var (
DeleteDraftDocumentVersionToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"document_version_id":{"type":"string","format":"string"}},"required":["document_version_id"]}`)
DeleteDraftDocumentVersionToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_document_version_id":{"type":"string","format":"string"}},"required":["deleted_document_version_id"]}`)
DeleteMeetingToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
DeleteTaskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
DeleteTaskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_task_id":{"type":"string","format":"string"}},"required":["deleted_task_id"]}`)
DeleteMeetingToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_meeting_id":{"type":"string","format":"string"}},"required":["deleted_meeting_id"]}`)
DeleteRiskToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`)
DeleteRiskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_risk_id":{"type":"string","format":"string"}},"required":["deleted_risk_id"]}`)
@@ -2169,6 +2171,18 @@ type UnassignTaskOutput struct {
Task *Task `json:"task"`
}
// DeleteTaskInput represents the schema
type DeleteTaskInput struct {
// Task ID
ID gid.GID `json:"id"`
}
// DeleteTaskOutput represents the schema
type DeleteTaskOutput struct {
// Deleted task ID
DeletedTaskID gid.GID `json:"deleted_task_id"`
}
// UnlinkControlAuditInput represents the schema
type UnlinkControlAuditInput struct {
// Audit ID