{"id":"1dd09810-0f10-4cfa-b97a-47b0caca7f69","shortId":"m94FJV","kind":"skill","title":"kotlin-mcp-server-generator","tagline":"Generate a complete Kotlin MCP server project with proper structure, dependencies, and implementation using the official io.modelcontextprotocol:kotlin-sdk library.","description":"# 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/outputs\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/\n├── build.gradle.kts\n├── settings.gradle.kts\n├── gradle.properties\n├── src/\n│   ├── main/\n│   │   └── kotlin/\n│   │       └── com/example/myserver/\n│   │           ├── Main.kt\n│   │           ├── Server.kt\n│   │           ├── config/\n│   │           │   └── Config.kt\n│   │           └── tools/\n│   │               ├── Tool1.kt\n│   │               └── Tool2.kt\n│   └── test/\n│       └── kotlin/\n│           └── com/example/myserver/\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    // 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    // Serialization\n    implementation(\"org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3\")\n    \n    // Coroutines\n    implementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0\")\n    \n    // Logging\n    implementation(\"io.github.oshai:kotlin-logging-jvm:7.0.0\")\n    implementation(\"ch.qos.logback:logback-classic:1.5.12\")\n    \n    // 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    // 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    // 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        // 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        // 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    // Implement tool logic here\n    return \"Processed: $param1 with value $param2\"\n}\n```\n\n## tools/ToolRegistry.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    // 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        // Test tool execution\n        // Note: You'll need to implement proper testing utilities\n        // 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./gradlew build\n\\`\\`\\`\n\n## Usage\n\nRun the server with stdio transport:\n\n\\`\\`\\`bash\n./gradlew run\n\\`\\`\\`\n\nOr build and run the jar:\n\n\\`\\`\\`bash\n./gradlew installDist\n./build/install/{{PROJECT_NAME}}/bin/{{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./gradlew test\n\\`\\`\\`\n\nBuild:\n\n\\`\\`\\`bash\n./gradlew build\n\\`\\`\\`\n\nRun with auto-reload (development):\n\n\\`\\`\\`bash\n./gradlew 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/Either 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(/*...*/) { \"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```","tags":["kotlin","mcp","server","generator","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest"],"capabilities":["skill","source-github","skill-kotlin-mcp-server-generator","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/kotlin-mcp-server-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 33270 github stars · SKILL.md body (10,462 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:15.628Z","embedding":null,"createdAt":"2026-04-18T20:26:13.861Z","updatedAt":"2026-05-18T18:52:15.628Z","lastSeenAt":"2026-05-18T18:52:15.628Z","tsv":"'-3':87 '/bin':639 '/build/install':636 '/gradlew':615,625,634,688,692,701 '0':462 '0.7.2':163,919 '1':56,732 '1.0.0':154,350,370,539,553,658 '1.5.12':210 '1.7.3':188 '1.9.0':196,221 '10':803 '17':229,605 '2':65,86,741 '2.1.0':145,149,609 '3':74,748 '3.0.0':173,180 '4':82,756 '5':93,764 '6':101,772 '7':109,780 '7.0.0':204 '8':786 '8080':890 '9':795 'add':436,902 'addit':507 'addtool':399 'api':809 'appli':833 'applic':150,222 'assertequ':547,552 'async':817 'auto':697 'auto-reload':696 'avail':662 'base':61 'bash':614,624,633,687,691,700 'basic':111 'best':810 'build':611,616,628,690,693 'build.gradle.kts':119,138,718,737,904 'buildjsonobject':409,776 'built':597 'call':581 'calltoolrequest':439 'calltoolresult':471 'capabl':310 'ch.qos.logback':206 'cio':179 'class':340,523,753,799,829,840 'classic':209 'client':178 'code':865 'com.example':152 'com.example.myserver':240,283,514 'com.example.myserver.config':335 'com.example.myserver.mainkt':224 'com.example.myserver.tools':380,499 'com.example.myserver.tools.registertools':293 'com/example/myserver':125,135 'comment':806,872 'commonmain.dependencies':913 'complet':8,34 'config':128,259,264,296,297,341,358,360,532,533,546,562,563,567 'config.description':324 'config.kt':129,331 'config.name':273,305 'config.version':275,307 'configur':77,642,643,721,796,898 'content':472 'context':39,593 'continu':703 'convent':747,866 'core':195 'coroutin':115,189,194,219,757,783,856 'creat':50,735 'createserv':263,295,545,566 'creation':529 'data':339,752,798,828,832 'default':651,657 'depend':16,66,157,740,859 'descript':352,355,371,373,375,402,403,421,430,540,600,602,659,661,666,893 'develop':684,699 'document':102,804 'embeddedserv':887 'environ':645,801 'error':94,765,846 'except':97,769 'execut':559,570 'extract':440 'first':422,671 'follow':744,863 'fun':251,294,356,397,478,502,526,556 'function':763,814 'generat':5,6,31,32,724,727 'gradl':60,733 'gradle-bas':59 'gradle.properties':121 'group':151 'handl':95,98,766,837,847 'higher':607 'illegalargumentexcept':451 'implement':18,158,167,174,182,190,198,205,303,485,576,844,914 'import':241,243,245,284,286,288,290,292,336,381,383,385,387,389,391,393,395,500,515,517,519,521 'includ':782 'inject':860 'input':667 'inputs/outputs':92 'inputschema':408 'instal':610 'installdist':635 'instruct':108,725 'int':483 'integ':428,674 'io':716 'io.github.oshai':199 'io.github.oshai.kotlinlogging.kotlinlogging':246 'io.ktor':168,175 'io.modelcontextprotocol':22,159,915 'io.modelcontextprotocol.kotlin.sdk.calltoolrequest':384 'io.modelcontextprotocol.kotlin.sdk.calltoolresult':386 'io.modelcontextprotocol.kotlin.sdk.implementation':289 'io.modelcontextprotocol.kotlin.sdk.server.server':285,382,501 'io.modelcontextprotocol.kotlin.sdk.server.serveroptions':287 'io.modelcontextprotocol.kotlin.sdk.server.stdioservertransport':242 'io.modelcontextprotocol.kotlin.sdk.servercapabilities':291 'io.modelcontextprotocol.kotlin.sdk.textcontent':388 'ir':909 'jar':632 'java':604 'js':908 'json':187,773,836 'jvm':143,203,713,907 'jvmtoolchain':228 'kdoc':805,871 'kotlin':2,9,24,27,45,52,62,124,134,140,142,146,161,201,213,227,232,238,281,333,378,497,512,599,608,708,729,745,768,790,820,864,877,886,905,906,917 'kotlin-log':789 'kotlin-logging-jvm':200 'kotlin-mcp-server-gener':1 'kotlin-sdk':23,160,916 'kotlin.test.assertequals':520 'kotlin.test.assertfalse':522 'kotlin.test.test':518 'kotlinlogging.logger':250 'kotlinx':72,185,193,218,855 'kotlinx-coroutines-cor':192 'kotlinx-coroutines-test':217,854 'kotlinx-serialization-json':184 'kotlinx.coroutines.runblocking':244 'kotlinx.coroutines.test.runtest':516 'kotlinx.serialization':755,834 'kotlinx.serialization.json.buildjsonobject':390 'kotlinx.serialization.json.put':392 'kotlinx.serialization.json.putjsonarray':396 'kotlinx.serialization.json.putjsonobject':394 'kotlinx.serialization.serializable':337 'ktor':70,164,170,177,885 'ktor-client-cio':176 'ktor-server-netti':169 'layout':64 'least':85 'leverag':819 'librari':26,73 'licens':722 'listchang':318,322 'listof':473 'll':573 'loadconfig':260,357 'log':197,202,787,791,794 'logback':208 'logback-class':207 'logger':249 'logger.info':254,271 'logic':465,487 'main':123,252 'main.kt':126,236 'mainclass.set':223 'markdown':588 'mavencentr':156 'mcp':3,10,28,41,53,68,78,256,595,730,891 'meaning':868 'mit':723 'model':38,592 'multiplatform':704,709,897,900 'myserv':118 'name':235,304,343,346,361,364,366,400,534,590,638,641,648,650,653,869 'need':574 'netti':172,888 'nodej':910 'note':571 'null':822 'number':460 'object':412 'offici':21,67 'oper':683,759,818 'option':308,431,675,874 'org.jetbrains.kotlinx':183,191,216 'output':678 'packag':239,282,334,379,498,513,742,746 'param1':416,437,445,447,452,469,480,491,668 'param2':425,456,458,470,482,494,673 'paramet':423,433,443,672,677 'pattern':850 'perform':463 'performtool1logic':468,479 'platform':720 'plugin':141 'plugin.serialization':147 'port':889 'practic':811 'privat':247,477 'process':490 'product':36 'production-readi':35 'project':12,30,43,46,57,63,234,345,354,365,374,589,601,613,637,640,652,706,901 'prompt':320 'proper':14,96,577,736,845 'properti':414 'protocol':40,594 'public':808 'put':410,417,420,426,429 'putjsonarray':434 'putjsonobject':413,415,424 'readi':37,276 'readm':103 'readme.md':137,586 'regist':325,506 'registertool1':504 'registertool2':505 'reload':698 'repositori':155 'request':438 'request.params.arguments':446,457 'requir':47,435,454,603,670 'resourc':314 'result':467,476,680,842 'result/either':849 'return':329,359,489 'rootproject.name':233 'run':618,626,630,685,694,702 'runblock':253 'runtest':530,560 'safeti':750,823 'schema':774,779 'sdk':25,69,162,918 'seal':839 'second':432,676 'see':717 'serial':181,186 'serializ':338 'server':4,11,29,42,54,75,79,171,257,262,272,298,300,301,330,363,528,537,542,544,550,565,585,596,620,647,649,655,660,731,892 'server.connect':277,881 'server.kt':127,279 'server.registertool1':398 'server.registertools':328,503 'server.serverinfo.name':551 'server.serverinfo.version':554 'servercap':311 'servercapabilities.prompts':321 'servercapabilities.resources':315 'servercapabilities.tools':313 'serverinfo':302 'serveropt':309 'servertest':524 'servertest.kt':136,510 'settings.gradle.kts':120,230 'setup':76,105,734 'skill' 'skill-kotlin-mcp-server-generator' 'source-github' 'sourceset':912 'src':122 'sse':883 'start':255,894 'stdio':266,622,875 'stdioservertransport':270,880 'string':344,349,353,419,449,481,484,669 'structur':15,58,113,117,743,793,831 'subscrib':316 'suspend':762,813 'system':826 'system.getenv':362,368,372 'target':712 'tasks.test':225 'templat':116,139,231,237,280,332,377,496,511,587 'test':110,112,133,211,214,220,525,527,536,541,549,555,557,568,578,686,689,781,784,852,857 'test-serv':535,548 'testabl':862 'testimplement':212,215 'text':475,679 'textcont':474 'throw':450 'toint':461 'tool':83,89,130,312,327,464,486,508,569,582,663,778 'tool1':401,406,558,664,665 'tool1.kt':131,376 'tool2.kt':132 'tools/toolregistry.kt':495 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'transport':81,166,267,269,278,623,873,876,879,882,884 'true':317,319,323,896 'type':91,411,418,427,749,825,843 'usag':107,617 'use':19,88,265,707,751,767,775,788,797,812,827,838,853,858,867 'usejunitplatform':226 'util':579,785 'v':274 'val':248,258,261,268,299,342,347,351,444,455,466,531,543,561,564,878 'valid':100,442,771 'valu':493 'variabl':646,802 'version':144,148,153,306,348,367,369,538,654,656 'via':644 'wait':895 'wasm':714 'wasmj':911 'write':851","prices":[{"id":"0936455d-789c-48c9-b6f1-1bd32044d9df","listingId":"1dd09810-0f10-4cfa-b97a-47b0caca7f69","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:13.861Z"}],"sources":[{"listingId":"1dd09810-0f10-4cfa-b97a-47b0caca7f69","source":"github","sourceId":"github/awesome-copilot/kotlin-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/kotlin-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:49:59.899Z","lastSeenAt":"2026-05-18T18:52:15.628Z"},{"listingId":"1dd09810-0f10-4cfa-b97a-47b0caca7f69","source":"skills_sh","sourceId":"github/awesome-copilot/kotlin-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/kotlin-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:13.861Z","lastSeenAt":"2026-05-07T22:40:19.003Z"}],"details":{"listingId":"1dd09810-0f10-4cfa-b97a-47b0caca7f69","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"kotlin-mcp-server-generator","github":{"repo":"github/awesome-copilot","stars":33270,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-05-18T01:26:59Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"93dbb30417d6edc1d58de1a2aa6674d7c7e9f913","skill_md_path":"skills/kotlin-mcp-server-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/kotlin-mcp-server-generator"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"kotlin-mcp-server-generator","description":"Generate a complete Kotlin MCP server project with proper structure, dependencies, and implementation using the official io.modelcontextprotocol:kotlin-sdk library."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/kotlin-mcp-server-generator"},"updatedAt":"2026-05-18T18:52:15.628Z"}}