Skip to content
Proxus 2.0.1 Licence and sign-in fixes after the 2.0 upgrade Release notes

How-to guide · for Developers, Administrators

MCP server

Connect an AI assistant to the hub with the Model Context Protocol. It signs in as a Proxus user and reads plant model, device status, logs and telemetry.

At the end of this guide, an AI assistant that speaks the Model Context Protocol (MCP), such as Claude, Cursor or VS Code, is connected to your hub. It can answer questions about devices, pipelines, rules and alerts from the live system, with the rights of the Proxus user it signs in as.

Before you start

You need:

  • The hub's address. The MCP server is at /mcp on the hub's port, for example http://localhost:8080/mcp.
  • A Proxus user for the assistant. Its role limits what the assistant may read and change. See Users and roles.
  • An MCP client that supports the Streamable HTTP transport.
  • [MCP] Enabled = true in the hub's configuration (the default).

Step 1: Add the server to your client

claude mcp add --transport http proxus http://localhost:8080/mcp
.vscode/mcp.json
{
  "servers": {
    "proxus": { "type": "http", "url": "http://localhost:8080/mcp" }
  }
}

Most clients take a JSON entry with the server's URL:

{
  "mcpServers": {
    "proxus": { "url": "http://localhost:8080/mcp" }
  }
}

No header or key is configured in the client. Signing in happens inside the conversation, in the next step.

Step 2: Sign in

Before it signs in, the assistant can only list the tools and call schema_overview, which explains the server and the sign-in step. Ask it to sign in and give it the Proxus user name and password when it asks. It calls auth_login with them.

With single sign-on, the host can sign in with an access token of your identity provider instead: auth_login with accessToken. No Proxus password passes through the conversation, and the connection gets the roles mapped from the person's or service account's groups.

When two-step verification is on for the user, the assistant also asks for the current code from the authenticator app and passes it as code.

The sign-in is tied to this MCP connection and lasts SessionTtlMinutes (25 minutes by default). After that, or after auth_logout, the assistant asks again. auth_whoami shows which user the connection is signed in as.

What the assistant can do

ToolWhat it doesWho may use it
schema_overviewExplains the server, the sign-in state and which tool fits which task.anyone
auth_login, auth_whoami, auth_logoutSign in, show the signed-in user, sign out.anyone
schema_entitiesLists the object types (devices, profiles, rules, pipelines and others) and their readable fields.signed in
schema_templatesExample bodies for creating objects.signed in
schema_protocolsThe connection settings and tag address formats of a protocol.signed in
schema_telemetryDescribes the stored values table and how to query it.signed in
schema_odata_metadataA summary of the full data model.administrators
odata_requestReads objects (GET only, at most 100 per call). An agent reads the fields the AI Assistant reads, rule conditions, function code and device addresses included; passwords, keys, tokens, connection settings and SQL text stay hidden.signed in
odata_mutateCreates or changes an object when you asked for that exact change. Off until an administrator allows changes (AllowedMethods).signed in, with the role's rights and AI Assistant Access of at least Ask and propose changes
operations_summary, open_alarms, alarm_counts, alarm_history, list_devices, get_device, diagnose_device, list_gateways, health_findings, plant_structure, tag_keys, tag_history, dependencies, recurring_problems, shift_summary, audit_trail, system_logs, list_record_types, find_records, read_record, search_docs, read_doc, setup_guide, test_rule_conditionThe AI Assistant's own read tools: the same answers, in the same scope, as the user gets in the chat. Read-only.signed in
describe_record_type, propose_create, propose_update, propose_delete, propose_bulk_update, propose_plan, propose_alarm_changeThe AI Assistant's change tools. Nothing changes: each proposal becomes an approval card in the user's AI Assistant, in the conversation External agent (MCP), and is made only when the user approves it there, as in the chat (risky changes are confirmed twice; an unanswered proposal expires after 24 hours). At most 20 proposals wait for a user at a time.signed in, with AI Assistant Access of at least Ask and propose changes
proposal_statusWhether the user approved or rejected a proposal, and what applying it did.signed in
device_statusLive online or offline state of the devices the user may see.signed in
form_list, form_recordsThe published forms the user may open, and the records filled in on one of them (state, device, who and when, a summary of the answers), newest first, at most 100 per call. Read-only.signed in
form_summaryA form's records summed up as on the Apps page's Analysis tab: a count, or the sum, average, minimum or maximum of a number field, by a choice, device, person, state or time, with each group's share and cumulative share. Read-only.signed in
log_queryRecent system log entries, filtered by level, source or text.signed in
telemetry_queryOne read-only SQL query on the stored values, with row, time and memory limits.administrators
graph_schema, graph_neighbors, graph_impact, graph_lineage, graph_paths, graph_context_packWhat a device, rule, pipeline or dashboard depends on and what depends on it (the operational graph).signed in

The server also offers three prompts, proxus_read_entity, proxus_write_change and proxus_analyze_telemetry, and resources under proxus://schema/ (overview, entities, telemetry, templates, protocols).

Every call runs with the signed-in user's permissions. A change the role does not allow is refused, as it would be in the hub's screens. The role's AI Assistant Access also applies to MCP: with No access every tool except signing in is refused, with Ask questions the agent only reads, and changes need at least Ask and propose changes. Deleting is blocked by default even for users who may delete (BlockDelete = true).

Secure it for production

Set these in the [MCP] section of the hub's configuration (environment form MCP__<Key>):

KeyDefaultMeaning
EnabledtrueTurns the MCP server on or off.
ServerBaseUrl""The hub's public address, for example https://proxus.example.com. Required when clients connect from other machines; empty works only through localhost.
AllowedBaseUrls[]Other exact Proxus addresses auth_login may send credentials to.
AllowedOrigins[]Browser origins allowed to call /mcp. Clients that are not browsers send none.
IPWhitelist[]Addresses or ranges allowed to connect, for example ["10.0.0.0/8"]. Empty allows all.
AdminOnlyfalseOnly users with an administrative role may use the protected tools.
AllowedMethods"GET"Methods odata_mutate may use. The default "GET" keeps agents read-only; "GET,POST,PATCH,PUT" lets them create and change objects.
BlockDeletetrueRefuse deletes even if the role allows them.
BlockBulkOperationsfalseRefuse changes to several objects in one call.
RateLimitEnabledtrueLimit calls per user and minute.
RateLimitRequestsPerMinute60All calls.
ODataRateLimitRequestsPerMinute30odata_request and odata_mutate.
TelemetryRateLimitRequestsPerMinute120telemetry_query.
GraphRateLimitRequestsPerMinute60The graph tools.
MaxConcurrentSessionsPerUser0Open MCP sessions per user, 0 for no limit.
SessionTtlMinutes25How long a sign-in lasts.
AuditLoggingtrueLogs every call with user, address, tool and result.
AnonymousDiscoveryMode"ToolsAndOverview"What clients see before signing in: ToolsAndOverview, ToolsOnly or Disabled.
DebugLoggingfalseDetailed request logging for connection problems.

[MCP.ClickHouse] limits telemetry_query: MaxResultRows (1000), MaxRowsToRead (10000000), MaxBytesToRead and MaxMemoryUsage (512 MiB), MaxExecutionTimeSeconds (10), MaxThreads (4) and MaxResultBytes (16 MiB). Set Username and Password to a database user that may only read the DeviceRawData and Logs tables.

When several hub instances run behind a load balancer, sign-ins are shared through Redis when Cluster:RedisConnection (or MCP:RedisConnection) is set.

Refusals reach the client as errors: 403 when the address is not allowed, an authorization_denied error when an administrative tool is called by a user without an administrative role, 401 when a protected tool is called before signing in, 429 when a rate limit is reached.

What's next

Was this page helpful?

Evaluating Proxus? See it on your own machines in a 30-minute technical session.