@edjl/gcloud-mcp
Version:
Google Cloud Platform tools for MCP (Model Context Protocol)
83 lines • 3.21 kB
JavaScript
import { z } from 'zod';
import { executeGCloudCommand } from '../../utils/gcloud.js';
const inputSchema = z.object({
project: z.string().optional().describe('Project ID (uses current project if not specified)'),
filter: z.string().optional().describe('Filter expression for service accounts'),
limit: z.number().optional().default(100).describe('Maximum number of service accounts to return'),
});
const gcloudServiceAccountsListTool = {
name: 'service_accounts_list',
description: 'List service accounts in the project',
category: 'iam',
subcategory: 'service-accounts',
version: '1.0.0',
inputSchema,
handler: async (input) => {
const params = inputSchema.parse(input);
let command = 'gcloud iam service-accounts list';
if (params.project) {
command += ` --project="${params.project}"`;
}
if (params.filter) {
command += ` --filter="${params.filter}"`;
}
command += ` --limit=${params.limit}`;
command += ' --format=json';
const result = await executeGCloudCommand(command);
if (result.exitCode !== 0) {
return {
content: [{
type: 'text',
text: `Error listing service accounts: ${result.stderr}`
}],
isError: true
};
}
try {
const accounts = JSON.parse(result.stdout);
if (!Array.isArray(accounts) || accounts.length === 0) {
return {
content: [{
type: 'text',
text: 'No service accounts found'
}]
};
}
let output = `Service Accounts (${accounts.length} found):\n\n`;
accounts.forEach((account) => {
output += `Email: ${account.email}\n`;
output += ` Name: ${account.name || 'N/A'}\n`;
output += ` Display Name: ${account.displayName || 'N/A'}\n`;
output += ` Project: ${account.projectId || 'N/A'}\n`;
output += ` Unique ID: ${account.uniqueId || 'N/A'}\n`;
if (account.disabled) {
output += ` Status: DISABLED\n`;
}
else {
output += ` Status: ACTIVE\n`;
}
if (account.description) {
output += ` Description: ${account.description}\n`;
}
output += '\n';
});
return {
content: [{
type: 'text',
text: output.trim()
}]
};
}
catch (error) {
return {
content: [{
type: 'text',
text: `Error parsing service accounts data: ${error instanceof Error ? error.message : String(error)}`
}],
isError: true
};
}
}
};
export default gcloudServiceAccountsListTool;
//# sourceMappingURL=service-accounts-list.js.map