SAS MCP服务器
用于在SAS Viya环境中执行SAS代码的模型上下文协议(MCP)服务器。
特性
- 在SAS Viya计算上下文上执行SAS代码
- 使用PKCE流进行OAuth2身份验证
- 基于HTTP的MCP服务器与MCP客户端兼容
入门指南
先决条件
- 必需
- Python 3.12+ - 紫外线0.8+ - SAS Viya环境 使用计算服务 - 为MCP设置Viya环境 - 看 configuration.md
- 可选的
- 码头工人:请参阅
安装
- 克隆存储库:
git clone
cd sas-mcp-server- 安装依赖项
uv sync注意:默认情况下,这将在项目的根目录中创建一个名为.vnv的虚拟环境。
如果由于某种原因未创建虚拟环境,请运行 uv venv 然后重新运行 uv sync.
用法
- 配置环境变量:
cp .env.sample .env编辑 .env 并设置
VIYA_ENDPOINT=https://your-viya-server.com- 启动MCP服务器(请参阅 选择部署模式 在......下面
选项A:HTTP模式 (预运行服务器,从MCP客户端连接)
uv run app服务器将在以下时间可用 http://localhost:8134/mcp 默认情况下。身份验证是通过浏览器中的OAuth2-PKCE流处理的。
选项B:标准模式 (MCP客户端按需启动服务器)
集 VIYA_USERNAME 和 VIYA_PASSWORD 在你的 .env 文件,然后配置MCP客户端以直接启动服务器(见下文)。
选项C:Docker/Podman (集装箱化部署)
docker build -t sas-mcp-server .
docker run -e VIYA_ENDPOINT=https://your-viya-server.com -p 8134:8134 sas-mcp-server选择部署模式
| 超文本传输协议 | 工作室 | 码头工人 | |
|---|---|---|---|
| 它是如何运行的 | 您单独启动的长时间运行的服务器 | MCP客户端按需生成它 | 容器化HTTP服务器 |
| 认证 | OAuth2 PKCE流(浏览器弹出窗口) | 密码授予(中的凭据 .env) | OAuth2-PKCE流(浏览器弹出窗口) |
| 最佳 | 多用户或共享设置;类似生产的环境 | 单用户本地开发;快速实验 | 团队部署;CI/CD;未安装Python的环境 |
| 需要 | Python+uv | Python+uv | 仅限Docker或Podman |
| 是否已存储凭据? | 否--用户以交互方式进行身份验证 | 是--中的用户名/密码 .env | 否--用户以交互方式进行身份验证 |
| MCP客户端配置 | 将客户端指向 http://localhost:8134/mcp | 客户端运行 uv run app-stdio | 将客户端指向 http://host:8134/mcp |
快速指导:
- 开始还是探索? 使用 标准 --零设置超出
.env,您的MCP客户端管理服务器生命周期。 - 需要安全的交互式身份验证? 使用 超文本传输协议 --没有存储密码,每个用户都通过浏览器进行身份验证。
- 为团队部署还是在服务器上部署? 使用 码头工人 --可移植,不依赖于主机的Python,易于与编排器集成。
- 使用Gemini CLI? 使用 标准 --Gemini CLI不支持HTTP模式或基于浏览器的OAuth。看 Gemini CLI配置.
可用工具
代码执行
- execute_sas_code:执行SAS代码片段并检索执行结果(日志和列表输出)
数据发现(CAS管理)
- list_cas_servers:列出可用的CAS服务器
- list_caslibs:列出服务器上的CAS库
- list_castables:列出CAS库中的表
- get_catable_info:获取表元数据(行数、列数、大小)
- get_castable_columns:获取列名、类型、标签、格式
- get_catable_data:从CAS表中获取示例行
数据操作和文件
- upload_data:将CSV数据上载到CAS表中
- promote_table_to_more:在CAS中将表提升到全局范围
- 列表文件:列出Viya文件服务中的文件
- 上传文件:将文件上载到Viya文件服务
- 下载文件:下载文件内容
报告和可视化
- list_reports:列出可视化分析报告
- 获取报告:获取报告元数据和定义
- 获取报告图像:将报告部分渲染为图像
批处理作业
- submit_batch_job:提交SAS作业以进行异步执行
- get_job_status:检查作业状态
- list_jobs:列出最近/正在运行的作业
- cancel_job:取消正在运行的作业
- get_job_log:检索作业日志
模型管理和评分
- list_ml_项目:列出AutoML项目
- create_ml_项目:创建新的AutoML项目
- run_ml_项目:运行管道自动化
- list_registered_models:列出存储库中的模型
- list_models_and_decisions:列出已发布的MAS模块
- 得分数据:根据已发布的模型对数据进行评分
提示模板
- debug_sas_log:分析SAS日志中的错误及其根本原因解释
- exploredata:生成数据分析SAS代码
- 数据质量检查:生成DQ评估代码
- 统计分析:设置带有诊断功能的统计工作流程
- 优化as_code:审查和优化SAS代码
- explain_sas-code:逐块代码解释
- sas-macrobuilder:构建生产质量的SAS宏
- 生成报告:生成ODS/PROC报告代码
MCP客户端配置
示例配置在 examples/ 文件夹。下面是常见客户端的快速入门片段。
VS代码/光标/克劳德代码(.vscode/mcp.json)
HTTP模式 (要求 uv run app 单独运行):
{
"servers": {
"sas-execution-mcp": {
"url": "http://localhost:8134/mcp",
"type": "http"
}
}
}标准模式 (按需启动服务器):
{
"servers": {
"sas-execution-mcp": {
"command": "uv",
"args": ["run", "app-stdio"],
"cwd": "${workspaceFolder}"
}
}
}Gemini CLI(.gemini/settings.json)
Gemini CLI仅支持stdio模式。添加到您的 ~/.gemini/settings.json 或项目级别 .gemini/settings.json:
{
"mcpServers": {
"sas-viya-mcp": {
"command": "uv",
"args": ["run", "app-stdio"],
"cwd": "/path/to/sas-mcp-server",
"timeout": 60000
}
}
}注: 这timeout字段(以毫秒为单位)很重要-SAS Viya API调用可能需要比Gemini CLI默认值10秒更长的时间。A值60000建议使用(60秒)。集cwd走向你的绝对道路sas-mcp-server结账。
示例
通过MCP工具执行SAS代码:
data work.students;
input Name $ Age Grade $;
datalines;
Alice 20 A
Bob 22 B
;
run;
proc print data=work.students;
run;______________________________________________________________________
有关更多详细信息、配置选项和部署选项,请参阅 例子 文件夹,并按照其中列出的说明进行操作。
测试
该项目包括两层测试: 单元测试 (快速,无需凭据)和 集成测试 (针对真实的SAS Viya实例运行)。
运行单元测试
单元测试验证工具模式、请求有效载荷和内部逻辑,而无需进行任何网络调用:
./run_tests.sh或者直接通过pytest:
uv run python -m pytest -m "not integration" -v运行集成测试
集成测试针对实时Viya环境调用每个工具。它们需要凭据,可以通过CLI参数或 .env:
使用 .env (套 VIYA_ENDPOINT, VIYA_USERNAME, VIYA_PASSWORD):
./run_tests.sh --integration使用CLI参数:
./run_tests.sh --integration \
--endpoint https://your-viya-server.com \
--username youruser \
--password yourpassword仅集成测试 (跳过单元测试):
./run_tests.sh --integration-only测试结构
| 文件 | 描述 |
|---|---|
tests/test_tool_payloads.py | 所有26个工具的有效负载断言——验证URL路径、JSON正文结构、查询参数和标头 |
tests/test_integration.py | 针对真实Viya实例的端到端工作流测试 |
tests/test_tools.py | HTTP辅助函数的单元测试(_get_json, _post_json等等) |
tests/test_viya_utils.py | Viya计算会话和作业实用程序的单元测试 |
tests/test_mcp_server.py | MCP服务器和认证中间件的单元测试 |
tests/test_prompts.py | 快速模板渲染的单元测试 |
tests/test_config.py | 配置加载的单元测试 |
贡献
维护人员正在接受此项目的补丁和贡献。请阅读 贡献.md 有关向此项目提交贡献的详细信息。
许可和归属
除/static文件夹的内容外,此项目的许可证为 Apache 2.0许可证.satic文件夹中的元素归SAS所有,不在开源许可证下发布。SAS和所有其他SAS Institute股份有限公司的产品或服务名称是SAS Institute股份有限公司在美国和其他国家的注册商标或商标。®表示美国注册。
SAS软件(如SAS Viya)的单独商业许可证不包括在内,需要将这些功能与SAS软件一起使用。
所有引用的第三方商标均归其各自所有者所有,仅用于识别和参考目的,并不意味着商标所有者有任何附属关系或认可。
此项目需要使用以下内容:
- Python,请参阅Python许可证 这里
- FastMCP,基于Apache 2.0许可证
- 根据BSD 3条款
- starlette,根据BSD 3条款
- httpx,在MIT许可下
