Skip to main content
Glama
nunombispo

dokku-mcp

by nunombispo

dokku-mcp

FastMCP server that lets Cursor, Claude Desktop, and other MCP clients inspect and manage a Dokku host over SSH — structured tools, shared session, read-only defaults, and explicit guardrails so “convenient” does not become unrestricted shell access.

Stay in the agent chat (“is api running, and show the last fifty log lines”) instead of SSH-and-paste.

Features

  • Read-only by default (DOKKU_MCP_MODE=read-only)

  • Shared asyncssh session (not a new connection per tool call)

  • Structured parsers for Dokku CLI output (prefer --format json when available)

  • App allowlist / denylist

  • Config secrets masked unless reveal_secrets=True

  • Mutating tools require read-write mode; restart / scale / set-config also need confirm=True

  • No free-form dokku_exec — one Dokku command, one tool, one parser

  • destroy_app is not included

Related MCP server: runtime-inspector-mcp

Install

# From source (development)
uv sync

# Run from this checkout without a global install
uv run dokku-mcp

When published to PyPI: uvx dokku-mcp or pip install dokku-mcp.

Quick start

  1. Confirm Dokku SSH works the forced-command way (this is what the server uses):

    ssh dokku@your-host apps:list
  2. Copy .env.example or set the same variables in your MCP client env block.

  3. Add the server to Cursor or Claude Desktop (see below), reload MCP, and ask: “What apps are on my Dokku host?”

If the dokku server does not appear under MCP tools, check the MCP panel logs — bad host, key path, or a failed uv start show up there before any chat error.

Configuration

Variable

Default

Description

DOKKU_HOST

(required)

Dokku SSH hostname

DOKKU_SSH_USER

dokku

SSH user (Dokku convention)

DOKKU_SSH_KEY_PATH

(agent/defaults)

Path to private key

DOKKU_SSH_PORT

22

SSH port

DOKKU_MCP_MODE

read-only

read-only or read-write

DOKKU_APP_ALLOWLIST

empty

Comma-separated apps; empty = all

DOKKU_APP_DENYLIST

empty

Comma-separated apps always blocked

Dokku’s SSH user uses a forced command: this server sends plugin invocations such as apps:list, not dokku apps:list.

Tools

Read-only

Tool

Dokku command

Notes

list_apps

apps:list

Filtered by allow/deny lists

app_report

ps:report <app>

Process / running state

app_config

config:export <app>

Secrets masked by default

app_logs

logs <app> -n <n>

Default 50 lines, hard max 500

app_domains

domains:report <app>

VHOST report

app_url

derived

HTTPS URLs from domains

Mutating (gated)

Tool

Dokku command

Guards

create_app

apps:create

read-write + name validation

set_config

config:set

read-write + confirm=True (values never echoed back)

restart_app

ps:restart

read-write + confirm=True

scale_app

ps:scale

read-write + confirm=True

confirm must be passed explicitly on the tool call — it is never inferred from chatty assent.

Example prompts

You type

Tools

“What apps are on my Dokku host?”

list_apps

“Is api running, and what’s its public URL?”

app_report, app_url

“Show the last 50 log lines for api.”

app_logs

“Which env keys does api have? Don’t show secrets.”

app_config

MCP client setup

Cursor

Add to ~/.cursor/mcp.json or the project .cursor/mcp.json:

{
  "mcpServers": {
    "dokku": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/dokku-mcp-server",
        "dokku-mcp"
      ],
      "env": {
        "DOKKU_HOST": "dokku.example.com",
        "DOKKU_SSH_USER": "dokku",
        "DOKKU_SSH_KEY_PATH": "/home/YOU/.ssh/id_ed25519",
        "DOKKU_MCP_MODE": "read-only"
      }
    }
  }
}

Cursor / Claude Desktop

Same env block with:

"command": "uvx",
"args": ["dokku-mcp"]

See examples/cursor_mcp.json and examples/claude_desktop_config.json.

Local entrypoints

uv run dokku-mcp
python -m dokku_mcp
fastmcp run dokku_mcp.server:mcp

Development

uv sync --all-extras
uv run pytest -m "not integration" -q

# Live smoke test against your Dokku box:
DOKKU_HOST=... DOKKU_SSH_KEY_PATH=... uv run pytest -m integration -q

Layout: src/dokku_mcp/server.py, ssh.py, config.py, parsers.py, and tools/ (one module per Dokku concern).

Security notes

  • Prefer read-only for day-to-day LLM access.

  • Use allowlists on shared hosts; denylist always wins.

  • Prefer an SSH agent or default IdentityFile over embedding private key paths when you can.

  • Treat reveal_secrets=True and read-write as elevated privileges.

  • There is no open-ended shell tool; that is intentional.

Contributing

Issues and PRs welcome — especially fixture captures from real Dokku versions and extra read-only reports that fit the “one command, one tool, one parser” rule.

License

MIT — see LICENSE.

Available Tools

10 tools
app_configApp ConfigA

Get environment config vars for a Dokku app.

Side effects: none (read-only). Secret-looking keys (PASSWORD, TOKEN, DATABASE_URL, etc.) are masked as *** unless reveal_secrets=True is passed explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
reveal_secretsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and handles it well. It explicitly states 'Side effects: none (read-only)' and discloses that secret-looking keys are masked unless reveal_secrets=True is passed. These are meaningful behavioral traits that go beyond what the schema alone conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the core purpose, the read-only side effect, and the secret-handling behavior. The most important action is front-loaded, and there is no filler or redundant repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with an output schema, the description is complete. It covers the resource scope, side-effect profile, secret masking behavior, and the key parameter behavior. There is nothing essential missing for an agent to select and call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It references the app parameter via 'for a Dokku app' and explains reveal_secrets by describing the masking behavior and its dependency on explicitly passing True. It could be slightly more explicit about the app parameter meaning, but it adds real semantic value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and object: 'Get environment config vars for a Dokku app.' This makes the tool's read-only retrieval purpose immediately distinguishable from siblings like set_config and create_app. The scope is clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly signals this is the retrieval tool for app config values, especially with 'Get' and the explicit 'read-only' note. It gives conditional guidance for reveal_secrets, but it does not explicitly name alternatives or state when not to use it, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_domainsApp DomainsA

Get domain / VHOST report for a Dokku app.

Side effects: none (read-only). Runs domains:report <app>.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description explicitly covers the side-effect profile: 'Side effects: none (read-only).' It also names the exact Dokku command executed, adding transparency about how the result is produced. No annotation contradiction exists because no annotations were provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences; purpose is front-loaded, then side effects and implementation. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-nested-output tool, the description covers the core invocation requirements: what it does, that it is safe, and which command it wraps. The output schema covers return structure, so that is not a gap. It could be more complete by routing to siblings, but the core context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% property descriptions, so the description must compensate. It adds limited meaning by situating the argument as the target Dokku app and showing it as <app> in the command template. It does not explain valid values, formats, or defaults, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'Get domain / VHOST report for a Dokku app,' naming a specific action and resource. This cleanly separates it from siblings like app_report, app_config, or app_url, which target other aspects of an app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to prefer this tool over siblings such as app_report or app_url. The use case is implied by the domain/VHOST focus, but there are no exclusions, conditions, or alternative tool pointers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_logsApp LogsA

Fetch recent logs for a Dokku app.

Side effects: none (read-only). Default lines=50; hard maximum is 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden. It explicitly discloses read-only behavior, states there are no side effects, and reveals a hard 500-line limit—useful operational details not captured elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences deliver purpose, side effects, and parameter constraints. Every clause contributes information, and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity two-parameter tool, the description is nearly complete: it covers purpose, side effects, and line limits. It does not explain alternative tools or error/edge cases, but the output schema presumably covers result structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides parameter names and defaults but no descriptions. The description adds meaning by clarifying that the target is a Dokku app, that lines has a default of 50, and that 500 is an enforced maximum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource: 'Fetch recent logs for a Dokku app.' This clearly identifies what the tool does and distinguishes it from sibling tools focused on configuration or app management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied through 'Fetch recent logs,' but the description does not explicitly say when to prefer this tool over alternatives or mention any prerequisites or context exclusions. It offers clear context, not explicit selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_reportApp ReportA

Get process report for a Dokku app (running state, scale, etc.).

Side effects: none (read-only). Runs ps:report <app>.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It explicitly declares 'Side effects: none (read-only)' and also reveals the underlying command ('Runs ps:report <app>'), giving useful operational context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the main purpose, and every sentence adds value: the purpose, the read-only safety note, and the underlying command. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only tool with an output schema available, this description covers the essential facts: what it does, that it is safe, and the underlying command. It could mention using list_apps to discover valid app names, but that is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that 'app' refers to a Dokku app and is used in the command `ps:report <app>`, but it does not elaborate on naming constraints, how to find valid app names, or error behavior for nonexistent apps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a precise resource ('process report for a Dokku app'), and examples of content ('running state, scale, etc.'). This clearly distinguishes it from sibling tools like app_config or app_logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: whenever a process-level report for a Dokku app is needed. However, it does not explicitly compare it to alternatives or state when not to use it, leaving some routing to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_urlApp UrlB

Derive public URLs for a Dokku app from its domains.

Side effects: none (read-only). Convenience wrapper over domains:report; defaults to https:// scheme.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
schemeNohttps

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly states 'Side effects: none (read-only)' and notes the default scheme, which are valuable behavioral traits. However, it does not disclose error handling, edge cases (e.g., no domains), or return format (though output schema covers that). This is adequate for a simple read-only wrapper but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The purpose is front-loaded, and the side-effect note and default are stated efficiently. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only wrapper with an output schema, the description covers purpose, side effects, and scheme default. It lacks explicit usage guidance, but that's a different dimension. The missing edge-case behavior is not critical given the tool's simplicity and the presence of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the scheme parameter by stating 'defaults to https:// scheme', which adds meaning. The app parameter is not described beyond its name, but it is self-evident from the tool's purpose. Partial compensation, not thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific purpose: deriving public URLs from domains. It clarifies it's a wrapper over domains:report, which hints at its relationship to lower-level tools, though it doesn't explicitly name sibling alternatives. The purpose is unambiguous and the verb+resource are clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like app_domains or domains:report. The phrase 'convenience wrapper' implies it's for convenience, but no conditions, exclusions, or when-not-to-use scenarios are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_appCreate AppA

Create a new Dokku app.

Side effects: creates an application on the Dokku host. Requires DOKKU_MCP_MODE=read-write. App names must be lowercase alphanumeric with optional hyphens.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly discloses the side effect (creates an application on the Dokku host) and the mode requirement, which is essential for a mutating tool. It doesn't discuss duplicate-name behavior or reversibility, but the key mutation and prerequisite are stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with the core action first, followed by side effects, a requirement, and a naming constraint. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter creation tool, the description provides the essential behavioral context: what it does, what it requires, and the accepted name format. It doesn't cover failure modes or uniqueness rules, but those are not necessary for basic selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no description coverage for the `name` parameter, and the tool description compensates by specifying that app names must be lowercase alphanumeric with optional hyphens. It doesn't explicitly restate that the parameter is the app name, but that mapping is obvious from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (create) with a specific resource (a new Dokku app), making the tool's purpose immediately clear. It is distinct from sibling tools like list, logs, and restart, which handle different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the prerequisite (DOKKU_MCP_MODE=read-write) and makes the intended operation obvious. It doesn't explicitly enumerate when not to use it or compare to alternatives, but among the given siblings, none are alternatives for creating an app.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_appsList AppsA

List Dokku apps on the host.

Side effects: none (read-only). Respects DOKKU_APP_ALLOWLIST / DOKKU_APP_DENYLIST — denied apps are filtered out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it explicitly states 'Side effects: none (read-only)' and discloses behavior regarding DOKKU_APP_ALLOWLIST / DOKKU_APP_DENYLIST filtering. This gives an agent clear expectations beyond the bare operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short sentences that state purpose, side effects, and filtering behavior. Every sentence adds value, and the read-only note is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, zero parameters, and presence of an output schema, the description covers what matters: what it lists, that it is read-only, and how app filtering works. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema already covers this completely. Per the baseline rule for 0 parameters, no additional parameter explanation is needed, so the description earns a solid baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List Dokku apps on the host.' This distinguishes it from app-specific tools like app_report or app_logs by implying a broader listing scope, but it does not explicitly differentiate from siblings or name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over app_report, app_config, or other siblings. The read-only nature is stated, but there is no explicit context for when listing is appropriate versus fetching details for a single app.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_appRestart AppA

Restart all processes for a Dokku app.

Side effects: restarts the application (downtime possible). Requires DOKKU_MCP_MODE=read-write and confirm=True.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses the side effects (downtime possible) and the requirement for confirm=True and read-write mode, which are behavioral details beyond the schema. This is good for a mutation tool, though it could also mention reversibility or specific impact, but the key risks are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with the main action in the first sentence, followed by critical side effects and requirements in bullet-like lines. Every sentence adds value without redundancy, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given it's a simple two-parameter tool with an output schema (which handles return values) and no annotations, the description covers the essential behavioral aspects: side effects and prerequisites. It could be slightly improved by noting that the output schema will report the restart status, but that's minor; the description is sufficient for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. The description provides context that the 'confirm' parameter is required to be true, which adds meaning to the boolean. However, it doesn't describe the 'app' parameter beyond what the schema shows (just a string), leaving the agent to infer it's the app name. Somewhat helpful but not comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'restart' and the resource 'Dokku app' with context 'all processes'. It distinguishes the tool from siblings like create_app or scale_app, though it doesn't explicitly name a differentiating alternative, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when an app needs restarting) and explicitly states prerequisites (requires read-write mode and confirm=True). It doesn't explicitly state when not to use it or name alternatives, but the prerequisites are clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scale_appScale AppA

Scale process types for a Dokku app (e.g. web=2, worker=1).

Side effects: changes running process counts. Requires DOKKU_MCP_MODE=read-write and confirm=True.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
scaleYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description wisely discloses that the tool changes running process counts and requires a read-write mode plus confirmation. This meaningfully explains the side effects of calling the tool. It does not cover every possible nuance, but the key safety-relevant behavior is explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two crisp sentences, front-loading the core operation and example, then adding side effects and prerequisites. No filler or repetition exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no annotations, the description covers the essential operational context: purpose, parameter format, side effects, and required mode/confirmation. An output schema exists, so return-value details are not necessary. It could be more explicit about what happens to omitted process types, but it is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add value. It clarifies the scale parameter with the concrete example 'web=2, worker=1' and states that confirm=True is required. The app parameter is minimally but sufficiently identified as the target Dokku app.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific operation: scaling process types for a Dokku app, with the format 'web=2, worker=1'. This is distinct from all sibling tools, none of which perform scaling. The example further clarifies the intended semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful preconditions: DOKKU_MCP_MODE=read-write and confirm=True. However, it does not provide explicit when-to-use or when-not-to-use guidance relative to alternatives like restart_app or set_config. Usage context is mostly implied by the tool's name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_configSet ConfigA

Set one or more config vars on a Dokku app.

Side effects: updates environment variables; restarts the app unless no_restart=True. Requires DOKKU_MCP_MODE=read-write and confirm=True. Values are never echoed back in the response — only keys are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
pairsYes
confirmNo
no_restartNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states side effects (updates environment variables, restarts app unless no_restart=True), prerequisites (read-write mode, confirm=True), and a key behavioral trait (values are never echoed back, only keys). This is exemplary for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action is in the first sentence, followed by three tightly scoped sentences covering side effects, prerequisites, and response behavior. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with side effects, prerequisites, and a nested object parameter), the description covers the critical operational context: side effects, required mode, confirmation flag, and response behavior. It doesn't describe the output schema, but an output schema exists, so that's not required. Minor gap: it doesn't specify what happens if confirm=False, but the default in the schema implies it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the purpose of 'pairs' (config vars), 'no_restart' (controls restart side effect), and 'confirm' (required for write). It doesn't detail the 'app' parameter, but that is self-evident from the tool's purpose. The description adds meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Set') and resource ('config vars on a Dokku app'), and clearly distinguishes this from sibling tools like app_config (which likely reads config) and restart_app (which restarts). The title and description align, and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to update config vars) and explicitly notes prerequisites (DOKKU_MCP_MODE=read-write and confirm=True). It doesn't explicitly name alternatives or exclusions, but the sibling list and the clear mutation semantics make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.0
    • First observedapp_config
    • First observedapp_domains
    • First observedapp_logs
    • First observedapp_report
    • First observedapp_url
    • First observedcreate_app
    • First observedlist_apps
    • First observedrestart_app
    • First observedscale_app
    • First observedset_config

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation4/5

Most tools are clearly distinct: list_apps is the only app-level listing, app_report/app_config/app_logs/app_domains/app_url each target a different aspect of an app, and the write tools (create_app, set_config, restart_app, scale_app) have distinct actions. The only mild overlap is app_domains vs app_url, since app_url is a convenience wrapper over domains:report, but the descriptions make the relationship clear.

Naming Consistency4/5

The naming pattern is mostly consistent: read operations use app_* (app_report, app_config, app_logs, app_domains, app_url) plus list_apps, and write operations use verb_app (create_app, set_config, restart_app, scale_app). The minor inconsistency is that list_apps breaks the app_* pattern and set_config/restart_app/scale_app use verb_app rather than app_verb, but the overall convention is still predictable.

Tool Count5/5

10 tools is well-scoped for a Dokku MCP server. The read-only surface covers the most common inspection needs (list, report, config, logs, domains, URL), and the write surface covers the core app lifecycle operations (create, config, restart, scale). No tool feels redundant or unnecessary.

Completeness4/5

The tool surface covers the primary Dokku workflows: listing/creating apps, inspecting app state/config/logs/domains, updating config, restarting, and scaling. Obvious gaps include app deletion, app destruction, and process management (e.g. ps:scale is covered but ps:restart is not), but these are reasonable omissions for a safe MCP server and agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Securely inspect and operate self-hosted infrastructure including Linux host health, Docker containers and logs, Dokploy deployments, and OCI resources through a narrowly scoped, auditable MCP gateway.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server to inspect allowlisted Docker containers, systemd services, JSONL logs, and HTTP health endpoints without arbitrary shell access.
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    A structured SSH management service that exposes command execution, file transfer, background jobs, GPU monitoring, systemd operations, and port forwarding as MCP tools with strict security and explicit input schemas.
    19
    1
    -
  • F
    license
    B
    quality
    B
    maintenance
    Enables safe VPS diagnostics and Docker/Docker Compose management over SSH, providing predefined read-only and mutating tools for system monitoring, container inspection, and Compose orchestration without exposing arbitrary shell execution.
    26
    -