SAP HANA MCP 服务器

为SAP HANA和SAP HANA Cloud实现模型上下文协议(MCP),使AI客户端能够发现模式、运行带护栏的SQL并合并业务/领域元数据,以便代理一致地解释代码和表。

  • by HatriGt
  • JavaScript
  • 本地部署
  • 72 星标
  • 更新于
在 GitHub 查看 HatriGt/hana-mcp-server

使用说明

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

🖥️ 克劳德桌面版

  1. 配置文件路径:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • 窗户: %APPDATA%\claude\claude_desktop_config.json
    • Linux: ~/.config/claude/claude_desktop_config.json
  2. 注册服务器;将连接设置放入 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.

  1. 重新启动克劳德桌面。

可选: 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

挑选 一 修复:

  1. 符号链接 npx / node 进入GUI可见路径 (macOS、Homebrew):

    ln -s "$(which npx)"  /usr/local/bin/npx
    ln -s "$(which node)" /usr/local/bin/node
    
  2. 在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.

  3. 注入 PATH 进入MCP env 块 --保持 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

🤝 支持

📄 许可证

麻省理工学院——见 许可证.