{
  "markdown": "# DemandScope\n\nPublic-API demand-signal scanner for validating digital-product and dev-tool\nideas, plus a dependency-free MCP (Model Context Protocol) stdio server that\nexposes the signals as tools any MCP-compatible agent can call.\n\n> **Transparency notice:** this project is built, tested, and maintained by an\n> autonomous AI agent (Hermes, by Nous Research) operating in the Autonomous\n> Income Research Lab. A human owner reviews and authorizes external actions.\n\n## Why\n\nBuilt by the Autonomous Income Research Lab (2026-08-17) as its first product\nprototype: demand validation for niche dev tools is itself a recurring need for\nindie builders, and MCP integrations are a fast-growing ecosystem\n(evidence: `research/2026-08-17-opportunity-scan.md`).\n\n## Signals (all free, no-auth, ToS-friendly APIs)\n\n| Tool                 | Source                       | Proxy for                            |\n|----------------------|------------------------------|--------------------------------------|\n| `github_repo_signal` | api.github.com/search        | developer interest / competition     |\n| `github_trend`       | api.github.com (created:)    | supply/interest acceleration (delta) |\n| `hn_signal`          | hn.algolia.com (Hacker News) | tech-audience attention              |\n| `hn_trend`           | hn.algolia.com               | attention acceleration (delta)       |\n| `npm_downloads`      | api.npmjs.org                | comparable-product demand            |\n| `pypi_downloads`     | pypistats.org                | comparable-product demand            |\n\nAbsolute download counts include CI/mirror traffic — use directionally, not as\nexact market sizes. Trend tools return `growth_ratio` (current window ÷ prior\nwindow); >1 means accelerating.\n\n## Reliability (v0.2)\n\n- **Cache:** file-based TTL cache (`DEMANDSCOPE_CACHE_DIR`, default\n  `.cache/demandscope`). TTLs: GitHub/HN 1h, npm/PyPI 24h. Repeat calls are\n  free and instant.\n- **Backoff:** exponential retry (max 4) on HTTP 429/5xx, honoring\n  `Retry-After`. pypistats is treated as best-effort.\n\n## Usage\n\nCLI-style (batch scan):\n```bash\npython3 ../demand-scanner/demand_scanner.py candidates.json out/\n```\n\nAs an MCP server (newline-delimited JSON-RPC 2.0 over stdio):\n```bash\npython3 mcp_server.py\n```\nMCP client config example:\n```json\n{\"mcpServers\": {\"demandscope\": {\"command\": \"python3\", \"args\": [\"/path/to/mcp_server.py\"]}}}\n```\n\n## MCP Registry / MCPB bundle\n\nDemandScope is published to the official MCP Registry as\n`io.github.baobabcat/demandscope`. Each release attaches a deterministic,\none-click-installable MCP Bundle (`demandscope.mcpb`, spec 0.3) built by\n`scripts/build_mcpb.py`; publishing runs from CI via GitHub OIDC\n(`.github/workflows/publish-mcp.yml`, no stored secrets). The registry\nmanifest (`server.json`) is validated with\n[`mcp-registry-lint`](https://github.com/baobabcat/mcp-registry-lint) and\n`mcp-publisher validate` before every publish.\n\n## Tests\n\n```bash\npython3 test_mcp_server.py\n```\n10 end-to-end protocol tests (handshake, notifications, ping, tools/list,\ntools/call incl. trend + cache-hit assertion, error paths). Network needed for\nthe `npm_downloads` and `hn_trend` call tests.\n\n## Status / roadmap\n\n- **v0.3 (2026-08-20):** MCPB bundle + official MCP Registry publishing via\n  GitHub OIDC (`server.json`, deterministic `scripts/build_mcpb.py`,\n  tag-triggered publish workflow with rollback). 10/10 tests pass.\n- v0.2 (2026-08-17): trend-delta tools (`github_trend`, `hn_trend`), TTL\n  cache + rate-limit backoff, `pyproject.toml` packaging, MIT license.\n  10/10 tests pass.\n- v0.1 (2026-08-17): protocol subset `initialize`, `ping`, `tools/list`,\n  `tools/call`; 4 signal tools.\n- Next: `resources` support, hosted HTTP transport, second asset\n  (`mcp-registry-lint`) in the lab pipeline.\n",
  "bytes": 3806,
  "sha": "700afd4e7b4377d92452ff0a0e05fe0d5c7c3301ab5fa9aba88f1a1010023190",
  "repo_slug": "baobabcat/demandscope",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_baobabcat_demandscope_846717b9/readme"
}