Syftly
Ranks the best AI tool or API per task: transcription, TTS, web search, scraping and OCR.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"syftly": {
"url": "https://syftly.vercel.app/api/mcp"
}
}
}Puntos de conexión remotos
https://syftly.vercel.app/api/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (1)
🟢find_best_tool(query, category)
Given a natural-language question about which AI tool or API is best for a task (currently transcription, text-to-speech, web search, scraping & browser and ocr & document extraction), return Syftly's ranked recommendation: a citeable summary, a provider table with prices and trade-offs, dated sources, and a confidence label. Ask in plain English about price, accuracy, language or capability trade-offs — e.g. 'best OCR API for scanned PDFs' or 'best web scraping API for JavaScript-heavy sites'. Optionally pass "category" to disambiguate; otherwise it is detected from the question.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The question in natural language, e.g. 'best transcription API for Dutch'."
},
"category": {
"type": "string",
"description": "Optional category id to disambiguate the question; omit to let Syftly detect it.",
"enum": [
"transcription",
"tts",
"web-search",
"scraping",
"ocr"
]
}
},
"required": [
"query"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The human question (page H1)."
},
"slug": {
"type": "string"
},
"category": {
"type": "string",
"description": "e.g. 'transcription'; '' on a no-match."
},
"routing": {
"type": "string",
"enum": [
"matched",
"none",
"ambiguous"
],
"description": "Honest routing outcome: 'matched' = answered from a real category; 'none' = no category matched (out-of-scope/gibberish) — an honest no-match, not a fabricated answer; 'ambiguous' = fit 2+ categories. 'none'/'ambiguous' carry `categories` and no real recommendation/providers."
},
"summary": {
"type": "string",
"description": "Citeable summary, 40-80 words, reused verbatim across all views. On a no-match, the plain-language message."
},
"confidence": {
"type": "string",
"enum": [
"light estimate",
"hard tested"
],
"description": "Confidence/depth label."
},
"updated": {
"type": "string",
"description": "ISO date."
},
"recommendation": {
"type": "object",
"required": [
"default",
"axes"
],
"properties": {
"default": {
"type": "string",
"description": "Name of the recommended offering ('' on a no-match)."
},
"axes": {
"type": "object",
"description": "Decision-axis -> recommended offering. Carries EVERY matched axis: filters + all ordering axes, each naming its own computed winner.",
"additionalProperties": {
"type": "string"
}
},
"primary": {
"type": "string",
"description": "The axis key whose winner became `default` when 2+ ordering axes conflict with no composite tiebreak — the earliest-in-query axis. Absent for single-axis/composite-resolved answers."
}
}
},
"providers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"provider",
"price",
"metrics",
"strengths",
"weaknesses",
"source",
"source_date"
],
"properties": {
"name": {
"type": "string",
"description": "The callable offering, e.g. 'Deepgram Nova-3'."
},
"provider": {
"type": "string",
"description": "The company behind it, e.g. 'Deepgram'."
},
"model_family": {
"type": "string",
"description": "Filter attribute, not a row of its own."
},
"price": {
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"value": {
"type": [
"number",
"null"
]
},
"unit": {
"type": "string",
"description": "e.g. '$/min', '$/1000min'."
},
"comparable": {
"type": "boolean",
"description": "false = token-/credit-priced, not directly comparable (excluded from the price axis)."
}
}
},
"metrics": {
"type": "object",
"description": "Open category-specific decision-axis fields. Keys are stable data identifiers (e.g. 'wer', 'latency_ms'); values are number, boolean, string or null (null = an honest gap). Number metrics back min/max axes; boolean metrics back filter axes.",
"additionalProperties": {
"type": [
"number",
"boolean",
"string",
"null"
]
}
},
"strengths": {
"type": "string"
},
"weaknesses": {
"type": "string"
},
"source": {
"type": "string",
"description": "Where this row's facts come from."
},
"source_date": {
"type": "string",
"description": "ISO date of the source."
}
}
}
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"date"
],
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"date": {
"type": "string",
"description": "ISO date."
}
}
}
},
"categories": {
"type": "array",
"description": "Present only when routing !== 'matched': the supported categories so the caller can re-ask in scope.",
"items": {
"type": "object",
"required": [
"category",
"label"
],
"properties": {
"category": {
"type": "string",
"description": "Supported category id, e.g. 'web-search'."
},
"label": {
"type": "string",
"description": "Human label, e.g. 'Web search'."
}
}
}
}
},
"required": [
"query",
"slug",
"category",
"routing",
"summary",
"confidence",
"updated",
"recommendation",
"providers",
"sources"
],
"additionalProperties": false
}Comunidad
Evidencia