Skip to main content
Glama

Repo Health Auditor

repo-health-for-agents
Read-only

Comprehensive GitHub repository health audit. Scores repos 0-100 across 8 categories: activity, community, maintenance, contributors, security (via OpenSSF Scorecard), CI/CD, documentation, and popularity. Returns letter grade, per-category scores, 20+ individual checks with evidence, and prioritized recommendations sorted by impact. All checks run via GitHub API — no clone required. Free: 50 calls/IP/day.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub owner/name (e.g. vercel/next.js)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
repoYes
gradeYes
checksYes
metadataYes
evaluated_atYes
overall_scoreYes
default_branchYes
category_scoresYes
recommendationsYes
scorecard_detailNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed39 schema fields changed
    • removedInput schema / properties / branch
      Removed value: -{
      -  "description": "Optional branch (defaults to default branch on GitHub)",
      -  "maxLength": 80,
      -  "type": "string"
      -}
    • removedInput schema / properties / deployed_url
      Removed value: -{
      -  "description": "Optional deployed base URL to probe (e.g. https://agentic.clawbots.org)",
      -  "format": "uri",
      -  "maxLength": 512,
      -  "type": "string"
      -}
    • changedInput schema / properties / repo / description
      Previous value: -"GitHub owner/name (e.g. 0xAxiom/axiom-agentic-tools)"New value: +"GitHub owner/name (e.g. vercel/next.js)"
    • removedOutput schema / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / category_scores / additionalProperties
      Removed value: -false
    • addedOutput schema / properties / category_scores / properties / activity
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / category_scores / properties / ci_cd
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / category_scores / properties / community
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / category_scores / properties / contributors
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / category_scores / properties / discovery
      Removed value: -{
      -  "maximum": 25,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedOutput schema / properties / category_scores / properties / documentation
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / category_scores / properties / maintenance
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / category_scores / properties / payments
      Removed value: -{
      -  "maximum": 25,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedOutput schema / properties / category_scores / properties / popularity
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / category_scores / properties / protocols
      Removed value: -{
      -  "maximum": 25,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / category_scores / properties / registries
      Removed value: -{
      -  "maximum": 25,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedOutput schema / properties / category_scores / properties / security
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / category_scores / required
      Removed value: -[
      -  "discovery",
      -  "protocols",
      -  "payments",
      -  "registries"
      -]
    • removedOutput schema / properties / checks / items / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / checks / items / properties / category / enum
      Removed value: -[
      -  "discovery",
      -  "protocols",
      -  "payments",
      -  "registries"
      -]
    • removedOutput schema / properties / checks / items / properties / evidence / maxLength
      Removed value: -512
    • removedOutput schema / properties / checks / items / properties / evidence / minLength
      Removed value: -1
    • removedOutput schema / properties / checks / items / properties / id / enum
      Removed value: -[
      -  "has-agent-card",
      -  "agent-card-valid-a2a-v0.3",
      -  "has-mcp-json",
      -  "mcp-jsonrpc-reachable",
      -  "has-openapi",
      -  "has-llms-txt",
      -  "x402-envelope-valid",
      -  "facilitator-is-cdp",
      -  "bazaar-discoverable-flag",
      -  "erc8257-registered",
      -  "erc8004-agent-id",
      -  "ci-demo-reachability",
      -  "schema-drift-check",
      -  "readme-mentions-marketplaces",
      -  "has-license"
      -]
    • addedOutput schema / properties / checks / items / properties / max_score
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / checks / items / properties / score
      Added value: +{
      +  "type": "integer"
      +}
    • removedOutput schema / properties / checks / items / properties / weight
      Removed value: -{
      -  "maximum": 25,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / checks / items / required
      Removed value: -[
      -  "id",
      -  "category",
      -  "passed",
      -  "evidence",
      -  "weight"
      -]
    • removedOutput schema / properties / checks / maxItems
      Removed value: -15
    • removedOutput schema / properties / checks / minItems
      Removed value: -15
    • removedOutput schema / properties / deployed_url
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / evidence
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "github_contents_url": {
      -      "maxLength": 512,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "probes": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "status": {
      -            "maximum": 599,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "url": {
      -            "maxLength": 512,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "url",
      -          "status"
      -        ],
      -        "type": "object"
      -      },
      -      "maxItems": 16,
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "github_contents_url",
      -    "probes"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / grade
      Added value: +{
      +  "enum": [
      +    "A+",
      +    "A",
      +    "B+",
      +    "B",
      +    "C",
      +    "D",
      +    "F"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / marketplace_listing_eligibility
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "agentic_market": {
      -      "type": "boolean"
      -    },
      -    "erc_8257": {
      -      "type": "boolean"
      -    },
      -    "mcp_registry": {
      -      "type": "boolean"
      -    },
      -    "smithery": {
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "agentic_market",
      -    "mcp_registry",
      -    "erc_8257",
      -    "smithery"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / metadata
      Added value: +{
      +  "properties": {
      +    "age_days": {
      +      "type": "integer"
      +    },
      +    "archived": {
      +      "type": "boolean"
      +    },
      +    "bus_factor": {
      +      "type": "integer"
      +    },
      +    "contributors": {
      +      "type": "integer"
      +    },
      +    "created": {
      +      "type": "string"
      +    },
      +    "forks": {
      +      "type": "integer"
      +    },
      +    "language": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "last_push": {
      +      "type": "string"
      +    },
      +    "license": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "open_issues": {
      +      "type": "integer"
      +    },
      +    "stars": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • removedOutput schema / properties / next_check_at
      Removed value: -{
      -  "description": "ISO 8601 timestamp suggesting when the caller should re-invoke this tool. Derived from the tool's recurringHint.intervalSeconds.",
      -  "format": "date-time",
      -  "type": "string"
      -}
    • removedOutput schema / properties / prioritized_fixes
      Removed value: -{
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "maxLength": 240,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "check_id": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "score_lift": {
      -        "maximum": 25,
      -        "minimum": 1,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "check_id",
      -      "score_lift",
      -      "action"
      -    ],
      -    "type": "object"
      -  },
      -  "maxItems": 15,
      -  "type": "array"
      -}
    • addedOutput schema / properties / recommendations
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "action": {
      +        "type": "string"
      +      },
      +      "category": {
      +        "type": "string"
      +      },
      +      "check_id": {
      +        "type": "string"
      +      },
      +      "current": {
      +        "type": "string"
      +      },
      +      "potential_lift": {
      +        "type": "integer"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / scorecard_detail
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "reason": {
      +        "type": "string"
      +      },
      +      "score": {
      +        "type": "integer"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "repo",
      -  "deployed_url",
      -  "default_branch",
      -  "overall_score",
      -  "category_scores",
      -  "checks",
      -  "marketplace_listing_eligibility",
      -  "prioritized_fixes",
      -  "evidence",
      -  "evaluated_at"
      -]New value: +[
      +  "repo",
      +  "default_branch",
      +  "overall_score",
      +  "grade",
      +  "category_scores",
      +  "checks",
      +  "recommendations",
      +  "metadata",
      +  "evaluated_at"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / deployed_url / description
      Previous value: -"Optional deployed base URL to probe (e.g. https://axiom-agentic-tools.vercel.app)"New value: +"Optional deployed base URL to probe (e.g. https://agentic.clawbots.org)"
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "category_scores": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "discovery": {
      +          "maximum": 25,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "payments": {
      +          "maximum": 25,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "protocols": {
      +          "maximum": 25,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "registries": {
      +          "maximum": 25,
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "discovery",
      +        "protocols",
      +        "payments",
      +        "registries"
      +      ],
      +      "type": "object"
      +    },
      +    "checks": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "enum": [
      +              "discovery",
      +              "protocols",
      +              "payments",
      +              "registries"
      +            ],
      +            "type": "string"
      +          },
      +          "evidence": {
      +            "maxLength": 512,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "id": {
      +            "enum": [
      +              "has-agent-card",
      +              "agent-card-valid-a2a-v0.3",
      +              "has-mcp-json",
      +              "mcp-jsonrpc-reachable",
      +              "has-openapi",
      +              "has-llms-txt",
      +              "x402-envelope-valid",
      +              "facilitator-is-cdp",
      +              "bazaar-discoverable-flag",
      +              "erc8257-registered",
      +              "erc8004-agent-id",
      +              "ci-demo-reachability",
      +              "schema-drift-check",
      +              "readme-mentions-marketplaces",
      +              "has-license"
      +            ],
      +            "type": "string"
      +          },
      +          "passed": {
      +            "type": "boolean"
      +          },
      +          "weight": {
      +            "maximum": 25,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "category",
      +          "passed",
      +          "evidence",
      +          "weight"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 15,
      +      "minItems": 15,
      +      "type": "array"
      +    },
      +    "default_branch": {
      +      "type": "string"
      +    },
      +    "deployed_url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "evaluated_at": {
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "evidence": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "github_contents_url": {
      +          "maxLength": 512,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "probes": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "status": {
      +                "maximum": 599,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "url": {
      +                "maxLength": 512,
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "url",
      +              "status"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 16,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "github_contents_url",
      +        "probes"
      +      ],
      +      "type": "object"
      +    },
      +    "marketplace_listing_eligibility": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "agentic_market": {
      +          "type": "boolean"
      +        },
      +        "erc_8257": {
      +          "type": "boolean"
      +        },
      +        "mcp_registry": {
      +          "type": "boolean"
      +        },
      +        "smithery": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "agentic_market",
      +        "mcp_registry",
      +        "erc_8257",
      +        "smithery"
      +      ],
      +      "type": "object"
      +    },
      +    "next_check_at": {
      +      "description": "ISO 8601 timestamp suggesting when the caller should re-invoke this tool. Derived from the tool's recurringHint.intervalSeconds.",
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "overall_score": {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "prioritized_fixes": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "action": {
      +            "maxLength": 240,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "check_id": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "score_lift": {
      +            "maximum": 25,
      +            "minimum": 1,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "check_id",
      +          "score_lift",
      +          "action"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 15,
      +      "type": "array"
      +    },
      +    "repo": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "repo",
      +    "deployed_url",
      +    "default_branch",
      +    "overall_score",
      +    "category_scores",
      +    "checks",
      +    "marketplace_listing_eligibility",
      +    "prioritized_fixes",
      +    "evidence",
      +    "evaluated_at"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark readOnly and openWorld, and the description enriches them by explaining that all checks run via GitHub API (external network call), the rate limit (50 calls/IP/day), and the detailed output structure (letter grade, per-category scores, checks with evidence, prioritized recommendations). It does not contradict 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?

The description is two sentences with zero fluff. The first sentence leads with the core purpose and packs in the scoring range, categories, and outputs. The second sentence adds operational details (API-based, no clone, free tier). Every clause carries useful information.

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?

With an output schema present, the description doesn't need to elaborate on return fields. It covers the essential additional operational context: the 8 categories, security source (OpenSSF Scorecard), API-only execution (no clone), and rate limit. This is enough for an agent to decide when to invoke the tool and what to expect.

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?

The input schema already fully covers the single 'repo' parameter with a pattern and example, achieving 100% schema description coverage. The description adds general context about GitHub repos but no parameter-specific detail, so the baseline of 3 is appropriate.

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?

The description opens with 'Comprehensive GitHub repository health audit', using a specific verb and resource. It enumerates 8 categories and output artifacts, making it unmistakable. Sibling tools are entirely different domains (revenue, token strategy, etc.), so it is clearly differentiated.

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

Usage Guidelines4/5

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

The description provides clear context: it audits GitHub repos, runs all checks via API, requires no clone, and offers free calls with a rate limit. It doesn't explicitly state when not to use it or name alternatives, but given the sibling contexts, the use case is unambiguous.

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.