44 lines
1.8 KiB
JavaScript
44 lines
1.8 KiB
JavaScript
import { z } from 'zod';
|
|
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
|
import { dockerManager } from './dockerManager.js';
|
|
export function registerDockerListContainersTool(server) {
|
|
server.registerTool('docker_list_containers', {
|
|
title: 'Docker List Containers',
|
|
description: 'List Docker containers started by this server with their current status and port mappings.',
|
|
inputSchema: {
|
|
includeDockerStatus: z
|
|
.boolean()
|
|
.optional()
|
|
.default(false)
|
|
.describe('Also query the Docker daemon for live status of each tracked container.'),
|
|
},
|
|
}, async ({ includeDockerStatus }) => {
|
|
try {
|
|
await dockerManager.ensureReachable();
|
|
const tracked = dockerManager.listTracked();
|
|
if (!includeDockerStatus) {
|
|
return jsonResult({ containers: tracked });
|
|
}
|
|
const docker = dockerManager.getDocker();
|
|
const enriched = await Promise.all(tracked.map(async (c) => {
|
|
try {
|
|
const info = await docker.getContainer(c.id).inspect();
|
|
return {
|
|
...c,
|
|
state: info.State?.Status ?? 'unknown',
|
|
running: info.State?.Running ?? false,
|
|
exitCode: info.State?.ExitCode ?? null,
|
|
};
|
|
}
|
|
catch {
|
|
return { ...c, state: 'unknown', running: false, exitCode: null };
|
|
}
|
|
}));
|
|
return jsonResult({ containers: enriched });
|
|
}
|
|
catch (error) {
|
|
return errorResult(toErrorMessage(error));
|
|
}
|
|
});
|
|
}
|
|
//# sourceMappingURL=listContainers.js.map
|