Skip to content

Connectors · MSP & PSA

Portainer MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Portainer and the rest of your systems. It gives your agent 308 Portainer actions (153 reads, 104 writes and 51 that wait for a confirmation) and holds the Portainer credential itself, so the agent never does. It paces Portainer's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "portainer.users.list",  intent: "check which Portainer account is connected"}# List users · read · 1 upstream call
  • 308actionsin one signed file
  • 153readlook, never change
  • 104writecreate and update
  • 51wait for a yesdestructive, confirmed first

Set up

Connect Portainer in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Portainer.

    API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.

    • api_keyPortainer access token (ptr_...), sent as X-API-Key
    • hostWhere your Portainer lives: your host
    account { op: "connections.requirements", service: "portainer" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "portainer.users.list" }# list users · read · 1 upstream callcheck { action: "portainer.users.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Portainer at a glance

Sign-in
API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
You provide
api_key
Setup fields
host
Limits we pace to
20 calls a second, per connection
API covered
Portainer CE API 2.45.3 (OpenAPI 3.0.0) plus the Docker Engine API through Portainer's Docker proxy, at your Portainer instance's API base URL, which you enter when connecting
Built from
Portainer's documentation, read 23 October 2026api-docs.portainer.ioapi-docs.portainer.iodocs.docker.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
148 of 153 reads, for up to 5 minutes; a write clears what it affects
Shared entities
5, so ask can line Portainer up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Portainer.

308 actions in 27 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 153readlook, never change
  • 104writecreate and update
  • 51destructivewait for a confirmation
  1. Kubernetes

    106

    63 read · 26 write · 17 destructive

    Get a list of namespaces · Create a namespace · Get a list of kubernetes Jobs · Get namespace details

  2. Docker engine

    43

    20 read · 13 write · 10 destructive

    List Swarm services · List volumes · Create a volume · List networks

  3. Stacks

    20

    3 read · 15 write · 2 destructive

    List stacks · Inspect a stack · Remove a stack · Update a stack

  4. Endpoints

    17

    5 read · 8 write · 4 destructive

    Create a new environment(endpoint) · List environments(endpoints) · List Registries on environment · Fetch docker pull limits

  5. Gitops

    14

    10 read · 3 write · 1 destructive

    Preview the content of target file in the git repository · List the workflows using a GitOps source · Create a Git source · List all GitOps sources

  6. Users

    13

    7 read · 4 write · 2 destructive

    List users · Inspect the current user user · Create a new user · Inspect a user

  7. Edge jobs

    10

    5 read · 3 write · 2 destructive

    Create an EdgeJob from a text · Fetch EdgeJobs list · Fetch the list of tasks on an EdgeJob · Fetch a file of an EdgeJob

  8. Helm

    10

    5 read · 3 write · 2 destructive

    Get a historical list of releases · Install Helm Chart · List Helm Releases · Create a user helm repository

19 more areas · 75 actions
  • Custom templates 8
  • Edge stacks 8
  • Endpoint groups 7
  • Registries 7
  • Edge groups 5
  • System 5
  • Team memberships 5
  • Teams 5
  • Webhooks 5
  • Docker 3
  • Resource controls 3
  • Settings 3
  • Tags 3
  • SSL 2
  • Templates 2
  • Ldap 1
  • Motd 1
  • Roles 1
  • Status 1

Top actions

The Portainer API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 68 of Portainer's 69 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
portainer.users.listList usersList usersreadidentity.user.list474 connectors
portainer.teams.listList teamsList teamsreadidentity.group.list262 connectors
portainer.users.current_user_inspectInspect the current user userInspect the current user userreadidentity.current_user.get307 connectors
portainer.users.createCreate a new userCreate a new userwriteidentity.user.create262 connectors
portainer.teams.createCreate a new teamCreate a new teamwriteidentity.group.create205 connectors
portainer.roles.listList rolesList rolesreadidentity.role.list184 connectors
portainer.kubernetes.get_namespacesGet a list of namespacesGet a list of namespacesreadinfra.namespace.list3 connectors
portainer.users.deleteRemove a userRemove a userdestructiveidentity.user.delete253 connectors
portainer.kubernetes.create_namespaceCreate a namespaceCreate a namespacewriteinfra.namespace.create3 connectors
portainer.users.generate_api_keyGenerate an API key for a userGenerate an API key for a userwriteidentity.api_key.create100 connectors
portainer.users.get_api_keysGet all API keys for a userGet all API keys for a userreadidentity.api_key.list96 connectors
portainer.kubernetes.get_jobsGet a list of kubernetes JobsGet a list of kubernetes Jobsreadinfra.job.list12 connectors

Try it

Prompts to paste into Claude.

Each one names the Portainer actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Who has access in Portainer? List every user and their role.

    callsportainer.users.list

  2. Writewrite

    Create a new user in Portainer. Show me exactly what you will send before you save it.

    callsportainer.users.create

Governance for Portainer

Destructive actions wait for a yes.

51 Portainer actions are destructive. The first 10:

  • Remove a userportainer.users.delete
  • Remove a teamportainer.teams.delete
  • Remove an api-key associated to a userportainer.users.remove_api_key
  • Remove a volumeportainer.docker_engine.volumes_remove
  • Remove a Swarm serviceportainer.docker_engine.services_remove
  • Delete a Kubernetes deploymentportainer.kubernetes.delete_deployment
  • Remove a networkportainer.docker_engine.networks_remove
  • Remove a stackportainer.stacks.delete
  • Remove a containerportainer.docker_engine.containers_remove
  • Delete a ConfigMapportainer.kubernetes.delete_config_map

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doportainer.users.deleteconfirm_policy: human

Remove a user?

intent: the user asked me to remove a user

run suspended · waiting for a named person · key portainer-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "portainer-agent",  allowed_actions: ["portainer.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "portainer.users.delete", approver: "[email protected]" },    { match: "portainer.teams.delete", approver: "[email protected]" },    { match: "portainer.users.remove_api_key", approver: "[email protected]" }  ]}
Illustrative. Scoped to Portainer only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Portainer costs on actionlake.

Every Portainer action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Portainer refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 308 Portainer actions
  • 308actions pageeach page of a long list is one call
  • 148reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Portainer action.

308 actions by area: the id your agent calls, what it does, and its effect.

Kubernetes106
  • portainer.kubernetes.create_config_mapCreate a ConfigMapwrite
  • portainer.kubernetes.create_deploymentCreate a Kubernetes deploymentwrite
  • portainer.kubernetes.create_ingressCreate an Ingresswrite
  • portainer.kubernetes.create_namespaceCreate a namespacewrite
  • portainer.kubernetes.create_persistent_volume_claimCreate a PersistentVolumeClaimwrite
  • portainer.kubernetes.create_secretCreate a Secretwrite
  • portainer.kubernetes.create_serviceCreate a servicewrite
  • portainer.kubernetes.delete_cluster_role_bindingsDelete cluster role bindingsdestructive
  • portainer.kubernetes.delete_cluster_rolesDelete cluster rolesdestructive
  • portainer.kubernetes.delete_config_mapDelete a ConfigMapdestructive
  • portainer.kubernetes.delete_cron_jobsDelete Cron Jobsdestructive
  • portainer.kubernetes.delete_deploymentDelete a Kubernetes deploymentdestructive
  • portainer.kubernetes.delete_ingressesDelete one or more Ingressesdestructive
  • portainer.kubernetes.delete_jobsDelete Jobsdestructive
  • portainer.kubernetes.delete_namespaceDelete kubernetes namespacesdestructive
  • portainer.kubernetes.delete_persistent_volume_claimsDelete PersistentVolumeClaimsdestructive
  • portainer.kubernetes.delete_persistent_volumesDelete PersistentVolumesdestructive
  • portainer.kubernetes.delete_podDelete a kubernetes poddestructive
  • portainer.kubernetes.delete_role_bindingsDelete role bindingsdestructive
  • portainer.kubernetes.delete_rolesDelete rolesdestructive
  • portainer.kubernetes.delete_secretDelete a Secretdestructive
  • portainer.kubernetes.delete_service_accountsDelete service accountsdestructive
  • portainer.kubernetes.delete_servicesDelete servicesdestructive
  • portainer.kubernetes.delete_storage_classesDelete StorageClassesdestructive
  • portainer.kubernetes.describe_resourceGet a description of a kubernetes resourceread
  • portainer.kubernetes.drain_nodeDrain a Kubernetes nodewrite
  • portainer.kubernetes.dry_run_manifestsValidate Kubernetes manifests without applying themread
  • portainer.kubernetes.get_all_applicationsGet a list of applications across all namespaces in the cluster. If the nodeName is provided, it will return the applicaread
  • portainer.kubernetes.get_all_applications_countGet Applications countread
  • portainer.kubernetes.get_all_cluster_ingressesGet kubernetes ingresses at the cluster levelread
  • portainer.kubernetes.get_all_cluster_ingresses_countGet Ingresses countread
  • portainer.kubernetes.get_all_cluster_role_bindingsGet a list of kubernetes cluster role bindingsread
  • portainer.kubernetes.get_all_cluster_rolesGet a list of kubernetes cluster rolesread
  • portainer.kubernetes.get_all_config_mapsGet a list of ConfigMapsread
  • portainer.kubernetes.get_all_config_maps_countGet ConfigMaps countread
  • portainer.kubernetes.get_all_deploymentsGet Kubernetes deploymentsread
  • portainer.kubernetes.get_all_eventsGets kubernetes eventsread
  • portainer.kubernetes.get_all_ingress_controllersGet a list of ingress controllersread
  • portainer.kubernetes.get_all_ingressesGet a list of Ingressesread
  • portainer.kubernetes.get_all_persistent_volume_claimsGet all PersistentVolumeClaimsread
  • portainer.kubernetes.get_all_persistent_volumesGet all PersistentVolumes in the clusterread
  • portainer.kubernetes.get_all_podsGet Kubernetes podsread
  • portainer.kubernetes.get_all_services_countGet services countread
  • portainer.kubernetes.get_all_storage_classesGet all StorageClassesread
  • portainer.kubernetes.get_all_volumesGet Kubernetes volumes within the given Portainer environmentread
  • portainer.kubernetes.get_all_volumes_countGet the total number of kubernetes volumes within the given Portainer environment.read
  • portainer.kubernetes.get_applications_resourcesGet the total resource requests and limits of all applicationsread
  • portainer.kubernetes.get_configGenerate a kubeconfig fileread
  • portainer.kubernetes.get_config_mapGet a ConfigMapread
  • portainer.kubernetes.get_cron_jobsGet a list of kubernetes Cron Jobsread
  • portainer.kubernetes.get_dashboardGet the dashboard summary dataread
  • portainer.kubernetes.get_deploymentGet a Kubernetes deploymentread
  • portainer.kubernetes.get_deployments_for_namespaceGet Kubernetes deployments within a namespaceread
  • portainer.kubernetes.get_events_for_namespaceGets kubernetes events for namespaceread
  • portainer.kubernetes.get_ingressGet an Ingress by nameread
  • portainer.kubernetes.get_ingress_classesGet Kubernetes ingress classesread
  • portainer.kubernetes.get_ingress_controllers_by_namespaceGet a list ingress controllers by namespaceread
  • portainer.kubernetes.get_jobsGet a list of kubernetes Jobsread
  • portainer.kubernetes.get_max_resource_limitsGet max CPU and memory limits of all nodes within k8s clusterread
  • portainer.kubernetes.get_metrics_for_all_nodesGet a list of nodes with their live metricsread
  • portainer.kubernetes.get_metrics_for_all_podsGet a list of pods with their live metricsread
  • portainer.kubernetes.get_metrics_for_nodeGet live metrics for a noderead
  • portainer.kubernetes.get_metrics_for_podGet live metrics for a podread
  • portainer.kubernetes.get_namespaceGet namespace detailsread
  • portainer.kubernetes.get_namespacesGet a list of namespacesread
  • portainer.kubernetes.get_namespaces_countGet the total number of kubernetes namespaces within the given Portainer environment.read
  • portainer.kubernetes.get_nodesGet Kubernetes cluster nodesread
  • portainer.kubernetes.get_nodes_limitsGet CPU and memory limits of all nodes within k8s clusterread
  • portainer.kubernetes.get_persistent_volumeGet a specific PersistentVolumeread
  • portainer.kubernetes.get_persistent_volume_claimGet a specific PersistentVolumeClaimread
  • portainer.kubernetes.get_persistent_volume_claims_in_namespaceGet PersistentVolumeClaims in a namespaceread
  • portainer.kubernetes.get_pods_for_namespaceGet Kubernetes pods within a namespaceread
  • portainer.kubernetes.get_rbac_statusCheck if RBAC is enabledread
  • portainer.kubernetes.get_replica_setsGet Kubernetes replica sets within a namespaceread
  • portainer.kubernetes.get_resource_quotasGet Kubernetes resource quotas within a namespaceread
  • portainer.kubernetes.get_role_bindingsGet a list of kubernetes role bindingsread
  • portainer.kubernetes.get_rolesGet a list of kubernetes rolesread
  • portainer.kubernetes.get_secretGet a Secretread
  • portainer.kubernetes.get_secretsGet a list of Secretsread
  • portainer.kubernetes.get_secrets_countGet Secrets countread
  • portainer.kubernetes.get_service_accountGet a kubernetes service accountread
  • portainer.kubernetes.get_service_accountsGet a list of kubernetes service accountsread
  • portainer.kubernetes.get_servicesGet a list of servicesread
  • portainer.kubernetes.get_services_by_namespaceGet a list of services for a given namespaceread
  • portainer.kubernetes.get_storage_classGet a specific StorageClassread
  • portainer.kubernetes.get_versionGet the Kubernetes cluster version and Portainer-relevant capabilitiesread
  • portainer.kubernetes.get_volumeGet a Kubernetes volume within the given Portainer environmentread
  • portainer.kubernetes.get_volumes_in_namespaceGet Kubernetes volumes within a namespace in the given Portainer environmentread
  • portainer.kubernetes.namespaces_toggle_systemToggle the system state for a namespacewrite
  • portainer.kubernetes.patch_deploymentAnnotate a Kubernetes deploymentwrite
  • portainer.kubernetes.resize_persistent_volume_claimResize a PersistentVolumeClaimwrite
  • portainer.kubernetes.restart_podRestart all containers in a Kubernetes podwrite
  • portainer.kubernetes.rollback_deploymentRoll a Kubernetes deployment backwrite
  • portainer.kubernetes.scale_deploymentScale a Kubernetes deploymentwrite
  • portainer.kubernetes.set_default_storage_classSet a StorageClass as defaultwrite
  • portainer.kubernetes.update_config_mapUpdate a ConfigMapwrite
  • portainer.kubernetes.update_deploymentUpdate a Kubernetes deploymentwrite
  • portainer.kubernetes.update_ingressUpdate an Ingresswrite
  • portainer.kubernetes.update_ingress_controllersUpdate (block/unblock) ingress controllerswrite
  • portainer.kubernetes.update_ingress_controllers_by_namespaceUpdate (block/unblock) ingress controllers by namespacewrite
  • portainer.kubernetes.update_namespaceUpdate a namespacewrite
  • portainer.kubernetes.update_namespace_deprecatedUpdate a namespacewrite
  • portainer.kubernetes.update_persistent_volume_reclaim_policyUpdate reclaim policy of a PersistentVolumewrite
  • portainer.kubernetes.update_secretUpdate a Secretwrite
  • portainer.kubernetes.update_serviceUpdate a servicewrite
  • portainer.kubernetes.update_service_account_image_pull_secretsUpdate image pull secrets for a service accountwrite
Docker engine43
  • portainer.docker_engine.containers_changesList filesystem changes in a containerread
  • portainer.docker_engine.containers_createCreate a containerwrite
  • portainer.docker_engine.containers_inspectInspect a containerread
  • portainer.docker_engine.containers_killSend a signal to (kill) a containerwrite
  • portainer.docker_engine.containers_listList containersread
  • portainer.docker_engine.containers_pausePause a containerwrite
  • portainer.docker_engine.containers_pruneDelete all stopped containersdestructive
  • portainer.docker_engine.containers_removeRemove a containerdestructive
  • portainer.docker_engine.containers_renameRename a containerwrite
  • portainer.docker_engine.containers_restartRestart a containerdestructive
  • portainer.docker_engine.containers_startStart a containerwrite
  • portainer.docker_engine.containers_statsGet a one-shot resource usage snapshot of a containerread
  • portainer.docker_engine.containers_stopStop a containerwrite
  • portainer.docker_engine.containers_topList processes running inside a containerread
  • portainer.docker_engine.containers_unpauseUnpause a containerwrite
  • portainer.docker_engine.containers_updateUpdate a container's resource limits and restart policywrite
  • portainer.docker_engine.images_historyGet the layer history of an imageread
  • portainer.docker_engine.images_inspectInspect an imageread
  • portainer.docker_engine.images_listList imagesread
  • portainer.docker_engine.images_pruneDelete unused imagesdestructive
  • portainer.docker_engine.images_removeRemove an imagedestructive
  • portainer.docker_engine.images_tagTag an imagewrite
  • portainer.docker_engine.infoGet system-wide information about the Docker hostread
  • portainer.docker_engine.networks_connectConnect a container to a networkwrite
  • portainer.docker_engine.networks_createCreate a networkwrite
  • portainer.docker_engine.networks_disconnectDisconnect a container from a networkwrite
  • portainer.docker_engine.networks_inspectInspect a networkread
  • portainer.docker_engine.networks_listList networksread
  • portainer.docker_engine.networks_pruneDelete unused networksdestructive
  • portainer.docker_engine.networks_removeRemove a networkdestructive
  • portainer.docker_engine.nodes_listList Swarm nodesread
  • portainer.docker_engine.services_inspectInspect a Swarm serviceread
  • portainer.docker_engine.services_listList Swarm servicesread
  • portainer.docker_engine.services_removeRemove a Swarm servicedestructive
  • portainer.docker_engine.swarm_inspectInspect the Swarmread
  • portainer.docker_engine.system_dfGet Docker disk usage (images, containers, volumes, build cache)read
  • portainer.docker_engine.tasks_listList Swarm tasksread
  • portainer.docker_engine.versionGet the Docker Engine versionread
  • portainer.docker_engine.volumes_createCreate a volumewrite
  • portainer.docker_engine.volumes_inspectInspect a volumeread
  • portainer.docker_engine.volumes_listList volumesread
  • portainer.docker_engine.volumes_pruneDelete unused volumesdestructive
  • portainer.docker_engine.volumes_removeRemove a volumedestructive
Stacks20
  • portainer.stacks.associateAssociate an orphaned stack to a new environment(endpoint)write
  • portainer.stacks.create_docker_standalone_repositoryDeploy a new compose stack from repositorywrite
  • portainer.stacks.create_docker_standalone_stringDeploy a new compose stack from a textwrite
  • portainer.stacks.create_docker_swarm_repositoryDeploy a new swarm stack from a git repositorywrite
  • portainer.stacks.create_docker_swarm_stringDeploy a new swarm stack from a textwrite
  • portainer.stacks.create_kubernetes_fileDeploy a new kubernetes stack from a filewrite
  • portainer.stacks.create_kubernetes_gitDeploy a new kubernetes stack from a git repositorywrite
  • portainer.stacks.create_kubernetes_urlDeploy a new kubernetes stack from an urlwrite
  • portainer.stacks.deleteRemove a stackdestructive
  • portainer.stacks.delete_kubernetes_by_nameRemove Kubernetes stacks by namedestructive
  • portainer.stacks.file_inspectRetrieve the content of the Stack file for the specified stackread
  • portainer.stacks.git_redeployRedeploy a stackwrite
  • portainer.stacks.inspectInspect a stackread
  • portainer.stacks.listList stacksread
  • portainer.stacks.migrateMigrate a stack to another environment(endpoint)write
  • portainer.stacks.startStarts a stopped Stackwrite
  • portainer.stacks.stopStop a running Stackwrite
  • portainer.stacks.updateUpdate a stackwrite
  • portainer.stacks.update_gitUpdate a stack's Git configswrite
  • portainer.stacks.webhook_invokeWebhook for triggering stack updates from gitwrite
Endpoints17
  • portainer.endpoints.association_deleteDe-association an edge environment(endpoint)destructive
  • portainer.endpoints.createCreate a new environment(endpoint)write
  • portainer.endpoints.deleteRemove an environmentdestructive
  • portainer.endpoints.delete_batchRemove multiple environmentsdestructive
  • portainer.endpoints.delete_batch_deprecatedRemove multiple environmentsdestructive
  • portainer.endpoints.dockerhub_statusFetch docker pull limitsread
  • portainer.endpoints.force_update_serviceForce update a docker servicewrite
  • portainer.endpoints.inspectInspect an environment(endpoint)read
  • portainer.endpoints.listList environments(endpoints)read
  • portainer.endpoints.registries_listList Registries on environmentread
  • portainer.endpoints.registry_accessUpdate registry access for environmentwrite
  • portainer.endpoints.settings_updateUpdate settings for an environment(endpoint)write
  • portainer.endpoints.snapshotSnapshots an environment(endpoint)write
  • portainer.endpoints.snapshotsSnapshot all environments(endpoints)write
  • portainer.endpoints.summary_countsGet environment summary countsread
  • portainer.endpoints.updateUpdate an environment(endpoint)write
  • portainer.endpoints.update_relationsUpdate relations for a list of environmentswrite
Gitops14
  • portainer.gitops.git_operation_repo_file_previewPreview the content of target file in the git repositoryread
  • portainer.gitops.source_getGet a GitOps source by IDread
  • portainer.gitops.source_workflows_listList the workflows using a GitOps sourceread
  • portainer.gitops.sources_create_gitCreate a Git sourcewrite
  • portainer.gitops.sources_deleteDelete a sourcedestructive
  • portainer.gitops.sources_listList all GitOps sourcesread
  • portainer.gitops.sources_summarySummarize GitOps source status countsread
  • portainer.gitops.sources_testTest a Git source connectionread
  • portainer.gitops.sources_test_by_idTest the connection of a stored sourceread
  • portainer.gitops.sources_update_accessUpdate a GitOps source's access controlwrite
  • portainer.gitops.sources_update_gitUpdate a Git sourcewrite
  • portainer.gitops.workflow_getGet a GitOps workflow by IDread
  • portainer.gitops.workflows_listList all GitOps workflowsread
  • portainer.gitops.workflows_summarySummarize GitOps workflow status countsread
Users13
  • portainer.users.admin_checkCheck administrator account existenceread
  • portainer.users.createCreate a new userwrite
  • portainer.users.current_user_inspectInspect the current user userread
  • portainer.users.deleteRemove a userdestructive
  • portainer.users.effective_access_inspectInspect a user's effective access on every environmentread
  • portainer.users.generate_api_keyGenerate an API key for a userwrite
  • portainer.users.get_api_keysGet all API keys for a userread
  • portainer.users.inspectInspect a userread
  • portainer.users.listList usersread
  • portainer.users.memberships_inspectInspect a user membershipsread
  • portainer.users.remove_api_keyRemove an api-key associated to a userdestructive
  • portainer.users.updateUpdate a userwrite
  • portainer.users.update_passwordUpdate password for a userwrite
Edge jobs10
  • portainer.edge_jobs.create_stringCreate an EdgeJob from a textwrite
  • portainer.edge_jobs.deleteDelete an EdgeJobdestructive
  • portainer.edge_jobs.fileFetch a file of an EdgeJobread
  • portainer.edge_jobs.inspectInspect an EdgeJobread
  • portainer.edge_jobs.listFetch EdgeJobs listread
  • portainer.edge_jobs.task_logs_inspectFetch the log for a specifc task on an EdgeJobread
  • portainer.edge_jobs.tasks_clearClear the log for a specifc task on an EdgeJobdestructive
  • portainer.edge_jobs.tasks_collectCollect the log for a specifc task on an EdgeJobwrite
  • portainer.edge_jobs.tasks_listFetch the list of tasks on an EdgeJobread
  • portainer.edge_jobs.updateUpdate an EdgeJobwrite
Helm10
  • portainer.helm.deleteDelete Helm Releasedestructive
  • portainer.helm.getGet a helm releaseread
  • portainer.helm.get_historyGet a historical list of releasesread
  • portainer.helm.installInstall Helm Chartwrite
  • portainer.helm.listList Helm Releasesread
  • portainer.helm.repo_searchSearch Helm Chartsread
  • portainer.helm.rollbackRollback a helm releasewrite
  • portainer.helm.user_repositories_listList a users helm repositoriesread
  • portainer.helm.user_repository_createCreate a user helm repositorywrite
  • portainer.helm.user_repository_deleteDelete a users helm repositoryiesdestructive
Custom templates8
  • portainer.custom_templates.create_repositoryCreate a custom templatewrite
  • portainer.custom_templates.create_stringCreate a custom templatewrite
  • portainer.custom_templates.deleteRemove a templatedestructive
  • portainer.custom_templates.fileGet Template stack file content.read
  • portainer.custom_templates.git_fetchFetch the latest config file content based on custom template's git repository configurationwrite
  • portainer.custom_templates.inspectInspect a custom templateread
  • portainer.custom_templates.listList available custom templatesread
  • portainer.custom_templates.updateUpdate a templatewrite
Edge stacks8
  • portainer.edge_stacks.create_repositoryCreate an EdgeStack from a git repositorywrite
  • portainer.edge_stacks.create_stringCreate an EdgeStack from a textwrite
  • portainer.edge_stacks.deleteDelete an EdgeStackdestructive
  • portainer.edge_stacks.fileFetches the stack file for an EdgeStackread
  • portainer.edge_stacks.inspectInspect an EdgeStackread
  • portainer.edge_stacks.listFetches the list of EdgeStacksread
  • portainer.edge_stacks.status_updateUpdate an EdgeStack statuswrite
  • portainer.edge_stacks.updateUpdate an EdgeStackwrite
Endpoint groups7
  • portainer.endpoint_groups.add_endpointAdd an environment(endpoint) to an environment(endpoint) groupwrite
  • portainer.endpoint_groups.createCreate an Environment(Endpoint) Groupwrite
  • portainer.endpoint_groups.deleteRemove an environment(endpoint) groupdestructive
  • portainer.endpoint_groups.delete_endpointRemoves environment(endpoint) from an environment(endpoint) groupdestructive
  • portainer.endpoint_groups.inspectInspect an Environment(Endpoint) groupread
  • portainer.endpoint_groups.listList Environment(Endpoint) groupsread
  • portainer.endpoint_groups.updateUpdate an environment(endpoint) groupwrite
Registries7
  • portainer.registries.configureConfigures a registrywrite
  • portainer.registries.createCreate a new registrywrite
  • portainer.registries.deleteRemove a registrydestructive
  • portainer.registries.inspectInspect a registryread
  • portainer.registries.listList Registriesread
  • portainer.registries.pingTest registry connectionread
  • portainer.registries.updateUpdate a registrywrite
Edge groups5
  • portainer.edge_groups.createCreate an EdgeGroupwrite
  • portainer.edge_groups.deleteDeletes an EdgeGroupdestructive
  • portainer.edge_groups.inspectInspects an EdgeGroupread
  • portainer.edge_groups.listList EdgeGroupsread
  • portainer.edge_groups.updateUpdates an EdgeGroupwrite
System5
  • portainer.system.infoRetrieve system inforead
  • portainer.system.nodes_countRetrieve the count of nodesread
  • portainer.system.statusCheck Portainer statusread
  • portainer.system.upgradeUpgrade Portainer to BEwrite
  • portainer.system.versionCheck for portainer updatesread
Team memberships5
  • portainer.team_memberships.createCreate a new team membershipwrite
  • portainer.team_memberships.deleteRemove a team membershipdestructive
  • portainer.team_memberships.listList team membershipsread
  • portainer.team_memberships.team_membershipsList team membershipsread
  • portainer.team_memberships.updateUpdate a team membershipwrite
Teams5
  • portainer.teams.createCreate a new teamwrite
  • portainer.teams.deleteRemove a teamdestructive
  • portainer.teams.inspectInspect a teamread
  • portainer.teams.listList teamsread
  • portainer.teams.updateUpdate a teamwrite
Webhooks5
  • portainer.webhooks.createCreate a webhookwrite
  • portainer.webhooks.deleteDelete a webhookdestructive
  • portainer.webhooks.executeExecute a webhookwrite
  • portainer.webhooks.listList webhooksread
  • portainer.webhooks.updateUpdate a webhookwrite
Docker3
  • portainer.docker.container_gpus_inspectFetch container gpus dataread
  • portainer.docker.dashboardGet counters for the dashboardread
  • portainer.docker.images_listFetch imagesread
Resource controls3
  • portainer.resource_controls.createCreate a new resource controlwrite
  • portainer.resource_controls.deleteRemove a resource controldestructive
  • portainer.resource_controls.updateUpdate a resource controlwrite
Settings3
  • portainer.settings.inspectRetrieve Portainer settingsread
  • portainer.settings.publicRetrieve Portainer public settingsread
  • portainer.settings.updateUpdate Portainer settingswrite
Tags3
  • portainer.tags.createCreate a new tagwrite
  • portainer.tags.deleteRemove a tagdestructive
  • portainer.tags.listList tagsread
SSL2
  • portainer.ssl.inspectInspect the ssl settingsread
  • portainer.ssl.updateUpdate the ssl settingswrite
Templates2
  • portainer.templates.fileGet a template's fileread
  • portainer.templates.listList available templatesread
Ldap1
  • portainer.ldap.checkTest LDAP connectivityread
Motd1
  • portainer.motd.motdFetches the message of the dayread
Roles1
  • portainer.roles.listList rolesread
Status1
  • portainer.status.inspectCheck Portainer statusread

Questions

The Portainer MCP server, answered.

Is there a Portainer MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 308 Portainer actions across kubernetes, docker engine, stacks and endpoints, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Portainer.

What do I need to connect Portainer?

Portainer access token (ptr_...), sent as X-API-Key. Plus your host. The free call account { op: "connections.requirements", service: "portainer" } lists exactly what to paste.

Can an AI agent delete or change things in Portainer?

Only if its key allows it, and only with an explicit confirmation. 51 Portainer actions are destructive, including remove a user, remove a team and remove an api-key associated to a user. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Portainer API limit?

actionlake paces every call to the limits in the Portainer service file: 20 calls a second per connection. Repeated reads are answered from cache (148 Portainer actions can be), which never reaches Portainer.

What does a Portainer action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (308 Portainer actions page). Cache hits, searches, dry runs and calls Portainer refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Portainer API does it cover?

The Portainer CE API 2.45.3 (OpenAPI 3.0.0) plus the Docker Engine API through Portainer's Docker proxy at your Portainer instance's API base URL, which you enter when connecting. It is built from Portainer's documentation as read on 23 October 2026. 308 actions in 27 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my Portainer data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Portainer credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Portainer today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.