<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: bayze-mcp</title>
    <description>The latest articles on DEV Community by bayze-mcp (@caijianxiong2007prog).</description>
    <link>https://dev.to/caijianxiong2007prog</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4227922%2Fee4e9235-3821-49ec-8830-f70d5fb36cdc.JPG</url>
      <title>DEV Community: bayze-mcp</title>
      <link>https://dev.to/caijianxiong2007prog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/caijianxiong2007prog"/>
    <language>en</language>
    <item>
      <title>We Made Two AIs Debate and Hired a Third as the Arbiter — 6 Test Rounds, 7 Bugs Fixed</title>
      <dc:creator>bayze-mcp</dc:creator>
      <pubDate>Fri, 06 Nov 2026 13:43:41 +0000</pubDate>
      <link>https://dev.to/caijianxiong2007prog/we-made-two-ais-debate-and-hired-a-third-as-the-arbiter-6-test-rounds-7-bugs-fixed-4c5</link>
      <guid>https://dev.to/caijianxiong2007prog/we-made-two-ais-debate-and-hired-a-third-as-the-arbiter-6-test-rounds-7-bugs-fixed-4c5</guid>
      <description>&lt;p&gt;Three months ago &lt;a href="https://github.com/caijianxiong2007-prog/bayze-mcp" rel="noopener noreferrer"&gt;bayze-mcp&lt;/a&gt; was a single waterfall: model A drafts, model B reviews, model C revises. Today it ships &lt;strong&gt;five multi-model collaboration patterns&lt;/strong&gt; — and the most interesting one, debate, only works because we broke it six times with real runs and fixed what broke. This post is the full debugging log, costs included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five patterns, with real costs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;Measured cost&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cross-vendor review&lt;/td&gt;
&lt;td&gt;A drafts → B structured-review gate → C revises&lt;/td&gt;
&lt;td&gt;~$0.001/run&lt;/td&gt;
&lt;td&gt;Default quality tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel + judge&lt;/td&gt;
&lt;td&gt;N models answer → judge picks by hard constraints&lt;/td&gt;
&lt;td&gt;$0.0013/run&lt;/td&gt;
&lt;td&gt;Tasks with length/format caps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MoA aggregation&lt;/td&gt;
&lt;td&gt;N models answer → synthesizer merges the best of each&lt;/td&gt;
&lt;td&gt;$0.006/run&lt;/td&gt;
&lt;td&gt;Open-ended generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision loop&lt;/td&gt;
&lt;td&gt;Review bounces → revise → re-review → escalate to a stronger model when exhausted&lt;/td&gt;
&lt;td&gt;$0.002/escalation&lt;/td&gt;
&lt;td&gt;Unstable first drafts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debate&lt;/td&gt;
&lt;td&gt;Two debaters open independently → K rebuttal rounds → arbiter verdict&lt;/td&gt;
&lt;td&gt;$0.02–0.04/run&lt;/td&gt;
&lt;td&gt;Analysis / decisions / risk assessment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The single most useful finding: &lt;strong&gt;pattern-task fit beats model quality&lt;/strong&gt;. With a hard length cap, MoA aggregation overshot by +59% and +74% in two runs (rewrite steps systematically lengthen text — same family as the 1.66× inflation we measured in revision steps), while a judge picking between candidates naturally respects the cap because it just picks the shorter one. For open-ended writing the judge can only hand you "the better of two drafts"; only synthesis takes the best of both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nobody counts their own words
&lt;/h2&gt;

&lt;p&gt;Five samples across six rounds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qwen-plus self-reported "exactly 10 words" — actual: &lt;strong&gt;14&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Qwen-plus self-reported "about 580 characters" — actual: &lt;strong&gt;799&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Claude haiku under-reported by 1–38 chars in earlier runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No model's self-count is trustworthy. So bayze treats length like memory safety: &lt;strong&gt;the engine counts, deterministically&lt;/strong&gt; — every output passes &lt;code&gt;max_chars&lt;/code&gt; / &lt;code&gt;max_words&lt;/code&gt; checks, and the model's opinion is never consulted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six rounds of debate testing: a bug-finding story
&lt;/h2&gt;

&lt;p&gt;We stress-tested &lt;code&gt;strategy: debate&lt;/code&gt; with a real question: &lt;em&gt;"Should an 8-person startup migrate off a cloud vendor's full stack within 12 months?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rounds 1–2, two invisible bugs.&lt;/strong&gt; The test agent complained "my constraints are being ignored." They were — but not by the models: the &lt;code&gt;context&lt;/code&gt; field was accepted by the MCP layer and silently dropped by the orchestrator. Separately, &lt;code&gt;maxOutputTokens: 2000&lt;/code&gt; allowed ~3000 characters of output while a &lt;code&gt;max_chars: 2000&lt;/code&gt; gate rejected at 2000 — &lt;strong&gt;the engine was permitting output it was guaranteed to reject&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3, the debate actually worked.&lt;/strong&gt; Rebuttals quoted each other point by point. One side caught the other promising "RPO &amp;lt; 5s" in its opening while admitting "primary failover takes 3.2 hours" in the same document. Cross-model adversarial review genuinely surfaces blind spots a single model has. Then the arbiter wrote 786 characters against a 600-character gate and the entire verdict was dropped — that one arbiter call cost $0.021, 90% of the run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rounds 4–5, engineering answers to "vibes" problems.&lt;/strong&gt; Models treated "opening / rebuttal / verdict" discipline as &lt;em&gt;their&lt;/em&gt; assignment and performed the whole debate solo — fixed with a system prompt scoping each side to its own position. A token cap derived at 1.4 chars/token got bypassed at 2.43 chars/token on mixed Chinese-English Claude output — fixed by &lt;strong&gt;self-calibration&lt;/strong&gt;: measure the actual chars/token ratio on the first call, use it to clamp a compress-retry. And qwen &lt;strong&gt;fabricated "we audited this team's real invoices (redacted)"&lt;/strong&gt; plus fake benchmarks and Git-history claims — a workflow has no access to any of that. Fixed with an arbiter rule: unverifiable quantitative claims are discounted, suspected fabrications are called out in the verdict.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 6, the last design flaw.&lt;/strong&gt; Both models ended up on the same side ("worth migrating"). Explicitly assigning sides did nothing, because both steps received the same input — there was no injection point for stances. Emergent disagreement works on open analysis questions; on yes/no questions both models anchor to the same conclusion. Fixed with optional &lt;code&gt;stances: [pro, con]&lt;/code&gt;, with one rule baked into the prompt: argue your assigned side as hard as you honestly can, but never fabricate evidence for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the arbiter actually concluded
&lt;/h2&gt;

&lt;p&gt;Condensed from two debates plus verdicts:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't do a 12-month full migration. An 8-person team needs 0.5–1 FTE of SRE capacity to self-host; the savings don't cover half a person. AI services are the last thing to move. The correct use of 12 months is making exit cheap (containers, S3/Postgres-compatible interfaces, moving traffic-heavy spend first) — then using "we can leave" as negotiating leverage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Caveat that matters more than the conclusion: &lt;strong&gt;every dollar figure both models produced was fabricated&lt;/strong&gt; (the arbiter flagged and excluded them). What survives is the decision framework and the risk checklist. That's the meta-lesson of all six rounds: &lt;em&gt;model quantification is not directly trustworthy — cross-model adversarial review plus an arbiter discount just makes the untrustworthiness visible.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; bayze-mcp@0.14.0 mcp &lt;span class="nt"&gt;--config&lt;/span&gt; your-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;GitHub (bilingual README): &lt;a href="https://github.com/caijianxiong2007-prog/bayze-mcp" rel="noopener noreferrer"&gt;https://github.com/caijianxiong2007-prog/bayze-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Gitee mirror: &lt;a href="https://gitee.com/collection-master/bayze-mcp" rel="noopener noreferrer"&gt;https://gitee.com/collection-master/bayze-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/bayze-mcp" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/bayze-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Every pattern's design trade-offs are recorded as ADR D1–D8 in &lt;code&gt;docs/adr/0006-multi-ai-collaboration.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MIT, local-first, keys never leave your environment, 193 automated tests. If you're orchestrating multiple models, I'd genuinely like to hear what yours fabricates — we keep a list.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>mcp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Bayze: A Local-First MCP Server for Cross-Vendor AI Model Review (Draft - Review - Revise)</title>
      <dc:creator>bayze-mcp</dc:creator>
      <pubDate>Thu, 05 Nov 2026 08:15:08 +0000</pubDate>
      <link>https://dev.to/caijianxiong2007prog/bayze-a-local-first-mcp-server-for-cross-vendor-ai-model-review-draft-review-revise-209g</link>
      <guid>https://dev.to/caijianxiong2007prog/bayze-a-local-first-mcp-server-for-cross-vendor-ai-model-review-draft-review-revise-209g</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You're using an AI assistant (Cherry Studio, Claude Desktop, Cursor) and you want a second opinion on its answer. Today, that means manually copy-pasting between ChatGPT, Claude, and DeepSeek.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bayze&lt;/strong&gt; eliminates that friction. It's a local-first MCP server that turns "cross-vendor AI review" into a single tool call your AI client can make.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Bayze runs a &lt;strong&gt;waterfall workflow&lt;/strong&gt;: one model drafts, a second model reviews (with structured JSON verdict), a third model revises only when rejected.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ draft   deepseek-chat    2.1s  ~$0.001
✓ review  qwen-plus        2.7s  ~$0.001
    verdict: revise — "missing TLS handshake details"
✓ revise  doubao-lite       3.6s
  → Final output incorporates reviewer's corrections
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every step is auditable: which model, how many tokens, what cost, why it escalated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; bayze-mcp mcp &lt;span class="nt"&gt;--config&lt;/span&gt; your-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add it to your MCP client (Cherry Studio, Claude Desktop, Cursor — any stdio-compatible client).&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Configure providers (YAML)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deepseek&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai-compatible&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com/v1"&lt;/span&gt;
    &lt;span class="na"&gt;api_key_ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;env:BAYZE_DEEPSEEK_API_KEY"&lt;/span&gt;
    &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek-chat&lt;/span&gt;
        &lt;span class="na"&gt;pricing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;currency&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;CNY&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;input_per_1m_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;2.0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;output_per_1m_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;8.0&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;

  &lt;span class="na"&gt;dashscope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai-compatible&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://dashscope.aliyuncs.com/compatible-mode/v1"&lt;/span&gt;
    &lt;span class="na"&gt;api_key_ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;env:BAYZE_DASHSCOPE_API_KEY"&lt;/span&gt;
    &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qwen-plus&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Define a workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;workflows&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;review_then_revise_cn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;waterfall&lt;/span&gt;
    &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;max_steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
      &lt;span class="na"&gt;total_timeout_ms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120000&lt;/span&gt;
      &lt;span class="na"&gt;max_cost_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.20&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;draft&lt;/span&gt;
        &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek-chat&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;original&lt;/span&gt;
        &lt;span class="na"&gt;evaluate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;non_empty&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;review&lt;/span&gt;
        &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dashscope&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qwen-plus&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;review_template&lt;/span&gt;
        &lt;span class="na"&gt;run_if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
        &lt;span class="na"&gt;gate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;structured_review&lt;/span&gt;
        &lt;span class="na"&gt;review_schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;verdict&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;reasons&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;revise&lt;/span&gt;
        &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ark&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;doubao-seed-2-1-lite&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;revision_template&lt;/span&gt;
        &lt;span class="na"&gt;run_if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;review_verdict_is_revise&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Call it from your AI client
&lt;/h3&gt;

&lt;p&gt;Just say: &lt;em&gt;"Use review_then_revise_cn to process: [your task]"&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Structured review gate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reviewer must return JSON `{"verdict":"accept\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Budget guard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-call estimation, atomic reservation, fail-closed on unknown prices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dual access mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BYOK (your keys) or Bayze unified API (managed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auditable journal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every step records model, tokens, cost, latency — never stores prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Env-only keys, no telemetry, no cloud components, no listening ports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deterministic checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;{% raw %}&lt;code&gt;max_chars&lt;/code&gt;, &lt;code&gt;non_empty&lt;/code&gt; — engine-level, not model-dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Supported Providers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI-compatible&lt;/strong&gt;: DeepSeek, Qwen (DashScope), Doubao (Ark), OpenAI, any /v1 endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic&lt;/strong&gt;: Native Messages API adapter (different protocol, auth, error taxonomy)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bayze unified API&lt;/strong&gt;: Managed gateway with 53+ models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mock&lt;/strong&gt;: 13 scenarios for testing without keys&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Results
&lt;/h2&gt;

&lt;p&gt;Verified with &lt;strong&gt;15 real cross-vendor runs&lt;/strong&gt; across 7 providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewer correctly identified missing TLS handshake details in a draft&lt;/li&gt;
&lt;li&gt;Reviser incorporated reviewer's corrections (verified character-by-character)&lt;/li&gt;
&lt;li&gt;Cost per 3-step review: &lt;strong&gt;~$0.003&lt;/strong&gt; (less than a penny)&lt;/li&gt;
&lt;li&gt;Latency: &lt;strong&gt;8-15s&lt;/strong&gt; for full waterfall&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/caijianxiong2007-prog/bayze-mcp" rel="noopener noreferrer"&gt;caijianxiong2007-prog/bayze-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt;: &lt;a href="https://www.npmjs.com/package/bayze-mcp" rel="noopener noreferrer"&gt;bayze-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: MIT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests&lt;/strong&gt;: 120, CI on ubuntu/windows/macos&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Bayze is local-first: your keys stay on your machine, your prompts never touch our servers (unless you opt into the unified API), and no telemetry is collected.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
