Skip to main content
Glama
andyl25

Google Cloud MCP Server

by andyl25

get-project-id

Retrieve the active Google Cloud project ID to configure authentication and access cloud services through the Google Cloud MCP Server.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Primary implementation of the 'get-project-id' tool: registers the tool with empty input schema and provides the async handler function that fetches the current project ID (from stateManager or getProjectId helper), retrieves recent project IDs, formats a markdown response with current and recent projects, handles errors gracefully.
    // Tool to get the current project ID
    server.tool(
      'get-project-id',
      {},
      async (_, context) => {
        try {
          // Get the current project ID from the state manager first
          let projectId = stateManager.getCurrentProjectId();
          
          // If not available in state manager, try to get it from auth
          if (!projectId) {
            projectId = await getProjectId();
          }
          
          const recentProjectIds = await getRecentProjectIds();
          
          let markdown = `# Current Google Cloud Project\n\nCurrent project ID: \`${projectId}\`\n\n`;
          
          if (recentProjectIds.length > 0) {
            markdown += '## Recently Used Projects\n\n';
            for (const id of recentProjectIds) {
              markdown += `- \`${id}\`${id === projectId ? ' (current)' : ''}\n`;
            }
          }
          
          return {
            content: [{
              type: 'text',
              text: markdown
            }]
          };
        } catch (error: any) {
          console.error('Error in get-project-id tool:', error);
          return {
            content: [{
              type: 'text',
              text: `# Error Getting Project ID\n\nFailed to get project ID: ${error.message}`
            }]
          };
        }
      }
    );
  • src/index.ts:165-165 (registration)
    Top-level registration call that invokes registerProjectTools(server), which in turn registers the 'get-project-id' tool.
    registerProjectTools(server);
  • Key helper function 'getProjectId()' called by the tool handler to retrieve the actual project ID from multiple fallback sources: state manager, environment variables, credentials file, config manager, or GoogleAuth client.
    export async function getProjectId(requireAuth = true): Promise<string> {
      try {
        // First check the state manager (fastest and most reliable method)
        const stateProjectId = stateManager.getCurrentProjectId();
        if (stateProjectId) {
          console.log(`Using project ID from state manager: ${stateProjectId}`);
          return stateProjectId;
        }
        
        // Next check environment variable
        if (process.env.GOOGLE_CLOUD_PROJECT) {
          console.log(`Using project ID from environment: ${process.env.GOOGLE_CLOUD_PROJECT}`);
          // Store in state manager for future use
          await stateManager.setCurrentProjectId(process.env.GOOGLE_CLOUD_PROJECT);
          return process.env.GOOGLE_CLOUD_PROJECT;
        }
        
        // Check if we have credentials file and try to extract project ID from it
        if (process.env.GOOGLE_APPLICATION_CREDENTIALS) {
          try {
            const credentialsPath = process.env.GOOGLE_APPLICATION_CREDENTIALS;
            console.log(`Attempting to read project ID from credentials file: ${credentialsPath}`);
            
            if (fs.existsSync(credentialsPath)) {
              const credentialsContent = fs.readFileSync(credentialsPath, 'utf8');
              const credentials = JSON.parse(credentialsContent);
              
              if (credentials.project_id) {
                console.log(`Found project ID in credentials file: ${credentials.project_id}`);
                // Store in state manager for future use
                await stateManager.setCurrentProjectId(credentials.project_id);
                return credentials.project_id;
              }
            }
          } catch (fileError) {
            console.error(`Error reading credentials file: ${fileError instanceof Error ? fileError.message : String(fileError)}`);
            // Continue to next method
          }
        }
        
        // Next check if we have a configured default project ID
        try {
          await configManager.initialize();
          const configuredProjectId = configManager.getDefaultProjectId();
          if (configuredProjectId) {
            console.log(`Using project ID from config: ${configuredProjectId}`);
            // Store in state manager for future use
            await stateManager.setCurrentProjectId(configuredProjectId);
            return configuredProjectId;
          }
        } catch (configError) {
          console.error(`Config error: ${configError instanceof Error ? configError.message : String(configError)}`);
          // Continue to next method
        }
        
        // Fall back to getting it from auth client
        try {
          console.log('Attempting to get project ID from auth client...');
          const auth = await initGoogleAuth(requireAuth);
          if (!auth) {
            console.error('Authentication client not available');
            if (requireAuth) {
              throw new Error('Google Cloud authentication not available. Please configure authentication to access project ID.');
            }
            return 'unknown-project';
          }
          
          console.log('Auth client available, requesting project ID...');
          const projectId = await auth.getProjectId();
          
          if (!projectId) {
            console.error('Auth client returned empty project ID');
            if (requireAuth) {
              throw new Error('Could not determine Google Cloud project ID. Please set GOOGLE_CLOUD_PROJECT environment variable or use the set-project-id tool.');
            }
            return 'unknown-project';
          }
          
          console.log(`Got project ID from auth client: ${projectId}`);
          
          // Store in state manager for future use
          await stateManager.setCurrentProjectId(projectId);
          
          return projectId;
        } catch (authError) {
          console.error(`Auth error while getting project ID: ${authError instanceof Error ? authError.message : String(authError)}`);
          if (requireAuth) {
            throw authError;
          }
          return 'unknown-project';
        }
      } catch (error) {
        console.error(`Project ID error: ${error instanceof Error ? error.message : String(error)}`);
        if (requireAuth) {
          throw error;
        }
        return 'unknown-project';
      }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/andyl25/googlecloud-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server