Skip to main content
Glama

PumpGTM MCP server

Audit content for AI search

start_content_audit

Audit the company's own content for how easily AI engines can answer from it and cite it: its website (source site, optional https URL on the company's domain, one of its brandDomains or a subdomain; default its website) or a public GitHub repository (source github, repository owner/name, optional folder path; needs GitHub connected on the Integrations page). Reads up to 30 pages, scores each from 0 to 100 and matches it to the tracked questions. Costs at most costs.websiteAuditAtMost or costs.githubAuditAtMost Energy for reading and scoring pages, within today's daily limit: the audit stops when the limit is reached and keeps the pages it read. One audit runs at a time; read progress and results with get_content_audit. With confirmed=true it returns the started audit. Without confirmed=true nothing runs and nothing is charged: it returns the Energy cost, the Energy left and today's AI search limit, with the call that runs it, or the money answer when Energy can't cover it. Tell the customer the cost, then call again with confirmed=true. If AI search is not on for this workspace yet, this turns it on (aiSearchTurnedOn in the result says what it starts with). Only for a connection created by a current owner or admin of this workspace.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
nextNoPreview only: the exact call that runs the step once the customer agrees; null when it can't run now.
auditNoRun: the audit that started; follow it with get_content_audit.
energyYesWhat the step costs and the Energy left.
targetNoPreview: the website URL or repository that would be audited.
messageNoA plain summary of the price or of what started, to pass on to the customer.
startedNofalse on the priced preview: nothing ran or was charged.
maxPagesNoPreview: the most pages the audit reads.
readyToRunNoPreview only: true when Energy and today's limit allow the step; then call next after the customer agrees.
aiSearchTurnedOnNoPresent only when this call turned AI search on: what it now runs with. Tell the customer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "confirmed": {
      -        "default": false,
      -        "description": "false (default) prices the step and changes nothing; true runs it.",
      -        "type": "boolean"
      -      },
      -      "site": {
      -        "description": "An https URL on the company's domain, one of its brandDomains or a subdomain. Defaults to the company website.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source": {
      -        "const": "site",
      -        "type": "string"
      -      },
      -      "workspaceId": {
      -        "description": "A teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.",
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "source"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "confirmed": {
      -        "default": false,
      -        "description": "false (default) prices the step and changes nothing; true runs it.",
      -        "type": "boolean"
      -      },
      -      "path": {
      -        "description": "Only this folder of the repository.",
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "repository": {
      -        "description": "A public GitHub repository as owner/name.",
      -        "maxLength": 140,
      -        "minLength": 3,
      -        "type": "string"
      -      },
      -      "source": {
      -        "const": "github",
      -        "type": "string"
      -      },
      -      "workspaceId": {
      -        "description": "A teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.",
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "source",
      -      "repository"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "confirmed": {
      +        "default": false,
      +        "description": "false prices the step and changes nothing; true runs it and spends Energy. Send true only after the customer agrees to the price.",
      +        "type": "boolean"
      +      },
      +      "site": {
      +        "description": "Where to start reading: an https URL on the company's domain, one of its brandDomains or a subdomain. Omit to audit the company profile website.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source": {
      +        "const": "site",
      +        "description": "Audit pages of the company's own website.",
      +        "type": "string"
      +      },
      +      "workspaceId": {
      +        "description": "A teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.",
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "source"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "confirmed": {
      +        "default": false,
      +        "description": "false prices the step and changes nothing; true runs it and spends Energy. Send true only after the customer agrees to the price.",
      +        "type": "boolean"
      +      },
      +      "path": {
      +        "description": "A folder of the repository to audit, such as docs. Omit to audit the whole repository.",
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "repository": {
      +        "description": "The public GitHub repository to audit, as owner/name, such as acme/docs.",
      +        "maxLength": 140,
      +        "minLength": 3,
      +        "type": "string"
      +      },
      +      "source": {
      +        "const": "github",
      +        "description": "Audit Markdown in a public GitHub repository (needs GitHub connected on the Integrations page).",
      +        "type": "string"
      +      },
      +      "workspaceId": {
      +        "description": "A teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.",
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "source",
      +      "repository"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "aiSearchTurnedOn": {
      +      "description": "Present only when this call turned AI search on: what it now runs with. Tell the customer.",
      +      "type": "string"
      +    },
      +    "audit": {
      +      "additionalProperties": {},
      +      "description": "Run: the audit that started; follow it with get_content_audit.",
      +      "properties": {
      +        "auditId": {
      +          "description": "The audit's id.",
      +          "type": "string"
      +        },
      +        "failure": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "code": {
      +                  "description": "A stable reason code, such as no_pages_found or audit_failed.",
      +                  "type": "string"
      +                },
      +                "message": {
      +                  "description": "The reason in plain words to pass on, with what to do next.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "code",
      +                "message"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Why a failed audit stopped, in words to pass on; null otherwise."
      +        },
      +        "finishedAt": {
      +          "description": "When it finished; null while running.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "pagesAudited": {
      +          "description": "Pages read and scored so far.",
      +          "type": "number"
      +        },
      +        "pagesFound": {
      +          "description": "Pages found to audit.",
      +          "type": "number"
      +        },
      +        "source": {
      +          "description": "site or github.",
      +          "type": "string"
      +        },
      +        "startedAt": {
      +          "description": "When the audit started.",
      +          "type": "string"
      +        },
      +        "status": {
      +          "description": "running, completed or failed.",
      +          "type": "string"
      +        },
      +        "target": {
      +          "description": "The website URL or repository (owner/name/folder) audited.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "auditId",
      +        "source",
      +        "target",
      +        "status",
      +        "pagesFound",
      +        "pagesAudited",
      +        "startedAt",
      +        "finishedAt",
      +        "failure"
      +      ],
      +      "type": "object"
      +    },
      +    "energy": {
      +      "additionalProperties": {},
      +      "description": "What the step costs and the Energy left.",
      +      "properties": {
      +        "cost": {
      +          "description": "Preview: the step's Energy cost.",
      +          "type": "number"
      +        },
      +        "costAbout": {
      +          "description": "Run: about the Energy this step is charging.",
      +          "type": "number"
      +        },
      +        "costAtMost": {
      +          "description": "Run: the most Energy this step can charge.",
      +          "type": "number"
      +        },
      +        "costIsMaximum": {
      +          "description": "Preview: true when cost is a ceiling rather than an estimate.",
      +          "type": "boolean"
      +        },
      +        "dailyLimitUsd": {
      +          "description": "Preview: today's AI search limit in US dollars.",
      +          "type": "number"
      +        },
      +        "nextStep": {
      +          "description": "Preview when Energy is short: how the customer gets more.",
      +          "type": "string"
      +        },
      +        "remaining": {
      +          "description": "Energy the workspace has left (null when unreadable).",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "remainingBefore": {
      +          "description": "Run: Energy the workspace had before the step.",
      +          "type": "number"
      +        },
      +        "required": {
      +          "description": "Preview when Energy is short: Energy the step needs.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "todayLimitRemaining": {
      +          "description": "Preview: Energy today's AI search limit still allows.",
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "maxPages": {
      +      "description": "Preview: the most pages the audit reads.",
      +      "type": "number"
      +    },
      +    "message": {
      +      "description": "A plain summary of the price or of what started, to pass on to the customer.",
      +      "type": "string"
      +    },
      +    "next": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": {},
      +              "description": "The exact arguments to send, including confirmed=true.",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "reason": {
      +              "description": "Why and when to make the call.",
      +              "type": "string"
      +            },
      +            "requiresConfirmation": {
      +              "description": "True: call it only after the customer agrees to the price.",
      +              "type": "boolean"
      +            },
      +            "tool": {
      +              "description": "The tool to call to run the step.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments",
      +            "reason",
      +            "requiresConfirmation"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Preview only: the exact call that runs the step once the customer agrees; null when it can't run now."
      +    },
      +    "readyToRun": {
      +      "description": "Preview only: true when Energy and today's limit allow the step; then call next after the customer agrees.",
      +      "type": "boolean"
      +    },
      +    "started": {
      +      "description": "false on the priced preview: nothing ran or was charged.",
      +      "type": "boolean"
      +    },
      +    "target": {
      +      "description": "Preview: the website URL or repository that would be audited.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "energy"
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) it discloses real operational behavior: up to 30 pages read, per-source Energy caps, stopping at the daily limit while keeping pages already read, one audit at a time, and that it silently enables AI search if off. It also flags an authorization constraint ('Only for a connection created by a current owner or admin'). The only gap is that it doesn't spell out what happens to a partially-completed audit's stored state beyond the kept pages.

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

Conciseness4/5

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

Purpose and the two source modes are front-loaded, and nearly every clause carries actionable content (cost caps, limit behavior, confirmation flow). It is a dense semicolon-chained block that could be broken into clearer sentences, but nothing is truly wasted.

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

Completeness5/5

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

For a non-idempotent, Energy-spending mutation with a oneOf schema, the description covers cost model, confirmation protocol, concurrency limit, permission requirement and the AI-search side effect; an output schema exists so return shape needn't be explained. An agent has everything needed to call it safely in two steps.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents site, path, repository, confirmed and workspaceId in detail, so the baseline is 3. The description restates the same semantics (default website when site omitted, optional folder path, owner/name format) without adding syntax or edge-case detail beyond the schema.

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

Purpose5/5

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

Opens with a specific verb and resource ('Audit the company's own content') plus the exact question it answers ('how easily AI engines can answer from it and cite it'), then enumerates the two source modes (site vs github) so the agent can pick a branch immediately. It also names the sibling that reads results (get_content_audit), separating the start from the read.

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?

Explicitly routes the agent: start here, then 'read progress and results with get_content_audit'. It states the required two-call pattern (price first without confirmed=true, then 'Tell the customer the cost, then call again with confirmed=true') and adds the prerequisite that a GitHub source 'needs GitHub connected on the Integrations page'.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.