Bespoke unified web-search & research MCP server: SearXNG + Exa + agent-reach platform channels, fused and re-ranked.
Kortex Search demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive parameter schemas, and detailed descriptions. All 8 tools follow consistent patterns with well-documented inputs. However, output schemas are not explicitly documented in the source code, and error handling guidance is minimal. Parameter descriptions are strong (averaging 80+ chars) and include constraints (enums, ranges). Tool composition is clean, each tool has a single responsibility. The server uses FastMCP with HTTP transport, enabling remote access. Main gaps: no visible output schema documentation, missing error recovery guidance, and no tool annotations (readOnlyHint/destructiveHint).
Papers citing a given identifier (DOI / arXiv ID / OpenAlex ID). OpenAlex first; Semantic Scholar is the fallback and fails fast while its 429 cooldown is active (see sources/semantic_scholar.py).
Resolve a DOI, arXiv ID, or title to a single rich paper record (merges Crossref + OpenAlex + arXiv metadata).
Reference list for a given paper (Crossref full refs, OpenAlex second, cooldown-gated Semantic Scholar last).
Unified web & research search across SearXNG, Exa, and social/vertical sources. Fused (weighted RRF), de-duplicated, semantically re-ranked, and diversity-filtered (MMR).
Academic literature search (arXiv + OpenAlex + Crossref). Returns rich Result objects with doi/arxiv_id/authors/year/venue/citation_count/is_oa.
Output schemas not documented in source code. While input schemas are comprehensive, return types and field structures are not visible, forcing LLMs to infer output shape.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but lack explicit annotation to signal this to clients.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (e.g., 'Try search_academic() with a different query' or 'Rate limit exceeded; retry in 60s').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | <=2025-11-25 | v2 |
News search (SearXNG news engines + Exa).
Scientific/research search. Prefers the dedicated academic sources (arXiv + OpenAlex + Crossref); falls back to SearXNG science category.
General web search (SearXNG metasearch + Exa neural search).
Parameter 'sources' in search() accepts a large enum (23+ values) but no guidance on which subset is 'fast' vs. 'slow' or which require special configuration (CN tier opt-in).
No pagination guidance in tool descriptions. search() and search_* tools accept 'limit' but do not document whether results are paginated or if there is a cursor/offset mechanism.