Files
OSIT-AE-API-FastAPI/tests/mcp_docker_explorer.py
Scott Idem d321b94395 chore(tests): organize test scripts and beautify account creation email
- Moved scattered Python test scripts from root and 'admin/development/' to 'tests/'.
- Beautified the HTML email body for account creation links in 'app/methods/person_methods.py' with a modern responsive design.
2026-01-15 14:38:00 -05:00

61 lines
2.6 KiB
Python

import asyncio
import sys
import json
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_docker_mcp_explorer():
# Define the server parameters to run the Docker MCP server via npx
# Using the official Docker MCP server from the Model Context Protocol organization
server_params = StdioServerParameters(
command="npx",
args=["-y", "@modelcontextprotocol/server-docker"],
env=None
)
print("--- Connecting to Docker MCP Server ---")
try:
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the session
print("Initializing session...")
await session.initialize()
# 1. List available tools
print("\n--- Available Tools ---")
tools_result = await session.list_tools()
for tool in tools_result.tools:
print(f"- {tool.name}: {tool.description}")
# 2. Call 'docker_list_containers'
print("\n--- Calling 'docker_list_containers' ---")
# The official server tool name is 'docker_list_containers'
# It doesn't require arguments for a basic list
containers_result = await session.call_tool("docker_list_containers", arguments={})
# The result comes back as a list of Content objects
if containers_result.content:
for item in containers_result.content:
if item.type == 'text':
# Parse the text (which is usually a JSON string for this tool)
try:
containers = json.loads(item.text)
print(f"Found {len(containers)} containers:")
for c in containers:
status = c.get('Status', 'Unknown')
names = ", ".join(c.get('Names', []))
print(f" [{c.get('Id')[:12]}] {names} ({status})")
except json.JSONDecodeError:
print(item.text)
else:
print("No containers found or empty response.")
except Exception as e:
print(f"\nError: {e}")
if "npx" in str(e):
print("Ensure 'npx' is installed and available in your PATH.")
if __name__ == "__main__":
asyncio.run(run_docker_mcp_explorer())