← Back to blog

RSS 피드를 AI 에이전트에 연결하는 방법

RSS와 AI 에이전트의 조합이 효과적인 이유

웹을 읽어야 하는 AI 에이전트 대부분은 페이지 스크래핑으로 시작합니다. 그 말은 HTML 파싱, JavaScript 렌더링, 요청 제한, CAPTCHA, 그리고 사이트가 리디자인될 때마다 바뀌는 레이아웃을 처리해야 한다는 뜻입니다.

SereneReader는 이미 그 어려운 작업을 대신합니다. RSS 피드를 가져오고, XML을 파싱하고, 모든 것을 깔끔하고 구조화된 데이터로 저장합니다. API는 그 데이터를 JSON 형태로 에이전트에 제공합니다. 스크래핑도, 파싱도, 깨지기 쉬운 페이지 셀렉터도 필요 없습니다.

깔끔한 JSON, 원시 피드가 아닙니다. 에이전트는 RSS나 XML을 직접 다루지 않습니다. SereneReader가 이미 피드를 소비하고, HTML 엔티티를 디코딩하고, 이중 인코딩된 콘텐츠를 수정하고, 원시 피드 데이터를 지저분하게 만드는 모든 인코딩 문제를 정규화했습니다. 에이전트는 그저 API에 쿼리를 보내고 깔끔하고 구조화된 JSON을 받아옵니다.

사람이 선별한 소스. 피드를 직접 선택합니다. 에이전트가 무엇에 접근할 수 있는지를 결정합니다. 일반적인 웹 크롤이 아니라, 직접 제어하는 집중된 정보 스트림입니다.

스크래핑도 차단도 없습니다. 에이전트는 소스 웹사이트가 아닌 SereneReader API와 통신합니다. robots.txt 문제도, 봇 방지 조치도, 법적 회색 지대도 없습니다.

시간순 정렬과 중복 제거. 기사는 순서대로, 한 번씩만 도착합니다. 게시 날짜로 필터링하면 에이전트가 이미 확인한 항목을 별도로 추적할 필요가 없습니다.

OpenClaw과 함께 사용하는 방법

OpenClaw는 에이전트가 외부 API를 도구로 호출할 수 있게 해주는 AI 에이전트 플랫폼입니다. SereneReader와 연결하려면:

  1. SereneReader 설정에서 API 키를 생성합니다.
  2. OpenClaw 에이전트 구성에서 SereneReader API를 도구로 정의합니다. 설정 페이지의 엔드포인트 문서에 에이전트가 호출해야 할 내용이 정확히 나와 있습니다.
  3. 에이전트에 작업을 부여합니다. 예를 들어: "매일 아침 내 RSS 피드를 확인하고, 인프라 보안과 관련된 내용을 요약해서 내 Obsidian 볼트에 저장해."

에이전트는 스케줄링, 필터링, 요약을 처리합니다. SereneReader는 피드 가져오기와 기사 저장을 처리합니다.

에이전트 프롬프트 예시

에이전트 지시사항은 대략 다음과 같은 형태가 될 수 있습니다:

SereneReader API에 접근할 수 있습니다. 매일 오전 8시에 지난 24시간 동안 게시된 기사를 가져오세요. 각 기사가 사이버보안, 인프라, 또는 DevOps와 관련이 있는지 판단하세요. 관련이 있다면 일일 요약에 추가하세요. 요약을 Obsidian 볼트의 Daily Digests 폴더에 새 노트로 저장하세요.

에이전트가 API를 호출하고, 결과를 처리하고, 작업을 실행합니다. 커스텀 코드도, cron 작업도, 연결 스크립트도 필요 없습니다.

활용 사례

뉴스 모니터링 에이전트

SereneReader에서 20~30개의 업계 피드를 구독합니다. 회사, 경쟁사, 또는 특정 주제에 대한 언급을 스캔하는 에이전트를 연결합니다. 각 피드를 수동으로 확인하는 대신 일일 브리핑을 받습니다.

리서치 다이제스트

학술 프리프린트 피드(arXiv, bioRxiv)와 기술 블로그를 팔로우합니다. 에이전트가 새 논문을 주제별로 분류하고, 현재 진행 중인 프로젝트와 관련된 것을 표시하고, 주간 읽기 목록을 정리하도록 합니다.

콘텐츠 파이프라인

관심 분야의 피드를 구독합니다. 에이전트가 트렌딩 주제를 파악하고, 핵심 포인트를 추출하고, 콘텐츠 브리프를 초안으로 작성하게 합니다. 콘텐츠는 직접 작성하지만, 리서치 단계는 자동으로 처리됩니다.

경쟁사 인텔리전스

경쟁사 블로그, 변경 이력 피드, 보도자료를 추적합니다. 에이전트가 제품 출시, 가격 변경, 기능 발표를 감지하고 구조화된 형식으로 기록할 수 있습니다.

모든 LLM 도구와 호환

SereneReader API는 HTTP를 통해 표준 JSON을 반환합니다. 인증된 API 요청을 보낼 수 있는 모든 도구에서 사용할 수 있습니다:

  • OpenClaw — 자율 에이전트 워크플로우
  • LangChain / LlamaIndex — 검색 증강 생성(RAG)
  • 커스텀 스크립트OpenRouter를 통해 모든 LLM API 사용 (아래 예시 참조)
  • Zapier / Make — AI 단계가 포함된 노코드 자동화
  • n8n — 셀프호스팅 워크플로우 자동화

패턴은 항상 동일합니다. SereneReader에서 기사를 가져오고, LLM에 전달해 처리하고, 결과물을 필요한 곳으로 라우팅합니다.

예시: OpenRouter를 활용한 일일 다이제스트 스크립트

SereneReader에서 어제의 기사를 가져오고, OpenRouter를 통해 임의의 LLM으로 요약한 뒤, 결과를 로컬 파일로 저장하는 Node.js 스크립트입니다. node digest.mjs로 실행하거나 cron으로 스케줄링할 수 있습니다.

// digest.mjs
// Requires: SERENE_API_KEY, SERENE_API_URL, and OPENROUTER_API_KEY env vars.
// Your API settings page in SereneReader has the base URL and endpoint paths.

const SERENE_API_KEY = process.env.SERENE_API_KEY;
const SERENE_API_URL = process.env.SERENE_API_URL; // from your API settings page
const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY;

import { writeFileSync } from "node:fs";

// 1. Fetch yesterday's articles from SereneReader
const yesterday = new Date(Date.now() - 86400000).toISOString();
const res = await fetch(`${SERENE_API_URL}?since=${yesterday}`, {
  headers: { Authorization: `Bearer ${SERENE_API_KEY}` },
});

if (!res.ok) {
  console.error(`SereneReader API error: ${res.status}`);
  process.exit(1);
}

const { articles } = await res.json();

if (articles.length === 0) {
  console.log("No new articles since yesterday.");
  process.exit(0);
}

// 2. Build a prompt from article titles and snippets
const articleList = articles
  .map((a) => `- ${a.title} (${a.feedName})\n  ${a.snippet}`)
  .join("\n\n");

const prompt = [
  `Here are ${articles.length} articles from my RSS feeds`,
  `published in the last 24 hours:\n\n${articleList}\n\n`,
  `Write a concise daily digest. Group related articles`,
  `by topic. For each topic, summarize the key points in`,
  `2-3 sentences. Include the article titles so I know`,
  `which ones to read in full.`,
].join(" ");

// 3. Send to any model via OpenRouter
const llmRes = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${OPENROUTER_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "anthropic/claude-sonnet-4",
    messages: [{ role: "user", content: prompt }],
  }),
});

if (!llmRes.ok) {
  console.error(`OpenRouter API error: ${llmRes.status}`);
  process.exit(1);
}

const { choices } = await llmRes.json();
const summary = choices[0].message.content;

// 4. Write the digest to a local markdown file
const date = new Date().toISOString().split("T")[0];
const output = `# Daily Digest - ${date}\n\n${summary}\n`;
writeFileSync(`digest-${date}.md`, output);

console.log(`Digest written to digest-${date}.md (${articles.length} articles)`);

의존성도, 빌드 단계도 없습니다. API 키 두 개, 파일 하나로 일일 리서치 다이제스트가 완성됩니다. 모델을 바꾸거나, 프롬프트를 수정하거나, 결과를 Obsidian, Notion, 또는 Slack으로 출력하도록 변경할 수 있습니다.

시작하기

API 접근은 월 $5의 Pro 플랜에 포함되어 있습니다. 대부분의 경쟁 리더처럼 엔터프라이즈 티어나 최상위 플랜에만 잠겨 있지 않습니다.

  1. 아직 가입하지 않았다면 SereneReader에 가입합니다.
  2. 에이전트가 접근할 피드를 구독합니다.
  3. 설정에서 API 키를 생성합니다.
  4. SereneReader API를 호출하도록 에이전트를 구성합니다.

전체 엔드포인트 문서는 계정 설정에서 확인할 수 있습니다. API 자체에 대한 자세한 내용은 SereneReader API로 자동화 구축하기를 읽어보세요.