CRIT
MINED107
Missing import: `html` used but not imported
mcp_server/tools/notification.py:684
CRIT
MINED107
Missing import: `stat` used but not imported
trendradar/notification/splitter.py:1264
CRIT
MINED107
Missing import: `platform` used but not imported
trendradar/notification/splitter.py:1572
CRIT
MINED107
Missing import: `stat` used but not imported
trendradar/notification/dispatcher.py:117
CRIT
MINED107
Missing import: `platform` used but not imported
trendradar/notification/dispatcher.py:144
CRIT
MINED107
Missing import: `stat` used but not imported
trendradar/ai/analyzer.py:271
CRIT
MINED107
Missing import: `platform` used but not imported
trendradar/ai/analyzer.py:475
CRIT
slack-webhook-url
Discovered a Slack Webhook, which could lead to unauthorized message posting and data lea…
README-EN.md:1753
CRIT
slack-webhook-url
Discovered a Slack Webhook, which could lead to unauthorized message posting and data lea…
README.md:1807
CRIT
GHSA-r75f-5x8p-qvmc
litellm: GHSA-r75f-5x8p-qvmc
uv.lock
CRIT
GHSA-jjhc-v7c2-5hh6
litellm: GHSA-jjhc-v7c2-5hh6
uv.lock
CRIT
GHSA-vv7q-7jx5-f767
fastmcp: GHSA-vv7q-7jx5-f767
uv.lock
CRIT
GHSA-wvwj-cvrp-7pv5
authlib: GHSA-wvwj-cvrp-7pv5
uv.lock
CRIT
GHSA-r75f-5x8p-qvmc
litellm: GHSA-r75f-5x8p-qvmc
requirements.txt
CRIT
GHSA-jjhc-v7c2-5hh6
litellm: GHSA-jjhc-v7c2-5hh6
requirements.txt
CRIT
GHSA-vv7q-7jx5-f767
fastmcp: GHSA-vv7q-7jx5-f767
requirements.txt
HIGH
SEC128
[SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call …
trendradar/utils/url.py:82
HIGH
SEC029
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT…
trendradar/utils/url.py:38
HIGH
SEC029
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT…
trendradar/notification/formatters.py:26
HIGH
SEC029
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTT…
trendradar/crawler/rss/parser.py:196
HIGH
MINED001
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows e…
trendradar/utils/time.py:124
HIGH
MINED001
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows e…
trendradar/crawler/rss/parser.py:191
HIGH
MINED001
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows e…
trendradar/core/frequency.py:196
HIGH
MINED012
[MINED012] Curl Pipe Bash: curl ... | sh / bash — runs unverified network code.
setup-mac.sh:27
HIGH
SEC078
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang …
trendradar/crawler/fetcher.py:120
HIGH
SEC078
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang …
mcp_server/tools/article_reader.py:82
HIGH
MINED004
[MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums).
mcp_server/services/cache_service.py:55
HIGH
MINED108
`self.get_time` used but never assigned in __init__
trendradar/context.py:358
HIGH
MINED108
`self.region_order` used but never assigned in __init__
trendradar/context.py:357
HIGH
MINED108
`self.render_html` used but never assigned in __init__
trendradar/context.py:336
HIGH
MINED108
`self.format_time` used but never assigned in __init__
trendradar/context.py:335
HIGH
MINED108
`self.format_date` used but never assigned in __init__
trendradar/context.py:334
HIGH
MINED108
`self.rank_threshold` used but never assigned in __init__
trendradar/context.py:332
HIGH
MINED108
`self.show_new_section` used but never assigned in __init__
trendradar/context.py:304
HIGH
MINED108
`self.rank_threshold` used but never assigned in __init__
trendradar/context.py:303
HIGH
MINED108
`self.convert_time_display` used but never assigned in __init__
trendradar/context.py:281
HIGH
MINED108
`self.is_first_crawl` used but never assigned in __init__
trendradar/context.py:280
HIGH
MINED108
`self.weight_config` used but never assigned in __init__
trendradar/context.py:277
HIGH
MINED108
`self.rank_threshold` used but never assigned in __init__
trendradar/context.py:273
HIGH
MINED108
`self.get_storage_manager` used but never assigned in __init__
trendradar/context.py:232
HIGH
MINED108
`self.get_storage_manager` used but never assigned in __init__
trendradar/context.py:228
HIGH
MINED108
`self.get_storage_manager` used but never assigned in __init__
trendradar/context.py:222
HIGH
MINED108
`self.format_date` used but never assigned in __init__
trendradar/context.py:212
HIGH
MINED108
`self.timezone` used but never assigned in __init__
trendradar/context.py:206
HIGH
MINED108
`self.timezone` used but never assigned in __init__
trendradar/context.py:173
HIGH
MINED108
`self.timezone` used but never assigned in __init__
trendradar/context.py:169
HIGH
MINED108
`self.timezone` used but never assigned in __init__
trendradar/context.py:165
HIGH
MINED108
`self.timezone` used but never assigned in __init__
trendradar/context.py:161
HIGH
MINED108
`self.filter_method` used but never assigned in __init__
trendradar/context.py:155
HIGH
MINED108
`self.rss_config` used but never assigned in __init__
trendradar/context.py:119
HIGH
MINED108
`self.rss_config` used but never assigned in __init__
trendradar/context.py:114
HIGH
MINED108
`self.platforms` used but never assigned in __init__
trendradar/context.py:104
HIGH
SEC016
[SEC016] LLM Prompt Injection — User Input in AI Prompt: User-supplied text is interpolat…
trendradar/ai/translator.py:176
HIGH
MINED115
Action `actions/github-script` pinned to mutable ref `@v7`
.github/workflows/issue-guard.yml:39
HIGH
MINED115
Action `github/ai-moderator` pinned to mutable ref `@v1`
.github/workflows/issue-guard.yml:25
HIGH
MINED115
Action `actions/checkout` pinned to mutable ref `@v4`
.github/workflows/issue-guard.yml:22
HIGH
MINED115
Action `Mattraks/delete-workflow-runs` pinned to mutable ref `@v2`
.github/workflows/clean-crawler.yml:21
HIGH
MINED115
Action `actions/checkout` pinned to mutable ref `@v6`
.github/workflows/docker.yml:83
HIGH
MINED115
Action `actions/checkout` pinned to mutable ref `@v6`
.github/workflows/docker.yml:33
HIGH
MINED115
Action `astral-sh/setup-uv` pinned to mutable ref `@v7`
.github/workflows/crawler.yml:122
HIGH
MINED115
Action `actions/setup-python` pinned to mutable ref `@v6`
.github/workflows/crawler.yml:116
HIGH
MINED115
Action `actions/checkout` pinned to mutable ref `@v6`
.github/workflows/crawler.yml:57
HIGH
MINED118
Dockerfile FROM `python:3.12-slim-bookworm` not pinned by digest
docker/Dockerfile:1
HIGH
MINED118
Dockerfile FROM `python:3.12-slim-bookworm` not pinned by digest
docker/Dockerfile.mcp:1
HIGH
GHSA-gm62-xv2j-4w53
urllib3: GHSA-gm62-xv2j-4w53
uv.lock
HIGH
GHSA-38jv-5279-wg99
urllib3: GHSA-38jv-5279-wg99
uv.lock
HIGH
GHSA-2xpw-w6gg-jr37
urllib3: GHSA-2xpw-w6gg-jr37
uv.lock
HIGH
PYSEC-2026-141
urllib3: PYSEC-2026-141
uv.lock
HIGH
GHSA-7f5h-v6xp-fcq8
starlette: GHSA-7f5h-v6xp-fcq8
uv.lock
HIGH
PYSEC-2026-161
starlette: PYSEC-2026-161
uv.lock
HIGH
GHSA-wp53-j4wj-2cfg
python-multipart: GHSA-wp53-j4wj-2cfg
uv.lock
HIGH
GHSA-pp6c-gr5w-3c5g
python-multipart: GHSA-pp6c-gr5w-3c5g
uv.lock
HIGH
GHSA-9h52-p55h-vw2f
mcp: GHSA-9h52-p55h-vw2f
uv.lock
HIGH
GHSA-xqmj-j6mv-4862
litellm: GHSA-xqmj-j6mv-4862
uv.lock
HIGH
GHSA-wxxx-gvqv-xp7p
litellm: GHSA-wxxx-gvqv-xp7p
uv.lock
HIGH
GHSA-v4p8-mg3p-g94g
litellm: GHSA-v4p8-mg3p-g94g
uv.lock
HIGH
GHSA-69x8-hrgq-fjj8
litellm: GHSA-69x8-hrgq-fjj8
uv.lock
HIGH
GHSA-53mr-6c8q-9789
litellm: GHSA-53mr-6c8q-9789
uv.lock
HIGH
GHSA-rww4-4w9c-7733
fastmcp: GHSA-rww4-4w9c-7733
uv.lock
HIGH
GHSA-rcfx-77hg-w2wv
fastmcp: GHSA-rcfx-77hg-w2wv
uv.lock
HIGH
GHSA-c2jp-c369-7pvx
fastmcp: GHSA-c2jp-c369-7pvx
uv.lock
HIGH
GHSA-5h2m-4q8j-pqpj
fastmcp: GHSA-5h2m-4q8j-pqpj
uv.lock
HIGH
GHSA-r6ph-v2qm-q3c2
cryptography: GHSA-r6ph-v2qm-q3c2
uv.lock
HIGH
PYSEC-2026-36
cryptography: PYSEC-2026-36
uv.lock
HIGH
PYSEC-2026-35
cryptography: PYSEC-2026-35
uv.lock
HIGH
GHSA-m344-f55w-2m6j
authlib: GHSA-m344-f55w-2m6j
uv.lock
HIGH
GHSA-7wc2-qxgw-g8gg
authlib: GHSA-7wc2-qxgw-g8gg
uv.lock
HIGH
GHSA-7432-952r-cw78
authlib: GHSA-7432-952r-cw78
uv.lock
HIGH
PYSEC-2026-25
authlib: PYSEC-2026-25
uv.lock
HIGH
PYSEC-2026-188
authlib: PYSEC-2026-188
uv.lock
HIGH
GHSA-xqmj-j6mv-4862
litellm: GHSA-xqmj-j6mv-4862
requirements.txt
HIGH
GHSA-wxxx-gvqv-xp7p
litellm: GHSA-wxxx-gvqv-xp7p
requirements.txt
HIGH
GHSA-v4p8-mg3p-g94g
litellm: GHSA-v4p8-mg3p-g94g
requirements.txt
HIGH
GHSA-69x8-hrgq-fjj8
litellm: GHSA-69x8-hrgq-fjj8
requirements.txt
HIGH
GHSA-53mr-6c8q-9789
litellm: GHSA-53mr-6c8q-9789
requirements.txt
HIGH
GHSA-rww4-4w9c-7733
fastmcp: GHSA-rww4-4w9c-7733
requirements.txt
HIGH
GHSA-rcfx-77hg-w2wv
fastmcp: GHSA-rcfx-77hg-w2wv
requirements.txt
HIGH
GHSA-c2jp-c369-7pvx
fastmcp: GHSA-c2jp-c369-7pvx
requirements.txt
HIGH
GHSA-5h2m-4q8j-pqpj
fastmcp: GHSA-5h2m-4q8j-pqpj
requirements.txt
HIGH
CORE_NO_TESTS
No test files found
—
MED
CFG006
[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build art…
—
MED
SEC136
[SEC136] AI-typical over-broad exception handler swallowing all errors: Catch-all excepti…
trendradar/utils/time.py:269
MED
SEC041
[SEC041] Tabnabbing — target="_blank" without rel="noopener noreferrer": <a target="_blan…
trendradar/report/formatter.py:234
MED
SEC015
[SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. …
mcp_server/services/cache_service.py:14
MED
MINED111
Bare except continues silently
docker/manage.py:236
MED
MINED111
Bare except continues silently
docker/manage.py:149
MED
MINED111
Bare except continues silently
docker/manage.py:127
MED
MINED111
Bare except continues silently
docker/manage.py:46
MED
MINED111
Bare except continues silently
docker/manage.py:31
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1897
MED
MINED111
Bare except continues silently
trendradar/__main__.py:2008
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1925
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1876
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1762
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1517
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1211
MED
MINED111
Bare except continues silently
trendradar/__main__.py:617
MED
MINED111
Bare except continues silently
trendradar/__main__.py:568
MED
MINED111
Bare except continues silently
trendradar/__main__.py:445
MED
MINED111
Bare except continues silently
trendradar/__main__.py:298
MED
MINED111
Bare except continues silently
trendradar/__main__.py:266
MED
MINED111
Bare except continues silently
trendradar/__main__.py:164
MED
MINED111
Bare except continues silently
trendradar/__main__.py:2317
MED
MINED111
Bare except continues silently
trendradar/__main__.py:2264
MED
MINED111
Bare except continues silently
trendradar/__main__.py:2080
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1865
MED
MINED111
Bare except continues silently
trendradar/__main__.py:1816
MED
MINED111
Bare except continues silently
trendradar/__main__.py:75
MED
MINED111
Bare except continues silently
mcp_server/server.py:177
MED
DKR003
Compose service `trendradar-mcp` image uses the latest tag
docker/docker-compose.yml:57
MED
DKR003
Compose service `trendradar` image uses the latest tag
docker/docker-compose.yml:1
MED
DEPCUR-PY
Python package `tenacity` is 1 major version(s) behind (8.5.0 -> 9.1.4)
requirements.txt:10
MED
DEPCUR-PY
Python package `websockets` is 3 major version(s) behind (13.1 -> 16.0)
requirements.txt:5
MED
DEPCUR-PY
Python package `fastmcp` is 1 major version(s) behind (2.12.5 -> 3.4.0)
requirements.txt:4
MED
GHSA-hgf8-39gv-g3f2
werkzeug: GHSA-hgf8-39gv-g3f2
uv.lock
MED
GHSA-87hc-h4r5-73f7
werkzeug: GHSA-87hc-h4r5-73f7
uv.lock
MED
GHSA-29vq-49wr-vm6x
werkzeug: GHSA-29vq-49wr-vm6x
uv.lock
MED
GHSA-mj87-hwqh-73pj
python-multipart: GHSA-mj87-hwqh-73pj
uv.lock
MED
GHSA-mf9w-mj56-hr94
python-dotenv: GHSA-mf9w-mj56-hr94
uv.lock
MED
GHSA-65pc-fj4g-8rjx
idna: GHSA-65pc-fj4g-8rjx
uv.lock
MED
GHSA-rj5c-58rq-j5g5
fastmcp: GHSA-rj5c-58rq-j5g5
uv.lock
MED
GHSA-mxxr-jv3v-6pgc
fastmcp: GHSA-mxxr-jv3v-6pgc
uv.lock
MED
GHSA-m8x7-r2rg-vh5g
fastmcp: GHSA-m8x7-r2rg-vh5g
uv.lock
MED
GHSA-fg6f-75jq-6523
authlib: GHSA-fg6f-75jq-6523
uv.lock
MED
GHSA-w2fm-2cpv-w7v5
aiohttp: GHSA-w2fm-2cpv-w7v5
uv.lock
MED
GHSA-p998-jp59-783m
aiohttp: GHSA-p998-jp59-783m
uv.lock
MED
GHSA-m5qp-6w8w-w647
aiohttp: GHSA-m5qp-6w8w-w647
uv.lock
MED
GHSA-jg22-mg44-37j8
aiohttp: GHSA-jg22-mg44-37j8
uv.lock
MED
GHSA-hg6j-4rv6-33pg
aiohttp: GHSA-hg6j-4rv6-33pg
uv.lock
MED
GHSA-c427-h43c-vf67
aiohttp: GHSA-c427-h43c-vf67
uv.lock
MED
GHSA-rj5c-58rq-j5g5
fastmcp: GHSA-rj5c-58rq-j5g5
requirements.txt
MED
GHSA-mxxr-jv3v-6pgc
fastmcp: GHSA-mxxr-jv3v-6pgc
requirements.txt
MED
GHSA-m8x7-r2rg-vh5g
fastmcp: GHSA-m8x7-r2rg-vh5g
requirements.txt
MED
DKR001
Docker final stage has no non-root USER
docker/Dockerfile.mcp:1
MED
DKR001
Docker final stage has no non-root USER
docker/Dockerfile:1
MED
SEC017
[SEC017] Unbounded Input to LLM/External API: User input is passed to an LLM or external …
trendradar/ai/translator.py:176
MED
AGT007
localStorage write failures are swallowed silently
trendradar/report/html.py:2229
MED
WEB003
Public web service has no security.txt
.well-known/security.txt
MED
AGT012
Agent control bridge may listen on a network interface without visible auth
start-http.sh:21
MED
AGT012
Agent control bridge may listen on a network interface without visible auth
mcp_server/server.py:120
MED
WEB015
Public web app has no Content Security Policy
index.html
MED
AGT015
Remote install command pipes network code directly to a shell
setup-mac.sh:27
MED
CORE_LARGE_FILES
Average file size is 602 lines (recommend <300)
—
LOW
COMP001
[COMP001] High cognitive complexity: Function `chat` has cognitive complexity 11 (SonarSo…
trendradar/ai/client.py:42
LOW
COMP001
[COMP001] High cognitive complexity: Function `read_articles_batch` has cognitive complex…
mcp_server/tools/article_reader.py:139
LOW
COMP001
[COMP001] High cognitive complexity: Function `make_cache_key` has cognitive complexity 1…
mcp_server/services/cache_service.py:14
LOW
DEPCUR-PY
Python package `json-repair` is minor version(s) behind (0.58.6 -> 0.60.1)
requirements.txt:9
LOW
DEPCUR-PY
Python package `litellm` is minor version(s) behind (1.82.6 -> 1.87.1)
requirements.txt:8
LOW
DEPCUR-PY
Python package `pytz` is minor version(s) behind (2026.1 -> 2026.2)
requirements.txt:2
LOW
DEPCUR-PY
Python package `requests` is minor version(s) behind (2.33.0 -> 2.34.2)
requirements.txt:1
LOW
GHSA-5239-wwwm-4pmq
pygments: GHSA-5239-wwwm-4pmq
uv.lock
LOW
GHSA-mwh4-6h8g-pg8w
aiohttp: GHSA-mwh4-6h8g-pg8w
uv.lock
LOW
GHSA-hcc4-c3v8-rx92
aiohttp: GHSA-hcc4-c3v8-rx92
uv.lock
LOW
GHSA-966j-vmvw-g2g9
aiohttp: GHSA-966j-vmvw-g2g9
uv.lock
LOW
GHSA-63hf-3vf5-4wqf
aiohttp: GHSA-63hf-3vf5-4wqf
uv.lock
LOW
GHSA-3wq7-rqq7-wx6j
aiohttp: GHSA-3wq7-rqq7-wx6j
uv.lock
LOW
GHSA-2vrm-gr82-f7m5
aiohttp: GHSA-2vrm-gr82-f7m5
uv.lock
LOW
AIC003
Duplicated implementation block across source files
trendradar/storage/remote.py:103
LOW
AIC003
Duplicated implementation block across source files
mcp_server/tools/system.py:43
LOW
AIC003
Duplicated implementation block across source files
mcp_server/tools/storage_sync.py:254
LOW
AIC003
Duplicated implementation block across source files
mcp_server/tools/search_tools.py:191
LOW
WEB001
Public web app has no robots.txt
robots.txt
LOW
WEB002
Public web app has no sitemap
sitemap.xml
LOW
DKR008
.dockerignore misses sensitive defaults
.dockerignore
LOW
WEB008
Public docs site has no llms.txt
llms.txt
LOW
DKC010
Compose service lacks no-new-privileges hardening
docker/docker-compose.yml:57
LOW
DKC010
Compose service lacks no-new-privileges hardening
docker/docker-compose.yml:1
LOW
DKC006
Compose service does not declare a runtime user
docker/docker-compose.yml:57
LOW
DKC006
Compose service does not declare a runtime user
docker/docker-compose.yml:1
LOW
WEB011
Public web app has no humans.txt
humans.txt
INFO
MINED050
[MINED050] Stub Only Function: Function declared but body is just pass, return None, rais…
trendradar/utils/time.py:125
INFO
MINED050
[MINED050] Stub Only Function: Function declared but body is just pass, return None, rais…
trendradar/crawler/rss/parser.py:192
INFO
MINED050
[MINED050] Stub Only Function: Function declared but body is just pass, return None, rais…
trendradar/core/frequency.py:63
INFO
MINED062
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
trendradar/crawler/rss/parser.py:24
INFO
MINED062
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
trendradar/crawler/rss/fetcher.py:20
INFO
MINED062
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
trendradar/ai/translator.py:16
INFO
MINED067
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang f…
trendradar/crawler/fetcher.py:120
INFO
MINED067
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang f…
trendradar/core/cdn.py:53
INFO
MINED067
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang f…
mcp_server/tools/article_reader.py:82
INFO
MINED043
[MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr…
mcp_server/tools/article_reader.py:74