SAS MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VIYA_ENDPOINT | Yes | The URL of your SAS Viya server |
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 |
|---|---|
| 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. IMPORTANT — state persists between calls: the code runs in a reusable
compute session that is kept warm and shared across calls (per user),
so SAS state — WORK tables, macro variables, and assigned librefs —
survives between successive Tip: to reach CAS data, prefer |
| list_compute_contextsB | List available compute contexts on the Viya environment. |
| reset_compute_sessionA | Reset (delete) the cached compute session for a compute context. The server keeps one reusable SAS compute session per user and compute
context so repeat calls skip the slow session spin-up; SAS state (WORK
tables, macro variables, assigned librefs) therefore persists across
|
| catalog_searchA | Search the SAS Information Catalog for assets (tables, columns, reports, ...). The catalog is a metadata index across the whole Viya environment, so this
finds assets without needing to know their server/library first. Each hit
includes the asset's The
|
| catalog_search_helperA | Discover how to search the catalog: list facets, or values for one facet. Call with no |
| catalog_find_instanceA | Resolve the catalog instance for a source-asset URI.
|
| catalog_list_agentsA | List SAS Information Catalog discovery agents. Agents crawl a data source (server/library) to discover assets and collect
their metadata into the catalog. Use |
| catalog_run_agentA | Start a catalog discovery agent run (asynchronous). Triggers the agent to crawl its data source and populate/refresh catalog
metadata. The run is asynchronous — results are applied to the catalog in
the background; poll |
| catalog_get_agent_historyA | Get the execution history of a catalog agent's runs. Each record reports a run's status and how much metadata it populated
(tables enumerated/added/updated/removed), so you can confirm a run started
by |
| catalog_run_adhoc_analysisA | Submit an ad-hoc analysis (profiling) job for a table in the catalog. Profiles the table — computing the data dictionary, column statistics, and
data-quality metrics that The three NLP job parameters are enabled by default — they drive the
semantic enrichment that populates an asset's |
| catalog_get_adhoc_analysisA | Get the status of an ad-hoc analysis job, and whether its profile is ready. The job reaching a terminal |
| catalog_download_table_profileA | Download a catalog table's data dictionary and profile as CSV. Returns the table's column metadata plus, by default, its profile (column
statistics and data-quality metrics). If the table has not been profiled yet,
this returns a recommendation to run Identify the table by either |
| list_compute_librariesA | List the SAS libraries (librefs) assigned in a compute context. Runs in the reusable per-user compute session for the context, so it
also sees libraries created by prior |
| list_compute_tablesA | List the tables in a SAS library within a compute context. These are SAS/Compute tables (e.g. WORK or an assigned libref), distinct from in-memory CAS tables (see list_castables). Runs in the reusable per-user compute session for the context. |
| list_compute_columnsA | List the columns of a table in a SAS library within a compute context. Runs in the reusable per-user compute session for the context. |
| list_cas_serversA | List available CAS servers on the Viya environment. |
| list_caslibsB | List CAS libraries (caslibs) available on a CAS server. |
| list_castablesB | List tables in a CAS library. |
| list_source_tablesA | List source tables that are NOT yet loaded into memory in a CAS library. These are the candidates for |
| 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). A missing table returns a structured |
| get_castable_dataB | Fetch rows from a CAS table with column names. |
| query_dataA | Run a FedSQL SELECT against CAS or compute data and return the rows. One SQL surface over both storage tiers, so exploring a caslib table and a SAS library table use the same tool and the same dialect. The query runs in the reusable compute session; nothing is persisted — the result is materialised into session scratch, read back, and dropped. Pick the tier with
Dialect notes (FedSQL, not PROC SQL): joins (inner/left/right/full/
cross), subqueries, UNION, GROUP BY/HAVING/ORDER BY, and scalar functions
work. There is no WITH/CTE — use a derived table Row capping is done by this tool, not by your SQL: any LIMIT you write is
ignored in favour of |
| upload_dataA | Upload a data file into a CAS table — read by the server, not the model. Provide the data by reference through exactly one of:
Either way the bytes are read server-side and never pass through the calling
model's context window. To create a small table you are building inline (no
file or URL), use the The casManagement uploadTable endpoint only accepts an uploaded file (multipart
form-data) and has no URL parameter, so Formats. Per the uploadTable API: csv, xls, xlsx (single sheet), sas7bdat,
sashdat; |
| upload_inline_dataA | Create a small CAS table from inline delimited text passed as a string. Use this only for tiny, hand-built tables — a lookup/mapping table the model
constructs on the fly, or a quick test table — because the whole payload travels
through the model's context as a tool argument. For anything larger, or any file
you already have, use Text formats only: |
| promote_table_to_memoryA | Load a source table into CAS memory at global scope (visible to all sessions). Loads the table from its caslib data source and promotes it to global
scope via the casManagement |
| list_filesB | List files in the Viya Files Service. |
| upload_fileA | Upload a file to the Viya Files Service, optionally into a Content folder. Provide the file content through exactly one of:
|
| download_fileB | Download file content from the Viya Files Service. |
| list_reportsB | List Visual Analytics reports. |
| get_reportA | Get a Visual Analytics report's metadata and definition. |
| export_reportA | Export a Visual Analytics report (or specific report objects) in any format the VA service exposes, via its synchronous export endpoints. Formats (
|
| describe_report_objectsA | Discover what a Visual Analytics report can contain — operations and objects. Call this to learn how to build a report before calling
|
| create_reportA | Create a Visual Analytics report and return its id for further edits. Creates an empty report shell, or — if you pass |
| apply_report_operationsA | Apply an ordered batch of operations to a report — the authoring workhorse. This is how you add pages, add objects (any of the ~60 VA visual, control,
and content types), set parameters, and swap data sources. Operation keys (one per array element): Layout & titles (see
The tool validates every operation against the object catalog before any HTTP call (unknown/typo'd object type, non-addable object, bad data-role names or arity, disallowed object/placement keys) and reports ALL invalid operations at once. It also handles the ETag optimistic-concurrency handshake for you, retrying once transparently on a concurrent edit. |
| get_report_outlineA | Read a report's structure: pages → objects with the handles other tools need. Reduces the stored report definition to a compact outline —
per page its internal name and label, per object its name (
Returns |
| copy_reportA | Copy a Visual Analytics report to a new report, returning the copy's id. Useful for tailoring a report to a new audience or for the copy-and-replace
pattern — copy, then |
| delete_reportA | Delete a Visual Analytics report and its content. There is no per-object undo in the report API, so deleting and rebuilding
(or copying first) is how you discard an unwanted report. Returns
|
| submit_batch_jobB | Submit a SAS job for asynchronous execution via the Job Execution service. |
| get_job_statusB | Check the status of a submitted job. |
| list_jobsC | List recent jobs from the Job Execution service. |
| cancel_jobB | Cancel a running job. |
| get_job_logB | Retrieve the log of a completed job. |
| list_ml_projectsC | List AutoML pipeline automation projects. |
| create_ml_projectA | Create a new AutoML pipeline automation project from a CAS table. The training table must already be loaded into CAS memory at global
scope. This tool verifies that first and returns an actionable error
otherwise (use |
| register_ml_champion_modelB | Register the champion model from an AutoML pipeline automation project to the Model Repository. |
| publish_ml_champion_modelB | Publish the champion model from an AutoML pipeline automation project to the Model Repository. |
| run_ml_projectC | Run an AutoML pipeline automation project. |
| list_registered_modelsB | List models in the Model Repository. |
| list_publishing_destinationsB | List available publishing destinations. |
| list_mas_modulesB | List published scoring models and decisions (MAS modules). |
| get_mas_module_step_signatureA | Fetch a MAS module step's input/output variable signature. Call before |
| score_dataB | Score data against a published model or decision (MAS module). |
| create_business_rulesetA | Create a new SAS Business Rules rule set. A rule set with no rules cannot be used in a decision flow — follow up
with |
| update_business_rulesetA | Update an existing SAS Business Rules rule set's name/description/signature. Changing the signature can invalidate existing rules that reference
removed variables — check with |
| get_business_rulesetA | Fetch a single SAS Business Rules rule set by ID. |
| list_business_rulesetsA | List SAS Business Rules rule sets, optionally filtered by name substring. |
| delete_business_rulesetA | Permanently delete a SAS Business Rules rule set. Only call this once the rule set is confirmed unused by any decision flow — deleting a rule set still referenced by a decision fails. |
| lock_business_ruleset_revisionA | Lock the current state of a rule set as an immutable revision. Decision steps reference a specific rule set revision (versionId), not the live working copy, so a revision must exist before wiring a rule set into a decision flow — call again after editing rules if a decision needs to pick up the changes. The revision-creation request replaces the rule set's full content
from the body sent, so this fetches the rule set with its rules
included ( |
| list_business_ruleset_revisionsA | List all locked revisions of a rule set. |
| create_business_ruleA | Create a new rule inside an existing SAS Business Rules rule set. A rule set can hold multiple rules, each evaluated per its conditional
type. Condition/action expressions must include the variable name
directly (e.g. |
| update_business_ruleC | Update an existing rule inside a SAS Business Rules rule set. |
| get_business_ruleA | Fetch a single rule's definition from a SAS Business Rules rule set. |
| list_business_rulesA | List all rules inside a SAS Business Rules rule set. |
| delete_business_ruleA | Permanently delete a rule from a SAS Business Rules rule set. |
| create_decision_flowB | Create a new SAS Intelligent Decisioning flow chaining rule set steps. |
| update_decision_flowA | Update an existing SAS Intelligent Decisioning flow. Pass ALL rule set steps (existing + new) — the full flow is replaced on update, it is not a partial patch. |
| get_decision_flowB | Fetch the current state of a SAS Intelligent Decisioning flow. |
| list_decision_flowsC | List SAS Intelligent Decisioning flows, optionally filtered by name substring. |
| delete_decision_flowA | Permanently delete a SAS Intelligent Decisioning flow. |
| get_decision_flow_codeB | Retrieve the generated DS2 execution code for a decision flow. |
| lock_decision_flow_revisionA | Lock the current state of a decision flow as an immutable revision. Call after a successful create/update to freeze the approved state as
a point-in-time snapshot referenceable by |
| list_decision_flow_revisionsA | List all locked revisions of a decision flow. |
| get_decision_flow_revisionB | Fetch the content of a specific locked decision revision. |
| publish_decision_flowA | Publish a locked decision revision to a Micro Analytic Score (MAS) destination. Required before Publishing is asynchronous and the resulting MAS module ID is
server-generated — it is NOT |
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. |
| build_va_dashboard | Build a polished multi-page Visual Analytics dashboard from a CAS table, using the report-authoring tools (discover → shape → structure → polish → verify). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sassoftware/sas-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server