Skip to main content
Glama

Quorum Git Agent

Repository intelligence for engineering teams, available through a visual dashboard, REST API and Model Context Protocol tools.

Quorum inspects a public GitHub repository, calculates a transparent health score, triages open issues, highlights delivery risks and stores every report in SQLite. It works without an LLM key; an MCP-compatible host can use the tools immediately.

What it demonstrates

  • Python 3.11 and FastAPI service design

  • GitHub REST API integration with rate-limit handling

  • SQL persistence with migrations created on startup

  • MCP tools built with the official Python SDK

  • deterministic repository scoring and issue triage

  • responsive dashboard with no frontend build step

  • pytest, Ruff, Docker and GitHub Actions

Related MCP server: GitHub Health Monitor MCP

Architecture

flowchart LR
    UI[Dashboard] --> API[FastAPI REST API]
    HOST[MCP host] --> MCP[MCP server]
    API --> ENGINE[Analysis engine]
    MCP --> ENGINE
    ENGINE --> GH[GitHub REST API]
    ENGINE --> DB[(SQLite)]

Quick start

git clone https://github.com/rom4ik1346/quorum-git-agent.git
cd quorum-git-agent
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"
.\start.ps1

Open:

  • dashboard: http://127.0.0.1:8010

  • Swagger UI: http://127.0.0.1:8010/docs

  • health check: http://127.0.0.1:8010/api/health

The dashboard starts with a seeded fictional repository report, so the interface is useful before the first external API request.

GitHub token

Public repositories can be analyzed without a token. To increase the API rate limit, copy .env.example to .env and add a fine-grained token:

GITHUB_TOKEN=github_pat_your_token

The token is read only on the server and is never returned to the browser.

MCP server

Run the stdio server:

.\.venv\Scripts\python.exe -m app.mcp_server

Example client configuration:

{
  "mcpServers": {
    "quorum": {
      "command": "C:\\path\\to\\quorum-git-agent\\.venv\\Scripts\\python.exe",
      "args": ["-m", "app.mcp_server"],
      "cwd": "C:\\path\\to\\quorum-git-agent"
    }
  }
}

Available tools:

  • analyze_repository

  • list_recent_analyses

  • get_repository_brief

  • create_action_item

REST examples

Invoke-RestMethod `
  -Method Post `
  -Uri http://127.0.0.1:8010/api/analyses `
  -ContentType "application/json" `
  -Body '{"repository":"fastapi/fastapi"}'
Invoke-RestMethod http://127.0.0.1:8010/api/analyses

Tests

.\.venv\Scripts\python.exe -m ruff check .
.\.venv\Scripts\python.exe -m pytest --cov=app

Docker

docker compose up --build

The SQLite database is stored in the quorum-data volume.

Project structure

app/
  analyzer.py       transparent scoring and issue triage
  database.py       SQLite repository
  github_client.py  async GitHub REST client
  main.py           FastAPI application
  mcp_server.py     MCP tool surface
  static/           dashboard
tests/              unit and API tests

License

MIT

Available Tools

4 tools
analyze_repositoryC

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

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON 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. Dates show when Glama detected each change.

  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
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

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
  • F
    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
    -

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/rom4ik1346/quorum-git-agent'

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