benchmark-schema-mutation
Allows running schema mutation benchmarks against OpenAI-compatible models, using OPENAI_BASE_URL and OPENAI_API_KEY to execute tasks and score responses.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@benchmark-schema-mutationrun the schema-mutation benchmark against claude-sonnet-4"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
benchmark-schema-mutation
AI Benchmark Index · npm · API · MCP
APIs change under a model's feet. A field gets renamed, an enum gains new values, one endpoint splits into two — and the model has to decide between the schema in front of it and the one it memorized in training. benchmark-schema-mutation measures that choice: 60 tasks, each one a freshly migrated tool schema plus a user request, graded by exact match on the emitted JSON tool call.
npx benchmark-schema-mutation run --model offline --provider mock# Schema Mutation
- Model: `mock:1`
- Score: 50.0%
- 95% CI: 38.3%–61.7%
- Tasks: 60The mock provider answers half the tasks correctly by design, so 50% is the expected baseline — it proves the wiring, not a model. No real-model runs are published yet; see "Run it on a real model".
Install
Requires Node.js 20 or newer.
npm install benchmark-schema-mutationRelated MCP server: benchmark-checkout-consent
What a task looks like
Each prompt shows only the current schema — here issues.create migrated from v3.2.0, where title became subject:
{"name": "issues.create",
"parameters": {"required": ["repo", "subject", "kind", "visibility"],
"properties": {"repo": "...", "subject": "...", "body": "...",
"labels": "...", "kind": {"enum": ["bug","feature","chore"]},
"visibility": {"enum": ["public","maintainers"]}}}}The user request is ordinary: "In acme/widgets open a feature issue titled 'Dark mode' ...". The correct answer calls issues.create with subject. A model that answers with title used the memorized schema — that call is stored on the task as the stale reference, and the grader flags it.
Five mutation kinds appear 12 times each:
Kind | Example mutation | Stale answer gives |
|
| old field name |
| required | call without it |
|
| old enum value |
|
| old unsplit tool |
|
| dollar value |
How it is graded
Deterministic, no judge. The grader extracts the last {"name","arguments"} object from the answer (prose and code fences are tolerated), canonicalises it — object keys sorted recursively — and compares it to the canonical expected call:
1 — exact match on tool name and arguments.
0,
staleSchemaUsed— exact match against the pre-migration call.0 — otherwise, with the first differing path in the reason.
docs/grading.md lists the ways this can go wrong — the failure modes were written before the grader, and scripts/e2e.mjs proves them: 60 canonical answers score 1, while empty, junk, replayed and stale answers all score 0.
Run it on a real model
export OPENROUTER_API_KEY=...
npx benchmark-schema-mutation run --model anthropic/claude-sonnet-4 --provider openrouterAny OpenAI-compatible endpoint works too, via OPENAI_BASE_URL and OPENAI_API_KEY. Reports carry a mean, a bootstrap 95% CI, per-task rows, and token cost. Each row also carries grader details (mutationKind, staleSchemaUsed), and the report carries the headline numbers directly: perMutationKind (tasks and passes per mutation kind) and staleSchemaUsedRate — the share of rows that used the old schema. The markdown report ends with the same breakdown.
There is no public leaderboard yet — no model runs have been published for this benchmark.
Where the data comes from
Every task is synthetic, produced by the committed generator from 12 hand-authored base schemas resembling everyday SaaS tools. No third-party benchmark text is copied.
npm run generate:tasks # public split, seed 20261015
node scripts/gen-tasks.mjs --seed 7 --split hidden # held-out split, not committed (writes .hidden/)data/PROVENANCE.md records the licence (MIT), the hidden-split plan and the refresh cadence. Because the public split is committed, treat it as practice data; use a differently seeded hidden split for final comparisons.
Prior art
The Berkeley Function-Calling Leaderboard (BFCL) measures function calling broadly; this benchmark isolates one failure mode — schema drift — with a deterministic canonical-JSON grader instead of AST checks or a judge, and it records the exact stale call so "used the memorized schema" is a measurable rate, not an anecdote.
SDK
import { benchmark, run, score } from "benchmark-schema-mutation";run(adapter, options) produces a report; score(taskId, submission) grades one trace.
CLI
list, show <task>, run, score, card, provenance, index-entry, serve, mcp. Pass --json for machine-readable output. card writes a 1200×630 SVG share card.
Model Context Protocol
npx benchmark-schema-mutation mcpTools: list_tasks, get_task, score_answer, run_benchmark, get_provenance. Only run_benchmark needs a key.
HTTP API
Import handler from benchmark-schema-mutation/api (Node or Cloudflare Workers), or npx benchmark-schema-mutation serve. Routes: GET /health, GET /v1/tasks, GET /v1/tasks/:id, POST /v1/score, GET /v1/provenance, GET /v1/index-entry.
Alternate task files
Every surface accepts a JSONL task file besides the shipped public split: --tasks <path> on any CLI command, { tasks: "<path>" } on the SDK run/score, ?tasks=<path> on API routes (or "tasks" in the POST /v1/score body), and a tasks argument on the MCP tools. Remote surfaces resolve bare names inside the package data/ directory and anything else only when listed in BENCHMARK_SCHEMA_MUTATION_TASKS_ALLOW (colon-separated), so a held-out split stays opt-in.
Limits and known weaknesses
The mutation catalogue is authored, so the 60 tasks cover five kinds well but not every real-world migration (deprecation warnings, paginated renames, OAuth scope shifts).
staleSchemaUsedfires only on an exact match with the recorded stale call; a half-adapted memorized answer is a lower-bound undercount.Prompts name a
schema_versionbut do not show the old schema — a model that hallucinates no schema knowledge and one that perfectly memorizes the old version both land on the same stale call; the grader cannot distinguish intent.Array order matters in canonical comparison; schemas here never use unordered-set semantics.
Status
Version 0.1.0 is alpha. Task shape and grading may change before 1.0. Report defects through the issue tracker.
License
MIT © Pooria Arab
Cite
Please cite this package with its Zenodo DOI. The DOI below names all versions. GitHub also shows a "Cite this repository" box from CITATION.cff.
@software{arab2026benchmarkschemamutation,
author = {Arab, Pooria},
title = {benchmark-schema-mutation},
year = {2026},
version = {0.1.0},
doi = {10.5281/zenodo.23422412},
url = {https://aibenchmarkindex.com/benchmarks/benchmark-schema-mutation}
}This server cannot be deployed
Maintenance
Related MCP Connectors
A read-only verified record of agent-operable GTM tools: search, fetch, compare, track changes.
Public web tools for agents: product extraction, claim checks, webpage QA and ranked audits.
Grade MCP tool definitions for agent-readiness: score, A-F grade, fixes, est. token cost.
Public benchmark where agents submit Q&A answers and get scored on a leaderboard.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables agents to turn a real model failure into a deterministic benchmark task by forging it with exact assertions, grading the task itself across six weighted factors, and inspecting a tamper-evident SHA-384 audit trail. Exposes eleven typed JSON-RPC 2.0 tools that call the same idempotent service layer as the UI, so mutations and decisions stay sealed and reproducible.MIT
- AlicenseNot gradedqualityAmaintenanceEnables users to list and retrieve evaluation tasks, score recorded submissions, run benchmark evaluations via OpenRouter, and access provenance information through MCP tools.MIT
- AlicenseNot gradedqualityAmaintenanceExposes MCP tools to list and inspect the 48 harm-ladder tasks, deterministically score a submitted decision trace, run a full evaluation against a mock or real model provider, and retrieve data provenance. This lets developers measure a model's pushback and refusal calibration as plan harm rises, directly from any MCP client.MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to browse and retrieve benchmark reasoning tasks, deterministically grade submitted answers, run the evaluation suite against a model provider, and inspect data provenance and the ranking-stability index entry. It also supports scoring stability analysis across repeated runs and prompt variants via its tools.MIT