Self-hosted MCP server for time-series forecasting and tabular ML via foundation models.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
docker run -i --rm docker.io/psyb0t/predictalot:v1.2.2
MCP client config
{
"mcpServers": {
"predictalot": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/predictalot:v1.2.2"
]
}
}
}One HTTP service, two model families, zero ceremony.
/v1/timeseries/<type>/.POST /v1/models/unload releases all resident foundation-model weights and runtime caches. A forecast body with "unload": true schedules its model for teardown after concurrent forecasts using that model finish.modelId, forecast on the latest snapshot. Under /v1/tabular/./mcp. One named tool per (FM type, model) cell plus per-type ensemble + listing. Tabular endpoints are HTTP-only for now.docker run -d --name predictalot \
-v $HOME/predictalot-models:/models \
-e PREDICTALOT_AUTH_TOKENS=changeme \
-p 8080:8080 \
psyb0t/predictalot:latest
# Zero-shot FM forecast
curl -s http://localhost:8080/v1/timeseries/univariate/forecast \
-H "Authorization: Bearer changeme" -H "Content-Type: application/json" \
-d '{"model":"chronos-2","context":[[10,11,12,13,14,15,16,17,18,19,20]],"config":{"horizon":5}}' | jq
# Train + persist a tabular model on your own features
curl -s http://localhost:8080/v1/tabular/train \
-H "Authorization: Bearer changeme" -H "Content-Type: application/json" \
-d '{"modelId":"my-model","backend":"lightgbm","target":[[100,101,99,...]],
"features":[{"rsi":[55,58,...],"macd":[0.3,0.4,...]}],
"config":{"mode":"direction","horizon":3,"nEstimators":400}}' | jq
# Then forecast on the latest snapshot
curl -s http://localhost:8080/v1/tabular/forecast \
-H "Authorization: Bearer changeme" -H "Content-Type: application/json" \
-d '{"modelId":"my-model","features":[{"rsi":[58],"macd":[0.4]}]}' | jq
# Release all resident foundation-model memory when it is no longer needed
curl -s -X POST http://localhost:8080/v1/models/unload \
-H "Authorization: Bearer changeme" | jq
| Doc | What it covers |
|---|---|
| docs/timeseries.md | Foundation time-series API. All 5 models (capabilities + per-model quirks + what each is recommended for), all 6 forecast types, per-type ensemble with weights + memberOverrides, extra per-call hatch, /models listings. |
| docs/tabular.md | Tabular ML API. All 9 backends (what each is recommended for), 3 modes (direction / value / quantile), tier-1/2/3 config knobs, the 3 meta-learners (calibrated / stacking / diversified), storage layout. |
| docs/mcp.md | MCP streamable-HTTP server: tool naming, args, current scope (FM only). |
| docs/configuration.md | Every PREDICTALOT_* env var. |
| docs/architecture.md | Multi-venv sidecar pattern for sundial, CPU vs CUDA images, multi-stage build. |
| docs/accuracy.md | Benchmark sMAPE + latency on academic + real-world datasets. Honest takeaways including which models lose. |
| docs/errors.md | Error contract: 400 / 401 / 404 / 413 / 422 / 503 shapes. |
CHANGELOG.md tracks per-version changes.
The skill works in any agent that reads .agents/skills/ (such as peen), and
installs natively in the clients below.
claude plugin marketplace add psyb0t/agents
claude plugin install predictalot@psyb0t
Claude Code prompts for the predictalot URL and, if auth is enabled, the token — the token is stored in your OS keychain.
codex plugin marketplace add psyb0t/agents
codex plugin add predictalot@psyb0t
Installed via the marketplace, the skill invokes as $predictalot:predictalot. Codex also picks
the skill up automatically, with no install, in any repo containing .agents/skills/ — there it
invokes as plain $predictalot.
The skill is published to ClawHub on every release:
openclaw skills install @psyb0t/predictalot
For MCP clients that speak local stdio, the @psyb0t/predictalot
plugin bridges to predictalot's /mcp endpoint:
openclaw plugins install clawhub:@psyb0t/predictalot
Then set PREDICTALOT_URL (and PREDICTALOT_AUTH_TOKENS if the server requires one).
Code: WTFPL (see LICENSE). The MCP plugin under .agents/plugins/predictalot/ is MIT (its own LICENSE).
Foundation models retain their upstream licenses — chronos-2 / timesfm-2.5 / toto-1 / sundial-base-128m: Apache 2.0; moirai-2: CC-BY-NC-4.0 (non-commercial). Tabular backends use their upstream licenses — lightgbm / xgboost / scikit-learn: permissive. Review each before commercial use.