feat: build mcp server from workflow config

This commit is contained in:
lda
2026-06-05 01:29:10 +07:00 Verified
parent 0b9ff5fcd1
commit f0346c6735
11 changed files with 285 additions and 4 deletions
+2
View File
@@ -7,6 +7,7 @@ from .discovery import (
from .events import McpEvent, make_event
from .server import (
build_workflow_server_from_config,
build_workflow_server_from_workflow_config,
create_broker_server,
workflow_server_from_service,
)
@@ -21,6 +22,7 @@ __all__ = [
"WfMcpService",
"build_service_from_config",
"build_workflow_server_from_config",
"build_workflow_server_from_workflow_config",
"create_broker_server",
"discover_connection_capabilities",
"load_broker_config",
+21 -1
View File
@@ -4,12 +4,13 @@ import json
from pathlib import Path
from wf_api import file_workflow_stores
from wf_config import WorkflowConfigFile
from ..control import BrokerConfigFile
from ..models import BrokerConfig
from ..runtime import McpRuntimePool, PersistentSessionFactory
from ..sdk import McpSdkAdapter
from ..source_registry import FileSourceRegistryStore
from ..source_registry import FileSourceRegistryStore, workflow_mcp_source_to_connection_config
from ..storage import FileStore
from .service import WfMcpService
@@ -21,6 +22,18 @@ def load_broker_config(path: str | Path) -> BrokerConfig:
return BrokerConfigFile.model_validate(data).to_runtime(config_path=config_path)
def broker_config_from_workflow_config(config: WorkflowConfigFile) -> BrokerConfig:
"""Create MCP broker runtime config from neutral workflow server config."""
return BrokerConfig(
store_root=config.server.store.root,
connections=[
workflow_mcp_source_to_connection_config(source)
for source in config.server.sources
if getattr(source, "kind", None) == "mcp"
],
)
def build_service_from_config(config: BrokerConfig) -> WfMcpService:
"""Create a broker service with SDK adapters for configured connections."""
runtime_factory = PersistentSessionFactory()
@@ -44,3 +57,10 @@ def build_service_from_config(config: BrokerConfig) -> WfMcpService:
if connection.server not in service.adapters:
service.register_adapter(connection.server, McpSdkAdapter())
return service
__all__ = [
"broker_config_from_workflow_config",
"build_service_from_config",
"load_broker_config",
]
+12 -1
View File
@@ -12,8 +12,9 @@ from wf_api import (
from wf_api.stores import WorkflowStores
from wf_server import WorkflowServer, WorkflowServerConfig
from wf_config import WorkflowConfigFile
from .artifact_tools import register_artifact_tools
from .config import build_service_from_config
from .config import broker_config_from_workflow_config, build_service_from_config
from .prompts import register_broker_prompts
from .resources import register_broker_resources
from .service import WfMcpService
@@ -101,8 +102,18 @@ def build_workflow_server_from_config(config: BrokerConfig) -> WorkflowServer:
)
def build_workflow_server_from_workflow_config(
config: WorkflowConfigFile,
) -> WorkflowServer:
"""Build an MCP-backed WorkflowServer from neutral workflow config sources."""
return build_workflow_server_from_config(
broker_config_from_workflow_config(config)
)
__all__ = [
"build_workflow_server_from_config",
"build_workflow_server_from_workflow_config",
"create_broker_server",
"workflow_server_from_service",
]