GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者による説明(英語の原文)
Read-only MCP server: query_logs over a structured JSONL incident log (Quellgeist triage).
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
QG_LOG_PATH必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"quellgeist-logs": {
"command": "uvx",
"args": [
"quellgeist"
],
"env": {
"QG_LOG_PATH": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add quellgeist-logs --env QG_LOG_PATH=your-value -- uvx quellgeist動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"quellgeist-logs": {
"command": "uvx",
"args": [
"quellgeist"
],
"env": {
"QG_LOG_PATH": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"quellgeist-logs": {
"type": "stdio",
"command": "uvx",
"args": [
"quellgeist"
],
"env": {
"QG_LOG_PATH": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
QG_LOG_PATH envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月10日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Rajeev-Shyam で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは4 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:GitHub, Desktop Commander, Cloudflare MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
First-line incident triage you can trust: ranked root-cause hypotheses where every claim cites a real evidence handle — and the agent abstains rather than guess.
Quellgeist is a model-agnostic AI agent for first-line production-incident triage. It runs a legible JSON-action ReAct loop over read-only tools (structured logs + recent deploys + metric time-series), then emits a structured Diagnosis: confidence-ranked root-cause hypotheses, each backed by a structured evidence handle (LogRef.id / CommitRef.sha / MetricRef.id) the agent actually saw — never free text. Two ideas set it apart:
Status: Wave 4 complete — the fine-tune works. The DR-0020 QLoRA fine-tune
of the local reasoner (Qwen3-4B, served via Ollama) took it from the base's
0/16 holdout to 12/16 — zero fabrication, zero speculative-filtering, and
*cheaper* than the base — while beating a 31B frontier (Gemma-4-31B, 10/16)
on the same holdout at $0, fully offline. Non-memorisation is triangulated
three ways (fixtures ≈ holdout; core-fresh ≥ core-overlap; structure probe 7/10).
Two honest limits: the
resource_exhaustionclass didn't transfer (0/N; the
frontier passes it), and adversarial-abstention recall is 6/12 at the system
level — a ceiling the 31B frontier *shares* (also 6/12), not a fine-tune
regression. When this agent misses it's *incomplete* or *too cautious*, never
confidently fabricating. See
Status & roadmap · fine-tune case study.
| Evidence is a handle | Each hypothesis cites a log row's source-stable id or a commit sha, copied verbatim from a tool result — the unit the deterministic fabrication check looks up. Prose lives in a display-only note. (DR-0009) |
| Abstention is a feature | When signals are weak the agent returns abstained=true with a reason and an empty hypotheses list — enforced by the schema. |
| Model-agnostic by construction | The loop parses JSON actions from plain chat text, so it's identical on Gemini's free tier and a local 4-bit Qwen — no dependence on any backend's native function-calling. Swap models with one config change. (DR-0008, DR-0010) |
| Reliability is gated, not asserted | A keyless, deterministic CI gate (ruff + black + pytest, including the fixture-backed eval harness) runs on every push. |
Requires uv and Python 3.12+.
See a real-shaped diagnosis in one keyless command (no model, no API key):
uv sync && uv run quellgeist diagnose --demo # renders the demo incident's cited postmortem
Then run the full loop against the live toy service:
uv run uvicorn demo.app.main:app # 1. start the toy service (leave running)
uv run python -m demo.chaos.bad_deploy # 2. inject a simulated bad deploy curl -s localhost:8000/login # 3. trip /login -> 500s + structured error logs uv run quellgeist diagnose --show-trace # 4. diagnose live (needs a model; see below)
uv run python -m demo.chaos.reset # back to a green slate
The live step needs a reasoner — see Running the model. Without a key, quellgeist diagnose exits 1 with a one-line error + hint (never a traceback); --demo always works keyless and renders the same output shape deterministically from gold.
A custom, legible loop is the orchestration layer; the three read-only tools are the evidence interface; the Diagnosis schema is the contract that the postmortem renderer and the eval judge both read.
flowchart TD
trigger(["incident trigger - CLI"]) --> loop model["reasoner via LiteLLM (Gemini or local Qwen, swappable)"] -. "chat completion" .-> loop
subgraph loopbox["model-agnostic JSON-action ReAct loop"] loop["run_loop() decide, call tool, observe, repeat"] end
loop -- "query_logs" --> logs["logs tool structured JSONL, stable ids"] loop -- "get_recent_commits" --> commits["commits tool deploy_log.json, shas"] loop -- "query_metrics" --> metrics["metrics tool time-series, named series"] logs -- "rows + ids" --> loop commits -- "commits + shas" --> loop metrics -- "series + names" --> loop
loop --> diag["Diagnosis (schema.py) ranked hypotheses citing LogRef.id / CommitRef.sha / MetricRef.id, or abstains"] diag --> pm["postmortem renderer deterministic Markdown"] diag --> judge["eval judge fixture scenarios, CI gate"]
All three tools are also exposed as MCP servers over stdio (python -m quellgeist.servers.logs_mcp, …commits_mcp, …metrics_mcp). The agent currently reuses the same tool *functions* in-process behind a ToolSpec registry; a stdio MCP-*client* path (the agent driving the servers over the wire) is on the roadmap (DR-0010).
Deep dive:
docs/architecture.mdwalks the full
pipeline (loop → tools → verifier → postmortem), a sequence diagram, the module
map, and the cross-cutting design decisions.
The servers publish to the Official MCP Registry on each tagged release (see docs/publishing.md); once published each is runnable with uvx --from quellgeist quellgeist-logs-mcp (or …-commits-mcp / …-metrics-mcp).
Inject the bad deploy — it drops a marker that flips verify_token into a NoneType regression and writes a deploy_log.json whose offending commit landed just before the errors (illustrative stdout — the timestamp reflects when you run it; paths shown relative to the repo root):
$ uv run python -m demo.chaos.bad_deploy
injected bad deploy a1b2c3d (touched demo/app/auth.py) at 2026-06-24T12:22:43Z marker: demo/.bad_deploy deploy log: demo/deploy_log.json next: hit /login to generate the 500s, then quellgeist diagnose
With a reasoner configured, quellgeist diagnose reads the logs + deploys and emits a postmortem. The CI environment has no validated model key (DR-0012), so the diagnosis below is rendered from gold — built deterministically from the fixture's labelled cause and evidence handles via render_postmortem, *not* live model output:
# Incident Postmortem (rendered from gold)
Evidence:
Reproduce that render yourself (no model needed):
uv run python - <<'PY'
from evals.scenarios.generator import load_scenario from quellgeist.agent.schema import Diagnosis, Hypothesis from quellgeist.output.postmortem import render_postmortem
s = load_scenario("evals/scenarios/fixtures/bad_deploy_0001.json") gold = Diagnosis(hypotheses=[ Hypothesis(cause=s.gold_cause, confidence=1.0, evidence=s.gold_evidence_refs) ]) print(render_postmortem(gold, title="Incident Postmortem (rendered from gold)")) PY
The point isn't the prose — it's that `log #2` and `commit a1b2c3d` are exact handles into the real signals, not paraphrases. A live run additionally fills in a one-line summary and suggested actions, and abstains outright when the evidence is too weak to name a confident cause.
Write the postmortem to a file with --out postmortem.md, or as a self-contained HTML page with --out postmortem.html (or --format html) — same deterministic render, no external assets.
The reasoner is any LiteLLM model string, selected by --model or the QG_MODEL env var (default gemini/gemini-3.5-flash). Provider keys are read from the environment by LiteLLM; nothing is stored in the repo.
export QG_MODEL="gemini/gemini-3.5-flash"
export GEMINI_API_KEY="…" uv run quellgeist diagnose --show-trace
Or fully local and offline via Ollama — the intended home default (DR-0008; exact artifact pinned in DR-0019), no API key involved:
ollama pull qwen3:4b-instruct-2507-q4_K_M
export QG_MODEL="ollama_chat/qwen3:4b-instruct-2507-q4_K_M" uv run quellgeist diagnose --show-trace
Base vs tuned — important. The
ollama pullabove is the base Qwen3-4B:
the honest safe *floor* — it scores **0/16 on the holdout and abstains on
everything, never fabricating (DR-0019). The 12/16** headline is the
DR-0020 fine-tune (
quellgeist-qwen3-dr0020), which you build + serve via
finetune/README.md(a free-Colab QLoRA run →
ollama create). Until that tuned GGUF is published for a one-line pull, the
base model is what a plain
ollama pullgives you — safe, not yet useful. Use a
hosted model (above) or the fine-tune to see live diagnoses.
Heads-up (DR-0012): a Gemini key on an unvalidated, no-billing project returns 429 limit: 0 on current models, so the shipped CI gate is deliberately keyless and model-driven evals are key-gated and run out-of-band (DR-0015). At home the intended default reasoner is a local Qwen3-4B via Ollama (DR-0008).
The fixture eval scores the reasoner with a deterministic keyword judge + a zero-fabrication check (the keyless gate), and can additionally run two model layers (DR-0016): a verifier that confirms cited evidence supports each hypothesis (forcing abstention otherwise) and an advisory LLM-judge rubric.
export GEMINI_API_KEY="…"
export QG_MODEL="gemini/gemini-3.5-flash" QG_VERIFY=1 QG_JUDGE_LLM=1 \ QG_MIN_CALL_INTERVAL_S=6 \ # pace calls under the free-tier RPM (avoids 429 bursts) uv run python -m evals.run_evals
`QG_VER
冒頭だけを表示しています。続きはリポジトリで読めます