Skip to main content
Glama

Quorum — GitHub Metadata Analyzer

Turn GitHub repository metadata into a repeatable maintenance report.

Desktop interface

Short interaction recording

Implemented

  • Fetch repository metadata, open issues, pull requests and workflow runs.

  • Persist reports and prioritize suggested maintenance actions.

  • Responsive dashboard, REST endpoints and MCP tools.

Related MCP server: GitHub Health Monitor MCP

Stack and architecture

Python, FastAPI, HTTPX, SQLite, GitHub REST API and MCP.

Technical mechanisms and security

  • A fixed api.github.com client is separate from the scoring rules and replaced by fixtures in tests.

  • Repository references are validated and fetched lists are bounded. Scores are deterministic metadata heuristics; the tool does not inspect source-code correctness.

Local setup

Python 3.12.14 (see .python-version). Activate the virtual environment before the remaining commands.

python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
python -m pip install -c requirements-lock.txt -e ".[dev]"
uvicorn app.main:app --host 127.0.0.1 --port 8010

Configuration

Use .env.example for supported configuration and keep secrets outside Git. See configuration details for loading settings and optional services.

Database and upgrades

The SQLite schema initializes on startup. Database/capture paths are configurable; keep persistent data outside temporary build directories.

Verification

python -m pytest -q
python tests/check_contract.py
python tests/check_upgrade.py
python -m pip check
python -m ruff check .

Existing pytest, Ruff, OpenAPI and previous-version upgrade checks; no requests to arbitrary repositories are required for tests.

CI installs locked dependencies and runs the configured checks; documentation checks also validate local links/images. Python dependency auditing uses pip-audit --disable-pip --no-deps --strict -r requirements-lock.txt. A passing scanner only reports known advisories at the time of the run.

Limits and next steps

  • A report is not a security/code audit or evidence of production quality. API permissions, rate limits and truncated lists affect observations.

  • Some optional API failures use empty fallback results. Expose missing-data provenance before interpreting absence as health; no exploit or incorrect score was proven here.

  • Local tool without public multi-tenant authentication. Keep GitHub tokens outside version control.

Further documentation

Audit findings and follow-up · Technical reference · Change history

API request/response example

Available Tools

4 tools
analyze_repositoryC

Analyze a public GitHub repository and persist its engineering health report.

NameRequiredDescriptionDefault
repositoryYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description must convey behavioral traits. It states 'persist' indicating a write operation but gives no details on what is persisted, potential side effects, or required permissions. Inadequate for a mutation tool.

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

Conciseness3/5

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

Single sentence is concise, but may be too brief. It efficiently states the action but could include more detail without becoming verbose.

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

Completeness2/5

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

Given low complexity (1 required param, no output schema), the description fails to explain what the 'engineering health report' entails, whether results are returned, or how persistence affects the system. Incomplete for informed use.

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

Parameters1/5

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

The sole parameter 'repository' lacks any description in the schema (0% coverage) and the tool description does not explain its format (e.g., full URL vs owner/repo). No added meaning beyond the 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 verb 'Analyze' and the resource 'public GitHub repository' with an outcome 'engineering health report'. It is specific but could be more distinct from siblings, though the verb differentiates.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_repository_brief or list_recent_analyses. No mention of prerequisites (e.g., repository must be public) or when not to use.

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

create_action_itemC

Save a follow-up engineering action in the local Quorum database.

NameRequiredDescriptionDefault
titleYes
priorityNomedium
repositoryYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It only implies mutation ('save') but does not disclose effects, idempotency, error behavior, or any other behavioral traits.

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

Conciseness3/5

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

The description is a single sentence, which is concise, but it is too brief and lacks structure. It front-loads the core action but omits important details.

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

Completeness2/5

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

For a tool with 3 parameters, no output schema, and no annotations, the description is incomplete. It does not explain return value, error cases, or constraints like uniqueness of action items.

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

Parameters1/5

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

Schema description coverage is 0% and the description adds no meaning to parameters. It does not explain title, priority defaults, or repository purpose beyond the schema field names.

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 clearly states the tool saves a follow-up engineering action in the local Quorum database. It uses specific verbs and resources, and distinguishes from sibling read-only tools like analyze_repository or get_repository_brief.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention prerequisites, context for when saving an action is appropriate, or when to prefer other tools.

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

get_repository_briefB

Return a stored repository analysis by its identifier.

NameRequiredDescriptionDefault
analysis_idYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It implies a read-only retrieval but does not specify error handling (e.g., missing ID), side effects, or response format. It is minimally transparent about behavior.

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?

Single sentence of 8 words, front-loaded with purpose. No redundant information. Every word earns its place.

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

Completeness3/5

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

For a one-parameter retrieval tool with no output schema, the description states the core action. However, it does not explain the return format (what is a 'brief'?) or error cases. It is adequate but not comprehensive.

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

Parameters2/5

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

Schema description coverage is 0%. The description adds the phrase 'by its identifier', which is redundant with the parameter name 'analysis_id'. No additional semantics like format, source, or constraints are provided, so it barely adds value 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?

The description clearly states the verb 'Return' and resource 'stored repository analysis' along with the retrieval method 'by its identifier'. It is specific and distinguishes from sibling tools like analyze_repository (likely performs analysis) and list_recent_analyses (lists multiple).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., list_recent_analyses), and no prerequisites or context provided. The description only states what it does, not when to invoke it.

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

list_recent_analysesB

List recently created repository health reports.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It only states that the tool lists recent reports, but does not specify ordering, pagination, or whether it is read-only. For a listing operation, basic behavioral context is missing.

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 a single, concise sentence that front-loads the verb and resource. Every word is necessary, with no redundancy.

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

Completeness3/5

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

Given the tool has an output schema that likely documents return values, the description is minimally adequate. However, it lacks details like sorting order (e.g., most recent first) and whether the list is exhaustive or limited. For a simple list, it is functional but not thorough.

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

Parameters1/5

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

Schema description coverage is 0% (no parameter descriptions), but the description adds no meaning about the 'limit' parameter. It fails to explain that 'limit' controls the number of results, leaving the agent without crucial context for invocation.

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 clearly states the tool's action ('List') and the resource ('recently created repository health reports'). It effectively distinguishes from sibling tools like 'analyze_repository' (which likely creates reports) and 'get_repository_brief' (which retrieves a brief).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., 'analyze_repository' or 'get_repository_brief'). There is no mention of prerequisites, exclusions, or context that would help an agent decide.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedanalyze_repository
    • First observedcreate_action_item
    • First observedget_repository_brief
    • First observedlist_recent_analyses

TDQS

B3.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: analysis creation, action item creation, retrieval by ID, and listing. No overlapping functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., analyze_repository, create_action_item), making it predictable for an agent.

Tool Count5/5

With 4 tools, the set is well-scoped for a focused agent that analyzes repositories and creates follow-up actions. Each tool serves a necessary function.

Completeness3/5

The domain includes repository analysis and action items. Analysis has create, get, and list, but action items only have create—no retrieval, update, or delete, which is a notable gap.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Analyze GitHub repositories into structured JSON with tech stack detection, dependency analysis, health signals, and security checks. No AI, fully deterministic. Available as CLI and MCP server.
    9
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    AI-powered GitHub repository analytics through MCP. Analyze repositories, track contributions, and get insights directly in your AI assistant.
    1
    MIT