← MCP servers · assafelovic

GPT Researcher

BLOCKgrade F · trust 45/100

An autonomous agent that conducts deep research on any data using any LLM providers

agentaiautomationdeepresearchllmsmcpmcp serverpython

Overview

From the repository's own README, as read at the audited commit.

<div align="center" id="top"><img src="https://github.com/assafelovic/gpt-researcher/assets/13554167/20af8286-b386-44a5-9a83-3be1365139c3" alt="Logo" width="80">####[![Website](https://img.shields.io/badge/Official%20Website-gptr.dev-teal?style=for-the-badge&logo=world&logoColor=white&color=0891b2)](https://gptr.dev)[![Documentation](https://img.shields.io/badge/Documentation-DOCS-f472b6?logo=googledocs&logoColor=white&style=for-the-badge)](https://docs.gptr.dev)[![Discord](https://img.shields.io/discord/1127851779011391548?logo=discord&logoColor=white&label=Discord&color=34b76a&style=for-the-badge)](https://discord.gg/QgZXvJAccX)[![PyPI version](https://img.shields.io/pypi/v/gpt-researcher?logo=pypi&logoColor=white&style=flat)](https://badge.fury.io/py/gpt-researcher)![GitHub Release](https://img.shields.io/github/v/release/assafelovic/gpt-researcher?style=flat&logo=github)[![Open In Colab](https://img.shields.io/static/v1?message=Open%20in%20Colab&logo=googlecolab&labelColor=grey&color=yellow&label=%20&style=flat&logoSize=40)](https://colab.research.google.com/github/assafelovic/gpt-researcher/blob/master/docs/docs/examples/pip-run.ipynb)[![Docker Image Version](https://img.shields.io/docker/v/elestio/gpt-researcher/latest?arch=amd64&style=flat&logo=docker&logoColor=white&color=1D63ED)](https://hub.docker.com/r/gptresearcher/gpt-researcher)[![Skill](https://img.shields.io/badge/Claude%20Skill-skills.sh-blueviolet?style=flat&logo=anthropic&logoColor=white)](https://skills.sh/assafelovic/gpt-researcher/gpt-researcher)[![Twitter Follow](https://img.shields.io/twitter/follow/assaf_elovic?style=social)](https://twitter.com/assaf_elovic)[English](README.md) | [中文](README-zh_CN.md) | [日本語](README-ja_JP.md) | [한국어](README-ko_KR.md)</div># 🔎 GPT Researcher**GPT Researcher the first open deep research agent designed for both web and local research on any given task.** The agent produces detailed, factual, and unbiased research reports with citations. GPT Researcher provides

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add simple_js_test --env AIMLAPI_API_KEY=${AIMLAPI_API_KEY} --env ATLASCLOUD_API_KEY=${ATLASCLOUD_API_KEY} --env AVIAN_API_KEY=${AVIAN_API_KEY} --env AZURE_OPENAI_API_KEY=${AZURE_OPENAI_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "simple_js_test": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "AIMLAPI_API_KEY": "${AIMLAPI_API_KEY}",
        "ATLASCLOUD_API_KEY": "${ATLASCLOUD_API_KEY}",
        "AVIAN_API_KEY": "${AVIAN_API_KEY}",
        "AZURE_OPENAI_API_KEY": "${AZURE_OPENAI_API_KEY}"
      }
    }
  }
}

Exposed tools (2) 2 read · 0 write · 0 destructive

ToolRiskDescription
askreadAsk a question to the bot
pingreadReplies with Pong!

Details

Source
assafelovic/gpt-researcher
npm
simple_js_test@1.0.0
PyPI
gpt-researcher
Transports
streamable-http
Credentials it reads
AIMLAPI_API_KEYATLASCLOUD_API_KEYAVIAN_API_KEYAZURE_OPENAI_API_KEYBING_API_KEYBOCHA_API_KEYBRAVE_API_KEYCRW_API_KEYDASHSCOPE_API_KEYDEEPSEEK_API_KEYDISCORD_BOT_TOKENEXA_API_KEY
License
Apache-2.0
Stars
29,423 · pushed 16d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (6 observation(s))
Network
declared (15 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
gpt_researcher/scraper/browser/browser.py:140
cookies = pickle.load(open(self.cookie_filename, "rb"))
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
gpt_researcher/scraper/pymupdf/pymupdf.py:53
response = http.get(self.link, timeout=(5, 30), stream=True, verify=False)
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
deep_agents/benchmark_data/internal_docs/product/vlx500_product_brief.docx
vlx500_product_brief.docx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
gpt_researcher/llm_provider/generic/base.py:419
importlib.import_module(pkg)
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
frontend/nextjs/types/react-ga4.d.ts:19
transport?: 'beacon' | 'xhr' | 'image';
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:14
# NEXT_PUBLIC_GPTR_API_URL=http://0.0.0.0:8000  # Defaults to localhost:8000 if not set
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile.fullstack:135
echo '            proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile.fullstack:143
echo '            proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile.fullstack:151
echo '            proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile.fullstack:163
echo '            proxy_pass http://127.0.0.1:3001;' >> /etc/nginx/nginx.conf && \
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
frontend/scripts.js:808
output: '🧙♂️ Gathering information and analyzing your research topic...',
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/docs/gpt-researcher/context/tailored-research.md:114
CONNECTION_STRING = 'postgresql://someuser:somepass@localhost:5432/somedatabase'
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/docs/gpt-researcher/context/vector-stores.md:95
CONNECTION_STRING = 'postgresql://someuser:somepass@localhost:5432/somedatabase'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
frontend/nextjs/README.md:80
apiKey="your-api-key-if-needed"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.cursorignore
.cursorignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/static/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
frontend/nextjs/.babelrc.build.json
.babelrc.build.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
frontend/nextjs/.example.env
.example.env
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
.github/workflows/tests.yml:51
importlib.import_module(m.name)
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_retriever_requires_scraping.py:128
cls = getattr(importlib.import_module(import_path), cls_name)
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_agent_creator_json_shape.py:31
exec(compile(src, str(path), "exec"), ns)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_filter_urls_guards.py:28
exec(compile(wrapper, "filter_urls.py", "exec"), ns)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/report_type/basic_report/basic_report.py:69
query_hash = hashlib.md5(query.encode()).hexdigest()[:8]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/report_type/detailed_report/detailed_report.py:81
query_hash = hashlib.md5(query.encode()).hexdigest()[:8]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
backend/server/server_utils.py:126
task_hash = hashlib.md5(task.encode('utf-8', errors='ignore')).hexdigest()[:10]

Gates applied: no_behavioural_pass.

Audited 2026-09-13 · audit v0.4.0 · source sha 304e85cc096c · full audit: observations/trust-audit/mcp-server/assafelovic__gpt-researcher-1.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-13304e85cc096cBLOCKF45first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the GPT Researcher MCP server?

An autonomous agent that conducts deep research on any data using any LLM providers

What tools does GPT Researcher expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is GPT Researcher safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (45/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does GPT Researcher need?

It reads AIMLAPI_API_KEY, ATLASCLOUD_API_KEY, AVIAN_API_KEY, AZURE_OPENAI_API_KEY, BING_API_KEY, BOCHA_API_KEY, BRAVE_API_KEY, CRW_API_KEY, DASHSCOPE_API_KEY, DEEPSEEK_API_KEY, DISCORD_BOT_TOKEN and EXA_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does GPT Researcher run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as simple_js_test at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (304e85cc096c), read on 2026-09-13. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-13 · job trust-audit-2026-09-13