app

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2025 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	InstallMySQL = "install_mysql"
)
View Source
const (
	InstallOpenResty = "install_openresty"
)
View Source
const (
	ListInstalledApps = "list_installed_apps"
)

Variables

View Source
var InstallMySQLTool = mcp.NewServerTool[InstallMySQLInput, any](
	InstallMySQL,
	"install mysql, if not set name, default is mysql, if not set version, default is '', if not set root_password, default is '')",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[InstallMySQLInput]) (*mcp.CallToolResultFor[any], error) {
		input := params.Arguments
		name := input.Name
		if name == "" {
			name = "mysql"
		}

		version := input.Version
		if version == "latest" {
			version = ""
		}

		appRes := &types.AppRes{}
		result, err := utils.NewPanelClient("GET", "/apps/mysql").Request(appRes)
		if err != nil {
			return result, err
		}
		exist := false
		for _, v := range appRes.Data.Versions {
			if v == version || strings.Contains(v, version) {
				version = v
				exist = true
				break
			}
		}
		if !exist {
			err := errors.New("version not found")
			return &mcp.CallToolResult{
				Content: []mcp.Content{
					&mcp.TextContent{Text: err.Error()},
				},
				IsError: true,
			}, err
		}
		if version == "" {
			version = appRes.Data.Versions[0]
		}
		appID := appRes.Data.ID
		appDetailURL := fmt.Sprintf("/apps/detail/%d/%s/app", appID, version)
		appDetailRes := &types.AppDetailRes{}
		result, err = utils.NewPanelClient("GET", appDetailURL).Request(appDetailRes)
		if err != nil {
			return result, err
		}
		appDetailID := appDetailRes.Data.ID

		port := input.Port
		if port == 0 {
			port = 3306
		}

		rootPassword := input.RootPassword
		if rootPassword == "" {
			rootPassword = fmt.Sprintf("mysql_%s", utils.GetRandomStr(6))
		}

		req := &types.AppInstallCreate{
			AppDetailID: appDetailID,
			Name:        name,
			Params: map[string]interface{}{
				"PANEL_APP_PORT_HTTP":    port,
				"PANEL_DB_ROOT_PASSWORD": rootPassword,
			},
		}
		res := &types.Response{}
		result, err = utils.NewPanelClient("POST", "/apps/install", utils.WithPayload(req)).Request(res)
		if result != nil {
			result.StructuredContent = res
		}
		return result, err
	},
)
View Source
var InstallOpenRestyTool = mcp.NewServerTool[InstallOpenRestyInput, any](
	InstallOpenResty,
	"install openresty, if not set name, default is openresty, if not set http_port, default is 80, if not set https_port, default is 443",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[InstallOpenRestyInput]) (*mcp.CallToolResultFor[any], error) {
		input := params.Arguments
		name := input.Name
		if name == "" {
			name = "openresty"
		}

		httpPort := input.HttpPort
		if httpPort == 0 {
			httpPort = 80
		}

		httpsPort := input.HttpsPort
		if httpsPort == 0 {
			httpsPort = 443
		}

		appRes := &types.AppRes{}
		result, err := utils.NewPanelClient("GET", "/apps/openresty").Request(appRes)
		if err != nil {
			return result, err
		}
		version := appRes.Data.Versions[0]
		appID := appRes.Data.ID
		appDetailURL := fmt.Sprintf("/apps/detail/%d/%s/app", appID, version)
		appDetailRes := &types.AppDetailRes{}
		result, err = utils.NewPanelClient("GET", appDetailURL).Request(appDetailRes)
		if err != nil {
			return result, err
		}

		appDetailID := appDetailRes.Data.ID

		req := &types.AppInstallCreate{
			AppDetailID: appDetailID,
			Name:        name,
			Params: map[string]interface{}{
				"PANEL_APP_PORT_HTTP":  httpPort,
				"PANEL_APP_PORT_HTTPS": httpsPort,
			},
		}
		res := &types.Response{}
		result, err = utils.NewPanelClient("POST", "/apps/install", utils.WithPayload(req)).Request(res)
		if result != nil {
			result.StructuredContent = res
		}
		return result, err
	},
)
View Source
var ListInstalledAppsTool = mcp.NewServerTool[ListInstalledAppsInput, any](
	ListInstalledApps,
	"list installed apps",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[ListInstalledAppsInput]) (*mcp.CallToolResultFor[any], error) {
		req := &types.PageRequest{
			Page:     1,
			PageSize: 500,
		}
		appListRes := &types.AppInstalledListResponse{}
		result, err := utils.NewPanelClient("POST", "/apps/installed/search", utils.WithPayload(req)).Request(appListRes)
		if result != nil {
			result.StructuredContent = appListRes
		}
		return result, err
	},
)

Functions

This section is empty.

Types

type InstallMySQLInput added in v0.2.0

type InstallMySQLInput struct {
	Name         string  `json:"name" jsonschema:"mysql name"`
	Version      string  `json:"version,omitempty" jsonschema:"mysql version, not support latest version"`
	RootPassword string  `json:"root_password,omitempty" jsonschema:"mysql root password"`
	Port         float64 `json:"port,omitempty" jsonschema:"mysql port"`
}

type InstallOpenRestyInput added in v0.2.0

type InstallOpenRestyInput struct {
	Name      string  `json:"name,omitempty" jsonschema:"openresty name"`
	HttpPort  float64 `json:"http_port,omitempty" jsonschema:"openresty http port"`
	HttpsPort float64 `json:"https_port,omitempty" jsonschema:"openresty https port"`
}

type ListInstalledAppsInput added in v0.2.0

type ListInstalledAppsInput struct {
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL