> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.itential.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.itential.com/_mcp/server.

# Service brokers

> How to associate an Itential Platform service with a broker to implement a shared interface.

This guide explains how to associate an Itential Platform service with a broker.

## What brokering does

Associating a service with an IP broker means the service agrees to implement the broker's interface — that is, the service supplies a particular set of functions declared by the broker. For example, a broker named `trope` might support functions `foo`, `bar`, and `baz`. A service that implements the `trope` broker must define all three functions. If it does not, an error will occur at runtime when the brokering system calls a missing function.

Brokering allows services to be used conceptually to perform operations. Consider an example called the `device` broker with functions such as `addDevice`, `getDevice`, and `deleteDevice`. If three different services talk to three different network managers and all can perform these operations, you can associate them all with the `device` broker. You can then reference the concept of a device — rather than a specific service — to perform those operations.

## Associate a broker

To associate a service with one or more brokers, add it to the `brokers` array in `pronghorn.json`. Add the `brokers` array at the root of the configuration if it does not exist. In the following example, the `device` and `method` brokers are added:

```json
{
  "id": "@itential/adapter-example",
  "export": "EXAMPLE",
  "title": "EXAMPLE",
  "src": "src.js",
  "type": "Adapter",
  "brokers": [
    "device",
    "method"
  ],
  "roles": [
    "admin"
  ],
  "topics": {},
  "views": [],
  "methods": []
}
```

When the service is installed in Itential Platform, the broker associations are added to the service configuration automatically:

```json
{
  "loggerProps": {
    "description": "Logging",
    "log_max_files": 100,
    "log_max_file_size": 1048576,
    "log_level": "info",
    "log_directory": "./logs",
    "log_filename": "example.log",
    "console_level": "warn"
  },
  "isEncrypted": false,
  "model": "@itential/adapter-example",
  "name": "example_adapter",
  "type": "Adapter",
  "properties": {
    "id": "example_adapter",
    "type": "EXAMPLE",
    "properties": {},
    "groups": [],
    "brokers": [
      "device",
      "method"
    ]
  }
}
```