## Tool: `read_object`

Reads an object from Cloud Storage. Supports both text and binary content (it will output text for text content and binary for binary content).

Constraints \& Behavior:

- **Size Limit**: The maximum supported file size is 8MiB. Requests for larger objects will fail with an OutOfRange error.

<br />


The following sample demonstrates how to use `curl` to invoke the `read_object` MCP tool.

| Curl Request |
|---|
| ```bash curl --location 'https://storage.googleapis.com/storage/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "read_object", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' ``` |

## Input Schema

Request message for ReadObject.

### ReadBlobRequest

| JSON representation |
|---|
| ``` { "bucketName": string, "objectName": string, "contentType": string, "generation": string, "readOffset": string, "readLimit": string } ``` |

| Fields ||
|---|---|
| `bucketName` | `string` Required. Cloud Storage bucket name. |
| `objectName` | `string` Required. Cloud Storage object name. |
| `contentType` | `string` Optional. The IANA media type of the object (for example, `application/pdf` or `image/png`). See [Media types](https://www.iana.org/assignments/media-types/media-types.xhtml). Only provide `contentType` if the object name or context strongly suggests a specific format. If unknown, leave this blank. |
| `generation` | `string (https://developers.google.com/discovery/v1/type-format format)` Optional. The generation of the object to read. If omitted or set to 0, the latest generation is read. |
| `readOffset` | `string (https://developers.google.com/discovery/v1/type-format format)` Optional. The offset from the beginning of the object at which the data should be read. If not specified, the read starts from the beginning of the object. Negative values are allowed and are interpreted as an offset from the end of the object. |
| `readLimit` | `string (https://developers.google.com/discovery/v1/type-format format)` Optional. The maximum number of bytes to read. If not specified, the read starts from the beginning of the object and continues until the end of the object. Zero means no limit. Negative values are not allowed. |

## Output Schema

### CallToolResponse

| JSON representation |
|---|
| ``` { "common": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ResponseFields`) }, "content": [ { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Content`) } ], "structuredContent": { object }, "isError": boolean } ``` |

| Fields ||
|---|---|
| `common` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ResponseFields`)`` |
| `content[]` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Content`)`` |
| `structuredContent` | ``object (`https://protobuf.dev/reference/protobuf/google.protobuf#struct` format)`` If the tool defines an output schema, this field will be populated. Clients that support structured output should ignore the content field above if this field is set. |
| `isError` | `boolean` Optional. |

### ResponseFields

| JSON representation |
|---|
| ``` { "instructions": string, "metadata": { object }, "dependentRequests": { string: { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ServerInitiatedRequest`) }, ... }, "resumeData": { object } } ``` |

| Fields ||
|---|---|
| `instructions` | `string` Optional. Sent only on the initial response on any RPC. |
| `metadata` | ``object (`https://protobuf.dev/reference/protobuf/google.protobuf#struct` format)`` Escape hatch for arbitrary side-channel data. |
| `dependentRequests` | ``map (key: string, value: object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ServerInitiatedRequest`))`` Dependent requests. The presence of this field tells the client that the request is incomplete and that the client must try its request again with the result of these dependent requests in the dependent_responses field. An object containing a list of `"key": value` pairs. Example: `{ "name": "wrench", "mass": "1.3kg", "count": "3" }`. |
| `resumeData` | ``object (`https://protobuf.dev/reference/protobuf/google.protobuf#struct` format)`` State for the client to echo back in subsequent RPCs for the same persistent request. |

### Struct

| JSON representation |
|---|
| ``` { "fields": { string: value, ... } } ``` |

| Fields ||
|---|---|
| `fields` | ``map (key: string, value: value (`https://protobuf.dev/reference/protobuf/google.protobuf#value` format))`` Unordered map of dynamically typed values. An object containing a list of `"key": value` pairs. Example: `{ "name": "wrench", "mass": "1.3kg", "count": "3" }`. |

### FieldsEntry

| JSON representation |
|---|
| ``` { "key": string, "value": value } ``` |

| Fields ||
|---|---|
| `key` | `string` |
| `value` | ``value (`https://protobuf.dev/reference/protobuf/google.protobuf#value` format)`` |

### Value

| JSON representation |
|---|
| ``` { // Union field `kind` can be only one of the following: "nullValue": null, "numberValue": number, "stringValue": string, "boolValue": boolean, "structValue": { object }, "listValue": array // End of list of possible types for union field `kind`. } ``` |

| Fields ||
|---|---|
| Union field `kind`. The kind of value. `kind` can be only one of the following: ||
| `nullValue` | `null` Represents a JSON `null`. |
| `numberValue` | `number` Represents a JSON number. Must not be `NaN`, `Infinity` or `-Infinity`, since those are not supported in JSON. This also cannot represent large Int64 values, since JSON format generally does not support them in its number type. |
| `stringValue` | `string` Represents a JSON string. |
| `boolValue` | `boolean` Represents a JSON boolean (`true` or `false` literal in JSON). |
| `structValue` | ``object (`https://protobuf.dev/reference/protobuf/google.protobuf#struct` format)`` Represents a JSON object. |
| `listValue` | ``array (`https://protobuf.dev/reference/protobuf/google.protobuf#list-value` format)`` Represents a JSON array. |

### ListValue

| JSON representation |
|---|
| ``` { "values": [ value ] } ``` |

| Fields ||
|---|---|
| `values[]` | ``value (`https://protobuf.dev/reference/protobuf/google.protobuf#value` format)`` Repeated field of dynamically typed values. |

### DependentRequestsEntry

| JSON representation |
|---|
| ``` { "key": string, "value": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ServerInitiatedRequest`) } } ``` |

| Fields ||
|---|---|
| `key` | `string` |
| `value` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ServerInitiatedRequest`)`` |

### ServerInitiatedRequest

| JSON representation |
|---|
| ``` { "samplingCreateMessage": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SamplingCreateMessageRequest`) }, "listRootsRequest": { object (`ListRootsRequest`) }, "notifyOnRootListUpdate": boolean, "elicitRequest": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ElicitRequest`) } } ``` |

| Fields ||
|---|---|
| `samplingCreateMessage` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SamplingCreateMessageRequest`)`` Sampling, as per <https://modelcontextprotocol.io/specification/2025-03-26/client/sampling>. |
| `listRootsRequest` | ``object (`ListRootsRequest`)`` Root list request, as per <https://modelcontextprotocol.io/specification/2025-03-26/client/roots>. |
| `notifyOnRootListUpdate` | `boolean` |
| `elicitRequest` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ElicitRequest`)`` Elicitations, as per <https://modelcontextprotocol.io/specification/2025-06-18/client/elicitation>. |

### SamplingCreateMessageRequest

| JSON representation |
|---|
| ``` { "messages": [ { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SamplingMessage`) } ], "modelPreferences": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ModelPreferences`) }, "systemPrompt": string, "includeContext": enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.IncludeContext`), "temperature": number, "maxTokens": integer, "stopSequence": [ string ] } ``` |

| Fields ||
|---|---|
| `messages[]` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SamplingMessage`)`` |
| `modelPreferences` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ModelPreferences`)`` Optional. |
| `systemPrompt` | `string` Optional. |
| `includeContext` | ``enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.IncludeContext`)`` Optional. |
| `temperature` | `number` Optional. |
| `maxTokens` | `integer` Optional. |
| `stopSequence[]` | `string` Optional. |

### SamplingMessage

| JSON representation |
|---|
| ``` { "role": enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Role`), "text": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.TextContent`) }, "image": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ImageContent`) }, "audio": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.AudioContent`) } } ``` |

| Fields ||
|---|---|
| `role` | ``enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Role`)`` Which role is sending the message. |
| `text` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.TextContent`)`` Exactly one of these fields must be populated. (Not using "oneof", since that causes forward-compatibility problems.) |
| `image` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ImageContent`)`` |
| `audio` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.AudioContent`)`` |

### TextContent

| JSON representation |
|---|
| ``` { "text": string, "annotations": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`) } } ``` |

| Fields ||
|---|---|
| `text` | `string` |
| `annotations` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`)`` Optional. |

### Annotations

| JSON representation |
|---|
| ``` { "audience": [ enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Role`) ], "priority": number } ``` |

| Fields ||
|---|---|
| `audience[]` | ``enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Role`)`` |
| `priority` | `number` Must be in range \[0,1\]. |

### ImageContent

| JSON representation |
|---|
| ``` { "data": string, "mimeType": string, "annotations": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`) } } ``` |

| Fields ||
|---|---|
| `data` | `string (https://developers.google.com/discovery/v1/type-format format)` A base64-encoded string. |
| `mimeType` | `string` |
| `annotations` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`)`` Optional. |

### AudioContent

| JSON representation |
|---|
| ``` { "data": string, "mimeType": string, "annotations": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`) } } ``` |

| Fields ||
|---|---|
| `data` | `string (https://developers.google.com/discovery/v1/type-format format)` A base64-encoded string. |
| `mimeType` | `string` |
| `annotations` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`)`` Optional. |

### ModelPreferences

| JSON representation |
|---|
| ``` { "hints": [ { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ModelHint`) } ], "intelligencePriority": number, "speedPriority": number, "costPriority": number } ``` |

| Fields ||
|---|---|
| `hints[]` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ModelHint`)`` |
| `intelligencePriority` | `number` |
| `speedPriority` | `number` |
| `costPriority` | `number` |

### ModelHint

| JSON representation |
|---|
| ``` { "name": string } ``` |

| Fields ||
|---|---|
| `name` | `string` Optional. |

### ElicitRequest

| JSON representation |
|---|
| ``` { "message": string, "requestedSchema": { string: { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.PrimitiveSchemaDefinition`) }, ... }, "requiredFields": [ string ] } ``` |

| Fields ||
|---|---|
| `message` | `string` Message to present to user. Required. |
| `requestedSchema` | ``map (key: string, value: object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.PrimitiveSchemaDefinition`))`` An object containing a list of `"key": value` pairs. Example: `{ "name": "wrench", "mass": "1.3kg", "count": "3" }`. |
| `requiredFields[]` | `string` |

### RequestedSchemaEntry

| JSON representation |
|---|
| ``` { "key": string, "value": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.PrimitiveSchemaDefinition`) } } ``` |

| Fields ||
|---|---|
| `key` | `string` |
| `value` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.PrimitiveSchemaDefinition`)`` |

### PrimitiveSchemaDefinition

| JSON representation |
|---|
| ``` { "stringSchema": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.StringSchema`) }, "numberSchema": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.NumberSchema`) }, "booleanSchema": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.BooleanSchema`) }, "enumSchema": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.EnumSchema`) } } ``` |

| Fields ||
|---|---|
| `stringSchema` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.StringSchema`)`` Exactly one of these fields will be present. (Not using "oneof", since that causes forward-compatibility problems.) |
| `numberSchema` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.NumberSchema`)`` |
| `booleanSchema` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.BooleanSchema`)`` |
| `enumSchema` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.EnumSchema`)`` |

### StringSchema

| JSON representation |
|---|
| ``` { "title": string, "description": string, "minLength": string, "maxLength": string, "format": enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Format`) } ``` |

| Fields ||
|---|---|
| `title` | `string` |
| `description` | `string` |
| `minLength` | `string` |
| `maxLength` | `string` |
| `format` | ``enum (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Format`)`` |

### NumberSchema

| JSON representation |
|---|
| ``` { "title": string, "description": string, "minimum": string, "maximum": string, "doubleRange": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.DoubleRange`) }, "integerRange": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.IntegerRange`) } } ``` |

| Fields ||
|---|---|
| `title` | `string` |
| `description` | `string` |
| `minimum (deprecated)` | `string` > [!WARNING] > This item is deprecated! |
| `maximum (deprecated)` | `string` > [!WARNING] > This item is deprecated! |
| `doubleRange` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.DoubleRange`)`` Only one of these fields must be set. |
| `integerRange` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.IntegerRange`)`` |

### DoubleRange

| JSON representation |
|---|
| ``` { // Union field `_minimum` can be only one of the following: "minimum": number // End of list of possible types for union field `_minimum`. // Union field `_maximum` can be only one of the following: "maximum": number // End of list of possible types for union field `_maximum`. } ``` |

| Fields ||
|---|---|
| Union field `_minimum`. `_minimum` can be only one of the following: ||
| `minimum` | `number` |
| Union field `_maximum`. `_maximum` can be only one of the following: ||
| `maximum` | `number` |

### IntegerRange

| JSON representation |
|---|
| ``` { // Union field `_minimum` can be only one of the following: "minimum": string // End of list of possible types for union field `_minimum`. // Union field `_maximum` can be only one of the following: "maximum": string // End of list of possible types for union field `_maximum`. } ``` |

| Fields ||
|---|---|
| Union field `_minimum`. `_minimum` can be only one of the following: ||
| `minimum` | `string (https://developers.google.com/discovery/v1/type-format format)` |
| Union field `_maximum`. `_maximum` can be only one of the following: ||
| `maximum` | `string (https://developers.google.com/discovery/v1/type-format format)` |

### BooleanSchema

| JSON representation |
|---|
| ``` { "title": string, "description": string, "default": boolean } ``` |

| Fields ||
|---|---|
| `title` | `string` |
| `description` | `string` |
| `default` | `boolean` |

### EnumSchema

| JSON representation |
|---|
| ``` { "title": string, "description": string, "enumList": [ string ], "enumNames": [ string ], "singleSelect": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SingleSelect`) }, "multiSelect": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.MultiSelect`) } } ``` |

| Fields ||
|---|---|
| `title` | `string` |
| `description` | `string` |
| `enumList[]` | `string` |
| `enumNames[]` | `string` |
| `singleSelect` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.SingleSelect`)`` No more than one of these must be set. If neither is set, we assume single_select with no default value. |
| `multiSelect` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.MultiSelect`)`` |

### SingleSelect

| JSON representation |
|---|
| ``` { // Union field `_default_item` can be only one of the following: "defaultItem": string // End of list of possible types for union field `_default_item`. } ``` |

| Fields ||
|---|---|
| Union field `_default_item`. `_default_item` can be only one of the following: ||
| `defaultItem` | `string` |

### MultiSelect

| JSON representation |
|---|
| ``` { "defaultItems": [ string ], // Union field `_min_items` can be only one of the following: "minItems": integer // End of list of possible types for union field `_min_items`. // Union field `_max_items` can be only one of the following: "maxItems": integer // End of list of possible types for union field `_max_items`. } ``` |

| Fields ||
|---|---|
| `defaultItems[]` | `string` |
| Union field `_min_items`. `_min_items` can be only one of the following: ||
| `minItems` | `integer (https://developers.google.com/discovery/v1/type-format format)` |
| Union field `_max_items`. `_max_items` can be only one of the following: ||
| `maxItems` | `integer (https://developers.google.com/discovery/v1/type-format format)` |

### Content

| JSON representation |
|---|
| ``` { "text": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.TextContent`) }, "image": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ImageContent`) }, "audio": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.AudioContent`) }, "embeddedResource": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.EmbeddedResource`) }, "resourceLink": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Resource`) } } ``` |

| Fields ||
|---|---|
| `text` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.TextContent`)`` Unstructured result contents. At least one will be populated if the tool does not define an output schema. If the tool does define an output schema, the `structured_content` field will be populated instead, but one of these fields can still be populated for backward compatibility. No more than one of these fields must be populated. (Not using "oneof", since that causes forward-compatibility problems.) |
| `image` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ImageContent`)`` |
| `audio` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.AudioContent`)`` |
| `embeddedResource` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.EmbeddedResource`)`` |
| `resourceLink` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Resource`)`` |

### EmbeddedResource

| JSON representation |
|---|
| ``` { "contents": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ResourceContents`) }, "annotations": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`) } } ``` |

| Fields ||
|---|---|
| `contents` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.ResourceContents`)`` |
| `annotations` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`)`` Optional. |

### ResourceContents

| JSON representation |
|---|
| ``` { "uri": string, "mimeType": string, "text": string, "blob": string } ``` |

| Fields ||
|---|---|
| `uri` | `string` |
| `mimeType` | `string` |
| `text` | `string` Exactly one of these fields must be populated. (Not using "oneof", since that causes forward-compatibility problems.) |
| `blob` | `string (https://developers.google.com/discovery/v1/type-format format)` A base64-encoded string. |

### Resource

| JSON representation |
|---|
| ``` { "uri": string, "name": string, "title": string, "description": string, "mimeType": string, "annotations": { object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`) }, "size": string } ``` |

| Fields ||
|---|---|
| `uri` | `string` |
| `name` | `string` |
| `title` | `string` |
| `description` | `string` Optional. |
| `mimeType` | `string` Optional. |
| `annotations` | ``object (`https://docs.cloud.google.com/storage/docs/reference/mcp/tools_list/read_object#Output.Schema.Annotations`)`` Optional. |
| `size` | `string` Optional. |

### NullValue

Represents a JSON `null`.

`NullValue` is a sentinel, using an enum with only one value to represent the null value for the `Value` type union.

A field of type `NullValue` with any value other than `0` is considered invalid. Most ProtoJSON serializers will emit a `Value` with a `null_value` set as a JSON `null` regardless of the integer value, and so will round trip to a `0` value.

| Enums ||
|---|---|
| `NULL_VALUE` | Null value. |

### Role

| Enums ||
|---|---|
| `ROLE_UNKNOWN` |   |
| `ROLE_USER` |   |
| `ROLE_ASSISTANT` |   |

### IncludeContext

| Enums ||
|---|---|
| `NONE` |   |
| `THIS_SERVER` |   |
| `ALL_SERVERS` |   |

### Format

| Enums ||
|---|---|
| `FORMAT_UNKNOWN` |   |
| `FORMAT_EMAIL` |   |
| `FORMAT_URI` |   |
| `FORMAT_DATE` |   |
| `FORMAT_DATE_TIME` |   |

### Tool Annotations

Destructive Hint: ❌ \| Idempotent Hint: ✅ \| Read Only Hint: ✅ \| Open World Hint: ❌