Korean stock market theme lifecycle analysis for 250+ KOSPI/KOSDAQ investment themes
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in MongLong0214/stock-ai-newsletter
- HIGH code analysis flagged dynamic code execution in MongLong0214/stock-ai-newsletter
- HIGH code analysis flagged dynamic code execution in MongLong0214/stock-ai-newsletter
- HIGH code analysis flagged dynamic code execution ×2 in MongLong0214/stock-ai-newsletter
transport stdio · http
verified
reported
listed in the official MCP registry counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
no tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit bc52876 · analyzer v18 · 11h ago
skills & prompt files 4
- skillMongLong0214-stock-ai-newsletter-bc52876/.agents/skills/programmatic-seo/SKILL.md
- skillMongLong0214-stock-ai-newsletter-bc52876/.agents/skills/schema-markup/SKILL.md
- skillMongLong0214-stock-ai-newsletter-bc52876/.agents/skills/seo-audit/SKILL.md
- skillMongLong0214-stock-ai-newsletter-bc52876/.claude/skills/seo/SKILL.md
danger signals1
- dynamic code executionnew Function()MongLong0214-stock-ai-newsletter-bc52876/lib/tli/constants/tli-params.ts:185
const nodeRequire = new Function('mod', 'return require(mod)') as (mod: string) => unknown
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 15
- fs MongLong0214-stock-ai-newsletter-bc52876/lib/crash-alert-to-image.ts :3
import { existsSync } from 'fs'; - fs MongLong0214-stock-ai-newsletter-bc52876/lib/og-image-response.ts :2
import { readFile } from 'node:fs/promises'; - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/generate-blog-post.ts :4
import { existsSync } from 'fs'; - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/prepare-newsletter.ts :4
import { existsSync } from 'fs'; - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/send-newsletter.ts :4
import { existsSync } from 'fs'; - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/send-test-email.ts :4
import { existsSync } from 'fs'; - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/ops/run-level4-calibration.ts :4
import { mkdirSync, writeFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/ops/run-level4-certification.ts :4
import { mkdirSync, writeFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/ops/run-level4-drift.ts :4
import { mkdirSync, writeFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/ops/run-level4-weight-tuning.ts :4
import { mkdirSync, writeFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/research/backtest-comparisons.ts :3
import { mkdir, writeFile } from 'node:fs/promises' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/research/comparison-v4-baselines.ts :1
import { existsSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/research/optimizer/dump-data.ts :1
import { readFileSync, writeFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/research/optimizer/evaluate.ts :3
import { readFileSync } from 'node:fs' - fs MongLong0214-stock-ai-newsletter-bc52876/scripts/update-archive-data.ts :4
import { existsSync, writeFileSync, mkdirSync } from 'fs';
network 18
- net MongLong0214-stock-ai-newsletter-bc52876/app/archive/_hooks/use-stock-prices.ts :81
* 재시도 로직을 포함한 fetch (모듈 레벨) - net MongLong0214-stock-ai-newsletter-bc52876/app/archive/_utils/api/kis/client.ts :38
return await fetch(url, { ...options, signal: controller.signal }); - net MongLong0214-stock-ai-newsletter-bc52876/app/blog/_services/http-client.ts :3
import { Agent, fetch as undiciFetch } from 'undici'; - net MongLong0214-stock-ai-newsletter-bc52876/app/blog/_services/serp-api.ts :73
const res = await fetch(url, { - net MongLong0214-stock-ai-newsletter-bc52876/app/themes/[id]/_apis/index.ts :5
const res = await fetch(`/api/tli/themes/${id}`) - net MongLong0214-stock-ai-newsletter-bc52876/app/themes/[id]/_components/stock-list-kis.ts :84
const response = await fetch(`/api/stock/price?tickers=${chunk.join(',')}`, { - net MongLong0214-stock-ai-newsletter-bc52876/app/themes/_apis/index.ts :5
const res = await fetch('/api/tli/scores/ranking') - net MongLong0214-stock-ai-newsletter-bc52876/lib/indexnow.ts :25
const response = await fetch(INDEXNOW_ENDPOINT, { - net MongLong0214-stock-ai-newsletter-bc52876/lib/market-data/kis-market-assessment.ts :321
return await fetch(url, { ...options, signal: controller.signal }); - net MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
`}var ii=class{constructor(e=Cg.stdin,r=Cg.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new si,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._one - net MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/fetch-helper.js :50
const response = await fetch(url.toString(), { - net MongLong0214-stock-ai-newsletter-bc52876/mcp/src/fetch-helper.ts :80
const response = await fetch(url.toString(), { - net MongLong0214-stock-ai-newsletter-bc52876/scripts/mcp-stats.ts :20
const res = await fetch(`${SUPABASE_URL}/rest/v1/rpc/get_mcp_analytics_stats`, { - net MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-autocomplete.ts :21
const res = await fetch(url, { - net MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-datalab.ts :78
const response = await fetch('https://openapi.naver.com/v1/datalab/search', { - net MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-finance-theme-list.ts :17
const res = await fetch(url, { signal: AbortSignal.timeout(30000) }) - net MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-finance-themes.ts :26
const res = await fetch(url, { signal: AbortSignal.timeout(30000) }); - net MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-news.ts :56
const res = await fetch(`https://openapi.naver.com/v1/search/news.json?${params}`, {
secrets 26
- secrets MongLong0214-stock-ai-newsletter-bc52876/app/api/admin/mcp-stats/route.ts :5
const ADMIN_SECRET = process.env.ADMIN_SECRET - secrets MongLong0214-stock-ai-newsletter-bc52876/app/api/admin/tli/comparison-v4/promote/route.ts :10
const ADMIN_SECRET = process.env.ADMIN_SECRET - secrets MongLong0214-stock-ai-newsletter-bc52876/app/api/cron/send-newsletter/route.ts :8
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || 'placeholder-key', - secrets MongLong0214-stock-ai-newsletter-bc52876/app/api/cron/send-recommendations/route.ts :39
if (!process.env.CRON_SECRET || !verifyBearerToken(authHeader, process.env.CRON_SECRET)) { - secrets MongLong0214-stock-ai-newsletter-bc52876/app/archive/_utils/api/kis/client.ts :87
KIS_APP_KEY: process.env.KIS_APP_KEY || '', - secrets MongLong0214-stock-ai-newsletter-bc52876/app/archive/_utils/api/kis/token-storage.ts :18
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/app/archive/_utils/cache/stock-price.ts :39
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/app/blog/_services/serp-api.ts :18
const apiKey = process.env.SERP_API_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/app/llms.txt/route.ts :16
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || 'placeholder-key', - secrets MongLong0214-stock-ai-newsletter-bc52876/app/themes/(list)/page.tsx :53
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || 'placeholder-key', - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/_utils/env-validator.ts :24
KIS_APP_KEY: process.env.KIS_APP_KEY, - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/env.ts :19
NEXT_PUBLIC_SUPABASE_ANON_KEY: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/indexnow.ts :2
const INDEXNOW_KEY = process.env.INDEXNOW_KEY || '' - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/market-data/kis-market-assessment.ts :281
const apiKey = process.env.SERP_API_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/sendgrid.ts :17
const apiKey = process.env.SENDGRID_API_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/supabase.ts :4
const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/supabase/server-client.ts :21
const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/lib/twitter.ts :6
const apiKey = process.env.TWITTER_API_KEY; - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/mcp-stats.ts :7
const SERVICE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/prepare-newsletter.ts :19
if (!process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) { - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/send-newsletter.ts :20
if (!process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) { - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-datalab.ts :41
const clientSecret = process.env.NAVER_CLIENT_SECRET - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/collectors/naver-news.ts :37
const clientSecret = process.env.NAVER_CLIENT_SECRET - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/research/optimizer/dump-data.ts :44
const key = process.env.SUPABASE_SERVICE_ROLE_KEY ?? '' - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/tli/shared/supabase-admin.ts :6
const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY || ''; - secrets MongLong0214-stock-ai-newsletter-bc52876/scripts/update-archive-data.ts :26
if (!process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {
tool registrations 15
- get_theme_ranking MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
- get_theme_detail MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
- get_theme_history MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
- search_themes MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
- get_stock_theme MongLong0214-stock-ai-newsletter-bc52876/mcp/.smithery/shttp/module.js :42
- compare_themes MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/compare-themes.js :9
- get_market_summary MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-market-summary.js :8
- get_methodology MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-methodology.js :33
- get_predictions MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-predictions.js :9
- get_theme_changes MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-theme-changes.js :14
- get_theme_detail MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-theme-detail.js :13
- get_theme_history MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-theme-history.js :11
- get_theme_ranking MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/get-theme-ranking.js :23
- search_stocks MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/search-stocks.js :10
- search_themes MongLong0214-stock-ai-newsletter-bc52876/mcp/dist/tools/search-themes.js :9
declared dependencies 51
- @fontsource/noto-sans-kr@^5.2.9
- @google/genai@^1.30.0
- @radix-ui/react-slot@^1.2.3
- @radix-ui/react-tooltip@^1.2.8
- @sendgrid/mail@^8.1.6
- @supabase/supabase-js@^2.75.0
- @tanstack/react-query@^5.90.20
- @vercel/analytics@^1.5.0
- @vercel/speed-insights@^1.2.0
- canvas@^3.2.0
- cheerio@^1.1.2
- class-variance-authority@^0.7.1
- clsx@^2.1.1
- date-fns@^4.1.0
- date-fns-tz@^3.2.0
- disposable-email-domains-js@^1.18.0
- domhandler@^5.0.3
- dotenv@^17.2.3
- framer-motion@^12.23.22
- google-auth-library@^10.5.0
- lucide-react@^0.545.0
- next@15.5.7
- radix-ui@^1.4.3
- react@19.1.0
- react-dom@19.1.0
- recharts@^2.15.4
- rehype-sanitize@^6.0.0
- rehype-stringify@^10.0.1
- remark@^15.0.1
- remark-gfm@^4.0.1
- remark-rehype@^11.1.2
- tailwind-merge@^3.4.0
- twitter-api-v2@^1.27.0
- undici@^7.21.0
- unified@^11.0.5
- zod@^4.1.12
- @eslint/eslintrc@^3
- @tailwindcss/postcss@^4
- @testing-library/jest-dom@^6.9.1
- @testing-library/react@^16.3.2
- @types/node@^20
- @types/react@^19
- @types/react-dom@^19
- eslint@^9
- eslint-config-next@15.5.7
- playwright@^1.57.0
- tailwindcss@^4
- tsx@^4.20.6
- tw-animate-css@^1.4.0
- typescript@^5
- vitest@^4.0.18