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

# Servers and tools

Connect a domain server at `https://api.ocpplab.io/mcp/<domain>`, or every domain at once at `https://api.ocpplab.io/mcp` (288 tools). Each tool runs the REST operation in the last column, with your permissions.

**Kind:** *read* tools only read data. *destructive* tools delete data or interrupt a charger, so your client should ask before it runs them. *write* is everything else.

| Server              | URL              | Tools |
| ------------------- | ---------------- | ----- |
| `ocpplab-evcharger` | `/mcp/evcharger` | 30    |
| `ocpplab-ocpi`      | `/mcp/ocpi`      | 44    |
| `ocpplab-proxy`     | `/mcp/proxy`     | 20    |
| `ocpplab-cpo`       | `/mcp/cpo`       | 96    |
| `ocpplab-emsp`      | `/mcp/emsp`      | 68    |
| `ocpplab-booking`   | `/mcp/booking`   | 15    |
| `ocpplab-energy`    | `/mcp/energy`    | 5     |
| `ocpplab-webhook`   | `/mcp/webhook`   | 10    |

## ocpplab-evcharger

`https://api.ocpplab.io/mcp/evcharger`

| Tool                                  | Kind        | Does                                                                | REST                                                 |
| ------------------------------------- | ----------- | ------------------------------------------------------------------- | ---------------------------------------------------- |
| `evcharger_authorize_id_tag`          | write       | Authorize an id tag                                                 | `POST /evcharger/commands/authorize-id-tag`          |
| `evcharger_change_configuration`      | write       | Change charger configuration                                        | `POST /evcharger/commands/configuration`             |
| `evcharger_clear_fault`               | write       | Clear a charger fault                                               | `POST /evcharger/commands/clear-fault`               |
| `evcharger_clear_local_list`          | destructive | Clear charger local authorization list                              | `POST /evcharger/commands/clear-local-auth-list`     |
| `evcharger_create_deployment`         | write       | Create charger deployment                                           | `POST /evcharger/deployment`                         |
| `evcharger_create_location`           | write       | Create location, optionally with chargers                           | `POST /evcharger/location`                           |
| `evcharger_delete_deployment`         | destructive | Delete one charger deployment                                       | `DELETE /evcharger/deployment`                       |
| `evcharger_delete_location`           | destructive | Delete a deployment location and its chargers                       | `DELETE /evcharger/location`                         |
| `evcharger_deployment_stage_events`   | read        | Recent deployment stage changes for the organization                | `GET /evcharger/deployment-runtime-ops/events`       |
| `evcharger_deployment_stage_status`   | read        | Current deployment stage of lab chargers                            | `GET /evcharger/deployment-runtime-ops/status`       |
| `evcharger_ev_requests_energy`        | write       | Signal that the EV requests energy                                  | `POST /evcharger/commands/ev-requests-energy`        |
| `evcharger_ev_stops_energy`           | write       | Signal that the EV stops requesting energy                          | `POST /evcharger/commands/ev-stops-energy`           |
| `evcharger_get_catalog_brand_model`   | read        | Get catalog brand model                                             | `GET /evcharger/catalog/{brand_slug}/models/{model}` |
| `evcharger_get_command_status`        | read        | Get the status of a queued command                                  | `GET /evcharger/commands/{command_id}`               |
| `evcharger_inject_fault`              | write       | Inject a charger fault                                              | `POST /evcharger/commands/inject-fault`              |
| `evcharger_list_catalog_brand_models` | read        | List catalog brand models                                           | `GET /evcharger/catalog/{brand_slug}/models`         |
| `evcharger_list_catalog_brands`       | read        | List catalog brands                                                 | `GET /evcharger/catalog`                             |
| `evcharger_list_command_results`      | read        | List recent command results for a charger                           | `GET /evcharger/commands`                            |
| `evcharger_list_location_templates`   | read        | List OCPP + OCPI location templates                                 | `GET /evcharger/templates/locations`                 |
| `evcharger_list_logs`                 | read        | List charger OCPP logs                                              | `GET /evcharger/logs`                                |
| `evcharger_operate_runtime`           | destructive | Stop, restart, or delete deployed charger runtimes                  | `POST /evcharger/deployment-runtime-ops`             |
| `evcharger_plug_connector`            | write       | Plug a connector                                                    | `POST /evcharger/commands/plug-connector`            |
| `evcharger_power_update`              | write       | Update delivered power                                              | `POST /evcharger/commands/power-update`              |
| `evcharger_proxy_message`             | destructive | Send a raw OCPP proxy message                                       | `POST /evcharger/commands/proxy-message`             |
| `evcharger_reset_cache`               | destructive | Reset charger authorization cache                                   | `POST /evcharger/commands/cache/reset`               |
| `evcharger_runtime_diagnostics`       | read        | Why a deployed charger is not running: pods, events and system logs | `GET /evcharger/deployment-runtime-ops/diagnostics`  |
| `evcharger_send_local_list`           | write       | Send a local authorization list                                     | `POST /evcharger/commands/local-auth-list`           |
| `evcharger_start_session`             | write       | Start a charging session                                            | `POST /evcharger/commands/start-session`             |
| `evcharger_stop_session`              | destructive | Stop a charging session                                             | `POST /evcharger/commands/stop-session`              |
| `evcharger_unplug_connector`          | write       | Unplug a connector                                                  | `POST /evcharger/commands/unplug-connector`          |

## ocpplab-ocpi

`https://api.ocpplab.io/mcp/ocpi`

| Tool                                | Kind        | Does                                                                       | REST                                                                                           |
| ----------------------------------- | ----------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `ocpi_cancel_reservation`           | destructive | Cancel a reservation and notify the eMSP (2.2.1 / 2.3.0)                   | `POST /ocpi/cpo/{version}/reservations/{ocpp_reservation_id}/cancel`                           |
| `ocpi_clear_charging_profile`       | destructive | Clear the charging profile of a partner session (2.2.1 / 2.3.0)            | `DELETE /ocpi/emsp/{version}/sessions/{session_id}/charging-profile`                           |
| `ocpi_create_cdr`                   | write       | Create a CDR                                                               | `POST /ocpi/cpo/{version}/cdrs`                                                                |
| `ocpi_create_partner_invite`        | write       | Invite a roaming partner (admin)                                           | `POST /ocpi/partners/invites`                                                                  |
| `ocpi_delete_tariff`                | destructive | Delete a tariff                                                            | `DELETE /ocpi/cpo/{version}/tariffs/{tariff_id}`                                               |
| `ocpi_get_active_charging_profile`  | read        | Request the active charging profile of a partner session (2.2.1 / 2.3.0)   | `GET /ocpi/emsp/{version}/sessions/{session_id}/charging-profile`                              |
| `ocpi_get_credentials_status`       | read        | Read the stored handshake with a partner (admin)                           | `GET /ocpi/credentials/{version}/{role}`                                                       |
| `ocpi_get_partner`                  | read        | Get a roaming partner                                                      | `GET /ocpi/partners/{partner_id}`                                                              |
| `ocpi_list_location_templates`      | read        | List OCPI + OCPP location templates                                        | `GET /ocpi/templates/locations`                                                                |
| `ocpi_list_partners`                | read        | List roaming partners                                                      | `GET /ocpi/partners`                                                                           |
| `ocpi_pull_cdrs`                    | write       | Pull CDRs from a partner CPO                                               | `POST /ocpi/sync/{version}/emsp/cdrs/pull`                                                     |
| `ocpi_pull_hub_client_info_as_cpo`  | write       | Pull a Hub's ClientInfo list into our CPO side (2.2.1 / 2.3.0)             | `POST /ocpi/sync/{version}/cpo/hubclientinfo/pull`                                             |
| `ocpi_pull_hub_client_info_as_emsp` | write       | Pull a Hub's ClientInfo list into our eMSP side (2.2.1 / 2.3.0)            | `POST /ocpi/sync/{version}/emsp/hubclientinfo/pull`                                            |
| `ocpi_pull_locations`               | write       | Pull locations from a partner CPO                                          | `POST /ocpi/sync/{version}/emsp/locations/pull`                                                |
| `ocpi_pull_partner_versions`        | write       | Discover a partner's OCPI versions and endpoints (admin)                   | `POST /ocpi/credentials/{version}/{role}/versions/pull`                                        |
| `ocpi_pull_sessions`                | write       | Pull sessions from a partner CPO                                           | `POST /ocpi/sync/{version}/emsp/sessions/pull`                                                 |
| `ocpi_pull_tariffs`                 | write       | Pull tariffs from a partner CPO                                            | `POST /ocpi/sync/{version}/emsp/tariffs/pull`                                                  |
| `ocpi_pull_tokens`                  | write       | Pull tokens from a partner eMSP                                            | `POST /ocpi/sync/{version}/cpo/tokens/pull`                                                    |
| `ocpi_push_cdr`                     | write       | Push a stored CDR to a partner eMSP                                        | `POST /ocpi/sync/{version}/cpo/cdrs/{cdr_id}/push`                                             |
| `ocpi_push_location`                | write       | Push a stored location to a partner eMSP                                   | `POST /ocpi/sync/{version}/cpo/locations/{location_id}/push`                                   |
| `ocpi_push_session`                 | write       | Push a stored session to a partner eMSP (full, or a PATCH with patch_body) | `POST /ocpi/sync/{version}/cpo/sessions/{session_id}/push`                                     |
| `ocpi_push_tariff`                  | write       | Push a stored tariff to a partner eMSP                                     | `POST /ocpi/sync/{version}/cpo/tariffs/{tariff_id}/push`                                       |
| `ocpi_push_token`                   | write       | Push a stored token to a partner CPO (full, or a PATCH with patch_body)    | `POST /ocpi/sync/{version}/emsp/tokens/{token_uid}/push`                                       |
| `ocpi_register_partner`             | write       | Register a roaming partner                                                 | `POST /ocpi/partners`                                                                          |
| `ocpi_remove_partner`               | destructive | Remove a roaming partner (admin)                                           | `DELETE /ocpi/partners/{partner_id}`                                                           |
| `ocpi_revoke_partner_invite`        | destructive | Revoke an invite (admin)                                                   | `DELETE /ocpi/partners/invites/{invite_id}`                                                    |
| `ocpi_rotate_credentials`           | destructive | Rotate credentials with a partner (admin)                                  | `PUT /ocpi/credentials/{version}/{role}`                                                       |
| `ocpi_rotate_partner_invite`        | write       | Rotate an invite's Token A (admin)                                         | `PUT /ocpi/partners/invites/{invite_id}`                                                       |
| `ocpi_send_active_charging_profile` | write       | Send a session's ActiveChargingProfile to its eMSP (2.2.1 / 2.3.0)         | `PUT /ocpi/cpo/{version}/sessions/{session_id}/charging-profile`                               |
| `ocpi_send_command`                 | destructive | Send a command to a partner CPO                                            | `POST /ocpi/emsp/{version}/commands/{command}`                                                 |
| `ocpi_set_charging_preferences`     | write       | Set charging preferences on a partner session (2.2.1 / 2.3.0)              | `PUT /ocpi/emsp/{version}/sessions/{session_id}/charging-preferences`                          |
| `ocpi_set_charging_profile`         | write       | Set a charging profile on a partner session (2.2.1 / 2.3.0)                | `PUT /ocpi/emsp/{version}/sessions/{session_id}/charging-profile`                              |
| `ocpi_start_credentials_handshake`  | write       | Register with a partner (credentials handshake, admin)                     | `POST /ocpi/credentials/{version}/{role}`                                                      |
| `ocpi_unregister_credentials`       | destructive | Unregister from a partner (admin)                                          | `DELETE /ocpi/credentials/{version}/{role}`                                                    |
| `ocpi_update_connector`             | write       | Update a connector                                                         | `PATCH /ocpi/cpo/{version}/locations/{location_id}/evses/{evse_uid}/connectors/{connector_id}` |
| `ocpi_update_evse_status`           | write       | Update an EVSE (usually its status)                                        | `PATCH /ocpi/cpo/{version}/locations/{location_id}/evses/{evse_uid}`                           |
| `ocpi_update_location`              | write       | Update part of a location                                                  | `PATCH /ocpi/cpo/{version}/locations/{location_id}`                                            |
| `ocpi_update_partner`               | write       | Update a roaming partner                                                   | `PATCH /ocpi/partners/{partner_id}`                                                            |
| `ocpi_update_session`               | write       | Update part of a charging session                                          | `PATCH /ocpi/cpo/{version}/sessions/{session_id}`                                              |
| `ocpi_update_token`                 | write       | Update part of a token (e.g. block it)                                     | `PATCH /ocpi/emsp/{version}/tokens/{token_uid}`                                                |
| `ocpi_upsert_location`              | write       | Create or replace a location                                               | `POST /ocpi/cpo/{version}/locations`                                                           |
| `ocpi_upsert_session`               | write       | Create or replace a charging session                                       | `POST /ocpi/cpo/{version}/sessions`                                                            |
| `ocpi_upsert_tariff`                | write       | Create or replace a tariff                                                 | `POST /ocpi/cpo/{version}/tariffs`                                                             |
| `ocpi_upsert_token`                 | write       | Create or replace a token                                                  | `POST /ocpi/emsp/{version}/tokens`                                                             |

## ocpplab-proxy

`https://api.ocpplab.io/mcp/proxy`

| Tool                             | Kind        | Does                                              | REST                                             |
| -------------------------------- | ----------- | ------------------------------------------------- | ------------------------------------------------ |
| `proxy_activate_token`           | write       | Activate an Unused card                           | `POST /proxy/tokens/{token_id}/activate`         |
| `proxy_block_token`              | write       | Block an authorization token (reason required)    | `POST /proxy/tokens/{token_id}/block`            |
| `proxy_create_charger_point`     | write       | Register a charger point                          | `POST /proxy/charger-points`                     |
| `proxy_create_token`             | write       | Register an authorization token                   | `POST /proxy/tokens`                             |
| `proxy_delete_charger_point`     | destructive | Delete a charger point                            | `DELETE /proxy/charger-points/{charge_point_id}` |
| `proxy_delete_token`             | destructive | Delete an authorization token                     | `DELETE /proxy/tokens/{token_id}`                |
| `proxy_get_charger_point`        | read        | Get a charger point                               | `GET /proxy/charger-points/{charge_point_id}`    |
| `proxy_get_ocpi_command_result`  | read        | Read the OCPI CommandResult of an OCPI command    | `GET /proxy/ocpi/commands/{tracking_id}`         |
| `proxy_get_ocpp_command_status`  | read        | Read the status of an OCPP command                | `GET /proxy/ocpp/commands/{tracking_id}`         |
| `proxy_get_token`                | read        | Get an authorization token                        | `GET /proxy/tokens/{token_id}`                   |
| `proxy_get_token_by_card_number` | read        | Get an authorization token by printed card number | `GET /proxy/tokens/by-card-number/{card_number}` |
| `proxy_get_token_by_id_tag`      | read        | Get an authorization token by idTag               | `GET /proxy/tokens/by-id-tag/{id_token}`         |
| `proxy_list_charger_points`      | read        | List charger points                               | `GET /proxy/charger-points`                      |
| `proxy_list_tokens`              | read        | List authorization tokens                         | `GET /proxy/tokens`                              |
| `proxy_reprovision_token`        | write       | Reprovision a card with a new chip                | `POST /proxy/tokens/{token_id}/reprovision`      |
| `proxy_send_ocpi_command`        | destructive | Send an OCPI command to a charger                 | `POST /proxy/ocpi/commands/{command}`            |
| `proxy_send_ocpp_command`        | destructive | Send an OCPP command to a charger                 | `POST /proxy/ocpp/commands/{command}`            |
| `proxy_unblock_token`            | write       | Unblock an authorization token                    | `POST /proxy/tokens/{token_id}/unblock`          |
| `proxy_update_charger_point`     | write       | Update a charger point                            | `PATCH /proxy/charger-points/{charge_point_id}`  |
| `proxy_update_token`             | write       | Update an authorization token                     | `PATCH /proxy/tokens/{token_id}`                 |

## ocpplab-cpo

`https://api.ocpplab.io/mcp/cpo`

| Tool                                 | Kind        | Does                                   | REST                                                         |
| ------------------------------------ | ----------- | -------------------------------------- | ------------------------------------------------------------ |
| `cpo_afir_statuses`                  | read        | Get AFIR EVSE statuses                 | `GET /cpo/afir/energy-infrastructure-statuses`               |
| `cpo_afir_tables`                    | read        | Get AFIR static data                   | `GET /cpo/afir/energy-infrastructure-tables`                 |
| `cpo_app_users_create`               | write       | Create an app user                     | `POST /cpo/app-users`                                        |
| `cpo_app_users_get`                  | read        | Get an app user                        | `GET /cpo/app-users/{user_id}`                               |
| `cpo_app_users_list`                 | read        | List app users                         | `GET /cpo/app-users`                                         |
| `cpo_app_users_replace`              | write       | Replace an app user                    | `PUT /cpo/app-users/{user_id}`                               |
| `cpo_audit_logs_list`                | read        | List audit log entries                 | `GET /cpo/audit-logs`                                        |
| `cpo_catalog_list_models`            | read        | List charger models                    | `GET /cpo/charge-point-models`                               |
| `cpo_catalog_tariff_public_key`      | read        | Get the tariff-signing public key      | `GET /cpo/tariff-publisher/public-key`                       |
| `cpo_cdrs_get`                       | read        | Get a CDR                              | `GET /cpo/cdrs/{cdr_id}`                                     |
| `cpo_cdrs_list`                      | read        | List CDRs                              | `GET /cpo/cdrs`                                              |
| `cpo_cdrs_push`                      | write       | Push a CDR to a partner                | `POST /cpo/cdrs/{cdr_id}/push`                               |
| `cpo_charge_points_create`           | write       | Create a charge point                  | `POST /cpo/charge-points`                                    |
| `cpo_charge_points_delete`           | destructive | Delete a charge point                  | `DELETE /cpo/charge-points/{charge_point_id}`                |
| `cpo_charge_points_get`              | read        | Get a charge point                     | `GET /cpo/charge-points/{charge_point_id}`                   |
| `cpo_charge_points_list`             | read        | List charge points                     | `GET /cpo/charge-points`                                     |
| `cpo_charge_points_list_cdrs`        | read        | List a charge point's CDRs             | `GET /cpo/charge-points/{charge_point_id}/cdrs`              |
| `cpo_charge_points_list_connectors`  | read        | List a charge point's connectors       | `GET /cpo/charge-points/{charge_point_id}/connectors`        |
| `cpo_charge_points_list_evses`       | read        | List a charge point's EVSEs            | `GET /cpo/charge-points/{charge_point_id}/evses`             |
| `cpo_charge_points_list_sessions`    | read        | List a charge point's sessions         | `GET /cpo/charge-points/{charge_point_id}/sessions`          |
| `cpo_charge_points_reboot`           | destructive | Reboot a charger                       | `POST /cpo/charge-points/{charge_point_id}/reboot`           |
| `cpo_charge_points_reset`            | destructive | Reset a charger                        | `POST /cpo/charge-points/{charge_point_id}/reset`            |
| `cpo_charge_points_update`           | write       | Update a charge point                  | `PATCH /cpo/charge-points/{charge_point_id}`                 |
| `cpo_connectors_change_availability` | write       | Change a connector's availability      | `POST /cpo/connectors/{connector_db_id}/change-availability` |
| `cpo_connectors_create`              | write       | Create a connector                     | `POST /cpo/connectors`                                       |
| `cpo_connectors_delete`              | destructive | Delete a connector                     | `DELETE /cpo/connectors/{connector_db_id}`                   |
| `cpo_connectors_get`                 | read        | Get a connector                        | `GET /cpo/connectors/{connector_db_id}`                      |
| `cpo_connectors_list`                | read        | List connectors                        | `GET /cpo/connectors`                                        |
| `cpo_connectors_remote_start`        | write       | Start charging remotely                | `POST /cpo/connectors/{connector_db_id}/remote-start`        |
| `cpo_connectors_remote_stop`         | destructive | Stop charging remotely                 | `POST /cpo/connectors/{connector_db_id}/remote-stop`         |
| `cpo_connectors_unlock`              | destructive | Unlock a connector                     | `POST /cpo/connectors/{connector_db_id}/unlock`              |
| `cpo_connectors_update`              | write       | Update a connector                     | `PATCH /cpo/connectors/{connector_db_id}`                    |
| `cpo_customers_create`               | write       | Create a customer                      | `POST /cpo/customers`                                        |
| `cpo_customers_delete`               | destructive | Delete a customer                      | `DELETE /cpo/customers/{customer_id}`                        |
| `cpo_customers_get`                  | read        | Get a customer                         | `GET /cpo/customers/{customer_id}`                           |
| `cpo_customers_list`                 | read        | List customers                         | `GET /cpo/customers`                                         |
| `cpo_customers_replace`              | write       | Replace a customer                     | `PUT /cpo/customers/{customer_id}`                           |
| `cpo_evses_create`                   | write       | Create an EVSE                         | `POST /cpo/evses`                                            |
| `cpo_evses_delete`                   | destructive | Delete an EVSE                         | `DELETE /cpo/evses/{id}`                                     |
| `cpo_evses_get`                      | read        | Get an EVSE                            | `GET /cpo/evses/{id}`                                        |
| `cpo_evses_list`                     | read        | List EVSEs                             | `GET /cpo/evses`                                             |
| `cpo_evses_update`                   | write       | Update an EVSE                         | `PATCH /cpo/evses/{id}`                                      |
| `cpo_locations_create`               | write       | Create a location                      | `POST /cpo/locations`                                        |
| `cpo_locations_delete`               | destructive | Delete a location                      | `DELETE /cpo/locations/{location_id}`                        |
| `cpo_locations_get`                  | read        | Get a location                         | `GET /cpo/locations/{location_id}`                           |
| `cpo_locations_list`                 | read        | List locations                         | `GET /cpo/locations`                                         |
| `cpo_locations_push`                 | write       | Push a location to a partner           | `POST /cpo/locations/{location_id}/push`                     |
| `cpo_locations_update`               | write       | Update a location                      | `PATCH /cpo/locations/{location_id}`                         |
| `cpo_sessions_get`                   | read        | Get a session                          | `GET /cpo/sessions/{session_id}`                             |
| `cpo_sessions_get_cdr`               | read        | Get a session's CDR                    | `GET /cpo/sessions/{session_id}/cdr`                         |
| `cpo_sessions_list`                  | read        | List sessions                          | `GET /cpo/sessions`                                          |
| `cpo_sessions_push`                  | write       | Push a session to a partner            | `POST /cpo/sessions/{session_id}/push`                       |
| `cpo_tariffs_assign`                 | write       | Assign a tariff to a connector         | `POST /cpo/tariffs/{tariff_id}/assign`                       |
| `cpo_tariffs_create`                 | write       | Create a tariff                        | `POST /cpo/tariffs`                                          |
| `cpo_tariffs_delete`                 | destructive | Delete a tariff                        | `DELETE /cpo/tariffs/{tariff_id}`                            |
| `cpo_tariffs_get`                    | read        | Get a tariff                           | `GET /cpo/tariffs/{tariff_id}`                               |
| `cpo_tariffs_list`                   | read        | List tariffs                           | `GET /cpo/tariffs`                                           |
| `cpo_tariffs_list_assignments`       | read        | List tariff assignments                | `GET /cpo/tariff-assignments`                                |
| `cpo_tariffs_push`                   | write       | Push a tariff to a partner             | `POST /cpo/tariffs/{tariff_id}/push`                         |
| `cpo_tariffs_unassign`               | write       | Unassign a tariff from a connector     | `POST /cpo/tariffs/{tariff_id}/unassign`                     |
| `cpo_tariffs_update`                 | write       | Update a tariff                        | `PATCH /cpo/tariffs/{tariff_id}`                             |
| `cpo_temporary_evse_statuses_create` | write       | Create a temporary EVSE status         | `POST /cpo/temporary-evse-statuses`                          |
| `cpo_temporary_evse_statuses_delete` | destructive | Delete a temporary EVSE status         | `DELETE /cpo/temporary-evse-statuses/{status_id}`            |
| `cpo_temporary_evse_statuses_get`    | read        | Get a temporary EVSE status            | `GET /cpo/temporary-evse-statuses/{status_id}`               |
| `cpo_temporary_evse_statuses_list`   | read        | List temporary EVSE statuses           | `GET /cpo/temporary-evse-statuses`                           |
| `cpo_temporary_evse_statuses_update` | write       | Update a temporary EVSE status         | `PATCH /cpo/temporary-evse-statuses/{status_id}`             |
| `cpo_token_groups_add_location`      | write       | Link a location to a token group       | `POST /cpo/token-groups/{id}/locations/{location_id}`        |
| `cpo_token_groups_add_token`         | write       | Add a token to a token group           | `POST /cpo/token-groups/{id}/tokens/{token_id}`              |
| `cpo_token_groups_create`            | write       | Create a token group                   | `POST /cpo/token-groups`                                     |
| `cpo_token_groups_delete`            | destructive | Delete a token group                   | `DELETE /cpo/token-groups/{id}`                              |
| `cpo_token_groups_disable`           | write       | Disable a token group                  | `POST /cpo/token-groups/{id}/disable`                        |
| `cpo_token_groups_enable`            | write       | Enable a token group                   | `POST /cpo/token-groups/{id}/enable`                         |
| `cpo_token_groups_get`               | read        | Get a token group                      | `GET /cpo/token-groups/{id}`                                 |
| `cpo_token_groups_list`              | read        | List token groups                      | `GET /cpo/token-groups`                                      |
| `cpo_token_groups_list_locations`    | read        | List a token group's locations         | `GET /cpo/token-groups/{id}/locations`                       |
| `cpo_token_groups_list_tokens`       | read        | List a token group's tokens            | `GET /cpo/token-groups/{id}/tokens`                          |
| `cpo_token_groups_remove_location`   | destructive | Unlink a location from a token group   | `DELETE /cpo/token-groups/{id}/locations/{location_id}`      |
| `cpo_token_groups_remove_token`      | destructive | Remove a token from a token group      | `DELETE /cpo/token-groups/{id}/tokens/{token_id}`            |
| `cpo_token_groups_update`            | write       | Update a token group                   | `PATCH /cpo/token-groups/{id}`                               |
| `cpo_voucher_groups_add_location`    | write       | Link a location to a voucher group     | `POST /cpo/voucher-groups/{id}/locations/{location_id}`      |
| `cpo_voucher_groups_create`          | write       | Create a voucher group                 | `POST /cpo/voucher-groups`                                   |
| `cpo_voucher_groups_delete`          | destructive | Delete a voucher group                 | `DELETE /cpo/voucher-groups/{id}`                            |
| `cpo_voucher_groups_get`             | read        | Get a voucher group                    | `GET /cpo/voucher-groups/{id}`                               |
| `cpo_voucher_groups_list`            | read        | List voucher groups                    | `GET /cpo/voucher-groups`                                    |
| `cpo_voucher_groups_list_locations`  | read        | List a voucher group's locations       | `GET /cpo/voucher-groups/{id}/locations`                     |
| `cpo_voucher_groups_list_vouchers`   | read        | List a voucher group's vouchers        | `GET /cpo/voucher-groups/{id}/vouchers`                      |
| `cpo_voucher_groups_remove_location` | destructive | Unlink a location from a voucher group | `DELETE /cpo/voucher-groups/{id}/locations/{location_id}`    |
| `cpo_voucher_groups_update`          | write       | Update a voucher group                 | `PATCH /cpo/voucher-groups/{id}`                             |
| `cpo_vouchers_add_token`             | write       | Give a token a voucher                 | `POST /cpo/vouchers/{id}/tokens/{token_id}`                  |
| `cpo_vouchers_create`                | write       | Create a voucher                       | `POST /cpo/vouchers`                                         |
| `cpo_vouchers_delete`                | destructive | Delete a voucher                       | `DELETE /cpo/vouchers/{id}`                                  |
| `cpo_vouchers_get`                   | read        | Get a voucher                          | `GET /cpo/vouchers/{id}`                                     |
| `cpo_vouchers_list`                  | read        | List vouchers                          | `GET /cpo/vouchers`                                          |
| `cpo_vouchers_list_tokens`           | read        | List a voucher's tokens                | `GET /cpo/vouchers/{id}/tokens`                              |
| `cpo_vouchers_remove_token`          | destructive | Take a voucher from a token            | `DELETE /cpo/vouchers/{id}/tokens/{token_id}`                |
| `cpo_vouchers_update`                | write       | Update a voucher                       | `PATCH /cpo/vouchers/{id}`                                   |

## ocpplab-emsp

`https://api.ocpplab.io/mcp/emsp`

| Tool                                 | Kind        | Does                                             | REST                                                         |
| ------------------------------------ | ----------- | ------------------------------------------------ | ------------------------------------------------------------ |
| `emsp_callbacks_list`                | read        | List callback deliveries                         | `GET /emsp/callbacks`                                        |
| `emsp_cdrs_get`                      | read        | Get a CDR                                        | `GET /emsp/cdrs/{cdr_id}`                                    |
| `emsp_cdrs_list`                     | read        | List CDRs                                        | `GET /emsp/cdrs`                                             |
| `emsp_chargers_resolve`              | write       | Resolve a charger's route                        | `POST /emsp/chargers/resolve`                                |
| `emsp_commands_get`                  | read        | Get a command                                    | `GET /emsp/commands/{tracking_id}`                           |
| `emsp_commands_list`                 | read        | List commands                                    | `GET /emsp/commands`                                         |
| `emsp_commands_send`                 | destructive | Send a command                                   | `POST /emsp/commands/{authorization_reference}/{command}`    |
| `emsp_emp_identities_deregister`     | destructive | Deregister a roaming identity                    | `DELETE /emsp/tenant/emp-identities/{emp_identity_id}`       |
| `emsp_emp_identities_get`            | read        | Get a roaming identity                           | `GET /emsp/tenant/emp-identities/{emp_identity_id}`          |
| `emsp_emp_identities_list`           | read        | List your roaming identities                     | `GET /emsp/tenant/emp-identities`                            |
| `emsp_emp_identities_register`       | write       | Register a roaming identity                      | `POST /emsp/tenant/emp-identities`                           |
| `emsp_emp_identities_update`         | write       | Update a roaming identity                        | `PUT /emsp/tenant/emp-identities/{emp_identity_id}`          |
| `emsp_evses_status`                  | read        | Get an EVSE's live status                        | `GET /emsp/evses/{location_id}/{evse_uid}/status`            |
| `emsp_locations_batch`               | write       | Look up many locations at once                   | `POST /emsp/locations/batch`                                 |
| `emsp_locations_check_availability`  | write       | Check availability of several locations          | `POST /emsp/locations/availability`                          |
| `emsp_locations_cluster`             | read        | Cluster partner locations for a map (deprecated) | `GET /emsp/locations/clusters`                               |
| `emsp_locations_get`                 | read        | Get a location                                   | `GET /emsp/locations/by-id/{location_id}`                    |
| `emsp_locations_get_by_uid`          | read        | Get a location by uid                            | `GET /emsp/locations/by-uid/{uid}`                           |
| `emsp_locations_list`                | read        | Search locations                                 | `GET /emsp/locations`                                        |
| `emsp_locations_list_facilities`     | read        | List facilities at partner locations             | `GET /emsp/locations/facilities`                             |
| `emsp_locations_map`                 | read        | Map viewport: clusters or pins                   | `GET /emsp/locations/map`                                    |
| `emsp_locations_route`               | read        | Locations along a route                          | `GET /emsp/locations/route`                                  |
| `emsp_locations_search`              | read        | Search by text or EVSE id                        | `GET /emsp/locations/search`                                 |
| `emsp_networks_create`               | write       | Create a sub-network                             | `POST /emsp/networks`                                        |
| `emsp_networks_create_base`          | write       | Create a base network                            | `POST /emsp/networks/base`                                   |
| `emsp_networks_create_rule`          | write       | Add an access rule                               | `POST /emsp/networks/{network_id}/rules`                     |
| `emsp_networks_delete`               | destructive | Delete a sub-network                             | `DELETE /emsp/networks/{network_id}`                         |
| `emsp_networks_delete_rule`          | destructive | Remove an access rule                            | `DELETE /emsp/networks/{network_id}/rules/{rule_id}`         |
| `emsp_networks_get`                  | read        | Get a network                                    | `GET /emsp/networks/{network_id}`                            |
| `emsp_networks_get_effective_view`   | read        | See which CPOs your drivers reach                | `GET /emsp/network-effective-view`                           |
| `emsp_networks_list`                 | read        | List your networks                               | `GET /emsp/networks`                                         |
| `emsp_networks_list_consumers`       | read        | List who uses your published network             | `GET /emsp/networks/{network_id}/consumers`                  |
| `emsp_networks_list_locations`       | read        | List the locations a network reaches             | `GET /emsp/networks/{network_id}/locations`                  |
| `emsp_networks_list_rules`           | read        | List a network's access rules                    | `GET /emsp/networks/{network_id}/rules`                      |
| `emsp_networks_set_publish_state`    | write       | Publish or withdraw a base network               | `PATCH /emsp/networks/{network_id}/publish-state`            |
| `emsp_networks_update`               | write       | Update a network                                 | `PATCH /emsp/networks/{network_id}`                          |
| `emsp_sessions_get`                  | read        | Get a session                                    | `GET /emsp/sessions/{session_id}`                            |
| `emsp_sessions_list`                 | read        | List sessions                                    | `GET /emsp/sessions`                                         |
| `emsp_tariffs_estimate`              | write       | Estimate the price of a session                  | `POST /emsp/tariffs/estimate`                                |
| `emsp_tariffs_get`                   | read        | Get a tariff                                     | `GET /emsp/tariffs/{tariff_id}`                              |
| `emsp_tariffs_list`                  | read        | List tariffs                                     | `GET /emsp/tariffs`                                          |
| `emsp_tenant_get_priority`           | read        | Get your published-network ranking               | `GET /emsp/tenant/published-network-priority-order`          |
| `emsp_tenant_get_profile`            | read        | Get your eMSP profile                            | `GET /emsp/tenant/profile`                                   |
| `emsp_tenant_set_priority`           | write       | Set your published-network ranking               | `PUT /emsp/tenant/published-network-priority-order`          |
| `emsp_tenant_update_profile`         | write       | Update your eMSP profile                         | `PATCH /emsp/tenant/profile`                                 |
| `emsp_token_groups_activate`         | write       | Activate a token group                           | `POST /emsp/token-groups/{group_id}/activate`                |
| `emsp_token_groups_add_tokens`       | write       | Add tokens to a group                            | `POST /emsp/token-groups/{group_id}/tokens`                  |
| `emsp_token_groups_assign_network`   | write       | Assign a network to a group                      | `POST /emsp/token-groups/{group_id}/networks`                |
| `emsp_token_groups_create`           | write       | Create a token group                             | `POST /emsp/token-groups`                                    |
| `emsp_token_groups_get`              | read        | Get a token group                                | `GET /emsp/token-groups/{group_id}`                          |
| `emsp_token_groups_list`             | read        | List token groups                                | `GET /emsp/token-groups`                                     |
| `emsp_token_groups_list_networks`    | read        | List the networks assigned to a group            | `GET /emsp/token-groups/{group_id}/networks`                 |
| `emsp_token_groups_reactivate`       | write       | Reactivate a token group                         | `POST /emsp/token-groups/{group_id}/reactivate`              |
| `emsp_token_groups_remove_token`     | destructive | Remove a token from a group                      | `DELETE /emsp/token-groups/{group_id}/tokens/{token_uid}`    |
| `emsp_token_groups_revoke`           | destructive | Revoke a token group                             | `POST /emsp/token-groups/{group_id}/revoke`                  |
| `emsp_token_groups_suspend`          | write       | Suspend a token group                            | `POST /emsp/token-groups/{group_id}/suspend`                 |
| `emsp_token_groups_unassign_network` | destructive | Remove a network from a group                    | `DELETE /emsp/token-groups/{group_id}/networks/{network_id}` |
| `emsp_token_groups_update`           | write       | Update a token group                             | `PATCH /emsp/token-groups/{group_id}`                        |
| `emsp_tokens_activate`               | write       | Activate a token                                 | `POST /emsp/tokens/{token_id}/activate`                      |
| `emsp_tokens_bulk_provision`         | write       | Provision up to 1000 tokens                      | `POST /emsp/tokens/bulk`                                     |
| `emsp_tokens_get`                    | read        | Get a token                                      | `GET /emsp/tokens/{token_id}`                                |
| `emsp_tokens_history`                | read        | Get a token's history                            | `GET /emsp/tokens/{token_id}/history`                        |
| `emsp_tokens_list`                   | read        | List your tokens                                 | `GET /emsp/tokens`                                           |
| `emsp_tokens_provision`              | write       | Provision a token                                | `POST /emsp/tokens`                                          |
| `emsp_tokens_reactivate`             | write       | Reactivate a token                               | `POST /emsp/tokens/{token_id}/reactivate`                    |
| `emsp_tokens_revoke`                 | destructive | Revoke a token                                   | `POST /emsp/tokens/{token_id}/revoke`                        |
| `emsp_tokens_suspend`                | write       | Suspend a token                                  | `POST /emsp/tokens/{token_id}/suspend`                       |
| `emsp_tokens_update`                 | write       | Update a token                                   | `PATCH /emsp/tokens/{token_id}`                              |

## ocpplab-booking

`https://api.ocpplab.io/mcp/booking`

| Tool                       | Kind        | Does                            | REST                                                      |
| -------------------------- | ----------- | ------------------------------- | --------------------------------------------------------- |
| `booking_bookings_cancel`  | destructive | Cancel a reservation            | `POST /booking/bookings/{booking_id}/cancel`              |
| `booking_bookings_create`  | write       | Create a reservation            | `POST /booking/bookings`                                  |
| `booking_bookings_fail`    | destructive | Mark a reservation as failed    | `POST /booking/bookings/{booking_id}/fail`                |
| `booking_bookings_fulfill` | write       | Mark a reservation as fulfilled | `POST /booking/bookings/{booking_id}/fulfill`             |
| `booking_bookings_get`     | read        | Get a reservation               | `GET /booking/bookings/{booking_id}`                      |
| `booking_bookings_list`    | read        | List reservations               | `GET /booking/bookings`                                   |
| `booking_bookings_no_show` | destructive | Mark a reservation as a no-show | `POST /booking/bookings/{booking_id}/no-show`             |
| `booking_bookings_reject`  | destructive | Reject a reservation            | `POST /booking/bookings/{booking_id}/reject`              |
| `booking_bookings_reserve` | write       | Confirm a reservation           | `POST /booking/bookings/{booking_id}/reserve`             |
| `booking_bookings_update`  | write       | Update a reservation            | `PATCH /booking/bookings/{booking_id}`                    |
| `booking_locations_create` | write       | Create a bookable site          | `POST /booking/booking-locations`                         |
| `booking_locations_delete` | destructive | Delete a bookable site          | `DELETE /booking/booking-locations/{booking_location_id}` |
| `booking_locations_get`    | read        | Get a bookable site             | `GET /booking/booking-locations/{booking_location_id}`    |
| `booking_locations_list`   | read        | List bookable sites             | `GET /booking/booking-locations`                          |
| `booking_locations_update` | write       | Update a bookable site          | `PATCH /booking/booking-locations/{booking_location_id}`  |

## ocpplab-energy

`https://api.ocpplab.io/mcp/energy`

| Tool                               | Kind  | Does                                        | REST                                                   |
| ---------------------------------- | ----- | ------------------------------------------- | ------------------------------------------------------ |
| `energy_control_requests_create`   | write | Set or clear a charger's input limit        | `POST /energy-management/control-requests`             |
| `energy_control_requests_get`      | read  | Get a control request and its outcome       | `GET /energy-management/control-requests/{request_id}` |
| `energy_control_requests_list`     | read  | List control requests                       | `GET /energy-management/control-requests`              |
| `energy_power_measurements_latest` | read  | Read a charger's latest power per connector | `GET /energy-management/power-measurements/latest`     |
| `energy_power_measurements_list`   | read  | Read a charger's active power               | `GET /energy-management/power-measurements`            |

## ocpplab-webhook

`https://api.ocpplab.io/mcp/webhook`

| Tool                       | Kind        | Does                           | REST                                              |
| -------------------------- | ----------- | ------------------------------ | ------------------------------------------------- |
| `webhook_deliveries_list`  | read        | List webhook delivery attempts | `GET /webhook-gateway/webhook-deliveries`         |
| `webhook_endpoints_create` | write       | Create a webhook subscription  | `POST /webhook-gateway/webhooks`                  |
| `webhook_endpoints_delete` | destructive | Delete a webhook subscription  | `DELETE /webhook-gateway/webhooks/{id}`           |
| `webhook_endpoints_get`    | read        | Get a webhook subscription     | `GET /webhook-gateway/webhooks/{id}`              |
| `webhook_endpoints_list`   | read        | List webhook subscriptions     | `GET /webhook-gateway/webhooks`                   |
| `webhook_endpoints_test`   | write       | Send a test delivery           | `POST /webhook-gateway/webhooks/{id}/test`        |
| `webhook_endpoints_update` | write       | Update a webhook subscription  | `PATCH /webhook-gateway/webhooks/{id}`            |
| `webhook_event_types_get`  | read        | Get a webhook event type       | `GET /webhook-gateway/webhook-event-types/{type}` |
| `webhook_event_types_list` | read        | List webhook event types       | `GET /webhook-gateway/webhook-event-types`        |
| `webhook_events_deliver`   | write       | Publish a webhook event        | `POST /webhook-gateway/events`                    |