googleapis/mcp-toolbox · error

failed to unmarshal session JSON: %w

Error message

failed to unmarshal session JSON: %w

What it means

encoding/json.Unmarshal failed to decode the protojson output into map[string]any in GetSession — the serialized session contained a JSON construct the decoder rejects.

Source

Thrown at internal/sources/serverlessspark/serverlessspark.go:442

func (s *Source) GetSession(ctx context.Context, name string) (map[string]any, error) {
	client := s.GetSessionControllerClient()
	req := &dataprocpb.GetSessionRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/sessions/%s", s.GetProject(), s.GetLocation(), name),
	}

	sessionPb, err := client.GetSession(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to get session: %w", err)
	}

	jsonBytes, err := protojson.Marshal(sessionPb)
	if err != nil {
		return nil, fmt.Errorf("failed to marshal session to JSON: %w", err)
	}

	var result map[string]any
	if err := json.Unmarshal(jsonBytes, &result); err != nil {
		return nil, fmt.Errorf("failed to unmarshal session JSON: %w", err)
	}

	consoleUrl, err := SessionConsoleURLFromProto(sessionPb)
	if err != nil {
		return nil, fmt.Errorf("error generating console url: %v", err)
	}
	logsUrl, err := SessionLogsURLFromProto(sessionPb)
	if err != nil {
		return nil, fmt.Errorf("error generating logs url: %v", err)
	}

	wrappedResult := map[string]any{
		"consoleUrl": consoleUrl,
		"logsUrl":    logsUrl,
		"session":    result,
	}

	return wrappedResult, nil

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Retry the fetch
  2. Inspect logs for the offending JSON payload
  3. Report consistently failing sessions upstream
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at internal/sources/serverlessspark/serverlessspark.go:442 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/8c0b712dd06e1b56. Report an issue: GitHub.