Skip to main content
Glama
okareo-ai

Okareo MCP Server

Official
by okareo-ai

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoPort for SSE transport8000
TRANSPORTNoTransport: stdio (local) or sse (Docker)stdio
OKAREO_API_KEYYesYour Okareo API key (required for local install and bearer fallback)
OKAREO_BASE_URLNoOverride for on-prem Okareo backendhttps://api.okareo.com

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_checksA

List available quality checks, grouped by category.

    Returns checks (both built-in and custom) available in your Okareo
    account, organized into `checks_by_category` using the platform's
    `__category:<Category>` tags; checks with no category appear under
    `uncategorized`. Select checks from the category matching your task
    AND modality: voice-specific categories (e.g. voice/audio quality)
    apply to voice simulations, while checks outside voice-specific
    categories are generally useful for both chat and voice. A check
    carrying multiple categories appears under each of them.

    Each check has a name, description, and output_data_type.
    output_data_type uses the server vocabulary: "bool" is a pass/fail
    check and "int" is a scored check — these correspond to output_type
    "pass_fail" and "score" in create_or_update_check and generate_check.
    Use these check names with run_test to evaluate model quality.

    Args:
        limit: Maximum number of checks to return (default 20), applied to
            the total before grouping. Use 0 for no limit.
        all_versions: When false (default), returns only the latest version of
            each check. When true, returns the full version history of every
            check, each entry annotated with its version number.
    
run_testA

Submit a quality test that evaluates a model against a scenario using checks.

    Returns promptly so the call never times out on long runs. Short runs return
    ``status: "finished"`` with results ready; longer runs return
    ``status: "running"`` with the ``test_run_id`` and ``app_link`` — the run
    continues to completion on its own. In both cases, poll get_test_run_results
    with the returned test_run_id to retrieve scores.

    Args:
        scenario_name: Name of the scenario to evaluate against.
        model_name: Name of the registered model to evaluate.
        checks: List of check names to apply (e.g., ["coherence", "relevance"]).
            Use list_checks to discover available checks and pick from the
            category matching the task and modality — do not use
            voice-specific checks for text evaluations (or vice versa);
            checks outside voice-specific categories suit both.
        name: Optional human-readable name for this test run.
        type: Type of evaluation. Defaults to NL_GENERATION. Valid values:
            NL_GENERATION, INFORMATION_RETRIEVAL, MULTI_CLASS_CLASSIFICATION,
            INVARIANT, MULTI_TURN, AGENT_EVAL.
    
list_test_runsA

List past test runs in the project.

    Returns test run names, IDs, timestamps, status, and summary scores,
    sorted by most recent first. Defaults to the 10 most recent runs.
    Optionally filter by model name, scenario name, or type.

    For simulation runs (type MULTI_TURN), use get_test_run_results with the
    returned test_run_id to retrieve full conversation transcripts and per-turn
    check scores.

    Args:
        model_name: Optional filter — only show test runs using this model.
        scenario_name: Optional filter — only show test runs using this scenario.
        limit: Maximum number of runs to return, sorted by most recent first.
            Defaults to 10. Set to 0 to return all runs.
        simulation_only: When True, return only MULTI_TURN simulation runs.
            Useful for browsing past simulation results without NL_GENERATION or
            other test run types appearing in the list.
    
get_test_run_resultsA

Load the results of a specific test run.

    Look up by test run ID (UUID) or by name (returns the most recent run
    matching that name). Returns aggregate metrics and per-row check scores.

    By default, conversation transcripts (model_input/model_result) are
    excluded to keep responses concise. Set include_transcripts=True to
    include full transcripts. Use get_conversation_transcript to inspect
    a single conversation's transcript without loading all of them.

    Supports pagination via limit and offset for large result sets.

    Args:
        test_run_id: The UUID of the test run. Takes precedence over name.
        name: The name of the test run. Returns the most recent match.
        include_transcripts: Include full model_input and model_result in
            each data point. Defaults to False (scores only). Set True for
            full conversation transcripts.
        limit: Maximum number of data points to return. 0 (default) returns
            all data points. Use with offset for pagination.
        offset: Number of data points to skip. Defaults to 0.
    
get_conversation_transcriptA

Retrieve the full conversation transcript for a single data point.

    Use this after get_test_run_results to drill into a specific
    conversation. Provide either scenario_index (1-based, from the
    scores summary) or test_id (UUID) to identify the conversation.

    Returns the complete message transcript (model_input), final
    output (model_result), per-turn check scores (metric_value),
    and the scenario seed data.

    Args:
        test_run_id: The UUID of the test run.
        scenario_index: 1-based index of the conversation within
            the test run. Visible in get_test_run_results output.
        test_id: UUID of the specific data point. Alternative to
            scenario_index.
    
reevaluate_test_runA

Re-score a completed test run against a set of checks.

    Re-runs checks against an already-finished test run without re-executing
    the original model or simulation, and without changing the original
    run's results. Useful after a check definition changed, or to score an
    existing run against additional checks.

    Args:
        test_run_id: UUID or name of a completed test run.
        checks: Optional list of check names (or IDs) to score against.
            When omitted, the run's existing checks are re-run.
    
save_scenarioA

Save a named scenario for use in quality tests.

        Provide EXACTLY ONE dataset source: `content`, `file_path`, or
        `rows`.

        Prefer `file_path` for local .jsonl files — the server reads the
        file directly, so no rows pass through the assistant's context.
        When passing rows through the assistant instead, keep the dataset
        UNDER 2,000 rows (`content` with the file's text, or `rows` for
        tiny datasets). For 2,000 rows or more, always use `file_path` or
        upload directly to Okareo via the web app, SDK, or CLI, to avoid
        unnecessary token cost.

        If a scenario with the same name already exists, the existing
        scenario is returned (idempotent). Scenarios are immutable after
        creation — use create_scenario_version to create updated versions.

        Args:
            name: A unique name for the scenario.
            content: Raw JSONL text (one JSON object with 'input' and
                'result' per line). Only for datasets under 2,000 rows.
            file_path: Path to a local .jsonl file. Preferred — works for
                any size.
            rows: List of data rows, each with 'input' (any type) and
                'result' (any type). Use for small scenarios (< 20 rows).
            tags: Optional list of tags for categorizing the scenario.
        
list_scenariosA

List scenarios in the project, most recent first.

    Returns scenario names, IDs, tags, row counts, and creation dates.
    Use this to discover existing scenarios before running a test.

    Args:
        limit: Maximum number of scenarios to return (default 20).
            Set to 0 to return all scenarios.
    
get_scenarioA

Read a scenario's metadata and all data rows.

    Look up by name or scenario ID. Returns scenario details and all
    input/result data rows.

    Args:
        name: Name of the scenario to retrieve.
        scenario_id: ID of the scenario to retrieve. Takes precedence over name.
    
create_scenario_versionA

Create a new version of an existing scenario with updated data.

    Automatically determines the next version number (e.g., 'my-test-v2',
    'my-test-v3'). The original scenario is treated as version 1.

    Args:
        base_name: Name of the original scenario to create a version of.
        rows: List of data rows for the new version, each with 'input' and 'result'.
    
preview_delete_scenarioA

Preview what will be deleted before removing a scenario.

    Shows the scenario details and count of related test runs that will
    also be deleted. Use delete_scenario to confirm deletion after reviewing.

    Args:
        name: Name of the scenario to preview deletion for.
        scenario_id: ID of the scenario. Takes precedence over name.
    
delete_scenarioA

Permanently delete a scenario and all related test data.

    Both scenario_id and name are required. Use preview_delete_scenario first
    to see what will be deleted before confirming.

    Args:
        scenario_id: The ID of the scenario to delete (from preview_delete_scenario).
        name: The name of the scenario to delete.
    
list_available_llmsA

Browse available LLMs from the Okareo registry.

    Returns all LLMs that can be used when registering a generation model
    for testing. Each entry has a name, display name, and provider. Use a
    model_name from this list when calling register_generation_model.
    
register_generation_modelA

Register a generation model for testing by selecting an LLM from the registry.

    Creates a generation model (Model Under Test) that points to a specific LLM
    (e.g., 'azure/gpt-4o-mini'). Use list_available_llms to see available
    LLMs. The registered generation model can then be used with run_test.

    Args:
        name: A human-readable name for this generation model (e.g., 'my-chatbot').
        model_name: The LLM from the registry (from list_available_llms).
    
list_generation_modelsA

Browse all registered generation models in the project.

Returns generation model names, IDs, target LLM configurations, and creation timestamps. Use this to see what generation models are available for testing.

get_generation_modelA

Read detailed information about a registered generation model.

    Returns the generation model's target LLM configuration, tags, creation
    time, and any warnings (e.g., if the target LLM has been deprecated).

    Args:
        name: Name of the registered generation model.
    
update_generation_modelA

Change the LLM that a registered generation model points to.

    Updates the generation model to use a different LLM from the registry.
    Use list_available_llms to see available LLMs.

    Args:
        name: Name of the registered generation model to update.
        model_name: The new LLM from the registry.
    
delete_generation_modelA

Remove a registered generation model and all its related test data.

    Permanently deletes the generation model and cascades to associated
    test runs and test data points. This cannot be undone.

    Args:
        name: Name of the registered generation model to delete.
    
create_or_update_targetA

Create or update a Target — the AI system you want to evaluate in a simulation.

    Calling create_or_update_target with the same name as an existing Target will
    **fully replace** its configuration — caller must re-specify all desired fields.
    Supported types: 'generation' (foundation model), 'custom_endpoint' (your own
    REST API), and 'voice' (voice-based targets reached by phone via Twilio or
    over SIP).

    **Cloning workflow**: this tool accepts the same key structure that `get_target`
    returns, so you can read an existing Target, change `name`, swap in real values
    for any field whose value is `"***REDACTED***"`, and pass the result here as
    kwargs. Calls that still contain the redaction sentinel are rejected with an
    error naming each offending path; the sentinel is never forwarded to the backend.

    Args:
        name: Unique name for this target.
        type: Target type — 'generation', 'custom_endpoint', or 'voice'.

        model_id: (generation targets) Foundation model ID, e.g. 'gpt-4o-mini'.
        temperature: (generation targets) Response randomness, default 0.
        system_prompt_template: (generation targets) System instructions; mustache
            syntax supported, e.g. '{scenario_input}'.
        user_prompt_template: (generation targets) User prompt template.
        dialog_template: (generation targets) Dialog formatting template.
        tools: (generation targets) Tool definitions for function calling.

        next_message_params: (custom_endpoint) Nested HTTP config for each
            conversation turn. Required keys: 'url', 'method'. Optional:
            'headers', 'body', 'status_code', 'response_message_path',
            'response_session_id_path', 'response_tool_calls_path'.
            All response path values MUST use dot-path notation starting with
            'response.' — e.g., 'response.message', 'response.choices[0].message.content',
            'response.choices[0].tool_calls'. Never use bare property names.
            For SSE/streaming endpoints, include a 'streaming' object with:
              - 'stop': array of stop conditions (OR semantics — any match ends
                the stream). Each has 'value' (required) and optional 'path'
                (dot-path into JSON chunk). Without 'path', matches raw SSE data.
              - 'select': array of select conditions (AND semantics — all must
                match for a chunk's content to be extracted). Each requires
                'path' and 'value'.
            When streaming, set response_message_path to the chunk field
            (e.g., 'response.choices[0].delta.content').
        start_session_params: (custom_endpoint, optional) Nested HTTP config to
            initialise a session. Required key: 'url'. Optional: 'method',
            'headers', 'body', 'status_code', 'response_session_id_path'
            (dot-path starting with 'response.', e.g. 'response.id'),
            'response_message_path'. Supports 'streaming' object (same
            structure as next_message_params.streaming).
        end_session_params: (custom_endpoint, optional) Nested HTTP config to
            close a session after the last turn.
        auth_params: (custom_endpoint, optional) Token-based authorization config.
            Required keys when provided: 'url', 'method', 'response_access_token_path'
            (dot-path starting with 'response.', e.g. 'response.access_token').
            Optional: 'headers', 'body', 'status_code'.
        sensitive_fields: (custom_endpoint, optional) List of dot-path strings for
            secret fields within auth_params (e.g., 'auth_params.body.client_id').
            The MCP auto-generates entries for top-level auth_params keys; use this
            for deeper paths. To remove auth from an existing target, call
            create_or_update_target again without auth_params.
        max_parallel_requests: (custom_endpoint, twilio) Concurrency limit. This is
            the same setting the Okareo web UI labels "max concurrency".

        edge_type: (voice targets) How Okareo reaches the voice agent —
            'twilio' (dial a phone number) or 'sip' (call a SIP URI).

        to_phone_number: (voice twilio) Destination phone number (required).
        account_sid: (voice twilio, custom only) Twilio account SID. If provided,
            auth_token and from_phone_number are also required (all-or-nothing).
            Omit for generic Twilio targets using Okareo's managed integration.
        auth_token: (voice twilio, custom only) Twilio auth token. Required with
            account_sid and from_phone_number.
        from_phone_number: (voice twilio, custom only) Caller phone number. Required
            with account_sid and auth_token.

        sip_uri: (voice sip) Destination SIP URI (required), e.g.
            "sip:agent@your-domain.example.com". Use this to test any voice
            agent reachable over SIP — for example one fronted by Daily,
            Vapi, LiveKit, or a SIP trunk.
        sip_username: (voice sip, optional) SIP authentication username.
        sip_password: (voice sip, optional) SIP authentication password
            (stored as a sensitive field).
    
get_targetA

Check the current configuration of a test target.

    Retrieves a Target by name. Works for all target types (Generation,
    Custom Endpoint, and Voice).

    For **custom_endpoint** Targets, the response is a flat envelope whose
    keys mirror the kwargs accepted by `create_or_update_target`, so a
    copilot can read the result, swap in a new name + secrets, and feed it
    back to create to clone the Target. Fields the backend keeps secret
    (those listed in `sensitive_fields`) appear with the literal value
    `"***REDACTED***"` — these MUST be replaced with real values before
    calling `create_or_update_target`, which rejects payloads still
    containing the sentinel.

    The `max_parallel_requests` field on custom_endpoint Targets is the
    same setting the Okareo web UI labels "max concurrency".

    For generation and voice Targets, the response shape is unchanged
    (kept stable for existing callers).

    Args:
        name: Name of the target to retrieve.
    
list_targetsA

Browse all simulation targets available in this project.

    Returns all simulation targets (voice and custom_endpoint types)
    created via create_or_update_target. Does not include generation models
    registered via register_generation_model — use list_generation_models
    for those.
    
delete_targetA

Remove a simulation target and all its related test data.

    Permanently deletes the target and cascades to associated
    test runs and test data points. This cannot be undone.

    Args:
        name: Name of the target to delete.
    
create_or_update_driverA

Define a simulated user persona that will interact with your target.

    Creates or updates a Driver by name (upsert). Author ONLY the core
    persona sections in prompt_template, in this order:

    - `## Persona` — who the simulated user is (static character).
    - `## Scenario Details` — contains the scenario reference
      (`{scenario_input}` or a specific path like
      `{scenario_input.objectives}`), placed immediately before
      Objectives. This is how each scenario row's data reaches the
      conversation.
    - `## Objectives` — WHAT the driver is trying to accomplish, written
      from the driver's goal (not from scenario variables).
    - `## Soft Tactics` — HOW the driver probes, escalates, and stops.

    Do NOT author Hard Rules, a Turn-End Checklist, or Conversation
    Behavior sections: the MCP automatically appends the platform's
    canonical versions of those blocks (including the language rule
    matching `language`) — the same blocks the Okareo UI appends to
    generated drivers. Any caller-authored variant of these sections is
    replaced by the canonical text, and repeated updates never duplicate
    the blocks.

    For voice agents, configure how the simulated user speaks with `voice`,
    `voice_profile`, `voice_instructions`, and `language`. Call
    list_driver_voices first to discover valid voice and profile values.

    Args:
        name: Unique name for this driver.
        prompt_template: The core persona prompt (Persona, Scenario
            Details, Objectives, Soft Tactics — see above). Hard Rules and
            Conversation Behavior are appended automatically.
        model_id: Foundation model to power the driver (defaults to project default).
        temperature: Response randomness, default 0.6.
        voice_instructions: Free-text speaking instructions for voice simulations
            (tone, pace, accent). Not validated against the voice catalog.
        voice_profile: Voice profile name for voice simulations. Validated
            against the catalog from list_driver_voices.
        voice: Voice identifier for voice simulations. Validated against the
            catalog from list_driver_voices.
        language: Language the driver responds in, as the bare ISO code
            the voice catalog serves (e.g. "en", "es", "ja"); regional
            variants like "fr-CA" are accepted when their base code
            matches the voice's language. When a `voice` is set and
            language is omitted, it is derived from that voice's catalog
            language (disclosed as `language_derived_from_voice` in the
            response); a value conflicting with the voice's language is
            rejected. Also drives the appended Hard Rules language rule.
    
get_driverA

Retrieve a driver persona you've already configured.

    Retrieves a Driver by name, returning its full configuration including the
    persona prompt.

    Args:
        name: Name of the driver to retrieve.
    
list_driversA

See what driver personas are available in this project.

Returns all Drivers with their names, IDs, model, and temperature.

list_driver_voicesA

Discover the voices, voice profiles, and languages available for configuring voice-capable drivers.

    Call this before create_or_update_driver when building a voice agent
    simulation, so you can pass valid `voice`, `voice_profile`, and
    `language` values.

    Each entry in `voices` carries selection metadata — use it to pick
    the voice:
    - `language`: bare ISO code (e.g. "en", "es", "ja"). The driver's
      `language` is derived from the selected voice's language when
      omitted, and must not conflict with it.
    - `accent`: free-text accent label present on many voices (e.g.
      "British", "Mexican", "Parisian", "Southern US"). To satisfy an
      accent request, select a voice whose `accent` matches — writing
      accent instructions into `voice_instructions` does NOT change the
      TTS voice.
    - `gender`: e.g. "feminine" / "masculine".

    `voice_profiles` are emotion/delivery presets (happy, angry,
    sarcastic, ...) — they shape affect, not accent or language.
    `languages` lists the distinct voice languages available.
    
run_simulationA

Run a multi-turn conversation evaluation of your AI agent.

    Combines a Target (the system under test), a Driver (the simulated user),
    and a Scenario (the test cases) to generate realistic multi-turn conversations
    and evaluate them with quality checks.

    Returns promptly so the call never times out on long runs. Short runs that
    finish within the buffer window return ``status: "finished"`` with results
    ready; longer runs return ``status: "running"`` with the ``test_run_id``,
    ``app_link``, and an ``estimated_runtime`` — the run continues to completion
    on its own. In both cases, poll get_test_run_results with the returned
    test_run_id for scores, and get_conversation_transcript for transcripts.

    To rerun a previous simulation — keeping its configuration but changing one or
    more parameters — pass based_on_run_id with the original run's ID and supply
    only the values you want to override. If scenario_name or target_name are
    omitted and based_on_run_id is provided, they will be resolved from the
    original run.

    For custom_endpoint Targets: an exception raised during the run (for
    example the endpoint erroring mid-conversation) FAILS the run — it is
    reported as a failed simulation, not silently skipped.

    **Voice augmentations** — for voice Targets, the `augmentation` parameter
    applies realistic acoustic and conversational effects. Six top-level keys:
    `cap`, `directed_speech`, `secondary_speaker`, `backchannel`, `barge_in`,
    plus the composable `noise`. **Composition rule**: at most one non-noise
    strategy may be active, optionally combined with `noise`. Augmentations
    apply only to voice Targets — calls against generation or custom_endpoint
    Targets with an augmentation block are rejected. Field-level errors
    (out-of-range probability, missing required field, swapped offsets, unknown
    strategy) are returned by the MCP before any backend call.

    Strategy required / optional fields (numeric ranges in brackets):
      - cap: probability [0.0, 1.0] required. pause_ms [0, 10000] optional.
      - directed_speech: probability [0.0, 1.0] required. lpf_cutoff_hz (>0),
        gain_db [-40.0, 0.0], sample_rate (>0), prompt, reverb_preset optional.
      - secondary_speaker: probability [0.0, 1.0] AND secondary_voice (non-empty
        string) required. inter_speaker_pause_ms [0, 5000], lpf_cutoff_hz (>0),
        gain_db [-40.0, 0.0], sample_rate (>0), secondary_prompt,
        secondary_voice_instructions, secondary_reverb_preset optional.
      - backchannel: utterance (non-empty string) required. probability
        [0.0, 1.0], min_offset_ms (>=0), max_offset_ms (>= min_offset_ms),
        seed optional.
      - barge_in: prompt (non-empty string) required. probability [0.0, 1.0],
        min_offset_ms (>=0), max_offset_ms (>= min_offset_ms), seed optional.
      - noise: noise_profile (non-empty string) AND noise_snr_db (number)
        required. seed optional.

    For copy-paste examples and the full reference, call
    `get_templates(["voice_augmentations"])`.

    Args:
        name: Human-readable name for this simulation run.
        scenario_name: Name of the scenario to use. Required unless based_on_run_id
            is provided and the original run's scenario can be resolved.
        target_name: Name of the target to evaluate. Required unless based_on_run_id
            is provided and the original run's target can be resolved.
        driver_name: Name of the driver persona. If omitted, the project default
            driver is used.
        checks: List of check names to apply (from list_checks). Pick from
            the list_checks category matching the task and modality —
            voice-specific categories for voice simulations, categories
            outside them for either modality; never chat-only checks for
            audio (or vice versa). Every simulation runs with at least one
            check: when omitted or empty, the benign code-based "latency"
            performance check is applied automatically and the response
            discloses the substitution via `default_check_applied`.
            Supplied checks are used unchanged.
        repeats: Number of times to run each scenario row, default 1.
        max_turns: Maximum conversation turns per simulation, default 5.
        first_turn: Who speaks first — 'target' or 'driver', default 'target'.
        based_on_run_id: ID of a previous simulation run to reuse parameters from.
            Explicitly supplied values override the original run's parameters.
        augmentation: (voice Targets only) Voice augmentation block. See the
            "Voice augmentations" section above for keys and ranges. An empty
            dict is treated as no augmentation.
        turn_transition_time: Milliseconds of pause between turns. Forwarded to
            the backend as-is; SDK default (1000) is used when omitted.
        silence_timeout_ms: The target reply timeout — how patient Okareo
            is before indicating that the target can't respond. Do NOT set
            or change this value unless the user specifically directs it;
            it should be 10000 ms in nearly all cases. It exists to
            accommodate untuned targets with very long tool calls, during
            which the Driver waits patiently. It does NOT change how fast
            Okareo responds, and lowering it does not speed anything up —
            a slow simulation is not a reason to change it. Forwarded to
            the backend; backend default is used when omitted.
        checks_at_every_turn: When True, checks are evaluated per turn (not
            only at end of run).
        stop_check: Early-stop config: `{"check_name": str, "stop_on": <value>}`.
            The run halts as soon as the named check returns `stop_on`.
    
list_simulationsA

List past simulation runs in the project.

    Returns simulation run names, IDs, timestamps, and status, sorted by
    most recent first. Defaults to the 10 most recent runs in summary mode.

    Use detail_level="detailed" to include model_metrics and additional
    fields (limit is capped to 5 in detailed mode to prevent overflow).

    Use get_test_run_results with the returned test_run_id to retrieve
    per-row scores (transcripts excluded by default). Then use
    get_conversation_transcript with a scenario_index to inspect
    individual conversation transcripts.

    Args:
        target_name: Optional filter — only show simulation runs using
            this target.
        scenario_name: Optional filter — only show simulation runs using
            this scenario.
        limit: Maximum number of runs to return, sorted by most recent
            first. Defaults to 10. Set to 0 to return all runs.
        detail_level: "summary" (default) returns compact results without
            model_metrics. "detailed" returns full results with metrics
            (limit capped to 5).
    
create_or_update_checkA

Create or update a quality check by name (upsert). Supports model-based, code-based, and audio checks.

    Saving to an existing name creates a new version of that check (see
    get_check's "available_versions"). Before writing a prompt_template or
    code_contents from scratch, fetch a worked example with get_templates:
    "boolean_check_prompt", "score_check_prompt", "analysis_check_prompt",
    or "check_code".

    Args:
        name: Unique name for the check.
        description: What the check evaluates.
        check_type: "model" (an LLM judge driven by prompt_template) or
            "code" (a deterministic Python class in code_contents).
        output_type: "pass_fail" (boolean verdict), "score" (numeric, e.g.
            a 1-5 rubric), or "analysis" (free-form qualitative feedback;
            only valid with check_type="model"). For check_type="code" the
            server infers pass_fail vs score from the value evaluate()
            returns (bool vs int/float) — output_type is used only to
            validate the request, not sent to the server. Note: list_checks
            and get_check report this as output_data_type in the server
            vocabulary, where "bool" means pass_fail and "int" means score.
        prompt_template: Required when check_type="model". The judge
            prompt. Inject the runtime data the judge needs with these
            placeholders:
            - {model_output}: the model output being evaluated. In a
              multi-turn conversation this is ONLY the final assistant
              message, not the full conversation.
            - {scenario_input}: the scenario input / source text.
            - {scenario_result}: the reference/expected output.
            - {model_input}: what was sent to the model (prompt or
              messages).
            - {message_history}: the full multi-turn conversation — the
              model_input messages plus the assistant's model_output. Use
              this when the check must judge the whole conversation.
            - {tool_calls}: the tool/function calls the model just made.
            - {tools}: the tool definitions/schema available to the model.
            - {model_output_metadata}: metadata attached to the most
              recent model output.
            - {simulation_message_history}: full conversation history
              reconstructed from trace metadata. Only populated for traced
              (ingested) conversations; for simulations and evaluations
              use {message_history}.
            The legacy {generation} placeholder is deprecated — use
            {model_output} instead.
        code_contents: Required when check_type="code" (output_type
            "pass_fail" or "score" only). Python source defining
            `class Check(CodeBasedCheck)` with a
            `@staticmethod def evaluate(...) -> CheckResponse` method.
            Start from `from okareo.checks import CodeBasedCheck,
            CheckResponse`. evaluate() may declare any subset of these
            parameters: model_output, scenario_input, scenario_result,
            metadata, model_input. Return CheckResponse(score=...,
            explanation=...) where score is a bool for pass_fail or an
            int/float for score. See get_templates("check_code") for
            complete examples.
        is_audio: Set to true for audio/voice evaluation. Only valid with
            check_type="model".
        tags: Optional list of string tags to organize the check. Tags are
            stored with the check and returned by get_check.
    
generate_checkA

Generate a check from a natural language description. Uses AI to create the prompt template (model checks) or Python code (code checks), then saves the check.

    Use this when you only have a description of what to evaluate. When
    you already know the exact prompt template or Python code the check
    should use, call create_or_update_check directly instead. The
    generated prompt/code is returned in the response — review it and
    refine with create_or_update_check if needed.

    Args:
        name: Name for the generated check.
        description: Natural language description of what to evaluate
            (e.g., "check if the response is toxic"). The more specific
            the description, the better the generated check.
        output_type: "pass_fail" (boolean verdict), "score" (numeric), or
            "analysis" (free-form qualitative feedback; model checks only).
        check_type: "model" (LLM judge) or "code" (deterministic Python).
        requires_scenario_input: Set true when the evaluation must compare
            the output against the scenario input. The generated check
            will reference {scenario_input} and only works on runs whose
            scenarios provide it.
        requires_scenario_result: Set true when the evaluation must
            compare the output against the expected result. The generated
            check will reference {scenario_result} and only works on runs
            whose scenarios provide it.
    
get_checkA

Retrieve the full configuration of a check by name, including its prompt template or code contents.

    Args:
        name: Name of the check to retrieve.
        version: Optional check version number to pin. Omit (or leave null)
            for the most recent version. The response always lists every
            available version under "available_versions".
    
delete_checkA

Permanently delete a check by name.

    Args:
        name: Name of the check to delete.
    
get_docsA

Query the Okareo documentation system for information about Okareo primitives and workflows.

    Use this tool when the agent or user needs to understand how Okareo
    concepts work — Scenarios, Checks, Targets, Drivers, Evaluations,
    and Simulations.

    Two modes are available:
    - 'conceptual': Detailed technical documentation for agent reasoning.
      Default top_k=5 (returns up to 5 documentation entries).
    - 'user_legible': Plain-language explanations for human users.
      Default top_k=3 (returns up to 3 documentation entries).

    If the Okareo documentation service is unavailable (e.g. air-gapped
    environment), the tool returns a helpful error suggesting get_templates
    as a fallback.

    Args:
        query: The question to ask the Okareo documentation system. Be
            specific — e.g., 'How do Checks and Evaluations work together?'
            or 'What is a Driver persona?'
        mode: Documentation mode — 'conceptual' or 'user_legible'.
        top_k: Number of documentation entries to return. Defaults to 5
            for conceptual mode, 3 for user_legible mode. Maximum 10.
    
get_templatesA

Retrieve prompt templates for common Okareo patterns.

    Returns starter templates for building Okareo test components. These
    templates are served as static content from the MCP — no network calls
    required. Always available, even in air-gapped environments.

    Available templates:
    - basic_scenario: Template for creating a basic Okareo test scenario
    - boolean_check_prompt: Template for a pass/fail (boolean) check prompt
    - score_check_prompt: Template for a scored check prompt
    - check_code: Template for a code-based check (Python function)
    - target_validate_check_prompt: Template for validating target output
    - driver_prompt: Template for a Driver persona prompt
    - driver_voice_extension_prompt: Template for voice interaction extensions
    - analysis_check_prompt: Template for an analysis check (qualitative feedback)

    Args:
        template_name: Template identifier to retrieve. Omit to get a
            lightweight listing of all available templates (names and
            descriptions only). Provide a template_name to get the full
            template content. Valid values: basic_scenario,
            boolean_check_prompt, score_check_prompt, check_code,
            target_validate_check_prompt, driver_prompt,
            driver_voice_extension_prompt, analysis_check_prompt.
    
get_reps_baselineA

Serve REPS agent-evaluation baseline material (scenario banks, drivers, checks, eval configs).

    REPS is Okareo's agent-evaluation workbench: per-pillar baseline
    material for evaluating AI agents across R-reasoning, E-execution,
    P-performance, and S-security, plus shared explore/ probes and a
    profile/ example. The material is published as tagged releases of
    the okareo-tools repo; this tool serves the latest release so reps
    skills need no local copy of the tree.

    Two modes:
    - Discovery (omit `path`): list what files exist in the served
      release — the full tree, or one area via `pillar`. File lists
      change between releases, so always discover before fetching.
    - Fetch (provide `path`): return one file's exact content as
      published in the release. Use paths verbatim from discovery,
      e.g. 'S-security/scenarios/verification-gate.jsonl'.

    Every response carries the release tag it was served from (e.g.
    'v0.5.1') — record it in evaluation reports as baseline
    provenance. `stale: true` means the last release check failed and
    the content may lag the newest release.

    Args:
        pillar: Optional discovery filter. One of: R-reasoning,
            E-execution, P-performance, S-security, explore, profile.
            Omit to list the entire baseline tree (which also includes
            shared material outside these areas).
        path: Optional file path (relative to the baseline tree, as
            returned by discovery). Provide to fetch that file's
            content; omit for discovery.
        version: Optional release tag. Currently only the served tag
            is available; any other value returns an error naming what
            IS available. Omit to accept the served release.
    
ingest_conversationsA

Submit completed voice conversations to Okareo for monitoring.

    Each conversation's turns become evaluable data points and any
    configured monitors run their checks automatically. Use this to feed
    production voice traffic (Retell, Twilio, VAPI, ElevenLabs, or a custom
    source) into Okareo monitoring.

    Conversations are validated individually: valid ones are ingested and
    invalid ones are returned in a "rejected" list — the batch is not
    all-or-nothing.

    Args:
        conversations: List of conversation objects. Each MUST include a
            "call_id" and at least one of: "transcript" (a list of
            {role, content, timestamp_ms} turns), "audio"
            ({"type": "url"|"voice_file_id"|"inline_b64", ...}),
            "recording_url", or "recording_bytes_b64". Optional per
            conversation: "context_token", "metadata", "tags" (tags drive
            monitor/filter-group matching), "diarization", "first_turn".
            When both a transcript and audio are supplied, the transcript
            takes precedence.
        project_id: Okareo project ID. Defaults to the account's project.
        mut_id: Optional model-under-test ID. Omit for pure monitoring —
            data points are then matched to monitors by their tags only.
    
connect_voice_integrationA

Connect a voice provider so its traffic flows into Okareo monitoring.

    Creates a provider integration. The returned integration carries an id
    and a public_id — pass the provider + public_id to get_voice_webhook_url
    to obtain the inbound webhook endpoint to paste into the provider's
    console.

    Args:
        provider: Voice platform — one of: retell, twilio, vapi, elevenlabs.
        webhook_auth_type: Webhook authentication type expected by Okareo
            for this provider (provider-specific — see Okareo docs).
        secrets: Provider-specific secret values (opaque pass-through; the
            response never echoes raw secrets, only a summary).
        metadata: Optional free-form metadata object.
    
list_voice_integrationsA

List the voice provider integrations in your Okareo project.

    Args:
        limit: Maximum number of integrations to return (default 20). Use 0
            for no limit.
    
get_voice_integrationA

Retrieve a voice provider integration by id, including its status.

    Args:
        integration_id: The integration's id (from list_voice_integrations).
    
update_voice_integrationA

Update a voice provider integration's metadata.

    Args:
        integration_id: The integration's id.
        metadata: The new metadata object.
    
rotate_voice_integration_secretA

Rotate a voice provider integration's secrets.

    Args:
        integration_id: The integration's id.
        secrets: The new provider secret values. The response returns only
            a secret summary, never raw secret values.
    
delete_voice_integrationB

Delete a voice provider integration by id.

    Args:
        integration_id: The integration's id.
    
get_voice_webhook_urlA

Get the inbound webhook endpoint for a voice provider.

    Paste the returned URL into the provider's console so its call traffic
    reaches Okareo monitoring.

    Args:
        provider: Voice platform — one of: retell, twilio, vapi, elevenlabs.
        public_id: The integration's public_id (from connect_voice_integration
            or get_voice_integration). Required for retell and twilio.
    
query_analyticsA

Query Okareo's product analytics to understand evaluation trends.

    Answers questions like "how is my evaluation quality trending" by
    aggregating measures across dimensions over a time window.

    Args:
        measures: Metrics to aggregate. Required. For the ``check_trend``
            cube: avg_check_value, issue_rate, error_rate, datapoint_count,
            issue_count, error_count, test_run_count, avg_latency, sum_cost,
            input_token_count, output_token_count.
        dimensions: Optional group-by fields (e.g. ["check.name"],
            ["target.name"], ["provider"]).
        cube: Optional analytics cube name (defaults to ``check_trend``,
            currently the only cube).
        filters: Optional list of filter objects
            ``{"member": ..., "operator": ..., "values": [...]}``.
        time_range: Optional look-back window — one of LAST_HOUR,
            LAST_24_HOURS, LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS,
            LAST_90_DAYS. If neither time_range nor time_dimensions is
            given, defaults to LAST_30_DAYS (the analytics API requires a
            time window).
        time_dimensions: Optional time bucketing — a list with at most one
            entry, e.g. [{"dimension": "test_run.start_time",
            "granularity": "day"}] (granularity: hour, day, or week).
        include_metadata: When true, also return the available cubes,
            dimensions, and measures so the query can be refined.
    
list_dashboardsA

List the analytics dashboards in your Okareo project.

    Args:
        limit: Maximum number of dashboards to return (default 20). Use 0
            for no limit.
    
get_dashboardA

Retrieve a dashboard's full configuration by name.

    Args:
        name: Name of the dashboard to retrieve.
    
save_dashboardA

Create or update an analytics dashboard by name (upsert).

    If a dashboard with this name already exists it is updated; otherwise a
    new one is created.

    Size each panel with a named ``size`` from the catalog below (PREFERRED
    — guarantees a legible layout) and omit positions entirely: panels are
    auto-placed in the order given (left-to-right, top-to-bottom on a
    12-column grid, wrapping rows, never overlapping).

    Size catalog and when to use each:

    - ``small-square`` (3x6): single ``stat`` metrics.
    - ``half-rectangle`` (6x6): ``line``/``bar``/``area`` trends, two per row.
    - ``half-square`` (6x9): ``radar``, ``composed``, denser charts.
    - ``full-rectangle`` (12x9): wide time-series comparisons.
    - ``full-square`` (12x12): ``table`` panels.

    Args:
        name: Dashboard name — the upsert key.
        panels: Optional list of panel definitions. Each panel is an object:

            - ``title`` (str, required): panel heading.
            - ``chart_type`` (str, required): one of ``line``, ``bar``,
              ``composed``, ``area``, ``radar``, ``stat``, ``table``.
            - ``query`` (object, required): what to chart —
              ``{"cube": "check_trend", "measures": [...],
              "dimensions": [...], "filters": [...],
              "time_dimensions": [...], "order": {...}}``. ``measures`` is
              required; everything else is optional. ``cube`` defaults to
              ``check_trend``. The dashboard ``time_range`` applies to all
              panels — panels do NOT carry their own time range.
            - ``size`` (str): a catalog name (see above). Required unless
              ``layout`` is given; wins over ``layout`` w/h if both appear.
            - ``layout`` (object): raw grid placement
              ``{"x": >=0, "y": >=0, "w": >=1, "h": >=1}`` (integers).
              Only needed when not using ``size``, or to pin an explicit
              position (give both ``x`` and ``y``; with ``size``, w/h are
              ignored). Heights below the legibility floor are sized up on
              save: ``h >= 6`` when ``w <= 6``, ``h >= 9`` when ``w > 6``.
            - ``table_config`` (object, optional): ONLY for
              ``chart_type == "table"``.

            ``check_trend`` measures: ``avg_check_value``, ``issue_rate``,
            ``error_rate``, ``datapoint_count``, ``issue_count``,
            ``error_count``, ``test_run_count``, ``avg_latency``,
            ``sum_cost``, ``input_token_count``, ``output_token_count``.
            ``check_trend`` dimensions: ``check.name``, ``check.id``,
            ``target.name``, ``target.id``, ``scenario.name``,
            ``scenario.id``, ``test_run.id``, ``test_run.type``,
            ``test_run.is_latest_for_target``, ``source``, ``provider``,
            ``request_model_name``, ``response_model_name``, ``tag``.
            Use ``query_analytics(include_metadata=True)`` for the
            authoritative, current set.

            Example panel::

                {"title": "Avg Check Value by Check", "chart_type": "bar",
                 "query": {"measures": ["avg_check_value"],
                           "dimensions": ["check.name"]},
                 "size": "half-rectangle"}
        description: Optional dashboard description.
        time_range: Optional default look-back window for the whole
            dashboard. One of: LAST_HOUR, LAST_24_HOURS, LAST_7_DAYS,
            LAST_14_DAYS, LAST_30_DAYS, LAST_90_DAYS. Defaults to
            LAST_90_DAYS when omitted.

    Returns:
        JSON with the saved dashboard and ``action`` (created/updated).
        When sizing or dimensions were changed on save (size overriding
        layout w/h, or a height floored), an ``adjustments`` list reports
        each change: ``{"panel", "field", "from", "to", "reason"}``.
    
reorder_dashboardsB

Set the display order of dashboards.

    Args:
        ordered_names: Dashboard names in the desired order.
    
delete_dashboardB

Delete a dashboard by name.

    Args:
        name: Name of the dashboard to delete.
    
list_tenantsA

List every Okareo organization you have access to in this MCP session.

    The currently-active organization is marked ``is_current: true``. The
    active organization is determined at sign-in (the token this session
    presents is already scoped to it). Only available on OAuth-authenticated
    sessions; on Bearer-API-key sessions returns
    ``tenant_selection_requires_oauth``.
    
switch_tenantB

Change which Okareo organization your session operates against.

    Organization selection now happens **during sign-in** (feature 030):
    when you connect the Okareo MCP you choose which organization to
    authorize, and the credential this session uses is already scoped to
    it. This tool therefore no longer changes the active organization — to
    switch, reconnect/re-authenticate the Okareo MCP from your copilot and
    select a different organization when prompted. Use ``list_tenants`` to
    see which organization is currently active.
    

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/okareo-ai/okareo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server