Skip to main content
Glama
RepoAssay

Repo Test Architect

Audit Projects

audit_projects
Read-onlyIdempotent

Returns raw per-project audit artifacts for supported roots and flags unsupported roots for project-audits/v1. Use analyze_repository for a complete first-pass review.

Instructions

Return raw per-project audit artifacts for all detected supported roots and report unsupported roots. Use when a downstream specialist tool needs project-audits/v1; for a complete first-pass review, prefer analyze_repository.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
goTargetNo
repoRootYesRepository root path.
changedPathsNoOptional repository-relative source paths to limit target selection inside detected projects.
excludeProjectRootsNoOptional exact project roots or subtree patterns such as examples/** to exclude before auditing detected projects.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rootYes
auditsYes
summaryYes
schemaVersionYes
skippedProjectsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.0.0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$id": "project-audits-v1.schema.json",
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "audits": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "adapterId": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "audit": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "coveredButRisky": {
      +                "type": "array"
      +              },
      +              "profile": {
      +                "type": "object"
      +              },
      +              "risks": {
      +                "type": "array"
      +              },
      +              "schemaVersion": {
      +                "const": "audit/v1"
      +              },
      +              "skipped": {
      +                "type": "array"
      +              },
      +              "untestedCandidates": {
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "schemaVersion",
      +              "profile",
      +              "untestedCandidates",
      +              "coveredButRisky",
      +              "skipped",
      +              "risks"
      +            ],
      +            "type": "object"
      +          },
      +          "projectId": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "projectRoot": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "projectId",
      +          "projectRoot",
      +          "adapterId",
      +          "audit"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "root": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "schemaVersion": {
      +      "const": "project-audits/v1"
      +    },
      +    "skippedProjects": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "adapterMatches": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "adapterId": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "matchedEcosystems": {
      +                  "items": {
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "matchedLanguages": {
      +                  "items": {
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "maturity": {
      +                  "enum": [
      +                    "supported",
      +                    "experimental",
      +                    "planned"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "adapterId",
      +                "maturity",
      +                "matchedEcosystems",
      +                "matchedLanguages"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "ecosystems": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "languages": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "projectId": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "projectRoot": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "reason": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "supportStatusReason": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "projectId",
      +          "projectRoot",
      +          "reason",
      +          "ecosystems",
      +          "languages",
      +          "adapterMatches",
      +          "supportStatusReason"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "summary": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "auditedProjectCount": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "projectCount": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "skippedProjectCount": {
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "projectCount",
      +        "auditedProjectCount",
      +        "skippedProjectCount"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "schemaVersion",
      +    "root",
      +    "summary",
      +    "audits",
      +    "skippedProjects"
      +  ],
      +  "title": "Project Audits Artifact",
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so the safety profile is covered. The description still adds the artifact contract name (project-audits/v1) and the behavior of reporting unsupported roots, which is useful context beyond the annotations.

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?

Two sentences, zero filler, with the primary purpose front-loaded and the alternative routing placed second. Every clause earns its place.

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?

An output schema exists, so return-value documentation is not required, and the description still names the artifact version and the unsupported-root reporting behavior. It is nearly complete for a 4-parameter tool, with only minor gaps in how output is surfaced.

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?

At 75% schema description coverage with nested objects (goTarget), the schema largely documents its own parameters. The description adds no parameter-level detail such as how changedPaths interacts with target selection or how excludeProjectRoots patterns are matched, so it does not exceed the schema baseline.

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?

States a specific verb and resource ('Return raw per-project audit artifacts') plus a scope ('all detected supported roots') and a side output ('report unsupported roots'). It also implicitly separates itself from summarize_project_audits and analyze_repository by claiming raw artifacts rather than a reviewed summary.

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?

Gives an explicit use condition ('when a downstream specialist tool needs project-audits/v1') and names the alternative for the other case ('for a complete first-pass review, prefer analyze_repository'). Nothing is left to inference.

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