AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

AI News Briefing

mcp-hoangsonww-ai-news-briefing ยท by hoangsonww

๐Ÿ“ฐ An automated, multi-agent research ops AI pipeline that gathers daily AI news, synthesizes it into structured briefings, and delivers them to tools like Notion, Obsidian, Slack, and Teams with zero manual effort. It also supports on-demand deep research on any topic using parallel AI agents and a modular plugin ecosystem.

โ€” No reviews yet
0 installs
39 views
0.0% viewโ†’install

Install

$ agentstack add mcp-hoangsonww-ai-news-briefing

โœ“ scanned ยท โœ“ verified, works with Claude Code, Cursor, and more.

Security review

โœ“ Passed

No issues found. Passed automated security review. ยท v0.1.0 How review works โ†’

  • โœ“ Prompt-injection patterns
  • โœ“ Secret / credential exfiltration
  • โœ“ Dangerous shell & filesystem operations
  • โœ“ Untrusted network calls
  • โœ“ Known-malicious package signatures

What it can access

  • โ— Network access Used
  • โœ“ Filesystem access No
  • โœ“ Shell / process execution No
  • โœ“ Environment & secrets No
  • โœ“ Dynamic code execution No

From automated source analysis of v0.1.0. โ€œUsedโ€ means the capability is present in the source โ€” more access means more to trust, not that itโ€™s unsafe.

View the full security report โ†’

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-hoangsonww-ai-news-briefing)

Reliability & compatibility

โœ“ Security review passed
0 installs to date
โ€” no reviews yet
โ— 2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work โ†’
Are you the author of AI News Briefing? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

AI News Briefing

Automated daily AI news research agent that searches the web, compiles a structured briefing, publishes it to Notion and/or Obsidian, and delivers a styled summary to Microsoft Teams and Slack -- powered by Claude Code, Codex, Gemini, or Copilot CLIs with automatic fallback. Supports both macOS (launchd) and Windows (Task Scheduler). Includes an on-demand Custom Brief mode for deep multi-agent research on any topic. Obsidian integration enables graph visualization of topic relationships across briefings. Fully automated pipeline with zero manual intervention required after setup.

> [!NOTE] > Live AI News Notion page: https://hoangsonw.notion.site/9c34d052d9354beda82a3423e2d2f404?v=d43c53fe405c4896bfd95ad0cc22246f


Overview

AI News Briefing is a fully automated pipeline that runs every morning on your machine. It supports four AI CLI engines -- Claude Code, Codex (OpenAI), Gemini (Google), and Copilot (GitHub) -- with automatic fallback if your preferred engine is unavailable. The selected engine runs in headless mode as a news research agent: searching the web across 9 AI-related topics, compiling the results into a two-tier briefing (TL;DR + full report), writing the finished page directly to a Notion database, optionally publishing to an Obsidian vault with graph-ready wikilinks, and optionally posting a styled Adaptive Card summary to Microsoft Teams and Slack.

The entire process -- from triggering to publishing -- requires zero human intervention. You wake up, open Notion or Obsidian (or Teams or Slack), and your daily AI briefing is already there.

Custom Brief extends this with on-demand deep research: pick any topic, and 5 parallel research agents investigate it from different angles (breaking news, technical analysis, industry impact, trends, and policy). Results publish to Notion, Obsidian, Teams, and/or Slack -- or just print to your terminal.

Why it exists

Keeping up with AI news across models, tools, policy, funding, and open source is a full-time job. This project compresses that into an automated daily digest that covers 9 topic areas in a consistent format, delivered to your Notion workspace before you start your workday. When you need to go deeper on a specific topic, the custom brief gives you a comprehensive research report on demand.


Research Ops Plugin Ecosystem

Beyond the automated daily briefing, this project has evolved into a Unified Research Ops Ecosystem containing 10 deeply integrated intelligence plugins available natively for Claude Code, OpenAI Codex, and Gemini CLI.

The ecosystem includes 10 production-ready agents covering News & Media (ai-news, last30days, podcast-summarizer), Tech & Dev (trend-spotter, paper-reader, repo-auditor), and Business (earnings, competitor-intel, startup-scout, crypto-tracker). These plugins and skills enable AI agents to perform a wide range of research tasks -- from tracking social media trends to analyzing financial filings to summarizing technical papers.

See [PLUGINS.md](PLUGINS.md) for the complete developer manual.


Architecture

We leverage the scheduling capabilities of the OS (launchd on macOS, Task Scheduler on Windows) to trigger a shell script at a specific time each day. The script reads a prompt template, selects an AI CLI engine (via the AI_BRIEFING_CLI env var or automatic fallback: claude โ†’ codex โ†’ gemini โ†’ copilot), and invokes it in headless mode. The agentic prompt performs web searches, compiles results, and calls the Notion MCP tool to create a new page in the database.

flowchart TD
    subgraph Schedulers
        A1[macOS launchd]
        A2[Windows Task Scheduler]
    end

    A1 -->|8 AM Pacific daily| B1[briefing.sh]
    A2 -->|8 AM Pacific daily| B2[briefing.ps1]

    B1 -->|Reads| C[prompt.md]
    B2 -->|Reads| C

    B1 -->|Invokes| D[AI Engine - Claude/Codex/Gemini/Copilot]
    B2 -->|Invokes| D

    D -->|Step 1: Search| E[WebSearch Tool]
    E -->|9 topics x multiple queries| F[Web Results]
    F -->|Step 2: Compile| G[Two-Tier Briefing]
    G -->|Step 3: Write| H[Notion MCP]
    H -->|Creates page| I[Notion Database]

    D -->|Step 4: Write card| J2[logs/YYYY-MM-DD-card.json]
    D -->|Step 5: Write obsidian md| J3[logs/YYYY-MM-DD-obsidian.md]

    B1 -->|If Teams webhook set| T[notify-teams.sh]
    B2 -->|If Teams webhook set| T2[notify-teams.ps1]
    T -->|POST card.json| V[Teams Webhook]
    T2 -->|POST card.json| V
    V --> W[Teams Channel]

    B1 -->|If Slack webhook set| S1[notify-slack.sh]
    B2 -->|If Slack webhook set| S2[notify-slack.ps1]
    S1 -->|Convert + POST| SV[Slack Webhook]
    S2 -->|Convert + POST| SV
    SV --> SW[Slack Channel]

    B1 -->|If Obsidian vault set| OB1[publish-obsidian.sh]
    B2 -->|If Obsidian vault set| OB2[publish-obsidian.ps1]
    OB1 -->|Copy + create topics| OBV[Obsidian Vault]
    OB2 -->|Copy + create topics| OBV

    B1 -->|Logs output| J[logs/YYYY-MM-DD.log]
    B2 -->|Logs output| J
    J -->|Auto-cleanup| K[Delete logs older than 30 days]

Data flow summary:

  1. The platform scheduler fires the entry point script (briefing.sh on macOS, briefing.ps1 on Windows) at the configured time each day.
  2. The script reads the prompt from prompt.md and passes it to the selected AI CLI engine in headless mode.
  3. The AI engine executes the prompt as an agentic task -- performing web searches, compiling results, and calling the Notion MCP tool.
  4. Notion receives the finished briefing as a new database page.
  5. Claude also writes an Obsidian-formatted markdown file with [[wikilinks]] for graph visualization.
  6. If the AI_BRIEFING_TEAMS_WEBHOOK environment variable is set, the entry point script calls notify-teams.sh / notify-teams.ps1, which validates and POSTs the pre-built logs/YYYY-MM-DD-card.json file (written by Claude in Step 4) to the configured Teams webhook.
  7. If the AI_BRIEFING_SLACK_WEBHOOK environment variable is set, the entry point script calls notify-slack.sh / notify-slack.ps1, which converts the Teams card to Slack Block Kit format and POSTs it to the configured Slack webhook.
  8. If the AI_BRIEFING_OBSIDIAN_VAULT environment variable is set, the entry point script calls publish-obsidian.sh / publish-obsidian.ps1, which copies the briefing to the vault and creates topic stub pages for graph nodes.
  9. Logs are written to a date-stamped file and automatically pruned after 30 days.

Prerequisites

| Requirement | Details | |---|---| | OS | macOS or Windows 10/11 | | At least one AI CLI | Any of the following: Claude Code (claude), Codex (codex), Gemini (gemini), or Copilot (copilot). If multiple are installed, the system uses AI_BRIEFING_CLI or falls back automatically. | | Notion MCP | The Notion MCP server must be configured in your AI CLI's MCP settings with access to your workspace | | WebSearch tool | Available by default in most AI CLIs (no extra setup needed) | | Python 3.x | Optional (legacy card builder only, not used in current flow) | | Make (optional) | GNU Make for using the Makefile task runner (winget install GnuWin32.Make on Windows, pre-installed on macOS) |


Installation

1. Clone the project

git clone https://github.com/hoangsonww/AI-News-Briefing
cd AI-News-Briefing

2. Platform-specific setup

macOS (launchd)
# Make the shell script executable
chmod +x ~/ai-news-briefing/briefing.sh

# Install the launchd plist
cp ~/ai-news-briefing/com.ainews.briefing.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.ainews.briefing.plist

# Verify the agent is registered
launchctl list | grep ainews

Optionally, set up the manual trigger command:

mkdir -p ~/.local/bin
cat > ~/.local/bin/ai-news  The `StartCalendarInterval` is an array of host-local times that map to 08:00 Pacific (e.g. on a UTC+7 host, `22:00` = 8 AM PDT and `23:00` = 8 AM PST). Both fire; the Pacific guard runs only the one at/after 08:00 Pacific. The `StartInterval` (every 30 min) is the sleep/wake **catch-up** -- it runs `briefing.sh --catchup`, which only acts when today's briefing hasn't run yet and it's past 08:00 Pacific. Leave it in place; it recovers a run missed because the Mac was asleep at 8 AM.

**Windows:** Re-run the installer with a new host-local anchor time (the 30-min poll + Pacific guard still apply):

```powershell
.\install-task.ps1 -Hour 9 -Minute 0

Change the timezone

The briefing's notion of "today" and its 08:00 schedule both follow AI_BRIEFING_TZ. The default is Pacific. Set it to any zone -- DST is handled automatically.

# macOS / Linux -- use an IANA zone id
export AI_BRIEFING_TZ=America/New_York
# Windows -- use a Windows zone id ("Eastern Standard Time" covers EST/EDT)
setx AI_BRIEFING_TZ "Eastern Standard Time"

On macOS the scheduled job reads it from the plist's EnvironmentVariables. Set it in one step (edits the installed plist in place and reloads):

./scripts/update-schedule.sh --tz America/New_York

Or add/edit the AI_BRIEFING_TZ key in com.ainews.briefing.plist by hand and reload. On Windows, setx persists it to your user environment and briefing.ps1 picks it up on the next run. (PowerShell 7+ also accepts IANA ids like America/New_York; Windows PowerShell 5.1 requires the Windows id.)

Change the AI engine

Set the AI_BRIEFING_CLI environment variable to choose which engine to use:

export AI_BRIEFING_CLI=codex    # or: claude, gemini, copilot

If not set, the daily briefing tries engines in fallback order: claude โ†’ codex โ†’ gemini โ†’ copilot, using the first one found. For custom briefs, pass --cli:

./custom-brief.sh --cli gemini --topic "AI safety"

Change the model

Set the AI_BRIEFING_MODEL environment variable to override the default model for any engine:

export AI_BRIEFING_MODEL=opus

Or edit the entry point script for your platform:

  • macOS: briefing.sh -- change the --model sonnet flag
  • Windows: briefing.ps1 -- change the --model sonnet argument

Model trade-offs (Claude Code):

| Model | Speed | Cost | Quality | |---|---|---|---| | haiku | Fastest | Lowest | Good for basic summaries | | sonnet | Balanced | Moderate | Recommended default | | opus | Slowest | Highest | Best for deep analysis |

Change the budget cap

Edit the --max-budget-usd value in briefing.sh (macOS) or briefing.ps1 (Windows). The default is 2.00 (USD per run). This acts as a safety cap -- if the agent's token usage would exceed this amount, the run stops.

Change the topics

Edit prompt.md and modify the "Topics to Search" list. You can add, remove, or rename topics. If you change the number of topics, also update the "Topics": 9 value in the Notion properties section at the bottom of the prompt.


Usage

Automatic (scheduled)

Once installed, the briefing runs automatically every day at the scheduled time (default: 8:00 AM Pacific, PST/PDT). No action needed.

Manual trigger

Using Make (recommended, cross-platform):

make run            # Run in foreground (auto-detects engine)
make run-bg         # Run in background
make run-scheduled  # Trigger via OS scheduler
make run CLI=codex  # Use a specific engine

Platform-native:

# macOS
ai-news
# or: launchctl kickstart "gui/$(id -u)/com.ainews.briefing"

# Windows (PowerShell or cmd)
schtasks /run /tn AiNewsBriefing

Watch the progress

make tail           # Cross-platform: tail today's log

Or platform-native:

# macOS
tail -f ~/ai-news-briefing/logs/$(date +%Y-%m-%d).log

# Windows (PowerShell)
Get-Content "$env:USERPROFILE\ai-news-briefing\logs\$(Get-Date -Format 'yyyy-MM-dd').log" -Wait

A typical successful run takes 2-4 minutes and ends with a message like:

2026-03-09 14:08:08 Briefing complete. Check Notion for today's report.

Makefile Reference

The project includes a cross-platform Makefile that auto-detects your OS and routes commands to the correct platform tools. Requires GNU Make.

| Target | Description | |---|---| | make help | Show all targets with descriptions | | make run | Run briefing in foreground | | make run-bg | Run briefing in background | | make run-scheduled | Trigger via OS scheduler | | make tail | Tail today's log live | | make log | Print today's log | | make logs | List all log files with sizes | | make log-date D=YYYY-MM-DD | Print log for a specific date | | make clean-logs | Delete logs older than 30 days | | make purge-logs | Delete all logs | | make install | Install platform scheduler | | make uninstall | Remove platform scheduler | | make status | Show scheduler status | | make check | Verify at least one AI CLI is installed | | make validate | Validate all project files and prompt structure | | make prompt | Print the current prompt | | make info | Show config summary (engines, model, paths) | | make eval D=YYYY-MM-DD JUDGE=stub\|claude\|codex\|gemini [GATE=1] | Judge one card on the 5-axis rubric | | make eval-backfill JUDGE=stub | Score every card in example-cards/ | | make eval-regression JUDGE=claude | Re-score golden set, fail on > 0.5 composite drop | | make eval-drift D=YYYY-MM-DD [ALERT_EXIT=1] | Rolling-window drift detector | | make eval-report D=YYYY-MM-DD W=7 [OUT=path] | Weekly Markdown report | | make eval-dashboard [DASHBOARD_JUDGE=...] [OPEN=1] | Build interactive HTML dashboard | | make eval-show | Dump stored eval rows | | make eval-test | Run eval-harness unit tests | | CLI= | Parameter: choose engine (claude, codex, gemini, copilot) |

Utility Scripts Reference

The scripts/ directory contains 21 cross-platform pairs (.sh for macOS/Linux + .ps1 for Windows) plus 12 bash-only utilities for Unix-only concerns (POSIX shells, launchctl, open/xdg-open, shellcheck, git hooks). Grouped by concern below. For per-script deep-dives, flags, mermaid diagrams, and conventions, see [scripts/README.md](scripts/README.md).

Pipeline operations

| Script | Description | Example Usage | |---|---|---| | health-check | Verify full setup (CLI, files, prompt structure, scheduler) | bash scripts/health-check.sh | | log-summary | Tabular summary of recent runs with status and size | bash scripts/log-summary.sh 14 | | log-search | Search across all logs by keyword with context | bash scripts/log-search.sh --search "Anthropic" --context 3 | | dry-run | Run the full pipeline without writing to Notion | bash scripts/dry-run.sh --model haiku --budget 1.00 | | test-notion | Quick Notion MCP connectivity test | bash scripts/test-notion.sh | | cost-report | Estimate API costs from log history | bash scripts/cost-report.sh --month 2026-03 | | export-logs | Archive logs to tar.gz (Unix) or zip (Windows) | bash scripts/export-logs.sh --from 2026-03-01 --to 2026-03-09 | | backup-prompt | Version prompt.md with timestamped backups | bash scripts/backup-prompt.sh --list | | topic-edit | Add, remove, or list topics in prompt.md | bash scripts/topic-edit.sh --add "AI Hardware" "GPU news" | | update-schedule | Change daily run time | bash scripts/update-schedule.sh --hour 7 --minute 30 | | uninstall | Remove scheduler; --all also removes logs and backups | bash scripts/uninstall.sh --all |

Delivery (Teams / Slack / Obsidian)

| Script | Description | Example Usage | |---|---|---| | notify | Send native OS notification for briefing status | bash scripts/notify.sh | | notify-teams | Validate and POST pre-built card.json to Microsoft Teams webhooks | bash scripts/notify-teams.sh or --all for multiple | | `

โ€ฆ

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source โ€” we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.