SAS MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_API_KEY | No | Optional API key to require from MCP clients (sent as X-API-Key or Authorization: Bearer) | |
| MCP_TRANSPORT | No | MCP transport to use: set to 'sse' to serve SSE instead of the default Streamable HTTP (http) | |
| SCOPE_ENFORCE | No | Whether to enforce the scope: 'true' (default) blocks out-of-scope access, 'false' only hides from listings | |
| USE_CASE_NAME | No | Name of the use case for scoping the assistant (returned by get_use_case) | |
| VIYA_ENDPOINT | No | The base URL of your SAS Viya environment (e.g. https://your-viya-server.com) | |
| VIYA_PASSWORD | No | Your SAS Viya password for server-side authentication (stdin/direct HTTP modes) | |
| VIYA_USERNAME | No | Your SAS Viya username for server-side authentication (stdin/direct HTTP modes) | |
| ALLOWED_MODELS | No | Comma- or newline-separated list of allowed model IDs or names | |
| ALLOWED_TABLES | No | Comma- or newline-separated list of allowed CAS tables (table, caslib.table, or server.caslib.table) | |
| ALLOWED_DECISIONS | No | Comma- or newline-separated list of allowed decision / MAS-module IDs or names | |
| VIYA_REFRESH_TOKEN | No | A refresh token for headless authentication to SSO/federated environments (e.g. Okta) when password grant is not available | |
| USE_CASE_DESCRIPTION | No | Description of the use case for scoping the assistant |
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_use_caseA | Return this assistant's use-case scope: the datasets, models, and decisions it is limited to. Call this first to learn which resources you may work with. If the
assistant is not scoped to a use case, |
| execute_sas_codeA | Executes the provided SAS code in the Viya environment and returns information about the completed Job. This will create a job definition for the SAS code, execute it, and then retrieve the results. |
| render_chartA | Render an interactive chart in the chat UI. Use whenever the user asks to show / plot / visualize / graph / compare
data, or when a chart makes the answer clearer than text. Call this AFTER
fetching the rows with the data tools (e.g. get_castable_data) or computing
them with execute_sas_code, then pass the rows in as The chart is drawn by the user interface from this call; the tool itself does no plotting and returns the normalized chart spec. |
| list_cas_serversA | List available CAS servers on the Viya environment. |
| list_caslibsA | List CAS libraries (caslibs) available on a CAS server. |
| list_castablesB | List tables in a CAS library. |
| get_castable_infoA | Get metadata for a CAS table (row count, column count, size, etc.). |
| get_castable_columnsA | Get column metadata for a CAS table (names, types, labels, formats). |
| get_castable_dataB | Fetch rows from a CAS table with column names. |
| upload_dataC | Upload CSV data into a CAS table. |
| promote_table_to_memoryA | Promote a CAS table to global scope (makes it visible to all sessions). |
| list_filesB | List files in the Viya Files Service. |
| upload_fileB | Upload a file to the Viya Files Service. |
| download_fileB | Download file content from the Viya Files Service. |
| generate_synthetic_dataA | Generate a synthetic CAS table from a column specification. Use this to create realistic mock data on request (e.g. a driver-risk dataset for a demo). Recommended flow: first PROPOSE the column schema to the user in chat and get their agreement, THEN call this tool. The rows are generated in SAS and saved to CAS as a promoted (global) table, immediately usable by the data, charting, AutoML, and scoring tools. If a table with the requested name already exists, a numbered variant is created automatically (no error). Very large requests are capped to a safe maximum rather than failing. |
| submit_batch_jobA | Submit a SAS job for asynchronous execution via the Job Execution service. |
| get_job_statusB | Check the status of a submitted job. |
| list_jobsB | List recent jobs from the Job Execution service. |
| cancel_jobC | Cancel a running job. |
| get_job_logA | Retrieve the log of a completed job. |
| list_ml_projectsB | List AutoML pipeline automation projects. |
| create_ml_projectA | Create a new AutoML pipeline automation project. SAS auto-detects the target's measurement level from the data; for
classification targets, |
| run_ml_projectC | Run an AutoML pipeline automation project. |
| delete_ml_projectA | Delete an AutoML pipeline automation project. Use this to remove a project (for example, to start over with a different configuration) instead of calling the REST API from SAS code. |
| list_registered_modelsA | List models in the Model Repository. |
| list_models_and_decisionsB | List published scoring models and decisions (MAS modules). |
| score_dataB | Score data against a published model or decision (MAS module). |
| explain_dataA | Explain a column of a CAS table in relation to the other columns (SAS Insights). Returns natural-language descriptions of the variable, its outliers, and variable-screening results — useful for understanding which variables drive a target before exploring or modelling the data. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| debug_sas_log | Analyze a SAS log for errors, warnings, and notes with root-cause explanations and suggested fixes. |
| explore_dataset | Generate comprehensive SAS data-profiling code (CONTENTS, MEANS, FREQ, UNIVARIATE). |
| data_quality_check | Generate SAS code for a data quality assessment (completeness, uniqueness, validity). |
| statistical_analysis | Set up a complete SAS statistical analysis workflow with diagnostics. |
| optimize_sas_code | Review and optimize SAS code for performance, readability, or both. |
| explain_sas_code | Provide a block-by-block explanation of SAS code, tailored to skill level. |
| sas_macro_builder | Build a production-quality reusable SAS macro. |
| generate_report | Generate SAS ODS/PROC REPORT code for formatted output. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Most tools are clearly separated by resource and action, but list_models_and_decisions and list_registered_models both list models from different repositories, and execute_sas_code vs submit_batch_job are similar (sync vs async), creating minor ambiguity.
All tool names follow a consistent lowercase verb_noun snake_case pattern (e.g., list_ml_projects, score_data, cancel_job), with no mixed conventions or vague verbs.
28 tools is on the heavy side, and the set covers many domains (AutoML, data, files, jobs, CAS, charts), but the count is justified by the platform's breadth; still, several tools could be merged (e.g., the two model listing tools).
The tool set covers core workflows for AutoML, data exploration, and job execution, but lacks update operations for ML projects and delete operations for tables/files, leaving some lifecycle gaps.