Syftly
Ranks the best AI tool or API per task: transcription, TTS, web search, scraping and OCR.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"syftly": {
"url": "https://syftly.vercel.app/api/mcp"
}
}
}Remote-Endpunkte
https://syftly.vercel.app/api/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (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.
Eingabe-Schema
{
"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
}Ausgabe-Schema
{
"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
}Community
Nachweis