diff --git a/pkg/mcp-server/adapters/resource_query_adapter.go b/pkg/mcp-server/adapters/resource_query_adapter.go index a89a1982d2..74d82ad94f 100644 --- a/pkg/mcp-server/adapters/resource_query_adapter.go +++ b/pkg/mcp-server/adapters/resource_query_adapter.go @@ -36,6 +36,7 @@ func (a CloudpodsAdapter) ListCloudRegions(ctx context.Context, limit int, offse // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -92,6 +93,7 @@ func (a *CloudpodsAdapter) ListVPCs(ctx context.Context, limit int, offset int, // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -148,6 +150,7 @@ func (a *CloudpodsAdapter) ListNetworks(ctx context.Context, limit int, offset i // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -205,6 +208,7 @@ func (a *CloudpodsAdapter) ListImages(ctx context.Context, limit int, offset int // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -263,6 +267,7 @@ func (a *CloudpodsAdapter) ListServerSkus(ctx context.Context, limit int, offset // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -361,6 +366,7 @@ func (a *CloudpodsAdapter) ListStorages(ctx context.Context, limit int, offset i // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) @@ -447,6 +453,7 @@ func (a *CloudpodsAdapter) ListServers(ctx context.Context, limit int, offset in // 构造查询参数 params := jsonutils.NewDict() + params.Set("scope", jsonutils.NewString("max")) if limit > 0 { // 设置查询结果数量限制 params.Set("limit", jsonutils.NewInt(int64(limit))) diff --git a/pkg/mcp-server/tools/cloudpods_server_operations_tool.go b/pkg/mcp-server/tools/cloudpods_server_operations_tool.go index 22736713fe..9a2ce0ed1e 100644 --- a/pkg/mcp-server/tools/cloudpods_server_operations_tool.go +++ b/pkg/mcp-server/tools/cloudpods_server_operations_tool.go @@ -44,8 +44,8 @@ func NewCloudpodsServerStartTool(adapter *adapters.CloudpodsAdapter) *CloudpodsS func (c *CloudpodsServerStartTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_start_server", - mcp.WithDescription("启动指定的Cloudpods虚拟机实例"), - mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID")), + mcp.WithDescription("启动指定的Cloudpods虚拟机实例。用户要求开机/启动时必须调用本工具真正执行启动,仅调用cloudpods_list_servers 查询不算完成。若尚不知 server_id,先用 cloudpods_list_servers(可用 search)定位,拿到 id 后立即调用本工具,不要只查询就结束。"), + mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID,来自 cloudpods_list_servers 返回的 id 字段")), mcp.WithString("auto_prepaid", mcp.Description("按量机器自动转换为包年包月,默认为false")), mcp.WithString("qemu_version", mcp.Description("指定启动虚拟机的Qemu版本,可选值:2.12.1, 4.2.0,仅适用于KVM虚拟机")), mcp.WithString("ak", mcp.Description("用户登录cloudpods后获取的access key")), @@ -132,8 +132,8 @@ func NewCloudpodsServerStopTool(adapter *adapters.CloudpodsAdapter) *CloudpodsSe func (c *CloudpodsServerStopTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_stop_server", - mcp.WithDescription("停止指定的Cloudpods虚拟机实例"), - mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID")), + mcp.WithDescription("停止指定的Cloudpods虚拟机实例。用户要求关机/停止时必须调用本工具真正执行停止,仅调用 cloudpods_list_servers 查询不算完成。若尚不知 server_id,先用 cloudpods_list_servers(可用 search)定位,拿到 id 后立即调用本工具,不要只查询就结束,也不要再次向用户确认。"), + mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID,来自 cloudpods_list_servers 返回的 id 字段")), mcp.WithString("is_force", mcp.Description("是否强制停止,默认为false")), mcp.WithString("stop_charging", mcp.Description("是否关机停止计费,默认为false")), mcp.WithString("timeout_secs", mcp.Description("关机等待时间,如果是强制关机,则等待时间为0,如果不设置,默认为30秒")), @@ -233,8 +233,8 @@ func NewCloudpodsServerRestartTool(adapter *adapters.CloudpodsAdapter) *Cloudpod func (c *CloudpodsServerRestartTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_restart_server", - mcp.WithDescription("重启指定的Cloudpods虚拟机实例"), - mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID")), + mcp.WithDescription("重启指定的Cloudpods虚拟机实例。用户要求重启时必须调用本工具真正执行重启,仅调用 cloudpods_list_servers 查询不算完成。若尚不知 server_id,先用 cloudpods_list_servers(可用 search)定位,拿到 id 后立即调用本工具,不要只查询就结束,也不要再次向用户确认。"), + mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID,来自 cloudpods_list_servers 返回的 id 字段")), mcp.WithString("is_force", mcp.Description("是否强制重启,默认为false")), mcp.WithString("ak", mcp.Description("用户登录cloudpods后获取的access key")), mcp.WithString("sk", mcp.Description("用户登录cloudpods后获取的secret key")), @@ -316,8 +316,8 @@ func NewCloudpodsServerResetPasswordTool(adapter *adapters.CloudpodsAdapter) *Cl func (c *CloudpodsServerResetPasswordTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_reset_server_password", - mcp.WithDescription("重置指定Cloudpods虚拟机的登录密码"), - mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID")), + mcp.WithDescription("重置指定Cloudpods虚拟机的登录密码。用户要求重置密码时必须调用本工具真正执行,仅调用 cloudpods_list_servers 查询不算完成。若尚不知 server_id,先用 cloudpods_list_servers 定位,拿到 id 后立即调用本工具。"), + mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID,来自 cloudpods_list_servers 返回的 id 字段")), mcp.WithString("password", mcp.Required(), mcp.Description("新密码,长度8-30个字符")), mcp.WithString("reset_password", mcp.Description("是否重置密码,默认为true")), mcp.WithString("auto_start", mcp.Description("重置后是否自动启动,默认为true")), @@ -424,8 +424,8 @@ func NewCloudpodsServerDeleteTool(adapter *adapters.CloudpodsAdapter) *Cloudpods func (c *CloudpodsServerDeleteTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_delete_server", - mcp.WithDescription("删除指定的Cloudpods虚拟机实例"), - mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID")), + mcp.WithDescription("删除指定的Cloudpods虚拟机实例。用户要求删除时必须调用本工具真正执行删除,仅调用 cloudpods_list_servers 查询不算完成。若尚不知 server_id,先用 cloudpods_list_servers 定位,拿到 id 后立即调用本工具。"), + mcp.WithString("server_id", mcp.Required(), mcp.Description("虚拟机ID,来自 cloudpods_list_servers 返回的 id 字段")), mcp.WithString("override_pending_delete", mcp.Description("是否强制删除(包括在回收站中的实例),默认为false")), mcp.WithString("purge", mcp.Description("是否仅删除本地资源,默认为false")), mcp.WithString("delete_snapshots", mcp.Description("是否删除快照,默认为false")), diff --git a/pkg/mcp-server/tools/cloudpods_servers_tool.go b/pkg/mcp-server/tools/cloudpods_servers_tool.go index abd8c1fa03..469b916904 100644 --- a/pkg/mcp-server/tools/cloudpods_servers_tool.go +++ b/pkg/mcp-server/tools/cloudpods_servers_tool.go @@ -54,7 +54,7 @@ func NewCloudpodsServersTool(adapter *adapters.CloudpodsAdapter) *CloudpodsServe func (c *CloudpodsServersTool) GetTool() mcp.Tool { return mcp.NewTool( "cloudpods_list_servers", - mcp.WithDescription("查询Cloudpods虚拟机实例列表,获取虚拟机信息"), + mcp.WithDescription("查询Cloudpods虚拟机实例列表,获取虚拟机信息(含id、name、status)。当用户要求启动/停止/重启/删除/重置密码时:先用本工具定位目标虚拟机,拿到返回结果中的id后,必须立刻继续调用对应操作工具(cloudpods_start_server / cloudpods_stop_server / cloudpods_restart_server / cloudpods_delete_server / cloudpods_reset_server_password)完成操作,不要只查询就结束,也不要再次向用户确认(除非匹配到多台需用户选择)。"), mcp.WithString("limit", mcp.Description("返回结果数量限制,默认为50")), mcp.WithString("offset", mcp.Description("结果偏移量,默认为0")), mcp.WithString("search", mcp.Description("按名称或ID模糊搜索")),