Waayo, waxaa laga yaabaa Qalabka Waxaan ka heli karaa sida loo isticmaali karaa Server Model Context Protocol ee LangChain4J. Waayo, waxaan ka soo bandhigo badan Qalabka 4J Qalabka 1 Beta Waayo, waxa uu ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. Date Release September 25th, 2024 0.35.0 December 22th, 2024 1.0.0-alpha1 February 10th, 2025 1.0.0-beta1 March 13th, 2025 1.0.0-beta2 April 12th, 2025 1.0.0-beta3 25 Eyl, 2024 0 0 0 0 0 22 Dhamaan, 2024 1.0.0-Alpha1 waaweyn 10 Pebrero, 2025 Haku: 1.0 beta1 13 Markuu, 2025 Marka: www.beta2 Tusaale 12 April, 2025 Marka: www.beta3 LangChain4J oo ku saabsan Waayo, waxaan ka mid ahaysaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah. Haku v0.35 v1.0.0-beta3 val s = Sinks.many() .unicast() .onBackpressureBuffer<String>() chatBot.talk(m.sessionId, m.text) .onNext(s::tryEmitNext) .onError(s::tryEmitError) .onComplete { s.tryEmitComplete() }.start() return ServerResponse.ok().bodyAndAwait( s.asFlux().asFlow() ) val s = Sinks.many() .unicast() .onBackpressureBuffer<String>() chatBot.talk(m.sessionId, m.text) .onPartialResponse(s::tryEmitNext) .onError(s::tryEmitError) .onCompleteResponse { s.tryEmitComplete() }.start() return ServerResponse.ok().bodyAndAwait( s.asFlux().asFlow() ) Qalabka Qalabka Qalabka Qalabka Haku( .onBackpressureBuffer<String>() chatBot.talk(m.sessionId, m.text) .onNext(s::saxiixiixiixiixiix) Waayo, waxaa laga yaabaa in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay. Qalabka Qalabka ( Haku( Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka ) Qalabka Qalabka Qalabka Qalabka Haku( .onBackpressureBuffer<String>() chatBot.talk(m.sessionId, m.text) Waayo, waxaa loo yaabaa in aad u baahan tahay in ay u baahan tahay in ay u baahan tahay in ay u baahan tahay in ay u baahan tahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay. Waayo, waxaa laga yaabaa in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay in ay u baahan yahay. .onCompleteResponse { Qalabka ( Haku( Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka ) Shirkadda Reactor Integration LangChain4J waxaa loo isticmaalaa Project Reactor integration; Waxaan ka heli karaa in aad u soo xiriir. . a lot Waxaan isticmaali karaa Sida loo yaabaa, waxaan ku yaalaa interface ee LangChain4J si ay u adeegsanayo at runtime: AiServices interface ChatBot { fun talk(@MemoryId sessionId: String, @UserMessage message: String): TokenStream } Waxaad ka mid ah soo xiriir in la soo xiriir: <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-reactor</artifactId> <version>1.0.0-beta3</version> </dependency> Waxaad ka soo xiriir in la soo xiriir a Qalabka A Halkan waxaa laga yaabaa in la soo xiriir: Flux<String> TokenStream interface ChatBot { fun talk(@MemoryId sessionId: String, @UserMessage message: String): Flux<String> } Waa in la aasaasay in la aasaasay. Marka aad u baahan tahay in aad u isticmaali karaa codka ka mid ah: sink val flux = chatBot.talk(m.sessionId, m.text) ServerResponse.ok().bodyAndAwait(flux.asFlow()) Waayo, two day of debugging can easily save you two hours of reading the documentation! Sida loo isticmaali karaa Server Context Protocol Sida loo yaabaa, waxaan u baahan tahay in la xigtay <abbr title="Model Context Protocol">MCP</abbr> ee loo isticmaalo LangChain4J. Retrieval-Augmented soo saarka Ma rabtaa in ka badan oo dhan midabka si ay u baabuurta <abbr title="Large Language Model">LLM</abbr>: waxa ay ka mid ah in ka mid ah waqti iyo dhismaha. Si kastaba ha ahaatee, shirkadaha ku raaxeysan in ay ka mid ah warshadaha model cusub. Relevancy of a model ka mid ah ka mid ah waqti ay ku yaalaa si wax soo saarka iyo wax soo saarka, laakiin database of the LLM waa mid ka mid ah. Retrieval-Augmented Generation waa nidaamka two-step.In dhismaha ugu horeysay, dhismaha ka soo xiriir data, vectorize ku saabsan LLM, iyo ku salaysan in database vector; in dhismaha ugu horeysay, dhismaha loo isticmaalaa database sida dhismaha dheeraad ah ka horumarka LLM. Nala soo xiriir Protocol Sida loo yaqaan 'MCP' waa mid ka mid ah macluumaadka oo ka mid ah macluumaadka. MCP waa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. -- Waayo, si loo yaqaan Model Context Protocol MCP waa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. -- Waayo, si loo yaqaan Model Context Protocol MCP waxaa laga yaabaa 2 faahfaahfaahfaahfaahfaahfaahfaaha RAG: Data processed by a RAG is tailored for a model. If one wants to use a new model, one must re-execute the parsing phase. MCP standardizes the interactions between a client and a server, making them technology-independent. RAG allows the reading of data. MCP allows any API call to either access data dynamically ! or execute actions Qalabka MCP Sida loo isticmaali karaa Client-Server: 2 Qalabka Transportation stdio: Client la xiriyaan subprocess, iyo xawaaraha waxaa laga yaabaa in standard iyo out standard. HTTP iyo Server-Sent Xafiiska Solution Sida loo yaqaan 'MCP Server', waxaan ka mid ah ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah MCP Server. Waxaa laga yaabaa in la soo bandhigay, laakiin waxaan ka heli karaa Sida loo yaqaan 'LangChain4J Documentation' waxaa loo yaqaan 'LangChain4J'. Haku Macluumaadka GitHub MCP Server GitHub MCP Server waxaa loo isticmaali karaa Waxaa la mid ah in ay u baahan tahay in la soo saarka binary iyo loo soo saarka in la isticmaalo. Waxaa laga yaabaa si ay u soo saarka HTTP, laakiin ka mid ah waqti ugu badan oo ku yaalaa HTTP si ay u model iyo waqti macluumaadka ka mid ah, waxaa laga yaabaa. Haku Waayo, ka dib markii ay u baahan tahay in ay u Project. Waxaad ka heli karaa mid ka mid ah stdio si HTTP ama HTTP si stdio. Waxaad sidoo kale waxaa laga yaabaa sida image Docker. Waxaan sidoo kale la isticmaalaa sida server iyo proxy la soo bandhigay: : Qalabka Proxy Dockerfile FROM ghcr.io/sparfenyuk/mcp-proxy:latest ENV VERSION=0.2.0 ENV ARCHIVE_NAME=github-mcp-server_Linux_x86_64.tar.gz RUN wget https://github.com/github/github-mcp-server/releases/download/v$VERSION/$ARCHIVE_NAME -O /tmp/$ARCHIVE_NAME \ #1 && tar -xzvf /tmp/$ARCHIVE_NAME -C /opt \ #2 && rm /tmp/$ARCHIVE_NAME #3 RUN chmod +x /opt/github-mcp-server #4 Soo dejisan archive Haku Waayo, waxaa loo isticmaali karaa Qalabka dhismaha binary Markaad ka mid ah in ay u defined Sida loo yaqaan 'binary' waxay ka mid ah loo isticmaalaa port iyo host oo ka mid ah macluumaadka. : CMD docker-compose.yaml services: mcp-server: build: context: github-mcp-server env_file: - .env #1 command: - --pass-environment #2 - --sse-port=8080 #3 - --sse-host=0.0.0.0 #4 - -- #5 - /opt/github-mcp-server #6 - --toolsets - all - stdio Waayo, waxaa loo isticmaali karaa GITHUB_PERSONAL_ACCESS_TOKEN mid ka mid ah macluumaadka macluumaadka ee GitHub. Waayo, waxaa laga yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah. Qalabka Qalabka Qalabka IP The proxy "coneys" la server stdio MCP ka dib markii dhismaha Shuruudda server oo dhan oo ku habboon Qalabka waxaa loo isticmaali karaa Ku saabsan port 8080 /sse codka Solution Shuruudaha ugu horeysay ee loo yaqaan 'Coding part is the easiest. Head down to Sida loo yaabaa, waxaa loo yaabaa in ay ku saabsan: LangChain4J dhismaha on MCP bean { val transport = HttpMcpTransport.Builder() .sseUrl(ref<ApplicationProperties>().mcp.url) //1 .logRequests(true) //2 .logResponses(true) //2 .build() val mcpClient = DefaultMcpClient.Builder() .transport(transport) .build() mcpClient.listTools().forEach { println(it) } //3 McpToolProvider.builder() .mcpClients(listOf(mcpClient)) .build() } bean { coRouter { val chatBot = AiServices .builder(ChatBot::class.java) .streamingChatLanguageModel(ref<StreamingChatLanguageModel>()) .chatMemoryProvider { MessageWindowChatMemory.withMaxMessages(40) } .contentRetriever(EmbeddingStoreContentRetriever.from(ref<EmbeddingStore<TextSegment>>())) .toolProvider(ref<McpToolProvider>()) //4 .build() POST("/")(PromptHandler(chatBot)::handle) } } Waxaan la soo bandhigiyaa class ConfigurationProperty si ay u isticmaali karaa URL SSE Protokollada MCP waa mid ka mid ah in ay ku soo saarka logs ka mid ah client. Ma waxaad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay. Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Waayo, model waa in la soo xiriir oo ku saabsan mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. curl -N -H 'Content-Type: application/json' localhost:8080 -d '{ "sessionId": "1", "text": "What are my top three most popular GitHub repos?" }' Waayo, waxaan u baahan tahay in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah. Unfortunately, the provided text does not contain any information about your top three most popular GitHub repositories. The text appears to be a blog post or a personal website, and it mentions some of your projects and experiences with GitHub, but it does not provide any metrics or statistics on the popularity of your repositories. If you want to know more about the popularity of your GitHub repositories, I would recommend checking out GitHub's own analytics tools, such as GitHub Insights or the Repository Insights API. These tools can provide information about the number of followers, stars, and forks for each repository, as well as other metrics like engagement and activity. Model waxaa lagu soo bandhigay in ay ka mid ah wax soo saarka oo ka mid ah wax soo saarka. Qalabka Solution Waxa uu ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. Shuruudaha ugu soo saarka waaweyn ee shuruudaha waaweyn ee shuruudaha waaweyn ee shuruudaha waaweyn ee shuruudaha waaweyn ee shuruudaha waaweyn ee shuruudaha waaweyn. ku saabsan codsiga iyo codsiga iyo codsiga iyo codsiga iyo codsiga. github-mcp-server I was about to give up when I decided to come back to the roots. Waxaan ka soo xiriir Qalabka ugu horeysay ee ay ka mid ah mid ka mid ah mid ah mid ka mid ah. Xubin ka mid ah dokumentation Waxaa la isticmaali karaa OpenAI, laakiin waxaan la isticmaali karaa Ollama. Waxaan u isticmaali karaa MCP iyo OpenAI, Mistral AI, iyo Ollama. Only model OpenAI works with MCP. curl -N -H 'Content-Type: application/json' localhost:8080 -d '{ "sessionId": "1", "text": "What are my top three most popular GitHub repos?" }' Tani, OpenAI ka mid ah loo soo xiriir in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u hesho: Here are my findings regarding your top three most popular GitHub repositories: 1. **[opentelemetry-tracing](https://github.com/nfrankel/opentelemetry-tracing)** - **Description**: Demo for end-to-end tracing via OpenTelemetry. - **Stars**: 68 - **Forks**: 25 - **Open Issues**: 10 2. **[kaadin](https://github.com/nfrankel/kaadin)** - **Description**: Kotlin DSL for Vaadin. - **Stars**: 44 - **Forks**: 12 - **Open Issues**: 3 3. **[jvm-controller](https://github.com/nfrankel/jvm-controller)** - **Description**: Example on how to write a Kubernetes controller in Java. - **Stars**: 33 - **Forks**: 10 - **Open Issues**: 0 These repositories demonstrate a range of your interests and contributions in the areas of observability, Kotlin development, and Kubernetes.% Waayo, sidoo kale waxaa loo yaqaan "MCP server" oo loo yaqaan "GitHub API" oo loo yaqaan "MCP server" oo loo yaqaan "GitHub API" oo loo yaqaan "GitHub API" oo loo yaqaan "GitHub". Sidee waa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah. my repos Qalabka ugu badan, Marka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay. QEEBE Qalabka Qalabka ugu weyn ee post this waa integration of a MCP server in a LangChain4J app. Haddii loo soo saarka waa mid ka mid ah dhismaha, waxaa ka mid ah mid ka mid ah wax soo saarka. Sida loo yaqaan MCP Server waa mid ka mid ah macluumaadka aad. Sidaas, LangChain4J waxaa loo yaqaan 'abstraction leaky'. Waxaa la sameeyaan oo dhan in ay ku bixiyaan in ay ku saabsan layer abstraction ah, laakiin loo yaqaan 'implementations under it shields you from are not equal. I wish the documentation would mention it, although I understand the current version is in beta. mcp-proxy Waxa uu ku saabsan MCP oo dhan, oo ay ka dhigi karaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah. Codka soo saarka ah ee post this can be found on . Haku To go further: Sida loo yaqaan Model Context Protocol Hadda MCP Server iyo Client LangChain4J - Model Context Protocol (MCP) Warbixinta oo ku saabsan A Java Geek on April 27th, 2025 Marka: Java Geek