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"`
}
Click to show internal directories.
Click to hide internal directories.