Fast local MCP server for deterministic cross-service API-chain discovery across REST, GraphQL, Kafka, TypeScript, and FastAPI.
Ariadne MCP demonstrates strong naming conventions and detailed, context-aware descriptions that guide LLM behavior effectively. Tool names follow verb-noun patterns (query_chains, expand_node, rate_result, rescan, show_help). Descriptions are comprehensive (150 - 400 chars) and include usage guidance (e.g., 'Use AFTER query_chains when...', 'Call this first when...'). Input schemas are present and typed for all tools. However, output schemas are not explicitly documented in the source, and error handling is minimal, no actionable recovery guidance, no error classification, no examples of failure responses. Parameters lack some constraints (e.g., top_n has a default but no min/max bounds). The rate_result tool's implicit feedback inference is clever but underdocumented. Security is sound (read-only operations, no credentials in params), and composition is clean (each tool does one thing). The server targets a specific, well-defined use case (microservice dependency discovery), and descriptions are optimized for that intent.
One-hop neighbours of a known node (endpoint / Kafka topic / GraphQL operation / frontend call), with similarity scores and file paths. Read-only; no writes except an implicit positive feedback row if called within 10 min of a matching query_chains. Returns up to 3 matched source nodes × up to 10 neighbours (edges with score ≥ 0.08), plus a `stale_warning` field — call `rescan` if non-null. Use AFTER query_chains when you already have a concrete node name and want to trace one hop further. Use query_chains (not this) when starting from a business term or when you don't yet know a node name. Partial, case-insensitive match against node id and raw_name; ambiguous inputs return multiple source groups.
Query cross-service chains by business term or endpoint name. Returns candidate clusters of related GraphQL operations, HTTP endpoints, Kafka topics, and frontend queries across all services indexed by the local Ariadne DB. Use this when you need to understand which APIs, topics, or frontend operations are involved in a business feature.
Record whether Ariadne results were useful. Call this after using query_chains or expand_node to log feedback for future improvement. If node_ids is omitted after a recent query_chains call, Ariadne infers node_ids from hint + cluster_rank. Feedback is stored locally in feedback.db and survives DB rebuilds.
Refresh the Ariadne index from inside the conversation. Call this when query_chains or expand_node returned a `stale_warning`, or after you know the user's code has changed. Re-scans every repo listed in the install-time ariadne.config.json, rebuilds TF-IDF token edges, and invalidates cached DB handles so the next query sees fresh data. No arguments; zero configuration.
Output schemas are not documented. Tools return results but the response structure (fields, types, pagination) is not specified in the source code provided. LLMs cannot predict what fields to extract or plan downstream tool calls.
Error handling and recovery guidance are absent. No evidence of try/except blocks returning actionable error messages, error classification (retryable vs. fatal), or recovery suggestions. LLMs will not know how to respond to failures.
rate_result tool's implicit feedback inference (when node_ids is omitted, infer from hint + cluster_rank within 10 min) is underdocumented. The 10-min TTL and cluster_rank semantics are mentioned but not prominently, risking misuse.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Return a quick setup and usage guide for Ariadne. Call this first when you are unsure how to use Ariadne, how to index your own microservices, or why query_chains returned no results. Always safe to call — no DB required.
Parameter constraints are incomplete. top_n has a default (3) but no documented min/max. name in expand_node has minLength:2 but no maxLength. Missing constraints invite LLMs to pass unbounded or invalid values.
No tool annotations (readOnlyHint, destructiveHint). While descriptions note which tools are READ_ONLY vs WRITE, structured annotations would improve client-side safety and LLM reasoning.