draft verification MCP
This commit is contained in:
@@ -46,6 +46,7 @@ _SEARCH_ALWAYS_VISIBLE_TOOL_NAMES = [
|
||||
"wf.workflow.get_draft_workspace",
|
||||
"wf.workflow.delete_draft_workspace",
|
||||
"wf.workflow.patch_draft_workspace",
|
||||
"wf.workflow.validate_draft_workspace",
|
||||
"wf.workflow.set_draft_name",
|
||||
"wf.workflow.set_draft_route",
|
||||
"wf.workflow.set_step_input_map",
|
||||
|
||||
@@ -419,6 +419,20 @@ class WorkflowSurfaceHandlers:
|
||||
"status": "deleted" if deleted else "not_found",
|
||||
}
|
||||
|
||||
async def validate_draft_workspace(self, *, workspace_id: str) -> dict[str, Any]:
|
||||
"""Refresh stored validation status without changing draft revision."""
|
||||
store = self._draft_store()
|
||||
workspace = store.get_workspace(workspace_id)
|
||||
validation = await self.validate_draft(draft=workspace.draft)
|
||||
refreshed = workspace.model_copy(
|
||||
update={
|
||||
"status": validation["status"],
|
||||
"diagnostics": validation["diagnostics"],
|
||||
}
|
||||
)
|
||||
store.save_workspace(refreshed)
|
||||
return get_draft_workspace_record(store, workspace_id=workspace_id)
|
||||
|
||||
async def patch_draft_workspace(
|
||||
self,
|
||||
*,
|
||||
|
||||
@@ -115,6 +115,12 @@ class PatchDraftWorkspaceRequest(BaseModel):
|
||||
patch: JsonPatchOperations
|
||||
|
||||
|
||||
class ValidateDraftWorkspaceRequest(BaseModel):
|
||||
"""Typed MCP request for refreshing one workspace validation status."""
|
||||
|
||||
workspace_id: WorkspaceId
|
||||
|
||||
|
||||
class SetDraftNameRequest(BaseModel):
|
||||
"""Typed MCP request for changing the workflow draft name."""
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ from .models import (
|
||||
SetDraftRouteRequest,
|
||||
SetStepInputMapRequest,
|
||||
SetStepOutputMapRequest,
|
||||
ValidateDraftWorkspaceRequest,
|
||||
)
|
||||
|
||||
|
||||
@@ -277,6 +278,21 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
||||
)
|
||||
)
|
||||
|
||||
@server.tool(
|
||||
name="wf.workflow.validate_draft_workspace",
|
||||
title="Validate Draft Workspace",
|
||||
description=(
|
||||
"Refresh validation status for one draft workspace without changing "
|
||||
"its revision."
|
||||
),
|
||||
)
|
||||
async def validate_draft_workspace(
|
||||
request: ValidateDraftWorkspaceRequest,
|
||||
) -> DraftWorkspaceResult:
|
||||
return DraftWorkspaceResult.model_validate(
|
||||
await handlers.validate_draft_workspace(workspace_id=request.workspace_id)
|
||||
)
|
||||
|
||||
@server.tool(
|
||||
name="wf.workflow.set_draft_name",
|
||||
title="Set Draft Name",
|
||||
|
||||
Reference in New Issue
Block a user