Install @hypnosis/docker-mcp-server from npm
Install exact version 2.0.1. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact @hypnosis/docker-mcp-server@2.0.1Universal Docker MCP server for AI assistants (Cursor, Claude Desktop). Manage Docker containers, execute commands, query databases, and handle environment configurations — all through natural language
Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 2.0.1. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact @hypnosis/docker-mcp-server@2.0.1| Canonical slug | docker-mcp-server-d5209960 | Deployment | Local Only |
|---|---|---|---|
| Canonical package | npm:@hypnosis/docker-mcp-server | Repository | hypnosis/docker-mcp-server |
| First published | — | Latest release | — |
| Last security verification | — | Classification confidence | 90% |
| Publication | Draft | Official distribution | Not verified |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| npm | @hypnosis/docker-mcp-server | 2.0.1 | 2 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| npm@hypnosis/docker-mcp-server | 2.0.1Current | Sep 5, 2026 | 10 toolsSucceeded · 0 resources · 0 prompts | Evidence restricted |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
No public current-version evidence is available yet.
| Tool | Category | Annotations | Risk |
|---|---|---|---|
docker_composeReads what the project declares: config for the resolved compose file, env for the variables with the file each came from. Both read files rather than a running process — a variable here is what was written down, not what the container now holds. What is actually running is docker_container.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"config",
"env"
],
"description": "config: the compose configuration, as fields and as the file itself. env: the variables the project declares, each naming the file it came from."
},
"service": {
"type": "string",
"description": "Service name as written in the compose file. Narrows the answer to this one service."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"resolve": {
"type": "boolean",
"description": "Substitute variables the way Docker does before starting anything, which is what turns declared ports into published ones. Costs a call to docker compose. Default: false.",
"default": false
},
"mask": {
"type": "boolean",
"description": "Hide values whose key names a secret. Default: true.",
"default": true
}
},
"required": [
"action"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"config",
"env"
]
},
"project": {
"type": [
"string",
"null"
]
},
"compose_file": {
"type": [
"string",
"null"
]
},
"resolved": {
"type": "boolean"
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"image": {
"type": [
"string",
"null"
]
},
"ports": {
"type": "array",
"items": {
"type": "string"
}
},
"volumes": {
"type": "array",
"items": {
"type": "string"
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
}
},
"restart": {
"type": [
"string",
"null"
]
},
"healthcheck": {
"type": "boolean"
}
}
}
},
"volumes": {
"type": "array",
"items": {
"type": "string"
}
},
"networks": {
"type": "array",
"items": {
"type": "string"
}
},
"text": {
"type": "string"
},
"service": {
"type": [
"string",
"null"
]
},
"variables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
},
"service": {
"type": [
"string",
"null"
]
},
"source": {
"type": "string",
"enum": [
"env_file",
"compose"
]
},
"file": {
"type": [
"string",
"null"
]
},
"masked": {
"type": "boolean"
}
}
}
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Read the compose configuration",
"readOnlyHint": true
} | — | Read only | — |
docker_compose_controlBrings the stack up or takes it down, and reports the containers standing afterwards as read from the daemon, not as compose described them. A stack that half came up says so instead of passing for a success. Taking volumes down with it destroys their data and is refused without confirm.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"up",
"down"
],
"description": "up: create and start the services, always in the background. down: stop and remove the containers of the project."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"services": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these services, for action up. Default: every service of the file."
},
"build": {
"type": "boolean",
"description": "Rebuild the images before starting, for action up. Default: false.",
"default": false
},
"scale": {
"type": "object",
"description": "How many copies of a service to run, for action up: {\"web\": 3}."
},
"volumes": {
"type": "boolean",
"description": "Delete the volumes of the project along with the containers, for action down. The data inside them is destroyed and does not come back, so the call is refused without confirm. Default: false.",
"default": false
},
"removeOrphans": {
"type": "boolean",
"description": "Remove containers left behind by services no longer in the file, for action down. Default: false.",
"default": false
},
"timeout": {
"type": "number",
"description": "Seconds each container gets to shut down before Docker kills it, for action down. Default: 10.",
"default": 10
},
"confirm": {
"type": "string",
"description": "Written out as \"# CONFIRMED-DESTRUCTIVE\", this allows deleting volumes for one call. Anything else leaves the refusal standing."
}
},
"required": [
"action"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"up",
"down"
]
},
"project": {
"type": [
"string",
"null"
]
},
"compose_file": {
"type": [
"string",
"null"
]
},
"services": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"service": {
"type": "string"
},
"state": {
"type": "string"
},
"health": {
"type": [
"string",
"null"
],
"enum": [
"healthy",
"unhealthy",
"starting",
null
]
}
}
}
},
"removed": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"destroyed": {
"type": "array",
"items": {
"type": "string"
}
},
"confirmed": {
"type": "boolean"
},
"output": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Start or stop the whole stack",
"destructiveHint": true,
"idempotentHint": true
} | — | DestructiveIdempotent | — |
docker_containerLists the containers of a project with their state, health and published ports, or measures with stats what one service consumes right now. A project name no container carries is refused with the names that exist, so an empty list means the host itself runs nothing under compose. Moving a container between states is docker_container_control.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"stats"
],
"description": "list: every container of the project, with state and health. stats: CPU, memory, network and disk of one service, read at this moment."
},
"service": {
"type": "string",
"description": "Service name as written in the compose file. Required by action stats."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host. Omitted with action list: every container the host runs under compose."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
}
},
"required": [
"action"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"stats"
]
},
"project": {
"type": [
"string",
"null"
]
},
"containers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"service": {
"type": "string"
},
"project": {
"type": "string"
},
"state": {
"type": "string"
},
"health": {
"type": [
"string",
"null"
],
"enum": [
"healthy",
"unhealthy",
"starting",
null
]
},
"image": {
"type": "string"
},
"ports": {
"type": "array",
"items": {
"type": "string"
}
},
"created": {
"type": "string"
}
}
}
},
"stats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"service": {
"type": "string"
},
"name": {
"type": "string"
},
"cpu_percent": {
"type": "number"
},
"memory_bytes": {
"type": "number"
},
"memory_limit_bytes": {
"type": "number"
},
"memory_percent": {
"type": "number"
},
"net_rx_bytes": {
"type": "number"
},
"net_tx_bytes": {
"type": "number"
},
"block_read_bytes": {
"type": "number"
},
"block_write_bytes": {
"type": "number"
}
}
}
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "List containers and measure usage",
"readOnlyHint": true
} | — | Read only | — |
docker_container_controlMoves one service between states — start, stop, restart — and reports where it stood before and where it stands now, with changed saying whether the call did anything at all. A stop that ran out of time comes back killed with its exit code, never as a clean stop. The whole stack at once is docker_compose_control.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start",
"stop",
"restart"
],
"description": "start: bring the container up. stop: shut it down, giving it timeout seconds. restart: stop then start, keeping the same container."
},
"service": {
"type": "string",
"description": "Service name as written in the compose file."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"timeout": {
"type": "number",
"description": "Seconds the container gets to shut down before Docker kills it, for stop and restart. Default: 10.",
"default": 10
}
},
"required": [
"action",
"service"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start",
"stop",
"restart"
]
},
"service": {
"type": "string"
},
"project": {
"type": [
"string",
"null"
]
},
"timeout": {
"type": [
"number",
"null"
]
},
"state_before": {
"type": [
"string",
"null"
]
},
"state_after": {
"type": [
"string",
"null"
]
},
"health": {
"type": [
"string",
"null"
],
"enum": [
"healthy",
"unhealthy",
"starting",
null
]
},
"restart_count": {
"type": [
"number",
"null"
]
},
"changed": {
"type": "boolean"
},
"killed": {
"type": [
"boolean",
"null"
]
},
"exit_code": {
"type": [
"number",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Start, stop or restart a container",
"destructiveHint": true,
"idempotentHint": true
} | — | DestructiveIdempotent | — |
docker_dbquery runs a statement against a database container, status asks the database about itself — version, size, uptime. PostgreSQL, MySQL/MariaDB, Redis, MongoDB and SQLite are spoken to through the client the image carries. A database that refuses answers with its exit code, not with a failed call. A statement that destroys data needs # CONFIRMED-DESTRUCTIVE.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"query",
"status"
],
"description": "query runs a statement and brings back what the client printed. status asks the database about itself: version, size, uptime, and whether it answers at all."
},
"service": {
"type": "string",
"description": "Database service name as written in the compose file."
},
"query": {
"type": "string",
"description": "Statement in the language of this database — SQL, a Redis command, a MongoDB expression. Required by action query, unused by status. A statement that destroys a database or a whole keyspace is refused until it carries # CONFIRMED-DESTRUCTIVE."
},
"database": {
"type": "string",
"description": "Database name. Default: the one the container was started with."
},
"user": {
"type": "string",
"description": "Database user. Default: the one the container was started with."
},
"format": {
"type": "string",
"enum": [
"table",
"csv"
],
"description": "How the client lays out rows. Default: table. Only PostgreSQL has a CSV flag.",
"default": "table"
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
}
},
"required": [
"action",
"service"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"service": {
"type": "string"
},
"project": {
"type": [
"string",
"null"
]
},
"engine": {
"type": [
"string",
"null"
]
},
"query": {
"type": "string"
},
"output": {
"type": "string"
},
"stderr": {
"type": "string"
},
"exit_code": {
"type": "number"
},
"clipped_bytes": {
"type": "number"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"health": {
"type": "string",
"enum": [
"healthy",
"unhealthy"
]
},
"version": {
"type": [
"string",
"null"
]
},
"size": {
"type": [
"string",
"null"
]
},
"connections": {
"type": [
"number",
"null"
]
},
"uptime": {
"type": [
"string",
"null"
]
},
"memory": {
"type": [
"string",
"null"
]
},
"details": {
"type": "object"
},
"message": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Ask a database",
"destructiveHint": true
} | — | Destructive | — |
docker_db_adminbackup takes a dump of a database container, restore fills the database from one. The answer names the file, its size and whether it was read back: a call that says done without naming a file of known size says nothing. Restore overwrites what is there and is refused without confirm — take a backup here first.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"backup",
"restore"
],
"description": "backup writes a dump inside the container and reads it back to say how large it is. restore fills the database from a dump that is already there, overwriting what it holds."
},
"service": {
"type": "string",
"description": "Service name as written in the compose file."
},
"file": {
"type": "string",
"description": "Path of the dump inside the container. Required by action restore. For backup the default is a name with the time of day under /backups, which must be a directory the container already has."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"format": {
"type": "string",
"enum": [
"sql",
"custom",
"tar",
"directory"
],
"description": "Shape of the dump, for action backup. Default: the one this engine dumps in — an archive for PostgreSQL, plain SQL for MySQL, its own archive for MongoDB. A format the client has no flag for is refused."
},
"compress": {
"type": "boolean",
"description": "Compress the dump, for action backup. Only where the client compresses by itself. Default: true.",
"default": true
},
"tables": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these tables, for action backup. Default: the whole database. MongoDB takes one collection at a time."
},
"database": {
"type": "string",
"description": "Which database to fill, for action restore. Default: the one the container was started with."
},
"clean": {
"type": "boolean",
"description": "Drop what is already there before writing, for action restore. Archive backups only (.dump, .backup) for PostgreSQL. Default: false.",
"default": false
},
"dataOnly": {
"type": "boolean",
"description": "Write the rows and leave the schema alone, for action restore. Default: false.",
"default": false
},
"schemaOnly": {
"type": "boolean",
"description": "Write the schema and none of the rows, for action restore. Default: false.",
"default": false
},
"confirm": {
"type": "string",
"description": "Written out as \"# CONFIRMED-DESTRUCTIVE\", this allows one restore to overwrite the database. Anything else leaves the refusal standing."
}
},
"required": [
"action",
"service"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"backup",
"restore"
]
},
"service": {
"type": "string"
},
"project": {
"type": [
"string",
"null"
]
},
"engine": {
"type": [
"string",
"null"
]
},
"file": {
"type": [
"string",
"null"
]
},
"bytes": {
"type": [
"number",
"null"
]
},
"verified": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"confirmed": {
"type": "boolean"
},
"restarted": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Dump a database or fill it from a dump",
"destructiveHint": true
} | — | Destructive | — |
docker_execRuns a command inside a service container and brings back its exit code, with stdout and stderr apart. exit_code null means the command never ran and reason says why; an empty stdout means it ran and said nothing. What destroys data is refused until the command carries # CONFIRMED-DESTRUCTIVE. Reading logs, asking a database and taking dumps have tools of their own.Input schema{
"type": "object",
"properties": {
"service": {
"type": "string",
"description": "Service name as written in the compose file."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"command": {
"type": "string",
"description": "The command line as it would be typed inside the container: \"npm test\", \"alembic upgrade head\". What destroys data — wiping a directory, dropping files — is refused until the line carries # CONFIRMED-DESTRUCTIVE."
},
"user": {
"type": "string",
"description": "Run as this user instead of the one the image declares. Default: the image user."
},
"workdir": {
"type": "string",
"description": "Where inside the container the command runs. Default: working_dir of this service in the compose file, and the directory of the image where the file names none."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"interactive": {
"type": "boolean",
"description": "Give the command a terminal. Both streams then arrive merged in stdout with stderr empty, and nothing is sent to its input: one call is not a dialogue. Default: false.",
"default": false
}
},
"required": [
"service",
"command"
]
}Output schema{
"type": "object",
"properties": {
"service": {
"type": "string"
},
"project": {
"type": [
"string",
"null"
]
},
"command": {
"type": "string"
},
"exit_code": {
"type": [
"number",
"null"
]
},
"stdout": {
"type": "string"
},
"stderr": {
"type": "string"
},
"clipped_bytes": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Run a command in a container",
"destructiveHint": true
} | — | Destructive | — |
docker_healthservices says whether the containers answer their healthchecks, server whether this process is well, profiles which Docker hosts it was given. The word healthy means something different in each branch, so every answer explains its own verdict. A service that declares no healthcheck is said to have none, not counted as sick.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"services",
"server",
"profiles"
],
"description": "services: what each container says about itself through its own healthcheck. server: whether the daemon answers this server and what it knows about itself. profiles: the hosts it was configured with, read from the configuration and not connected to."
},
"services": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these services, for action services. Default: every container of the project."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
}
},
"required": [
"action"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"services",
"server",
"profiles"
]
},
"overall": {
"type": [
"string",
"null"
],
"enum": [
"healthy",
"degraded",
"unhealthy",
null
]
},
"project": {
"type": [
"string",
"null"
]
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"service": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"healthy",
"unhealthy",
"starting",
"none",
"not_running"
]
},
"checks": {
"type": "number"
},
"failures": {
"type": "number"
}
}
}
},
"server": {
"type": "object",
"properties": {
"uptime_seconds": {
"type": "number"
},
"docker": {
"type": "object",
"properties": {
"reached": {
"type": "boolean"
},
"latency_ms": {
"type": [
"number",
"null"
]
},
"mode": {
"type": "string",
"enum": [
"local",
"remote"
]
},
"profile": {
"type": [
"string",
"null"
]
},
"message": {
"type": [
"string",
"null"
]
}
}
},
"project": {
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"name": {
"type": [
"string",
"null"
]
},
"message": {
"type": [
"string",
"null"
]
}
}
},
"adapters": {
"type": "array",
"items": {
"type": "string"
}
},
"cached_projects": {
"type": "number"
},
"memory_mb": {
"type": "number"
}
}
},
"profiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"is_default": {
"type": "boolean"
},
"mode": {
"type": "string",
"enum": [
"local",
"remote"
]
},
"host": {
"type": [
"string",
"null"
]
}
}
}
},
"broken": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
}
}
},
"source": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Check services, this server, and the hosts it knows",
"readOnlyHint": true
} | — | Read only | — |
docker_logsReads what a container printed, line by line: each line carries the stream that wrote it and its own time. An empty list means the window held nothing, not that the read failed, and lines dropped from the middle are counted rather than quietly lost. Narrow the window with since and until instead of raising the count.Input schema{
"type": "object",
"properties": {
"service": {
"type": "string",
"description": "Service name as written in the compose file."
},
"project": {
"type": "string",
"description": "Which compose project. Default: the project of the working directory. A name matching nothing is an error, not a fall back to every container on the host."
},
"compose_path": {
"type": "string",
"description": "Where the compose file is: the file itself, or the directory holding it. Needed only when no container of the host carries the project label — a project that was never brought up there. A directory holding several compose files is refused with their names rather than guessed through."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
},
"lines": {
"type": "number",
"minimum": 1,
"description": "How many of the last lines to read. Default: 100.",
"default": 100
},
"since": {
"type": "string",
"description": "Only lines written after this: a duration (30s, 10m, 2h, 1d), a date (2026-08-22T10:00:00Z) or a UNIX timestamp. Applied before lines counts them."
},
"until": {
"type": "string",
"description": "Only lines written before this, written the same way as since."
},
"follow": {
"type": "boolean",
"description": "Wait for lines still to come; the call returns what arrived within 10s or 1024KB.",
"default": false
}
},
"required": [
"service"
]
}Output schema{
"type": "object",
"properties": {
"service": {
"type": "string"
},
"project": {
"type": [
"string",
"null"
]
},
"date": {
"type": [
"string",
"null"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stream": {
"type": "string",
"enum": [
"stdout",
"stderr"
]
},
"time": {
"type": [
"string",
"null"
]
},
"text": {
"type": "string"
}
}
}
},
"returned_lines": {
"type": "number"
},
"since": {
"type": [
"string",
"null"
]
},
"until": {
"type": [
"string",
"null"
]
},
"truncated": {
"type": "boolean"
},
"truncated_reason": {
"type": [
"string",
"null"
],
"enum": [
"bytes",
"time",
null
]
},
"clipped_lines": {
"type": "number"
},
"follow": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "Read container logs",
"readOnlyHint": true
} | — | Read only | — |
docker_resourceimages, volumes and networks list what a host holds; disk counts what they take, with unused bytes apart from the total. An empty list means asked and found nothing, which is not the same as never asked. What a running container consumes right now is docker_container with stats.Input schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"images",
"volumes",
"networks",
"disk"
],
"description": "images, volumes and networks each list what the host holds — volumes with their size and how many containers hold them. disk answers where the space went: four groups, each with what it takes and what nothing uses."
},
"profile": {
"type": "string",
"description": "Which Docker host, by profile name. Default: the profile marked as default."
}
},
"required": [
"action"
]
}Output schema{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"images",
"volumes",
"networks",
"disk"
]
},
"count": {
"type": "number"
},
"total_bytes": {
"type": [
"number",
"null"
]
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"size_bytes": {
"type": "number"
},
"created": {
"type": "string"
}
}
}
},
"volumes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"driver": {
"type": "string"
},
"mountpoint": {
"type": "string"
},
"created": {
"type": "string"
},
"size_bytes": {
"type": [
"number",
"null"
]
},
"used_by": {
"type": [
"number",
"null"
]
}
}
}
},
"networks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"driver": {
"type": "string"
},
"scope": {
"type": "string"
},
"created": {
"type": "string"
}
}
}
},
"disk": {
"type": "array",
"items": {
"type": "object",
"properties": {
"group": {
"type": "string",
"enum": [
"images",
"containers",
"volumes",
"build_cache"
]
},
"count": {
"type": "number"
},
"active": {
"type": "number"
},
"size_bytes": {
"type": "number"
},
"unused_bytes": {
"type": "number"
}
}
}
},
"reason": {
"type": [
"string",
"null"
]
},
"legend": {
"type": "object",
"description": "What the words in this answer mean. A key names the field before the value — \"state=running\", \"containers[].health=unhealthy\" — and only the values this answer used are listed.",
"additionalProperties": {
"type": "string"
}
}
}
}Annotations{
"title": "List host resources and measure disk usage",
"readOnlyHint": true
} | — | Read only | — |
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: npm install --save-exact @hypnosis/docker-mcp-server@2.0.1
Docker MCP Server exposed 10 tools during independent protocol observation, including docker_compose, docker_compose_control, docker_container, docker_container_control, docker_db, docker_db_admin, docker_exec, docker_health, and others.
The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.
These internal links are derived from strong identity fields such as the implementation name, package, repository, vendor, and listing name—not generic description prose.
Association is based on retained identity fields; it does not by itself prove first-party publication.
Curated product and capability guides containing this catalog record.