[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADRY1T28HP8BQ9F8ZD7C4N":3,"skill-same:01M6ADRY1T28HP8BQ9F8ZD7C4N":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6ADRY1T28HP8BQ9F8ZD7C4N","kotlin-mcp-server-generator",null,"Generate a complete Kotlin MCP server project with proper structure, dependencies, and implementation using the official io.modelcontextprotocol:kotlin-sdk library.","github\u002Fawesome-copilot","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3PBDYPK7NVFJNJ66Y8RS",41081,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fkotlin-mcp-server-generator\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"kotlin","generator","MCP","kotlin mcp server generator","server","mcp server","library","generate","official","implementation","dependencies","structure","project","io","complete","with","sdk","2026-11-10 10:12:30",false,"---\nname: kotlin-mcp-server-generator\ndescription: 'Generate a complete Kotlin MCP server project with proper structure, dependencies, and implementation using the official io.modelcontextprotocol:kotlin-sdk library.'\n---\n\n# Kotlin MCP Server Project Generator\n\nGenerate a complete, production-ready Model Context Protocol (MCP) server project in Kotlin.\n\n## Project Requirements\n\nYou will create a Kotlin MCP server with:\n\n1. **Project Structure**: Gradle-based Kotlin project layout\n2. **Dependencies**: Official MCP SDK, Ktor, and kotlinx libraries\n3. **Server Setup**: Configured MCP server with transports\n4. **Tools**: At least 2-3 useful tools with typed inputs\u002Foutputs\n5. **Error Handling**: Proper exception handling and validation\n6. **Documentation**: README with setup and usage instructions\n7. **Testing**: Basic test structure with coroutines\n\n## Template Structure\n\n```\nmyserver\u002F\n├── build.gradle.kts\n├── settings.gradle.kts\n├── gradle.properties\n├── src\u002F\n│   ├── main\u002F\n│   │   └── kotlin\u002F\n│   │       └── com\u002Fexample\u002Fmyserver\u002F\n│   │           ├── Main.kt\n│   │           ├── Server.kt\n│   │           ├── config\u002F\n│   │           │   └── Config.kt\n│   │           └── tools\u002F\n│   │               ├── Tool1.kt\n│   │               └── Tool2.kt\n│   └── test\u002F\n│       └── kotlin\u002F\n│           └── com\u002Fexample\u002Fmyserver\u002F\n│               └── ServerTest.kt\n└── README.md\n```\n\n## build.gradle.kts Template\n\n```kotlin\nplugins {\n    kotlin(\"jvm\") version \"2.1.0\"\n    kotlin(\"plugin.serialization\") version \"2.1.0\"\n    application\n}\n\ngroup = \"com.example\"\nversion = \"1.0.0\"\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    implementation(\"io.modelcontextprotocol:kotlin-sdk:0.7.2\")\n    \n    \u002F\u002F Ktor for transports\n    implementation(\"io.ktor:ktor-server-netty:3.0.0\")\n    implementation(\"io.ktor:ktor-client-cio:3.0.0\")\n    \n    \u002F\u002F Serialization\n    implementation(\"org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3\")\n    \n    \u002F\u002F Coroutines\n    implementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0\")\n    \n    \u002F\u002F Logging\n    implementation(\"io.github.oshai:kotlin-logging-jvm:7.0.0\")\n    implementation(\"ch.qos.logback:logback-classic:1.5.12\")\n    \n    \u002F\u002F Testing\n    testImplementation(kotlin(\"test\"))\n    testImplementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0\")\n}\n\napplication {\n    mainClass.set(\"com.example.myserver.MainKt\")\n}\n\ntasks.test {\n    useJUnitPlatform()\n}\n\nkotlin {\n    jvmToolchain(17)\n}\n```\n\n## settings.gradle.kts Template\n\n```kotlin\nrootProject.name = \"{{PROJECT_NAME}}\"\n```\n\n## Main.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport\nimport kotlinx.coroutines.runBlocking\nimport io.github.oshai.kotlinlogging.KotlinLogging\n\nprivate val logger = KotlinLogging.logger {}\n\nfun main() = runBlocking {\n    logger.info { \"Starting MCP server...\" }\n    \n    val config = loadConfig()\n    val server = createServer(config)\n    \n    \u002F\u002F Use stdio transport\n    val transport = StdioServerTransport()\n    \n    logger.info { \"Server '${config.name}' v${config.version} ready\" }\n    server.connect(transport)\n}\n```\n\n## Server.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\nimport io.modelcontextprotocol.kotlin.sdk.server.ServerOptions\nimport io.modelcontextprotocol.kotlin.sdk.Implementation\nimport io.modelcontextprotocol.kotlin.sdk.ServerCapabilities\nimport com.example.myserver.tools.registerTools\n\nfun createServer(config: Config): Server {\n    val server = Server(\n        serverInfo = Implementation(\n            name = config.name,\n            version = config.version\n        ),\n        options = ServerOptions(\n            capabilities = ServerCapabilities(\n                tools = ServerCapabilities.Tools(),\n                resources = ServerCapabilities.Resources(\n                    subscribe = true,\n                    listChanged = true\n                ),\n                prompts = ServerCapabilities.Prompts(listChanged = true)\n            )\n        )\n    ) {\n        config.description\n    }\n    \n    \u002F\u002F Register all tools\n    server.registerTools()\n    \n    return server\n}\n```\n\n## Config.kt Template\n\n```kotlin\npackage com.example.myserver.config\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Config(\n    val name: String = \"{{PROJECT_NAME}}\",\n    val version: String = \"1.0.0\",\n    val description: String = \"{{PROJECT_DESCRIPTION}}\"\n)\n\nfun loadConfig(): Config {\n    return Config(\n        name = System.getenv(\"SERVER_NAME\") ?: \"{{PROJECT_NAME}}\",\n        version = System.getenv(\"VERSION\") ?: \"1.0.0\",\n        description = System.getenv(\"DESCRIPTION\") ?: \"{{PROJECT_DESCRIPTION}}\"\n    )\n}\n```\n\n## Tool1.kt Template\n\n```kotlin\npackage com.example.myserver.tools\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\nimport io.modelcontextprotocol.kotlin.sdk.CallToolRequest\nimport io.modelcontextprotocol.kotlin.sdk.CallToolResult\nimport io.modelcontextprotocol.kotlin.sdk.TextContent\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport kotlinx.serialization.json.putJsonArray\n\nfun Server.registerTool1() {\n    addTool(\n        name = \"tool1\",\n        description = \"Description of what tool1 does\",\n        inputSchema = buildJsonObject {\n            put(\"type\", \"object\")\n            putJsonObject(\"properties\") {\n                putJsonObject(\"param1\") {\n                    put(\"type\", \"string\")\n                    put(\"description\", \"First parameter\")\n                }\n                putJsonObject(\"param2\") {\n                    put(\"type\", \"integer\")\n                    put(\"description\", \"Optional second parameter\")\n                }\n            }\n            putJsonArray(\"required\") {\n                add(\"param1\")\n            }\n        }\n    ) { request: CallToolRequest ->\n        \u002F\u002F Extract and validate parameters\n        val param1 = request.params.arguments[\"param1\"] as? String\n            ?: throw IllegalArgumentException(\"param1 is required\")\n        val param2 = (request.params.arguments[\"param2\"] as? Number)?.toInt() ?: 0\n        \n        \u002F\u002F Perform tool logic\n        val result = performTool1Logic(param1, param2)\n        \n        CallToolResult(\n            content = listOf(\n                TextContent(text = result)\n            )\n        )\n    }\n}\n\nprivate fun performTool1Logic(param1: String, param2: Int): String {\n    \u002F\u002F Implement tool logic here\n    return \"Processed: $param1 with value $param2\"\n}\n```\n\n## tools\u002FToolRegistry.kt Template\n\n```kotlin\npackage com.example.myserver.tools\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\n\nfun Server.registerTools() {\n    registerTool1()\n    registerTool2()\n    \u002F\u002F Register additional tools here\n}\n```\n\n## ServerTest.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport kotlinx.coroutines.test.runTest\nimport kotlin.test.Test\nimport kotlin.test.assertEquals\nimport kotlin.test.assertFalse\n\nclass ServerTest {\n    \n    @Test\n    fun `test server creation`() = runTest {\n        val config = Config(\n            name = \"test-server\",\n            version = \"1.0.0\",\n            description = \"Test server\"\n        )\n        \n        val server = createServer(config)\n        \n        assertEquals(\"test-server\", server.serverInfo.name)\n        assertEquals(\"1.0.0\", server.serverInfo.version)\n    }\n    \n    @Test\n    fun `test tool1 execution`() = runTest {\n        val config = Config()\n        val server = createServer(config)\n        \n        \u002F\u002F Test tool execution\n        \u002F\u002F Note: You'll need to implement proper testing utilities\n        \u002F\u002F for calling tools in the server\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# {{PROJECT_NAME}}\n\nA Model Context Protocol (MCP) server built with Kotlin.\n\n## Description\n\n{{PROJECT_DESCRIPTION}}\n\n## Requirements\n\n- Java 17 or higher\n- Kotlin 2.1.0\n\n## Installation\n\nBuild the project:\n\n\\`\\`\\`bash\n.\u002Fgradlew build\n\\`\\`\\`\n\n## Usage\n\nRun the server with stdio transport:\n\n\\`\\`\\`bash\n.\u002Fgradlew run\n\\`\\`\\`\n\nOr build and run the jar:\n\n\\`\\`\\`bash\n.\u002Fgradlew installDist\n.\u002Fbuild\u002Finstall\u002F{{PROJECT_NAME}}\u002Fbin\u002F{{PROJECT_NAME}}\n\\`\\`\\`\n\n## Configuration\n\nConfigure via environment variables:\n\n- `SERVER_NAME`: Server name (default: \"{{PROJECT_NAME}}\")\n- `VERSION`: Server version (default: \"1.0.0\")\n- `DESCRIPTION`: Server description\n\n## Available Tools\n\n### tool1\n{{TOOL1_DESCRIPTION}}\n\n**Input:**\n- `param1` (string, required): First parameter\n- `param2` (integer, optional): Second parameter\n\n**Output:**\n- Text result of the operation\n\n## Development\n\nRun tests:\n\n\\`\\`\\`bash\n.\u002Fgradlew test\n\\`\\`\\`\n\nBuild:\n\n\\`\\`\\`bash\n.\u002Fgradlew build\n\\`\\`\\`\n\nRun with auto-reload (development):\n\n\\`\\`\\`bash\n.\u002Fgradlew run --continuous\n\\`\\`\\`\n\n## Multiplatform\n\nThis project uses Kotlin Multiplatform and can target JVM, Wasm, and iOS.\nSee `build.gradle.kts` for platform configuration.\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\nWhen generating a Kotlin MCP server:\n\n1. **Gradle Setup**: Create proper `build.gradle.kts` with all dependencies\n2. **Package Structure**: Follow Kotlin package conventions\n3. **Type Safety**: Use data classes and kotlinx.serialization\n4. **Coroutines**: All operations should be suspending functions\n5. **Error Handling**: Use Kotlin exceptions and validation\n6. **JSON Schemas**: Use `buildJsonObject` for tool schemas\n7. **Testing**: Include coroutine test utilities\n8. **Logging**: Use kotlin-logging for structured logging\n9. **Configuration**: Use data classes and environment variables\n10. **Documentation**: KDoc comments for public APIs\n\n## Best Practices\n\n- Use suspending functions for all async operations\n- Leverage Kotlin's null safety and type system\n- Use data classes for structured data\n- Apply kotlinx.serialization for JSON handling\n- Use sealed classes for result types\n- Implement proper error handling with Result\u002FEither patterns\n- Write tests using kotlinx-coroutines-test\n- Use dependency injection for testability\n- Follow Kotlin coding conventions\n- Use meaningful names and KDoc comments\n\n## Transport Options\n\n### Stdio Transport\n```kotlin\nval transport = StdioServerTransport()\nserver.connect(transport)\n```\n\n### SSE Transport (Ktor)\n```kotlin\nembeddedServer(Netty, port = 8080) {\n    mcp {\n        Server(\u002F*...*\u002F) { \"Description\" }\n    }\n}.start(wait = true)\n```\n\n## Multiplatform Configuration\n\nFor multiplatform projects, add to `build.gradle.kts`:\n\n```kotlin\nkotlin {\n    jvm()\n    js(IR) { nodejs() }\n    wasmJs()\n    \n    sourceSets {\n        commonMain.dependencies {\n            implementation(\"io.modelcontextprotocol:kotlin-sdk:0.7.2\")\n        }\n    }\n}\n```\n","# Kotlin MCP Server Project Generator\n\nGenerate a complete, production-ready Model Context Protocol (MCP) server project in Kotlin.\n\n## Project Requirements\n\nYou will create a Kotlin MCP server with:\n\n1. **Project Structure**: Gradle-based Kotlin project layout\n2. **Dependencies**: Official MCP SDK, Ktor, and kotlinx libraries\n3. **Server Setup**: Configured MCP server with transports\n4. **Tools**: At least 2-3 useful tools with typed inputs\u002Foutputs\n5. **Error Handling**: Proper exception handling and validation\n6. **Documentation**: README with setup and usage instructions\n7. **Testing**: Basic test structure with coroutines\n\n## Template Structure\n\n```\nmyserver\u002F\n├── build.gradle.kts\n├── settings.gradle.kts\n├── gradle.properties\n├── src\u002F\n│   ├── main\u002F\n│   │   └── kotlin\u002F\n│   │       └── com\u002Fexample\u002Fmyserver\u002F\n│   │           ├── Main.kt\n│   │           ├── Server.kt\n│   │           ├── config\u002F\n│   │           │   └── Config.kt\n│   │           └── tools\u002F\n│   │               ├── Tool1.kt\n│   │               └── Tool2.kt\n│   └── test\u002F\n│       └── kotlin\u002F\n│           └── com\u002Fexample\u002Fmyserver\u002F\n│               └── ServerTest.kt\n└── README.md\n```\n\n## build.gradle.kts Template\n\n```kotlin\nplugins {\n    kotlin(\"jvm\") version \"2.1.0\"\n    kotlin(\"plugin.serialization\") version \"2.1.0\"\n    application\n}\n\ngroup = \"com.example\"\nversion = \"1.0.0\"\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    implementation(\"io.modelcontextprotocol:kotlin-sdk:0.7.2\")\n    \n    \u002F\u002F Ktor for transports\n    implementation(\"io.ktor:ktor-server-netty:3.0.0\")\n    implementation(\"io.ktor:ktor-client-cio:3.0.0\")\n    \n    \u002F\u002F Serialization\n    implementation(\"org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3\")\n    \n    \u002F\u002F Coroutines\n    implementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0\")\n    \n    \u002F\u002F Logging\n    implementation(\"io.github.oshai:kotlin-logging-jvm:7.0.0\")\n    implementation(\"ch.qos.logback:logback-classic:1.5.12\")\n    \n    \u002F\u002F Testing\n    testImplementation(kotlin(\"test\"))\n    testImplementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0\")\n}\n\napplication {\n    mainClass.set(\"com.example.myserver.MainKt\")\n}\n\ntasks.test {\n    useJUnitPlatform()\n}\n\nkotlin {\n    jvmToolchain(17)\n}\n```\n\n## settings.gradle.kts Template\n\n```kotlin\nrootProject.name = \"{{PROJECT_NAME}}\"\n```\n\n## Main.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport\nimport kotlinx.coroutines.runBlocking\nimport io.github.oshai.kotlinlogging.KotlinLogging\n\nprivate val logger = KotlinLogging.logger {}\n\nfun main() = runBlocking {\n    logger.info { \"Starting MCP server...\" }\n    \n    val config = loadConfig()\n    val server = createServer(config)\n    \n    \u002F\u002F Use stdio transport\n    val transport = StdioServerTransport()\n    \n    logger.info { \"Server '${config.name}' v${config.version} ready\" }\n    server.connect(transport)\n}\n```\n\n## Server.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\nimport io.modelcontextprotocol.kotlin.sdk.server.ServerOptions\nimport io.modelcontextprotocol.kotlin.sdk.Implementation\nimport io.modelcontextprotocol.kotlin.sdk.ServerCapabilities\nimport com.example.myserver.tools.registerTools\n\nfun createServer(config: Config): Server {\n    val server = Server(\n        serverInfo = Implementation(\n            name = config.name,\n            version = config.version\n        ),\n        options = ServerOptions(\n            capabilities = ServerCapabilities(\n                tools = ServerCapabilities.Tools(),\n                resources = ServerCapabilities.Resources(\n                    subscribe = true,\n                    listChanged = true\n                ),\n                prompts = ServerCapabilities.Prompts(listChanged = true)\n            )\n        )\n    ) {\n        config.description\n    }\n    \n    \u002F\u002F Register all tools\n    server.registerTools()\n    \n    return server\n}\n```\n\n## Config.kt Template\n\n```kotlin\npackage com.example.myserver.config\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class Config(\n    val name: String = \"{{PROJECT_NAME}}\",\n    val version: String = \"1.0.0\",\n    val description: String = \"{{PROJECT_DESCRIPTION}}\"\n)\n\nfun loadConfig(): Config {\n    return Config(\n        name = System.getenv(\"SERVER_NAME\") ?: \"{{PROJECT_NAME}}\",\n        version = System.getenv(\"VERSION\") ?: \"1.0.0\",\n        description = System.getenv(\"DESCRIPTION\") ?: \"{{PROJECT_DESCRIPTION}}\"\n    )\n}\n```\n\n## Tool1.kt Template\n\n```kotlin\npackage com.example.myserver.tools\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\nimport io.modelcontextprotocol.kotlin.sdk.CallToolRequest\nimport io.modelcontextprotocol.kotlin.sdk.CallToolResult\nimport io.modelcontextprotocol.kotlin.sdk.TextContent\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport kotlinx.serialization.json.putJsonArray\n\nfun Server.registerTool1() {\n    addTool(\n        name = \"tool1\",\n        description = \"Description of what tool1 does\",\n        inputSchema = buildJsonObject {\n            put(\"type\", \"object\")\n            putJsonObject(\"properties\") {\n                putJsonObject(\"param1\") {\n                    put(\"type\", \"string\")\n                    put(\"description\", \"First parameter\")\n                }\n                putJsonObject(\"param2\") {\n                    put(\"type\", \"integer\")\n                    put(\"description\", \"Optional second parameter\")\n                }\n            }\n            putJsonArray(\"required\") {\n                add(\"param1\")\n            }\n        }\n    ) { request: CallToolRequest ->\n        \u002F\u002F Extract and validate parameters\n        val param1 = request.params.arguments[\"param1\"] as? String\n            ?: throw IllegalArgumentException(\"param1 is required\")\n        val param2 = (request.params.arguments[\"param2\"] as? Number)?.toInt() ?: 0\n        \n        \u002F\u002F Perform tool logic\n        val result = performTool1Logic(param1, param2)\n        \n        CallToolResult(\n            content = listOf(\n                TextContent(text = result)\n            )\n        )\n    }\n}\n\nprivate fun performTool1Logic(param1: String, param2: Int): String {\n    \u002F\u002F Implement tool logic here\n    return \"Processed: $param1 with value $param2\"\n}\n```\n\n## tools\u002FToolRegistry.kt Template\n\n```kotlin\npackage com.example.myserver.tools\n\nimport io.modelcontextprotocol.kotlin.sdk.server.Server\n\nfun Server.registerTools() {\n    registerTool1()\n    registerTool2()\n    \u002F\u002F Register additional tools here\n}\n```\n\n## ServerTest.kt Template\n\n```kotlin\npackage com.example.myserver\n\nimport kotlinx.coroutines.test.runTest\nimport kotlin.test.Test\nimport kotlin.test.assertEquals\nimport kotlin.test.assertFalse\n\nclass ServerTest {\n    \n    @Test\n    fun `test server creation`() = runTest {\n        val config = Config(\n            name = \"test-server\",\n            version = \"1.0.0\",\n            description = \"Test server\"\n        )\n        \n        val server = createServer(config)\n        \n        assertEquals(\"test-server\", server.serverInfo.name)\n        assertEquals(\"1.0.0\", server.serverInfo.version)\n    }\n    \n    @Test\n    fun `test tool1 execution`() = runTest {\n        val config = Config()\n        val server = createServer(config)\n        \n        \u002F\u002F Test tool execution\n        \u002F\u002F Note: You'll need to implement proper testing utilities\n        \u002F\u002F for calling tools in the server\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# {{PROJECT_NAME}}\n\nA Model Context Protocol (MCP) server built with Kotlin.\n\n## Description\n\n{{PROJECT_DESCRIPTION}}\n\n## Requirements\n\n- Java 17 or higher\n- Kotlin 2.1.0\n\n## Installation\n\nBuild the project:\n\n\\`\\`\\`bash\n.\u002Fgradlew build\n\\`\\`\\`\n\n## Usage\n\nRun the server with stdio transport:\n\n\\`\\`\\`bash\n.\u002Fgradlew run\n\\`\\`\\`\n\nOr build and run the jar:\n\n\\`\\`\\`bash\n.\u002Fgradlew installDist\n.\u002Fbuild\u002Finstall\u002F{{PROJECT_NAME}}\u002Fbin\u002F{{PROJECT_NAME}}\n\\`\\`\\`\n\n## Configuration\n\nConfigure via environment variables:\n\n- `SERVER_NAME`: Server name (default: \"{{PROJECT_NAME}}\")\n- `VERSION`: Server version (default: \"1.0.0\")\n- `DESCRIPTION`: Server description\n\n## Available Tools\n\n### tool1\n{{TOOL1_DESCRIPTION}}\n\n**Input:**\n- `param1` (string, required): First parameter\n- `param2` (integer, optional): Second parameter\n\n**Output:**\n- Text result of the operation\n\n## Development\n\nRun tests:\n\n\\`\\`\\`bash\n.\u002Fgradlew test\n\\`\\`\\`\n\nBuild:\n\n\\`\\`\\`bash\n.\u002Fgradlew build\n\\`\\`\\`\n\nRun with auto-reload (development):\n\n\\`\\`\\`bash\n.\u002Fgradlew run --continuous\n\\`\\`\\`\n\n## Multiplatform\n\nThis project uses Kotlin Multiplatform and can target JVM, Wasm, and iOS.\nSee `build.gradle.kts` for platform configuration.\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\nWhen generating a Kotlin MCP server:\n\n1. **Gradle Setup**: Create proper `build.gradle.kts` with all dependencies\n2. **Package Structure**: Follow Kotlin package conventions\n3. **Type Safety**: Use data classes and kotlinx.serialization\n4. **Coroutines**: All operations should be suspending functions\n5. **Error Handling**: Use Kotlin exceptions and validation\n6. **JSON Schemas**: Use `buildJsonObject` for tool schemas\n7. **Testing**: Include coroutine test utilities\n8. **Logging**: Use kotlin-logging for structured logging\n9. **Configuration**: Use data classes and environment variables\n10. **Documentation**: KDoc comments for public APIs\n\n## Best Practices\n\n- Use suspending functions for all async operations\n- Leverage Kotlin's null safety and type system\n- Use data classes for structured data\n- Apply kotlinx.serialization for JSON handling\n- Use sealed classes for result types\n- Implement proper error handling with Result\u002FEither patterns\n- Write tests using kotlinx-coroutines-test\n- Use dependency injection for testability\n- Follow Kotlin coding conventions\n- Use meaningful names and KDoc comments\n\n## Transport Options\n\n### Stdio Transport\n```kotlin\nval transport = StdioServerTransport()\nserver.connect(transport)\n```\n\n### SSE Transport (Ktor)\n```kotlin\nembeddedServer(Netty, port = 8080) {\n    mcp {\n        Server(\u002F*...*\u002F) { \"Description\" }\n    }\n}.start(wait = true)\n```\n\n## Multiplatform Configuration\n\nFor multiplatform projects, add to `build.gradle.kts`:\n\n```kotlin\nkotlin {\n    jvm()\n    js(IR) { nodejs() }\n    wasmJs()\n    \n    sourceSets {\n        commonMain.dependencies {\n            implementation(\"io.modelcontextprotocol:kotlin-sdk:0.7.2\")\n        }\n    }\n}\n```\n",{"name":5,"description":7},"main","5269f7ea2d6c3a9bfda5ed878b6726cf509121fd","skills\u002Fkotlin-mcp-server-generator",5344,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot","https:\u002F\u002Fawesome-copilot.github.com\u002F","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-13 02:05:36",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add github\u002Fawesome-copilot --skill kotlin-mcp-server-generator",{"tool":65,"command":66},"bunx","bunx skills add github\u002Fawesome-copilot --skill kotlin-mcp-server-generator",{"tool":68,"command":69},"pnpm","pnpm dlx skills add github\u002Fawesome-copilot --skill kotlin-mcp-server-generator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fkotlin-mcp-server-generator\u002FSKILL.md",true,[73,79,85,89],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"sections\u002Fdesign-and-handoff.md","REFERENCE","参考文档",33559,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fgstack\u002Foffice-hours\u002Fsections\u002Fdesign-and-handoff.md",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"sections\u002Fdesign-and-handoff.md.tmpl","OTHER","其他",27761,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fgstack\u002Foffice-hours\u002Fsections\u002Fdesign-and-handoff.md.tmpl",{"path":86,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":87,"sourceHtmlUrl":88},"sections\u002Fmanifest.json",713,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fgstack\u002Foffice-hours\u002Fsections\u002Fmanifest.json",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"SKILL.md.tmpl",30541,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fgstack\u002Foffice-hours\u002FSKILL.md.tmpl",[94,123,151,181,213,230],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":104,"publishedAt":44},"01M70KXZNX9ES38N2A8M58ZZMZ","supabase-rls-policies","Write, review, and test Supabase Row Level Security (RLS) policies so that one user cannot read or change another user's rows. Use when creating or changing tables, policies, views, or security definer functions in a Supabase project, when reviewing a migration that touches RLS, or when asked to prove user isolation with pgTAP tests that sign in as two users.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fsupabase-rls-policies\u002FSKILL.md",[100,103],{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[105,106,107,108,39,109,110,111,112,113,114,115,116,117,118,119,120,121,122,42],"supabase","rls","supabase rls","supabase rls policies","when","review","change","read","write","security","isolation","tables","as","tests","prove","use","users","functions",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":130,"publishedAt":44},"01M70KWA5YWXDV6V8DZ19E3T2Y","skill-distribution-audit","Audit a skill collection before release or investigate installer omissions, archived\u002Ftemplate leakage, duplicate identities, and manifest drift. Reconcile the intended public source set, distribution manifest, and actual discovery output for a specified consumer version. Includes a deterministic set-comparison helper.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fskill-distribution-audit\u002FSKILL.md",[129],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150],"distribution","skill distribution audit","audit","SET","deterministic","installer","for","discovery","comparison","helper","manifest","version","collection","drift","output","investigate","duplicate","template","release","reconcile",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":155,"sourceHtmlUrl":156,"categories":157,"keywords":163,"publishedAt":44},"01M70KCJPFVW7PPQ49CC5R8JGK","logicapps-custom-code-net10-migration","Migrate Azure Logic Apps Standard local-function custom-code projects from .NET 8 to .NET 10. Use for legacy Logic Apps custom-code workspace upgrades, project\u002Fpackage configuration, custom-worker settings, publication, and integrated VS Code debugging. Not for ordinary .NET applications, standalone Azure Functions, Consumption workflows, or cloud deployment.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FSKILL.md",[158],{"categoryNo":159,"categoryName":160,"taxonomyType":161,"taxonomyTypeDesc":162},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[164,165,166,167,168,169,137,39,170,171,172,173,174,175,176,120,177,178,179,180],"custom","code","logicapps custom code net10 migration","migration","projects","standalone","deployment","applications","local","azure","worker","upgrades","package","apps","Legacy","debugging","workflows",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":185,"sourceHtmlUrl":186,"categories":187,"keywords":190,"publishedAt":44},"01M6AEBN37RQMXJ3298PEY7PG1","winmd-api-search","Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI\u002FML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FSKILL.md",[188,189],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":159,"categoryName":160,"taxonomyType":161,"taxonomyTypeDesc":162},[191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,109,206,207,208,209,210,137,211,212],"winmd api search","search","api","windows","desktop","file access","enumeration","ui","ml","file","networking","capabilities","notifications","explore","access","features","full","camera","events","platform","methods","controls",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":217,"licenseFileUrl":218,"sourceHtmlUrl":219,"categories":220,"keywords":226,"publishedAt":44},"01M6AE571R3SC1ZGE202B3NB5S","resemble-detect","Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using Resemble AI","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FSKILL.md",[221,222,225],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":223,"categoryName":224,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[227,134,200,228,229],"resemble detect","https","identity",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":217,"licenseFileUrl":234,"sourceHtmlUrl":235,"categories":236,"keywords":241,"publishedAt":44},"01M6AE30BSK2HCY4TQQ22Z8JRD","quality-playbook","Run a complete quality engineering audit on any codebase. Derives behavioral requirements from the code, generates spec-traced functional tests, runs a three-pass code review with regression tests, executes a multi-model spec audit (Council of Three), and produces a consolidated bug report with TDD-verified patches. Finds the 35% of real defects that structural code review alone cannot catch. Works with any language. Trigger on 'quality playbook', 'spec audit', 'Council of Three', 'fitness-to-purpose', or 'coverage theater'.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FSKILL.md",[237,240],{"categoryNo":238,"categoryName":239,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[242,243,244,245,165,110,9,133,246,247,228,248,249,250,251,252,253,254,255,256,257,258,118,259,260,261,262],"playbook","quality playbook","quality","code review","tdd","run","report","spec","bug report","council","engineering","functional","spec audit","bug","verified","multi-model","three","coverage","model","regression","structural"]