loading…
Search for a command to run...
loading…
A FastMCP server that exposes tools for news aggregation, financial market data, fitness tracking, Spotify music data, and email notifications, usable directly
A FastMCP server that exposes tools for news aggregation, financial market data, fitness tracking, Spotify music data, and email notifications, usable directly from Claude via the Model Context Protocol.
A FastMCP server that exposes tools for news aggregation, financial market data, fitness tracking, Spotify music data, and email notifications — usable directly from Claude via the Model Context Protocol.
Also includes a daily newsletter that automatically emails a formatted digest of market data and news each morning via GitHub Actions.
| Tool | Description |
|---|---|
send_email |
Send an email via Gmail SMTP |
fetch_news |
Fetch top headlines from NewsAPI (optional query/category) |
get_israeli_news |
Latest news from Israeli RSS sources |
get_tech_news |
Latest tech news from RSS sources |
get_daily_summary |
Combined snapshot of all news + market data |
get_etf_price |
Current price and daily change for a ticker |
get_market_snapshot |
Multi-ticker market overview |
get_recent_activities |
Recent Strava activities |
get_weekly_summary |
Weekly Strava training summary |
get_top_tracks |
Top tracks from the last ~4 weeks via Spotify |
get_top_podcasts |
Top podcasts ranked by recent play frequency via Spotify |
uv sync
The .mcp.json file registers this server with Claude Code automatically. Once configured, the tools above are available directly in your Claude conversations.
To start the server manually:
uv run python server.py
For SSE transport (HTTP server on port 9005):
MCP_TRANSPORT=sse uv run python server.py
uv run python on_demand.py
uv run python safe_runner.py
npx @modelcontextprotocol/inspector uv run python server.py
Spotify requires OAuth — a one-time setup to obtain a refresh token.
http://127.0.0.1:8888/callback as a Redirect URI..env:SPOTIFY_CLIENT_ID=your_client_id
SPOTIFY_CLIENT_SECRET=your_client_secret
Run the one-time authorization script:
uv run tools/spotify/get_refresh_token.py
This opens a browser tab for Spotify authorization. After you approve, the script prints your refresh token. Add it to .env:
SPOTIFY_REFRESH_TOKEN=your_refresh_token
The required OAuth scopes are user-top-read and user-read-recently-played.
| Tool | Scope required | Description |
|---|---|---|
get_top_tracks |
user-top-read |
Top tracks over the last ~4 weeks, ranked by Spotify |
get_top_podcasts |
user-read-recently-played |
Top podcast shows ranked by episode play count in the last 50 recently-played items |
The workflow at .github/workflows/daily-newsletter.yml runs every day at 7:00 AM UTC and sends an HTML email digest containing:
# Lint
uv run ruff check . --fix
# Run tests
uv run pytest
Tests cover internal utilities and data transformations. Mock tests for external APIs (NewsAPI, Yahoo Finance, Strava) are intentionally avoided — see .claude/CLAUDE.md for rationale.
├── server.py # FastMCP server entry point
├── on_demand.py # Daily newsletter generator
├── email_sender.py # Gmail SMTP client
├── safe_runner.py # Timeout-protected newsletter runner
├── logging_config.py # Structured JSON logging
├── cost_estimate.py # Monthly cloud cost estimator
├── tools/
│ ├── news/
│ │ ├── news.py # RSS + NewsAPI aggregation
│ │ └── on_demand.py # Manual newsletter trigger
│ ├── spotify/
│ │ ├── spotify.py # Spotify API integration
│ │ ├── get_refresh_token.py # One-time OAuth token setup
│ │ └── on_demand.py # Manual Spotify runner
│ ├── finance.py # Yahoo Finance integration
│ ├── strava.py # Strava API integration
│ └── daily_summary.py # Aggregated daily snapshot
├── tests/ # Unit tests
└── .github/workflows/ # GitHub Actions
Выполни в терминале:
claude mcp add personal-assistant-mcp-server -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.