MCP server · Audited from source
GPT Researcher MCP server
by assafelovic/gpt-researcherApache-2.0 licenceAudited 19 Sep 2026 · source 304e85cc096c
Is it safe? No — BLOCK, grade F (45/100). It exposes 2 tools: 2 read, 0 write and 0 destructive. The audit recorded 50 findings (0 critical, 2 high, 12 medium, 32 low). Maintainer's description: An autonomous agent that conducts deep research on any data using any LLM providers
Cite
Cite this page
ModelsAtlas. “GPT Researcher MCP server (assafelovic/gpt-researcher)”. Retrieved 19 Sep 2026. https://modelsatlas.com/mcp/assafelovic/gpt-researcher-1
Why this is BLOCK. The audit found 0 critical and 2 high findings; the most severe is Code injection at gpt_researcher/scraper/browser/browser.py:140. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
2 MCP servers are called GPT Researcher. You are viewing assafelovic/gpt-researcher. Compare all 2 →
- assafelovic/gptr-mcp★ 371✓SAFE
- assafelovic/gpt-researcher★ 29,523✕BLOCK
Trust audit
Audit 0.4.1 · full source read 19 Sep 2026
50 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared6 observations
- NetworkDeclared15 observations
- ShellDeclared2 observations
- DependenciesNot pinnedSome ranges float
- SecretsFoundSee the findings
Findings (50)
Sorted by severity · the 25 most severe of 50 are listed
HIGHCode injectioncode.deserialize · gpt_researcher/scraper/browser/browser.py:140
cookies = pickle.load(open(self.cookie_filename, "rb"))
- Why
- deserialises untrusted bytes into live objects
- Fix
- use json or yaml.safe_load
HIGHNetwork egressnet.tls_off · gpt_researcher/scraper/pymupdf/pymupdf.py:53
response = http.get(self.link, timeout=(5, 30), stream=True, verify=False)
- Why
- certificate verification is disabled
- Fix
- leave verification on
MEDIUMInventory / provenanceinv.binary · deep_agents/benchmark_data/internal_docs/product/vlx500_product_brief.docx
vlx500_product_brief.docx
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
MEDIUMCode injectioncode.dynamic_import · gpt_researcher/llm_provider/generic/base.py:419
importlib.import_module(pkg)
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.beacon_words · frontend/nextjs/types/react-ga4.d.ts:19
transport?: 'beacon' | 'xhr' | 'image';
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · .env.example:14
# NEXT_PUBLIC_GPTR_API_URL=http://0.0.0.0:8000 # Defaults to localhost:8000 if not set
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · Dockerfile.fullstack:135
echo ' proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · Dockerfile.fullstack:143
echo ' proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · Dockerfile.fullstack:151
echo ' proxy_pass http://127.0.0.1:8000;' >> /etc/nginx/nginx.conf && \
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMNetwork egressnet.raw_ip · Dockerfile.fullstack:163
echo ' proxy_pass http://127.0.0.1:3001;' >> /etc/nginx/nginx.conf && \
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMObfuscation / stealthobf.zero_width · frontend/scripts.js:808
output: '🧙♂️ Gathering information and analyzing your research topic...',
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · docs/docs/gpt-researcher/context/tailored-research.md:114
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.db_uri · docs/docs/gpt-researcher/context/vector-stores.md:95
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · frontend/nextjs/README.md:80
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWCode injectioncode.dynamic_import · .github/workflows/tests.yml:51
importlib.import_module(m.name)
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWCode injectioncode.dynamic_import · tests/test_retriever_requires_scraping.py:128
cls = getattr(importlib.import_module(import_path), cls_name)
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWCode injectioncode.eval_exec · tests/test_agent_creator_json_shape.py:31
exec(compile(src, str(path), "exec"), ns)
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWCode injectioncode.eval_exec · tests/test_filter_urls_guards.py:28
exec(compile(wrapper, "filter_urls.py", "exec"), ns)
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWInsecure cryptocrypto.weak_hash · backend/report_type/basic_report/basic_report.py:69
query_hash = hashlib.md5(query.encode()).hexdigest()[:8]
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInsecure cryptocrypto.weak_hash · backend/report_type/detailed_report/detailed_report.py:81
query_hash = hashlib.md5(query.encode()).hexdigest()[:8]
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInsecure cryptocrypto.weak_hash · backend/server/server_utils.py:126
task_hash = hashlib.md5(task.encode('utf-8', errors='ignore')).hexdigest()[:10]- Why
- No further detail recorded for this rule.
- Fix
- —
Tools it exposes
2 declared in source · 0 destructive
| Tool | What it does | Risk |
|---|---|---|
ask | Ask a question to the bot | read |
ping | Replies with Pong! | read |
Safer alternatives
getzep/graphiti
Build Real-Time Knowledge Graphs for AI Agents
langchain-ai/mcpdoc
Expose llms-txt to IDEs for development
assafelovic/gptr-mcp
MCP server for enabling LLM applications to perform deep research via the MCP protocol
Audit history
- ✕BLOCK F 45 / 100
Source changed, verdict held ·
304e85cc096c
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about GPT Researcher MCP server
What is the GPT Researcher MCP server?
What tools does GPT Researcher expose?
Is GPT Researcher safe to connect to an agent?
What credentials does GPT Researcher need?
How does GPT Researcher run?
How current is this page?
Which GPT Researcher MCP server is the right one?
I already installed GPT Researcher. What should I do?
Can the verdict change?
Sources
- assafelovic/gpt-researcher on GitHub — the source we read, its licence, stars and activityObserved · 19 Sep 2026
- ModelsAtlas trust audit — BLOCK verdict for commit 304e85cc096cObserved · 19 Sep 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the GPT Researcher MCP server?
- What tools does GPT Researcher expose?
- Is GPT Researcher safe to connect to an agent?