Skip to main content
Glama

Apollo β€” Anti-Poisoned Multi-Source Research MCP Server

CI/CD License: MIT Python 3.11 Tests MCP Cost

Apollo is a standalone, production-grade Model Context Protocol (MCP) server engineered to provide clean, anti-poisoned, highly-relevant context from academic papers (arXiv, Semantic Scholar), open-source repositories (GitHub), Wikipedia encyclopedia, and web search. Built with zero external API fees in mind.


πŸ›οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Apollo MCP Server (Standalone)                  β”‚
β”‚                                                                        β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚   β”‚ 1. Multi-Source Ingestion & Tool Capability RAG Indexer        β”‚   β”‚
β”‚   β”‚    β”œβ”€ arXiv Atom API (100% Free / Public XML parser)           β”‚   β”‚
β”‚   β”‚    β”œβ”€ Semantic Scholar Graph API (Free Tier Public Endpoint)   β”‚   β”‚
β”‚   β”‚    β”œβ”€ GitHub REST API (Public Repos & Code Search)             β”‚   β”‚
β”‚   β”‚    β”œβ”€ Wikipedia API (100% Free / Foundational Concepts)        β”‚   β”‚
β”‚   β”‚    └─ DuckDuckGo Fallback Search (Zero API Keys)               β”‚   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                   β”‚                                    β”‚
β”‚                                   β–Ό                                    β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚   β”‚ 2. Context Sanitization & Anti-Poisoning Layer (The Filter)    β”‚   β”‚
β”‚   β”‚    β”œβ”€ Prompt Injection Scanner (Adversarial regex & redaction) β”‚   β”‚
β”‚   β”‚    β”œβ”€ Invisible Unicode & BiDi Override Stripper               β”‚   β”‚
β”‚   β”‚    β”œβ”€ LaTeX & Markdown Normalizer (Preserves Math Blocks)      β”‚   β”‚
β”‚   β”‚    └─ Noise Reducer (Strips bibliographies & code licenses)    β”‚   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                   β”‚                                    β”‚
β”‚                                   β–Ό                                    β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚   β”‚ 3. Guardrail RAG & Relevance Reranker                          β”‚   β”‚
β”‚   β”‚    β”œβ”€ Zero-Cost Bag-of-Words & Okapi BM25 CPU Indexer          β”‚   β”‚
β”‚   β”‚    β”œβ”€ FlashRank Ultra-Fast CPU Cross-Encoder (<25ms latency)   β”‚   β”‚
β”‚   β”‚    └─ Grounded Snippet Packer (Secure XML Enclosure + Citationsβ”‚   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                   β”‚                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β–Ό
       Exposes Clean Tools to AI Agents / Claude / Cursor / Antigravity:
       β€’ `search_academic_papers(query, year_start, year_end, min_citations, top_k)`
       β€’ `fetch_paper_deep_context(arxiv_id, max_tokens)`
       β€’ `search_repo_implementations(topic, language, min_stars, top_k)`
       β€’ `search_wikipedia(query, max_results)`
       β€’ `fallback_web_search(query, max_results)`
       β€’ `match_tools_for_query(query, max_tools)`
       β€’ `unified_research_context(query, top_k)`

Related MCP server: Crawl4AI+SearXNG MCP Server

⚑ Zero-Cost Design

Apollo was designed specifically for students and researchers:

  • Zero API Costs: arXiv and DuckDuckGo require no API keys. Semantic Scholar and GitHub run on free public rate limits.

  • Zero Embedding/Vector Database Costs: Uses pure Python Okapi BM25 and FlashRank CPU Cross-Encoder (ms-marco-TinyBERT-L-2-v2) running directly in RAM with <25ms CPU latency.

  • Rate Limit Caching: Integrated disk and memory caching (diskcache) to respect public rate limits.


πŸš€ Quickstart

1. Installation

git clone https://github.com/Parth-Dhola/Apollo-AntiPoison-Research-MCP.git
cd Apollo-AntiPoison-Research-MCP

# Create conda environment
conda create -n apollo python=3.11 -y
conda activate apollo

# Install dependencies
pip install -r requirements.txt
pip install -e .

2. Standalone Tool Selector CLI

Test query intent classification directly from the command line:

python -m apollo.router.tool_selector "How to implement LoRA linear layer in PyTorch?"

Output:

============================================================
 Apollo Tool Selector & Intent Router
============================================================
Query:             How to implement LoRA linear layer in PyTorch?
Predicted Intent:  CODE_IMPLEMENTATION
Confidence:        95%
Keywords Matched:  pytorch, implementation, implement
Recommended Tools: search_repo_implementations, fallback_web_search
Reasoning:         Code implementation query matching keywords: pytorch, implementation, implement
============================================================

3. Run MCP Server

Local Stdio Mode (Claude Desktop / Cursor / Antigravity):

python -m apollo.main --transport stdio

HTTP / SSE Server Mode (Docker / EC2 Microservice):

python -m apollo.main --transport sse --port 8080

πŸ›‘οΈ Anti-Poisoning & Security Guardrails

Apollo ensures context retrieved from external sources is safe before reaching your LLM:

  1. Prompt Injection Redaction: Detects and neutralizes prompt override attempts (ignore previous instructions, system override, <<SYS>>, <|im_start|>).

  2. Invisible Unicode Stripping: Removes zero-width spaces (\u200B), BiDi overrides (\u202E), and hidden character exploits.

  3. Hardened XML Encapsulation: Encloses external context in <untrusted_academic_context> tags with explicit provenance metadata.


πŸ›οΈ Source Authority & Credibility Hierarchy

Apollo prevents unverified or crowd-sourced summaries from displacing peer-reviewed science:

Tier

Source

Authority Weight

Role in Research Queries

Tier 1

arXiv & Semantic Scholar

1.00x

Primary Ground Truth: Peer-reviewed proofs, theorems, SOTA benchmarks.

Tier 2

GitHub Repos

0.90x

Verified Code: Runnable models, CUDA kernels, PyTorch modules.

Tier 3

Wikipedia

0.65x

Secondary Encyclopedia: Definitions & rate-limit safety net (Deprioritized for research).

Tier 4

DuckDuckGo

0.55x

General Web: Fallback for news and release notes.


🐳 Docker & Compose

Run Apollo in Docker:

docker compose up -d

Check health:

curl http://localhost:8080/sse

πŸ§ͺ Testing

Run test suite with coverage:

pytest tests/ -v --cov=src/apollo --cov-report=term-missing

πŸ”— Python SDK & Agent Integration

To call Apollo directly in your AI agentic workflows or Python scripts:

import asyncio
from apollo.server.mcp_server import create_mcp_server

async def get_clean_research_context(query: str):
    server = create_mcp_server()
    tool = await server.get_tool("unified_research_context")
    result = await tool.run({"query": query, "top_k": 3})
    return result.content[0].text

# Run
context = asyncio.run(get_clean_research_context("FlashAttention-2 forward backward pass"))
print(context)

πŸ“œ License

MIT License. Free to use, modify, and distribute. See LICENSE for details.

Available Tools

6 tools
fetch_paper_deep_contextFetch Paper Deep ContextA

Fetch structured, sanitized abstract and detailed technical context for a specific arXiv ID. Normalizes LaTeX equations and neutralizes any prompt injection payloads.

ParametersJSON Schema
NameRequiredDescriptionDefault
arxiv_idYes
max_tokensNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It goes beyond the schema by disclosing that responses are sanitized, LaTeX equations are normalized, and prompt injection payloads are neutralized. It does not cover every edge behavior, but the most important security-related traits are disclosed.

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?

Two sentences with no filler. The primary function is front-loaded, followed by concise behavioral details about normalization and security. Every sentence 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?

The tool is simple enough that the description covers the main purpose, and an output schema exists so return values need not be explained. However, max_tokens is undocumented in both schema and description, and there is no guidance about when to choose this tool over unified_research_context. This leaves minor but real gaps.

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?

The input schema has 0% description coverage, so the description must compensate. It tells the agent that the tool targets an arXiv ID, but it does not explain arxiv_id format expectations or the meaning of max_tokens and its default behavior. Without this, an agent cannot infer parameter semantics from the description.

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 states a specific verb ('Fetch') and a precise resource: structured, sanitized abstract and detailed technical context for a specific arXiv ID. This clearly distinguishes it from the sibling search tools, which are about discovering papers rather than retrieving deep context for a known ID.

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 phrase 'for a specific arXiv ID' gives clear contextual guidance: use this when you already have an ID and need deep, sanitized technical context. It does not explicitly name alternatives or exclusions, but the intended trigger condition is clear.

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

match_tools_for_queryMatch Tools For QueryB

RAG over Tool Capabilities: Evaluates semantic capability fit to pick ONLY necessary tools, pruning irrelevant tools to prevent token bloat and context overload.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
max_toolsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose meaningful behavior: semantic evaluation, selection of only necessary tools, and pruning to prevent token/context overload. Missing are operational details such as output shape, whether external models are invoked, or how max_tools interacts with pruning, but the core behavior is stated.

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

Conciseness4/5

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

The description is a single compact sentence that front-loads the mechanism ('RAG over Tool Capabilities') and then states purpose and benefit. It contains no filler, though the phrase 'RAG over Tool Capabilities' is slightly jargon-heavy.

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?

The overall intent is clear, and an output schema exists to cover return values. However, with no annotations and two underdocumented parameters, the description leaves the meaning and effect of max_tools ambiguous and gives no guidance on expected query formatting or limits. It is minimally viable but has clear gaps.

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 mentions neither 'query' nor 'max_tools.' The purpose implies that 'query' is the input request, but 'max_tools' semantics are entirely unexplainedβ€”an agent cannot tell whether it is a hard cap, a target count, or something else. The description provides no compensation for the schema's lack of documentation.

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 uses a specific verb ('Evaluates') and a clear object ('semantic capability fit' of tools), and it states the outcome: pick only necessary tools and prune irrelevant ones. This clearly differentiates the tool from sibling content-search tools because it is a meta-selection/routing tool rather than a search tool.

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

Usage Guidelines3/5

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

The description implies when to use it: when deciding which tools are relevant for a query and avoiding token bloat. However, it does not explicitly state when not to use it, nor does it reference alternatives among the sibling tools, so an agent must infer the routing role rather than being told.

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

search_academic_papersSearch Academic PapersA

Search peer-reviewed papers and preprints across arXiv and Semantic Scholar. Returns sanitized paper abstracts with publication years, citation counts, and authors.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
year_endNo
year_startNo
min_citationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the core behavioral trait: results are 'sanitized' abstracts with publication years, citation counts, and authors. It does not detail ranking, rate limits, or how 'sanitized' is defined, but for a search tool the return behavior and non-destructive nature are sufficiently conveyed.

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?

Two concise sentences front-load the tool's purpose and output format. There is no filler, repetition, or irrelevant detail.

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?

The description is adequate at a high level given an output schema exists: it names sources and return fields, and parameter names hint at usage. However, it lacks parameter semantics, usage boundaries, and guidance on how to choose among siblings, leaving the agent to infer key call details.

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%, and the description does not explain any of the five parameters. Parameter names like query, top_k, and min_citations are somewhat self-explanatory, but the description adds no meaning about valid ranges, filter behavior, or how year_start and year_end interact.

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 names a specific verb ('Search'), a clear resource ('peer-reviewed papers and preprints'), and specific data sources ('arXiv and Semantic Scholar') while listing return fields. This distinguishes it from siblings like search_repo_implementations and fallback_web_search.

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 explicit guidance is provided about when to prefer this tool over siblings such as fetch_paper_deep_context, search_repo_implementations, or fallback_web_search. The intended use is only implied by the tool name and description, so an agent gets no exclusion criteria or alternative routing hints.

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

search_repo_implementationsSearch Repo ImplementationsB

Search verified open-source GitHub repositories for code implementations and architectural patterns. Strips license boilerplate and formats clean implementation snippets.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNo
topicYes
languageNopython
min_starsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It adds meaningful non-obvious behavior: stripping license boilerplate and formatting clean implementation snippets. However, it omits important context such as what 'verified' means, how results are ranked, or any rate or scope limitations.

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 compact and front-loaded, with two distinct sentences that each add value: one for purpose and one for output processing. There is no fluff, repetition, or extraneous detail.

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?

The presence of an output schema covers return-value structure, but the description still needs to explain parameter semantics, verification criteria, and when this tool is preferred over siblings. Since the schema provides no parameter descriptions and annotations are absent, the current description leaves essential usage context missing.

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 input schema has 0% description coverage across all four parameters, and the description does not compensate by explaining topic, top_k, language, or min_stars. An agent gets no guidance on how to set these parameters or what defaults mean.

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 states a specific verb ('Search'), a concrete resource ('verified open-source GitHub repositories'), and a clear intent ('code implementations and architectural patterns'). This distinguishes it from the sibling tools, which target academic papers and general web search.

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

Usage Guidelines3/5

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

The description implies the tool is for finding code implementations in GitHub repositories, but it never explicitly states when to use this tool versus alternatives, nor does it mention exclusions or when not to use it. The context signals hint at alternative tools, but the description itself provides no direct routing guidance.

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

unified_research_contextUnified Research ContextA

End-to-end multi-source research context pipeline with Tool Capability RAG & Token Budgeting.

  1. RAG-selects ONLY the top 1-2 optimal tools based on semantic capability match.

  2. Prunes unneeded tools to prevent API waste and context overload.

  3. Sanitizes all retrieved snippets and removes prompt injection payloads.

  4. Cross-encoder reranks on CPU and returns bounded, dense grounded context.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses several meaningful behaviors: it prunes tools to prevent API waste, sanitizes snippets against prompt injection, reranks on CPU, and returns bounded context. This is strong transparency, though it stops short of covering all operational details such as required auth or external API calls.

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

Conciseness4/5

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

The description is compact and front-loaded with a clear pipeline label, followed by a numbered list that makes each behavior easy to scan. Every line adds some information, though the phrasing is somewhat jargon-heavy and could be tightened.

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?

An output schema exists, so the return type does not need to be explained in detail. The description covers the main invocation-relevant behaviors: tool selection, pruning, sanitization, reranking, and bounded output. It is incomplete only in that it does not specify what a valid `query` looks like or how this tool relates to sibling matching tools.

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?

Schema coverage is 0%, so the description must compensate. It indirectly clarifies `top_k` by saying it selects the 'top 1-2 optimal tools' and clarifies `query` by mentioning 'semantic capability match.' However, neither parameter is explicitly defined, and the relationship between `top_k` and the stated 'top 1-2' boundary is left ambiguous.

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?

Describes a specific multi-source research context pipeline and states the outcome: 'returns bounded, dense grounded context.' The numbered behaviors make the tool's role clear, though it does not explicitly contrast itself with the sibling match_tools_for_query, which appears closely related.

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 explicit guidance on when to use this tool versus alternatives such as search_academic_papers, fetch_paper_deep_context, or match_tools_for_query. The description implies it is useful for multi-source context gathering with tool selection, but it does not state conditions, exclusions, or when a sibling would be more appropriate.

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

TDQS

B3.4/5.0
Disambiguation3/5

The source-specific search tools are clearly distinct, but match_tools_for_query and unified_research_context both describe RAG-based tool selection and pruning, creating overlap in purpose. unified_research_context also partially subsumes the direct search tools, so boundaries are not fully clean.

Naming Consistency3/5

Most names use lower_snake_case and a search/fetch style, but the convention is inconsistent: fallback_web_search and unified_research_context are noun/adjective phrases rather than verb-first names. match_tools_for_query adds a prepositional construct, so the set doesn't follow a single predictable pattern.

Tool Count4/5

Six tools is a reasonable size for a multi-source research server. However, the set is slightly redundant because match_tools_for_query duplicates part of unified_research_context's functionality, so not every tool is strictly necessary.

Completeness4/5

The server covers academic search, deep paper context, code repository search, web fallback, and an end-to-end pipeline, which is solid for its stated purpose. Minor gaps remain, such as fetching papers by DOI or Semantic Scholar ID, but they are not blocking for typical research workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    A
    quality
    Not graded
    maintenance
    Enables hybrid web search and intelligent content extraction, combining semantic search with documentation-optimized reading that strips noise and returns clean, token-efficient context for AI agents.
    2
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to search the web, crawl websites, and perform intelligent RAG queries with semantic search capabilities. Includes integrated private search engine, vector database storage, and optional knowledge graph for AI hallucination detection in code repositories.
    1
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides AI agents with a comprehensive web intelligence stack including crawling, private search via SearXNG, and intelligent RAG capabilities for focused content extraction. It supports advanced features like semantic vector search and knowledge graph integration for code validation to enhance AI performance and reliability.

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/Parth-Dhola/Apollo-AntiPoison-Research-MCP'

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