Skip to main content
Glama
houtini-ai

Better Google Search Console

by houtini-ai

list_properties

View all Google Search Console properties accessible to your service account, including permission levels and local sync status for SEO analysis.

Instructions

List all Google Search Console properties accessible via the service account, with permission level and local sync status. Usually not needed — setup handles this automatically.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Main handler function that executes the list_properties tool logic. Calls GscClient.listProperties() to fetch properties from the API, then enriches each property with local sync status (lastSyncedAt, rowCount, dbPath) by checking for existing database files.
    export async function listProperties(gscClient: GscClient): Promise<PropertyStatus[]> {
      const properties = await gscClient.listProperties();
      const dataDir = getDataDir();
      const results: PropertyStatus[] = [];
    
      for (const prop of properties) {
        const dbFilename = sanitizeSiteUrl(prop.siteUrl) + '.db';
        const dbPath = join(dataDir, dbFilename);
        let lastSyncedAt: string | null = null;
        let rowCount: number | null = null;
    
        if (existsSync(dbPath)) {
          const db = new Database(dbPath);
          try {
            const meta = db.getPropertyMeta(prop.siteUrl);
            lastSyncedAt = meta?.lastSyncedAt || null;
            rowCount = db.getRowCount();
          } finally {
            db.close();
          }
        }
    
        results.push({
          siteUrl: prop.siteUrl,
          permissionLevel: prop.permissionLevel,
          lastSyncedAt,
          rowCount,
          dbPath: existsSync(dbPath) ? dbPath : null,
        });
      }
    
      return results;
    }
  • src/server.ts:336-348 (registration)
    Tool registration for 'list_properties'. Takes no input parameters (empty schema) and returns a JSON array of PropertyStatus objects. Wraps the listProperties handler function with error handling.
    server.tool(
      'list_properties',
      'List all Google Search Console properties accessible via the service account, with permission level and local sync status. Usually not needed — setup handles this automatically.',
      {},
      async () => {
        try {
          const properties = await listProperties(gscClient);
          return { content: [{ type: 'text', text: JSON.stringify(properties, null, 2) }] };
        } catch (error) {
          return { content: [{ type: 'text', text: JSON.stringify({ error: (error as Error).message }) }], isError: true };
        }
      }
    );
  • Type definition for the tool's output. PropertyStatus extends GscProperty with local sync metadata: lastSyncedAt timestamp, rowCount of synced data, and dbPath to the local database file.
    export interface PropertyStatus extends GscProperty {
      lastSyncedAt: string | null;
      rowCount: number | null;
      dbPath: string | null;
    }
  • Core API client method that calls the Google Search Console API to list all accessible properties. Returns array of GscProperty objects with siteUrl and permissionLevel.
    async listProperties(): Promise<GscProperty[]> {
      const response: any = await withRetry(() => this.searchconsole.sites.list());
      const sites = response.data.siteEntry || [];
      return sites.map((site: any) => ({
        siteUrl: site.siteUrl,
        permissionLevel: site.permissionLevel,
      }));
    }
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool lists properties 'accessible via the service account' (implying authentication needs) and includes 'permission level and local sync status' in the output, which adds useful context beyond a basic list. However, it doesn't cover potential rate limits, error conditions, or response format details, leaving some behavioral aspects unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured: two sentences that efficiently convey the tool's purpose and usage guidance. Every word earns its place, with no redundancy or unnecessary details, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is reasonably complete. It explains what the tool does, what information it returns, and when to use it. However, without an output schema, it could benefit from more detail on the response structure (e.g., format of 'permission level' and 'sync status'), though the lack of complexity keeps this from being a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (since there are no parameters to describe). The description doesn't need to add parameter semantics, so a baseline score of 4 is appropriate. It correctly implies no inputs are required, aligning with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List all Google Search Console properties accessible via the service account, with permission level and local sync status.' This specifies the verb ('List'), resource ('Google Search Console properties'), and key output details. However, it doesn't explicitly differentiate from sibling tools like 'sync_all_properties' or 'check_sync_status' beyond mentioning 'local sync status'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: 'Usually not needed — setup handles this automatically.' This clearly indicates that the tool is primarily for debugging or manual checks rather than routine operations, helping the agent avoid unnecessary invocations. No alternatives are named, but the context is sufficient for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/houtini-ai/better-search-console'

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