nano SIEM
Agents & MCPInvestigator

Tool Reference

Every nano-investigator tool, MCP prompt, and MCP resource, with parameters and access level

Tool Reference

The server registers 69 tools across ten areas, plus five MCP prompts and a set of MCP resources. The Access column is one of:

  • Read: queries the SIEM, no side effects
  • Write: creates or modifies data
  • Write-destructive: closes or removes data; the agent should confirm first

In the Key params column, parameters are required unless marked (opt).

Search & schema

Nine tools. search_sql is the primary search tool; it runs read-only ClickHouse SELECT queries (DROP/INSERT and SLEEP/HOSTNAME are blocked) and the backend caps results at 100k rows.

ToolPurposeKey paramsAccess
search_sqlPrimary search. Read-only ClickHouse SELECT.sql; start_time, end_time, limit (opt, default window -24h to now)Read
searchRun an nPL (piped, Splunk-style) query. Good for quick |stats / |timechart.query, start_time; end_time, limit (opt, 100), source_type (opt)Read
get_schemaUDM column inventory by category plus observed ext JSON keys. Call once per session before writing SQL.category (opt), include_ext (opt, true)Read
explain_queryCompile nPL to SQL without executing.query, start_time; end_time (opt)Read
get_field_valuesTop values (value, count, pct) for a field in a query scope.field, start_time; query (opt, *), end_time (opt), limit (opt)Read
list_saved_searchesList saved searches.noneRead
get_saved_searchFetch one saved search by id.idRead
save_searchSave an nPL or SQL query.name, query; query_mode (opt, piped/sql), visibility (opt, private/public/group)Write
create_shared_searchBuild a shareable SIEM-UI URL for a query and time range.query; query_mode (opt), time_range_type (opt, relative), time_range_start (opt), time_range_end (opt)Write

Alerts & triage

Three tools, all read-only. Alerts cannot be mutated; triage happens by adding an alert to a case (see Cases).

ToolPurposeKey paramsAccess
list_alertsList alerts with filters.all opt: status (new/acknowledged/closed), severity, rule_id, assigned_to, limit (50), offsetRead
get_alertFull alert detail, including matched events and ai_triage_hints.idRead
get_alert_countsCounts by severity and status.noneRead

Cases

Twelve tools. The read tools cover listing, detail, related cases, and stats; seven tools write. merge_cases is destructive.

ToolPurposeKey paramsAccess
list_casesList cases with filters.all opt: status[], severity[], assigned_to, search, tags[], limit, offsetRead
get_caseFull case detail.idRead
review_caseComposite read: case plus wall plus all linked notebooks (entries and refs, batched 5). First call when resuming a case.id (id or case number)Read
get_case_statsCounts by status and severity, plus average resolution.noneRead
get_related_casesHistorically similar cases (shared entities, rules, MITRE).idRead
create_caseCreate a case.title, severity; description, priority, assigned_to, tags[] (opt)Write
update_caseUpdate case fields.id; title / description / severity / tags (opt)Write
change_case_statusChange status, optionally with a disposition.id, status (open/in_progress/pending/resolved/closed); disposition (opt, true_positive/false_positive/benign/inconclusive)Write
assign_caseAssign a case to a user.id, user_idWrite
add_alert_to_caseLink an alert to a case.case_id, alert_id; is_primary (opt)Write
add_case_wall_entryPost an entry to the case wall.case_id, entry_type (comment/ai_analysis/action_taken), content; is_internal (opt)Write
merge_casesMerge source cases into a target. Source cases are closed as merged.target_case_id, source_case_ids[]Write-destructive

Notebooks

Nine tools. Four read, five write.

ToolPurposeKey paramsAccess
list_notebooksList notebooks.all opt: case_id, status (active/paused/closed/merged), limit, offsetRead
get_notebookFetch one notebook.idRead
get_notebook_entriesFetch a notebook's entries.idRead
find_notebooks_by_referenceFind notebooks referencing a given object.reference_type (alert/detection/saved_search/case), reference_idRead
create_notebookCreate a notebook.title; visibility (opt, private/shared/public)Write
add_notebook_entryAppend an entry. entry_type is one of manual_note, search_executed, ai_suggestion, ai_summary, entity_reference, ioc_marker, timeline_marker, investigation_timeline.notebook_id, entry_type, content (object); source_url (opt)Write
add_notebook_referenceAdd a reference to a notebook.notebook_id, reference_type, reference_id; reference_name (opt)Write
update_notebookUpdate notebook fields.id; title, status (active/paused/closed), summary (opt)Write
share_notebookShare a notebook.id, visibility; group_ids[] (opt)Write

Detections & MITRE

Five tools, all read-only. The investigator reads detections; editing them stays in nanodac.

ToolPurposeKey paramsAccess
list_detectionsList detection rules.all opt: severity, mode (staging/live/alerting), enabledRead
get_detectionFull rule (nPL, MITRE, ai_triage_hints, schedule, stats).id (UUID)Read
get_detection_matchesRecent matches for a rule.id (UUID)Read
get_mitre_techniqueATT&CK data, optionally filtered to one technique.id (opt, e.g. T1071)Read
get_mitre_coverageCoverage and gaps of the detection library.noneRead

Entities & risk

Three tools, all read-only.

ToolPurposeKey paramsAccess
get_risky_entitiesTop entities by risk.all opt: window (24h/7d/all), entity_type, min_score, limit (20)Read
get_risk_overviewCounts by risk level (24h and 7d).noneRead
get_entity_risk_timelineRisk over time for one entity.entity; entity_type (opt)Read

Enrichment / IOC

Two tools, all read-only. IOC matching is applied at ingest into the ioc_matched / ioc_threat_type / ioc_confidence columns, so threat-intel hunting is done with search / search_sql on those columns rather than a lookup tool.

ToolPurposeKey paramsAccess
get_entity_contextComposite pivot: parallel GeoIP (IPs) and risk-timeline lookups for an entity.entity_type (ip/user/host/domain/hash), valueRead
lookup_ipGeoIP plus ASN for an IP.ipRead

Prevalence

Three tools, all read-only. get_prevalence accepts only hash or domain; passing an IP errors. get_rare_artifacts and get_new_artifacts do accept ip_address.

ToolPurposeKey paramsAccess
get_prevalenceHow common an artifact is: host count, occurrences, first/last seen, is_rare.type (hash or domain only; IP errors), valueRead
get_rare_artifactsArtifacts seen on few hosts.all opt: type (hash_md5/hash_sha256/domain/ip_address), window, limit (50), offsetRead
get_new_artifactsArtifacts first seen recently.all opt: type, since, limit (50), offsetRead

System / org

Four tools, all read-only.

ToolPurposeKey paramsAccess
get_source_typesAvailable log source types. Call before using source_type filters.noneRead
get_org_contextOrg profile: industry, compliance, internal IP ranges, critical assets, business hours.noneRead
health_checkClickHouse and PostgreSQL connectivity.noneRead
get_audit_trailQuery the audit log, including the MCP key's own actions.all opt: user_id, action, resource_type, start_time, end_time, limit (50)Read

Parsers

Nineteen tools for authoring log-source parsers (Vector VRL) and wiring their ingress. Most write; none is data-destructive, but deploy_log_source changes what Vector ingests and is best-effort (it can return success even if Vector failed to reload), so pair it with get_log_source_health. Open-edition — AI parser generation stays in the Enterprise wizard. See Build parsers for the workflow.

ToolPurposeKey paramsAccess
list_log_sourcesList parsers (summary).all opt: source_type, deployed, enabled, kind (log/enrichment)Read
get_log_sourceFull parser: parser_vrl, metadata, validated/deployed flags.idRead
validate_vrlCompile-check VRL without saving. Returns valid, errors, and diagnostics (line/col + code).vrl_codeRead
test_parse_sampleRun VRL against one sample line; returns parsed output and extracted_field_count.vrl_code, sample_log; extension_vrl (opt)Read
test_parse_liveParse real recent events for a source_type, new vs currently-deployed VRL. Capped at 20 events.vrl_code, source_type; current_vrl, limit (opt)Read
create_log_sourceSave a new parser as a draft (validated, not deployed).name, source_type, parser_vrl; description, namespace, timezone, category, vendor, product, source_config (opt)Write
update_log_sourceEdit a parser. Editing VRL does not auto-deploy.id; parser_vrl / name / source_type / metadata / enabled (opt)Write
deploy_log_sourceWrite the Vector config and reload. Best-effort — confirm with get_log_source_health.idWrite
undeploy_log_sourceTake a deployed parser offline.idWrite
get_log_source_health24h/last-hour event counts, freshness, parse errors, health_status (healthy/stale/no_data/disabled/error).idRead
get_log_source_deploymentsDeploy/undeploy history with status and errors.idRead
list_source_config_typesTransport drivers (HTTP, Kafka, S3, GCP Pub/Sub, Splunk HEC, Vector) with match_field presets.noneRead
list_source_configsConfigured ingress transports.config_type, enabled (opt)Read
create_routing_ruleMap incoming events to a parser's source_type.source_config_id, match_field, match_type (exact/prefix/suffix/regex/contains/default), target_source_type; match_value, priority (opt)Write
check_rule_reachabilityVerify a candidate rule can deliver: config enabled + deployed, target parser exists, broker reachable (Kafka).source_config_id, target_source_type, match_field, match_type, match_valueRead
list_parser_repositoriesConnected upstream parser libraries and sync status.noneRead
sync_parser_repositoryRefresh the local cache from an upstream repo.repository_idWrite
list_repository_parsersBrowse prebuilt parsers in a repository.repository_id; category, search (opt)Read
import_parserImport a repo parser as a draft log source.repository_id, path; source_type, import_type (linked/forked), ingestion_method (opt)Write

MCP prompts

The server registers five prompts. These are structured workflows the agent follows, not callable tools.

  • investigate_alert (args: alert_id; depth opt quick/standard/deep). Runs get_alert, then get_detection for ai_triage_hints, assesses FP vs TP against ignore_when / suspicious_when, enriches entities (get_entity_context / lookup_* / get_prevalence), runs one or two searches for related activity, then get_related_cases, and finishes with an FP / needs-investigation / TP recommendation. It does not go more than two levels deep without checking in; quick stops after step 3.
  • hunt_entity (args: entity and entity_type; time_range opt -24h). Phase 1 gathers context (parallel get_entity_context, lookup_*, get_prevalence, and a search), Phase 2 presents an assessment before continuing, Phase 3 runs a type-specific deep dive (ip / user / host / hash / domain branches with nPL templates).
  • hunt_campaign (args: description; time_range opt -7d). Plans with get_mitre_technique and get_source_types plus three to five queries, builds and runs with refinement, enriches hits (get_prevalence, the ioc_* columns, related alerts and cases), then writes a hunt report. Rule creation defers to nanodac.
  • morning_briefing (arg: hours opt 12). Runs get_alert_counts and list_alerts (critical/high), get_case_stats, get_risky_entities (10), list_detections for noise or silence, and health_check, ending in a shift-handoff briefing with prioritized actions.
  • build_parser (args: source_type; sample_log opt). Scripts a validate-first authoring loop: read the VRL reference, list_log_sources to avoid duplicates, draft a generic parser, validate_vrl until it compiles, test_parse_sample against the sample, create_log_source as a draft, deploy_log_source, then get_log_source_health to confirm events flow. Presents the VRL and test output before saving and confirms before deploying.

MCP resources

The server registers these resources:

  • nano://sql-guide: SQL guidance for search_sql
  • nanosiem://schema/udm: the UDM schema
  • nanosiem://reference/npl: the nPL reference
  • nanosiem://reference/vrl-parsers: the VRL parser authoring guide — input/output contract, the rules the validator enforces, forbidden functions, and skeletons (used by build_parser)
  • nanosiem://reference/playbooks/{type}: investigation playbooks for seven types: brute_force, lateral_movement, data_exfil, malware, phishing, insider_threat, generic
On this page

On this page