Atlas / MCP servers / knuckles-team / portainer-agent

portainer-agentBLOCK

mcp/knuckles-team/portainer-agent

Portainer - Manage your Portainer instance through the Portainer Agent/MCP!

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
2 2r · 0w · 0d
Transport
sse · stdio · streamable-http
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

CLI or API | MCP | Agent

Version: 2.1.0

Documentation — Installation, deployment, usage across the API, CLI, and MCP interfaces, and guidance for provisioning the Portainer platform are maintained in the official documentation.

Overview

Portainer Agent is a production-grade Agent and Model Context Protocol (MCP) server designe

Read from source at commit 5c20e8459674OBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add portainer-agent --env GITLAB_TOKEN=${GITLAB_TOKEN} --env PORTAINER_GIT_TOKEN=${PORTAINER_GIT_TOKEN} --env PORTAINER_TOKEN=${PORTAINER_TOKEN} -- uvx portainer-agent
claude-desktop
{
  "mcpServers": {
    "portainer-agent": {
      "command": "uvx",
      "args": [
        "portainer-agent"
      ],
      "env": {
        "GITLAB_TOKEN": "${GITLAB_TOKEN}",
        "PORTAINER_GIT_TOKEN": "${PORTAINER_GIT_TOKEN}",
        "PORTAINER_TOKEN": "${PORTAINER_TOKEN}"
      }
    }
  }
}
03

Exposed tools (2)

2 read · 0 write · 0 destructive.

ToolRiskDescription
portainer_ingest_containersreadNatively ingest an environment
portainer_ingest_environmentsreadNatively ingest Portainer environments (+ stacks) into epistemic-graph.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (5 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (17)

HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
docs/overview.md:21
| **Prompt Injection Defense** | ✅ Built-in | 25+ pattern scanner + jailbreak taxonomy (CONCEPT:AU-OS.config.secrets-authentication) |
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
portainer_agent/__init__.py:31
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
portainer_agent/__init__.py:41
return importlib.import_module(module_name)
LOWInventory / provenance · inv.binary · CWE-1104
.specify/specs/code-enhancement-20260524/spec.md
spec.md
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
.specify/specs/code-enhancement-20260524/tasks.md
tasks.md
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.bumpversion.cfg
.bumpversion.cfg
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.codespellignore
.codespellignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_init_dynamics.py:37
mod = importlib.import_module(pkg_name)
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_init_dynamics.py:43
mod = importlib.import_module(pkg_name)
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_init_dynamics.py:55
mod = importlib.import_module(pkg_name)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_coverage_gap_fillers.py:107
"PORTAINER_URL": "http://127.0.0.1:9000",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_coverage_gap_fillers.py:113
assert client.base_url == "http://127.0.0.1:9000"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_coverage_gap_fillers.py:121
"PORTAINER_URL": "http://127.0.0.1:9000",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_coverage_gap_fillers.py:137
base_url="http://127.0.0.1:9000",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements.txt
agent-utilities
Why it matters. 1 requirement(s) not pinned with ==
Fix. pin exact versions
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
portainer_agent/skills/portainer-agent-docs/reference/admin_user_roles.md:16
* **Environment administrator** has full access within a given environment, but cannot make any changes to the infrastructure that underpins an environment (i.e. no host management), nor are they able

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 5c20e8459674full audit observations/trust-audit/mcp-server/knuckles-team__portainer-agent.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-115c20e8459674BLOCKD69first audit
06

Questions

What is the portainer-agent MCP server?

Portainer - Manage your Portainer instance through the Portainer Agent/MCP!

What tools does portainer-agent expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is portainer-agent safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does portainer-agent need?

It reads GITLAB_TOKEN, PORTAINER_GIT_TOKEN and PORTAINER_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does portainer-agent run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as portainer-agent.

How current is this page?

The grade is for one exact copy of the source (5c20e8459674), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement