MCP server that aggregates weekly startup/product/indie news into a report
Project description
Weekly Product Digest MCP
주간 스타트업·제품·인디메이커 뉴스를 여러 공개 소스에서 모아 리포트 형식으로 뽑아주는 MCP 서버입니다. (FastMCP / Python)
수집 소스
| Key | 소스 | 방식 | 점수 |
|---|---|---|---|
techcrunch |
TechCrunch | RSS | – |
betanews |
BetaNews | RSS | – |
producthunt |
Product Hunt | RSS | – |
indiehackers |
Indie Hackers | 3단 폴백: 비공식 피드 → SSR HTML 파싱 → (선택) Algolia | – |
hackernews |
Hacker News (Show HN) | 공개 Algolia API | ⭐ points |
reddit |
Reddit (r/SaaS, r/indiehackers) | 서브레딧 RSS (/top/.rss) |
– |
Reddit 메모: Reddit은 미인증 JSON 엔드포인트를 403으로 차단하므로 서브레딧 Atom 피드(
/r/<sub>/top/.rss?t=week)를 사용합니다. RSS엔 추천수가 없어 Reddit 항목은 점수 하이라이트엔 안 뜨고 자체 섹션에만 표시됩니다. 서브레딧 전부 실패 시 해당 섹션은 "Unavailable"로 정직하게 표기됩니다.
- 모든 소스는 병렬 수집되고, 한 소스가 실패해도 리포트는 나머지로 완성됩니다(섹션에 실패 사유 표기).
- HN Show HN / Reddit은 인디해커 성격을 보강하는 백업 겸 확장 소스입니다.
- 전 구간 UTF-8 처리 (한글 Windows의 cp949 디코딩 문제 회피).
Indie Hackers 이중화 (3단 폴백)
공식 API가 없어 단일 소스 의존을 피하도록 계층화했습니다. 각 계층은 앞 계층이 빈 결과일 때만 다음으로 넘어갑니다.
- 비공식 RSS —
feed.indiehackers.world(+ 주간 top 폴백). 발행일 포함. - SSR HTML 파싱 —
indiehackers.com홈//tech//starting-up이 서버렌더링이라 글 링크가 HTML에 그대로 있음. 키·인덱스 불필요, 로테이트에 안 깨짐. 발행일은 없어 최신 글 위주로 수집. - Algolia (선택) — 아래 환경변수가 모두 설정된 경우에만 동작.
Algolia 관련 실측 메모: indiehackers.com의 Algolia app(
applicationId,searchOnlyApiKey)은 페이지에 공개돼 있으나 config상places.js(주소 자동완성)에 연결돼 있고, 글 검색용 인덱스명은 페이지에 노출되지 않습니다(콘텐츠 백엔드는 Firebase). 그래서 Algolia 계층은 리버스 엔지니어링한 키를 하드코딩하지 않고, 운영자가 확인된 인덱스명을 직접 넣어야 켜지는 옵션으로 뒀습니다. 클라이언트 키/인덱스는 예고 없이 로테이트되므로 취약한 경로로 간주하세요.
Algolia 계층을 켜려면 (선택):
$env:IH_ALGOLIA_APP_ID = "<application id>"
$env:IH_ALGOLIA_API_KEY = "<search-only api key>"
$env:IH_ALGOLIA_INDEX = "<확인된 콘텐츠 인덱스명>"
세 값이 모두 있으면 1·2단이 빈 결과일 때 Algolia로 폴백합니다. 하나라도 비면 계층이 조용히 건너뜁니다.
리포트 구조 (표준 흐름)
리포트는 위에서부터 다음 순서로 구성됩니다:
- 🎯 Key Picks — 제품 출시 · 투자 우선 — 전체 수집분을 가로질러 제품 출시와 투자 신호로 채점해 가장 중요한 항목을 헤드라인으로 선별. 각 항목에
투자/제품 출시태그 표시. - ⭐ Highlights — 추천수(HN points 등) 기반 상위 항목.
- 📌 소스별 섹션 — 소스마다 랭킹된 항목 목록.
Key Picks 선별 방식 — LLM 또는 키워드 휴리스틱
key_pick_mode로 선택합니다:
| 모드 | 동작 |
|---|---|
heuristic (기본) |
키워드 채점만 (API 호출 없음) |
auto |
API 키가 있으면 LLM 선별, 없으면 키워드 휴리스틱으로 자동 폴백 |
llm |
Claude 기반 선별 강제 (호출 실패 시에만 휴리스틱으로 폴백) |
기본은
heuristic입니다. LLM 선별을 쓰려면 요청에key_pick_mode="auto"(또는"llm")를 주거나KEY_PICK_MODE=auto환경변수를 설정하세요.
리포트 헤드라인에 어느 방식이 쓰였는지 표기됩니다 — (LLM 선별) 또는 (키워드 선별).
① LLM 선별 (권장) — Claude가 전체 항목을 읽고 제품 출시·투자 우선순위로 직접 골라 순위를 매기고, 각 항목에 한글 사유(reason)를 답니다. 키워드가 못 잡는 맥락(“$X 조달”이지만 표현이 특이한 경우 등)까지 판단합니다.
환경변수:
$env:ANTHROPIC_API_KEY = "sk-ant-..." # 또는 `ant auth login` 프로필
$env:KEY_PICK_MODEL = "claude-opus-4-8" # 기본값. 비용을 낮추려면 claude-haiku-4-5 등
$env:KEY_PICK_MODE = "auto" # 기본 heuristic. LLM 쓰려면 auto/llm (요청 파라미터로도 지정 가능)
인증은
ANTHROPIC_API_KEY또는ANTHROPIC_AUTH_TOKEN, 아니면ant auth login프로필을 자동으로 사용합니다. 모델 기본값은 Claude Opus 4.8입니다.
② 키워드 휴리스틱 (폴백) — 결정론적 채점, API 불필요:
- 투자(funding, 가중치 3) —
raise/raised $X,Series A~E,valuation,valued at,IPO,acquisition,venture capital,backed by, 그리고 백만/억 단위 금액($18M,$2B등).raise류는 오탐 방지를 위해 금액·투자문맥이 함께 있을 때만 인정(“가격을 올렸다(raised prices)”는 제외). - 제품 출시(launch, 가중치 2) —
launch/introduces/unveils/releases/announces,now available,rolls out,beta,Show HN등. Product Hunt·Hacker News 항목은 본질적으로 출시라 기본 가점.
⚠️ 휴리스틱은 완벽하지 않습니다(예: MRR/가격 글이 드물게 투자로 오태깅). 정밀 선별이 필요하면
auto/llm모드로 API 키를 설정해 LLM 선별을 쓰세요.
툴
| 툴 | 설명 |
|---|---|
digest_weekly_report |
전체(또는 선택) 소스를 7일 윈도로 모아 리포트 생성. sources, week_offset, per_source_limit, key_picks_count, key_pick_mode, highlights_count, response_format |
digest_fetch_source |
단일 소스만 조회(디버깅용) |
digest_list_sources |
사용 가능한 소스 목록 |
key_picks_count: 헤드라인 Key Picks 개수 (기본 8,0이면 숨김)key_pick_mode:auto(기본) |llm|heuristic— 위 "Key Picks 선별 방식" 참고highlights_count: 추천수 기반 하이라이트 개수 (기본 5,0이면 숨김)response_format:markdown(사람이 읽는 리포트) 또는json(구조화 데이터,key_picks배열에importance·tags포함)week_offset:0=최근 7일,1=그 전 주 …
설치
cd D:\POLARION\weekly_product_digest_mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
동작 확인:
python -c "import server; print('ok')"
Claude Code / Desktop 등록
claude_desktop_config.json(또는 해당 MCP 설정)의 mcpServers에 추가:
{
"mcpServers": {
"weekly-product-digest": {
"command": "D:\\POLARION\\weekly_product_digest_mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\POLARION\\weekly_product_digest_mcp\\server.py"]
}
}
}
venv를 안 쓰면
command를 시스템python.exe경로로 지정하고, 전역에pip install -r requirements.txt하면 됩니다.
Claude Code CLI에서 등록하려면:
claude mcp add weekly-product-digest -- D:\POLARION\weekly_product_digest_mcp\.venv\Scripts\python.exe D:\POLARION\weekly_product_digest_mcp\server.py
사용 예 (등록 후 대화에서)
- "이번 주 제품 뉴스 리포트 뽑아줘" →
digest_weekly_report기본값 - "지난주 TechCrunch랑 Product Hunt만" →
sources=["techcrunch","producthunt"], week_offset=1 - "슬라이드에 쓰게 JSON으로" →
response_format="json"
커스터마이즈
- 소스 추가/변경:
server.py의SOURCES딕셔너리 수정. - Reddit 서브레딧 변경:
reddit소스의extra["subreddits"]. - Show HN 최소 추천수:
hackernews소스의extra["min_points"].
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file weekly_product_digest_mcp-1.0.0.tar.gz.
File metadata
- Download URL: weekly_product_digest_mcp-1.0.0.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d11af47f0a28eca6c9d6f609dfac654ca000f12b3de22944af924ec44f08f694
|
|
| MD5 |
31f0bc87d01d0e1488c14a4df73c35f5
|
|
| BLAKE2b-256 |
66e0d9375ac50476c7a614f6a6b215a59a554a26a99804f476a76aa94d3ce586
|
File details
Details for the file weekly_product_digest_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: weekly_product_digest_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 20.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1326a93d25810765caf17d261f674eca426ad18030bacdae2a6321422d051bda
|
|
| MD5 |
172410fa7facf936ef066e77b46db7bf
|
|
| BLAKE2b-256 |
09ce2132cdb4afd95ac038a5582a09b49d68dffd0fd155dd17585198ee1910e0
|