From 414b07816bb1108c5e520d3d893d324171a108cd Mon Sep 17 00:00:00 2001 From: aliciatang07 Date: Thu, 5 Feb 2026 18:55:16 +0000 Subject: [PATCH 1/2] add new tool for getting state --- .../cloudrun/client/cloudrunclient.go | 10 ++++++++++ devops-mcp-server/cloudrun/cloudrun.go | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/devops-mcp-server/cloudrun/client/cloudrunclient.go b/devops-mcp-server/cloudrun/client/cloudrunclient.go index 2b11664..b604d57 100644 --- a/devops-mcp-server/cloudrun/client/cloudrunclient.go +++ b/devops-mcp-server/cloudrun/client/cloudrunclient.go @@ -47,6 +47,7 @@ func ContextWithClient(ctx context.Context, client CloudRunClient) context.Conte // CloudRunClient is an interface for interacting with the Cloud Run API. type CloudRunClient interface { GetService(ctx context.Context, projectID, location, serviceName string) (*cloudrunpb.Service, error) + GetStatus(ctx context.Context, projectID, location, serviceName string) (State, error) ListServices(ctx context.Context, projectID, location string) ([]*cloudrunpb.Service, error) CreateService(ctx context.Context, projectID, location, serviceName, imageURL string, port int32) (*cloudrunpb.Service, error) UpdateService(ctx context.Context, projectID, location, serviceName, imageURL, revisionName string, port int32, service *cloudrunpb.Service) (*cloudrunpb.Service, error) @@ -144,6 +145,15 @@ func (c *CloudRunClientImpl) GetService(ctx context.Context, projectID, location return service, nil } +func (c *CloudRunClientImpl) GetStatus(ctx context.Context, projectID, location, serviceName string) (*cloudrunpb.Condition_State, error) { + service, err:= c.GetService(ctx, projectID, location, serviceName) + if err!=nil { + return nil, fmt.Errorf("failed to get service: %w", err) + } + terminalCondition:= service.GetTerminalCondition() + return terminalCondition.State, nil +} + func (c *CloudRunClientImpl) GetRevision(ctx context.Context, service *cloudrunpb.Service) (*cloudrunpb.Revision, error) { // Get the latest revision latestRevision, err := c.revisionsClient.GetRevision(ctx, &cloudrunpb.GetRevisionRequest{Name: service.LatestReadyRevision}) diff --git a/devops-mcp-server/cloudrun/cloudrun.go b/devops-mcp-server/cloudrun/cloudrun.go index a174223..8e5a500 100644 --- a/devops-mcp-server/cloudrun/cloudrun.go +++ b/devops-mcp-server/cloudrun/cloudrun.go @@ -36,6 +36,7 @@ func (h *Handler) Register(server *mcp.Server) { addListServicesTool(server, h.CrClient) addDeployToCloudRunFromImageTool(server, h.CrClient) addDeployToCloudRunFromSourceTool(server, h.CrClient) + addGetServiceStatus(server, h.CrClient) } type ListServicesArgs struct { @@ -134,3 +135,19 @@ func addDeployToCloudRunFromSourceTool(server *mcp.Server, crClient cloudrunclie } mcp.AddTool(server, &mcp.Tool{Name: "cloudrun.deploy_to_cloud_run_from_source", Description: "Creates a new Cloud Run service or updates an existing one from source. This tool may take a couple minutes to finish running."}, deployToCloudRunFromSourceToolFunc) } + +type GetServiceStatusArgs struct{ + ProjectID string `json:"project_id" jsonschema:"The Google Cloud project ID."` + Location string `json:"location" jsonschema:"The Google Cloud location."` + ServiceName string `json: service_name jsonschema:"The Cloud Run service name"` +} + +func addGetServiceStatusTool(server *mcp.Server, crClient cloudrunclient.CloudRunClient) { + getServiceStatusToolFunc = func(ctx context.Context, req* mcp.CallToolRequest, args GetServiceStatusArgs){ + state, err := crClient.GetServiceStatus(ctx, args.ProjectID, args.Location, args.ServiceName) + if err != nil { + return &mcp.CallToolResult{}, nil, fmt.Errorf("failed to get service state: %w", err) + } + return &mcp.CallToolResult{}, state, nil + } +} From 7cdfa0de06f7fa55b1d88ec876f844b768004a05 Mon Sep 17 00:00:00 2001 From: "Xuejie(Alicia) Tang" Date: Mon, 9 Feb 2026 13:38:50 -0500 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- devops-mcp-server/cloudrun/client/cloudrunclient.go | 10 +++++----- devops-mcp-server/cloudrun/cloudrun.go | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/devops-mcp-server/cloudrun/client/cloudrunclient.go b/devops-mcp-server/cloudrun/client/cloudrunclient.go index b604d57..0768d8f 100644 --- a/devops-mcp-server/cloudrun/client/cloudrunclient.go +++ b/devops-mcp-server/cloudrun/client/cloudrunclient.go @@ -47,7 +47,7 @@ func ContextWithClient(ctx context.Context, client CloudRunClient) context.Conte // CloudRunClient is an interface for interacting with the Cloud Run API. type CloudRunClient interface { GetService(ctx context.Context, projectID, location, serviceName string) (*cloudrunpb.Service, error) - GetStatus(ctx context.Context, projectID, location, serviceName string) (State, error) + GetStatus(ctx context.Context, projectID, location, serviceName string) (*cloudrunpb.Condition_State, error) ListServices(ctx context.Context, projectID, location string) ([]*cloudrunpb.Service, error) CreateService(ctx context.Context, projectID, location, serviceName, imageURL string, port int32) (*cloudrunpb.Service, error) UpdateService(ctx context.Context, projectID, location, serviceName, imageURL, revisionName string, port int32, service *cloudrunpb.Service) (*cloudrunpb.Service, error) @@ -146,12 +146,12 @@ func (c *CloudRunClientImpl) GetService(ctx context.Context, projectID, location } func (c *CloudRunClientImpl) GetStatus(ctx context.Context, projectID, location, serviceName string) (*cloudrunpb.Condition_State, error) { - service, err:= c.GetService(ctx, projectID, location, serviceName) - if err!=nil { + service, err := c.GetService(ctx, projectID, location, serviceName) + if err != nil { return nil, fmt.Errorf("failed to get service: %w", err) } - terminalCondition:= service.GetTerminalCondition() - return terminalCondition.State, nil + terminalCondition := service.GetTerminalCondition() + return &terminalCondition.State, nil } func (c *CloudRunClientImpl) GetRevision(ctx context.Context, service *cloudrunpb.Service) (*cloudrunpb.Revision, error) { diff --git a/devops-mcp-server/cloudrun/cloudrun.go b/devops-mcp-server/cloudrun/cloudrun.go index 8e5a500..40d7d10 100644 --- a/devops-mcp-server/cloudrun/cloudrun.go +++ b/devops-mcp-server/cloudrun/cloudrun.go @@ -139,7 +139,7 @@ func addDeployToCloudRunFromSourceTool(server *mcp.Server, crClient cloudrunclie type GetServiceStatusArgs struct{ ProjectID string `json:"project_id" jsonschema:"The Google Cloud project ID."` Location string `json:"location" jsonschema:"The Google Cloud location."` - ServiceName string `json: service_name jsonschema:"The Cloud Run service name"` + ServiceName string `json:"service_name" jsonschema:"The Cloud Run service name"` } func addGetServiceStatusTool(server *mcp.Server, crClient cloudrunclient.CloudRunClient) {