> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cognite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Server requirements

> Server requirements for running the OPC UA extractor with different features, including session management, variables, history, arrays, events, and auditing.

Depending on the features used, the OPC UA extractor places certain requirements on the server. If these aren't fulfilled, the feature won't work, and the extractor may crash.

## Base

These services are required for all servers the OPC UA extractor connects to:

* **Session management** - The server must support connections from clients and be able to manage at least one session.
* **Browse and BrowseNext** - These services are used for mapping the node hierarchy and must be supported. If the server doesn't support **BrowseNext**, it must return all child nodes on a single request. It's possible to get around this limitation by adjusting the `browse-chunk` and `browse-nodes-chunk` configuration parameters.
* **Read** - The server must support the **Read** service to read attributes for nodes.

## Variables

Any server that has data variables to read from must support these:

* **Create Subscription** - The client must be able to create new subscriptions.
* **Create Monitored Item** - The client must be able to create new monitored items on an existing subscription.
* **Publish** - The server must handle publish requests from the client in a good way.
* **Notifications on data changes** - The server must provide clean notifications on data changes to the client.

## History

To read from a server with **History** set to `true`, the server must support the following:

* **HistoryReadRaw** - Data is only read using the **ReadRaw** mode history read. The server must support this.
* **ContinuationPoints** - The server must return a `continuationPoint` if a single request is insufficient to fetch all data points for a given node.
* **Historizing** - Any variable that supports history must have its **Historizing** attribute set to `true`.

## Backfill

To backfill, the server must support the following:

* **History read ordering** - If start/endtime is reversed in a `historyRead` call, the data must be returned in reverse order. If not, backfill may not work properly.

## Arrays

To read from a server with a non-zero `MaxArraySize`, the following must be true:

* **ArrayDimensions** - Must be of length `1`, and be set for all variables that should be read.
* **ValueRank** - Must be set to `0` or higher, as `-1` indicates a scalar.

## Events

To read events from the server, it must support the following:

* **Create Subscription** - The client must be able to create new subscriptions.
* **Create Monitored Item** - The client must be able to create new `monitoredItems` on an existing subscription.
* **Publish** - The server must handle publish requests from the client in a good way.
* **Notifications on events** - The server must provide clean notifications on events to the client, on the form specified in the specifications.
* **Filtering of events** - The server must support event filters, with at a minimum the `InList`, `Equals`, and `And` operators. The extractor filters clientside, but the server must tolerate a filter option, at the least, and respect the `SelectClauses` to deliver only requested fields.
* **SourceNode** - The server must set the `SourceNode` property on all events that the extractor will map to destinations.
* **EventNotifier** - The server should correctly set the `EventNotifier` property. If this is not done, event emitters must be manually added.

## History

In addition to the base event properties, to read history, the server must support:

* **HistoryReadEvents** - Reading events from history.
* **ContinuationPoints** - The server must return a `continuationPoint` if a single request is insufficient to fetch all events for a given emitter.
* **Filtering in history** - Same as the general case, but for history. Note that in both cases, a server can ignore filters, though the `SelectClause` must be respected.

## Auditing

In addition to the base event properties, to support node discovery using auditing, the server must support:

* **AuditingEvents** - Of at least two types, `AuditAddNodesEventType`, and `AuditAddReferencesEventType`. These must be emitted from the server node and provided to the client.
