Skip to content

Commit d962e28

Browse files
authored
Generate MCP classes with OpenAPI Generator (#294)
- Add OpenAPI Generator to build system to automatically generate MCP protocol data classes from the official schema. - Configure code quality tools to exclude generated files - Add deserialization test ## Motivation and Context Writing classes by hand is error-prone, when json schema exists. See #185, Also, autogenerating model classes ensures the SDK is in sync with the protocol and can quickly catch up with its changes (see #218) ## How Has This Been Tested? Regression tests ## Breaking Changes No ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [ ] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions -->
1 parent 8958f4c commit d962e28

File tree

6 files changed

+2606
-0
lines changed

6 files changed

+2606
-0
lines changed

build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,18 @@ dokka {
3333
}
3434
}
3535

36+
ktlint {
37+
filter {
38+
exclude("**/generated*/**")
39+
}
40+
}
41+
3642
kover {
3743
reports {
3844
filters {
3945
includes.classes("io.modelcontextprotocol.kotlin.sdk.*")
46+
excludes.classes("io.modelcontextprotocol.kotlin.sdk.models.*") // temporary
47+
excludes.classes("io.modelcontextprotocol.kotlin.sdk.models.infrastructure.*") // generated
4048
}
4149
total {
4250
log {

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ ktor-server-core = { group = "io.ktor", name = "ktor-server-core", version.ref =
4848

4949
# Testing
5050
awaitility = { group = "org.awaitility", name = "awaitility-kotlin", version.ref = "awaitility" }
51+
kotest-assertions-core = { group = "io.kotest", name = "kotest-assertions-core", version.ref = "kotest" }
5152
kotest-assertions-json = { group = "io.kotest", name = "kotest-assertions-json", version.ref = "kotest" }
5253
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutines" }
5354
ktor-client-mock = { group = "io.ktor", name = "ktor-client-mock", version.ref = "ktor" }
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
**/auth/**
10+
**/infrastructure/**
11+
!**/Base64ByteArray.kt
12+
!**/Bytes.kt
13+
14+
15+
## Exclude Models which are causing problems
16+
**/JSONRPCResponse.kt
17+
**/Result.kt
18+
**/ListToolsResult.kt
19+
**/InitializeRequest.kt
20+
**/InitializeResult.kt
21+
**/ServerCapabilities.kt
22+
**/InitializeRequestParams.kt
23+
**/CreateMessageRequest.kt
24+
**/CreateMessageRequestParams.kt
25+
**/ClientCapabilities.kt
26+
**/Tool.kt
27+
**/ToolInputSchema.kt
28+
**/ToolOutputSchema.kt
29+

0 commit comments

Comments
 (0)