← Back to work

MCP · Tooling · 2026

OSS-Scout — Personalized Open-Source Discovery MCP

Role
Design · Implementation
Stack
Python · FastMCP · SQLite · GitHub API
Context
Open source · v0.4 live
Year
2026
  • 8
    MCP tools
  • Trending · HN · Trendshift
    Sources
  • feedback-driven
    Profile
  • v0.4 · live
    Release

Eight MCP tools (refresh sources, show / update profile, set GitHub identity, rank by taste, mark useful / noise, archive search) that pick new repos matching your interests from GitHub Trending / HN / Trendshift. Profile version bumps on every feedback, so recommendations sharpen over time.

Background

Every day Trending / Hacker News / Trendshift push hundreds of new repos at you; maybe a handful are actually relevant. I wanted a scout that learns my taste instead of forever manually starring or hiding.

Approach

Eight MCP tools on a thin server, each with a single job — fetching, ranking, feedback, archival never mixed. The profile is a taste file that self-revises with every piece of feedback; the version number is monotonic.

  • `refresh_now` — explicit pull, not hidden inside search (so search has no silent side effects)
  • `show_profile` / `update_profile` — view and edit current taste
  • `set_github_user` — optionally pull starred repos as an initial taste signal
  • `find_relevant_new` — rank candidates by current profile
  • `mark_useful` / `mark_noise` — feedback, bumps profile_version
  • `search_archive` — search history

Key choices

Separating "read" from "mutate state" is the single most important design call here.

  • Explicit refresh; never quietly pull inside search — search should be idempotent, refresh should be its own action
  • Each feedback bumps profile_version so the next ranking changes immediately — users see their feedback take effect
  • Heuristic scorer as the fallback; once the local Ollama upgrade lands a model scorer plugs in (swappable, not bound to one)
  • Scouts (Trending / HN / Trendshift) are Protocol-based — sources are easy to swap

Lessons

The temptation in any recommender is to stuff all logic into one big model. The version that actually works tends to do the opposite.

  • Small tools + explicit actions beat a single "do-everything search"
  • When users can see their feedback take effect, trust builds quickly
  • Local-first — profile and archive both live in SQLite, no feedback lag

Status

v0.4 live in Claude Code user scope with all 8 tools shipping. The scorer is heuristic today and becomes model-based once the local model is in place; profile is persisted in SQLite and feedback applies on the spot.