
Evals Mcp Server
io.github.cyanheadsPublished by GitHub account cyanheadsv0.1.6Updated Oct 28, 2026
Author verifiable eval records through a draft→review→revise→submit loop with enforced graders.
Overview
Local MCP server for authoring verifiable eval records through a draft, review, revise and submit loop with server-enforced graders, then exporting them to…
- What you can do
- Inspect task-type schemas and grader options before authoring
- Create, read, revise and discard draft eval records with their own executable graders
- Run a grader against candidate answers to get PASS/REJECT results
- Submit drafts through a gate requiring the gold to pass, a negative case to fail and independent verification to agree
- Browse and filter records by status, domain, task type or tag
- Export submitted records to JSONL, CSV, Inspect AI or lm-evaluation-harness under an exports folder
- When to use it
- Useful when building or curating evaluation datasets and you want each record checked by a grader before it is accepted, rather than trusting an assistant's assertion. Also fits teams that need submitted records compiled into JSONL, CSV, Inspect AI or lm-eval artifacts.
- Requirements
- Runs locally via npx or bunx (Bun 1.4.0+ or Node.js 24+), or as a Docker image. Needs a writable directory set in EVALS_DATA_DIR; no external API key is required. Optional settings cover transport (stdio or HTTP), HTTP host/port/path, auth mode, log level, default license, capture directory and submit confirmation.
Installation
In SourceWeft
- Open Evals Mcp Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@cyanheads/evals-mcp-server
Author verifiable eval records through a draft → review → revise → submit loop with server-enforced graders; compile to JSONL/CSV/Inspect/lm-eval via MCP. STDIO or Streamable HTTP.
Overview
Build verifiable eval records with server-enforced graders. Draft a record with its own executable grader, revise it field by field, and submit through a gate that requires the gold answer to pass, a negative case to fail, and an independent check to agree. Export to JSONL, CSV, Inspect AI, or lm-evaluation-harness.
Tools
Resources
All record data is also reachable through the tool surface — evals_get_record for a single record, evals_list_records to browse. The resource is a convenience mirror for clients that support resources, not the access path.
Capability reference
evals_describe_schema tool
- Accepts
task_type:numeric,exact_answer,set_answer,mcq,regex_answer,json_answer, orfree_response. - Returns the gold shape, grader kinds, required/optional fields, and authoring notes from static schemas;
mcqrequireschoices, andfree_responserequiresllm_rubric.
evals_create_draft tool
- Accepts a record with its grader and discrimination cases, plus optional
verificationandcaptures(EvalsIDs);mcqrequireschoices, andfree_responserequiresllm_rubric. - Saves the record as a
draftonce its grader runs, and returns the normalized record, a review protocol, a verification-subagent prompt, and what submit still needs. A draft whose gold fails its grader is still saved. - Typed errors:
grader_unexecutable,task_type_constraint,mcq_choice_mismatch.
evals_get_record tool
- Reads a draft or submitted record by
id, which stays stable across submit. - Returns the full grader, discrimination cases, and verification evidence;
not_foundpoints toevals_list_records.
evals_revise_draft tool
- Applies
set,append, andunsetby dotted path to a draft;task_typeand server-owned fields cannot be changed, and arrays are replaced whole or appended, not edited by index. - Re-validates the record and grader before writing, then returns the record plus
changedentries (op,path,before,after). An unknown path rejects the whole patch. - Typed errors:
not_found,record_frozenfor a submitted id,invalid_patch_path,grader_unexecutable,task_type_constraint,mcq_choice_mismatch.
evals_discard_draft tool
- Deletes a draft by
draft_idand returnsdiscarded: true. - A submitted record reports
record_frozen; a missing or already discarded id reportsnot_found.
evals_run_check tool
- Runs a grader against one or more
candidateswithout a saved record; supplygoldforexact_match, while target-embedding kinds such asnumericandmcqignore it. - Returns PASS/REJECT,
detail, and theresolvedreference per candidate.llm_rubriccan't be run here. - Numeric grading accepts only finite real values; unit-bearing, complex, nonfinite, and non-scalar candidates are rejected.
unitsis documentation only. - Typed errors:
grader_unexecutable,mcq_choice_mismatch.
evals_submit_draft tool
- Finalizes by
draft_id: gold must PASS, ≥1 negative must be REJECTED, and decorrelated verification must agree. Also checkscapturesagainstEVALS_CAPTURE_DIR, rejects duplicatecontent_hash, and can ask for confirmation viaconfirmorEVALS_REQUIRE_CONFIRMATION. - On success, freezes the record with
submitted_atandchecksumand returnsstatus: submitted; a refusal leaves the draft intact.free_responserecords rely on verification alone and carryserver_verified: false. - Typed errors:
not_found,record_frozen,verification_incomplete,grader_failed_on_gold,verification_disagrees_with_gold,missing_negative_case,negative_case_passed,duplicate,decorrelation_violation,capture_unresolved,submit_declined.
evals_list_records tool
- Filters by
status(draft/submitted),domain,task_type, ortag;limitis a positive integer and defaults to 50. - Returns summaries (id, status, task_type, domain, tags, timestamps), newest-first, with
shown,cap,totalCount, andtruncated.
evals_export_records tool
- Exports
submittedrecords, optionally filtered bydomain,task_type, ortag, asjsonl(lossless),csv(lossy summary),inspect(Inspect AI), orlm-eval(lm-evaluation-harness). - Writes under
exports/and returns the path, record count, byte size, and preview.
eval://record/{id} resource
- Reads
idfromevals_list_recordsor a draft/submit response. - Returns the
evals_get_recordpayload asapplication/json, ornot_foundwhen no record matches.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Eval authoring:
- A
draft → review → surgical-revise → submitloop, with the server both storing records and running each record's own grader to reject what doesn't hold up - Seven task types:
numeric,exact_answer,set_answer,mcq,regex_answer,json_answer,free_response - A grader serialized with each record; deterministic kinds (
numericvia math.js,exact_match,set_match,regex,mcq,json_match) run server-side, whilellm_rubricrelies on recorded independent verification - A submit gate: the gold must pass its own grader, ≥1 negative must be rejected, and a recorded decorrelated verification must agree with the gold
- Plain JSON files under
EVALS_DATA_DIR, with drafts, submitted records, and exports kept separate
Agent-friendly output:
evals_create_draftandevals_revise_draftreturn the parsed record, a per-field review protocol, and a ready-to-paste verification-subagent prompt- Draft and revise responses report pass/reject results for each positive and negative case
evals_list_recordsreportsshown/cap/ total count when the limit is hit- The submit gate fails with a typed
reasonplus a recovery hint
Getting started
Add the following to your MCP client configuration file. Set EVALS_DATA_DIR to a writable folder — the server manages drafts/, submitted/, and exports/ under it.
Or with npx (no Bun required):
Or with Docker:
For Streamable HTTP, set the transport and start the server:
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- A writable directory for
EVALS_DATA_DIR. No external API key is required.
Installation
- Clone the repository:
- Navigate into the directory:
- Install dependencies:
- Configure environment:
Configuration
All server configuration is validated at startup via Zod schemas in src/config/server-config.ts.
See .env.example for the full list of optional overrides.
Submit confirmation expires after 10 minutes and must be repeated if the draft changes. When running more than one instance, use shared storage (STORAGE_PROVIDER_TYPE=filesystem with a shared STORAGE_FILESYSTEM_PATH, supabase, or cloudflare-d1; not cloudflare-kv) and set the same MCP_REQUEST_STATE_KEY (at least 32 bytes) on each.
Running the server
Local development
-
Build and run:
-
Run checks and tests:
Docker
The Dockerfile defaults to HTTP transport, stateful session mode, and logs to /var/log/evals-mcp-server. Mount record storage at /usr/src/app/evals-data, the default directory owned by the runtime user. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Development guide
See CLAUDE.md/AGENTS.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging; records persist to disk via therecord-storeservice, notctx.state - Register new tools and resources in the
createApp()arrays insrc/index.ts - The server is the source of truth — validate inputs, run the grader as a hard gate, and never admit a record on assertion alone
Contributing
Issues are welcome. Run checks and tests before submitting:
License
Apache-2.0 — see LICENSE for details.
Source: README.md at commit 3695f99
Tools
0Version history
4- v0.1.6LatestOct 13, 2026
- v0.1.5Oct 7, 2026
- v0.1.4Sep 22, 2026
- v0.1.3Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
