ariadne
Ariadne is a cross-service API dependency graph and semantic code navigation tool for microservice architectures. It exposes four core tools:
query_chains— Search for cross-service API chains using a business term or endpoint name (e.g."createOrder"). Returns ranked clusters of related GraphQL operations, HTTP endpoints, Kafka topics, and frontend queries across all indexed services.expand_node— Trace one-hop relationships from a known node (e.g. a Kafka topic, REST endpoint, or GraphQL mutation) to discover directly connected components with similarity scores.ariadne_help— Retrieve setup and usage guidance, including how to index microservices or troubleshoot empty results. Requires no database access.log_feedback— Record thumbs-up/thumbs-down feedback on results, stored locally infeedback.dbto gradually improve cluster rankings over time.
It supports GraphQL, Spring (Java/Kotlin), TypeScript, and cube.js codebases; operates offline via static analysis; and integrates with MCP-compatible tools like Claude Code and Cursor.
Scans GraphQL SDL files to extract Query, Mutation, Subscription, and Type definitions for cross-service API dependency analysis and semantic code navigation.
Analyzes Kotlin code with Spring framework annotations to identify HTTP endpoints, Kafka topics, and backend client calls for microservice API dependency analysis.
Analyzes Spring framework code to identify HTTP endpoints via @RestController annotations, Kafka topics via @KafkaListener and application.yaml configurations, and backend client calls via RestClient/RestTemplate.
Scans TypeScript files to extract frontend GraphQL queries/mutations from gql template literals and REST API calls from axiosRequest/fetch statements for cross-service feature mapping.
Ariadne
Ariadne's thread — a way out of the microservice maze.
Cross-service API dependency graph for Spring Boot + TypeScript microservice stacks. MCP stdio server for AI coding assistants (Claude Code, Cursor, Windsurf), with a CLI twin. Local SQLite + TF-IDF. Zero ML dependencies.

70-second deterministic terminal walkthrough. Reproduce it from
docs/demo.tape.
What it does
Indexes the contract layer — GraphQL mutations, REST endpoints, Kafka topics, frontend queries. Nothing else. That's why results fit an AI context window.
Ask Claude "where does createOrder live across the stack?" and
query_chains returns:
Top Cluster #1 [confidence: 0.91]
Services: gateway, orders-svc, billing-svc, web
- [web] Frontend Mutation: createOrder
- [gateway] GraphQL Mutation: createOrder
- [orders-svc] HTTP POST /orders: createOrder
- [orders-svc] Kafka Topic: order-created
- [billing-svc] Kafka Listener: order-created → chargeCustomerThe response is intentionally bounded for an AI context window. See the
reproducible public-stack benchmark for measured retrieval,
serialized token, and timing results against rg and grep.
Current public-stack benchmark (48 reviewed queries across Spring REST, GraphQL/TypeScript, Kafka, and FastAPI):
Backend | Top-1 | Top-3 | MRR | Warm query | Mean output |
Ariadne | 64.6% | 70.8% | 0.677 | <0.3 ms | 157 tokens |
| 37.5% | 56.2% | 0.510 | ~9 ms | 591 tokens |
| 37.5% | 56.2% | 0.510 | ~9 ms | 591 tokens |
Full methodology and per-stack results · raw JSON evidence
This corpus is operation-name-heavy and measures deterministic contract lookup compatibility. It is not yet a natural-language relevance benchmark.
Supports: GraphQL · Spring HTTP/Kafka/RestClient · Python FastAPI · TypeScript Apollo/fetch/axios · Cube.js.
Related MCP server: depwire
Try it in 30 seconds (zero config)
pip install ariadne-mcp
ariadne-mcp demoClones spring-petclinic-microservices into
~/.cache/ariadne-mcp/demo, scans it, and prints the top cluster for
owner — a real cross-service call chain. No config file, no workspace
setup.
Did Ariadne find the chain you expected? Share one minute of structured feedback. Ariadne sends no usage data automatically; the form opens only when you choose to submit it.
Install on your own workspace
pip install ariadne-mcp
cp "$(python -c 'import ariadne_mcp, os; print(os.path.join(os.path.dirname(ariadne_mcp.__file__), "ariadne.config.example.json"))')" ariadne.config.json
# edit ariadne.config.json (list the repos you want indexed)
ariadne-mcp install ariadne.config.json ~/your-workspaceRestart Claude Code. install is idempotent — re-run after pulling new
code, or let the assistant call rescan on a stale_warning.
After your first real query, you can optionally send closed-ended usage feedback. No source, query, or usage data is transmitted by Ariadne itself.
Config
{ "repos": [
{ "path": "../gateway" },
{ "path": "../orders-svc" },
{ "path": "../web" }
]}Scanners are inferred from each repo's top-level files
(pom.xml / build.gradle / package.json / SDL). See
docs/CONFIG.md for the detection table and override
syntax.
Reproducible public samples
Each sample pins an upstream commit, scans real service source, runs one query, and verifies manually reviewed node IDs:
Example | Contract path |
Spring REST gateway → service | |
GraphQL/TypeScript services | |
Kafka producer → consumer | |
Python FastAPI routes |
Run one from a source checkout:
python examples/run.py kafka-microservicesEvaluate ranking
Keep a JSONL judgment list for queries that matter to your workspace:
{"hint":"createOrder","expected_node_ids":["gateway::gql::m::createOrder"],"k":3}
{"hint":"owner","expected_node_ids":["customers::http::GET /owners/{ownerId}"],"match":"any","k":5}Run it against a built DB:
ariadne-mcp --db .ariadne/ariadne.db eval eval/queries.jsonl --top 3 --min-hit-rate 0.8The command evaluates top-k hit rate and MRR using a stable internal candidate
depth, and exits non-zero when a configured threshold fails. Add
--feedback-db .ariadne/feedback.db to include local feedback reranking in the
eval.
Architecture, MCP tools, scoring math, feedback boost →
docs/ARCHITECTURE.md. Custom scanners (Go,
Rust, anything) → docs/CUSTOM_SCANNERS.md.
Maintainer adoption snapshots → docs/ADOPTION_METRICS.md.
Maintenance
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/whyy9527/ariadne'
If you have feedback or need assistance with the MCP directory API, please join our Discord server