easydeploy-ai-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | HTTP bind host. | 0.0.0.0 |
| PORT | No | HTTP bind port. | 8080 |
| EDA_API_KEY | No | Required for stdio and legacy HTTP (no OAuth). Not used for outbound API calls when EDA_OAUTH_ENABLED=1 — each MCP request must include Authorization: Bearer <JWT or eda_live_…>. | |
| EDA_API_BASE | No | Overrides the default production API. Set only when targeting a non-production endpoint. Trailing /v1 is optional. | https://api.easydeploy.ai |
| EDA_UI_BASE_URL | No | Prefix for ui_url fields. | https://easydeploy.ai |
| EDA_OAUTH_ENABLED | No | Set to 1 to run the HTTP transport as an OAuth 2.0 resource server. Requires EDA_COGNITO_USER_POOL_ID and EDA_COGNITO_CLIENT_ID. | 0 |
| MCP_SERVICE_TOKEN | No | Legacy single-tenant gate. If set, HTTP mode requires Authorization: Bearer <token> for /mcp (not for GET /healthz). Mutually exclusive with EDA_OAUTH_ENABLED. | |
| EDA_COGNITO_REGION | No | AWS region for the user pool. | us-east-1 |
| EDA_MCP_OAUTH_ISSUER | No | Public MCP base URL (no path) for authorization_servers and proxy .well-known/oauth-authorization-server issuer. Default: request origin. | |
| EDA_COGNITO_CLIENT_ID | No | App client ID expected in the access token's client_id claim. Required if EDA_OAUTH_ENABLED=1. | |
| EDA_COGNITO_USER_POOL_ID | No | Cognito user pool that issues access tokens for the EasyDeploy API. Required if EDA_OAUTH_ENABLED=1. | |
| EDA_REPORT_MAX_WAIT_SECONDS | No | get_model_report poll budget. | 300 |
| EDA_TRUST_FORWARDED_HEADERS | No | Set to 1 behind ALB/reverse proxy so RFC 9728 resource uses https. | 0 |
| EDA_REPORT_POLL_INTERVAL_SECONDS | No | Poll interval in seconds. | 10 |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_startedA | Return the EasyDeploy data-science playbook: how to prepare leakage-free training data, keep an honest test split, upload the files, train, validate on the holdout and predict with the model. Useful at the start of a modeling task.
|
| get_account_statusA | Get current account status: tier, training credits, prediction usage, endpoint limits. customer_id is optional; the backend resolves the account from the API key. |
| list_projectsA | List all projects for this API key (id, name, description, timestamps).
The ids are the |
| get_projectC | Fetch a single project by id. |
| create_projectA | Create or update a project (create-or-update: not idempotent).
|
| list_datasetsB | List datasets in a project (id, name, type, timestamps). |
| get_datasetA | Fetch one dataset by id (name, description, type, timestamps). Read-only. Datasets are created via |
| update_datasetA | Rename a dataset or change its description. Pass at least one of |
| start_uploadA | Open an upload session for one file and return the ways to send its bytes. One session carries one file. Train and test files (and an optional
validation file) are separate uploads, each with its own A. Host file parameter (preferred where available). Hosts that support
B. Gateway PUT (default). Called without C. Fetch from a share link. If the sandbox cannot reach the network but
the file sits at a shareable URL, The returned dataset_id: omit it to create a new dataset when |
| upload_from_urlA | Hand EasyDeploy a URL to fetch an upload session's bytes from, server-side. Use this when the sandbox has no network egress (the gateway curl failed with a connection error) but the training file already lives at a shareable URL, or when a host handed you a file download link. Accepted sources:
EasyDeploy fetches the bytes itself, up to 256 MB. The file never passes through the model, the conversation, or this tool's arguments — pass a URL, never file contents. Private, loopback, and metadata addresses are rejected, as is any host off the allowlist; the error explains which rule refused the URL. Returns the session in |
| get_upload_statusA | Poll an upload session by the
Also returns |
| complete_uploadA | Register a validated upload as a dataset (the last step of every channel). upload_request_id: opaque id returned by start_upload.
dataset_id: omit it to create a new dataset named The upload session must be in status READY — not Retrying is safe: if the session is already A file the user uploaded through the web model builder is already a dataset —
resolve it with Returns
|
| list_dataset_versionsA | List all versions of a dataset (version number, version_type, qa_status, row counts).
|
| get_dataset_versionA | Fetch one dataset version by id (row and column counts,
|
| create_dataset_versionA | Create or update a dataset version. Create (register an S3 file as a new version):
Required: Update (change qa_status on an existing version):
Required:
|
| create_modelA | Create or update a model (create-or-update: not idempotent).
|
| get_modelB | Fetch a single model by id (name, description, version count). |
| create_model_versionA | Create a model version tied to a dataset version and target column. Then call submit_training_job with the returned model version id. Pass the train dataset's version, never the test one: a test file that reaches training is no longer a holdout. EasyDeploy does not check the type. Set time_series_mode=true and time_column when forecasting ordered periods
(e.g. weekly business metrics). Time-series mode uses forward-chaining
cross-validation (TimeSeriesSplit) instead of shuffled k-fold: each fold
trains on earlier periods and scores on later ones. |
| list_modelsA | List all models in a project (id, name). |
| list_model_versionsB | List model versions.
Training state is |
| get_model_versionA | Fetch a single model version by id (status, edaReportStatus, target, timestamps). Prefer this over list_model_versions when you already know the version_id. |
| get_model_reportA | Load the EDA training report (metrics, feature analysis, performance summary).
Omit Default response is summary only (token-efficient). Set full_report=true for full detail. The report is generated after training finishes, so this tool waits for it: 45 s by
default (the server's How the model was validated. Model search scores candidates by
cross-validation: 10-fold stratified shuffled CV on ROC-AUC for classifiers,
10-fold shuffled CV on negative MSE for regressors; a version created with
time_series_mode uses forward-chaining CV (TimeSeriesSplit) instead. The
winning pipeline is then refit on all rows.
There is no separate test set. Accuracy, the confusion matrix, per-class
precision/recall and in-sample ROC-AUC are training fit (computed on the
same rows the model learned from), not a holdout estimate. The CV score is
the report's out-of-sample estimate, but it is measured inside the training
file; the holdout estimate comes from scoring your own test file with
metrics (returned next to the report, passed through unchanged):
|
| submit_training_jobA | Submit a training job for a model version. Each call starts a separate training job and spends one training credit;
Track completion: Poll Or pass the returned dataset_version_id can be omitted when the model version was created with
Returns |
| get_training_statusA | Check a training job by job_id (the Response fields:
By default returns the current status immediately. Set wait=true to block until the job reaches a terminal state (COMPLETE or
FAILED). Polls every |
| run_predictionA | Run a single ad-hoc prediction against a trained model version. Each call is a new prediction and spends a prediction credit;
|
| run_batch_predictionA | Score an entire dataset against a trained model version. Each call starts a new batch job and spends one prediction credit per row;
Holdout validation: score your test dataset version with its labels
still in it. The CSV you download via Returns immediately by default (fire-and-poll). |
| get_predictionA | Fetch prediction status and result by prediction id.
|
| list_predictionsA | List predictions (newest first). Optionally filter by project_id.
Use |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Most tools target clearly distinct resources and actions, and the upload/train/predict flows are well explained. Minor overlap exists between get_training_status and model-version status tracking, and between complete_upload and create_dataset_version for registering dataset versions.
Tool names consistently use snake_case with predictable verb_noun phrasing such as list_projects, get_dataset, create_model_version, and run_batch_prediction. The few create_* tools that also update still follow the same naming convention.
28 tools is heavy, though it reflects a broad MLOps platform spanning projects, datasets, versions, models, training, and predictions. Several list/get pairs could likely be consolidated, but few tools are clearly redundant.
The core ML lifecycle is well covered: upload, dataset/model/version creation, training, reporting, and ad-hoc/batch prediction. Gaps remain around deletion operations, model-version updates, and endpoint/deployment management hinted at by account status.