# Lit-Review-Council MCP Server

> Multi-Agent Literature Review Council MCP Server

**Status:** Measured to an artifact.

**Role:** Author / Google × Kaggle AI Agents Intensive. **Timeline:** Jun 2026. **Category:** Agentic AI & MCP.

Multi-agent research synthesis engine and Model Context Protocol (MCP) server that orchestrates parallel academic and practitioner research with Borda-count consensus.

## Measurements

| Value | What it measures |
| --- | --- |
| PyPI | published, install via uvx lit-review-council; listed on the MCP Registry |
| 3 | independent reviewer agents ranked by Borda count |
| 2 | research tracks per topic: academic (ArXiv/OpenAlex) and practitioner (GitHub) |

## The artifact that settles this

Consensus is a counted Borda tally over named reviewers, not a model asked to agree with itself.

Quoted from `Ravicha2/lit-review-council` at `scoring.py#L12-L35` (40c4c19), `src/scoring.py#L12-L35`, verbatim:

> def tally_ensemble_rankings(rankings: List[Optional[Any]]) -> Tuple[str, List[str]]:
>     """
>     Applies Borda count (2 pts for 1st, 1 pt for 2nd) and returns the winning label 
>     and the list of rationale strings.
>     """
>     scores = {"A": 0, "B": 0}
>     reasons = []
>     
>     reviewers = ["Researcher", "Engineer", "Architect"]
>     
>     for i, r_obj in enumerate(rankings):
>         reviewer_name = reviewers[i] if i < len(reviewers) else f"Reviewer_{i}"
>         
>         if r_obj:
>             lst = r_obj.ranking if hasattr(r_obj, "ranking") else r_obj.get("ranking", [])
>             rat = r_obj.rationale if hasattr(r_obj, "rationale") else r_obj.get("rationale", "")
>             if lst and len(lst) >= 1:
>                 # 1st place gets 2 points, 2nd gets 1 point
>                 if lst[0] in scores: scores[lst[0]] += 2
>                 if len(lst) > 1 and lst[1] in scores: scores[lst[1]] += 1
>             reasons.append(f"{reviewer_name} rationale: {rat}")
> 
>     top_label = "A" if scores["A"] >= scores["B"] else "B"
>     return top_label, reasons

Permalink: <https://github.com/Ravicha2/lit-review-council/blob/40c4c19711067bd182a6465184585697e5723403/src/scoring.py#L12-L35>

## The intuition

Deliver rigorous, multi-perspective literature synthesis with verifiable academic and open-source citations directly in developer IDEs.

- The spark: Single-prompt LLM research summaries suffer from confirmation bias, fabricated citations, and an inability to balance theoretical academic papers with practical open-source production implementations.
- The naive failure mode: Single-agent LLMs hallucinate non-existent academic references, accept unvalidated preprint claims, and lack diverse perspectives when assessing the feasibility of architectural patterns.

## The problem

Citation hallucination, single-prompt bias, and IDE context limits in automated research synthesis.

**Constraints**

- Strict Model Context Protocol (MCP) compliance for universal integration into Claude Code, VS Code, and Cursor
- Zero hallucinated or unreachable citations permitted in final synthesis output

**Edge cases handled**

- LLMs generating plausible-sounding but fictitious DOI and ArXiv identifiers
- Preprint source bias skewing recommendations toward unproven theoretical approaches
- IDE context window overflow when ingesting large volumes of paper abstracts

## Why it was built this way

Dual-track research agents, 3-reviewer Borda ranking, programmatic citation validation, and MCP protocol distribution.

Dual-track parallel research waves paired with an independent 3-reviewer Borda-count scoring council and rigorous programmatic citation verification.

**Trade-offs**

- Dual-Track Research (Academic + Practitioner) — Dispatches specialized agents to query ArXiv/OpenAlex for theoretical rigor while simultaneously querying GitHub/PyPI for production adoption and practical ergonomics. (against: Single source search)
- Borda-Count Consensus Ensemble — Three independent reviewers (Researcher, Engineer, Neutral) evaluate anonymized reports on novelty, methodology, and practicality before aggregating ranks via Borda voting. (against: Single reviewer scoring)
- MCP Protocol Server Distribution — Packaging as an MCP server installable via uvx enables developers and AI coding agents to trigger comprehensive literature reviews from their command-line and IDEs. (against: Web dashboard only)

**Guardrails**

- Programmatic API verification verifying that all cited DOIs and ArXiv IDs exist and match paper titles
- Dangling reference rejection filter pruning unvalidated citations from final reports
- Source-tier classification giving higher confidence weight to peer-reviewed publications

## Outcomes

Distributed via PyPI and MCP, providing verified multi-agent literature syntheses directly in developer IDEs.

**How it was verified**

- Published to PyPI (installable via uvx lit-review-council) and listed on the MCP Registry, with documented install paths for Claude Code and VS Code.
- Every URL in a finished report must appear in the source references or the synthesis step retries, so dangling citations are rejected before output rather than reviewed after it.

**Impact**

- Lets researchers and engineers run a multi-perspective literature review from their IDE.
- Demonstrated effective multi-agent consensus mechanisms for reducing LLM cognitive bias.

**Takeaway:** Multi-agent consensus coupled with programmatic deterministic validation solves the hallucination problem in complex research synthesis.

## Stack

Google ADK, Python, MCP, OpenAlex API, ArXiv API, uv, Claude Code

## References

- github: <https://github.com/Ravicha2/lit-review-council>
- pypi: <https://pypi.org/project/lit-review-council/>

---

## Fetching the rest of this site

- This page as HTML: <https://ravicha2.github.io/projects/lit-review-council/>
- Concise index: <https://ravicha2.github.io/llms.txt>
- Full dossier: <https://ravicha2.github.io/llms-full.txt>
- When to use this material: <https://ravicha2.github.io/agents.md>
- API description (OpenAPI 3.1): <https://ravicha2.github.io/openapi.json>
- API reference: <https://ravicha2.github.io/docs/>
- Sitemap: <https://ravicha2.github.io/sitemap.xml>
