MCP Installation
Summary
Section titled “Summary”Install the EvalHub MCP server on macOS, Linux, or Windows.
Prerequisites
Section titled “Prerequisites”- An EvalHub instance (cluster deployment or local mode)
- An authentication token (ServiceAccount token for cluster, or none for local mode)
Install the MCP server
Section titled “Install the MCP server”The EvalHub container image includes the MCP server binary. This is used for Kubernetes/OpenShift deployments managed by the TrustyAI Operator.
See the OpenShift Setup guide for deploying with the operator. The operator’s EvalHub CR supports an optional mcp section to deploy the MCP server as a sidecar or standalone pod.
To run the container locally:
podman run --rm -p 3001:3001 \ -e EVALHUB_BASE_URL=http://host.containers.internal:8080 \ -e EVALHUB_TRANSPORT=http \ quay.io/trustyai/eval-hub:latest \ /app/evalhub-mcpDownload the binary for your platform from GitHub Releases:
| Platform | Binary |
|---|---|
| macOS (Apple Silicon) | evalhub-mcp-darwin-arm64 |
| macOS (Intel) | evalhub-mcp-darwin-amd64 |
| Linux (x86_64) | evalhub-mcp-linux-amd64 |
| Linux (ARM64) | evalhub-mcp-linux-arm64 |
| Windows (x86_64) | evalhub-mcp-windows-amd64.exe |
# Example for macOS Apple Silicon — replace with your platformcurl -Lo evalhub-mcp https://github.com/eval-hub/eval-hub/releases/latest/download/evalhub-mcp-darwin-arm64chmod +x evalhub-mcpsudo mv evalhub-mcp /usr/local/bin/# Download the binaryInvoke-WebRequest -Uri "https://github.com/eval-hub/eval-hub/releases/latest/download/evalhub-mcp-windows-amd64.exe" -OutFile "evalhub-mcp.exe"
# Move to a directory in your PATHMove-Item evalhub-mcp.exe "$env:LOCALAPPDATA\Programs\evalhub-mcp.exe"Add %LOCALAPPDATA%\Programs to your system PATH if it is not already there.
Verify:
evalhub-mcp --versionbrew install eval-hub/evalhub/evalhub-mcpVerify:
evalhub-mcp --versionIf you already use the EvalHub Python SDK or CLI, the MCP server lifecycle is managed through the evalhub mcp commands:
pip install "eval-hub-sdk[mcp]"Run the MCP server in the foreground (defaults to stdio transport):
evalhub mcp runOr start it as a background daemon (defaults to http transport):
evalhub mcp start# MCP server started (PID 12345).# Transport: http# URL: http://localhost:3001# Logs: ~/.config/evalhub/mcp/mcp.logManage the background daemon:
evalhub mcp status # check if running (reports server name, version, git hash)evalhub mcp stop # stop the daemonSee CLI-managed configuration below for how to configure the MCP connection through the CLI.
Configuration
Section titled “Configuration”The MCP server connects to an EvalHub API instance. Configure the connection using a YAML file, environment variables, or CLI flags.
Configuration file
Section titled “Configuration file”Create ~/.evalhub/config.yaml:
base_url: "https://evalhub.apps.my-cluster.example.com"token: "sha256~..."tenant: "my-team"transport: "stdio"Pass the config file to the server:
evalhub-mcp --config ~/.evalhub/config.yamlEnvironment variables
Section titled “Environment variables”All settings can be set via environment variables:
| Variable | Description | Default |
|---|---|---|
EVALHUB_BASE_URL | EvalHub API URL | — |
EVALHUB_TOKEN | Authentication token | — |
EVALHUB_TENANT | Tenant / namespace | — |
EVALHUB_TRANSPORT | Transport mode: stdio, http, http-sse | stdio |
EVALHUB_HOST | HTTP server bind host | localhost |
EVALHUB_PORT | HTTP server bind port | 3001 |
EVALHUB_INSECURE | Skip TLS certificate verification | false |
EVALHUB_LIST_PAGE_LIMIT | Default page size for list operations | 200 |
EVALHUB_TLS_CERT_FILE | TLS certificate file (for HTTPS serving) | — |
EVALHUB_TLS_KEY_FILE | TLS private key file (for HTTPS serving) | — |
EVALHUB_AUTH_TYPE | Inbound authentication: none or rbac-proxy | none |
EVALHUB_CA_CERT_PATH | Custom CA certificate path for TLS verification | — |
CLI flags
Section titled “CLI flags”evalhub-mcp --transport http --port 3001 --config ~/.evalhub/config.yaml| Flag | Description |
|---|---|
--transport | stdio, http, or http-sse |
--host | HTTP server bind address |
--port | HTTP server port |
--config | Path to YAML config file |
--insecure | Skip TLS verification |
--tls-cert | TLS certificate for HTTPS serving |
--tls-key | TLS private key for HTTPS serving |
--auth-type | Inbound authentication (none or rbac-proxy) |
--version | Print version and exit |
Configuration precedence
Section titled “Configuration precedence”Settings are resolved in this order (highest priority first):
- CLI flags
- Environment variables
- YAML config file
- Defaults
Transport modes
Section titled “Transport modes”| Mode | Protocol | Use case |
|---|---|---|
stdio | stdin/stdout JSON-RPC | Local clients (Claude Code, VS Code) |
http | Streamable HTTP | Remote clients, web integrations |
http-sse | HTTP + Server-Sent Events | Legacy MCP clients (deprecated) |
The http transport includes a health endpoint at GET /health returning {"status":"ok"}.
CLI-managed configuration (evalhub mcp) — Python SDK CLI only
Section titled “CLI-managed configuration (evalhub mcp) — Python SDK CLI only”This section applies when managing the Go MCP binary through the Python SDK CLI (evalhub mcp commands). If you run the evalhub-mcp binary directly, use the configuration file, environment variables, or CLI flags above instead.
Configuration is managed with a file-based config key instead of individual profile keys.
Set the MCP config file
Section titled “Set the MCP config file”Provide a YAML config file with MCP-specific settings. The CLI validates the file and stores a profile-scoped copy:
evalhub config set mcp_config_file mcp-config.yamlExample mcp-config.yaml:
transport: httphost: localhostport: 3001Config merging
Section titled “Config merging”The CLI merges connection keys from the active profile (base_url, token, tenant, insecure) with the MCP config file. MCP config values take precedence. The merged result is written to ~/.config/evalhub/mcp/<profile>/mcp-config.yaml and passed to the evalhub-mcp binary automatically.
Resolution priority (highest first):
- Values in
mcp_config_file - Root profile values (
base_url,token,tenant,insecure)
If neither source provides a value, the key is omitted.
Inspect the config
Section titled “Inspect the config”evalhub config get mcp_config_file # show stored pathevalhub config get mcp_config_file --unfold # show file contents (tokens masked)evalhub config get mcp_config_file --unfold --unmask # show file contents with tokens revealedRemove the MCP config
Section titled “Remove the MCP config”evalhub config unset mcp_config_fileThis removes the stored config file and cleans up the profile directory.
Default transports
Section titled “Default transports”| Command | Default transport | Use case |
|---|---|---|
evalhub mcp run | stdio | Local clients (Claude Code, VS Code) |
evalhub mcp start | http | Background daemon for remote clients |
evalhub mcp start rejects stdio transport — use evalhub mcp run for stdio.
Checking MCP server status
Section titled “Checking MCP server status”evalhub mcp status reports whether the background MCP server is running. If running, it performs a full MCP JSON-RPC handshake to report the server name, version, and git commit hash:
evalhub mcp status# MCP server is running (PID 12345).# Name: evalhub-mcp# Version: 0.4.3# Commit: abc1234# URL: http://localhost:3001# Logs: ~/.config/evalhub/mcp/mcp.logOpenShift multi-tenant setup
Section titled “OpenShift multi-tenant setup”When using EvalHub in a multi-tenant OpenShift deployment, create a dedicated ServiceAccount for your AI agent:
oc apply -f - <<EOFapiVersion: v1kind: ServiceAccountmetadata: name: team-a-agent namespace: team-aEOFGrant it the required permissions:
oc apply -f - <<EOFapiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: evalhub-evaluator namespace: team-arules: - apiGroups: [trustyai.opendatahub.io] resources: [evaluations, collections, providers] verbs: [get, list, create, update, delete] - apiGroups: [mlflow.kubeflow.org] resources: [experiments] verbs: [create, get]---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: name: evalhub-evaluator-binding namespace: team-aroleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: evalhub-evaluatorsubjects: - kind: ServiceAccount name: team-a-agent namespace: team-aEOFGenerate a long-lived token for the MCP server:
export EVALHUB_TOKEN=$(oc create token team-a-agent -n team-a --duration=8760h)