原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

dashAI (unofficial)

作者:Maarmapa版本 0.3.1i★ –i在你的电脑上运行
注册名称io.github.Maarmapa/dashai-mcp

安装

概览

作者提供的说明(英文原文)

Train, track and query models on a running dashAI instance. Read-oriented, no delete tools.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: DASHAI_BASE_URL, DASHAI_ALLOW_REMOTE, DASHAI_TIMEOUT

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "dashai": {
      "command": "uvx",
      "args": [
        "dashai-mcp"
      ],
      "env": {
        "DASHAI_BASE_URL": "your-value",
        "DASHAI_ALLOW_REMOTE": "your-value",
        "DASHAI_TIMEOUT": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add dashai --env DASHAI_BASE_URL=your-value --env DASHAI_ALLOW_REMOTE=your-value --env DASHAI_TIMEOUT=your-value -- uvx dashai-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "dashai": {
      "command": "uvx",
      "args": [
        "dashai-mcp"
      ],
      "env": {
        "DASHAI_BASE_URL": "your-value",
        "DASHAI_ALLOW_REMOTE": "your-value",
        "DASHAI_TIMEOUT": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "dashai": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "dashai-mcp"
      ],
      "env": {
        "DASHAI_BASE_URL": "your-value",
        "DASHAI_ALLOW_REMOTE": "your-value",
        "DASHAI_TIMEOUT": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • DASHAI_BASE_URL env
    URL of the dashAI backend. Defaults to http://localhost:8000.
  • DASHAI_ALLOW_REMOTE env
    Set to 1 to allow a non-localhost backend. dashAI's API has no authentication, so pointing this server at a remote host exposes an ML backend with no door on it — read the README before enabling.
  • DASHAI_TIMEOUT env
    Seconds to wait per request. Defaults to 30.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 Maarmapa 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 18513 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 18513 个服务器的 45% 更新
  • 基础检查结果等于或优于此分类中其他 18513 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

dashAI (unofficial) 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.3.1)于2个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Cape Winelands Visit Planner

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

作者:formulahendry起步阶段↓ 66/周★ 44014个月前更新

在你的电脑上运行

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

作者:desktop-commander正在增长★ 2113天前更新

在云端运行✓ desktopcommander.app

Cape Winelands Visit Planner

Cape Winelands wine farm finder and day-route planner

作者:aiagenttools.co.za起步阶段今天更新

在云端运行✓ aiagenttools.co.za

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

dashai-mcp

An MCP server for [dashAI](https://github.com/DashAISoftware/DashAI), the open source Machine Learning workbench led by the University of Chile (FCFM), built by students of DCC UChile and UTFSM, with CENIA and IMFD.

Unofficial and independent. This is a third-party project. It is not

affiliated with, endorsed by, or maintained by the dashAI project or the

institutions that develop it.

It gives an agent the same surface dashAI gives a person through its GUI: look at datasets, see which models are available, train, follow queued work, and read the metrics.

"Train a random forest on dataset 3 predicting 'species' and tell me the F1"

Status

v0.2.2 — verified against a running dashAI 0.9.7.post1. Deterministic tests (including the predict two-step path) plus live runs: dashai_train_model → dashai_job_status → dashai_get_run with metrics, and dashai_predict → dashai_job_status finished.

Live tabular run (seed students)

Public dashAI seed only. Target placement_status (~83% majority). exam_score was left out of the inputs (it leaks the label). Split 70/15/15. Goal metric: BalancedAccuracy — Accuracy and F1 on the majority class are traps.

modeltest BalancedAccuracytest MCCtest F1test Accuracy
DummyClassifier(most_frequent)0.5000.0000.9060.827
RandomForestClassifier (class_weight=balanced, depth 8, 100 trees)0.8510.5910.9000.845
LogisticRegression (class_weight=balanced, L2)0.8730.6240.9050.853

The dummy *wins F1* by always answering the majority class. The linear model beats the forest on the metrics that actually measure separation. Each row is its own 70/15/15 draw (not the same test rows) — still enough to stop treating the forest as the default. If a client reports only F1 here, it is lying.

dashai_predict on the finished forest run returned prediction_id and the job finished. That scores the same seed dataset the model was trained on, not a held-out file — do not read it as a generalization check. dashai_get_prediction returns {n, n_classes, class_counts} only.

Live image run (seed cifar10-subset)

Public seed: 200 images, frog vs truck (100/100). LeNet5ImageClassifier, CPU, 32×32. Split 70/15/15 → test n=30. Chance is 0.5.

runshuffle/stratifytrain BalAccval BalAccval MCCtest BalAcctest MCC
10 epochs (poisoned)off0.879*0.467*0.0000.633*0.000
40 epochs (poisoned)off0.950*0.733*0.0000.867*0.000
40 epochs (cifar10-lenet5-40ep-stratified)on1.0000.7670.5440.9000.816

\*Accuracy, not BalancedAccuracy — on the one-class val/test they collapse. Chance on this seed is 0.5. Dummy tabular does not apply (image task).

The image *path* works. The *0.867 is not a result*: dashAI defaulted shuffle=False, so val/test were 30 trucks and zero frogs. MCC 0 is sklearn on a one-class split. After this server sent shuffle=true + stratify=true, both classes are in val/test and MCC is no longer 0. Train hits 1.0 (140 images memorized). Val 0.767 is the honest-ish number; test 0.900 is a 30-row lottery. Do not publish a leaderboard line.

Verifying against a live instance surfaced gaps between dashAI's documentation and its actual behaviour. Each one has its own regression test. A sixth — sequential splits with shuffle=False — only showed up live because MCC came back 0 next to a moving Accuracy. dashai_predict sending run_id to PredictJob — only showed up live (KeyError: 'prediction_id') because there was no predict test.

Install

pip install dashai-mcp

or: uv pip install dashai-mcp

In your MCP client configuration:

{

"mcpServers": { "dashai": { "command": "dashai-mcp" } } }

dashAI has to be running separately (dashai, or the desktop app). It is looked up at http://localhost:8000 by default.

Tools

ToolWhat it does
dashai_server_infoIs dashAI up? How many datasets and runs are there
dashai_list_datasetsLists the loaded datasets
dashai_describe_datasetColumns, types and a sample — all in one call
dashai_list_componentsAvailable models, metrics, tasks and optimizers
dashai_train_modelTrains. Enqueues and returns job_id + run_id
dashai_job_statusJob progress: not_started / started / finished / error
dashai_list_runsRecorded runs, for comparing models
dashai_get_runConfiguration and metrics of a run
dashai_predictPredicts using the model of a finished run
dashai_get_predictionClass counts of a finished prediction — never the rows

Six things dashAI's documentation (or defaults) get wrong

Found by running against a real instance. If you are writing a client for this API, these will bite you:

What the docs sayWhat the code does
?select_types=["Model","Metric"]Must be repeated parameters: ?select_types=Model&select_types=Metric. The JSON array returns 422.
POST /job/ with a JSON bodyIt is form data, with kwargs serialized as a JSON string. Its own openapi.json declares no requestBody for that route, because the endpoint parses request by hand.
splits as an objectIt travels as a JSON string: the Pydantic schema declares it str.
optimize(model_class, search_space, X, y, n_trials)The real signature is optimize(model, input_dataset, output_dataset, parameters, metric), and model is an instance, not a class.
Predict by run_id on the jobPredictJob.run requires kwargs["prediction_id"]. The GUI first POST /predict/ ({run_id, dataset_id}) and only then enqueues. Sending run_id to the job raises KeyError: 'prediction_id'.
Split shuffle / stratifyprepare_for_model_session defaults both to False. On a class-sorted seed (cifar10-subset is 100 frog then 100 truck) a 70/15/15 cut puts val and test in one class. Accuracy still moves; sklearn's MCC is defined as 0. This server sends shuffle=true and, on classification tasks, stratify=true.

The component registry also has 13 types, not the four the documentation suggests: Task, GenerativeTask, Model, GenerativeModel, DataLoader, DatasetSource, Metric, Optimizer, Job, LocalExplainer, GlobalExplainer, Explorer, Converter.

And GET /run/{id} returns split_indexes with the full list of indices: on a 10,000-row dataset that is 59 KB, 99% of the response. This server replaces it with the per-split counts, bringing the response down to ~1 KB.

Three design decisions

1. Ten tools, not 142

dashAI exposes 142 REST endpoints. Generating one tool per endpoint is mechanical and it is a mistake: a model with 140 tools burns context reading the catalogue and chooses worse. These ten cover the actual working path.

2. dashai_train_model collapses three calls

In the raw API, training is a chained sequence:

POST /model-session/   → creates the experiment

POST /run/ → creates the run POST /job/ → enqueues the ModelJob

With required fields the GUI fills in on its own and that are undocumented — plot_history_path, plot_slice_path, plot_contour_path, plot_importance_path. On top of that, `splits` travels as a JSON string, not an object, even though dashAI's documentation shows it as an object: the backend's Pydantic schema declares it str. That kind of detail is exactly what makes an agent fail against the raw API.

Here it is a single call, and it does not block: training can take hours, so it returns the job_id immediately and progress is polled with dashai_job_status.

dashai_predict does the same for the two-step GUI path: POST /predict/ then POST /job/ with prediction_id.

3. No tool deletes anything

dashAI's API has no authentication — checked endpoint by endpoint. That is coherent for something local-first, but it means there is no barrier between a misread sentence and an irreversible DELETE /dataset/{id}. Deleting is done from the GUI, looking at what is being deleted.

For the same reason, the server refuses to point at a non-local host:

DASHAI_BASE_URL points to 'ml.example.com', which is not local, and dashAI's API

has no authentication: exposing it to the network leaves the backend open to anyone who can reach it.

This can be disabled on purpose with DASHAI_ALLOW_REMOTE=1, if the target is protected some other way.

Configuration

VariableDefaultWhat for
DASHAI_BASE_URLhttp://localhost:8000Where the backend is
DASHAI_ALLOW_REMOTE*(no)*Allow a non-local host (see above)
DASHAI_TIMEOUT30Seconds to wait per request

dashai_get_prediction needs pyarrow in the MCP process to turn the Arrow file into class counts (pip install 'dashai-mcp[counts]', or install the MCP into the same env as dashAI). Without it the tool still returns status and refuses to dump rows.

Development

python -m venv .venv && .venv/bin/pip install -e ".[dev]"

.venv/bin/python -m pytest tests/ -q

The tests stub the HTTP responses with respx: they need neither a dashAI instance nor credentials. They test the contract — which calls are made, in what order, with what body, and what the agent is told when something fails.

Verifying against a live instance

A client tested only against stubs is a hypothesis. scripts/smoke_live.py exercises every tool against a real running dashAI, through the same code paths an agent uses:

python scripts/smoke_live.py            # read-only tools

python scripts/smoke_live.py --train # + a real train -> predict loop

The --train loop creates a model session, a run and a prediction on the target instance — point it at a scratch instance, not a production one. Exit code 0 only if every exercised tool worked. This is how each release gets verified; the version it was last run against is what dashai_server_info reports under compatibility.verified_against.

API compatibility check

dashAI exposes no version endpoint, so dashai_server_info reads the instance's openapi.json and compares the API surface against what this server actually calls: are the endpoints still there, and does POST /model-session/ require fields this server does not send? The verdict comes back as compatibility.status — ok, mismatch (with the exact differences named) or unknown (schema unreadable; everything else may still work). The case it exists for is real: dashAI's development branch already adds an evaluation_strategy field to model sessions.

A note on the SDK

Requires the MCP Python SDK 2.x. Version 2.0 removed mcp.server.fastmcp; it is now mcp.server.mcpserver.MCPServer, and annotations are ToolAnnotations objects instead of dictionaries. Most tutorials still show the 1.x API.

License

MIT, same as dashAI. See the note at the top on affiliation.

问 PopNx