Podman MCP Server
Provides comprehensive container management capabilities including listing, starting, stopping, and restarting containers, executing commands inside containers, viewing logs, managing images, and monitoring resource usage through Podman's container runtime.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Podman MCP Serverlist all running containers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Podman MCP Server
Container management made accessible through the Model Context Protocol.
Overview
The Podman MCP Server exposes container management capabilities through MCP, allowing AI tools and applications to:
List and inspect running containers
Start, stop, and restart containers
Execute commands inside containers
View container logs
Manage container images
Monitor container resource usage
Designed for seamless integration with the MCP Discovery Hub for automatic network discovery.
Related MCP server: mcp-podman-crunchtools
Features
Container Management
List containers: View all running or stopped containers
Container info: Inspect detailed container information
Start/Stop/Restart: Control container lifecycle
Execute commands: Run commands inside containers
View logs: Access container logs with configurable line count
Resource stats: Monitor CPU, memory, and I/O usage
Image Management
List images: View all available container images
Pull images: Download images from registries
Network Discovery
Automatic broadcasting: Announces itself on the network via multicast
Zero-configuration: No manual registration needed
Multi-transport support: Works with HTTP and streamable-http
Installation
Prerequisites
Python 3.10+
Podman installed and running
uvpackage manager (orpip)
Setup
# Clone or navigate to project
cd podman-mcp-server
# Install dependencies
uv sync
# Or with pip:
pip install -r requirements.txtConfiguration
Environment Variables
# Transport mode
MCP_TRANSPORT=http # http, streamable-http, or stdio (default)
# Server settings
MCP_HOST=0.0.0.0 # Binding host
MCP_PORT=3001 # Server port
MCP_SERVER_NAME=Podman MCP Server # Display name
# Broadcasting (for MCP Discovery Hub)
MCP_ENABLE_BROADCAST=true # Enable/disable broadcasting
MCP_BROADCAST_INTERVAL=30 # Seconds between announcements.env File
Create a .env file in the project root:
MCP_TRANSPORT=http
MCP_PORT=3001
MCP_SERVER_NAME=Podman MCP Server
MCP_ENABLE_BROADCAST=true
MCP_BROADCAST_INTERVAL=30Usage
Start in HTTP Mode (with broadcasting)
# Using environment variables
MCP_TRANSPORT=http MCP_PORT=3001 uv run main.py
# Or with .env file
uv run main.pyStart in Streamable-HTTP Mode
MCP_TRANSPORT=streamable-http MCP_PORT=3001 uv run main.pyStart in Stdio Mode (for Claude)
# Default mode, works with Claude Desktop
uv run main.pyAvailable Tools
Containers
List Containers
list_containers(all: bool = False)List running containers (or all if all=true)
Example:
{
"method": "tools/call",
"params": {
"name": "list_containers",
"arguments": { "all": true }
}
}Container Info
container_info(container: str)Get detailed information about a specific container
Start Container
start_container(container: str)Start a stopped container
Stop Container
stop_container(container: str, timeout: int = 10)Stop a running container (gracefully, with timeout in seconds)
Restart Container
restart_container(container: str)Restart a container
Container Logs
container_logs(container: str, tail: int = 100)Get logs from a container (last N lines)
Run Container
run_container(
image: str,
name: str = None,
detach: bool = True,
ports: List[str] = [],
env: List[str] = [],
volumes: List[str] = []
)Run a new container
Example:
{
"method": "tools/call",
"params": {
"name": "run_container",
"arguments": {
"image": "nginx:latest",
"name": "my-webserver",
"ports": ["8080:80"],
"detach": true
}
}
}Remove Container
remove_container(container: str, force: bool = False)Remove a container (force if running)
Exec in Container
exec_container(container: str, command: List[str])Execute a command inside a container
Container Stats
container_stats(container: str = None, no_stream: bool = True)Get resource usage statistics for containers
Images
List Images
list_images(all: bool = False)List available container images
Pull Image
pull_image(image: str)Pull/download an image from a registry
Integration with MCP Discovery Hub
Automatic Discovery
When broadcasting is enabled, this server automatically registers with the MCP Discovery Hub:
Server broadcasts: Every 30 seconds, announces itself on
239.255.255.250:5353Hub discovers: Discovery hub receives announcement and probes the server
Tools registered: All 12 container management tools become available network-wide
Manual Registration
If running without broadcasting:
# Scan for the server manually
curl -X POST http://localhost:8000/scan \
-H "Content-Type: application/json" \
-d '{"ports": [3001]}'API Endpoints (When in HTTP Mode)
GET /
Server info endpoint
curl http://localhost:3001/Response:
{
"name": "Podman MCP Server",
"version": "1.0.0",
"protocol": "MCP Streamable HTTP",
"endpoint": "/mcp"
}POST /mcp
MCP protocol endpoint
All MCP communication happens here (initialize, tools/list, tools/call)
Use Cases
1. Container Orchestration
Use with AI tools to manage containerized applications:
"User: Start a new web server and configure it"
AI: I'll start an nginx container for you...
→ calls run_container(image="nginx", name="webserver", ports=["8080:80"])2. Monitoring and Debugging
Check container status and logs:
"User: What's the status of my database container?"
AI: Let me check the logs and stats...
→ calls container_logs(container="postgres", tail=50)
→ calls container_stats(container="postgres")3. Multi-Server Management
Deploy and manage containers across multiple hosts:
Host 1: Podman MCP Server (port 3001)
Host 2: Podman MCP Server (port 3001)
Host 3: MCP Discovery Hub (port 8000)
↓
All containers managed from single AI interface4. Development Workflows
Quickly spin up development environments:
"User: Set up a development database for testing"
AI: I'll create a PostgreSQL container for you...
→ calls run_container(
image="postgres:15",
name="dev-db",
env=["POSTGRES_PASSWORD=devpass"]
)Logs
Server logs are written to podman_mcp.log:
# View logs
tail -f podman_mcp.log
# Check for errors
grep ERROR podman_mcp.logTroubleshooting
Port Already in Use
# Use a different port
MCP_PORT=3002 uv run main.pyBroadcasting Not Working
Check multicast connectivity:
# Verify multicast is enabled
ip route show
# Check firewall
sudo firewall-cmd --add-service=mdns --permanentPodman Connection Error
Ensure Podman is running:
# Start Podman service
systemctl start podman
# Verify connection
podman psPerformance Considerations
Container operations: Most operations complete within 100-500ms
Log retrieval: Depends on log size and network speed
Broadcasting overhead: Minimal (30-byte UDP packets every 30 seconds)
Connection pooling: Configured with pool_size=5 for efficiency
Security
Best Practices
Run in isolated networks: Deploy in trusted network environments
Use firewall rules: Restrict access to the MCP port
Disable broadcasting in untrusted networks: Set
MCP_ENABLE_BROADCAST=falseMonitor logs: Regularly check for unauthorized access attempts
Limitations
No built-in authentication (rely on network security)
No resource quotas (AI can run unlimited containers)
Commands run with same privileges as Podman daemon
Consider adding a reverse proxy with authentication for production use.
Requirements
Python 3.10+
FastAPI
SQLAlchemy
FastMCP
python-dotenv
Contributing
Improvements welcome! Areas for enhancement:
Container networking configuration
Image building and pushing
Volume management
Container health monitoring
Network performance metrics
License
MIT License - See LICENSE file for details
Support
Issues: Report on GitHub
Documentation: See MCP Discovery Hub wiki
Examples: Check examples/ directory
Available Tools
12 toolscontainer_infoContainer infoB
Inspect a container by name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Inspect' implies a read-only operation, but it doesn't disclose whether this requires special permissions, what information is returned, or if there are rate limits. The description is too minimal for a mutation-heavy sibling context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's appropriately sized for a simple tool and front-loaded with the core action, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which handles return values) and high schema coverage, the description is minimally adequate. However, in a context with many sibling tools performing similar operations, it lacks differentiation and behavioral context that would help an agent choose correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter clearly documented as 'Container name or ID'. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('inspect') and resource ('container'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from siblings like 'container_stats' or 'container_logs', which also inspect containers but focus on specific aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'container_stats' (for performance metrics) and 'container_logs' (for log output), there's no indication of what 'inspect' specifically provides or when it's preferred over other inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_logsContainer logsB
Get logs from a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID | |
| tail | No | Number of lines to show from end of log |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get logs') but doesn't describe what 'logs' include (e.g., stdout/stderr, timestamps), whether this works for stopped containers, authentication needs, rate limits, or error conditions. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place, achieving ideal conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (reading logs), lack of annotations, and presence of an output schema (which handles return values), the description is minimally adequate. It states what the tool does but misses behavioral details and usage context. With an output schema, it doesn't need to explain returns, but other gaps keep it at a baseline level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear documentation for both parameters (container name/ID and tail lines). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. This meets the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('logs from a container'), making the purpose immediately understandable. It distinguishes from siblings like container_info (metadata) or exec_container (execute commands), though it doesn't explicitly mention these distinctions. The description is specific but lacks explicit sibling differentiation for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., container must be running), exclusions, or comparisons to siblings like container_stats (performance metrics) or list_containers (enumeration). Without any usage context, the agent must infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_statsContainer statsB
Get resource usage statistics for containers.
| Name | Required | Description | Default |
|---|---|---|---|
| container | No | Container name or ID (all containers if not specified) | |
| no_stream | No | Disable streaming stats and only pull the first result |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'gets' statistics, implying a read-only operation, but doesn't clarify aspects like whether it requires specific permissions, how it handles errors, if it's rate-limited, or what the output format entails. For a tool with no annotation coverage, this leaves significant behavioral gaps unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded and appropriately sized for its function, making it easy to parse quickly. Every word earns its place, resulting in a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is minimally adequate. The output schema exists, so the description doesn't need to explain return values, but it lacks details on behavioral aspects like error handling or performance implications. With no annotations and incomplete behavioral transparency, it meets a basic threshold but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already fully documents both parameters ('container' and 'no_stream'). The description adds no additional meaning beyond what the schema provides, such as explaining the implications of streaming vs. non-streaming or how container identification works. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('resource usage statistics for containers'), making it immediately understandable. It distinguishes itself from siblings like 'container_info' (general info) and 'container_logs' (logs) by focusing specifically on resource usage statistics. However, it doesn't explicitly contrast with all siblings, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'container_info' (which might include some stats) and 'list_containers' (for listing), there's no indication of when this tool is preferred or what its specific use cases are. The lack of any usage context or exclusions results in a minimal score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exec_containerExec in containerB
Execute a command inside a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | ||
| command | Yes | Command to execute |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the action but lacks behavioral details such as permissions required, whether it's interactive or batch, error handling, or output format. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, clearly front-loaded with the core action. It's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return values) and moderate complexity, the description is minimally complete but lacks context like usage scenarios or behavioral traits. It's adequate but with clear gaps in guidance and transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'command' has a description). The description implies parameters ('container', 'command') but adds no meaning beyond the schema, such as format examples or constraints. With partial schema coverage, it doesn't fully compensate, meeting the baseline for moderate coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a command') and target ('inside a container'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'run_container' or 'restart_container', which also involve container operations, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'run_container' (likely for starting containers) and 'container_logs' (for viewing logs), there's no indication of context, prerequisites, or exclusions for 'exec_container'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersList containersB
List containers (running by default, all if requested).
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Show all containers, not just running |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the default behavior (showing running containers) and the 'all' parameter option, but doesn't describe important behavioral aspects like: what information is returned in the list, whether it's paginated, format of returned data, authentication requirements, rate limits, or error conditions. For a tool with no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that efficiently conveys the core functionality. It's front-loaded with the main purpose and includes the key behavioral nuance. Every word earns its place with zero redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return values), 100% parameter schema coverage, and no annotations, the description provides the minimum viable context. It states what the tool does and mentions the key parameter behavior, but doesn't address important contextual aspects like when to use versus alternatives, authentication needs, or error handling. For a simple read operation, this is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the single 'all' parameter. The description adds marginal value by mentioning the default behavior ('running by default') and the effect of the parameter ('all if requested'), but doesn't provide additional semantic context beyond what's in the schema. This meets the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('containers'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'container_info' or 'list_images' by focusing specifically on container enumeration. However, it doesn't explicitly differentiate from 'container_stats' which also involves containers, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance - it mentions the default behavior (running containers) and the option to show all containers. However, it offers no explicit guidance on when to use this tool versus alternatives like 'container_info' for detailed information or 'container_stats' for performance metrics. No prerequisites, exclusions, or comparative context with sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesList imagesB
List container images.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Show all images including intermediate |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'List container images' implies a read-only operation but doesn't specify whether this requires permissions, how results are returned (e.g., pagination, format), or any rate limits. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just three words, front-loading the essential purpose without any wasted text. Every word earns its place, making it efficient for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, 100% schema coverage, output schema exists), the description is minimally adequate. However, with no annotations and multiple sibling tools, it lacks guidance on usage context and behavioral details, making it incomplete for optimal agent decision-making despite the structured support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the single parameter 'all'. The description adds no parameter information beyond what's in the schema, maintaining the baseline score of 3 since the schema does the heavy lifting for parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('container images'), making the tool's purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_containers' or 'container_info', which would require specifying what makes listing images distinct from those other listing/info operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_containers', 'container_info', and 'pull_image', there's no indication of when image listing is appropriate versus container listing or image pulling, leaving the agent without contextual usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_imagePull imageB
Pull a container image from a registry.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Image name with optional tag |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't reveal important behavioral aspects: whether it requires authentication to the registry, if it shows progress/output during pull, what happens if the image already exists locally, or potential rate limits. For a network operation with no annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise - a single sentence that states exactly what the tool does with zero wasted words. It's front-loaded with the core functionality and doesn't contain any unnecessary information or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (which handles return values) and 100% schema coverage for the single parameter, the description is minimally complete. However, for a tool that performs network operations and has multiple sibling tools in the container management domain, more context about registry authentication, error conditions, or relationship to other tools would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter 'image' is already documented in the schema. The description doesn't add any additional semantic context beyond what the schema provides - no examples of image naming conventions, registry URLs, or tag formats. Baseline 3 is appropriate when the schema does the documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('pull') and resource ('container image from a registry'), making the tool's purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_images' or 'run_container' which might also involve images, leaving room for ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_images' (to check existing images) and 'run_container' (which might pull images automatically), there's no indication of prerequisites, timing, or when to choose pull_image over other options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_containerRemove containerC
Remove a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID | |
| force | No | Force remove running container |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 states 'Remove a container' but doesn't explain if this is destructive, irreversible, requires specific permissions, or has side effects. The lack of detail makes it insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence, 'Remove a container.', which is front-loaded and wastes no words. It efficiently conveys the core action without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations, the description is incomplete. It doesn't cover behavioral aspects like destructiveness or permissions, and while an output schema exists, the description doesn't hint at return values or error conditions. More context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the parameters ('container' and 'force'). The description adds no additional meaning beyond what the schema provides, such as explaining the implications of the 'force' parameter. Baseline 3 is appropriate when the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Remove') and target ('a container'), which provides a basic purpose. However, it doesn't differentiate from sibling tools like 'stop_container' or specify what removal entails (e.g., deletion vs. stopping). This makes it vague compared to more specific alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'stop_container' or 'restart_container'. The description lacks context about prerequisites, consequences, or typical use cases, leaving the agent without clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_containerRestart containerB
Restart a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether this requires specific permissions, if it's destructive (likely yes, as it stops and starts a container), potential downtime effects, rate limits, or what the output schema returns. This leaves significant gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence ('Restart a container.') that is front-loaded and wastes no words. Every part of the sentence earns its place by directly stating the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with potential side effects), lack of annotations, and presence of an output schema, the description is incomplete. It doesn't address safety, behavioral context, or usage guidelines, though the output schema may cover return values. This is minimally adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'container' clearly documented in the schema. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, so it meets the baseline score of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restart') and resource ('a container'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'stop_container' and 'start_container' tools, which could be used in combination for similar effects, so it misses the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'stop_container' followed by 'start_container', or how it differs from 'exec_container' for restarting processes. It lacks context about prerequisites (e.g., container must be running) or exclusions, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_containerRun containerC
Run a new container.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Container image | |
| name | No | Optional name | |
| detach | No | Run in background | |
| ports | No | Port mappings (e.g., ['8080:80']) | |
| env | No | Environment variables (KEY=VAL) | |
| volumes | No | Volumes (e.g., ['/host:/container']) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Run a new container' implies a creation/mutation operation, but it doesn't disclose behavioral traits like whether it requires specific permissions, how it handles errors, if it's idempotent, what happens on conflicts (e.g., duplicate names), or the expected output format. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence 'Run a new container.' It's front-loaded and wastes no words, though this brevity contributes to gaps in other dimensions. Every word earns its place by stating the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which covers return values), 100% schema description coverage, and no annotations, the description is minimally complete but lacks context for a mutation tool. It doesn't address prerequisites, side effects, or error handling, which are important for an agent to use it correctly despite the structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters with clear descriptions and examples (e.g., for ports, volumes). The description adds no additional meaning beyond what the schema provides, such as explaining parameter interactions or defaults. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Run a new container' clearly states the action (run) and resource (container), but it's vague about scope and doesn't distinguish from siblings like 'start_container' (which likely starts existing containers) or 'exec_container' (which executes commands in running containers). It specifies 'new' which helps somewhat, but lacks detail about what 'run' entails compared to alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With siblings like 'start_container', 'restart_container', and 'exec_container', the description doesn't clarify that this is for creating and launching new containers from images, not managing existing ones. This leaves the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_containerStart containerB
Start a stopped container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Start a stopped container' implies a state-changing operation, it doesn't disclose important behavioral traits: whether this requires specific permissions, what happens if the container fails to start, whether it returns status information, or any rate limits. For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise at 4 words, front-loading the essential action and target. Every word earns its place with zero waste. This is an excellent example of efficient communication for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (state-changing operation), no annotations, but with complete input schema coverage and an output schema present, the description is minimally adequate. The output schema existence means the description needn't explain return values, but for a mutation tool among many siblings, it should provide more context about usage scenarios and behavioral expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'container' clearly documented as 'Container name or ID'. The description adds no additional parameter information beyond what the schema provides. According to scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start') and target resource ('a stopped container'), making the tool's purpose immediately understandable. It distinguishes from siblings like 'restart_container' (which implies container is already running) and 'run_container' (which likely creates and starts a new container). However, it doesn't explicitly mention these distinctions, keeping it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (container must be stopped), exclusions (cannot start already running containers), or when to choose 'restart_container' instead. With 11 sibling tools including closely related ones like 'restart_container' and 'stop_container', this lack of differentiation is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_containerStop containerB
Stop a running container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID | |
| timeout | No | Seconds to wait before killing container |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Stop' implies a state change, it doesn't clarify whether this is reversible, what permissions are required, or what happens to container data. The description lacks details about side effects, error conditions, or rate limits that would help the agent understand operational implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately front-loaded with the core action and target, making it easy for an agent to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutation tool with no annotations but has an output schema (which handles return values), the description is minimally adequate. However, for a tool that changes container state, more behavioral context would be helpful despite the output schema covering response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds no additional meaning about parameters beyond what's in the schema (e.g., it doesn't explain container identification nuances or timeout behavior implications). This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stop') and target ('a running container'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'restart_container' or 'remove_container', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'restart_container' or 'remove_container'. It doesn't mention prerequisites (e.g., container must be running) or exclusions, leaving the agent to infer usage context from the tool name alone.
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.
12 tool updates
v1.0.0- First observed
container_info - First observed
container_logs - First observed
container_stats - First observed
exec_container - First observed
list_containers - First observed
list_images - First observed
pull_image - First observed
remove_container - First observed
restart_container - First observed
run_container - First observed
start_container - First observed
stop_container
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose targeting specific container operations with no overlap. For example, list_containers, run_container, stop_container, and remove_container each handle different lifecycle stages without ambiguity.
All tools follow a consistent verb_noun pattern with snake_case throughout, such as list_containers, run_container, and stop_container. This predictability makes the tool set easy to navigate and understand.
With 12 tools, the server is well-scoped for container management, covering essential operations like listing, running, stopping, and inspecting containers. Each tool serves a clear purpose without bloat.
The tool set provides complete CRUD and lifecycle coverage for container management, including create (run_container), read (list_containers, container_info), update (restart_container, start/stop), and delete (remove_container), with no obvious gaps.
Maintenance
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
MCP Hub: AI service discovery, per-user OAuth, and multi-service workflow orchestration
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
MCP-Native LLM Orchestration Agent
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage and analyze containers across Docker and Podman through natural language, providing unified inspection, monitoring, and diagnostics.3-
- AlicenseBqualityBmaintenanceEnables container, image, pod, network, volume, and system management via Podman REST API. Supports rootful and rootless Podman operations.36AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to manage Docker containers through a secure MCP interface, supporting container lifecycle operations, log inspection, resource monitoring, and system diagnostics with role-based access control.3MIT
- AlicenseNot gradedqualityBmaintenanceEnables management of Podman containers, pods, images, and compose stacks via natural language, with support for container stats, logs, exec, health analysis, and a web dashboard.1MIT