使用说明
SAP HANA MCP服务器
SAP HANA MCP服务器 实现 模型上下文协议 为了 萨普·哈纳 和 SAP HANA云.AI客户端发现模式,运行带有护栏的SQL,并可选择合并 业务/域元数据 因此,代理可以一致地解释代码和表,而无需将数据库替换为记录系统。
📚 文档
| 文件 | 目的 |
|---|---|
| 此README | 先决条件,安装, 如何连接每个客户端、能力总结、配置备忘单、故障排除 |
| 更改日志.md | 发布历史 --按版本(最新)列出的功能和修复 0.3.1) |
| docs/README.md | 指数 /docs |
| docs/ENVIRONMENT.md | 权威的 env引用:每个变量,默认值, 硬边界、HTTP身份验证、安全说明 |
| docs/configuration-samples.md | 复制粘贴:连接配置文件(单容器,MDC),语义JSON,分页指针 |
| docs/local-http-mcp.md | 本地 超文本传输协议 MCP: npm run start:http,光标 mcp.json,卷曲烟雾检查 |
✅ 先决条件
- Node.js 18+
- A. 萨普·哈纳 或 SAP HANA云 从运行服务器的计算机在SQL端口上可访问的数据库
- 一 MCP客户端 (Claude Desktop、Claude Code、VS Code、Cursor、Cline、Windsurf或自定义HTTP客户端)
- 凭证 通过env提供(请参见 安全)
📦 安装
| 方法 | 使用时 |
|---|---|
npx + -y hana-mcp-server 在MCP配置中 |
默认 --无全局安装 |
npm install -g hana-mcp-server |
你需要 hana-mcp-server 上 PATH |
克隆+ node hana-mcp-server.js |
开发或固定本地构建 |
HTTP入口点 (来自克隆): npm run start:http --默认绑定 127.0.0.1:3100,路径 /mcp。参见 托管和HTTP.
🎯 用例
| 观众 | 交通 | 下一步 |
|---|---|---|
| 聊天/lite用户 | stdio | 克劳德桌面版 |
| 开发人员(Claude Code、VS Code、Cline、Cursor、Windsurf) | stdio | IDE和代码代理 |
| 带有AI代理的业务应用程序(您通过HTTP托管MCP) | HTTP | 托管和HTTP |
🖥️ 克劳德桌面版
-
配置文件路径:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\claude\claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
- macOS:
-
注册服务器;将连接设置放入
env(参见 配置;完整配置文件JSON 配置示例.md).以下示例包括HANA_INSTANCE_NUMBER/HANA_DATABASE_NAME为了 移动数据中心--如果使用单个容器数据库,请删除它们。
{
"mcpServers": {
"HANA Database": {
"command": "npx",
"args": ["-y", "hana-mcp-server"],
"env": {
"HANA_HOST": "your-hana-host.com",
"HANA_PORT": "443",
"HANA_USER": "your-username",
"HANA_PASSWORD": "your-password",
"HANA_SCHEMA": "your-schema",
"HANA_SSL": "true",
"HANA_ENCRYPT": "true",
"HANA_VALIDATE_CERT": "true",
"HANA_CONNECTION_TYPE": "auto",
"HANA_INSTANCE_NUMBER": "10",
"HANA_DATABASE_NAME": "HQQ",
"LOG_LEVEL": "info",
"ENABLE_FILE_LOGGING": "true",
"ENABLE_CONSOLE_LOGGING": "false"
}
}
}
}
如果CLI已打开 PATH,您可以使用 "command": "hana-mcp-server" 并省略 args.
- 重新启动克劳德桌面。
可选: HANA MCP UI — npx hana-mcp-ui 用于编辑envs并部署到Claude Desktop。
💻 IDE和代码代理
标准 只有;相同 env 按键如上。 典型示例——克劳德代码 (~/.claude.json 或项目 .mcp.json).这 env 下面的块包括 HANA_DATABASE_NAME 为了 MDC租户 哈娜;对于大多数单容器设置,省略它。
{
"mcpServers": {
"hana": {
"type": "stdio",
"timeout": 600,
"command": "npx",
"args": ["-y", "hana-mcp-server"],
"env": {
"HANA_HOST": "<host>",
"HANA_PORT": "31013",
"HANA_USER": "<user>",
"HANA_PASSWORD": "<password>",
"HANA_SCHEMA": "SAPABAP1",
"HANA_DATABASE_NAME": "HQQ",
"HANA_SSL": "false",
"HANA_ENCRYPT": "false",
"HANA_VALIDATE_CERT": "false",
"LOG_LEVEL": "info",
"ENABLE_FILE_LOGGING": "true",
"ENABLE_CONSOLE_LOGGING": "false"
}
}
}
}
使用相同 command, args,以及 env 在VS Code、Cline、Cursor和Windsurf中。更改后 env,在IDE中重新启动MCP服务器连接。
🌐 托管和HTTP
运行HTTP传输 从该存储库的签出 (之后 npm install).已出版 npx hana-mcp-server 路径是 标准 只有。
npm run start:http
基于HTTP的游标/本地IDE: 集 HANA_* 在运行的shell(或进程管理器)中 start:http,然后添加一个HTTP MCP条目 url http://127.0.0.1:3100/mcp ("type": "fetch" 或 "type": "http",具体取决于游标版本)。看 docs/local-http-mcp.md 和 ./scripts/start-http-mcp.sh.
| 主题 | 详细信息 |
|---|---|
| 端点 | POST JSON-RPC到 /mcp (默认基数 http://127.0.0.1:3100) |
| 调整 | MCP_HTTP_HOST, MCP_HTTP_PORT |
| 健康 | GET /health → 200 |
| CORS | MCP_HTTP_ALLOWED_ORIGINS — 环境md§7 |
可选承载JWT(OAuth2/OIDC)
| 变量 | 角色 |
|---|---|
MCP_HTTP_AUTH_ENABLED |
true → 需要 Authorization: Bearer <token> 上 POST /mcp |
MCP_HTTP_JWT_ISSUER |
发行人/JWKS(省略 SAP 业务技术云平台 绑定XSUAA) |
MCP_HTTP_JWT_AUDIENCE |
可选预期 aud |
MCP_HTTP_JWT_SCOPES_REQUIRED |
可选范围列表 |
SAP BTP: 绑定XSUAA, MCP_HTTP_AUTH_ENABLED=true,分配角色集合。细节: 环境md§7.
🔒 安全
- 秘密:
HANA_PASSWORD、JWT材料和带有嵌入式凭据的URL属于env或秘密管理器,而不是git。 - 供应链: 更喜欢
npx -y从CI和共享桌面中发布的包中,而不是可变的全局安装。 - HTTP: 为本地主机之外的任何内容启用JWT验证;将服务置于TLS终止和网络策略的反向代理之后。
进一步说明: 环境md§9.
🎯 能力
34工具 在HANA Cloud上验证了六个领域。
| 区域 | 工具 | 您将获得什么 |
|---|---|---|
| 连接和配置 | hana_show_config hana_test_connection hana_show_env_vars hana_get_session_info |
验证连接,检查配置,查看当前用户/模式/数据库/版本 |
| 架构浏览 | hana_list_schemas hana_list_tables hana_describe_table hana_explain_table hana_search_tables hana_search_columns |
分页模式/表列表、列元数据、跨模式搜索、可选的业务含义覆盖 |
| SQL执行 | hana_execute_query hana_query_next_page |
带可选行/列/单元格上限的参数化SQL,分页(maxRows/offset/includeTotal),以及快照继续 |
| 结构分析 | hana_list_constraints hana_list_foreign_keys hana_list_indexes hana_describe_index hana_list_views hana_describe_view hana_list_synonyms hana_list_privileges hana_get_ddl |
PK/UK/FK/检查约束、索引、具有SQL定义的视图、同义词、有效权限、CREATE语句DDL |
| 代码对象 | hana_list_procedures hana_describe_procedure hana_list_functions hana_describe_function hana_list_calculation_views hana_list_sequences |
存储过程、标量/表函数、SAP BW/S4计算视图(_SYS_BIC),序列 |
| 数据和性能 | hana_get_table_stats hana_get_sample_data hana_get_column_stats hana_explain_plan hana_get_dependencies hana_get_partition_info hana_get_expensive_queries |
行数、示例行、不同/空统计数据、查询执行计划、对象依赖图、分区信息、最昂贵语句 |
| DML防护 | -- | 插入/更新/删除/截断 默认情况下被阻止;通过以下方式单独选择加入 HANA_ALLOW_INSERT / HANA_ALLOW_UPDATE / HANA_ALLOW_DELETE |
| 资源 | hana:///schemas hana:///schemas/{s}/tables/{t} |
用于模式和表枚举的MCP资源URI; truncated 大型有效载荷上的标志 |
| 领域知识 | via hana_explain_table |
可选的JSON语义覆盖(表描述、列含义、代码值映射)-- 配置示例.md |
🛠️ 配置
变量适用于 标准 (env 在客户端配置中)以及 超文本传输协议 (工艺环境)。 重启 更改后。
名称、默认值和钳位范围的真实来源: docs/ENVIRONMENT.md.
复制粘贴连接JSON(单容器/MDC): docs/configuration-samples.md#连接配置文件env json.
必需
| 参数 | 说明 | 示例 |
|---|---|---|
HANA_HOST |
主机名或IP | hana.company.com |
HANA_USER |
数据库用户 | DBADMIN |
HANA_PASSWORD |
数据库密码 | (秘密) |
连接和TLS
| 参数 | 默认值 | 备注 |
|---|---|---|
HANA_PORT |
443 |
MDC SQL端口经常 3NN13 (例如。 31013) |
HANA_SCHEMA |
-- | 工具省略时的默认值 schema_name |
HANA_CONNECTION_TYPE |
auto |
auto, single_container, mdc_system, mdc_tenant |
HANA_INSTANCE_NUMBER |
-- | MDC实例id(例如。 10) |
HANA_DATABASE_NAME |
— | 租户 MDC的名称(例如。 HQQ, HQP)--仅会话数据库 |
HANA_SSL / HANA_ENCRYPT / HANA_VALIDATE_CERT |
true |
驱动程序的TLS和证书验证标志 |
日志记录
| 参数 | 默认值 | 备注 |
|---|---|---|
LOG_LEVEL |
info |
error … debug |
ENABLE_FILE_LOGGING |
false* |
true 启用文件日志 |
ENABLE_CONSOLE_LOGGING |
true |
经常 false 让stdio减少stderr噪声 |
*代码默认值;示例经常将文件日志设置为 true.
限制(查询、列表、资源)
| 参数 | 默认值 | 用途 |
|---|---|---|
HANA_QUERY_LIMITS_ENABLED |
false |
设置为 true 以启用自动行/列/单元格大写。当 false,用户提供 maxRows, offset,以及 includeTotal 仍然工作 |
HANA_QUERY_TIMEOUT_MS |
0 |
语句超时(ms); 0 =禁用。每次呼叫 timeout_ms 覆盖。 |
HANA_MAX_RESULT_ROWS |
50 |
每行的最大行数 hana_execute_query 页面(启用限制时处于活动状态) |
HANA_MAX_RESULT_COLS |
50 |
每行返回的最大列数(启用限制时处于活动状态) |
HANA_MAX_CELL_CHARS |
200 |
截断长单元格文本(启用限制时处于活动状态) |
HANA_QUERY_DEFAULT_OFFSET |
0 |
默认值 offset (启用限制时激活) |
HANA_LIST_DEFAULT_LIMIT |
200 |
列表工具:默认和最大页面大小 |
HANA_RESOURCE_LIST_MAX_ITEMS |
500 |
大写嵌入名称 hana:/// 有效载荷 |
HANA_QUERY_SNAPSHOT_TTL_MS |
300000 |
查询分页的快照id生存期 |
HANA_CONNECTION_POOL_SIZE |
3 |
HANA连接池大小(1–20) |
DML权限
INSERT、UPDATE和DELETE是 默认情况下被阻止。将每个设置为 true 允许:
| 参数 | 默认值 | 用途 |
|---|---|---|
HANA_ALLOW_INSERT |
false |
许可证 INSERT 通过 hana_execute_query |
HANA_ALLOW_UPDATE |
false |
许可证 UPDATE 通过 hana_execute_query |
HANA_ALLOW_DELETE |
false |
许可证 DELETE 和 TRUNCATE 通过 hana_execute_query |
业务/域JSON(HANA_SEMANTICS_*)
| 参数 | 默认值 | 用途 |
|---|---|---|
HANA_SEMANTICS_PATH |
-- | 字典JSON的文件路径(胜过URL) |
HANA_SEMANTICS_URL |
-- | HTTPS URL格式相同 |
HANA_SEMANTICS_TTL_MS |
60000 |
缓存/重新加载行为 |
样品: 配置示例.md.
🔧 故障排除
| 症状 | 检查 |
|---|---|
spawn npx ENOENT / spawn hana-mcp-server ENOENT 在客户端日志中 |
客户端找不到 npx / hana-mcp-server 上 PATH --看 客户端找不到 npx 在......下面 |
| 连接被拒绝 | HANA_HOST, HANA_PORT,网络路径 |
| 身份验证失败/无客户端 | 密码、用户、, HANA_DATABASE_NAME 关于租户;使用连接测试工具查看驱动程序消息 |
| TLS错误 | HANA_VALIDATE_CERT,信任商店 |
| 错误或空对象 | MDC:租户驱动器可见性;相同的架构名称可能因租户而异 |
| SQL需要另一个数据库前缀 | hana_execute_query 不重写SQL;使用HANA所需的三个部分名称(例如。 HSP.SAPABAP1.TABLE)虽然 HANA_DATABASE_NAME 保持您连接的租户(例如。 HQP) |
调试: LOG_LEVEL=debug, ENABLE_CONSOLE_LOGGING=true,重新启动。
客户端找不到 npx (spawn ENOENT)
从Dock或开始菜单启动的GUI客户端(Claude Desktop、Cursor、VS Code等)继承了最小的 PATH 并且可能看不到安装在下面的节点工具 /opt/homebrew/bin, ~/.nvm/..., mise,或 volta。这会影响 每 npx-基于MCP,而不仅仅是这个服务器。MCP客户端日志中显示的错误为:
Connection failed: spawn npx ENOENT
挑选 一 修复:
-
符号链接
npx/node进入GUI可见路径 (macOS、Homebrew):ln -s "$(which npx)" /usr/local/bin/npx ln -s "$(which node)" /usr/local/bin/node -
在MCP配置中使用绝对路径 --最便携,没有
PATH附属国。解析路径which node和npm root -g:{ "mcpServers": { "hana": { "type": "stdio", "command": "/opt/homebrew/bin/node", "args": ["/opt/homebrew/lib/node_modules/hana-mcp-server/hana-mcp-server.js"], "env": { "HANA_HOST": "...", "HANA_USER": "...", "HANA_PASSWORD": "..." } } } }需要一次性
npm install -g hana-mcp-server. -
注入
PATH进入MCPenv块 --保持npx形式:"env": { "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin", "HANA_HOST": "...", "HANA_USER": "...", "HANA_PASSWORD": "..." }
更改后重新启动MCP客户端。如果 npx 然后失败 EPERM 上 ~/.npm/_cacache,npm缓存中有以前根目录下的文件 sudo npm --修复与 sudo chown -R "$(whoami)" ~/.npm 或设置 "NPM_CONFIG_CACHE": "/tmp/hana-mcp-npm-cache" 同样地 env 块。
🖥️ HANA MCP UI
npx hana-mcp-ui
🏗️ 建筑
hana-mcp-server/
├── src/
│ ├── server/ # MCP lifecycle, resources, HTTP transport
│ ├── tools/ # 34 tools: schema, SQL, discovery, config
│ ├── database/ # HANA client, connection pool, executor, query runner
│ ├── semantics/ # Optional semantics / domain JSON loader
│ ├── utils/ # Logger, config, validators, formatters
│ ├── query-snapshot-store.js
│ └── constants/ # MCP constants, tool definitions
├── tests/
├── docs/ # README index, ENVIRONMENT.md, configuration-samples.md, diagrams
└── hana-mcp-server.js # stdio entry point
📦 包裹
| 运行时 | Node.js 18+ |
| 平台 | macOS、Linux、Windows |
| 依赖项 | @sap/hana-client, axios, jose |
🤝 支持
- 问题: GitHub问题
- UI: HANA MCP UI
📄 许可证
麻省理工学院——见 许可证.