Tool: group_findings
Groups and aggregates security findings by specific attributes (e.g. category, severity, project) to return summary counts.
Filtering (AIP-160 Syntax): The filter
parameter uses AIP-160 syntax (string values MUST be in double quotes):
- filter: 'state = "ACTIVE"'
- filter: 'state = "ACTIVE" AND severity = "CRITICAL"'
Recommended for Macro Posture Assessment: Use this tool instead of list_findings when assessing overall security posture or counting issues:
- Count by category: group_by: "category", filter: 'state = "ACTIVE"'
- Count by severity: group_by: "severity", filter: 'state = "ACTIVE"'
- Count by project: group_by: "resource.project_name", filter: 'state = "ACTIVE" AND severity = "CRITICAL"'
The following code sample shows how to use curl to call the group_findings MCP tool.
| Curl Request |
|---|
curl --location 'https://securitycenter.googleapis.com/mcp/investigate' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "group_findings", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
Input Schema
Request message for grouping by findings.
GroupFindingsRequest
| JSON representation |
|---|
{ "parent": string, "filter": string, "groupBy": string, "pageToken": string, "pageSize": integer } |
| Fields | |
|---|---|
parent |
Required. Name of the source to groupBy. If no location is specified, finding is assumed to be in global. The following list shows some examples:
To groupBy across all sources provide a source_id of
|
filter |
Expression that defines the filter to apply across findings. The expression is a list of one or more restrictions combined via logical operators Restrictions have the form
The supported operators are:
The supported value types are:
The following field and operator combinations are supported:
Usage: This should be milliseconds since epoch or an RFC3339 string. Examples:
|
groupBy |
Required. Expression that defines what assets fields to use for grouping. The string value should follow SQL syntax: comma separated list of fields. For example: "parent,resource_name". |
pageToken |
The value returned by the last |
pageSize |
The maximum number of results to return in a single response. Default is 10, minimum is 1, maximum is 1000. |
Output Schema
Response message for group by findings.
GroupFindingsResponse
| JSON representation |
|---|
{
"groupByResults": [
{
object ( |
| Fields | |
|---|---|
groupByResults[] |
Group results. There exists an element for each existing unique combination of property/values. The element contains a count for the number of times those specific property/values appear. |
nextPageToken |
Token to retrieve the next page of results, or empty if there are no more results. |
totalSize |
The total number of results matching the query. |
GroupResult
| JSON representation |
|---|
{ "properties": { string: value, ... }, "count": string } |
| Fields | |
|---|---|
properties |
Properties matching the groupBy fields in the request. An object containing a list of |
count |
Total count of resources for the given properties. |
PropertiesEntry
| JSON representation |
|---|
{ "key": string, "value": value } |
| Fields | |
|---|---|
key |
|
value |
|
Value
| JSON representation |
|---|
{ // Union field |
| Fields | |
|---|---|
Union field kind. The kind of value. kind can be only one of the following: |
|
nullValue |
Represents a JSON |
numberValue |
Represents a JSON number. Must not be |
stringValue |
Represents a JSON string. |
boolValue |
Represents a JSON boolean ( |
structValue |
Represents a JSON object. |
listValue |
Represents a JSON array. |
Struct
| JSON representation |
|---|
{ "fields": { string: value, ... } } |
| Fields | |
|---|---|
fields |
Unordered map of dynamically typed values. An object containing a list of |
FieldsEntry
| JSON representation |
|---|
{ "key": string, "value": value } |
| Fields | |
|---|---|
key |
|
value |
|
ListValue
| JSON representation |
|---|
{ "values": [ value ] } |
| Fields | |
|---|---|
values[] |
Repeated field of dynamically typed values. |
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. |
Tool Annotations
Tool annotations are sent to MCP clients to describe the basic risk of a given tool. Most clients treat these hints as untrusted, but they can be used to decide when a confirmation prompt might be sent to a user.
Along with the title string, the following boolean hints are defined as follows:
readOnlyHint: If true, the tool doesn't modify its environment. Default: false.destructiveHint: If true, then the tool can perform destructive actions. If false, then the tool can only perform additive actions. Default: true.idempotentHint: If true, then calling the tool repeatedly with the same arguments will have no additional effect on its environment. Default: false.openWorldHint: If true, then the tool can interact with an 'open world' of external entities. If false, then the tool can only interact with internal entities. For example, a web search tool would be open world, while a memory tool would not be open world.
Destructive Hint: ❌ | Idempotent Hint: ✅ | Read Only Hint: ✅ | Open World Hint: ❌