type: expose canonical MCP workflow results
This commit is contained in:
@@ -7,6 +7,26 @@ from fastmcp import FastMCP
|
|||||||
from pydantic import Field
|
from pydantic import Field
|
||||||
|
|
||||||
from wf_api import WorkflowApi
|
from wf_api import WorkflowApi
|
||||||
|
from wf_api.models import (
|
||||||
|
CompileDraftWorkspaceResult,
|
||||||
|
InspectCapabilityResult,
|
||||||
|
ListArtifactsResult,
|
||||||
|
ListCapabilitiesResult,
|
||||||
|
ListDeploymentsResult,
|
||||||
|
PatchDraftResult,
|
||||||
|
SaveArtifactResult,
|
||||||
|
SavedDraftArtifactResult,
|
||||||
|
SaveDeploymentResult,
|
||||||
|
ValidateDraftResult,
|
||||||
|
WorkflowArtifactPayload,
|
||||||
|
WorkflowDeploymentPayload,
|
||||||
|
)
|
||||||
|
from wf_api.models import (
|
||||||
|
CreateArtifactFromWorkspaceResult as ApiCreateArtifactFromWorkspaceResult,
|
||||||
|
)
|
||||||
|
from wf_api.models import (
|
||||||
|
DeleteDeploymentResult as ApiDeleteDeploymentResult,
|
||||||
|
)
|
||||||
from wf_artifacts import ArtifactKind
|
from wf_artifacts import ArtifactKind
|
||||||
from wf_artifacts.models import RequiredCapability
|
from wf_artifacts.models import RequiredCapability
|
||||||
from wf_mcp.broker.service import WfMcpService
|
from wf_mcp.broker.service import WfMcpService
|
||||||
@@ -86,7 +106,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
description="Maximum artifact summaries to return in this page.",
|
description="Maximum artifact summaries to return in this page.",
|
||||||
),
|
),
|
||||||
] = 50,
|
] = 50,
|
||||||
) -> dict[str, Any]:
|
) -> ListArtifactsResult:
|
||||||
return await handlers.list_artifacts(
|
return await handlers.list_artifacts(
|
||||||
query=query,
|
query=query,
|
||||||
kind=kind,
|
kind=kind,
|
||||||
@@ -128,7 +148,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
description="Maximum capability summaries to return in this page.",
|
description="Maximum capability summaries to return in this page.",
|
||||||
),
|
),
|
||||||
] = 50,
|
] = 50,
|
||||||
) -> dict[str, Any]:
|
) -> ListCapabilitiesResult:
|
||||||
return await handlers.list_capabilities(
|
return await handlers.list_capabilities(
|
||||||
query=query,
|
query=query,
|
||||||
source_id=source_id,
|
source_id=source_id,
|
||||||
@@ -144,7 +164,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
"Use after list_capabilities selects one candidate."
|
"Use after list_capabilities selects one candidate."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def inspect_capability(qualified_name: str) -> dict[str, Any]:
|
async def inspect_capability(qualified_name: str) -> InspectCapabilityResult:
|
||||||
return await handlers.inspect_capability(qualified_name=qualified_name)
|
return await handlers.inspect_capability(qualified_name=qualified_name)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -174,7 +194,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Save Workflow Artifact",
|
title="Save Workflow Artifact",
|
||||||
description="Persist a complete workflow artifact JSON document.",
|
description="Persist a complete workflow artifact JSON document.",
|
||||||
)
|
)
|
||||||
async def save_artifact(artifact: dict[str, Any]) -> dict[str, Any]:
|
async def save_artifact(artifact: dict[str, Any]) -> SaveArtifactResult:
|
||||||
return await handlers.save_artifact(artifact)
|
return await handlers.save_artifact(artifact)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -182,7 +202,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Validate Workflow Draft",
|
title="Validate Workflow Draft",
|
||||||
description="Validate an LLM-friendly workflow draft without saving it.",
|
description="Validate an LLM-friendly workflow draft without saving it.",
|
||||||
)
|
)
|
||||||
async def validate_draft(draft: dict[str, Any]) -> dict[str, Any]:
|
async def validate_draft(draft: dict[str, Any]) -> ValidateDraftResult:
|
||||||
return await handlers.validate_draft(draft=draft)
|
return await handlers.validate_draft(draft=draft)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -190,7 +210,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Compile Workflow Draft",
|
title="Compile Workflow Draft",
|
||||||
description="Compile an LLM-friendly workflow draft into a raw workflow plan.",
|
description="Compile an LLM-friendly workflow draft into a raw workflow plan.",
|
||||||
)
|
)
|
||||||
async def compile_draft(draft: dict[str, Any]) -> dict[str, Any]:
|
async def compile_draft(draft: dict[str, Any]) -> CompileDraftWorkspaceResult:
|
||||||
return await handlers.compile_draft(draft=draft)
|
return await handlers.compile_draft(draft=draft)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -211,7 +231,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
) = None,
|
) = None,
|
||||||
source_bindings: Mapping[str, str] | None = None,
|
source_bindings: Mapping[str, str] | None = None,
|
||||||
created_from_catalog_version: str | None = None,
|
created_from_catalog_version: str | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> SaveArtifactResult:
|
||||||
return await handlers.create_artifact_from_plan(
|
return await handlers.create_artifact_from_plan(
|
||||||
artifact_id=artifact_id,
|
artifact_id=artifact_id,
|
||||||
version=version,
|
version=version,
|
||||||
@@ -254,7 +274,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
) = None,
|
) = None,
|
||||||
source_bindings: Mapping[str, str] | None = None,
|
source_bindings: Mapping[str, str] | None = None,
|
||||||
created_from_catalog_version: str | None = None,
|
created_from_catalog_version: str | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> SavedDraftArtifactResult:
|
||||||
return await handlers.create_artifact_from_draft(
|
return await handlers.create_artifact_from_draft(
|
||||||
artifact_id=artifact_id,
|
artifact_id=artifact_id,
|
||||||
version=version,
|
version=version,
|
||||||
@@ -284,7 +304,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
async def patch_draft(
|
async def patch_draft(
|
||||||
draft: dict[str, Any],
|
draft: dict[str, Any],
|
||||||
patch: list[dict[str, Any]],
|
patch: list[dict[str, Any]],
|
||||||
) -> dict[str, Any]:
|
) -> PatchDraftResult:
|
||||||
return await handlers.patch_draft(draft=draft, patch=patch)
|
return await handlers.patch_draft(draft=draft, patch=patch)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -390,7 +410,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
)
|
)
|
||||||
async def compile_draft_workspace(
|
async def compile_draft_workspace(
|
||||||
request: CompileDraftWorkspaceRequest,
|
request: CompileDraftWorkspaceRequest,
|
||||||
) -> dict[str, Any]:
|
) -> CompileDraftWorkspaceResult:
|
||||||
return await handlers.compile_draft_workspace(
|
return await handlers.compile_draft_workspace(
|
||||||
workspace_id=request.workspace_id,
|
workspace_id=request.workspace_id,
|
||||||
)
|
)
|
||||||
@@ -786,7 +806,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
)
|
)
|
||||||
async def create_artifact_from_workspace(
|
async def create_artifact_from_workspace(
|
||||||
request: CreateArtifactFromWorkspaceRequest,
|
request: CreateArtifactFromWorkspaceRequest,
|
||||||
) -> dict[str, Any]:
|
) -> ApiCreateArtifactFromWorkspaceResult:
|
||||||
return await handlers.create_artifact_from_workspace(
|
return await handlers.create_artifact_from_workspace(
|
||||||
workspace_id=request.workspace_id,
|
workspace_id=request.workspace_id,
|
||||||
artifact_id=request.artifact_id,
|
artifact_id=request.artifact_id,
|
||||||
@@ -819,7 +839,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
)
|
)
|
||||||
async def create_wrapper_from_workspace(
|
async def create_wrapper_from_workspace(
|
||||||
request: CreateWrapperFromWorkspaceRequest,
|
request: CreateWrapperFromWorkspaceRequest,
|
||||||
) -> dict[str, Any]:
|
) -> ApiCreateArtifactFromWorkspaceResult:
|
||||||
return await handlers.create_wrapper_from_workspace(
|
return await handlers.create_wrapper_from_workspace(
|
||||||
workspace_id=request.workspace_id,
|
workspace_id=request.workspace_id,
|
||||||
artifact_id=request.artifact_id,
|
artifact_id=request.artifact_id,
|
||||||
@@ -845,7 +865,9 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Inspect Workflow Artifact",
|
title="Inspect Workflow Artifact",
|
||||||
description="Return the full saved artifact for artifact_id and version.",
|
description="Return the full saved artifact for artifact_id and version.",
|
||||||
)
|
)
|
||||||
async def inspect_artifact(artifact_id: str, version: int) -> dict[str, Any]:
|
async def inspect_artifact(
|
||||||
|
artifact_id: str, version: int
|
||||||
|
) -> WorkflowArtifactPayload:
|
||||||
return await handlers.inspect_artifact(
|
return await handlers.inspect_artifact(
|
||||||
artifact_id=artifact_id,
|
artifact_id=artifact_id,
|
||||||
version=version,
|
version=version,
|
||||||
@@ -859,7 +881,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
"inspect_deployment for full source bindings."
|
"inspect_deployment for full source bindings."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def list_deployments() -> dict[str, Any]:
|
async def list_deployments() -> ListDeploymentsResult:
|
||||||
return await handlers.list_deployments()
|
return await handlers.list_deployments()
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -867,7 +889,9 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Inspect Workflow Deployment",
|
title="Inspect Workflow Deployment",
|
||||||
description="Return one full workflow deployment including source bindings.",
|
description="Return one full workflow deployment including source bindings.",
|
||||||
)
|
)
|
||||||
async def inspect_deployment(deployment_id: str) -> dict[str, Any]:
|
async def inspect_deployment(
|
||||||
|
deployment_id: str,
|
||||||
|
) -> WorkflowDeploymentPayload:
|
||||||
return await handlers.inspect_deployment(deployment_id=deployment_id)
|
return await handlers.inspect_deployment(deployment_id=deployment_id)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -875,7 +899,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
title="Save Workflow Deployment",
|
title="Save Workflow Deployment",
|
||||||
description="Persist a workflow deployment that binds logical sources.",
|
description="Persist a workflow deployment that binds logical sources.",
|
||||||
)
|
)
|
||||||
async def save_deployment(deployment: dict[str, Any]) -> dict[str, Any]:
|
async def save_deployment(deployment: dict[str, Any]) -> SaveDeploymentResult:
|
||||||
return await handlers.save_deployment(deployment)
|
return await handlers.save_deployment(deployment)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
@@ -891,7 +915,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
str,
|
str,
|
||||||
Field(description="Saved workflow deployment id to delete."),
|
Field(description="Saved workflow deployment id to delete."),
|
||||||
],
|
],
|
||||||
) -> dict[str, Any]:
|
) -> ApiDeleteDeploymentResult:
|
||||||
return await handlers.delete_deployment(deployment_id=deployment_id)
|
return await handlers.delete_deployment(deployment_id=deployment_id)
|
||||||
|
|
||||||
@server.tool(
|
@server.tool(
|
||||||
|
|||||||
Reference in New Issue
Block a user