mirror of
https://github.com/alibaba/higress.git
synced 2026-06-06 11:17:29 +08:00
feat : support mcp server auto discovery for nacos registry (#2122)
Co-authored-by: 澄潭 <zty98751@alibaba-inc.com>
This commit is contained in:
155
registry/mcp_model.go
Normal file
155
registry/mcp_model.go
Normal file
@@ -0,0 +1,155 @@
|
||||
// Copyright (c) 2022 Alibaba Group Holding Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package registry
|
||||
|
||||
const (
|
||||
JsonGoTemplateType = "json-go-template"
|
||||
|
||||
IstioMcpAutoGeneratedPrefix = "istio-autogenerated-mcp"
|
||||
IstioMcpAutoGeneratedVsName = IstioMcpAutoGeneratedPrefix + "-vs"
|
||||
IstioMcpAutoGeneratedSeName = IstioMcpAutoGeneratedPrefix + "-se"
|
||||
IstioMcpAutoGeneratedDrName = IstioMcpAutoGeneratedPrefix + "-dr"
|
||||
IstioMcpAutoGeneratedHttpRouteName = IstioMcpAutoGeneratedPrefix + "-httproute"
|
||||
|
||||
DefaultMcpToolsGroup = "mcp-tools"
|
||||
DefaultMcpCredentialsGroup = "credentials"
|
||||
DefaultNacosServiceNamespace = "public"
|
||||
|
||||
StdioProtocol = "stdio"
|
||||
HttpProtocol = "http"
|
||||
DubboProtocol = "dubbo"
|
||||
McpSSEProtocol = "mcp-sse"
|
||||
McpStreambleProtocol = "mcp-streamble"
|
||||
)
|
||||
|
||||
type McpToolArgsType string
|
||||
|
||||
// WasmPluginConfig Struct for mcp tool wasm plugin marshal
|
||||
type WasmPluginConfig struct {
|
||||
Rules []*McpServerRule `json:"_rules_"`
|
||||
}
|
||||
|
||||
type McpServerRule struct {
|
||||
MatchRoute []string `json:"_match_route_,omitempty"`
|
||||
Server *ServerConfig `json:"server"`
|
||||
Tools []*McpTool `json:"tools"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Config map[string]interface{} `json:"config,omitempty"`
|
||||
AllowTools []string `json:"allowTools,omitempty"`
|
||||
}
|
||||
|
||||
type McpTool struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Args []*ToolArgs `json:"args,omitempty"`
|
||||
RequestTemplate *RequestTemplate `json:"requestTemplate"`
|
||||
ResponseTemplate *ResponseTemplate `json:"responseTemplate"`
|
||||
}
|
||||
|
||||
type ToolArgs struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Required bool `json:"required,omitempty"`
|
||||
Default interface{} `json:"default,omitempty"`
|
||||
Enum []interface{} `json:"enum,omitempty"`
|
||||
Items []interface{} `json:"items,omitempty"`
|
||||
Properties interface{} `json:"properties,omitempty"`
|
||||
Position string `json:"position,omitempty"`
|
||||
}
|
||||
|
||||
type RequestTemplate struct {
|
||||
URL string `json:"url"`
|
||||
Method string `json:"method"`
|
||||
Headers []*RequestTemplateHeaders `json:"headers,omitempty"`
|
||||
Body string `json:"body,omitempty"`
|
||||
ArgsToJsonBody bool `json:"argsToJsonBody,omitempty"`
|
||||
ArgsToUrlParam bool `json:"argsToUrlParam,omitempty"`
|
||||
ArgsToFormBody bool `json:"argsToFormBody,omitempty"`
|
||||
}
|
||||
|
||||
type RequestTemplateHeaders struct {
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type ResponseTemplate struct {
|
||||
Body string `json:"body,omitempty"`
|
||||
PrependBody string `json:"prependBody,omitempty"`
|
||||
AppendBody string `json:"appendBody,omitempty"`
|
||||
}
|
||||
|
||||
// McpServer Struct for mcp server json unmarshal
|
||||
type McpServer struct {
|
||||
Protocol string `json:"protocol,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
Enabled bool `json:"enabled,omitempty"`
|
||||
RemoteServerConfig *RemoteServerConfig `json:"remoteServerConfig,omitempty"`
|
||||
Credentials map[string]*CredentialRef `json:"credentials,omitempty"`
|
||||
ToolsDescriptionRef string `json:"toolsDescriptionRef,omitempty"`
|
||||
PromptDescriptionRef string `json:"promptDescriptionRef,omitempty"`
|
||||
ResourceDescriptionRef string `json:"resourceDescriptionRef,omitempty"`
|
||||
}
|
||||
|
||||
type RemoteServerConfig struct {
|
||||
ServiceRef *ServiceRef `json:"serviceRef,omitempty"`
|
||||
ExportPath string `json:"exportPath,omitempty"`
|
||||
BackendProtocol string `json:"backendProtocol,omitempty"`
|
||||
}
|
||||
|
||||
type CredentialRef struct {
|
||||
Ref string `json:"ref,omitempty"`
|
||||
}
|
||||
|
||||
type ServiceRef struct {
|
||||
NamespaceId string `json:"namespaceId,omitempty"`
|
||||
GroupName string `json:"groupName,omitempty"`
|
||||
ServiceName string `json:"serviceName,omitempty"`
|
||||
}
|
||||
|
||||
// McpToolConfig Struct for mcp tool json unmarshal
|
||||
type McpToolConfig struct {
|
||||
Tools []*ToolDescription `json:"tools,omitempty"`
|
||||
ToolsMeta map[string]*ToolsMeta `json:"toolsMeta,omitempty"`
|
||||
}
|
||||
|
||||
type ToolDescription struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
InputSchema InputSchema `json:"inputSchema"`
|
||||
}
|
||||
|
||||
type InputSchema struct {
|
||||
Type string `json:"type,omitempty"`
|
||||
Properties map[string]interface{} `json:"properties,omitempty"`
|
||||
Required []string `json:"required,omitempty"`
|
||||
}
|
||||
|
||||
type ToolsMeta struct {
|
||||
InvokeContext map[string]string `json:"InvokeContext,omitempty"`
|
||||
Enabled bool `json:"Enabled,omitempty"`
|
||||
Templates map[string]interface{} `json:"Templates,omitempty"`
|
||||
}
|
||||
|
||||
type JsonGoTemplate struct {
|
||||
RequestTemplate RequestTemplate `json:"requestTemplate"`
|
||||
ResponseTemplate ResponseTemplate `json:"responseTemplate"`
|
||||
ArgsPosition map[string]string `json:"argsPosition,omitempty"`
|
||||
}
|
||||
Reference in New Issue
Block a user