disvr
Disvr를 선택하는 이유
AI 에이전트 생태계가 폭발적으로 성장하고 있습니다. 결제 프로토콜(Stripe MPP, OpenAI ACP, x402)은 결제 방법을 해결합니다. 디렉토리(Smithery, Composio)는 무엇이 존재하는지를 해결합니다.
하지만 가장 중요한 질문인 **"어떤 도구를 사용하는 것이 실제로 가치 있는가?"**를 해결하는 곳은 없습니다.
🤖 "중국어 법률 계약서를 태국어로 번역해줘" → Smithery에 50개의 번역 서비스가 있습니다. 비용/품질 비율이 가장 좋은 것은 무엇일까요?
🤖 "전자상거래 사이트에서 상품 가격을 스크래핑해줘" → 30개의 스크래핑 도구가 있습니다. 성공률이 가장 높고 지연 시간이 가장 짧은 것은 무엇일까요?
🤖 "상품 이미지를 생성해줘" → 20개의 이미지 생성 서비스가 있습니다. 충분히 좋으면서 가장 저렴한 것은 무엇일까요?
현재 에이전트들은 눈을 감고 선택하고 있습니다. 잘못된 선택은 돈과 시간 낭비, 그리고 작업 실패로 이어집니다.
Disvr가 이 문제를 해결합니다.
Disvr는 단순한 목록을 반환하는 대신, 4차원 가치 점수를 기반으로 순위가 매겨진 추천을 제공합니다:
차원 | 가중치 | 측정 항목 |
🎯 의미론적 일치 | 0.30 | 서비스가 요구사항과 얼마나 잘 일치하는지 |
⭐ 품질 | 0.25 | 과거 성공률, 평판 |
💰 비용 효율성 | 0.25 | 호출당 비용, 가성비 |
🔒 신뢰성 | 0.20 | 지연 시간, 재시도율, 가동 시간 |
이제 에이전트는 추측을 멈추고 작업에 가장 적합한 도구를 선택하기 시작합니다.
✅ 시작하기 전에
💰 무료 사용 | 무료 티어: 일일 1,000회 쿼리, 신용카드 불필요 |
🔌 MCP 네이티브 | Claude Code, Cursor 또는 모든 MCP 클라이언트를 위한 한 줄 설정 |
🔄 폐쇄 루프 피드백 | 에이전트가 호출 결과를 보고하면 순위가 시간이 지남에 따라 더 똑똑해집니다 |
☁️ 글로벌 엣지 | Cloudflare Workers에 배포되어 전 세계적으로 낮은 지연 시간 제공 |
📡 실시간 데이터 | Smithery에서 매시간 크롤링하여 서비스 데이터를 최신 상태로 유지 |
빠른 시작
옵션 1: MCP 서버 (권장)
.mcp.json에 한 줄을 추가하세요:
{
"mcpServers": {
"disvr": {
"type": "url",
"url": "https://api.disvr.top/mcp"
}
}
}Claude Code / Cursor를 재시작하면 에이전트가 discover_services 도구를 갖게 됩니다.
에이전트에게 다음과 같이 말해보세요:
"중국어 법률 문서를 태국어로 번역할 최고의 도구를 찾아줘"
"성공률이 높으면서 가장 저렴한 웹 스크래핑 서비스를 추천해줘"
"가격 대비 품질 비율이 가장 좋은 이미지 생성 API는 무엇이야?"
옵션 2: REST API
curl -X POST https://api.disvr.top/discover \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"need": "translate Chinese legal contract to Thai"}'value_score에 따라 순위가 매겨진 상위 3개 추천을 반환합니다:
{
"recommendations": [
{
"service": "deepl-mcp-server",
"platform": "smithery",
"match_confidence": 0.92,
"reputation": 4.2,
"price_usd": 0.002,
"reason": "Best cost/quality ratio for legal document translation"
}
]
}라이브 데모
페이지 | 링크 | 설명 |
🏠 홈 | 제품 개요 | |
🔍 탐색기 | 대화형 쿼리 플레이그라운드 — API를 실시간으로 테스트 | |
📋 레지스트리 | 인덱싱된 모든 서비스 탐색 | |
📊 분석 | 시스템 아키텍처 및 점수 시각화 |
API 참조
POST /discover — 서비스 검색
에이전트가 필요한 것을 설명하고, 순위가 매겨진 상위 3개의 추천을 받으세요.
POST https://api.disvr.top/discover
Authorization: Bearer <api-key>
Content-Type: application/json
{
"need": "scrape product prices from e-commerce websites",
"max_price_per_call": 0.01,
"max_latency_ms": 5000,
"min_reputation": 3.0
}매개변수 | 필수 | 설명 |
| ✅ | 필요한 작업 (5자 이상) |
| ❌ | 호출당 최대 가격 (USD) |
| ❌ | 허용 가능한 최대 지연 시간 (ms) |
| ❌ | 최소 평판 점수 (0-5) |
POST /report — 피드백 루프
도구 사용 후 호출 결과를 보고하여 피드백 루프를 닫고 순위를 개선하세요.
POST https://api.disvr.top/report
Authorization: Bearer <api-key>
Content-Type: application/json
{
"service_id": "deepl-mcp-server",
"query_id": "q_abc123",
"success": true,
"latency_ms": 1200,
"cost_usd": 0.002
}GET /health — 상태 확인
curl https://api.disvr.top/health
# {"status": "ok", "services_indexed": 330}MCP 도구
MCP 서버를 통해 노출되는 도구:
도구 | 설명 |
| 의미론적 검색 + 4차원 가치 순위 |
| 인덱싱된 총 서비스 수 |
| 호출 결과 보고 (피드백 루프) |
SDK
완벽한 타입 안전성을 갖춘 TypeScript/JavaScript SDK:
npm install @sylar_yan/disvrimport { Disvr } from "@sylar_yan/disvr";
const client = new Disvr("dsvr_your_api_key");
const result = await client.discover({
need: "translate Chinese legal contract to Thai",
max_latency_ms: 3000,
min_reputation: 3.5,
});
console.log(result.recommendations);아키텍처
Agent Query ("I need X")
│
▼
┌─────────────────────────────────────────┐
│ Disvr API (Cloudflare Workers + Hono) │
├─────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ Embed │───▶│ CF Vectorize │ │
│ │ (OpenAI) │ │ (1536-dim cosine)│ │
│ └──────────┘ └────────┬─────────┘ │
│ │ │
│ ┌─────── 50 candidates ──────┐ │
│ ▼ │ │
│ ┌──────────────┐ ┌────────────┐ │ │
│ │ D1 Database │ │ FTS5 │ │ │
│ │ (services, │ │ (fallback) │ │ │
│ │ call_reports)│ └────────────┘ │ │
│ └──────┬───────┘ │ │
│ │ │ │
│ ▼ │ │
│ ┌──────────────────────────────┐ │ │
│ │ 4-Dim Value Ranking │ │ │
│ │ semantic × 0.30 │ │ │
│ │ quality × 0.25 │ │ │
│ │ cost_eff × 0.25 │ │ │
│ │ reliable × 0.20 │ │ │
│ └──────────┬───────────────────┘ │ │
│ ▼ │ │
│ Top 3 Recommendations │ │
│ │ │
├──────────────────────────────────────┤ │
│ MCP Server (Streamable HTTP) │ │
│ via CF Agents SDK + Durable Objects │ │
└──────────────────────────────────────┘ │
│
┌──────────────────────────────────┘
▼
┌─────────────┐
│ Cron Trigger │ ← Hourly: crawl (Smithery + GitHub + MCP Registry)
│ (4-phase) │ → enrich GitHub Stars → health checks
└─────────────┘ → aggregate daily stats
│
┌────▼────────────┐
│ POST /report │ ← Agent feedback
│ refreshStats() │ success_rate, latency → ranking improvement
└─────────────────┘기술 스택
구성 요소 | 기술 |
런타임 | Cloudflare Workers |
프레임워크 | Hono |
데이터베이스 | Cloudflare D1 (SQLite) |
벡터 검색 | CF Vectorize (1536차원, 코사인) |
텍스트 검색 | FTS5 (OR + 접두사, 폴백 경로) |
임베딩 | OpenAI text-embedding-3-small |
MCP 서버 | CF Agents SDK (McpAgent + Durable Objects) |
데이터 소스 | Smithery, GitHub awesome-mcp, MCP 공식 레지스트리 (~2000개 서비스) |
크론 | CF Cron Trigger (매시간) |
언어 | TypeScript |
프로젝트 구조
disvr/
├── wrangler.toml # CF Workers config
├── schema.sql # D1 database schema
├── src/
│ ├── index.ts # Hono entry + REST routes
│ ├── discover.ts # Core: semantic search + 4-dim ranking
│ ├── db.ts # D1 CRUD + feedback stats
│ ├── crawl.ts # Multi-source crawlers + embedAndIndex
│ ├── mcp.ts # MCP Server (Streamable HTTP)
│ ├── types.ts # TypeScript type definitions
│ ├── landing.ts # Landing page HTML
│ └── pages/
│ ├── registry.ts # Provider Registry page
│ ├── explorer.ts # Agent Query Explorer page
│ └── analytics.ts # Analytics Dashboard page
├── test/
│ ├── types.test.ts # Type conversion tests
│ ├── discover.test.ts # Matching engine tests
│ ├── db.test.ts # D1 operations tests
│ ├── api.test.ts # REST API integration tests
│ └── crawl.test.ts # Crawler tests
└── .mcp.json # MCP config example로컬 개발
# Prerequisites: Node.js 22+
nvm use 22
# Install dependencies
npm install
# Local dev server
npx wrangler dev
# Run tests
npx vitest run
# Deploy
npx wrangler deploy환경 변수
# Set OpenAI API Key (for embeddings)
wrangler secret put OPENAI_API_KEY데이터베이스 설정
# Create D1 database
wrangler d1 create disvr-db
# Run schema
wrangler d1 execute disvr-db --file=./schema.sql
# Create Vectorize index
wrangler vectorize create disvr-mcp-index --dimensions=1536 --metric=cosine설계 철학
단순 검색이 아닌 지출 인텔리전스
Disvr는 디렉토리가 아닙니다. 마켓플레이스도 아닙니다. 의사결정 계층입니다.
기존 디렉토리는 목록을 반환하고 선택을 사용자에게 맡깁니다. Disvr는 추천을 반환하며 다음을 알려줍니다:
이 도구를 사용할 가치가 있는 이유
비용/품질 비율이 어떻게 비교되는지
대안보다 무엇이 더 나은지
폐쇄 루프 피드백이 핵심 경쟁력
에이전트가 호출 결과(성공/실패, 지연 시간, 비용)를 보고할 때마다 순위 알고리즘에 반영됩니다. 사용량이 많아질수록 추천은 더 똑똑해집니다. 이것은 정적인 데이터베이스가 아니라 살아있는 지능형 시스템입니다.
이중 경로 검색으로 검색 품질 보장
기본: OpenAI 임베딩 → CF Vectorize 벡터 검색 (의미론적 일치)
폴백: FTS5 전체 텍스트 검색 (OR + 접두사 와일드카드)
임베딩이 실패하거나 벡터 검색 결과가 없을 경우 자동으로 전환되어 항상 결과를 반환합니다
로드맵
[x] 핵심 API (discover + report + health)
[x] MCP 서버 (스트리밍 가능한 HTTP)
[x] Smithery 크롤러 (330개 이상의 서비스)
[x] GitHub awesome-mcp 크롤러 + Stars 정보 보강
[x] MCP 공식 레지스트리 크롤러 (1000개 이상의 서비스)
[x] 랜딩 페이지 + 4개의 프론트엔드 페이지
[x] 커스텀 도메인 (www.disvr.top + api.disvr.top)
[x] npm SDK (@sylar_yan/disvr)
[x] 90개의 단위 테스트 (타입, discover, db, api, crawl)
[x] 요청 로깅 + 분석 API
[x] 일일 통계 크론 집계
[x] 상태 확인 + 다중 신호 평판 점수 산정
[x] 사용자 등록 + API 키 관리 UI
[ ] 에이전트 통합 검증 (MCP 실환경 테스트)
[ ] 비용 추적 대시보드
[ ] 결제 프로토콜 통합 (Stripe MPP / x402)
기여
PR과 이슈는 언제나 환영합니다!
🐛 버그 보고 → GitHub Issues
💡 기능 요청 → GitHub Issues
🔧 코드 기여 → Fork & PR
감사의 말
Cloudflare Workers — 글로벌 엣지 컴퓨팅
Hono — 경량 웹 프레임워크
Smithery — MCP 서비스 레지스트리
OpenAI — text-embedding-3-small
CF Agents SDK — MCP 서버 구현
라이선스
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Svanik-yan/disvr'
If you have feedback or need assistance with the MCP directory API, please join our Discord server