S/4HANA MCP Server
S/4HANA MCP Server
Сервер MCP, предоставляющий 38 инструментов для SAP S/4HANA (Cloud Public Edition и on-premise Private Edition) через OData V2, OData V4 и SOAP: бизнес-партнеры, продукты, ценообразование продаж, склады, заказы на закупку, информационные записи закупок, счета поставщиков (включая проводку и отмену), листы ввода услуг, журнальные записи, центры затрат и организационная структура финансов.
Инструменты записи (create_*, cancel_supplier_invoice, check_invoice_posting_readiness) и get_finance_structure возвращают свой результат встроенно в виде JSON. Каждый другой (читающий) инструмент записывает свой результат — CSV для коллекций, Markdown для отдельных записей — в песочницу E2B и возвращает путь(и) к файлу(ам), вместо того чтобы встраивать потенциально большие наборы результатов SAP (сотни бизнес-партнеров, полные детали элементов журнальных записей и т.д.) непосредственно в контекст вызывающего агента. Этот сервер подключается только к песочнице E2B, которая уже принадлежит вашему MCP-клиенту — он никогда не создает новую. Вашему клиенту нужна собственная интеграция E2B (SDK E2B или среда Claude с соответствующим доступом к выполнению кода), чтобы прочитать файлы обратно; см. Настройка песочницы E2B.
Быстрый старт
git clone https://github.com/ilia-inovaflow/s4hana-mcp-server.git
cd s4hana-mcp-server
npm install
npm run build
cp .env.example .env # fill in your E2B sandbox + SAP connection details
npm start # stdio transport (Claude Desktop, MCP Inspector, etc.)Для локальной разработки без предварительной сборки: npm run dev.
Related MCP server: SAP OData MCP Server
Настройка песочницы E2B
Зарегистрируйтесь для получения бесплатного API-ключа на e2b.dev, затем запустите (или повторно используйте) песочницу, из которой ваш MCP-клиент может читать файлы, и установите:
E2B_API_KEY=<your E2B API key>
SANDBOX_ID=<an already-running sandbox ID> # stdio only — HTTP takes this per-sessionПри использовании HTTP-транспорта SANDBOX_ID вместо этого передается для каждой сессии через заголовок запроса sandbox-id — это полезно, когда один работающий экземпляр сервера обслуживает несколько вызывающих, у каждого из которых своя песочница.
Это не связано с собственным пробным хостом SAP sandbox.api.sap.com ниже — «sandbox» в этом README означает две разные вещи.
Попробуйте без собственного тенанта SAP
SAP публикует бесплатную публичную песочницу API только для чтения на sandbox.api.sap.com, с которой этот сервер взаимодействует из коробки. Зарегистрируйтесь для получения бесплатного API-ключа на api.sap.com, затем установите:
SAP_HOST=https://sandbox.api.sap.com
SAP_CLIENT_ID=<your sandbox API key>Не требуется имя пользователя, пароль или настройка OAuth — песочница аутентифицируется с помощью одного заголовка APIKey. Инструменты бизнес-партнеров, продуктов и ценообразования сразу работают с демонстрационными данными песочницы (вам все еще нужна песочница E2B выше, чтобы получать результаты инструментов чтения).
Подключение реального тенанта SAP
Установите SAP_HOST на URL вашего тенанта и выберите один из трех режимов аутентификации через SAP_AUTH_MODE:
Режим | Сценарий использования | Требуемые переменные |
| Быстрое тестирование, локальные системы без настроенного OAuth |
|
| S/4HANA Cloud Public Edition, межсервисное взаимодействие (OAuth 2.0 Client Credentials) |
|
| Делегированный пользователем OAuth Authorization Code — только HTTP-транспорт, вызывающий предоставляет свежий токен для каждого запроса через заголовок | нет (токен поступает от MCP-клиента) |
SAP_CLIENT (номер клиента/манданта SAP, например 100) по умолчанию равен 100, если не задан.
Два семейства API по замыслу SAP требуют базовой или X.509-аутентификации и отклоняют OAuth: проводка журнальных записей (create_journal_entry, SOAP SAP_COM_0002) и детальные представления бухгалтерских документов (get_journal_entry, search_journal_entries с document_level=true). Все остальное работает в любом из трех режимов.
См. .env.example для полного списка переменных, включая необязательное переопределение SAP_JE_SOAP_PATH, которое требуется некоторым локальным конфигурациям SOAMANAGER.
Транспорты
stdio (по умолчанию, npm start / npm run dev) — одно подключение SAP и одна песочница E2B на процесс, полностью настраивается из .env. Именно это ожидают Claude Desktop и большинство локальных MCP-клиентов:
{
"mcpServers": {
"s4hana": {
"command": "node",
"args": ["/absolute/path/to/s4hana-mcp-server/dist/index.js"],
"env": {
"E2B_API_KEY": "...", "SANDBOX_ID": "...",
"SAP_HOST": "...", "SAP_AUTH_MODE": "basic", "SAP_USERNAME": "...", "SAP_PASSWORD": "..."
}
}
}
}Streamable HTTP (npm run start:http / npm run dev:http) — для удаленного или мультитенантного развертывания. Подключение SAP для каждой сессии настраивается либо из значений по умолчанию .env, либо из заголовков запроса (sap-host, sap-auth-mode, sap-username, sap-password, sap-token-url, sap-client-id, sap-client-secret, sap-client, sap-je-soap-path), а песочница E2B — из заголовка sandbox-id (или переменной окружения SANDBOX_ID как запасного варианта) — что позволяет одному работающему серверу обрабатывать запросы к разным тенантам и песочницам. E2B_API_KEY всегда читается из собственного окружения сервера. PORT (по умолчанию 3000) и HOST (по умолчанию localhost) настраивают прослушиватель; конечная точка MCP — POST /mcp, а GET /health — для проверки работоспособности.
Если вы развертываете HTTP-транспорт в месте, доступном по сети, поместите его за собственную аутентификацию/сетевую границу — этот сервер сам не ограничивает доступ к конечной точке /mcp, только к нижестоящему подключению SAP.
Инструменты
search_business_partners— поиск клиентов, поставщиков, физических лиц, организацийget_business_partner— полная информация об одном бизнес-партнереquery_business_partner_odata— универсальный запрос к любому набору сущностейAPI_BUSINESS_PARTNER
search_products— поиск материалов, готовой продукции, услуг, сырьяget_product— полная информация об одном продуктеquery_product_odata— универсальный запрос к любому набору сущностейAPI_PRODUCT_SRV
get_product_pricing— комбинированный поиск цены для материала (начните здесь, чтобы узнать «сколько стоит X»)search_pricing_conditions— просмотр записей условий по типу/ставкеget_pricing_condition— полная информация об одной записи условияquery_pricing_odata— универсальный запрос к любому набору сущностей ценообразования
list_warehousesget_warehouse
search_purchase_orders— поиск заказов на закупкуget_purchase_order— полная информация о заказе на закупкуquery_purchase_order_odata— универсальный запрос, включая уровень позиций/графика поставкиget_purchase_order_confirmations— подтверждения поставщика/отгрузки/поступления товара, массовый поиск
search_purchasing_info_records— поиск информационных записей закупокget_purchasing_info_record— полная информация об информационной записи закупкиquery_purchasing_info_record_odata— универсальный запрос
search_supplier_invoices— поиск счетов поставщиковget_supplier_invoice— полная информация о счете поставщикаquery_supplier_invoice_odata— универсальный запросcreate_supplier_invoice_po⚠️ запись — счет со ссылкой на заказ на закупку, сверка по 3 позициямcreate_supplier_invoice_gl⚠️ запись — счет на расходы без заказа на закупку, прямые строки G/Lcreate_supplier_credit_memo⚠️ запись — кредит-нота со ссылкой на заказ на закупкуcancel_supplier_invoice⚠️ запись — отменяет проведенный счет или кредит-нотуcheck_invoice_posting_readiness— предварительная проверка готовности к проводке (только чтение)
search_service_entry_sheets— поиск листов ввода услугget_service_entry_sheet— полная информация о листе ввода услугquery_service_entry_sheet_odata— универсальный запрос
create_journal_entry⚠️ запись — проводит документ G/L (SOAP, только базовая/X.509 аутентификация)search_journal_entries— аналитическое (агрегированное) или бухгалтерское (построчное) представлениеget_journal_entry— один бухгалтерский документ по номеруsearch_gl_accounts— поиск счетов G/Lsearch_open_po_items— позиции заказа на закупку поставщика, которые все еще можно выставить счет, одним вызовомsearch_cost_centers— поиск центров затратget_cost_center_hierarchy— стандартное дерево иерархии центров затратget_finance_structure— коды компаний, бухгалтерские книги, планы счетов, сегменты, сферы деятельности
Каждый инструмент записи выполняет серверные проверки защиты (существование, блокирующие флаги, обнаружение дубликатов, проверка баланса) перед проводкой и сообщает структурированный список причин — без отправки чего-либо в SAP — если какая-либо проверка не пройдена. Детерминированные отклонения SAP (закрытые периоды проводки, отсутствующая налоговая юрисдикция и т.д.) преобразуются в практические сообщения, а не в сырые коды ошибок.
Архитектура
src/
├── server.ts # McpServer factory — tool registration, schemas, annotations
├── client.ts # SapClient — OData V2/V4 requests, CSRF-protected writes, SOAP posts
├── auth.ts # Auth strategies: Basic, OAuth Client Credentials, OAuth Authorization Code
├── config.ts # Connection config + SAP public sandbox detection
├── index.ts # stdio entry point
├── http.ts # Streamable HTTP entry point (Express, per-session auth)
└── tools/
├── shared.ts # OData/CSV/error-parsing + E2B sandbox file I/O, shared by every tool
└── *.ts # one file per tool (schema + handler)Записи в конечные точки OData V2 следуют протоколу CSRF-токенов SAP: получите токен через GET с заголовком X-CSRF-Token: Fetch, отправьте его повторно с cookie сессии в POST, повторите один раз при 403. Проводка журнальных записей вместо этого формирует и отправляет сырой SOAP-конверт, поскольку у этого API нет эквивалента OData.
Разработка
npm run dev # stdio, hot reload via tsx
npm run dev:http # HTTP, hot reload via tsx
npm run typecheck # tsc --noEmit
npm run build # compile to dist/Лицензия
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with SAP ABAP systems through ABAP Development Tools (ADT), providing access to repository objects, source code, where-used analysis, and SQL queries with support for both on-premise and BTP systems.2
- FlicenseAqualityDmaintenanceEnables AI assistants to integrate with SAP systems via OData REST APIs for querying entity sets, performing CRUD operations, and executing function imports. It features automatic service discovery, CSRF token management, and smart connection handling without requiring the SAP RFC SDK.1112
- FlicenseAqualityCmaintenanceEnables interaction with SAP S/4HANA systems via OData, allowing service discovery, metadata exploration, field value retrieval, and CRUD operations through natural language.45
- FlicenseNot gradedqualityDmaintenanceEnables querying ABAP programs, classes, function modules, and other objects from SAP systems with OAuth 2.0 authentication.
Related MCP Connectors
Search, document and execute authenticated API calls across 700+ apps via one MCP server
34 production API tools over one hosted MCP endpoint.
Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…
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/ilia-inovaflow/s4hana-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server