该项目是 Model Context Protocol (MCP) 服务器协议在 SAP ABAP 环境中的一个实现。它旨在允许在 ABAP 系统中构建应用后端,并通过标准化的 MCP 协议与大型语言模型 (LLM) 客户端进行交互,提供必要的业务上下文信息和功能。

主要功能点

  • 上下文信息提供: 能够托管和管理结构化或非结构化的数据作为“资源 (Resources)”,供 LLM 按需访问和读取。
  • 外部功能调用: 支持注册和执行在 ABAP 中实现的业务逻辑作为“工具 (Tools)”,使 LLM 能够调用这些工具来完成特定任务或获取动态信息。
  • 定制化交互: 定义和渲染“Prompt 模板 (Prompts)”,允许根据需要生成结构化、包含上下文的 Prompt 发送给 LLM。
  • 会话管理: 支持通过不同的机制(如 ICF Session 或 MCP Session ID)维护客户端与服务器之间的会话状态。
  • 能力声明: 服务器启动时会向客户端声明其支持的功能(如是否支持 Prompts, Resources, Tools)。

限制

  • 当前版本不完全支持基于 SSE(Server-Sent Events)的通知机制,因此与通知相关的功能(如 listChanged, subscribe, logging)未实现。

安装步骤

由于这是一个 ABAP 项目,安装通常需要在现有的 SAP 系统中进行。典型的安装方法是使用 abapGit 工具,通过导入该仓库的源代码到您的 ABAP 开发环境中。

具体步骤:

  1. 确保您的 SAP 系统中已安装并配置 abapGit。
  2. 在 abapGit 中创建一个新的在线仓库导入。
  3. 输入该项目的 GitHub URL 'https://github.com/abap-ai/mcp'。
  4. 选择一个合适的包(Package)进行导入。
  5. 激活导入的 ABAP 对象。
  6. 根据项目的文档(通常在 'docs/' 文件夹中)进行必要的后续配置,例如创建 ICF 服务节点来暴露 HTTP 端点。

服务器配置

MCP 客户端连接到此 ABAP 服务器时,需要知道如何访问它。由于这是一个基于 HTTP 的服务(通常通过 SAP 的 Internet Communication Framework - ICF 发布),客户端配置通常需要指定服务器的网络地址和路径。

一个典型的 MCP 客户端配置 JSON 可能包含以下信息(不展示完整的 JSON 代码):

  • 'serverName': 为此服务器实例指定一个易于识别的名称,例如 "ABAP MCP Full Test Server"。
  • 'transport': 指明使用的传输协议,对于此 HTTP 实现,通常设置为 '"streamableHttp"' 或 '"http"'。
  • 'url': 这是最重要的信息,指定客户端连接到此服务器的完整 HTTP 或 HTTPS 端点 URL。这个 URL 的格式取决于您的 SAP 系统配置和 ICF 服务创建方式,通常是 'http(s)://<SAP主机名>:<端口>/sap/bc/ui5_ui5/sap/zmcp/<服务路径>'。根据仓库的测试代码,可能的测试服务路径是 '/test/test_full'。您需要根据实际的 ICF 服务路径进行替换。

例如,如果您的 SAP 系统主机是 'mysap.example.com',ICF 端口是 '8000',且将此 MCP 服务发布到了 '/sap/bc/ui5_ui5/sap/zmcp/test/test_full' 路径下,则客户端配置中的 'url' 参数应设置为 '"http://mysap.example.com:8000/sap/bc/ui5_ui5/sap/zmcp/test/test_full"'。

请参考您所使用的 MCP 客户端库的文档,了解如何将这些信息集成到其连接配置中。

基本使用方法

一旦服务器在 ABAP 系统中部署并配置为可通过 HTTP 访问,并且您的 MCP 客户端已经配置了正确的连接信息,您就可以通过客户端调用 MCP 方法:

  1. 使用配置信息创建并连接 MCP 客户端实例。
  2. 调用客户端方法来与服务器交互:
    • 使用 'client.listPrompts()' 获取可用的 Prompt 模板列表。
    • 使用 'client.getPrompt({ name: "prompt_name", arguments: {...} })' 获取并渲染一个 Prompt 模板,可带参数。
    • 使用 'client.listResources()' 获取可用的资源列表。
    • 使用 'client.readResource({ uri: "resource_uri" })' 读取特定资源的内容。
    • 使用 'client.listTools()' 获取可用的工具列表。
    • 使用 'client.callTool({ name: "tool_name", arguments: {...} })' 调用一个工具,可带参数。

请查阅 Model Context Protocol SDK 客户端库的具体文档,了解如何使用其 API 与该服务器实现进行交互。

信息

分类

商业系统