Skip to main content
Glama
KB01111
by KB01111

research-mcp

One MCP server + OpenAI plugin that searches 9 sources, scrapes full content, reranks, and synthesizes a cited answer with a free LLM.

Sources (9)

Source

Default?

Auth

Notes

Firecrawl (your fork)

FIRECRAWL_API_URL + optional FIRECRAWL_API_KEY

Calls POST /v1/search

GitHub Trending

none

HTML scrape, no key

arXiv

none

Official arxiv lib

Tavily

TAVILY_API_KEY

Primary fallback scraper, 1k/mo free

OSS Insight

none

Trending repos, free API

dev.to

none

Public API

libhunt

❌ opt-in

none

HTML scrape

X.com (Twitter)

❌ opt-in

TWITTERAPI_IO_KEY

No free public X API

Google SERP

❌ opt-in

SERPER_API_KEY or SERPAPI_API_KEY

No free public SERP API

Related MCP server: openresearch-mcp

Free LLM & reranker

  • Summarizer: Groq (llama-3.3-70b-versatile, free) → Gemini 2.0 Flash → OpenRouter free → extractive fallback

  • Reranker: Cohere rerank-english-v3.0 (1k/mo free) → Jina v2 → local term-overlap

  • Scraper: Firecrawl → Tavily extract → Jina Reader (r.jina.ai, no key)

Install

cd research-mcp
pip install -e .
cp .env.example .env
# fill in whichever keys you have; the rest are optional

Run the MCP (stdio, for Claude Desktop / goose)

python -m mcp_server

Add to your Claude Desktop config:

{
  "mcpServers": {
    "research": {
      "command": "python",
      "args": ["-m", "mcp_server"],
      "cwd": "C:\\Users\\kevin\\research-mcp"
    }
  }
}

Run the OpenAI plugin shim (HTTPS)

python -m openai_plugin.app
# then serve over HTTPS via Caddy/Nginx and point ChatGPT at
# https://your.host/.well-known/openai-plugin.json

Tools exposed

Tool

Purpose

research(query, sources?, max_results?, style?)

End-to-end: search → scrape → rerank → summarize

search_all(query, sources?, max_results?)

Search only, no LLM

scrape_url(url, method?)

Single URL scrape

rerank_docs(query, docs, model?)

Rerank a list of strings

summarize_docs(docs, query, style?, model?)

Final synthesis

Smoke test (no keys required)

python tests/smoke.py

Runs arxiv → local rerank → extractive summary. Proves the pipeline is wired correctly without spending any free-tier quota.

Docker

docker compose --profile mcp up --build       # MCP over stdio
docker compose --profile plugin up --build    # OpenAI plugin on :8000

Layout

mcp_server/
  server.py                # fastmcp entry
  config.py                # env-driven settings
  adapters/                # one file per source, normalized SearchResult
  tools/
    search.py              # fan-out + dedupe
    scrape.py              # Firecrawl / Tavily / Jina
    rerank.py              # Cohere / Jina / local
    summarize.py           # Groq / Gemini / OpenRouter
openai_plugin/
  app.py                   # FastAPI shim re-exporting the same tools
  manifest.json
tests/smoke.py
Dockerfile, docker-compose.yml

Available Tools

5 tools
rerank_docsA

Rerank a list of document strings by relevance to the query.

model: "cohere" | "jina" | "local" Returns: [{index, relevance_score}, ...] sorted desc.

ParametersJSON Schema
NameRequiredDescriptionDefault
docsYes
modelNocohere
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral disclosure burden. It does disclose the return format (sorted descending) and the accepted model identifiers, but it omits potential side effects, rate limits, or the fact that using remote models like cohere/jina may incur network calls and costs.

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 extremely concise and well-structured. It leads with the core action, then lists model options and the return format. Every sentence contributes value with no filler.

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?

Given the tool's simplicity (3 parameters, simple return array), the description is largely complete. It covers the purpose, parameter semantics implicitly, and return shape. It lacks usage guidance and error handling, but these are not critical for a straightforward rerank operation.

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

Parameters4/5

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

The schema has 0% description coverage, but the description enriches the parameters by explaining 'docs' as document strings, 'query' as the relevance basis, and explicitly listing the allowed model values. It adds semantics beyond the raw schema, though it could further elaborate on query expectations.

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 function: reranking document strings by relevance to a query. The verb 'rerank' is specific and distinct from sibling tools like search_all or summarize_docs.

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?

Usage context is implied: you must already have a list of documents and a query to rerank. However, the description does not explicitly state when to use this tool over alternatives, nor does it provide exclusions or prerequisites.

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

researchA

End-to-end: search all sources -> scrape -> rerank -> summarize.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesnatural language research question.
styleNo"detailed" | "bullets" | "tldr".detailed
sourcesNooptional list of source names; defaults to env DEFAULT_SOURCES.
max_resultsNomax results per source.

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?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It transparently lists the sequence of operations (search -> scrape -> rerank -> summarize), which is the core behavior. It does not mention rate limits, auth, or failure handling, but for a read-only research pipeline, the disclosed process is sufficiently transparent.

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, compact sentence that uses an arrow pipeline to efficiently convey the tool's flow. Every word is purposeful, with no fluff or redundancy.

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?

Given that this is a composite tool orchestrating four sibling sub-tools, the description effectively communicates the end-to-end nature. The output schema and fully documented parameters cover return values and inputs, so the description is complete enough for the agent to understand the tool's role, though a bit more context about typical use cases could be added.

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 description coverage is 100%, with each parameter fully described in the input schema. The tool description itself adds no parameter-specific context beyond the pipeline, so it does not augment the schema's already comprehensive parameter definitions.

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 explicitly states the tool performs an end-to-end pipeline: search all sources, scrape, rerank, and summarize. This clearly defines the tool's purpose and differentiates it from sibling tools like search_all or scrape_url, which cover only individual steps.

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 'end-to-end' phrasing implies that this tool is used when the user wants the full research workflow in one call. However, it does not explicitly mention when to prefer this over using the sibling tools individually, nor does it state any exclusions or alternative conditions.

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

scrape_urlC

Scrape a single URL and return markdown content.

method: "firecrawl" | "tavily" | "jina"

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
methodNofirecrawl

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behaviors itself. It mentions the output format (markdown) and method options, but lacks details on error handling, rate limits, or side effects of scraping. The short description leaves significant behavioral aspects unmentioned.

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 extremely concise, front-loading the core function. However, it could benefit from a bit more detail without becoming verbose, so not a 5.

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 the lack of annotations, 0% schema coverage, and a tool with multiple method-specific behaviors, the description is incomplete. It does not clarify return structure beyond 'markdown content' or provide enough to correctly select between methods.

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 description names the 'method' parameter and its three options, but does not explain the differences between them or the expected format of 'url.' Since schema coverage is 0%, the description only partially compensates.

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 states 'Scrape a single URL and return markdown content,' which clearly identifies the tool's action and output. It differentiates from siblings like 'search_all' by specifying 'single URL,' though it doesn't explicitly contrast with alternatives.

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 is provided on when to use this tool versus the siblings (research, search_all, etc.). The description only states what it does, not the context or comparison.

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

search_allC

Fan out the query to every source and return deduped SearchResult dicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sourcesNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does disclose that results are deduped, which is useful, but it does not mention any other behavioral traits such as whether the operation is read-only, whether it requires authentication, how errors are handled, or what 'every source' concretely means. This is a minimal level of transparency.

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, clear, and front-loaded sentence with no wasted words. It conveys the core action and result type efficiently. While it is short, conciseness is about structure and economy, which this achieves perfectly.

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?

Although the tool has an output schema to describe return values, the description is incomplete for a tool with 3 parameters and no annotations. It lacks usage guidance, parameter semantics, and a clear definition of 'every source'. It does not explain the max_results parameter or how sources can be restricted, making it inadequate for an agent to select and invoke this tool confidently.

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 schema has 0% description coverage, and the description does not compensate by explaining any of the three parameters (query, sources, max_results). It does not even implicitly clarify the meaning of 'sources' beyond the phrase 'every source' or mention the max_results limit. The agent must rely solely on parameter names and defaults, which is insufficient for correct invocation.

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 indicates the tool fans out a query to every source and returns deduped SearchResult dicts, which distinguishes it from the sibling tools (research, scrape_url, rerank_docs, summarize_docs). The verb 'fan out' is specific, and the resource ('every source') is named. However, it does not explicitly say 'search', relying on the word 'query' and the return type to convey the core purpose.

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 is given about when to use this tool vs. alternatives. It does not mention any sibling tools, nor does it state explicit conditions such as 'use when you need results from all sources'. The phrase 'every source' implies comprehensive search, but there is no clear 'when' or 'when not' guidance.

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

summarize_docsB

Synthesize a final answer from a list of document strings.

style: "detailed" | "bullets" | "tldr" model: "groq" | "gemini" | "openrouter"

ParametersJSON Schema
NameRequiredDescriptionDefault
docsYes
modelNogroq
queryYes
styleNodetailed

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

There are no annotations, so the description must carry the full transparency burden. It fails to disclose behavioral traits such as whether this is a read-only operation, whether it calls an LLM API (cost/latency implications), or how the model/style parameters affect the output. The mention of model options hints at external AI usage but doesn't explicitly state behavior or side effects.

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 extremely concise, using two sentences and a compact param list. Every element adds value—first sentence states purpose, the list documents available options. No filler or repetition.

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 lack of annotations and low schema coverage, the description is minimally viable but not complete. It defines the tool's action but lacks context on when to deploy it relative to sibling tools, how the query parameter is used, or what the output format looks like despite the output schema being present. It covers the basics but leaves gaps for an agent to infer.

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?

With 0% schema description coverage, the description must explain parameters, but it only lists possible values for style and model, omitting the meaning or role of the required 'query' parameter. It partially compensates by specifying style options, but the critical 'query' param is left undefined, leaving a significant semantic gap.

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 'Synthesize a final answer from a list of document strings' uses a specific verb (synthesize) and resource (document strings), clearly distinguishing it from sibling tools like research or scrape_url. The purpose is unambiguous and immediately conveys the core function.

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?

Usage is implied by the description: you should use this when you have document strings and need a synthesized answer. However, there is no explicit when-to-use, exclusions, or alternatives mentioned relative to sibling tools such as research or rerank_docs, so the guidance remains implicit rather than instructive.

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. 5 tool updatesv0.1.0
    • First observedrerank_docs
    • First observedresearch
    • First observedscrape_url
    • First observedsearch_all
    • First observedsummarize_docs

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct stage in the research pipeline (search, scrape, rerank, summarize), and `research` serves as an orchestrator that combines these steps. No two tools have overlapping core functions, so an agent can easily select the right tool for a specific need.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (scrape_url, rerank_docs, summarize_docs), but `research` and `search_all` deviate slightly. This is a minor inconsistency that does not hinder readability.

Tool Count5/5

With 5 tools, the server is well-scoped for a research workflow. Each tool covers a necessary step in the pipeline, and the count is neither too sparse nor bloated.

Completeness5/5

The tool set provides end-to-end coverage from searching multiple sources to summarizing final answers. The individual building blocks (search_all, scrape_url, rerank_docs, summarize_docs) and the composite `research` tool leave no obvious gaps for typical research tasks.

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
    Not graded
    quality
    D
    maintenance
    MCP server for internet search via direct Google and DuckDuckGo HTML scraping with AI-powered result normalization and optional summarization, requiring no API keys for search.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Zero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.
    10
    Apache 2.0

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/KB01111/research-mcp'

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