Skip to main content
Glama
sourav2024

reddit-radar-mcp

by sourav2024

reddit-radar-mcp

제품이 진정으로 적합한 Reddit 스레드를 찾고, 대화를 재구성하며, 초안으로 작성된 모든 답변을 사용자가 정의한 주장 경계(claim boundary)에 따라 검증합니다.

설계상 읽기 전용입니다. 게시, 투표 또는 계정으로 작동하는 코드 경로는 없으며, 테스트는 앞으로도 그럴 일이 없음을 보장합니다. 초안은 사람이 검토하고, 편집하고, 게시하기 위한 것입니다.

CI npm node license

npx reddit-radar-mcp          # run as an MCP server
npm install reddit-radar-mcp  # or use the scoring/gate functions directly

Node 20.10+ 필요. 빌드 단계 없음, 네이티브 의존성 없음.

왜 존재하는가

일반적인 "소셜 리스닝" 도구는 언급(mention)을 찾습니다. 그것은 쉬운 절반입니다. 어려운 절반은 그 이후의 모든 것입니다: 이 스레드가 실제로 관련이 있는지, 그 사람이 정말로 무엇을 묻는지, 그리고 게시하려는 답변이 사실인지 여부입니다.

이 패키지는 프로덕션에서 실행하면서 얻은 세 가지 주장을 기반으로 구축되었습니다.

  1. 키워드 매칭은 대부분 쓰레기를 생성합니다. 최신성 + 질문 형태 + "추천" 휴리스틱은 문자 그대로 최근 Reddit 게시물에 대해 50/100점을 매깁니다. 해결책은 앵커 규칙(아래 참조)이며, 이것이 여기서 가장 중요한 것입니다.

  2. 스레드가 위치한 곳에 따라 말해야 할 내용이 달라집니다. 구매자 서브레딧과 엔지니어링 서브레딧의 동일한 질문은 다른 댓글을 요구하므로, 서브레딧 계층은 순위뿐만 아니라 행동을 설정합니다.

  3. 프로모션 카피를 작성하는 모델은 자신이 과장했는지 여부를 판단하는 최악의 심판자입니다. 따라서 주장 게이트는 결정적이고, 규칙 기반이며, 서버 측에서 실행됩니다. 차단된 초안을 반환하기를 거부합니다.

빠른 시작

구성을 작성하세요:

프로젝트에 이미 "type": "module"이 설정되어 있지 않은 한 .mjs로 이름을 지정하세요. 그렇지 않으면 Node가 CommonJS로 구문 분석하여 import가 실패합니다.

// radar.config.mjs
import { defineConfig, packs, composePacks } from 'reddit-radar-mcp';

export default defineConfig({
  product: {
    name: 'Acme',
    what: 'CI/CD pipeline observability.',
    claims: ['flaky test detection', 'build timing breakdowns'],
  },

  queries: ['flaky tests', 'CI pipeline slow', 'build times'],

  // REQUIRED. Without it, every recent question looks like an opportunity.
  domainTerms: ['ci', 'pipeline', 'flaky', 'github actions', 'test suite'],

  // Words that mean something else outside your niche.
  ambiguousTerms: ['build', 'runner'],

  tiers: {
    tier1: { mode: 'PROMOTE',        weight: 20, subreddits: ['devops'] },
    tier2: { mode: 'PROMOTE_SOFT',   weight: 15, subreddits: ['sre', 'kubernetes'] },
    tier3: { mode: 'CONTRIBUTE',     weight: 8,  subreddits: ['ExperiencedDevs'] },
    tier4: { mode: 'TECHNICAL_ONLY', weight: 3,  subreddits: ['programming'] },
  },

  gate: {
    ...composePacks(packs.noPricing, packs.noFabricatedMetrics, packs.noCustomerNames),
    productPattern: /\bAcme\b/i,
    unsupported: [
      { term: /\bJenkins\b/i, why: 'No Jenkins integration exists.' },
    ],
  },
});

MCP 서버로 등록하세요:

claude mcp add radar --scope user \
  -e RADAR_CONFIG=/abs/path/radar.config.mjs \
  -- npx reddit-radar-mcp

그런 다음 에이전트에게 말하기만 하면 됩니다: "스윕을 실행하고 답변할 가치가 있는 것을 보여줘."

앵커 규칙

이 패키지에서 가장 유용한 아이디어 하나.

게시물은 도메인과 연결하는 무언가가 있을 때만 앵커링됩니다: 실제 도메인 어휘, 명확한 쿼리 일치 또는 구성된 서브레딧. 게시물의 형태를 설명하는 신호(최근성, 질문 여부, "추천"이라는 단어)는 그 자체로 게시물을 통과시킬 수 없습니다.

이 게이트가 없으면 이러한 형태 신호는 40점 이상으로 합산되어 무엇이든 통과시킵니다. 이 게이트가 있으면 r/podcasts에서 "POD 에피소드"에 대해 묻는 게시물이 진정한 구매 질문보다 높은 순위를 차지하는 일이 중단됩니다.

같은 아이디어에서 두 가지 관련 동작이 파생됩니다:

  • 모호한 용어("build", "POD", "detention")는 두 번째 도메인 신호가 있을 때만 계산됩니다. 또는 게시물이 사용자의 서브레딧 중 하나에 있는 경우(서브레딧 자체가 도메인 컨텍스트이므로).

  • 불만 표출은 크게 감점됩니다(-35). 불만은 구매 질문보다 참여율이 높으므로, 이 규칙이 없으면 순위가 역전되어 "기회"가 동료에 대해 불평하는 사람들이 되어 버립니다.

참여 모드

계층은 모든 결과에 모드를 연결하며, 스윕 출력은 각 스레드 옆에 이를 반복합니다:

모드

의미

PROMOTE

제품 이름을 밝히고, 적합한 기능을 설명하고, 소속을 공개하세요.

PROMOTE_SOFT

먼저 답변하세요. 도구를 요청하는 경우에만 제품을 언급하세요.

CONTRIBUTE

통찰력을 공유하세요. 제품은 자신이 누구인지에 대한 맥락으로만.

TECHNICAL_ONLY

홍보하지 마세요. 거기에는 구매하는 사람이 없습니다. 홍보는 삭제됩니다.

초안 게이트

check_draft는 두 가지 독립적인 검사를 실행하고 차단된 초안을 반환하기를 거부합니다.

주장 게이트 (factCheck) — 주장 경계에 대한 결정적 규칙. 스타터 팩은 네 가지 일반적인 실패 모드를 다룹니다:

차단 내용

noPricing

달러 금액, 단위당 요금, 가격 계층 비교

noFabricatedMetrics

허구의 백분율, 가동 시간/SLA 주장, 검증 불가능한 규모

noCustomerNames

고객 언급(익명 포함), 측정된 결과가 있는 사례 연구

noMarketingSpeak

"활용", "원활한", "강력한", "게임 체인저" (경고)

requireDisclosure

소속을 공개하지 않고 제품 이름을 언급

알아야 할 두 가지 동작:

  • 부인은 항상 허용됩니다. "우리는 Jenkins를 지원하지 않습니다"는 통과합니다. 초기 버전은 이를 차단하여 초안이 제품의 공백에 대해 침묵하도록 만들었습니다. 이는 의도와 반대입니다. 실제 한계를 인정하는 것은 얻을 수 있는 가장 저렴한 신뢰도입니다.

  • 기능 검사는 주장 범위로 제한됩니다. "Jenkins는 자체 호스팅이 필요하다면 확실한 선택입니다"는 게이트를 작동시키지 않습니다. 이는 사용자 제품에 대한 주장이 아니기 때문입니다.

품질 게이트 (styleCheck) — 편집되지 않은 생성된 채우기로 읽히는 텍스트를 포착합니다: 줄표, 세미콜론, 둥근 따옴표, 부정 프레이밍("단지 X가 아니라 Y입니다"), 마케팅 어휘, 평평한 문장 리듬, 빈약한 내용.

이것은 AI 탐지 회피가 아닙니다. 그럴 수 없고 그렇게 하려고도 하지 않습니다. 많은 서브레딧은 저품질 콘텐츠를 금지하며, 중재자는 분류기를 실행하는 대신 댓글을 읽습니다. 따라서 게이트는 해당 규칙이 실제로 요구하는 것을 강제합니다: 실제 내용, 채우기 없음. 사람이 여전히 편집하고 게시하며, 공개는 항상 존재합니다.

내용 검사가 특정 명사가 어떻게 생겼는지 알 수 있도록 도메인 어휘를 전달하세요:

styleCheck(draft, { anchorTerms: [...config.domainTerms, ...config.featureTerms] });

MCP 도구

도구

기능

LLM 비용

plan_sweep

검색 URL + 각각에 대해 실행할 페이지 추출기를 반환

없음

ingest_sweep

스윕 결과를 중복 제거, 점수화, 순위화하여 기회 목록으로 생성

없음

score_thread

게시물 하나에 대한 0–100 점수와 항목별 근거

없음

analyze_thread

스레드 재구성 + 바인딩 주장 제약 조건 반환

없음

parse_thread_html

클라이언트 측 브라우저 추출에서 동일한 작업 수행

없음

check_draft

강제 지점. 승인 또는 차단

없음

get_claim_boundary

주장할 수 있는 것과 없는 것

없음

모든 도구는 결정적입니다. 모델은 글쓰기를 제공하고, 서버는 사실과 거부권을 제공합니다.

Reddit 액세스

하나의 인터페이스 뒤에 있는 세 가지 상호 교환 가능한 어댑터:

  • BrowserRedditClient — 사용자가 읽는 것과 동일한 공개 페이지를 사용자 자신의 브라우저 도구에서 읽습니다. 자격 증명 없음. 이것이 현재 기본 경로입니다.

  • RedditApiClient — 공식 데이터 API에 대한 OAuth. 액세스는 승인을 받아야 합니다. docs/REDDIT-ACCESS.md 참조.

  • FixtureRedditClient — 테스트 및 개발을 위한 로컬 JSON 픽스처.

픽스처는 라이브 응답과 동일한 정규화기를 거치므로 파서는 프로덕션에서 실제 데이터를 처음 만나는 대신 진정으로 실행됩니다.

명확히 말해야 할 주의 사항: 브라우저 모드는 Reddit의 DOM에 의존하며, Reddit은 리디자인을 제공합니다. 추출기는 "논의를 찾을 수 없음"처럼 보이는 빈 스레드를 조용히 반환하는 대신 크게 실패하도록 작성되었습니다.

프로그래밍 방식 사용

import { scoreRelevance, factCheck, styleCheck, packs, composePacks } from 'reddit-radar-mcp';
import config from './radar.config.js';

const result = scoreRelevance(post, config, { matchedQueries: ['flaky tests'] });
if (result.passed) console.log(result.score, result.reasons);

const gate = factCheck(draft, config.gate);
if (!gate.allowed) console.log(gate.findings);

윤리 및 정책

이 도구는 진정으로 기여할 수 있는 대화를 찾는 데 도움을 주기 위해 존재합니다. 여론 조작(astroturfing)을 돕지 않습니다.

  • 게시 자동화 없음. 구현되지 않았으며 테스트로 강제됩니다.

  • 소속 공개. requireDisclosure는 기본적으로 켜져 있습니다. 공개되지 않은 공급업체 댓글은 삭제되고 영구 금지로 이어질 수 있으며, 이는 채널 전체를 종료시킵니다.

  • 계정 하나. Reddit의 책임 있는 빌더 정책은 동일한 사용 사례에 대해 여러 계정을 등록하는 것을 금지합니다. 이것을 사용하여 가짜 계정 네트워크를 운영하지 마세요.

  • 스레드는 점수화되고, 사람은 점수화되지 않습니다. 여기서는 작성자를 프로파일링하지 않으며, 이는 Reddit의 사용자 특성 추론 금지와 일치합니다.

  • 서브레딧 규칙을 존중하세요. TECHNICAL_ONLY는 잘못된 장소에서 홍보하는 것이 무례하고 비생산적이기 때문에 존재합니다.

환경 변수

변수

기본값

용도

RADAR_CONFIG

필수. 구성 파일의 절대 경로 (기본 내보내기가 있는 .js ESM 또는 .json).

REDDIT_MODE

browser

browser, live 또는 fixture. docs/REDDIT-ACCESS.md 참조.

REDDIT_CLIENT_ID

live 모드 전용.

REDDIT_CLIENT_SECRET

live 모드 전용.

REDDIT_USER_AGENT

live 모드 전용. <platform>:<appid>:<version> (by /u/<user>) 형식이어야 합니다.

REDDIT_QPM

60

live 모드의 속도 제한. Reddit이 광고하는 100보다 의도적으로 낮습니다.

RADAR_LOG_LEVEL

info

silent, error, warn, info, debug.

RADAR_LOG_FORMAT

json

json 또는 text.

전체 주석 목록은 .env.example에 있습니다.

로그는 stderr로만 전송됩니다. stdio 전송에서 stdout은 JSON-RPC 프로토콜을 전달하므로 여기에 기록된 모든 것은 스트림을 손상시킵니다. URL의 자격 증명과 민감한 키는 로깅 전에 수정됩니다.

문제 해결

모든 것이 기회로 점수화됩니다. domainTerms가 너무 일반적이거나 누락되었습니다. 해당 목록이 게시물을 도메인에 앵커링하는 것이며, 이것이 없으면 형태 신호가 게시물을 자체적으로 통과시킵니다. 이러한 이유로 구성 검증은 빈 목록을 오류로 처리합니다.

아무것도 점수화되지 않습니다. domainTerms가 게시물 제목에 실제로 나타나는 단어를 사용하는지 확인하세요. 5자 이상의 용어는 간단한 굴절을 일치시킵니다(pipelinepipelines). 더 짧은 용어는 정확히 일치하므로 appapps와 일치하지 않습니다.

좋은 초안이 빈약한 내용으로 차단됩니다. 어휘를 anchorTerms로 전달하세요. MCP 서버는 구성에서 자동으로 이 작업을 수행하지만, 직접 styleCheck() 호출에는 명시적으로 필요합니다.

정직한 한계가 차단됩니다. 그렇게 되어서는 안 됩니다. 부인은 명시적으로 허용됩니다. 보고해 주세요.

Reddit에 "인간임을 증명하세요"가 표시됩니다. 차가운 검색은 JS 챌린지에 직면할 수 있습니다. 먼저 서브레딧 페이지를 로드하면 일반적으로 세션 동안 해결됩니다.

"모듈 외부에서 import 문을 사용할 수 없습니다." 구성이 "type": "module"이 없는 프로젝트의 .js 파일이므로 Node가 CommonJS로 구문 분석합니다. radar.config.mjs로 이름을 바꾸거나 가장 가까운 package.json"type": "module"을 추가하세요. .json 구성은 정규식 리터럴과 composePacks를 희생하면서 문제를 완전히 피합니다.

자세한 내용은 SUPPORT.md를 참조하세요.

테스트

npm test       # 33 unit tests
npm run smoke  # 14 checks over the real MCP wire protocol
npm run verify # everything, including the metadata consistency guard

안전 스위트는 어떤 클라이언트도 쓰기 메서드를 노출하지 않고, 어떤 소스 파일도 Reddit 쓰기 엔드포인트를 참조하지 않으며, 패키지가 게시 기능을 내보내지 않음을 주장합니다.

기여

이슈와 PR을 환영합니다. CONTRIBUTING.md를 참조하세요. 거기에 나열된 영구 제외 사항에 유의하세요: 게시 자동화, 다중 계정 지원 및 AI 탐지 회피는 누락된 기능이 아니라 의도적인 비목표입니다.

이 프로젝트 지원하기

이 프로젝트가 시간을 절약해 준다면, GitHub에서 후원해 주시면 유지보수에 도움이 됩니다. 전적으로 선택 사항입니다 — 이 패키지는 MIT 라이선스이며 앞으로도 그럴 것입니다.

금전적 기여만큼 유용한 비금전적 기여도 있습니다: 재현 설정이 포함된 버그 리포트, 일반화할 수 있는 규칙 팩, 또는 예상치 못한 결과를 보여준 채점 사례에 대한 메모 등이 그것입니다.

라이선스

MIT — LICENSE 참조.

-
license - not tested
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

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

  • Agentic Reddit/HN buying-signal detection for Claude Code, Cursor, and Windsurf via MCP.

  • A personal RAG database you build from chat, so AI creates work that sounds like you.

  • Reddit & X data for AI agents over MCP. Semantic search, hosted, no Reddit API.

View all MCP Connectors

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/sourav2024/reddit-radar-mcp'

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