OCPP — AI Agent Reference
You are assisting a developer working on EV charging infrastructure using OCPP.
This skill covers OCPP 2.1, OCPP 2.0.1, and OCPP 1.6J. Use it to provide accurate
schema references, implementation guidance, and to flag areas where the spec is silent.
Version Detection
Detect the OCPP version from the developer's code:
- 1.6J indicators:
StartTransaction, StopTransaction, RemoteStartTransaction, RemoteStopTransaction, Charge Point, Central System, idTag (string), connectorId without evseId, .req / .conf naming
- 2.0.1 indicators:
TransactionEvent, RequestStartTransaction, RequestStopTransaction, Charging Station, CSMS, IdTokenType (object), evseId, Request / Response naming
- 2.1 indicators:
SetDERControl, GetTariffs, OpenPeriodicEventStream, BatterySwap, RequestBatterySwap, NotifyPeriodicEventStream, AFRRSignal, PullDynamicScheduleUpdate, UpdateDynamicSchedule, OCPP-J subprotocol string ocpp2.1, JSON schema $id URNs containing :2:2025: (e.g. urn:OCPP:Cp:2:2025:1:SetDERControlRequest)
If unclear, ask the developer which version they're using.
Quick Reference
What is OCPP: Open Charge Point Protocol — communication between EV Charging Stations and a management backend over WebSocket + JSON. The station initiates the connection. Both sides can send messages.
OCPP 2.1
- Roles: Charging Station (CS) ↔ CSMS
- Device Model: Same as 2.0.1 — Charging Station → EVSE(s) → Connector(s).
evseId=0 means the whole station.
- 91 messages = 2.0.1's 64 messages + 27 new messages (see below)
- New capabilities: DER control, V2X/bidirectional power transfer, tariff management, battery swap, periodic event stream, dynamic charging profile updates, priority charging, web payment
OCPP 2.0.1
- Roles: Charging Station (CS) ↔ CSMS
- Device Model: Charging Station → EVSE(s) → Connector(s).
evseId and connectorId are 1-indexed. evseId=0 means the whole station.
- 64 messages, organized by Functional Block
OCPP 1.6J
- Roles: Charge Point (CP) ↔ Central System (CS)
- Device Model: Charge Point → Connector(s).
connectorId is 1-indexed. connectorId=0 means the whole Charge Point. No EVSE concept.
- 28 messages, organized by Feature Profile (Core, Smart Charging, Firmware, Local Auth List, Reservation, Remote Trigger)
Message Frame (both versions): JSON-RPC-like. Three types:
CALL — [2, messageId, action, payload]
CALLRESULT — [3, messageId, payload]
CALLERROR — [4, messageId, errorCode, errorDescription, errorDetails]
All 64 OCPP 2.0.1 Messages
Provisioning & Lifecycle
BootNotification (CS→CSMS) — Station registers on connect
Heartbeat (CS→CSMS) — Keepalive
StatusNotification (CS→CSMS) — Connector/EVSE status changes
GetVariables (CSMS→CS) — Read configuration
SetVariables (CSMS→CS) — Write configuration
GetBaseReport (CSMS→CS) — Request full variable inventory
NotifyReport (CS→CSMS) — Variable inventory response (paginated)
SetNetworkProfile (CSMS→CS) — Configure network connection profiles
Reset (CSMS→CS) — Reboot station
Authorization
Authorize (CS→CSMS) — Validate ID token
ClearCache (CSMS→CS) — Clear authorization cache
SendLocalList (CSMS→CS) — Push local auth list
GetLocalListVersion (CSMS→CS) — Query local auth list version
Transactions
TransactionEvent (CS→CSMS) — Started/Updated/Ended events
RequestStartTransaction (CSMS→CS) — Remote start
RequestStopTransaction (CSMS→CS) — Remote stop
GetTransactionStatus (CSMS→CS) — Query outstanding transaction messages
MeterValues (CS→CSMS) — Send meter values outside transaction context
Remote Control
TriggerMessage (CSMS→CS) — Request CS to send a specific message
UnlockConnector (CSMS→CS) — Physically unlock connector
ChangeAvailability (CSMS→CS) — Set EVSE operative/inoperative
Smart Charging
SetChargingProfile (CSMS→CS) — Install charging profile
GetChargingProfiles (CSMS→CS) — Query installed profiles
ClearChargingProfile (CSMS→CS) — Remove profiles
ClearedChargingLimit (CS→CSMS) — External limit cleared
NotifyChargingLimit (CS→CSMS) — External limit notification
ReportChargingProfiles (CS→CSMS) — Profile query response
GetCompositeSchedule (CSMS→CS) — Calculate effective schedule
NotifyEVChargingSchedule (CS→CSMS) — EV-proposed schedule (ISO 15118)
NotifyEVChargingNeeds (CS→CSMS) — Report EV charging needs (ISO 15118)
Firmware
UpdateFirmware (CSMS→CS) — Trigger firmware update
FirmwareStatusNotification (CS→CSMS) — Update progress
PublishFirmware (CSMS→CS) — Make firmware available to local network
PublishFirmwareStatusNotification (CS→CSMS) — Publish progress
UnpublishFirmware (CSMS→CS) — Remove published firmware
Security & Certificates
Get15118EVCertificate (CS→CSMS) — EV certificate request
GetCertificateStatus (CS→CSMS) — OCSP status check
SignCertificate (CS→CSMS) — CSR for station certificate
CertificateSigned (CSMS→CS) — Signed certificate delivery
InstallCertificate (CSMS→CS) — Install CA certificate
DeleteCertificate (CSMS→CS) — Remove certificate
GetInstalledCertificateIds (CSMS→CS) — List installed certs
SecurityEventNotification (CS→CSMS) — Report security-related event
Diagnostics & Monitoring
GetLog (CSMS→CS) — Request log upload
LogStatusNotification (CS→CSMS) — Log upload progress
NotifyEvent (CS→CSMS) — Component/variable events
SetMonitoringBase (CSMS→CS) — Set monitoring baseline
SetVariableMonitoring (CSMS→CS) — Configure variable monitors
SetMonitoringLevel (CSMS→CS) — Set monitoring severity level
GetMonitoringReport (CSMS→CS) — Query active monitors
ClearVariableMonitoring (CSMS→CS) — Remove monitors
NotifyMonitoringReport (CS→CSMS) — Monitor query response
CustomerInformation (CSMS→CS) — Request customer data
NotifyCustomerInformation (CS→CSMS) — Customer data response
Display Messages
CostUpdated (CSMS→CS) — Update displayed cost
SetDisplayMessage (CSMS→CS) — Show message on display
GetDisplayMessages (CSMS→CS) — Query displayed messages
ClearDisplayMessage (CSMS→CS) — Remove displayed message
NotifyDisplayMessages (CS→CSMS) — Display message query response
Reservation
ReserveNow (CSMS→CS) — Create reservation
CancelReservation (CSMS→CS) — Cancel reservation
ReservationStatusUpdate (CS→CSMS) — Reservation expired/removed
Data Transfer
DataTransfer (CS↔CSMS) — Bidirectional vendor extension
OCPP 2.1 — 27 New Messages (added to 2.0.1's 64)
OCPP 2.1 retains all 64 OCPP 2.0.1 messages and adds the following 27.
Headings match the functional block each message's schema lives under (see the
schema file map below).
DER Control (Distributed Energy Resources)
SetDERControl (CSMS→CS) — Install DER control setpoint (frequency response, power limits, reactive power)
GetDERControl (CSMS→CS) — Query installed DER control settings
ClearDERControl (CSMS→CS) — Remove DER control settings
ReportDERControl (CS→CSMS) — DER control query response
NotifyDERAlarm (CS→CSMS) — Report DER-related alarm condition
NotifyDERStartStop (CS→CSMS) — Notify DER function start/stop
Bidirectional / V2X
NotifyAllowedEnergyTransfer (CSMS→CS) — Inform CS which energy transfer directions are allowed
AFRRSignal (CSMS→CS) — Automatic Frequency Restoration Reserve signal (frequency support for V2X)
Battery Swap
BatterySwap (CS→CSMS) — Notify battery swap event at station
RequestBatterySwap (CSMS→CS) — Request battery swap operation
Tariff & Cost
GetTariffs (CSMS→CS) — Query tariffs installed on station
SetDefaultTariff (CSMS→CS) — Set the default tariff for an EVSE
ChangeTransactionTariff (CSMS→CS) — Change tariff mid-transaction
ClearTariffs (CSMS→CS) — Remove tariffs from station
NotifySettlement (CS→CSMS) — Notify settlement result for a payment
NotifyWebPaymentStarted (CS→CSMS) — Notify web-based payment initiation
VatNumberValidation (CS→CSMS) — Request VAT number validation
Dynamic Smart Charging
PullDynamicScheduleUpdate (CS→CSMS) — Request updated schedule for dynamic profile
UpdateDynamicSchedule (CSMS→CS) — Push schedule update for dynamic profile
NotifyPriorityCharging (CS→CSMS) — Notify that priority charging has started/stopped
UsePriorityCharging (CSMS→CS) — Request CS to use priority charging
Periodic Event Stream
OpenPeriodicEventStream (CSMS→CS) — Open a stream for periodic event reporting
ClosePeriodicEventStream (CSMS→CS) — Close a periodic event stream
GetPeriodicEventStream (CSMS→CS) — Query open periodic event streams
AdjustPeriodicEventStream (CSMS→CS) — Modify parameters of an open stream
NotifyPeriodicEventStream (CS→CSMS, one-way SEND) — Push periodic event data to CSMS
Certificates
GetCertificateChainStatus (CS→CSMS) — Query certificate chain OCSP status
All 28 OCPP 1.6J Messages
Core (required profile)
Authorize (CP→CS) — Validate idTag
BootNotification (CP→CS) — Charge Point registers after (re)boot
ChangeAvailability (CS→CP) — Set connector operative/inoperative
ChangeConfiguration (CS→CP) — Set a configuration key
ClearCache (CS→CP) — Clear authorization cache
DataTransfer (CP↔CS) — Vendor-specific data exchange
GetConfiguration (CS→CP) — Read configuration keys
Heartbeat (CP→CS) — Keepalive
MeterValues (CP→CS) — Periodic meter readings
RemoteStartTransaction (CS→CP) — Remote start
RemoteStopTransaction (CS→CP) — Remote stop
Reset (CS→CP) — Reboot Charge Point
StartTransaction (CP→CS) — Transaction started
StatusNotification (CP→CS) — Connector status/error change
StopTransaction (CP→CS) — Transaction ended
UnlockConnector (CS→CP) — Physically unlock connector
Smart Charging
SetChargingProfile (CS→CP) — Install charging profile
ClearChargingProfile (CS→CP) — Remove profiles
GetCompositeSchedule (CS→CP) — Get effective schedule
Firmware Management
GetDiagnostics (CS→CP) — Request diagnostic log upload
DiagnosticsStatusNotification (CP→CS) — Upload progress
UpdateFirmware (CS→CP) — Trigger firmware update
FirmwareStatusNotification (CP→CS) — Update progress
Local Auth List Management
SendLocalList (CS→CP) — Push local authorization list
GetLocalListVersion (CS→CP) — Query list version
Reservation
ReserveNow (CS→CP) — Reserve a connector
CancelReservation (CS→CP) — Cancel reservation
Remote Trigger
TriggerMessage (CS→CP) — Request CP to send a specific message
Key Data Types (OCPP 2.0.1)
- IdTokenType — User identification (eMAID, RFID, etc.) with optional groupIdToken
- ChargingProfileType — Charging limits: id, stackLevel, purpose, kind, chargingSchedule
- MeterValueType — Timestamped array of SampledValue (energy, power, current, voltage, SoC)
- EVSEType — EVSE identifier (id + optional connectorId)
- StatusInfoType — Reason code + additional info for status responses
- TransactionType — Transaction state: transactionId, chargingState, stoppedReason
- ChargingScheduleType — Time-based power/current limits with periods
- IdTokenInfoType — Authorization result: status, cacheExpiryDateTime, groupIdToken
Escalation Model
When implementing OCPP behavior, you will encounter areas where the specification does not fully define what to do. These are categorized as:
SPEC-SILENT
The OCPP specification does not define behavior for this case. You MUST flag this to the developer. Do NOT silently pick a default.
VENDOR-DEPENDENT
Behavior depends on the Charging Station hardware or firmware. Ask which hardware/firmware is targeted.
POLICY-DEPENDENT
Behavior depends on business rules, site configuration, or grid operator requirements. Ask about the business/operational context.
Escalation Strictness
Check the developer's project CLAUDE.md for escalation preferences. They may write something like:
For OCPP: use pragmatic escalation mode.
or:
OCPP escalation: strict — always ask before assuming spec-silent behavior.
Two modes:
If no escalation preference is found in CLAUDE.md, default to strict.
Documentation File Map
When you need detailed field-level schemas, sequence diagrams, or worked examples, read the relevant file from the plugin's docs/ directory. Use ${CLAUDE_PLUGIN_ROOT} to resolve the path.
| Topic |
File to read |
| All shared data types (enums + composites) |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-DataTypes.md |
| Device model (components + variables catalog) |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-DeviceModel/OCPP-2.0.1-DeviceModel.md |
| Open enumerations (units, security events, reason codes) |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Enumerations/OCPP-2.0.1-Enumerations.md |
| Authorization schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Authorization.md |
| Availability schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Availability.md |
| Diagnostics schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Diagnostics.md |
| Display schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Display.md |
| Firmware schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Firmware.md |
| Provisioning schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Provisioning.md |
| Reservation schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Reservation.md |
| Security schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Security.md |
| Smart Charging schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-SmartCharging.md |
| Transaction schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Transactions.md |
| Boot, auth, transaction sequences |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences.md |
| Offline, firmware, diagnostics sequences |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences-Operational.md |
| Smart Charging deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging.md |
| Smart Charging worked examples |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-Examples.md |
| ISO 15118 + Smart Charging |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-ISO15118.md |
| OCPP 2.0.1 overview + migration guide |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1.md |
| Documentation methodology + trust model |
${CLAUDE_PLUGIN_ROOT}/docs/METHODOLOGY.md |
|
|
| OCPP 2.1 overview + migration from 2.0.1 |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1.md |
| OCPP 2.1 data types |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DataTypes.md |
| OCPP 2.1 enumerations |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Enumerations/OCPP-2.1-Enumerations.md |
| OCPP 2.1 device model |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DeviceModel/OCPP-2.1-DeviceModel.md |
| OCPP 2.1 DER control deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DERControl/OCPP-2.1-DERControl.md |
| OCPP 2.1 bidirectional / V2X deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Bidirectional/OCPP-2.1-Bidirectional.md |
| OCPP 2.1 tariff & cost deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-TariffCost/OCPP-2.1-TariffCost.md |
| OCPP 2.1 smart charging deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-SmartCharging/OCPP-2.1-SmartCharging.md |
| OCPP 2.1 message sequences |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Sequences/OCPP-2.1-Sequences.md |
| OCPP 2.1 use cases |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-UseCases/OCPP-2.1-UseCases.md |
| OCPP 2.1 certification |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Certification/OCPP-2.1-Certification.md |
| OCPP 2.1 Authorization schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Authorization.md |
| OCPP 2.1 Availability schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Availability.md |
| OCPP 2.1 BatterySwap schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-BatterySwap.md |
| OCPP 2.1 Bidirectional schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Bidirectional.md |
| OCPP 2.1 Certificates schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Certificates.md |
| OCPP 2.1 DERControl schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-DERControl.md |
| OCPP 2.1 DataTransfer schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-DataTransfer.md |
| OCPP 2.1 Diagnostics schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Diagnostics.md |
| OCPP 2.1 Display schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Display.md |
| OCPP 2.1 Firmware schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Firmware.md |
| OCPP 2.1 LocalAuthList schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-LocalAuthList.md |
| OCPP 2.1 MeterValues schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-MeterValues.md |
| OCPP 2.1 Provisioning schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Provisioning.md |
| OCPP 2.1 RemoteControl schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-RemoteControl.md |
| OCPP 2.1 Reservation schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Reservation.md |
| OCPP 2.1 Security schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Security.md |
| OCPP 2.1 SmartCharging schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-SmartCharging.md |
| OCPP 2.1 TariffAndCost schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-TariffAndCost.md |
| OCPP 2.1 Transactions schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Transactions.md |
|
|
| OCPP 1.6J overview + config keys |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J.md |
| 1.6J Core schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Core.md |
| 1.6J Smart Charging schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-SmartCharging.md |
| 1.6J Firmware schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Firmware.md |
| 1.6J Local Auth List schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-LocalAuthList.md |
| 1.6J Reservation schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Reservation.md |
| 1.6J Remote Trigger schemas |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-RemoteTrigger.md |
| 1.6J Message sequences |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Sequences/OCPP-1.6J-Sequences.md |
| 1.6J Smart Charging deep-dive |
${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-SmartCharging/OCPP-1.6J-SmartCharging.md |
How to use the file map
- Identify the topic from the developer's question
- Read the relevant file(s) using the Read tool
- Cite specific fields, constraints, and enum values from the docs
- Flag any ESCALATE markers you encounter in the docs
Topic argument routing
If invoked with /ocpp <topic>, immediately read the relevant files:
OCPP 2.1 topics:
/ocpp 2.1 or /ocpp 2.1 overview → read OCPP-2.1.md overview
/ocpp 2.1 migration → read OCPP-2.1.md (contains migration guide from 2.0.1)
/ocpp 2.1 der or /ocpp 2.1 der-control → read OCPP-2.1-DERControl/OCPP-2.1-DERControl.md + OCPP-2.1-Schemas/OCPP-2.1-Schemas-DERControl.md
/ocpp 2.1 v2x or /ocpp 2.1 bidirectional → read OCPP-2.1-Bidirectional/OCPP-2.1-Bidirectional.md + OCPP-2.1-Schemas/OCPP-2.1-Schemas-Bidirectional.md
/ocpp 2.1 tariff or /ocpp 2.1 cost → read OCPP-2.1-TariffCost/OCPP-2.1-TariffCost.md + OCPP-2.1-Schemas/OCPP-2.1-Schemas-TariffAndCost.md
/ocpp 2.1 device-model → read OCPP-2.1-DeviceModel/OCPP-2.1-DeviceModel.md
/ocpp 2.1 enums or /ocpp 2.1 enumerations → read OCPP-2.1-Enumerations/OCPP-2.1-Enumerations.md
/ocpp 2.1 use-cases → read OCPP-2.1-UseCases/OCPP-2.1-UseCases.md
/ocpp 2.1 certification → read OCPP-2.1-Certification/OCPP-2.1-Certification.md
/ocpp 2.1 schemas → read all 19 files in OCPP-2.1-Schemas/
/ocpp 2.1 smart-charging → read OCPP-2.1-SmartCharging/OCPP-2.1-SmartCharging.md + OCPP-2.1-Schemas/OCPP-2.1-Schemas-SmartCharging.md
/ocpp 2.1 sequences → read OCPP-2.1-Sequences/OCPP-2.1-Sequences.md
/ocpp 2.1 types or /ocpp 2.1 data-types → read OCPP-2.1-DataTypes.md
OCPP 1.6J topics:
/ocpp 1.6 or /ocpp 1.6j → read OCPP-1.6J.md overview
/ocpp 1.6 smart-charging → read 1.6J SmartCharging schemas + deep-dive
/ocpp 1.6 schemas → read all 1.6J Schema files
/ocpp 1.6 sequences → read 1.6J Sequences file
/ocpp 1.6 core → read 1.6J Core schemas
/ocpp 1.6 firmware → read 1.6J Firmware schemas
/ocpp 1.6 auth-list → read 1.6J LocalAuthList schemas
/ocpp 1.6 reservation → read 1.6J Reservation schemas
OCPP 2.0.1 topics (default):
/ocpp smart-charging → read all 3 SmartCharging files
/ocpp authorize or /ocpp authorization → read Authorization schemas
/ocpp transactions → read Transaction schemas + Sequences
/ocpp provisioning or /ocpp boot → read Provisioning schemas + Sequences
/ocpp schemas → read all Schema files
/ocpp sequences → read both Sequence files
/ocpp types or /ocpp data-types → read DataTypes
/ocpp device-model → read OCPP-2.0.1-DeviceModel/OCPP-2.0.1-DeviceModel.md
/ocpp enums or /ocpp enumerations → read OCPP-2.0.1-Enumerations/OCPP-2.0.1-Enumerations.md
/ocpp firmware → read Firmware schemas + Operational sequences
/ocpp diagnostics → read Diagnostics schemas + Operational sequences
/ocpp reservation → read Reservation schemas
/ocpp display → read Display schemas
/ocpp security or /ocpp certificates → read Security schemas
/ocpp availability → read Availability schemas
- Any other topic → search across all docs using grep
Behavioral Guidelines
Always cite the source. When referencing a field, type, or constraint, mention which doc it comes from. Distinguish schema-derived facts (high confidence) from AI interpretation (lower confidence).
Respect the escalation model. When you encounter an > **ESCALATE:** marker in the docs, follow the escalation strictness rules above.
Detect version from context. Use the version detection rules above. If the code uses StartTransaction/StopTransaction, it's 1.6J — read 1.6J docs. If it uses SetDERControl, GetTariffs, BatterySwap, OpenPeriodicEventStream, the subprotocol ocpp2.1, or schema URNs containing :2:2025:, it's 2.1 — read 2.1 docs. If it uses TransactionEvent without 2.1 indicators, it's 2.0.1. If no version indicators are present, assume 2.0.1 and mention the assumption.
Don't invent protocol behavior. If you're unsure whether something is spec-defined, check the docs first. If the docs don't cover it, say so explicitly rather than guessing.
Use the schemas for validation. When the developer writes OCPP message payloads, validate field names, types, required/optional status, and constraints against the schema docs.
1---2name: ocpp3description: OCPP protocol reference for EV charging infrastructure development. Covers OCPP 2.1, OCPP 2.0.1, and OCPP 1.6J. Use when working with OCPP messages, charging station code, CSMS/Central System backends, smart charging, transaction handling, or EV charging protocols. Activates on keywords: OCPP, charging station, charge point, CSMS, Central System, EVSE, charging profile, BootNotification, TransactionEvent, StartTransaction, StopTransaction, SetChargingProfile, or any OCPP message name. Also covers OCPP 2.1 features: DER control, V2X, bidirectional power transfer, tariff, battery swap, periodic event stream, device model, dynamic charging profile.4---56# OCPP — AI Agent Reference78You are assisting a developer working on EV charging infrastructure using OCPP.9This skill covers **OCPP 2.1**, **OCPP 2.0.1**, and **OCPP 1.6J**. Use it to provide accurate10schema references, implementation guidance, and to flag areas where the spec is silent.1112## Version Detection1314Detect the OCPP version from the developer's code:15- **1.6J indicators:** `StartTransaction`, `StopTransaction`, `RemoteStartTransaction`, `RemoteStopTransaction`, `Charge Point`, `Central System`, `idTag` (string), `connectorId` without `evseId`, `.req` / `.conf` naming16- **2.0.1 indicators:** `TransactionEvent`, `RequestStartTransaction`, `RequestStopTransaction`, `Charging Station`, `CSMS`, `IdTokenType` (object), `evseId`, `Request` / `Response` naming17- **2.1 indicators:** `SetDERControl`, `GetTariffs`, `OpenPeriodicEventStream`, `BatterySwap`, `RequestBatterySwap`, `NotifyPeriodicEventStream`, `AFRRSignal`, `PullDynamicScheduleUpdate`, `UpdateDynamicSchedule`, OCPP-J subprotocol string `ocpp2.1`, JSON schema `$id` URNs containing `:2:2025:` (e.g. `urn:OCPP:Cp:2:2025:1:SetDERControlRequest`)1819If unclear, ask the developer which version they're using.2021## Quick Reference2223**What is OCPP:** Open Charge Point Protocol — communication between EV Charging Stations and a management backend over WebSocket + JSON. The station initiates the connection. Both sides can send messages.2425### OCPP 2.126- **Roles:** Charging Station (CS) ↔ CSMS27- **Device Model:** Same as 2.0.1 — Charging Station → EVSE(s) → Connector(s). `evseId=0` means the whole station.28- **91 messages** = 2.0.1's 64 messages + 27 new messages (see below)29- **New capabilities:** DER control, V2X/bidirectional power transfer, tariff management, battery swap, periodic event stream, dynamic charging profile updates, priority charging, web payment3031### OCPP 2.0.132- **Roles:** Charging Station (CS) ↔ CSMS33- **Device Model:** Charging Station → EVSE(s) → Connector(s). `evseId` and `connectorId` are 1-indexed. `evseId=0` means the whole station.34- **64 messages**, organized by Functional Block3536### OCPP 1.6J37- **Roles:** Charge Point (CP) ↔ Central System (CS)38- **Device Model:** Charge Point → Connector(s). `connectorId` is 1-indexed. `connectorId=0` means the whole Charge Point. No EVSE concept.39- **28 messages**, organized by Feature Profile (Core, Smart Charging, Firmware, Local Auth List, Reservation, Remote Trigger)4041**Message Frame (both versions):** JSON-RPC-like. Three types:42- `CALL` — `[2, messageId, action, payload]`43- `CALLRESULT` — `[3, messageId, payload]`44- `CALLERROR` — `[4, messageId, errorCode, errorDescription, errorDetails]`4546## All 64 OCPP 2.0.1 Messages4748### Provisioning & Lifecycle49- `BootNotification` (CS→CSMS) — Station registers on connect50- `Heartbeat` (CS→CSMS) — Keepalive51- `StatusNotification` (CS→CSMS) — Connector/EVSE status changes52- `GetVariables` (CSMS→CS) — Read configuration53- `SetVariables` (CSMS→CS) — Write configuration54- `GetBaseReport` (CSMS→CS) — Request full variable inventory55- `NotifyReport` (CS→CSMS) — Variable inventory response (paginated)56- `SetNetworkProfile` (CSMS→CS) — Configure network connection profiles57- `Reset` (CSMS→CS) — Reboot station5859### Authorization60- `Authorize` (CS→CSMS) — Validate ID token61- `ClearCache` (CSMS→CS) — Clear authorization cache62- `SendLocalList` (CSMS→CS) — Push local auth list63- `GetLocalListVersion` (CSMS→CS) — Query local auth list version6465### Transactions66- `TransactionEvent` (CS→CSMS) — Started/Updated/Ended events67- `RequestStartTransaction` (CSMS→CS) — Remote start68- `RequestStopTransaction` (CSMS→CS) — Remote stop69- `GetTransactionStatus` (CSMS→CS) — Query outstanding transaction messages70- `MeterValues` (CS→CSMS) — Send meter values outside transaction context7172### Remote Control73- `TriggerMessage` (CSMS→CS) — Request CS to send a specific message74- `UnlockConnector` (CSMS→CS) — Physically unlock connector75- `ChangeAvailability` (CSMS→CS) — Set EVSE operative/inoperative7677### Smart Charging78- `SetChargingProfile` (CSMS→CS) — Install charging profile79- `GetChargingProfiles` (CSMS→CS) — Query installed profiles80- `ClearChargingProfile` (CSMS→CS) — Remove profiles81- `ClearedChargingLimit` (CS→CSMS) — External limit cleared82- `NotifyChargingLimit` (CS→CSMS) — External limit notification83- `ReportChargingProfiles` (CS→CSMS) — Profile query response84- `GetCompositeSchedule` (CSMS→CS) — Calculate effective schedule85- `NotifyEVChargingSchedule` (CS→CSMS) — EV-proposed schedule (ISO 15118)86- `NotifyEVChargingNeeds` (CS→CSMS) — Report EV charging needs (ISO 15118)8788### Firmware89- `UpdateFirmware` (CSMS→CS) — Trigger firmware update90- `FirmwareStatusNotification` (CS→CSMS) — Update progress91- `PublishFirmware` (CSMS→CS) — Make firmware available to local network92- `PublishFirmwareStatusNotification` (CS→CSMS) — Publish progress93- `UnpublishFirmware` (CSMS→CS) — Remove published firmware9495### Security & Certificates96- `Get15118EVCertificate` (CS→CSMS) — EV certificate request97- `GetCertificateStatus` (CS→CSMS) — OCSP status check98- `SignCertificate` (CS→CSMS) — CSR for station certificate99- `CertificateSigned` (CSMS→CS) — Signed certificate delivery100- `InstallCertificate` (CSMS→CS) — Install CA certificate101- `DeleteCertificate` (CSMS→CS) — Remove certificate102- `GetInstalledCertificateIds` (CSMS→CS) — List installed certs103- `SecurityEventNotification` (CS→CSMS) — Report security-related event104105### Diagnostics & Monitoring106- `GetLog` (CSMS→CS) — Request log upload107- `LogStatusNotification` (CS→CSMS) — Log upload progress108- `NotifyEvent` (CS→CSMS) — Component/variable events109- `SetMonitoringBase` (CSMS→CS) — Set monitoring baseline110- `SetVariableMonitoring` (CSMS→CS) — Configure variable monitors111- `SetMonitoringLevel` (CSMS→CS) — Set monitoring severity level112- `GetMonitoringReport` (CSMS→CS) — Query active monitors113- `ClearVariableMonitoring` (CSMS→CS) — Remove monitors114- `NotifyMonitoringReport` (CS→CSMS) — Monitor query response115- `CustomerInformation` (CSMS→CS) — Request customer data116- `NotifyCustomerInformation` (CS→CSMS) — Customer data response117118### Display Messages119- `CostUpdated` (CSMS→CS) — Update displayed cost120- `SetDisplayMessage` (CSMS→CS) — Show message on display121- `GetDisplayMessages` (CSMS→CS) — Query displayed messages122- `ClearDisplayMessage` (CSMS→CS) — Remove displayed message123- `NotifyDisplayMessages` (CS→CSMS) — Display message query response124125### Reservation126- `ReserveNow` (CSMS→CS) — Create reservation127- `CancelReservation` (CSMS→CS) — Cancel reservation128- `ReservationStatusUpdate` (CS→CSMS) — Reservation expired/removed129130### Data Transfer131- `DataTransfer` (CS↔CSMS) — Bidirectional vendor extension132133## OCPP 2.1 — 27 New Messages (added to 2.0.1's 64)134135OCPP 2.1 retains all 64 OCPP 2.0.1 messages and adds the following 27.136Headings match the functional block each message's schema lives under (see the137schema file map below).138139### DER Control (Distributed Energy Resources)140- `SetDERControl` (CSMS→CS) — Install DER control setpoint (frequency response, power limits, reactive power)141- `GetDERControl` (CSMS→CS) — Query installed DER control settings142- `ClearDERControl` (CSMS→CS) — Remove DER control settings143- `ReportDERControl` (CS→CSMS) — DER control query response144- `NotifyDERAlarm` (CS→CSMS) — Report DER-related alarm condition145- `NotifyDERStartStop` (CS→CSMS) — Notify DER function start/stop146147### Bidirectional / V2X148- `NotifyAllowedEnergyTransfer` (CSMS→CS) — Inform CS which energy transfer directions are allowed149- `AFRRSignal` (CSMS→CS) — Automatic Frequency Restoration Reserve signal (frequency support for V2X)150151### Battery Swap152- `BatterySwap` (CS→CSMS) — Notify battery swap event at station153- `RequestBatterySwap` (CSMS→CS) — Request battery swap operation154155### Tariff & Cost156- `GetTariffs` (CSMS→CS) — Query tariffs installed on station157- `SetDefaultTariff` (CSMS→CS) — Set the default tariff for an EVSE158- `ChangeTransactionTariff` (CSMS→CS) — Change tariff mid-transaction159- `ClearTariffs` (CSMS→CS) — Remove tariffs from station160- `NotifySettlement` (CS→CSMS) — Notify settlement result for a payment161- `NotifyWebPaymentStarted` (CS→CSMS) — Notify web-based payment initiation162- `VatNumberValidation` (CS→CSMS) — Request VAT number validation163164### Dynamic Smart Charging165- `PullDynamicScheduleUpdate` (CS→CSMS) — Request updated schedule for dynamic profile166- `UpdateDynamicSchedule` (CSMS→CS) — Push schedule update for dynamic profile167- `NotifyPriorityCharging` (CS→CSMS) — Notify that priority charging has started/stopped168- `UsePriorityCharging` (CSMS→CS) — Request CS to use priority charging169170### Periodic Event Stream171- `OpenPeriodicEventStream` (CSMS→CS) — Open a stream for periodic event reporting172- `ClosePeriodicEventStream` (CSMS→CS) — Close a periodic event stream173- `GetPeriodicEventStream` (CSMS→CS) — Query open periodic event streams174- `AdjustPeriodicEventStream` (CSMS→CS) — Modify parameters of an open stream175- `NotifyPeriodicEventStream` (CS→CSMS, one-way SEND) — Push periodic event data to CSMS176177### Certificates178- `GetCertificateChainStatus` (CS→CSMS) — Query certificate chain OCSP status179180## All 28 OCPP 1.6J Messages181182### Core (required profile)183- `Authorize` (CP→CS) — Validate idTag184- `BootNotification` (CP→CS) — Charge Point registers after (re)boot185- `ChangeAvailability` (CS→CP) — Set connector operative/inoperative186- `ChangeConfiguration` (CS→CP) — Set a configuration key187- `ClearCache` (CS→CP) — Clear authorization cache188- `DataTransfer` (CP↔CS) — Vendor-specific data exchange189- `GetConfiguration` (CS→CP) — Read configuration keys190- `Heartbeat` (CP→CS) — Keepalive191- `MeterValues` (CP→CS) — Periodic meter readings192- `RemoteStartTransaction` (CS→CP) — Remote start193- `RemoteStopTransaction` (CS→CP) — Remote stop194- `Reset` (CS→CP) — Reboot Charge Point195- `StartTransaction` (CP→CS) — Transaction started196- `StatusNotification` (CP→CS) — Connector status/error change197- `StopTransaction` (CP→CS) — Transaction ended198- `UnlockConnector` (CS→CP) — Physically unlock connector199200### Smart Charging201- `SetChargingProfile` (CS→CP) — Install charging profile202- `ClearChargingProfile` (CS→CP) — Remove profiles203- `GetCompositeSchedule` (CS→CP) — Get effective schedule204205### Firmware Management206- `GetDiagnostics` (CS→CP) — Request diagnostic log upload207- `DiagnosticsStatusNotification` (CP→CS) — Upload progress208- `UpdateFirmware` (CS→CP) — Trigger firmware update209- `FirmwareStatusNotification` (CP→CS) — Update progress210211### Local Auth List Management212- `SendLocalList` (CS→CP) — Push local authorization list213- `GetLocalListVersion` (CS→CP) — Query list version214215### Reservation216- `ReserveNow` (CS→CP) — Reserve a connector217- `CancelReservation` (CS→CP) — Cancel reservation218219### Remote Trigger220- `TriggerMessage` (CS→CP) — Request CP to send a specific message221222## Key Data Types (OCPP 2.0.1)223224- **IdTokenType** — User identification (eMAID, RFID, etc.) with optional groupIdToken225- **ChargingProfileType** — Charging limits: id, stackLevel, purpose, kind, chargingSchedule226- **MeterValueType** — Timestamped array of SampledValue (energy, power, current, voltage, SoC)227- **EVSEType** — EVSE identifier (id + optional connectorId)228- **StatusInfoType** — Reason code + additional info for status responses229- **TransactionType** — Transaction state: transactionId, chargingState, stoppedReason230- **ChargingScheduleType** — Time-based power/current limits with periods231- **IdTokenInfoType** — Authorization result: status, cacheExpiryDateTime, groupIdToken232233## Escalation Model234235When implementing OCPP behavior, you will encounter areas where the specification does not fully define what to do. These are categorized as:236237### SPEC-SILENT238The OCPP specification does not define behavior for this case. You MUST flag this to the developer. Do NOT silently pick a default.239240### VENDOR-DEPENDENT241Behavior depends on the Charging Station hardware or firmware. Ask which hardware/firmware is targeted.242243### POLICY-DEPENDENT244Behavior depends on business rules, site configuration, or grid operator requirements. Ask about the business/operational context.245246### Escalation Strictness247248Check the developer's project `CLAUDE.md` for escalation preferences. They may write something like:249250> For OCPP: use pragmatic escalation mode.251252or:253254> OCPP escalation: strict — always ask before assuming spec-silent behavior.255256Two modes:257258- **strict (default):** Stop and ask the developer before proceeding. Present specific options. Do not write code for the ambiguous area until answered.259- **pragmatic:** Flag the ambiguity but pick a reasonable default. Leave a visible annotation:260 ```261 // OCPP SPEC-SILENT: [description of assumption]. Verify this matches your requirements.262 ```263264If no escalation preference is found in `CLAUDE.md`, default to **strict**.265266## Documentation File Map267268When you need detailed field-level schemas, sequence diagrams, or worked examples, read the relevant file from the plugin's `docs/` directory. Use `${CLAUDE_PLUGIN_ROOT}` to resolve the path.269270| Topic | File to read |271|-------|-------------|272| **All shared data types (enums + composites)** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-DataTypes.md` |273| **Device model (components + variables catalog)** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-DeviceModel/OCPP-2.0.1-DeviceModel.md` |274| **Open enumerations (units, security events, reason codes)** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Enumerations/OCPP-2.0.1-Enumerations.md` |275| **Authorization schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Authorization.md` |276| **Availability schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Availability.md` |277| **Diagnostics schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Diagnostics.md` |278| **Display schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Display.md` |279| **Firmware schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Firmware.md` |280| **Provisioning schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Provisioning.md` |281| **Reservation schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Reservation.md` |282| **Security schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Security.md` |283| **Smart Charging schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-SmartCharging.md` |284| **Transaction schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Transactions.md` |285| **Boot, auth, transaction sequences** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences.md` |286| **Offline, firmware, diagnostics sequences** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences-Operational.md` |287| **Smart Charging deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging.md` |288| **Smart Charging worked examples** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-Examples.md` |289| **ISO 15118 + Smart Charging** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-ISO15118.md` |290| **OCPP 2.0.1 overview + migration guide** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1.md` |291| **Documentation methodology + trust model** | `${CLAUDE_PLUGIN_ROOT}/docs/METHODOLOGY.md` |292| | |293| **OCPP 2.1 overview + migration from 2.0.1** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1.md` |294| **OCPP 2.1 data types** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DataTypes.md` |295| **OCPP 2.1 enumerations** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Enumerations/OCPP-2.1-Enumerations.md` |296| **OCPP 2.1 device model** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DeviceModel/OCPP-2.1-DeviceModel.md` |297| **OCPP 2.1 DER control deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-DERControl/OCPP-2.1-DERControl.md` |298| **OCPP 2.1 bidirectional / V2X deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Bidirectional/OCPP-2.1-Bidirectional.md` |299| **OCPP 2.1 tariff & cost deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-TariffCost/OCPP-2.1-TariffCost.md` |300| **OCPP 2.1 smart charging deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-SmartCharging/OCPP-2.1-SmartCharging.md` |301| **OCPP 2.1 message sequences** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Sequences/OCPP-2.1-Sequences.md` |302| **OCPP 2.1 use cases** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-UseCases/OCPP-2.1-UseCases.md` |303| **OCPP 2.1 certification** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Certification/OCPP-2.1-Certification.md` |304| **OCPP 2.1 Authorization schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Authorization.md` |305| **OCPP 2.1 Availability schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Availability.md` |306| **OCPP 2.1 BatterySwap schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-BatterySwap.md` |307| **OCPP 2.1 Bidirectional schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Bidirectional.md` |308| **OCPP 2.1 Certificates schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Certificates.md` |309| **OCPP 2.1 DERControl schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-DERControl.md` |310| **OCPP 2.1 DataTransfer schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-DataTransfer.md` |311| **OCPP 2.1 Diagnostics schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Diagnostics.md` |312| **OCPP 2.1 Display schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Display.md` |313| **OCPP 2.1 Firmware schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Firmware.md` |314| **OCPP 2.1 LocalAuthList schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-LocalAuthList.md` |315| **OCPP 2.1 MeterValues schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-MeterValues.md` |316| **OCPP 2.1 Provisioning schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Provisioning.md` |317| **OCPP 2.1 RemoteControl schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-RemoteControl.md` |318| **OCPP 2.1 Reservation schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Reservation.md` |319| **OCPP 2.1 Security schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Security.md` |320| **OCPP 2.1 SmartCharging schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-SmartCharging.md` |321| **OCPP 2.1 TariffAndCost schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-TariffAndCost.md` |322| **OCPP 2.1 Transactions schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.1-Schemas/OCPP-2.1-Schemas-Transactions.md` |323| | |324| **OCPP 1.6J overview + config keys** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J.md` |325| **1.6J Core schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Core.md` |326| **1.6J Smart Charging schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-SmartCharging.md` |327| **1.6J Firmware schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Firmware.md` |328| **1.6J Local Auth List schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-LocalAuthList.md` |329| **1.6J Reservation schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-Reservation.md` |330| **1.6J Remote Trigger schemas** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Schemas/OCPP-1.6J-Schemas-RemoteTrigger.md` |331| **1.6J Message sequences** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-Sequences/OCPP-1.6J-Sequences.md` |332| **1.6J Smart Charging deep-dive** | `${CLAUDE_PLUGIN_ROOT}/docs/OCPP-1.6J-SmartCharging/OCPP-1.6J-SmartCharging.md` |333334### How to use the file map3353361. Identify the topic from the developer's question3372. Read the relevant file(s) using the Read tool3383. Cite specific fields, constraints, and enum values from the docs3394. Flag any ESCALATE markers you encounter in the docs340341### Topic argument routing342343If invoked with `/ocpp <topic>`, immediately read the relevant files:344345**OCPP 2.1 topics:**346- `/ocpp 2.1` or `/ocpp 2.1 overview` → read `OCPP-2.1.md` overview347- `/ocpp 2.1 migration` → read `OCPP-2.1.md` (contains migration guide from 2.0.1)348- `/ocpp 2.1 der` or `/ocpp 2.1 der-control` → read `OCPP-2.1-DERControl/OCPP-2.1-DERControl.md` + `OCPP-2.1-Schemas/OCPP-2.1-Schemas-DERControl.md`349- `/ocpp 2.1 v2x` or `/ocpp 2.1 bidirectional` → read `OCPP-2.1-Bidirectional/OCPP-2.1-Bidirectional.md` + `OCPP-2.1-Schemas/OCPP-2.1-Schemas-Bidirectional.md`350- `/ocpp 2.1 tariff` or `/ocpp 2.1 cost` → read `OCPP-2.1-TariffCost/OCPP-2.1-TariffCost.md` + `OCPP-2.1-Schemas/OCPP-2.1-Schemas-TariffAndCost.md`351- `/ocpp 2.1 device-model` → read `OCPP-2.1-DeviceModel/OCPP-2.1-DeviceModel.md`352- `/ocpp 2.1 enums` or `/ocpp 2.1 enumerations` → read `OCPP-2.1-Enumerations/OCPP-2.1-Enumerations.md`353- `/ocpp 2.1 use-cases` → read `OCPP-2.1-UseCases/OCPP-2.1-UseCases.md`354- `/ocpp 2.1 certification` → read `OCPP-2.1-Certification/OCPP-2.1-Certification.md`355- `/ocpp 2.1 schemas` → read all 19 files in `OCPP-2.1-Schemas/`356- `/ocpp 2.1 smart-charging` → read `OCPP-2.1-SmartCharging/OCPP-2.1-SmartCharging.md` + `OCPP-2.1-Schemas/OCPP-2.1-Schemas-SmartCharging.md`357- `/ocpp 2.1 sequences` → read `OCPP-2.1-Sequences/OCPP-2.1-Sequences.md`358- `/ocpp 2.1 types` or `/ocpp 2.1 data-types` → read `OCPP-2.1-DataTypes.md`359360**OCPP 1.6J topics:**361- `/ocpp 1.6` or `/ocpp 1.6j` → read OCPP-1.6J.md overview362- `/ocpp 1.6 smart-charging` → read 1.6J SmartCharging schemas + deep-dive363- `/ocpp 1.6 schemas` → read all 1.6J Schema files364- `/ocpp 1.6 sequences` → read 1.6J Sequences file365- `/ocpp 1.6 core` → read 1.6J Core schemas366- `/ocpp 1.6 firmware` → read 1.6J Firmware schemas367- `/ocpp 1.6 auth-list` → read 1.6J LocalAuthList schemas368- `/ocpp 1.6 reservation` → read 1.6J Reservation schemas369370**OCPP 2.0.1 topics (default):**371- `/ocpp smart-charging` → read all 3 SmartCharging files372- `/ocpp authorize` or `/ocpp authorization` → read Authorization schemas373- `/ocpp transactions` → read Transaction schemas + Sequences374- `/ocpp provisioning` or `/ocpp boot` → read Provisioning schemas + Sequences375- `/ocpp schemas` → read all Schema files376- `/ocpp sequences` → read both Sequence files377- `/ocpp types` or `/ocpp data-types` → read DataTypes378- `/ocpp device-model` → read `OCPP-2.0.1-DeviceModel/OCPP-2.0.1-DeviceModel.md`379- `/ocpp enums` or `/ocpp enumerations` → read `OCPP-2.0.1-Enumerations/OCPP-2.0.1-Enumerations.md`380- `/ocpp firmware` → read Firmware schemas + Operational sequences381- `/ocpp diagnostics` → read Diagnostics schemas + Operational sequences382- `/ocpp reservation` → read Reservation schemas383- `/ocpp display` → read Display schemas384- `/ocpp security` or `/ocpp certificates` → read Security schemas385- `/ocpp availability` → read Availability schemas386- Any other topic → search across all docs using grep387388## Behavioral Guidelines3893901. **Always cite the source.** When referencing a field, type, or constraint, mention which doc it comes from. Distinguish schema-derived facts (high confidence) from AI interpretation (lower confidence).3913922. **Respect the escalation model.** When you encounter an `> **ESCALATE:**` marker in the docs, follow the escalation strictness rules above.3933943. **Detect version from context.** Use the version detection rules above. If the code uses `StartTransaction`/`StopTransaction`, it's 1.6J — read 1.6J docs. If it uses `SetDERControl`, `GetTariffs`, `BatterySwap`, `OpenPeriodicEventStream`, the subprotocol `ocpp2.1`, or schema URNs containing `:2:2025:`, it's 2.1 — read 2.1 docs. If it uses `TransactionEvent` without 2.1 indicators, it's 2.0.1. If no version indicators are present, assume 2.0.1 and mention the assumption.3953964. **Don't invent protocol behavior.** If you're unsure whether something is spec-defined, check the docs first. If the docs don't cover it, say so explicitly rather than guessing.3973985. **Use the schemas for validation.** When the developer writes OCPP message payloads, validate field names, types, required/optional status, and constraints against the schema docs.