Ariadne

io.github.whyy9527由 GitHub 账号 whyy9527 发布v0.2.2更新于 Oct 29, 2026

Deterministic local cross-service API-chain discovery for AI coding agents.

已验证STDIO仅桌面知识与记忆开发者工具

概览

AI 生成的概览

本地 MCP 服务器,索引微服务仓库的接口契约层,让助手追踪某个操作在各服务间的调用链。

可以做什么
  • 索引所配置仓库的契约层:GraphQL mutation、REST 端点、Kafka topic 与前端查询
  • 按操作名查询跨服务调用链,返回带置信度的排序聚类
  • 展开调用链并对结果评分,用于本地反馈重排
  • 结果被标记为过期时重新扫描工作区
  • 运行零配置演示,克隆公开示例栈并输出真实调用链
适用场景
适用于助手在 Spring Boot、TypeScript、FastAPI 或 Kafka 微服务工作区中工作,需要查明某个操作涉及哪些服务与契约,而不是跨仓库全文搜索时。更适合契约级查找,而非通用代码搜索。
运行要求
以本地 stdio 进程运行,从 PyPI 安装 ariadne-mcp,需要 Python 3.10-3.12、MCP Python SDK v1 与 PyYAML。需要一份列出待索引仓库路径的配置文件,以及写入索引数据库的工作区。演示会克隆一个公开仓库到用户缓存目录。
安装前请注意
索引由你的源码仓库构建,数据库与本地反馈保存在磁盘上,应按工作区数据处理。演示会克隆第三方仓库并需要网络访问。反馈仅在用户主动提交时才会发送。拉取新代码后需重新运行 install 或 rescan,否则结果可能过期。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Ariadne,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Ariadne

[License: MIT] [MCP] [ariadne MCP server] [Awesome MCP Servers]

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.

[Ariadne demo — scan Spring PetClinic microservices and ask "owner"]

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 → chargeCustomer

The 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):

BackendTop-1Top-3MRRWarm queryMean output
Ariadne89.6%95.8%0.927<0.4 ms375 tokens
rg37.5%56.2%0.510~9 ms591 tokens
grep37.5%56.2%0.510~9 ms591 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.

Reproduce the measurements with uv:

bash
uv run --locked --extra benchmark python benchmarks/run.py

The first run that uses tiktoken downloads its encoding data and needs network access. The benchmark also calls the system git, rg, and grep commands.

Supports: GraphQL · Spring HTTP/Kafka/RestClient · Python FastAPI · TypeScript Apollo/fetch/axios · Cube.js.


Try it in 30 seconds (zero config)

bash
pip install ariadne-mcpariadne-mcp demo

Clones 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

bash
pip install ariadne-mcpcp "$(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-workspace

Restart Claude Code. install is idempotent — re-run after pulling new code, or let the assistant call rescan on a stale_warning.

Run an MCP server from a source checkout

Prepare the environment with the project's pinned uv version, then configure the MCP client to launch that environment's Python directly:

bash
cd /path/to/ariadneuv sync --locked --no-dev --inexact.venv/bin/python -m ariadne_mcp.server \  --db /path/to/workspace/.ariadne/ariadne.db \  --fb /path/to/workspace/.ariadne/feedback.db

Use an absolute interpreter path in the MCP client configuration. Run the sync step after dependency changes; it is separate from the long-running server. --inexact preserves other installed dependency groups in a development checkout. If UV_PROJECT_ENVIRONMENT selects another environment, configure that environment's Python instead of .venv/bin/python.

With the project's pinned uv version, wrapping a long-running server in uv run keeps uv's shared package-cache lock held for the server's lifetime, which prevents normal uv cache prune. A direct Python launch avoids that lock. Separate stdio client connections can run separate server processes.

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

json
{ "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:

ExampleContract path
spring-petclinicSpring REST gateway → service
one-platformGraphQL/TypeScript services
kafka-microservicesKafka producer → consumer
fastapi-microservicesPython FastAPI routes

Run one from a source checkout:

bash
python examples/run.py kafka-microservices

Evaluate ranking

Keep a JSONL judgment list for queries that matter to your workspace:

jsonl
{"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:

bash
ariadne-mcp --db .ariadne/ariadne.db eval eval/queries.jsonl --top 3 --min-hit-rate 0.8

The 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.

Business acceptance and ablation

The source-backed business suite covers all nine built-in scanners and the complete MCP query/expand/rate/rescan lifecycle, including a real stdio client. It uses synthetic contracts; private workspace sources and feedback stay local.

bash
uv sync --locked --extra benchmark --group devuv run --locked --extra benchmark --group dev python -m pytest tests/ -quv run --locked --extra benchmark python benchmarks/ablation.py \  --output benchmarks/.work/ablation.json

See quality experiment results for the fixed-input baseline, component ablations, output costs and remaining limitations. The server supports Python 3.10, 3.11, and 3.12. Runtime requirements are MCP Python SDK v1 (mcp>=1,<2) and PyYAML (PyYAML>=6,<7); tiktoken is an optional benchmark dependency. uv.lock pins the maintainer and CI environment and does not constrain dependencies resolved by package users.

来源:README.md,提交 26e4599

工具

0
SourceWeft 曾在隔离沙箱中以无凭据方式启动该软件包一次,以列出其工具,但未能完成:服务器未能启动。

版本历史

4
  1. v0.2.2最新Oct 29, 2026
  2. v0.2.1Oct 22, 2026
  3. v0.2.0Oct 12, 2026
  4. v0.1.3Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分