sap mcp配置
 
管理MCP服务器SAP凭据的标准方法。
如果您正在构建连接到SAP的MCP服务器,请使用此软件包。它通过一个共享的配置文件,在Go和Python中为您提供经过验证的、类型安全的配置。不再需要重新设计凭据加载,项目之间不再有不一致的格式。
默认配置路径(~/.config/sap-mcp/systems.json)遵循 XDG基本目录规范.
特性
- 一个配置文件,两种语言 --Go和Python读取相同的配置,由共享测试夹具保证
- JSON和YAML --使用您喜欢的任何格式(由文件扩展名自动检测)
- 热切验证 --报告 _全部_ 一次出错,因此用户可以一次性修复所有问题
- 密码在打印/日志输出中永远不会泄漏 --蒙面
str()/repr()/fmt.Println()/fmt.Sprintf("%+v")(去:fmt.Formatterpythonpydantic.SecretStr) - 加载后不可变 --Python中冻结的Pydantic模型;在Go中,将返回的结构体用作只读
.env文件支持 —SAP_CONFIG_FILE可以设置为.env文件- 易于扩展 --子类
SAPSystem在Python中或在Go中嵌入结构以添加特定于项目的字段
MCP JSON配置
此软件包与 MCP JSON配置标准.通过将MCP服务器指向共享配置文件 SAP_CONFIG_FILE 环境变量:
{
"mcpServers": {
"sap-abap": {
"command": "mcp-server-abap",
"env": {
"SAP_CONFIG_FILE": "/home/user/.config/sap-mcp/systems.json"
}
},
"sap-webgui": {
"command": "sapwebgui-mcp",
"env": {
"SAP_CONFIG_FILE": "/home/user/.config/sap-mcp/systems.json"
}
}
}
}两台服务器都读取 相同的配置文件 随着 相同的凭据 --没有重复。
安装
去
go get github.com/Hochfrequenz/sap-mcp-configpython
pip install sap-mcp-config配置文件
创建 ~/.config/sap-mcp/systems.json (或 systems.yaml --格式由扩展自动检测):
JSON
{
"default_system": "dev",
"systems": {
"dev": {
"connection_name": "DEV - ERP Development",
"host": "https://your-sap-system:44300",
"client": "100",
"user": "YOUR_USER",
"password": "YOUR_PASSWORD",
"language": "DE"
},
"prod": {
"connection_name": "PROD - ERP Production",
"host": "https://prod-sap:44300",
"client": "200",
"user": "PROD_USER",
"password": "PROD_PASSWORD",
"language": "EN"
}
}
}YAML
default_system: dev
systems:
dev:
connection_name: "DEV - ERP Development"
host: "https://your-sap-system:44300"
client: "100"
user: YOUR_USER
password: YOUR_PASSWORD
language: DE
prod:
connection_name: "PROD - ERP Production"
host: "https://prod-sap:44300"
client: "200"
user: PROD_USER
password: PROD_PASSWORD
language: EN通过以下方式覆盖配置文件位置 SAP_CONFIG_FILE 环境变量:
export SAP_CONFIG_FILE=/path/to/my/config.yaml这也适用于a .env 当前目录中的文件。
领域
| 字段 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|
connection_name | string | 否 | "" | SAP登录连接条目名称--必须与 粗体描述文本 显示在SAP登录板上,而不是系统ID(SID)。由桌面后端(如SAP GUI)使用,以打开正确的连接。 |
host | string | yes | SAP系统基本URL(必须以开头 http:// 或 https://) | |
client | string | 否 | "" | SAP客户端/管理员,必须是3位数字(例如。 "100") |
user | string | 条件 | "" | SAP用户名(OAuth2省略) |
password | string | 条件 | "" | SAP密码(OAuth2省略) |
language | string | 否 | "EN" | 登录语言: "DE" 或 "EN" |
tls_skip_verify | bool | 否 | false | 跳过TLS证书验证 |
oauth2_client_id | string | 否 | "" | 用于基于令牌的身份验证的OAuth2客户端ID |
重要提示: 字典键(例如。 "dev", "prod")仅用于在配置中查找系统。它与SAP系统本身没有连接。这 connection_name 该字段用于标识桌面后端的SAP登录条目。这种区别允许您使用不同的客户端或凭据为同一SAP系统配置多个条目:
{
"default_system": "dev-100",
"systems": {
"dev-100": {
"connection_name": "DEV - ERP Development",
"host": "https://dev-sap.example.com:44300",
"client": "100",
"user": "DEV_USER",
"password": "DEV_PASSWORD"
},
"dev-200": {
"connection_name": "DEV - ERP Development",
"host": "https://dev-sap.example.com:44300",
"client": "200",
"user": "QA_USER",
"password": "QA_PASSWORD"
}
}
}两个条目共享相同的内容 connection_name (相同的SAP登录条目),但使用不同的客户端和凭据。
验证规则:
- 必须至少定义一个系统
default_system必须引用现有系统密钥host是必需的,必须以开头http://或https://client如果已设置,则必须恰好为3位数字language如果已设置,则必须为"DE"或"EN"- 要么两者都有
user和password必须设置,或者两者都不设置(对于OAuth2)
用法
去
package main
import (
"fmt"
"os"
sapmcpconfig "github.com/Hochfrequenz/sap-mcp-config"
)
func main() {
// Load from SAP_CONFIG_FILE env var or ~/.config/sap-mcp/systems.json
cfg, err := sapmcpconfig.LoadDefault()
if err != nil {
fmt.Fprintf(os.Stderr, "Configuration error:\n%s\n", err)
os.Exit(1)
}
// Access the default system
dev := cfg.GetDefault()
fmt.Println(dev.Host, dev.Client, dev.User)
// Access a specific system
prod := cfg.Systems["prod"]
fmt.Println(prod.Host, prod.Client, prod.User)
// Password is safe to print — it won't leak
fmt.Println(dev) // Output: SAPSystem{ConnectionName:DEV - ERP Development Host:https://... Client:100 User:DEV_USER Password:*** Language:DE}
}python
import sys
from pydantic import ValidationError
from sap_mcp_config import load_default
try:
# Load from SAP_CONFIG_FILE env var or ~/.config/sap-mcp/systems.json
cfg = load_default()
except FileNotFoundError:
print("Config file not found. Create ~/.config/sap-mcp/systems.json")
sys.exit(1)
except ValidationError as e:
print(f"Configuration error:\n{e}")
sys.exit(1)
# Access the default system
dev = cfg.get_default()
print(dev.host, dev.client, dev.user)
# Access a specific system
prod = cfg.systems["prod"]
print(prod.host, prod.client, prod.user)
# Password is a SecretStr — it won't leak in print/logs
print(dev) # password=SecretStr('**********')
# Access the actual password value when needed
password = dev.password.get_secret_value()错误消息
这两个实现都急切地验证并返回 全部 错误一次。一个配置错误的文件,如下所示:
{
"default_system": "missing",
"systems": {
"dev": { "host": "ftp://wrong", "client": "1", "user": "u" }
}
}…将在一个错误中报告所有问题:
invalid configuration:
- default_system "missing" not found in systems
- system "dev": host must start with http:// or https://, got "ftp://wrong"
- system "dev": client must be a 3-digit string (e.g. "100"), got "1"
- system "dev": must have both user and password, or neither (for OAuth2)这样用户就可以在一次传球中解决所有问题,而不是玩打地鼠游戏。
扩展配置
这两种语言都使得在共享基础上添加特定于项目的字段变得容易。
python
子类 SAPSystem 添加您自己的字段:
from pydantic import ConfigDict
from sap_mcp_config import SAPSystem
class MySAPSystem(SAPSystem):
model_config = ConfigDict() # unfreeze for subclass
custom_timeout: int = 30去
嵌入 SAPSystem 在你自己的结构中:
type MySAPSystem struct {
sapmcpconfig.SAPSystem
CustomTimeout int `json:"custom_timeout"`
}发展
去
go test ./...python
pip install -e ".[tests]"
PYTHONPATH=src pytest unittests或通过毒素:
pip install tox
tox -e tests # unit tests
tox -e linting # pylint
tox -e type_check # mypy --strict
tox -e coverage # coverage with 80% minimum许可证
麻省理工学院
