i_mcp_node.py 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. # coding=utf-8
  2. from typing import Type
  3. from django.utils.translation import gettext_lazy as _
  4. from rest_framework import serializers
  5. from application.flow.common import WorkflowMode
  6. from application.flow.i_step_node import INode, NodeResult
  7. class McpNodeSerializer(serializers.Serializer):
  8. mcp_servers = serializers.JSONField(required=True, label=_("Mcp servers"))
  9. mcp_server = serializers.CharField(required=True, label=_("Mcp server"))
  10. mcp_tool = serializers.CharField(required=True, label=_("Mcp tool"))
  11. mcp_tool_id = serializers.CharField(required=False, label=_("Mcp tool"), allow_null=True, allow_blank=True)
  12. mcp_source = serializers.CharField(required=False, label=_("Mcp source"), allow_blank=True, allow_null=True)
  13. tool_params = serializers.DictField(required=True, label=_("Tool parameters"))
  14. class IMcpNode(INode):
  15. type = 'mcp-node'
  16. support = [WorkflowMode.APPLICATION, WorkflowMode.APPLICATION_LOOP, WorkflowMode.KNOWLEDGE,
  17. WorkflowMode.KNOWLEDGE_LOOP, WorkflowMode.TOOL, WorkflowMode.TOOL_LOOP]
  18. def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
  19. return McpNodeSerializer
  20. def _run(self):
  21. return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data)
  22. def execute(self, mcp_servers, mcp_server, mcp_tool, mcp_tool_id, mcp_source, tool_params, **kwargs) -> NodeResult:
  23. pass