database

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: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CreateDatabase = "create_database"
)
View Source
const (
	ListDatabases = "list_databases"
)

Variables

View Source
var CreateDatabaseTool = mcp.NewServerTool[CreateDatabaseInput, any](
	CreateDatabase,
	"create a database by type name and password",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[CreateDatabaseInput]) (*mcp.CallToolResultFor[any], error) {
		input := params.Arguments
		if input.Database == "" {
			err := errors.New("database name is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		if input.DatabaseType == "" {
			err := errors.New("database type is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		if input.DatabaseType != "mysql" && input.DatabaseType != "postgresql" {
			err := errors.New("database type is invalid, support mysql and postgresql")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		if input.Name == "" {
			err := errors.New("name is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}

		password := input.Password
		if password == "" {
			password = utils.GetRandomStr(12)
		}
		encodedPassword := base64.StdEncoding.EncodeToString([]byte(password))

		username := input.Username
		if username == "" {
			username = input.Name
		}

		createReq := &types.CreateDatabaseRequest{
			Database: input.Database,
			Password: encodedPassword,
			Type:     input.DatabaseType,
			Name:     input.Name,
			From:     "local",
			Username: username,
		}
		var createURL string
		if input.DatabaseType == "mysql" {
			createURL = "/databases"
			createReq.Format = "utf8mb4"
			createReq.Permission = "%"
		} else {
			createURL = "/databases/pg"
			createReq.Format = "UTF8"
		}
		res := &types.Response{}
		result, err := utils.NewPanelClient("POST", createURL, utils.WithPayload(createReq)).Request(res)
		if result != nil {
			result.StructuredContent = res
		}
		return result, err
	},
)
View Source
var ListDatabasesTool = mcp.NewServerTool[ListDatabasesInput, any](
	ListDatabases,
	"list databases by name",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[ListDatabasesInput]) (*mcp.CallToolResultFor[any], error) {
		database := params.Arguments.Name
		if database == "" {
			err := errors.New("database name is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{
					&mcp.TextContent{Text: err.Error()},
				},
				IsError: true,
			}, err
		}
		pageReq := &types.ListDatabaseRequest{
			PageRequest: types.PageRequest{
				Page:     1,
				PageSize: 500,
			},
			Order:    "null",
			OrderBy:  "created_at",
			Database: database,
		}
		databaseListRes := &types.DatabaseListResponse{}
		result, err := utils.NewPanelClient("POST", "/databases/search", utils.WithPayload(pageReq)).Request(databaseListRes)
		if result != nil {
			result.StructuredContent = databaseListRes
		}
		return result, err
	},
)

Functions

This section is empty.

Types

type CreateDatabaseInput added in v0.2.0

type CreateDatabaseInput struct {
	DatabaseType string `json:"database_type" jsonschema:"installed database app type, support mysql and postgresql"`
	Database     string `json:"database" jsonschema:"installed database app name"`
	Name         string `json:"name" jsonschema:"database name"`
	Username     string `json:"username,omitempty" jsonschema:"database username"`
	Password     string `json:"password,omitempty" jsonschema:"database password"`
}

type ListDatabasesInput added in v0.2.0

type ListDatabasesInput struct {
	Name string `json:"name" jsonschema:"database name"`
}

Jump to

Keyboard shortcuts

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