What it does

Ask it out loud "what can I earn from this week?" and it reads back a ranked shortlist, with effort, realistic time to first money, and a ready-to-send message for the one you pick.

Paid work is scattered across places nobody monitors: a bounty posted in a GitHub issue, a hackathon that opens quietly, a paid issue on a job board. Reading all of it is unpaid work, so people read none of it. Nemotron Scout is a self-hosted Model Context Protocol server that turns those public signals into a decision.

How it works

  1. Collect. Devpost, Hacker News, RemoteOK and GitHub issues, in parallel, fail-soft per source, so one dead source never kills a run.
  2. Extract. A model pulls the money signal out of every item.
  3. Critique. A second, more sceptical model argues against it. Hype gets killed here, not later.
  4. Plan. The survivor gets an effort estimate, a concrete first hour, explicit kill criteria, and a pitch you can send to the maintainer today.

Why MCP, and why Alexa+

An Alexa+ agent needs a self-hosted MCP server to do real work on the open web. Scout speaks standard MCP over Streamable HTTP, protocol version 2025-11-25, with session ids, SSE responses, notifications, resources and ping. scout_voice_answer returns a spoken-ready answer, so a voice agent can drive the whole flow end to end.

The numbers are real

The demo video is an unedited run: 51 items collected across four sources, 6 LLM calls, 13,022 tokens, about 70 seconds wall clock. The top result was a $50 bounty to build a skill that generates a structured CHANGELOG from git history, scored 67.7/100, with a five-step plan and kill criteria.

What we learned building it

  • Models return bad JSON in creative ways. The extractor sometimes hands back a bare array instead of an object, omits kind, or sends "12h" where a number was expected. The schema layer now normalises all of it rather than raising, and there are regression tests for each shape.
  • Free tiers have hard walls. OpenRouter caps free models at 50 requests per day, and one run costs 7 or more. So the server caches the last good run on disk and replays it, clearly labelled as cached, instead of showing a judge an error page.
  • One run, many callers. Tool calls are single-flighted, so a burst of parallel requests triggers one pipeline run rather than one per request. On a public endpoint that is the difference between a demo and an invoice.
  • Public endpoints need auth. /mcp requires a bearer token whenever the server is not on loopback, because every tool call spends real credits.

Runs anywhere

One environment variable swaps the model provider: SCOUT_PROVIDER=openrouter|bedrock, or SCOUT_BASE_URL for any OpenAI-compatible host, with a model fallback cascade so a rate limit is never a dead end. It starts on a free tier with NVIDIA Nemotron 3, so there is no paid API key to begin, and any OpenAI-compatible host works too.

MIT licensed, two runtime dependencies, one command to start.

Try the live instance without a token

A public instance is running in read-only mode: you can connect, list the tools and read the last real run with no token at all, because a live search spends real credits and that is exactly the part we do not hand to a stranger. A fresh search needs the token, by design.

curl -s -X POST <endpoint>/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"scout_voice_answer","arguments":{"rank":1}}}'

It answers in one sentence, which is what an Alexa+ agent needs. Run it yourself with --public-readonly and the same three calls work against a local port.

Built With

  • ai-agent
  • amazon-alexa+
  • amazon-alexa-developer
  • automation
  • aws-bedrock
  • devpost-api
  • mcp
  • model-context-protocol
  • nvidia-nemotron-3
  • open-source
  • openrouter
  • python
  • self-hosted
Share this project:

Updates

Submission history