A Model Context Protocol server for the Xplainable platform. It lets an LLM agent (Claude, or any MCP client) train, deploy, optimise, and explain transparent machine-learning models. The agent is the orchestrator: it inspects the data, decides features and preprocessing, trains, reads the metrics, and iterates.
Training always runs server-side on the Xplainable platform — the MCP host never fits a model locally.
- Hosted — connect your MCP client to
https://mcp.xplainable.io(OAuth login, no installation). - Local — run the server yourself over stdio with an Xplainable API key. This is what the rest of this README covers.
Create one at platform.xplainable.io.
claude mcp add xplainable \
-e XPLAINABLE_API_KEY=your-api-key-here \
-- uvx --from git+https://github.com/xplainable/xplainable-mcp-server.git xplainable-mcpAdd to your MCP settings file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"xplainable": {
"command": "uvx",
"args": ["--from", "git+https://github.com/xplainable/xplainable-mcp-server.git", "xplainable-mcp"],
"env": {
"XPLAINABLE_API_KEY": "your-api-key-here"
}
}
}
}No uv? Clone and install instead:
git clone https://github.com/xplainable/xplainable-mcp-server.git
cd xplainable-mcp-server
python -m venv .venv && source .venv/bin/activate
pip install -e .then use "command": "/path/to/xplainable-mcp-server/.venv/bin/xplainable-mcp"
(no args) in the config above.
Ask your agent: "What models and datasets do I have?" — it should call
models_list_team_models and datasets_list_team_datasets.
The tool surface puts the agent in control of every training decision:
datasets_list_team_datasets/models_list_team_models/deployments_list_deployments— see the team's assetsdatasets_preview_dataset_json(dataset_id)— inspect columns, types, and sample rows; decide the target, columns to drop, and whether preprocessing is needed- (Optional)
preprocessing_list_available_transformers→preprocessing_create_preprocessor_from_spec→preprocessing_preview_from_datato verify transformed output 3b. Declare feature relationships once per dataset:datasets_infer_relationshipsproposes derived columns, implications and monotonic hints with evidence; commit withdatasets_set_relationships(re-apply to old versions withmodels_apply_relationships) models_train_model(dataset_id, target_column, model_name, ...)— synchronous server-side training; returns model/version IDs, train/test metrics, and feature importances- Inspect:
models_get_feature_info/gpt_explain_model; compare train vs test metrics - Iterate:
models_refit_featuresfor per-feature tuning, or train again with different features / preprocessing deployments_deploy(version_id)— deploy once satisfied (thendeployments_activate_deployment)- Act on the model:
inference_predict/optimisers_run_optimiser/reports_create_report(+ pollreports_get_job_status)
Tools are generated at server startup from @mcp_tool-decorated methods
in the xplainable-client
package — there are no checked-in generated files. The surface is flat:
every registry tool is exposed, with MCP annotations derived from its
category (read → read-only hint, write → destructive hint).
| Variable | Required | Description |
|---|---|---|
XPLAINABLE_API_KEY |
yes (local) | API key from platform.xplainable.io |
XPLAINABLE_HOST / XPLAINABLE_HOSTNAME |
no | Platform host override (defaults to https://platform.xplainable.io). Set both to the same value. |
XPLAINABLE_INFERENCE_HOST |
no | Inference server override for the direct-to-inference tools (inference_score_dataset, optimisers_run_portfolio); defaults to https://inference.xplainable.io. Set it whenever the platform host is non-prod. |
XPLAINABLE_ORG_ID / XPLAINABLE_TEAM_ID |
no | Org/team binding, if your API key is not bound to a team |
MCP_TRANSPORT |
no | stdio (default) or streamable-http |
LOG_LEVEL |
no | DEBUG, INFO (default), WARNING, ERROR |
See .env.example. The API key is read from the environment only and is never exposed through a tool.
xplainable-mcp-cli list-tools # list all available tools
xplainable-mcp-cli validate-config # check env configuration
xplainable-mcp-cli test-connection # test API connectivity
xplainable-mcp-cli generate-docs # generate tool documentationcp .env.example .env # fill in your API key
docker compose up --buildThe container serves streamable-HTTP on port 8000 with a /health
endpoint. For anything beyond localhost, terminate TLS at a reverse proxy.
git clone https://github.com/xplainable/xplainable-mcp-server.git
cd xplainable-mcp-server
pip install -e ".[dev]"
pytest # run tests
ruff check . # lintClient-backed tools are generated at import time by
xplainable_mcp/runtime_tools.py from the @mcp_tool registry in
xplainable-client — there is no sync step. Upgrading the pinned
xplainable-client version is all it takes to pick up new or changed
tools; the test suite (tests/test_surface.py) pins the tool count so
surface changes are always deliberate.
| MCP Server | xplainable-client | fastmcp |
|---|---|---|
| current (main) | >=1.13.0 | >=2.0.0,<3.0.0 |
See CONTRIBUTING.md.
MIT License — see LICENSE.