From cdda68577c239e18c241f8f1aa627208a1bc35e2 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov <1517853+kpavlov@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:43:50 +0300 Subject: [PATCH] =?UTF-8?q?#196=20Update=20build=20configuration=20and=20w?= =?UTF-8?q?orkflows=20for=20enhanced=20local=20publ=E2=80=A6=20(#275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #196 Update build configuration and workflows for enhanced local publishing and sample builds - Add `mavenLocal()` to repository configuration in sample projects. - Update dependencies to distinguish between `mcp.kotlin.client` and `mcp.kotlin.server`. - Include `JAVA_OPTS` for optimized memory usage in GitHub workflow. - Enhance build workflow to include local publishing and build steps for sample projects. - Add package-lock.json for Kotlin JS/WASM Store - Switch to SNAPSHOT versions by default ## Motivation and Context #196 Samples MUST be validated as part of the build ## How Has This Been Tested? ```sh ./gradlew :kotlin-sdk-core:publishToMavenLocal ./gradlew :kotlin-sdk-client:publishToMavenLocal ./gradlew :kotlin-sdk-server:publishToMavenLocal ( cd ./samples/kotlin-mcp-client && ./../../gradlew clean build ) ( cd ./samples/kotlin-mcp-server && ./../../gradlew clean build ) ( cd ./samples/weather-stdio-server && ./../../gradlew clean build ) ``` ## Breaking Changes ## Types of changes - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context --- .github/workflows/build.yml | 20 ++++++++++++++++--- build.gradle.kts | 2 +- gradle.properties | 2 ++ gradle/libs.versions.toml | 5 +++-- samples/kotlin-mcp-client/build.gradle.kts | 2 +- samples/kotlin-mcp-client/settings.gradle.kts | 3 ++- samples/kotlin-mcp-server/build.gradle.kts | 6 +----- samples/kotlin-mcp-server/settings.gradle.kts | 3 ++- samples/weather-stdio-server/build.gradle.kts | 7 ++----- .../weather-stdio-server/settings.gradle.kts | 3 ++- 10 files changed, 33 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 200a049..20b9a7f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,8 @@ jobs: validate-pr: runs-on: macos-latest-xlarge name: Validate PR + env: + JAVA_OPTS: "-Xmx8g -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dkotlin.daemon.jvm.options=-Xmx6g" steps: - uses: actions/checkout@v5 @@ -32,9 +34,21 @@ jobs: cache-read-only: true - name: Build with Gradle - run: ./gradlew clean ktlintCheck build koverLog koverHtmlReport - env: - JAVA_OPTS: "-Xmx8g -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dkotlin.daemon.jvm.options=-Xmx6g" + run: |- + ./gradlew clean ktlintCheck build koverLog koverHtmlReport + ./gradlew :kotlin-sdk-core:publishToMavenLocal :kotlin-sdk-client:publishToMavenLocal :kotlin-sdk-server:publishToMavenLocal + + - name: Build Kotlin-MCP-Client Sample + working-directory: ./samples/kotlin-mcp-client + run: ./../../gradlew clean build + + - name: Build Kotlin-MCP-Server Sample + working-directory: ./samples/kotlin-mcp-server + run: ./../../gradlew clean build + + - name: Build Weather-Stdio-Server Sample + working-directory: ./samples/weather-stdio-server + run: ./../../gradlew clean build - name: Upload Reports if: ${{ !cancelled() }} diff --git a/build.gradle.kts b/build.gradle.kts index 81117d2..2c365fa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { allprojects { group = "io.modelcontextprotocol" - version = "0.7.1" + version = "0.7.2-SNAPSHOT" } dependencies { diff --git a/gradle.properties b/gradle.properties index 85b9566..7e63634 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,8 @@ org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true # Kotlin kotlin.code.style=official kotlin.daemon.jvmargs=-Xmx4G +# Build JS targets using npm package manager https://kotlinlang.org/docs/js-project-setup.html#npm-dependencies +kotlin.js.yarn=false # MPP kotlin.mpp.enableCInteropCommonization=true kotlin.native.ignoreDisabledTargets=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6728830..f06f9bb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ kotest = "5.9.1" awaitility = "4.3.0" # Samples -mcp-kotlin = "0.7.1" +mcp-kotlin = "0.7.2-SNAPSHOT" anthropic = "2.7.0" shadow = "8.1.1" @@ -57,7 +57,8 @@ slf4j-simple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4 # Samples ktor-client-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" } ktor-server-cio = { group = "io.ktor", name = "ktor-server-cio", version.ref = "ktor" } -mcp-kotlin = { group = "io.modelcontextprotocol", name = "kotlin-sdk", version.ref = "mcp-kotlin" } +mcp-kotlin-client = { group = "io.modelcontextprotocol", name = "kotlin-sdk-client", version.ref = "mcp-kotlin" } +mcp-kotlin-server = { group = "io.modelcontextprotocol", name = "kotlin-sdk-server", version.ref = "mcp-kotlin" } anthropic-java = { group = "com.anthropic", name = "anthropic-java", version.ref = "anthropic" } ktor-client-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization-kotlinx-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" } diff --git a/samples/kotlin-mcp-client/build.gradle.kts b/samples/kotlin-mcp-client/build.gradle.kts index b34e8ed..3e3ad85 100644 --- a/samples/kotlin-mcp-client/build.gradle.kts +++ b/samples/kotlin-mcp-client/build.gradle.kts @@ -12,7 +12,7 @@ group = "org.example" version = "0.1.0" dependencies { - implementation(libs.mcp.kotlin) + implementation(libs.mcp.kotlin.client) implementation(libs.ktor.client.cio) implementation(libs.anthropic.java) implementation(libs.slf4j.simple) diff --git a/samples/kotlin-mcp-client/settings.gradle.kts b/samples/kotlin-mcp-client/settings.gradle.kts index 6e2f160..c5f225b 100644 --- a/samples/kotlin-mcp-client/settings.gradle.kts +++ b/samples/kotlin-mcp-client/settings.gradle.kts @@ -9,6 +9,7 @@ pluginManagement { dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() } versionCatalogs { @@ -16,4 +17,4 @@ dependencyResolutionManagement { from(files("../../gradle/libs.versions.toml")) } } -} \ No newline at end of file +} diff --git a/samples/kotlin-mcp-server/build.gradle.kts b/samples/kotlin-mcp-server/build.gradle.kts index 6a64968..e85100d 100644 --- a/samples/kotlin-mcp-server/build.gradle.kts +++ b/samples/kotlin-mcp-server/build.gradle.kts @@ -11,10 +11,6 @@ plugins { group = "org.example" version = "0.1.0" -repositories { - mavenCentral() -} - val jvmMainClass = "Main_jvmKt" kotlin { @@ -43,7 +39,7 @@ kotlin { sourceSets { commonMain.dependencies { - implementation(libs.mcp.kotlin) + implementation(libs.mcp.kotlin.server) implementation(libs.ktor.server.cio) } jvmMain.dependencies { diff --git a/samples/kotlin-mcp-server/settings.gradle.kts b/samples/kotlin-mcp-server/settings.gradle.kts index 0803984..cac44ab 100644 --- a/samples/kotlin-mcp-server/settings.gradle.kts +++ b/samples/kotlin-mcp-server/settings.gradle.kts @@ -9,6 +9,7 @@ pluginManagement { dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() } versionCatalogs { @@ -16,4 +17,4 @@ dependencyResolutionManagement { from(files("../../gradle/libs.versions.toml")) } } -} \ No newline at end of file +} diff --git a/samples/weather-stdio-server/build.gradle.kts b/samples/weather-stdio-server/build.gradle.kts index f82306c..f39057f 100644 --- a/samples/weather-stdio-server/build.gradle.kts +++ b/samples/weather-stdio-server/build.gradle.kts @@ -9,22 +9,19 @@ application { mainClass.set("io.modelcontextprotocol.sample.server.MainKt") } -repositories { - mavenCentral() -} - group = "org.example" version = "0.1.0" dependencies { implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) - implementation(libs.mcp.kotlin) + implementation(libs.mcp.kotlin.server) implementation(libs.ktor.server.cio) implementation(libs.ktor.client.cio) implementation(libs.slf4j.simple) testImplementation(kotlin("test")) + testImplementation(libs.mcp.kotlin.client) testImplementation(libs.kotlinx.coroutines.test) } diff --git a/samples/weather-stdio-server/settings.gradle.kts b/samples/weather-stdio-server/settings.gradle.kts index 1121bf5..67e786b 100644 --- a/samples/weather-stdio-server/settings.gradle.kts +++ b/samples/weather-stdio-server/settings.gradle.kts @@ -9,6 +9,7 @@ pluginManagement { dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() } versionCatalogs { @@ -16,4 +17,4 @@ dependencyResolutionManagement { from(files("../../gradle/libs.versions.toml")) } } -} \ No newline at end of file +}