Skip to main content

Query and schema tools

The MCP tools that run and validate Hamelin queries, list the datasets a query can read, and return the schemas and guides a query is written against.

execute-hamelin-query runs a query, and validate-hamelin-query checks one for errors. The dataset tools read the catalog, the schema tools return the ECS and signal references, and the guide tools return the Hamelin language guide and the resource engineering guide as text.

Tool names and schemas can change at any time

An agent sees each change the next time it reads tools/list, while a script that hard-codes a tool name or schema breaks when that tool changes.

Each section below is one tool as MCP access registers it: its title, its description, the annotations it sets, and the input and output schemas from tools/list. Field paths use parent.child for a nested object, parent[].child for the items of an array, and parent[Value].child for one variant of a field that takes several shapes.

execute-hamelin-query​

Execute a Hamelin query.

Executes a Hamelin query and returns the results.

This tool runs headlessly without the user seeing the results directly.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
hamelinQuerystringRequiredThe Hamelin query to execute and run. Must not be empty.
timeRangestringRequiredThe time range for the query (e.g. -1h..now(), -1d..now(), ts('2025-09-10T17:52:00Z')..ts('2025-09-10T17:57:00Z')). A time range is an expression constructed as {earliest}..{latest}. earliest is inclusive, latest is exclusive. Each can be a relative time expression (e.g. -1h, -1d, -1w), a function that returns a timestamp (e.g. now(), today(), yesterday(), tomorrow()), or a function ts() that takes an ISO8601 timestamp (e.g. ts('2024-04-16T17:52:00-05:00'), ts('2024-04-16T17:52:00Z')). You do not need to also add this time range to the Hamelin query using the "WITHIN" operator. Relative expressions and the today()/yesterday()/tomorrow() functions resolve in the organization's time zone — the zone stated alongside today's date in your system messages — so today() is the local calendar day, not a UTC one. Timestamps you pass to ts() are absolute and are used exactly as written. Just use this timeRange parameter only!
changesetIdstringOptionalPattern: ^CHG_[A-Z0-9]{1,7}$.

Outputs​

FieldTypeDescription
queryIdstring
resultobject
result.columnsarray of object
result.columns[].namestring
result.columns[].typeobject (seven variants)Or one of binary, boolean, interval, calendar_interval, int, double, rows, string, timestamp, unknown, variant. Nested fields omitted; see the schema in tools/list.
result.rowsarray of array of unknown
errorsarray of object
errors[].messagestring
executionDurationMillisnumberThe duration of the query execution in milliseconds.
rowCountnumber
queryProgressobject
queryProgress.elapsedTimeMillisintegerMinimum 0.
queryProgress.tasksCompletedintegerMinimum 0.
queryProgress.tasksScheduledintegerMinimum 0.
queryProgress.rowsScannedintegerMinimum 0.
queryProgress.bytesScannedintegerMinimum 0.
queryProgress.stagesarray of object (two variants)
queryProgress.stages[][variant 1].stageIdintegerMinimum 1.
queryProgress.stages[][variant 1].startedAtstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
queryProgress.stages[][variant 1].finishedAtstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
queryProgress.stages[][variant 1].tasksCompletedintegerMinimum 0.
queryProgress.stages[][variant 1].tasksScheduledintegerMinimum 0.
queryProgress.stages[][variant 1].tasksFailedintegerMinimum 0.
queryProgress.stages[][variant 1].completedboolean
queryProgress.stages[][variant 1].producesResultsboolean
queryProgress.stages[][variant 1].resultRowProgressobjectNested fields omitted; see the schema in tools/list.
queryProgress.stages[][variant 1].stagestringAlways planning.
queryProgress.stages[][variant 2].stageIdintegerMinimum 1.
queryProgress.stages[][variant 2].startedAtstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
queryProgress.stages[][variant 2].finishedAtstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
queryProgress.stages[][variant 2].tasksCompletedintegerMinimum 0.
queryProgress.stages[][variant 2].tasksScheduledintegerMinimum 0.
queryProgress.stages[][variant 2].tasksFailedintegerMinimum 0.
queryProgress.stages[][variant 2].completedboolean
queryProgress.stages[][variant 2].producesResultsboolean
queryProgress.stages[][variant 2].resultRowProgressobjectNested fields omitted; see the schema in tools/list.
queryProgress.stages[][variant 2].idintegerMinimum 0.
queryProgress.stages[][variant 2].firstTaskStartedAtstringMay be null. Format: date-time. Constrained by a pattern; see the schema in tools/list.
queryProgress.stages[][variant 2].stageenumOne of scan, broadcast_build, join, join_broadcast, process, materialize, write, reduction, result.
resolvedTimeRangestring
executionTimeRangeobject
executionTimeRange.startstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
executionTimeRange.endstringFormat: date-time. Constrained by a pattern; see the schema in tools/list.
executionTimeRange.endInclusiveboolean
queryExpansionobject
queryExpansion.expandedboolean
queryExpansion.inlinedDatasetsarray of string
queryExpansion.expandedQuerystring
modelResultTextstring
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

validate-hamelin-query​

Validate a Hamelin query.

Validates a Hamelin query and returns detailed error information if the query is invalid.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
hamelinQuerystringRequiredThe Hamelin query to validate.
schemaIdstringOptional
templateParametersarray of object (two variants)Optional
templateParameters[][primitive].idstringRequiredMust not be empty.
templateParameters[][primitive].namestringRequiredPattern: ^[a-zA-Z_][a-zA-Z_0-9]*$. Must not be empty. At most 64 characters.
templateParameters[][primitive].kindstringRequiredAlways primitive.
templateParameters[][primitive].typeenumRequiredOne of int, double, boolean, string, interval.
templateParameters[][primitive].valuesarray of stringRequired
templateParameters[][primitive].defaultValuestringOptionalAt most 1024 characters.
templateParameters[][primitive].descriptionstringOptionalAt most 1024 characters.
templateParameters[][identifier_fragment].idstringRequiredMust not be empty.
templateParameters[][identifier_fragment].namestringRequiredPattern: ^[a-zA-Z_][a-zA-Z_0-9]*$. Must not be empty. At most 64 characters.
templateParameters[][identifier_fragment].kindstringRequiredAlways identifier_fragment.
templateParameters[][identifier_fragment].valuesarray of stringRequired
templateParameters[][identifier_fragment].defaultValuestringRequiredPattern: ^[a-zA-Z0-9_]+$. At most 1024 characters.
templateParameters[][identifier_fragment].descriptionstringOptionalAt most 1024 characters.
changesetIdstringOptionalPattern: ^CHG_[A-Z0-9]{1,7}$.

Outputs​

FieldTypeDescription
successbooleanWhether the query is valid.
errorCountnumber
errorsarray of object
errors[].messagestring
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-query-performance​

Get query performance.

Returns a compact performance summary for a completed query. Use the query ID from execute-hamelin-query. The summary includes data-plane processing time, scan volume, output rows, task counts, stage durations, and derived rates. Output rows per scanned row is an observed ratio for the portion of the query that ran.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
queryIdstringRequiredThe ID of a completed query. Must not be empty.

Outputs​

FieldTypeDescription
queryIdstring
performanceobject (two variants)
performance[available].statusstringAlways available.
performance[available].elapsedTimeMillisintegerMay be null. Minimum 0.
performance[available].rowsScannedintegerMinimum 0.
performance[available].bytesScannedintegerMinimum 0.
performance[available].outputRowsintegerMinimum 0.
performance[available].ratesobject
performance[available].rates.scannedRowsPerSecondnumberMay be null. Minimum 0.
performance[available].rates.scannedMebibytesPerSecondnumberMay be null. Minimum 0.
performance[available].rates.outputRowsPerScannedRownumberMay be null. Minimum 0.
performance[available].stagesarray of object
performance[available].stages[].stageenumOne of planning, scan, broadcast_build, join, join_broadcast, process, materialize, write, reduction, result.
performance[available].stages[].stageIdintegerMinimum 1.
performance[available].stages[].durationMillisintegerMay be null. Minimum 0.
performance[available].stages[].tasksCompletedintegerMinimum 0.
performance[available].stages[].tasksScheduledintegerMinimum 0.
performance[available].stages[].tasksFailedintegerMinimum 0.
performance[unavailable].statusstringAlways unavailable.
performance[unavailable].reasonstring
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

list-dataset-names​

List dataset names.

Lists all visible dataset names in the catalog. Inspect these names to find relevant datasets, then use get-dataset-columns to read their schemas.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
changesetIdstringOptionalPattern: ^CHG_[A-Z0-9]{1,7}$.

Outputs​

FieldTypeDescription
datasetNamesarray of string
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-dataset-columns​

Get dataset columns.

Lists the columns of a dataset in the catalog.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
datasetNamestringRequiredThe name of the dataset to get columns for.
changesetIdstringOptionalPattern: ^CHG_[A-Z0-9]{1,7}$.

Outputs​

FieldTypeDescription
columnsarray of object
columns[].namestringThe name of the column.
columns[].typeunknownThe type of the column.
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-ecs-schema​

Get ECS schema.

Browses the ECS (Elastic Common Schema) fields that all mappers must target. Omit fieldPath to list top-level fields. Pass an exact dot-separated fieldPath to inspect that field and its direct children. Use this to confirm field names, types, and allowedValues when writing mapper queries. Categorization fields (event.kind, event.category, event.type, event.outcome) are closed vocabularies: use only their allowedValues, and leave the field unset when none fit.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
fieldPathstringOptionalMust not be empty.

Outputs​

FieldTypeDescription
fieldobjectMay be null.
field.namestringField name relative to its parent.
field.pathstringFull dot-separated ECS field path.
field.typestringCompact field type.
field.hasChildrenbooleanWhether the field has nested fields.
field.childCountintegerNumber of direct child fields. Minimum 0.
field.descriptionstring
field.requiredboolean
field.allowExtraFieldsboolean
field.allowedValuesarray of string
childrenarray of object
children[].namestringField name relative to its parent.
children[].pathstringFull dot-separated ECS field path.
children[].typestringCompact field type.
children[].hasChildrenbooleanWhether the field has nested fields.
children[].childCountintegerNumber of direct child fields. Minimum 0.
children[].descriptionstring
children[].requiredboolean
children[].allowExtraFieldsboolean
children[].allowedValuesarray of string
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-signal-schema​

Get signal schema.

Returns the signal schema defining the structure of signals produced by detections.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

This tool takes no arguments.

Outputs​

FieldTypeDescription
schemaarray of unknown
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-hamelin-language-guide​

Hamelin language overview.

Returns a single overview of the whole Hamelin query language (syntax, operators, and how to work with data). Use this for breadth across the language.

For deeper dives into specific topics, you can use search-hamelin-documentation as well — it finds targeted excerpts via semantic search.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

This tool takes no arguments.

Outputs​

FieldTypeDescription
hamelinPromptstringOverview of the Hamelin query language.
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

search-hamelin-documentation​

Search Hamelin documentation.

Searches for pages in the Hamelin documentation that match a given query string. You can use this to find more detailed information about Hamelin features and how to use them, particularly in the context of creating complex Hamelin queries. This tool does not have any information about datasets and their contents. For those types of queries, you should use other tools like list-dataset-names and get-dataset-columns (for dataset names and schemas).

For documentation on the data source or log contents, use web_search.

When you use this tool, you should NEVER say you are using this tool or talk about how you are "searching the documentation". Just use the tool and its results silently to yourself.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
querystringRequiredThe query string to search for.

Outputs​

FieldTypeDescription
resultsarray of object
results[].textstringThe text of the documentation page.
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

search-perpetual-documentation​

Search Perpetual documentation.

Searches Perpetual product documentation for concepts, resources, workflows, connector setup, and MCP tools. Use this for questions about how Perpetual works and how to use it. Use search-hamelin-documentation for Hamelin query language syntax and functions. This tool does not inspect the organization's datasets or configuration; use the resource and dataset tools for those questions.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
querystringRequiredThe query string to search for.

Outputs​

FieldTypeDescription
resultsarray of object
results[].textstringThe text of the documentation page.
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.

get-resource-engineering-guide​

Get resource engineering guide.

Returns a condensed engineering guide for building detections, parsers, mappers, tables, or webhooks in Perpetual. Use before creating or editing resources in a changeset.

Annotations: readOnlyHint true, idempotentHint true.

Inputs​

FieldTypeRequiredDescription
topicenumRequiredWhich engineering guide to load: detection, parser, mapper, table, lookup, or webhook. One of detection, parser, mapper, table, lookup, webhook.

Outputs​

FieldTypeDescription
guidestring
linksarray of object (three variants)
links[][resource].typestringAlways resource.
links[][resource].idstring
links[][resource].resourceKindenumOne of CaseAlertBlock, Alert, AiProvider, Case, CaseAnalysisBlock, CaseLogBlock, CaseNoteBlock, CaseResponseActionBlock, Changeset, Chat, Comment, Connector, ContentPack, ContentPackInstallation, ContentWorkItem, Credential, Dashboard, DataPlane, Detection, Folder, HttpToolConfig, Integration, Lookup, Mapper, McpConfig, Organization, Parser, ResourceGroup, Role, Schema, Skill, Space, Table, ThreatReport, Union, User, View, WebhookConfig.
links[][resource].linkstringCanonical URL for this result. Format: uri.
links[][changeset].typestringAlways changeset.
links[][changeset].idstring
links[][changeset].linkstringCanonical URL for this result. Format: uri.
links[][query].typestringAlways query.
links[][query].idstring
links[][query].linkstringCanonical URL for this result. Format: uri.