
Evalsmith Mcp
io.github.diegoperezg7由 GitHub 帳號 diegoperezg7 發布v0.1.0更新於 Oct 29, 2026
Evaluate RAG retrieval, agent tool calls and prompt regressions with deterministic metrics.
概覽
本機 MCP 伺服器,用決定性指標評估 RAG 檢索、代理工具呼叫與提示詞回歸,並產出報告。
- 可以做什麼
- 依 qrels 評估檢索結果:各截斷點的 recall、precision、nDCG、命中率與 MRR
- 以帶種子的配對自助法信賴區間排序兩到三個設定,並判斷差距是否顯著
- 將代理軌跡與預期的工具呼叫比對,支援嚴格或寬鬆順序與參數比對器
- 在黃金集上偵測基準輸出與候選輸出之間的提示詞回歸
- 將結果輸出為 Markdown、JSON 或 JUnit 報告,並執行工作區內的 evalsmith.yaml 套件
- 提供內建的合成範例資料集與引導提示詞,用於比較設定、稽核軌跡與檢視提示詞變更
- 適用情境
- 適合在調整檢索器、提示詞或代理時使用:讓助理在對話中或合併前量化某次變更是否有效、領先是否具統計意義,以及工具呼叫與黃金集輸出是否仍然成立。
- 執行需求
- 透過 npx 或全域 npm 安裝,以 stdio 在本機執行(需要 Node.js)。選用的 LLM 評審需要 OpenAI 相容端點,由 EVALSMITH_JUDGE_BASE_URL 與 EVALSMITH_JUDGE_MODEL 指定;託管端點另需 EVALSMITH_JUDGE_API_KEY。EVALSMITH_ROOT 限制 run_suite 可讀取的目錄,LOG_LEVEL 控制日誌等級。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Evalsmith Mcp,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
evalsmith-mcp
Evaluate RAG retrieval and AI agents with deterministic metrics, from any MCP client or from CI.
[Node] [TypeScript] [MCP SDK] [CI] [Paid API keys] [npm] [License: MIT] [M8ven Score] [Glama score] [Evalsmith MCP server]
evalsmith answers four questions that come up every time a retriever, prompt or agent changes:
- Is retrieval good enough? recall@k, precision@k, nDCG@k, hit rate and MRR from qrels and a ranked run.
- Which configuration is better, and is the gap real? 2-3 configurations ranked with seeded paired-bootstrap confidence intervals.
- Did the agent call the right tools? Trace vs. expected calls, strict or lax order, argument matchers.
- Did the prompt change break anything? Golden-set checks on baseline vs. candidate outputs.
Everything is deterministic and runs offline. An LLM judge exists for a second opinion, but it is off by default and never decides the verdict. Results come out as a terminal table, Markdown, JSON, JUnit XML or a self-contained HTML report, and the GitHub Action turns them into a merge gate.
Interfaces over the same core
All four call the same functions in src/core. The MCP tools are thin adapters: parse input with Zod, call the core, return structuredContent validated against an output schema.
MCP surface
Tools
Every tool declares an input and an output Zod schema, returns structuredContent plus a JSON text block, and is annotated readOnly and non-destructive. Four tools are also idempotent and closed-world. detect_prompt_regression and run_suite are declared open-world and non-idempotent: annotations are per tool, and with the judge enabled they call an external model whose answers can vary. With the judge off (the default) they behave like the others.
run_suite runs the same suites as evalsmith run, so a client can evaluate data that lives in files instead of pasting it into the conversation. It only reads inside the workspace root (EVALSMITH_ROOT, the directory the server started in by default), following symlinks before it checks, and runs the bundled example suite when no config is given.
Bad input (unknown metric, duplicate config names, qrels with no relevant documents) comes back as an InvalidParams tool error with a message the model can act on. A judge endpoint that is down or returns an HTTP error is an InternalError.
Resources
evalsmith://examples/{name} lists and serves the synthetic datasets in examples/datasets, so a client can try every tool before wiring in its own data:
Prompts
A conversation with an MCP client
Metrics
For a query $q$ with relevant set $R_q$ (documents with grade $> 0$) and ranking $D_q$, with $D_q^{k}$ its first $k$ documents:
$\mathrm{rel}_i$ is the graded judgement of the document at rank $i$ (linear gain, as in trec_eval), and IDCG is the DCG of the judgements sorted in descending order. Reported values are means over judged queries.
Conventions, all covered by tests:
- Queries whose judgements are all 0 are skipped and listed in
skippedQueries. - Judged queries missing from the run score 0 and are listed in
missingFromRun. - Precision divides by $k$, not by the ranking length.
- Repeated document ids in a ranking keep only their first position, as in
trec_eval, so a run cannot score above 1 by repeating a relevant document. - Cut-offs start at 1:
recall@0is rejected.
Worked example (tests/core/retrieval.test.ts): judgements a=2, b=1, c=0, ranking d, a, e, b, c.
DCG@5 $= 2/\log_2 3 + 1/\log_2 5 = 1.69254$, IDCG@5 $= 2/\log_2 2 + 1/\log_2 3 = 2.63093$, so nDCG@5 $= 0.64332$; recall@3 $= 0.5$, precision@5 $= 0.4$, RR $= 0.5$.
Bootstrap. compare_configs resamples queries with replacement, using the same indices for every configuration (paired), samples times, from a seeded PRNG (mulberry32). Intervals are percentiles of the resampled means. The lead is significant when the interval of winner minus runner-up excludes zero. The same seed gives the same intervals on every machine.
Tool-call matchers
strict requires the trace to be exactly the expected calls in order; calls past the expected sequence fail the check and appear as failed test cases in JUnit. lax ignores order and pairs expected calls with trace calls by maximum bipartite matching (augmenting paths), so a loose matcher never steals the only call a stricter one accepts. Extra calls are reported without failing. Every matcher, exact included, fails when the argument is missing.
Prompt checks
exact (trimmed by default), regex, contains (case-insensitive by default), json_schema (the output is parsed and validated with Ajv) and length (min / max characters). A regression is a case that passes on the baseline and fails on the candidate. Missing outputs count as failures.
The optional judge sends both outputs to any OpenAI-compatible /chat/completions endpoint, Ollama included, at temperature 0. To cancel position bias each case is judged twice, with baseline as answer A and then as answer B. A side wins only when both orderings agree; a disagreement counts as a tie. That costs two requests per case. Its votes are reported next to the verdict.
Quickstart
To run the bundled examples and the tests from source:
Connect an MCP client (stdio)
[Install in Cursor] [Install in VS Code]
From a terminal:
Other desktop MCP clients read an mcpServers block like this (examples/mcp-client-config.json):
Restart the client, then try the compare_rag_configs prompt or ask it to read evalsmith://examples/agent-trace and check it.
Streamable HTTP
CLI and CI
Gates accept recall@k, precision@k, ndcg@k, hit_rate@k, mrr, tool_calls (score of check_tool_calls) and prompt_pass_rate. Gates in the YAML file apply too; a command-line gate with the same name overrides it. A prompt regression or a failed tool-call check fails the run even without gates.
Real output
node dist/cli/index.js run examples/evalsmith.yaml on the bundled datasets (examples/evalsmith.yaml):
Raising the bar makes the same run fail the build:
HTML report
--report report.html (or --format html on stdout) writes the whole run to one HTML file that opens offline and follows the system light or dark mode:
- the verdict, and a card per gate with its value, threshold and status;
- retrieval metrics per k as bars with a bootstrap interval over the queries, and gate thresholds marked on them;
- the configuration comparison with each interval, the winner and the gap to the runner-up;
- expected vs. actual tool calls, with the matched pairs linked and mismatches flagged;
- baseline vs. candidate per golden case, with the failing checks one click away.
Dark mode and an opened prompt regression
Dataset text (case ids, tool names, failure messages) is embedded as JSON in a non-executable <script type="application/json"> block and rendered with textContent only. A Content-Security-Policy allows no network access and only the page's own script, by hash. Tests open a report full of markup in Chromium and check that nothing from it runs. npm run docs:screenshots regenerates the pictures above.
GitHub Action
The step fails when a gate is below its threshold, the prompt candidate regresses or the tool calls do not match, and writes the Markdown report with the verdict to the job summary. It runs the same core as the CLI from a bundled node24 script, with no install step and no shell. examples/github-workflow.yml is a complete workflow that also keeps the HTML report as an artifact and publishes the JUnit XML as a check run.
Outputs of a section the suite does not have are empty. Dataset text printed to the log is wrapped in ::stop-commands::, so a case id or tool name cannot issue workflow commands. The judge reads EVALSMITH_JUDGE_* from the step environment, as the CLI does.
Without the action, the CLI does the same from any CI:
Suite file
Every section is optional. Paths are relative to the YAML file.
Pairs with ragcompass
ragcompass profiles a corpus and recommends how to configure the RAG pipeline: parser, chunking, top-k, hybrid search, reranking. evalsmith checks whether that configuration holds up:
Design decisions
- Deterministic first. Metrics, matchers and checks are pure functions with hand-computed tests. A model is never needed to get a verdict, so results do not drift between runs and no paid API key is required.
- Judge off by default. When enabled it goes through any OpenAI-compatible endpoint (local Ollama works), and its votes sit next to the verdict instead of changing it.
- Intervals, not just means. Twelve queries can make a 0.03 lead look decisive. A paired bootstrap with a fixed seed makes the uncertainty visible and reproducible.
- Stateless HTTP done properly. A stateless
StreamableHTTPServerTransportcannot be reused across requests, so every POST gets its own server and transport. Registration is cheap, and a test makes two consecutive calls over real HTTP to prove it. - stdout belongs to the protocol. pino writes to stderr and ESLint forbids
consoleinsrc/, so no stray byte breaks the stdio transport. The CLI keeps stdout for results only. - One schema, three uses. The Zod schemas in
src/core/schemas.tsvalidate MCP input, generate the JSON Schemas clients see, and type the core.
Project layout
Releases come from version tags: release.yml publishes to npm with provenance, to the MCP Registry and to GitHub Releases, and the action is published to the Marketplace from the release. docs/RELEASING.md has the steps, including the action bundle and the v0 tag. Changes are listed in CHANGELOG.md.
License
來源:README.md,提交 d130d5b
工具
0版本歷史
1- v0.1.0最新Oct 29, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分