Skip to main content
Glama

AetherEdge

Code Check License Rust Version Status

Product site: aetheriot.ai · Developer site: aetheriot.dev

Documentation: docs.aetheriot.ai · Getting started · User journeys · Connect devices · Protocol adapters · Connect AI · 中文

Connect physical devices, prove the data path, and commission deterministic behavior—without making the cloud, a browser, or an AI model part of the control loop.

AetherEdge is an open-source, industry-neutral IoT edge kernel, six-service runtime, CLI, and Rust SDK for Linux gateways. Shared memory is authoritative for live point state; embedded SQLite stores desired state, history, audit, and a durable outbox. The default distribution needs no Redis, PostgreSQL, cloud service, browser, or LLM.

AI is a replaceable client behind the same typed, governed application boundary as every other client. Device control is deny-by-default, explicitly confirmed, and audited. Already commissioned acquisition, safety, rules, and alarms keep running deterministically when every external client is disconnected.

Is AetherEdge the right starting point?

You want to…

Start with…

Connect field devices and run local behavior on a Linux gateway

AetherEdge

Deploy an energy-management solution and operator Console

AetherEMS

Coordinate an edge fleet or cloud jobs

AetherCloud

Implement or validate a shared protocol

AetherContracts

AetherEdge's direct users are device manufacturers, system integrators, solution builders, application developers, and edge operators. It deliberately does not pretend to be a finished application for every industry.

Related MCP server: MCP-Edge

From a blank host to a useful Edge

The product journey is:

safe-empty install -> operator identity -> disabled device channel
  -> physical/logical point mapping -> read-only data proof
  -> reviewed behavior -> explicit commissioning -> audit and operation

Every consequential change follows:

inspect -> plan -> validate -> confirm -> apply -> audit -> observe -> revise

Creating configuration never silently enables hardware.

1. Install a safe-empty runtime

Download the matching .run package and checksum from GitHub Releases, then verify and run the fresh-install package on the target Linux host:

sha256sum -c AetherEdge-<arch>-<version>.run.sha256
chmod +x AetherEdge-<arch>-<version>.run
sudo ./AetherEdge-<arch>-<version>.run

The installer creates the six services, aether CLI, private bootstrap credentials, embedded database, and an empty configuration. It does not add a device, enable a rule, or install a domain solution.

2. Establish identity and prove the empty runtime

Start with the local health gate:

aether doctor

A healthy first boot has six healthy services and valid SHM. Sign in with the private bootstrap credential, change that password immediately, create a dedicated account for normal operation, and export its signed AETHER_ACCESS_TOKEN. Then prove that nothing was commissioned implicitly:

aether channels list --json
aether models instances list --json
aether rules list --json

The channel, instance, and rule collections should all be empty. Getting Started covers the exact bootstrap and token flow.

3. Create one channel—still disabled

Choose a protocol included in the installed IO build. A governed create command requires authentication and confirmation, but the new channel remains disabled unless --enabled true is explicitly requested:

AETHER_ACCESS_TOKEN='<signed access JWT>' aether channels create \
  --name "PLC#1" \
  --protocol modbus_tcp \
  --params '{"host":"192.168.1.10","port":502}' \
  --confirmed

Before enabling it, declare the physical points, map protocol addresses, bind the required points to a logical instance supplied by a Domain Pack, and review unresolved mappings. Follow Connect Devices for that complete workflow and the Protocol Adapter Reference for the exact feature, runtime ID, transport, and mapping matrix.

4. Prove observation before control

device -> aether-io -> authoritative SHM -> API and embedded history -> client

Verify channel health, timestamps, quality, freshness, topology generation, historical samples, and unmapped points. A connected socket without fresh data is not a healthy acquisition path, and a missing value is not zero.

Once the mapping is complete, enable the channel with the latest desired-state revision returned by the channel query:

AETHER_ACCESS_TOKEN='<signed access JWT>' aether channels enable <CHANNEL_ID> \
  --expected-revision <REVISION> \
  --confirmed

The first useful milestone is a read-only data path. Do not add physical commands merely to prove acquisition.

5. Add and commission deterministic behavior

Add logical models, calculations, alarms, and local rules through a downstream Domain Pack or application composition. Draft rules and control paths stay disabled until their inputs, targets, permissions, failure behavior, and audit path have been reviewed.

review disabled behavior -> validate -> confirm -> enable
  -> inspect audit evidence -> observe the physical outcome

A successful command acceptance is not proof that the physical device reached the requested state. Observe that outcome separately.

6. Choose a replaceable client

All clients enter through authenticated aether-api:6005:

Client

Use it for

aether CLI

Installation, commissioning, diagnostics, and operations

HTTP/OpenAPI

Dedicated applications and generated clients

Read-only MCP

AI-assisted inspection and explanation

Temporary write-enabled MCP

One bounded, explicitly authorized maintenance task

aether-edge-sdk

A downstream solution or embedded composition

Downstream Console

A domain-specific operator experience, such as AetherEMS

The other five process APIs stay on loopback. Clients must not proxy them or write SHM or SQLite directly. AetherEdge ships no universal Web Console; a UI is a replaceable application client, never a second state authority.

To attach an existing runtime to Claude in the default read-only mode:

claude mcp add aether -- aether mcp

Set AETHER_ACCESS_TOKEN for the session. Use SSH stdio or an HTTPS ingress for a remote Edge—never expose an internal service port. See Connect AI Assistants.

Developing without field hardware

Run the industry-neutral SDK composition or a protocol verification simulator. Neither commissions a physical device:

cargo run -p aether-example-minimal-gateway
cargo run -p simulator -- \
  --scenario tools/simulator/scenarios/modbus_protocol_verification.yaml \
  --port 5020

A source checkout is a developer path, not the normal operator installation flow. See Getting Started.

Build a downstream solution

cargo add aether-edge-sdk --features local-runtime

aether-edge-sdk, imported as aether_sdk, is the supported Rust application facade. A downstream product combines the SDK, a Domain Pack, and a dedicated application or agent in its own repository. Domain processors, models, and Consoles do not become dependencies of the AetherEdge kernel. AetherEMS is the reference energy-domain implementation of this model.

Runtime model

Process

Responsibility

aether-io

Protocol acquisition and sole telemetry/status writer

aether-automation

Instances, rules, and audited control dispatch

aether-alarm

Alarm evaluation and lifecycle

aether-history

Embedded history and optional history adapters

aether-api

Authenticated remote application API and WebSocket

aether-uplink

Durable legacy Cloud/MQTT delivery and experimental CloudLink foundation

Devices -> aether-io -> authoritative SHM
                         |-> automation and alarms
                         |-> API and embedded history
                         `-> durable outbox -> optional cloud

              domain <- ports <- application <- runtime/interfaces
                        ^
                        `---- downstream static Rust adapters (out of tree)

AetherEdge currently delivers the integrator-grade runtime, application contracts, governed commands, MCP foundations, Pack v1, and SDK facade. The complete conversational intent compiler, simulation, temporary behavior, and continuous outcome evaluation remain product direction. See the platform status for the exact delivery boundary.

Contributing

Development setup and verification live in CONTRIBUTING.md. Repository rules for agents and contributors live in AGENTS.md.

License

Licensed under either MIT or Apache-2.0, at your option.

Available Tools

16 tools
alarms_listA

List active alarms, optionally filtered by channel/level/keyword

Inputs: page, size, level, channel, +1 more.

alarms_rule_getB

Get a specific alarm rule by ID

Inputs: id (required).

alarms_rules_listA

List alarm rules, optionally filtered by channel/enabled/level/keyword

Inputs: page, size, level, channel, +2 more.

alarms_statsB

Get aggregate alarm statistics

Inputs: no named parameters.

channels_mappingsB

Show a channel's point-to-instance mappings

Inputs: channel_id (required).

channels_pointsA

List points on a channel, optionally filtered by type (T/S/C/A)

Inputs: channel_id (required), point_type.

channels_points_mappingC

Show the instance mapping for a single point

Inputs: point_id (required), channel_id (required), point_type (required).

channels_statusB

Get the connection status of a specific channel

Inputs: channel_id (required).

channels_unmapped_pointsA

List points on a channel that have no protocol address mapping (points not wired to a device register; instance routing is a separate concern)

Inputs: channel_id (required).

history_latestB

Get the latest historical value for a point

Inputs: point_id (required), series_key (required).

models_instancesA

List device instances, optionally filtered by product type

Inputs: product.

models_productsB

List available product types

Inputs: no named parameters.

routing_listA

List all M2C/C2M routing entries

Inputs: no named parameters.

rules_getB

Get a specific business rule by ID

Inputs: rule_id (required).

rules_listB

List all business rules

Inputs: no named parameters.

templates_listB

List channel configuration templates, optionally filtered by protocol

Inputs: protocol.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools are clearly separated by resource and granularity: alarms vs. rules, list vs. get, and channel-level vs. point-level mappings. The only mild risk is between channels_mappings, channels_points_mapping, and channels_unmapped_points, but their descriptions clarify the difference.

    Naming Consistency4/5

    The naming generally follows a resource-first snake_case pattern with list/get/stats/status suffixes, which is predictable. Minor inconsistencies exist, such as history_latest not using a verb and alarm rules using alarms_rules vs. business rules using rules.

    Tool Count4/5

    At 16 tools, the set is slightly over the ideal 3-15 range but still reasonable given the broad domain covering alarms, channels, rules, history, models, routing, and templates. Each tool has a distinct place in the overall surface.

    Completeness2/5

    The entire tool surface is read-only: there are no create, update, delete, acknowledge, map, or route configuration operations. This creates significant dead ends, such as listing unmapped points with no way to map them, or viewing alarm rules with no way to modify them.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to interact with inSCADA systems via the Model Context Protocol, providing 39 tools for live data, alarms, scripts, historical analysis, charts, and more.
      39
      48 npm
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Provides AI agents with safe, governed read access to industrial control systems (OPC-UA, Modbus, S7, Mitsubishi, MTConnect, MQTT/Sparkplug) plus cross-protocol diagnostics for troubleshooting data breaks, alarm floods, and unhealthy tags.
      157
      11
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      The first and only MCP server for PLC (Programmable Logic Controller) intelligence. Give any AI agent direct access to industrial automation data — ladder logic, tag databases, cross-references, fault root cause analysis, and sequence blockers
      MIT