View .md

Tools

Every tool the OptBench MCP server exposes, with the first sentence of its description and its access:

  • read: only reads
  • write: creates or changes something
  • destructive: deletes
  • spends: runs paid model calls once you pass confirm_cost_usd from an estimate the user agreed to (without it, the tool only estimates)

Your client's tools/list is the source of truth; each tool's full description says how to call it. Start with biy_scan_repo.

49 tools, generated from the server by scripts/gen_mcp_docs.py. Don't edit by hand.

Start here

ToolAccessWhat it does
biy_scan_reporeadStart here when the user asks to scan a repository with OptBench (find its LLM calls and benchmark them), or to refresh use cases whose code changed (drift changed / missing), or to use their real traces

Workspace and settings

ToolAccessWhat it does
biy_project_getreadA project's settings (the repo a scan came from): the candidate models, trade-off profile and repeats its use cases run with, each the project's own or inherited from the workspace
biy_project_updatewriteSet a project's own candidate models (candidate_pool.default_candidates), trade-off profile or repeats; a field sent as null inherits the workspace's again
biy_workspace_getreadThe company defaults that use cases and runs inherit: which models are benchmarked (the default candidates, compared with today's model of each use case), the jury, repeats, trade-off profile and the per-run cost cap
biy_workspace_updatewriteChange company defaults that every use case and run inherits (any subset): default_profile, default_judge, default_references, candidate_pool, default_repeats, max_run_cost_usd
biy_workspaces_listreadThe workspaces you belong to, your role in each, and which one your calls use now
biy_workspaces_switchwriteUse another of your workspaces from now on: your agent's default until you switch again (the dashboard has its own switcher)

Models and rules

ToolAccessWhat it does
biy_cost_rankingreadFree, no model calls: the workspace's use cases by estimated monthly expense today, highest first, from each use case's usage_estimate (or real volume) × today's model price
biy_model_rules_getreadWhich hosts may see this workspace's prompts: zero data retention, no training, allowed regions (e.g. EU only), allowed / blocked providers, OptBench-hosted models on or off; plus the scan's open proposals
biy_models_listreadBenchmarkable models with VERIFIED capabilities (text, vision, tools, json_schema) and prices: open-weight, and (shortlist=false) the closed models OptBench knows, role "closed"
biy_propose_model_ruleswritePropose model rules from what the repo shows (scan_repo part "model_rules"): which providers and base URLs it calls (Azure OpenAI, Bedrock, Vertex, a self-hosted vLLM), region settings, data retention / no-training / ZDR settings or comments, timeouts or latency budgets

Your data

ToolAccessWhat it does
biy_data_findings_reportwriteReport what you found in a trace source BEFORE exporting anything, so the person sees it (Data → Rules) and OptBench checks each item against their data rules
biy_data_rules_getreadWhat the person allows you to use from their data: which sources (PostHog, Langfuse, OpenTelemetry, files), how far back, how many cases, which words keep a record out, whether recorded answers and tool results are kept, whether Jev may read sample requests
biy_data_sources_listreadWhere this workspace's imported real data comes from (PostHog, Langfuse, OTel, files): mode, host, project, imported case count, last import
biy_data_sources_pullwriteFetch the newest traces of a direct PostHog / Langfuse source with the key the dashboard stores, as cases of a use case: the same as the dashboard's Pull
biy_data_sources_registerwriteRecord where you export the user's traces from, BEFORE importing them, so the dashboard (Data → Sources) shows the source and can delete its cases together

Real traffic and the lifecycle

ToolAccessWhat it does
biy_coverage_getreadDo the use case's own cases (synthetic, from the repo, written by hand, uploaded) cover what production asks (lifecycle entry C)? Production = its imported trace cases (source "imported", default) or the staged OpenTelemetry traces routed to it (source "otel")
biy_lifecycle_getreadWhere a use case stands in the lifecycle, and what to do next with which tools
biy_traces_importreadPreview staged OpenTelemetry traces as cases of a use case: mapped and redacted in memory, nothing stored
biy_traces_listreadStart here for real traffic (lifecycle entry B or C): what traces wait to become cases, grouped by agent or span name, with the use case each group most likely belongs to and why (at least half of the tools called must be the use case's; without tools, the agent's name)
biy_traces_routewriteThe person says which use case an unclear or unrouted group of staged traces belongs to (from biy_traces_list: its name, service and prompt fingerprint)

Metrics

ToolAccessWhat it does
biy_metrics_listreadMetrics from the metric bank
biy_metrics_selectreadPick metrics + gates for ONE use case from what you saw in the code

Use cases

ToolAccessWhat it does
biy_drift_checkwriteAfter a code change: are the repo's use cases still what the code sends, and does the change add LLM calls no use case covers? files: the changed files as {path: full text} (null for a deleted file), e.g. from git diff --name-only
biy_use_cases_checkreadCheck use cases before estimating (scan_repo part "use_case" after filling each one, step 6 for the repo)
biy_use_cases_createwriteCreate use cases
biy_use_cases_deletedestructiveDelete use cases with their cases and runs (e.g. duplicates from an interrupted scan)
biy_use_cases_fillwriteFill in ONE use case in a single call (scan_repo part "use_case"), instead of metrics_select + update + cases_add
biy_use_cases_getreadOne use case in full (io_spec with prompts and schema, metrics, gates, profile, judge), and its background case generation when one runs or failed
biy_use_cases_listreadUse cases in the workspace, with case counts and the latest run's recommendation
biy_use_cases_reselect_metricswriteRun the metric selector again for an existing use case and show the diff (added / removed metrics and gates)
biy_use_cases_updatewriteChange part of a use case, e.g. the trade-off: {"profile": {"weights": {"quality": 50, "speed": 10, "cost": 40}}}

Cases and gold

ToolAccessWhat it does
biy_cases_addwriteAdd test cases
biy_cases_deletedestructiveDelete cases from a use case (ids from biy_cases_list)
biy_cases_generatewriteGenerate synthetic test cases, seeded from the use case's existing cases, in the background: it returns at once and OptBench writes the cases in the background
biy_cases_goldwriteWrite gold onto cases: what a correct answer must do, so a benchmark scores right answers, not agreement with today's model
biy_cases_gold_generatereadspendsOnly when the user asks OptBench to write the gold instead of you (biy_cases_gold is free: prefer it)
biy_cases_importwriteTurn an export of the user's OWN data into test cases, redacted: realistic inputs, and for agent use cases replay tool mocks from the recorded tool calls
biy_cases_listreadCases of a use case, compact: id, a short preview of input and reference, source, tags
biy_cases_updatewriteEdit one case: any of input, reference (null clears it), tags
biy_upload_bundle_urlwriteOne upload for many use cases at once: prompts, schemas, tool lists, stores and cases of a whole batch in one file and one curl, instead of a biy_upload_url and a curl per field
biy_upload_urlwriteOne-time URLs to upload large fields straight from files, so their bytes never go through your tool arguments

Runs and results

ToolAccessWhat it does
biy_runs_estimatereadFree: computes the cost and call count of a run, calls no model and spends nothing
biy_runs_estimate_manyreadFree: the estimate for many use cases in one call (scan_repo part "estimate"): each with the workspace's default candidates and references, one compact line per use case and the total
biy_runs_extendwritespendsGrow a finished run instead of running it again: add models, open or closed (only they run, on the run's own cases and repeats, and only their answers are judged), retry the calls that failed (retry_errors: an expired key, a timeout; only those calls run again and their answers are judged by the run's jury), or set a new jury (every stored answer is judged again, no model calls)
biy_runs_rescorewriteScore a finished run's stored outputs again with today's scorers and the use case's current metrics (e.g. after biy_use_cases_reselect_metrics)
biy_runs_startwritespendsStart a benchmark run
biy_runs_statusreadProgress, leaderboard so far, and the recommendation once done

Other

ToolAccessWhat it does
biy_traffic_getreadReal traffic as the production loop counts it from the traces that reach OptBench (every 10 minutes): with use_case_id, that use case per day and per model (traces, model and tool calls, tokens, the cost the traces recorded, distinct requests among a sample); without, each use case's traces and spend and the traffic no use case claims