osquery gives you a SQL interface to every endpoint. What it doesn't give you is a control plane: enrollment at scale, configuration distribution, log collection, live queries across arbitrary node subsets, file carving for incident response, vulnerability monitoring against real advisory data, or an MCP server so your AI agents can inspect the fleet. osctrl gives you all of that.

MIT licensed, written in Go, backed by PostgreSQL and Redis, proven from hundreds to hundreds of thousands of nodes. Purpose-built services on a shared core, a modern React operator UI, REST API, CLI, and an MCP server that gives AI agents permission-checked fleet inspection.

What osctrl is

osctrl (osctrl.net, github.com/jmpsec/osctrl) is an open-source osquery fleet manager implementing the osquery remote API as a TLS endpoint. Go, MIT licensed, PostgreSQL and Redis backend, Docker Compose for local development. Five focused services: osctrl-tls (the osquery TLS endpoint), osctrl-api (JWT-authenticated REST API, OpenAPI documented), operator frontend (React SPA), osctrl-cli (admin CLI), and osctrl-mcp (Model Context Protocol server). All built on shared Go packages.

git clone https://github.com/jmpsec/osctrl.git
cd osctrl
cp .env.example .env
make docker_dev_certs
make docker_dev_build
make docker_dev_up

Operator frontend at https://localhost:8444.

Fleet management features

Enrollment and configuration — nodes enroll via osctrl-tls implementing the osquery remote API. Push osquery configuration and scheduled query packs to your entire fleet in seconds, organized by environment and tags.

Log collection — ingest status and result logs from every node and route them to your logging pipeline of choice.

Distributed queries — launch queries across any subset of nodes and get results back fast, with optional accelerated query reads. Saved queries and live queries from the operator UI or API.

Node console — a read-only shell-like console against any node, backed by osquery: ls, ps, stat, sql, .tables. No shell access needed on the endpoint.

File carving — retrieve files and directories from remote endpoints for forensics and incident response, with permission-checked access.

File browser — per-node file explorer backed by accelerated, permission-checked osquery distributed queries. Directory listings and stat without a shell.

Alerting — rule-based alerting on result, status, and query logs plus node state. Webhook and email channels, with cooldown, deduplication, and hot reload.

Health checks — optional health page fusing live database and Redis pings, per-service runtime stats, TLS heartbeat, and cached upgrade status.

Vulnerability monitoring

New feature, off by default. Your fleet already reports installed packages via osquery. osctrl matches that inventory against public advisory data and shows you what is exposed — no new agent, no new collection, and the inventory never leaves your deployment.

Apply a vuln-linux, vuln-darwin, or vuln-windows profile to an environment's schedule. Queries run daily in snapshot mode. osctrl-api syncs OSV ecosystems your fleet reports plus the CISA Known Exploited Vulnerabilities (KEV) catalog, then re-matches nodes whose inventory or advisories changed.

Severity scored locally from CVSS vectors. Anything CISA lists as known-exploited is flagged so you can triage by what attackers are actually using. A vuln_finding alert rule fires at the threshold you pick (kev, critical, high) with findings grouped per advisory and rate-capped so a fleet-wide rollout can't flood your channels.

With posture enabled, nodes get a "Known vulnerabilities" control mapped to ISO 27001 A.8.8. KEV or critical findings fail at critical weight. Alpine, CentOS, SUSE, and un-synced ecosystems are reported as not assessed rather than counted clean — silence is never mistaken for safety.

MCP server

osctrl-mcp is a Model Context Protocol server: a standalone stdio binary, or hosted by osctrl-api at /api/v1/mcp. It gives Claude and other MCP clients permission-checked fleet inspection. Write tools are a separate switch, off by default. Ask an AI agent what packages are installed across your Linux fleet, which nodes haven't checked in, or which endpoints have a specific vulnerability — all from live osquery data, bounded by the token's own permissions.

Security defaults

JWT authentication by default. Optional MFA with passkeys and TOTP. Trusted proxy controls. Audit logging throughout. Vulnerability monitoring ships off until you enable it. Write access to the MCP server is a separate switch. The design assumes you're running this in a real production environment.

Architecture

Every service builds on the same shared Go packages: node state, environments, queries, carves, users and permissions, caching, log pipeline, alerting, audit log, MFA, GeoIP, posture, and health. PostgreSQL for durable state, Redis for caching and pub/sub. osctrl-api exposes a fully documented OpenAPI spec. The operator UI talks exclusively to osctrl-api and gets live updates over SSE.

Who it is for

Good fit: security and IT teams running osquery who need a production-grade fleet management platform; organizations that want vulnerability monitoring that uses existing osquery inventory rather than adding another agent; teams who want MCP-based AI fleet inspection via Claude or other agents; DevOps teams managing hundreds to hundreds of thousands of nodes; anyone who needs file carving and forensics capabilities built into the fleet manager.

Not ideal: teams not already using osquery who are evaluating endpoint visibility options from scratch (start with osquery first); organizations that need commercial support contracts (osctrl is community-supported); teams who need Windows-first fleet management (osctrl supports Windows but the tooling is more mature on Linux and macOS).

My take

osctrl is the fleet management layer that makes osquery viable at scale. Running osquery on a handful of machines is fine with community tooling. Running it on ten thousand nodes across multiple environments, with configuration distribution, log collection, live queries, file carving, and vulnerability monitoring — that needs a proper control plane. osctrl is that control plane, MIT licensed and production-proven.

The vulnerability monitoring addition is the most interesting recent development. Using existing osquery package inventory against OSV and CISA KEV means no new agent, no new data collection, and no inventory leaving the deployment. The honest treatment of unassessed packages (reporting them as not assessed rather than clean) is the right call — most tools get this wrong.

The MCP server turns your osquery fleet into something your AI agents can query directly, bounded by real permission controls. That's a qualitatively different workflow than writing a script to call the API.


PIPOLINE · DEVOPS CONSULTING

Need help deploying osctrl for your fleet?

Production deployment, PostgreSQL and Redis setup, osquery enrollment at scale, environment and tag configuration, vulnerability monitoring setup, alerting rules, MCP server integration with Claude, and migrating from other osquery management tools.

Get in touch at pipoline.com