<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Docker on Marian Zeis Blog</title>
    <link>https://blog.zeis.de/tags/docker/</link>
    <description>Recent content in Docker on Marian Zeis Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 29 Oct 2025 09:30:00 +0100</lastBuildDate>
    <atom:link href="https://blog.zeis.de/tags/docker/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Supercharged Local Open Source Joule for Consultants: Search Your Data &amp; Code</title>
      <link>https://blog.zeis.de/posts/2025-10-29-librechat/</link>
      <pubDate>Wed, 29 Oct 2025 09:30:00 +0100</pubDate>
      <guid>https://blog.zeis.de/posts/2025-10-29-librechat/</guid>
      <description>&lt;p&gt;This post is a mirrored copy of my LinkedIn article, kept here so it remains searchable and independent from external platforms.&#xA;You can still find the original on LinkedIn: &lt;a href=&#34;https://www.linkedin.com/pulse/supercharged-local-open-source-joule-consultants-search-marian-zeis-gepbf/&#34;&gt;LinkedIn Pulse article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sap.com/germany/products/artificial-intelligence/ai-assistant/sap-consulting-capability.html&#34;&gt;Joule for Consultants&lt;/a&gt; costs 250 € and mainly searches SAP Help, SAP Community and SAP for Me (Notes). That is useful, but it stops where real projects start: your own systems, codebase and sensitive data. Even though public assistants like ChatGPT and Claude can already reach SAP Help and SAP Community, the real gap is internal/authenticated data and code.&lt;/p&gt;&#xA;&lt;p&gt;For this case I created a &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat&#34;&gt;LibreChat fork&lt;/a&gt; that includes and auto-starts SAP MCP servers (Docs, Notes, S/4 OData and ABAP ADT) via Docker. So the MCP Server are local inside your Docker and no external MCP Server is used. &lt;a href=&#34;https://www.librechat.ai/&#34;&gt;LibreChat&lt;/a&gt; is an open‑source local chat UI with MCP support and built‑in Ollama integration, and it also supports many other model providers. You get a private assistant that can read official docs, inspect code and data from your systems without sending customer context to third‑party clouds. The fork’s documentation is here: &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/tree/main/sap-mcp-docs&#34;&gt;sap‑mcp‑docs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Running the assistant locally means the client, tools and, if you choose, the model stay on your machine (LibreChat supports Ollama), so you avoid pasting sensitive context into public chats. By adding S/4 OData and ABAP ADT, you bring real metadata, code and data into the loop.&lt;/p&gt;&#xA;&lt;h3 id=&#34;which-mcp-servers-are-used-here&#34;&gt;Which MCP servers are used here?&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-docs&#34;&gt;SAP Docs MCP&lt;/a&gt; provides unified search and fetch across SAPUI5/OpenUI5, CAP, ABAP keyword docs, SAP Help and SAP Community. The &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-notes&#34;&gt;SAP Notes MCP&lt;/a&gt; is for searching and fetching SAP Notes when you have an error, OSS number or concrete symptom; it requires an S‑User certificate (Passport). The &lt;a href=&#34;https://github.com/mario-andreschak/mcp-abap-adt&#34;&gt;ABAP ADT MCP&lt;/a&gt; reads ABAP sources, DDIC structures and tables content via ADT APIs so you never paste code into chat and still get precise context. The &lt;a href=&#34;https://github.com/lemaiwo/btp-sap-odata-to-mcp-server&#34;&gt;S/4 OData MCP&lt;/a&gt; discovers services and exposes safe CRUD tools so your assistant can read and write via approved APIs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-this-works-in-practice&#34;&gt;How this works in practice&lt;/h2&gt;&#xA;&lt;p&gt;In my example I used o4‑mini from OpenAI, but LibreChat supports many &lt;a href=&#34;https://www.librechat.ai/docs/configuration/pre_configured_ai&#34;&gt;model providers&lt;/a&gt; including OpenAI, Anthropic, Google, Azure AI Foundry and even SAP AI Core (not tested by me). The key point: you can also use a local &lt;a href=&#34;https://www.librechat.ai/blog/2024-03-02_ollama#getting-started-with-ollama&#34;&gt;model via Ollama&lt;/a&gt;. Depending on your use case, a local model is smart enough to call the right tools and MCP servers. I also use an ABAP Cloud Developer Trial instance connected via the S/4 OData and ADT MCP servers.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sap-notes-lookup--abap-table-verification&#34;&gt;SAP Notes lookup + ABAP table verification&lt;/h3&gt;&#xA;&lt;p&gt;This first example flow combines the SAP Notes MCP and ABAP ADT MCP. First the assistant searches and fetches a specific SAP Note (&lt;code&gt;sap_note_search&lt;/code&gt;, &lt;code&gt;sap_note_get&lt;/code&gt;), then verifies the relevant DDIC table and fields via ADT. This confirms the symptom and the fix steps before proposing a safe, auditable corrective action (for example, an OData action). This is the pattern for many “error → note → verify → fix” tasks.&lt;/p&gt;&#xA;&lt;img src=&#34;example-sap-notes-lookup.jpg&#34; alt=&#34;LibreChat example flow: SAP Notes lookup plus ABAP table verification via ADT MCP tools&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;h3 id=&#34;service-metadata--valuelist-guidance&#34;&gt;Service metadata + ValueList guidance&lt;/h3&gt;&#xA;&lt;p&gt;The assistant uses the S/4 MCP to discover the Football service and inspect entity schema (&lt;code&gt;search-sap-services&lt;/code&gt;, &lt;code&gt;discover-service-entities&lt;/code&gt;, &lt;code&gt;get-entity-schema&lt;/code&gt;). It then pivots to the SAP Docs MCP to &lt;code&gt;sap_help_search&lt;/code&gt; and &lt;code&gt;sap_help_get&lt;/code&gt; the ValueList documentation and shows exactly where to add annotations. This marries live service metadata with the official docs so consultants can implement confidently, then validate in a Fiori app.&lt;/p&gt;&#xA;&lt;img src=&#34;example-service-metadata-valuelist.jpg&#34; alt=&#34;LibreChat example flow: S/4 service metadata plus ValueList guidance via SAP Docs MCP&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;h3 id=&#34;cds-view-value-help-research&#34;&gt;CDS view Value Help research&lt;/h3&gt;&#xA;&lt;p&gt;For CDS‑centric cases, the assistant focuses on SAP Docs MCP to collect the canonical examples for &lt;code&gt;Common.ValueList&lt;/code&gt; and relevant ABAP/CDS annotations. If needed, ABAP ADT MCP can retrieve the current CDS definition (&lt;code&gt;GetStructure&lt;/code&gt;/&lt;code&gt;GetInclude&lt;/code&gt;) to compare the as‑is state and generate the minimal edit plan.&lt;/p&gt;&#xA;&lt;img src=&#34;example-cds-value-help.jpg&#34; alt=&#34;LibreChat example flow: CDS value help research with ABAP ADT MCP context&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;h3 id=&#34;other-options-and-clients&#34;&gt;Other options and clients&lt;/h3&gt;&#xA;&lt;p&gt;There are other options and clients to use these MCP servers. If you prefer the Microsoft ecosystem, Visual Studio Code’s GitHub Copilot Chat supports MCP servers so you can connect the same SAP MCP endpoints there, as described in the &lt;a href=&#34;https://code.visualstudio.com/docs/copilot/chat/mcp-servers&#34;&gt;VS Code Copilot Chat MCP guide&lt;/a&gt;. This is a simpler setup compared to the LibreChat fork. For a more governed setup you can use &lt;a href=&#34;https://adoption.microsoft.com/ai-agents/copilot-studio/&#34;&gt;Copilot Studio&lt;/a&gt; together with the hosted S/4 OData MCP server from &lt;a href=&#34;https://www.sap.com/products/artificial-intelligence/partners/nessi-nv-ai-data-enabler.html?countryCode=US&#34;&gt;Nessi NV&lt;/a&gt; and the SAP Docs MCP Server.&lt;/p&gt;&#xA;&lt;p&gt;I talked about these MCP servers and showed a live example of Copilot Studio and other LLM clients at SAP Inside Track Munich 2025. The recording is here: &lt;a href=&#34;https://www.youtube.com/watch?v=vTZCeaxsOwU&#34;&gt;SAP Inside Track Munich 2025&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can also build your own LLM client and use the MCP servers directly. I tried a quick PoC with the current libraries and tools. It worked, but turning it into a production‑ready assistant with robust MCP support is non‑trivial; I would not recommend rolling your own for production. The PoC is here: &lt;a href=&#34;https://github.com/marianfoo/custom-llm-client&#34;&gt;Custom LLM Client&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;getting-started&#34;&gt;Getting started&lt;/h3&gt;&#xA;&lt;p&gt;To run this on your own machine, clone the repository, configure the &lt;code&gt;.env&lt;/code&gt; and &lt;code&gt;librechat.yaml&lt;/code&gt; files and start the Docker container. The docs are in this &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/tree/main/sap-mcp-docs&#34;&gt;folder&lt;/a&gt; and the setup guide is here: &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/blob/main/sap-mcp-docs/MCP_SETUP_GUIDE.md&#34;&gt;MCP_SETUP_GUIDE.md&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Minimal path (see guides for details):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Clone and configure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd local-llm-client-for-sap-consultants-librechat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp librechat.example.yaml librechat.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Configure the .env and librechat.yaml files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Start in Docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;security-running-ai-and-mcp-locally&#34;&gt;Security: running AI and MCP locally&lt;/h3&gt;&#xA;&lt;p&gt;Because the client, MCP server and (optionally) the model run on your machine, prompts, retrieved docs and tool results stay inside your environment. When you do connect to external sources, do it intentionally and stick to trusted endpoints. Operationally keep it simple and start read-only by default and enable write tools only when you require it. The short version: a local, open-source stack is the safer option here; unlike cloud assistants, your information never leaves your machine unless you choose to send it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;&#xA;&lt;p&gt;With MCP servers, LLM clients become smarter and more useful in real projects. LLMs simply cannot know everything, especially internal context that lives on enterprise networks and changes quickly. Because the Model Context Protocol is still relatively new in the enterprise, treat adoption with care and integrate it securely. Keeping information on your own machine and using open-source libraries lets you see exactly what runs and how.&lt;/p&gt;&#xA;&lt;p&gt;SAP clearly wants to position Joule for Consultants as a unique product; today it still lags behind community projects for these use cases. At TechEd next week we’ll see whether community MCP servers are embraced and whether SAP’s own products improve enough to justify the price.&lt;/p&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;References&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Custom LLM Client PoC: &lt;a href=&#34;https://github.com/marianfoo/custom-llm-client&#34;&gt;https://github.com/marianfoo/custom-llm-client&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;SAP Inside Track Munich 2025 session: &lt;a href=&#34;https://www.youtube.com/watch?v=vTZCeaxsOwU&#34;&gt;https://www.youtube.com/watch?v=vTZCeaxsOwU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;SAP partner listing (S/4 integration via OAuth): &lt;a href=&#34;https://www.sap.com/products/artificial-intelligence/partners/nessi-nv-ai-data-enabler.html?countryCode=US&#34;&gt;https://www.sap.com/products/artificial-intelligence/partners/nessi-nv-ai-data-enabler.html?countryCode=US&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;MCP clients overview (Claude Desktop etc.): &lt;a href=&#34;https://modelcontextprotocol.io/clients/&#34;&gt;https://modelcontextprotocol.io/clients/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Copilot Studio: &lt;a href=&#34;https://adoption.microsoft.com/ai-agents/copilot-studio/&#34;&gt;https://adoption.microsoft.com/ai-agents/copilot-studio/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;VS Code Copilot Chat MCP docs: &lt;a href=&#34;https://code.visualstudio.com/docs/copilot/chat/mcp-servers&#34;&gt;https://code.visualstudio.com/docs/copilot/chat/mcp-servers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;CAP MCP server (official): &lt;a href=&#34;https://github.com/cap-js/mcp-server&#34;&gt;https://github.com/cap-js/mcp-server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;CAP MCP plugin (community): &lt;a href=&#34;https://github.com/gavdilabs/cap-mcp-plugin&#34;&gt;https://github.com/gavdilabs/cap-mcp-plugin&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;S/4 OData MCP: &lt;a href=&#34;https://github.com/lemaiwo/btp-sap-odata-to-mcp-server&#34;&gt;https://github.com/lemaiwo/btp-sap-odata-to-mcp-server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ABAP ADT MCP: &lt;a href=&#34;https://github.com/mario-andreschak/mcp-abap-adt&#34;&gt;https://github.com/mario-andreschak/mcp-abap-adt&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;SAP Notes MCP: &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-notes&#34;&gt;https://github.com/marianfoo/mcp-sap-notes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;SAP Docs MCP: &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-docs&#34;&gt;https://github.com/marianfoo/mcp-sap-docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat Ollama guide: &lt;a href=&#34;https://www.librechat.ai/blog/2024-03-02_ollama#getting-started-with-ollama&#34;&gt;https://www.librechat.ai/blog/2024-03-02_ollama#getting-started-with-ollama&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat model providers: &lt;a href=&#34;https://www.librechat.ai/docs/configuration/pre_configured_ai&#34;&gt;https://www.librechat.ai/docs/configuration/pre_configured_ai&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat website: &lt;a href=&#34;https://www.librechat.ai/&#34;&gt;https://www.librechat.ai/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat fork setup guide: &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/blob/main/sap-mcp-docs/MCP_SETUP_GUIDE.md&#34;&gt;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/blob/main/sap-mcp-docs/MCP_SETUP_GUIDE.md&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat fork docs folder: &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/tree/main/sap-mcp-docs&#34;&gt;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat/tree/main/sap-mcp-docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LibreChat fork (SAP consultants, with MCP servers): &lt;a href=&#34;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat&#34;&gt;https://github.com/marianfoo/local-llm-client-for-sap-consultants-librechat&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
  </channel>
</rss>
