Week 12 (2026-03-10 → 2026-03-16)
Directory Seeding
- Batch 1: 50 developer tools deployed to production directory
- Batch 2: 50 content/docs sites
- Batch 3: 50 real-world businesses
- Batch 4 CSV prepared: 60 quality-focused gap-fill sites
Quality Improvements
- FAQ quality filtering: reduced failing sites from 24 → 9
- Display name extraction (og:site_name, manual overrides, title cleanup)
- Description generation: homepage meta extraction with LLM fallback
- Semantic form tool naming (action-derived instead of positional
submit-form-0)
Agent Hosting
- Self-hosted agent support: register external MCP endpoints
- Directory eligibility: score ≥ 50 + quality description filter
- Capability vocabulary unified (filter pills match badge tiers)
- Per-site daily query limits by plan (Redis counters)
Crawling
- Smart crawl scoring with page freshness metrics
- Deploy + refresh integration with crawl pipeline
- Incremental re-crawl with cache metadata
Auth & Security
- Block anonymous deploys (require auth or strict rate limit)
- Audit blob access migrated to private
- Stopped committing audit JSON to git (DB/Blob only)
Agent Score (Quality Scoring)
- Heuristic quality score (0-100) computed daily for all agents
- Three axes: quality (35%) + reliability (35%) + popularity (30%)
- Quality: tool richness × tier weight + content depth + audit score
- Reliability: deploy success rate (30d) + crawl freshness
- Popularity: MCP request volume (30d, log-normalized) + GitHub stars
- Directory now sorts by Agent Score (primary), audit score (tiebreak)
- Score visible on directory cards and agent detail pages
- Daily cron:
/api/cron/quality-score at 2 AM UTC
- Backfill:
pnpm backfill:quality-scores:prod
Infrastructure
- Platform validation improvements (PM detection, OpenAPI, forms)
- OpenAPI detection expanded beyond 5 fixed paths
Discovery Agent
- Scaffolded
services/discovery-agent/ — standalone Next.js 15 service (own Vercel project)
- Drizzle schema:
discovery_callers table (session + API key auth, JSONB profiles)
- MCP server skeleton:
w2agent-discovery v0.1.0, Streamable HTTP transport, 20 req/min Upstash rate limiting
- A2A agent card at
GET /api/discovery/agent-card — 5 tools planned: discover, interview, rate, remember, forget
- Deploys to
discover.agent.w2agent.dev (manual setup required: Vercel project, Neon DB, DNS)
discover MCP tool: Full implementation — requirement parsing (gpt-5-mini), Meta MCP search,
parallel agent interviews, LLM judge ranking. Three depth levels: quick (3 candidates/1 question),
thorough (5/2), exhaustive (5/3 + follow-up). Returns ranked results with per-agent reasoning.
- Vitest unit tests: requirement parsing, ranking, depth levels, error handling, orchestration.
Category Leaderboards
- New
/directory/categories page: top agents per category, sorted by quality score
- Each category card shows rank 1-3 agents with score/grade/stars
- "View all X agents →" links to
/directory?category=X
- Added "Agent Categories" link to site header Community section
- Added "Browse by category →" cross-link on the main directory page
Quality Trend Sparkline
- 90-day score history on agent detail pages: inline SVG sparkline next to Agent Score
- New
site_score_history table (daily upsert by quality-score cron)
loadScoreTrend(siteId) in agent-host; sparkline hides when <2 data points
- Delta indicator (↑/↓) shows net change from first to last recorded score
Meta MCP Search — RRF Ranking
- Replaced audit-score sort in
search_websites with Reciprocal Rank Fusion (k=60)
- Three rank signals: text relevance (computeRelevance), quality score (qualityScore ?? auditScore), popularity (pagesIndexed)
- MMR diversity (λ=0.7) applied to top-10 results: penalizes same slug-prefix clusters
qualityScore column now fetched in both primary and fuzzy-fallback DB selects
A2A Protocol Support
- Inbound A2A
SendMessage on per-agent endpoints (/api/agent/[slug])
- Protocol auto-detection: MCP methods vs A2A PascalCase methods on same endpoint
- A2A → MCP bridge: SendMessage text routed to existing
search-site tool
- Agent cards: added
endpoint field and capabilities.a2a.streaming: false
Changelog — Week 12 (2026-03-10 → 2026-03-16) | w2agent