@edjl/gcloud-mcp
Version:
Google Cloud Platform tools for MCP (Model Context Protocol)
91 lines • 3.62 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 secrets'),
limit: z.number().optional().default(100).describe('Maximum number of secrets to return'),
});
const gcloudSecretsListTool = {
name: 'secrets_list',
description: 'List secrets in Secret Manager',
category: 'secrets',
subcategory: 'secrets',
version: '1.0.0',
inputSchema,
handler: async (input) => {
const params = inputSchema.parse(input);
let command = 'gcloud secrets 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 secrets: ${result.stderr}`
}],
isError: true
};
}
try {
const secrets = JSON.parse(result.stdout);
if (!Array.isArray(secrets) || secrets.length === 0) {
return {
content: [{
type: 'text',
text: 'No secrets found'
}]
};
}
let output = `Secrets (${secrets.length} found):\n\n`;
secrets.forEach((secret) => {
const secretName = secret.name.split('/').pop();
output += `Secret: ${secretName}\n`;
if (secret.createTime) {
output += ` Created: ${new Date(secret.createTime).toLocaleString()}\n`;
}
if (secret.replication) {
if (secret.replication.automatic) {
output += ` Replication: Automatic\n`;
}
else if (secret.replication.userManaged) {
const locations = secret.replication.userManaged.replicas?.map((r) => r.location).join(', ') || 'N/A';
output += ` Replication: User-managed (${locations})\n`;
}
}
if (secret.labels) {
const labels = Object.entries(secret.labels).map(([k, v]) => `${k}=${v}`).join(', ');
output += ` Labels: ${labels}\n`;
}
if (secret.topics) {
output += ` Topics: ${secret.topics.length} configured\n`;
}
output += '\n';
});
output += '\nNote: Use secret_versions_list to see versions of a specific secret.';
return {
content: [{
type: 'text',
text: output.trim()
}]
};
}
catch (error) {
return {
content: [{
type: 'text',
text: `Error parsing secrets data: ${error instanceof Error ? error.message : String(error)}`
}],
isError: true
};
}
}
};
export default gcloudSecretsListTool;
//# sourceMappingURL=secrets-list.js.map