{"id":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","shortId":"QLfZkx","kind":"skill","title":"java-mcp-server-generator","tagline":"Generate a complete Model Context Protocol server project in Java using the official MCP Java SDK with reactive streams and optional Spring Boot integration.","description":"# Java MCP Server Generator\n\nGenerate a complete, production-ready MCP server in Java using the official Java SDK with Maven or Gradle.\n\n## Project Generation\n\nWhen asked to create a Java MCP server, generate a complete project with this structure:\n\n```\nmy-mcp-server/\n├── pom.xml (or build.gradle.kts)\n├── src/\n│   ├── main/\n│   │   ├── java/\n│   │   │   └── com/example/mcp/\n│   │   │       ├── McpServerApplication.java\n│   │   │       ├── config/\n│   │   │       │   └── ServerConfiguration.java\n│   │   │       ├── tools/\n│   │   │       │   ├── ToolDefinitions.java\n│   │   │       │   └── ToolHandlers.java\n│   │   │       ├── resources/\n│   │   │       │   ├── ResourceDefinitions.java\n│   │   │       │   └── ResourceHandlers.java\n│   │   │       └── prompts/\n│   │   │           ├── PromptDefinitions.java\n│   │   │           └── PromptHandlers.java\n│   │   └── resources/\n│   │       └── application.properties (if using Spring)\n│   └── test/\n│       └── java/\n│           └── com/example/mcp/\n│               └── McpServerTest.java\n└── README.md\n```\n\n## Maven pom.xml Template\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0\n         http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n\n    <groupId>com.example</groupId>\n    <artifactId>my-mcp-server</artifactId>\n    <version>1.0.0</version>\n    <packaging>jar</packaging>\n\n    <name>My MCP Server</name>\n    <description>Model Context Protocol server implementation</description>\n\n    <properties>\n        <java.version>17</java.version>\n        <maven.compiler.source>17</maven.compiler.source>\n        <maven.compiler.target>17</maven.compiler.target>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <mcp.version>0.14.1</mcp.version>\n        <slf4j.version>2.0.9</slf4j.version>\n        <logback.version>1.4.11</logback.version>\n        <junit.version>5.10.0</junit.version>\n    </properties>\n\n    <dependencies>\n        <!-- MCP Java SDK -->\n        <dependency>\n            <groupId>io.modelcontextprotocol.sdk</groupId>\n            <artifactId>mcp</artifactId>\n            <version>${mcp.version}</version>\n        </dependency>\n\n        <!-- Logging -->\n        <dependency>\n            <groupId>org.slf4j</groupId>\n            <artifactId>slf4j-api</artifactId>\n            <version>${slf4j.version}</version>\n        </dependency>\n        <dependency>\n            <groupId>ch.qos.logback</groupId>\n            <artifactId>logback-classic</artifactId>\n            <version>${logback.version}</version>\n        </dependency>\n\n        <!-- Testing -->\n        <dependency>\n            <groupId>org.junit.jupiter</groupId>\n            <artifactId>junit-jupiter</artifactId>\n            <version>${junit.version}</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>io.projectreactor</groupId>\n            <artifactId>reactor-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n    </dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.apache.maven.plugins</groupId>\n                <artifactId>maven-compiler-plugin</artifactId>\n                <version>3.11.0</version>\n            </plugin>\n            <plugin>\n                <groupId>org.apache.maven.plugins</groupId>\n                <artifactId>maven-surefire-plugin</artifactId>\n                <version>3.1.2</version>\n            </plugin>\n            <plugin>\n                <groupId>org.apache.maven.plugins</groupId>\n                <artifactId>maven-shade-plugin</artifactId>\n                <version>3.5.0</version>\n                <executions>\n                    <execution>\n                        <phase>package</phase>\n                        <goals>\n                            <goal>shade</goal>\n                        </goals>\n                        <configuration>\n                            <transformers>\n                                <transformer implementation=\"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer\">\n                                    <mainClass>com.example.mcp.McpServerApplication</mainClass>\n                                </transformer>\n                            </transformers>\n                        </configuration>\n                    </execution>\n                </executions>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n```\n\n## Gradle build.gradle.kts Template\n\n```kotlin\nplugins {\n    id(\"java\")\n    id(\"application\")\n}\n\ngroup = \"com.example\"\nversion = \"1.0.0\"\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_17\n    targetCompatibility = JavaVersion.VERSION_17\n}\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    // MCP Java SDK\n    implementation(\"io.modelcontextprotocol.sdk:mcp:0.14.1\")\n    \n    // Logging\n    implementation(\"org.slf4j:slf4j-api:2.0.9\")\n    implementation(\"ch.qos.logback:logback-classic:1.4.11\")\n    \n    // Testing\n    testImplementation(\"org.junit.jupiter:junit-jupiter:5.10.0\")\n    testImplementation(\"io.projectreactor:reactor-test:3.5.0\")\n}\n\napplication {\n    mainClass.set(\"com.example.mcp.McpServerApplication\")\n}\n\ntasks.test {\n    useJUnitPlatform()\n}\n```\n\n## McpServerApplication.java Template\n\n```java\npackage com.example.mcp;\n\nimport com.example.mcp.tools.ToolHandlers;\nimport com.example.mcp.resources.ResourceHandlers;\nimport com.example.mcp.prompts.PromptHandlers;\nimport io.mcp.server.McpServer;\nimport io.mcp.server.McpServerBuilder;\nimport io.mcp.server.transport.StdioServerTransport;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport reactor.core.Disposable;\n\npublic class McpServerApplication {\n    \n    private static final Logger log = LoggerFactory.getLogger(McpServerApplication.class);\n    \n    public static void main(String[] args) {\n        log.info(\"Starting MCP Server...\");\n        \n        try {\n            McpServer server = createServer();\n            StdioServerTransport transport = new StdioServerTransport();\n            \n            // Start server\n            Disposable serverDisposable = server.start(transport).subscribe();\n            \n            // Graceful shutdown\n            Runtime.getRuntime().addShutdownHook(new Thread(() -> {\n                log.info(\"Shutting down MCP server\");\n                serverDisposable.dispose();\n                server.stop().block();\n            }));\n            \n            log.info(\"MCP Server started successfully\");\n            \n            // Keep running\n            Thread.currentThread().join();\n            \n        } catch (Exception e) {\n            log.error(\"Failed to start MCP server\", e);\n            System.exit(1);\n        }\n    }\n    \n    private static McpServer createServer() {\n        McpServer server = McpServerBuilder.builder()\n            .serverInfo(\"my-mcp-server\", \"1.0.0\")\n            .capabilities(capabilities -> capabilities\n                .tools(true)\n                .resources(true)\n                .prompts(true))\n            .build();\n        \n        // Register handlers\n        ToolHandlers.register(server);\n        ResourceHandlers.register(server);\n        PromptHandlers.register(server);\n        \n        return server;\n    }\n}\n```\n\n## ToolDefinitions.java Template\n\n```java\npackage com.example.mcp.tools;\n\nimport io.mcp.json.JsonSchema;\nimport io.mcp.server.tool.Tool;\n\nimport java.util.List;\n\npublic class ToolDefinitions {\n    \n    public static List<Tool> getTools() {\n        return List.of(\n            createGreetTool(),\n            createCalculateTool()\n        );\n    }\n    \n    private static Tool createGreetTool() {\n        return Tool.builder()\n            .name(\"greet\")\n            .description(\"Generate a greeting message\")\n            .inputSchema(JsonSchema.object()\n                .property(\"name\", JsonSchema.string()\n                    .description(\"Name to greet\")\n                    .required(true)))\n            .build();\n    }\n    \n    private static Tool createCalculateTool() {\n        return Tool.builder()\n            .name(\"calculate\")\n            .description(\"Perform mathematical calculations\")\n            .inputSchema(JsonSchema.object()\n                .property(\"operation\", JsonSchema.string()\n                    .description(\"Operation to perform\")\n                    .enumValues(List.of(\"add\", \"subtract\", \"multiply\", \"divide\"))\n                    .required(true))\n                .property(\"a\", JsonSchema.number()\n                    .description(\"First operand\")\n                    .required(true))\n                .property(\"b\", JsonSchema.number()\n                    .description(\"Second operand\")\n                    .required(true)))\n            .build();\n    }\n}\n```\n\n## ToolHandlers.java Template\n\n```java\npackage com.example.mcp.tools;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport io.mcp.server.McpServer;\nimport io.mcp.server.tool.ToolResponse;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport reactor.core.publisher.Mono;\n\npublic class ToolHandlers {\n    \n    private static final Logger log = LoggerFactory.getLogger(ToolHandlers.class);\n    \n    public static void register(McpServer server) {\n        // Register tool list handler\n        server.addToolListHandler(() -> {\n            log.debug(\"Listing available tools\");\n            return Mono.just(ToolDefinitions.getTools());\n        });\n        \n        // Register greet handler\n        server.addToolHandler(\"greet\", ToolHandlers::handleGreet);\n        \n        // Register calculate handler\n        server.addToolHandler(\"calculate\", ToolHandlers::handleCalculate);\n    }\n    \n    private static Mono<ToolResponse> handleGreet(JsonNode arguments) {\n        log.info(\"Greet tool called\");\n        \n        if (!arguments.has(\"name\")) {\n            return Mono.just(ToolResponse.error()\n                .message(\"Missing 'name' parameter\")\n                .build());\n        }\n        \n        String name = arguments.get(\"name\").asText();\n        String greeting = \"Hello, \" + name + \"! Welcome to MCP.\";\n        \n        log.debug(\"Generated greeting for: {}\", name);\n        \n        return Mono.just(ToolResponse.success()\n            .addTextContent(greeting)\n            .build());\n    }\n    \n    private static Mono<ToolResponse> handleCalculate(JsonNode arguments) {\n        log.info(\"Calculate tool called\");\n        \n        if (!arguments.has(\"operation\") || !arguments.has(\"a\") || !arguments.has(\"b\")) {\n            return Mono.just(ToolResponse.error()\n                .message(\"Missing required parameters\")\n                .build());\n        }\n        \n        String operation = arguments.get(\"operation\").asText();\n        double a = arguments.get(\"a\").asDouble();\n        double b = arguments.get(\"b\").asDouble();\n        \n        double result;\n        switch (operation) {\n            case \"add\":\n                result = a + b;\n                break;\n            case \"subtract\":\n                result = a - b;\n                break;\n            case \"multiply\":\n                result = a * b;\n                break;\n            case \"divide\":\n                if (b == 0) {\n                    return Mono.just(ToolResponse.error()\n                        .message(\"Division by zero\")\n                        .build());\n                }\n                result = a / b;\n                break;\n            default:\n                return Mono.just(ToolResponse.error()\n                    .message(\"Unknown operation: \" + operation)\n                    .build());\n        }\n        \n        log.debug(\"Calculation: {} {} {} = {}\", a, operation, b, result);\n        \n        return Mono.just(ToolResponse.success()\n            .addTextContent(\"Result: \" + result)\n            .build());\n    }\n}\n```\n\n## ResourceDefinitions.java Template\n\n```java\npackage com.example.mcp.resources;\n\nimport io.mcp.server.resource.Resource;\n\nimport java.util.List;\n\npublic class ResourceDefinitions {\n    \n    public static List<Resource> getResources() {\n        return List.of(\n            Resource.builder()\n                .name(\"Example Data\")\n                .uri(\"resource://data/example\")\n                .description(\"Example resource data\")\n                .mimeType(\"application/json\")\n                .build(),\n            Resource.builder()\n                .name(\"Configuration\")\n                .uri(\"resource://config\")\n                .description(\"Server configuration\")\n                .mimeType(\"application/json\")\n                .build()\n        );\n    }\n}\n```\n\n## ResourceHandlers.java Template\n\n```java\npackage com.example.mcp.resources;\n\nimport io.mcp.server.McpServer;\nimport io.mcp.server.resource.ResourceContent;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport reactor.core.publisher.Mono;\n\nimport java.time.Instant;\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\n\npublic class ResourceHandlers {\n    \n    private static final Logger log = LoggerFactory.getLogger(ResourceHandlers.class);\n    private static final Map<String, Boolean> subscriptions = new ConcurrentHashMap<>();\n    \n    public static void register(McpServer server) {\n        // Register resource list handler\n        server.addResourceListHandler(() -> {\n            log.debug(\"Listing available resources\");\n            return Mono.just(ResourceDefinitions.getResources());\n        });\n        \n        // Register resource read handler\n        server.addResourceReadHandler(ResourceHandlers::handleRead);\n        \n        // Register resource subscribe handler\n        server.addResourceSubscribeHandler(ResourceHandlers::handleSubscribe);\n        \n        // Register resource unsubscribe handler\n        server.addResourceUnsubscribeHandler(ResourceHandlers::handleUnsubscribe);\n    }\n    \n    private static Mono<ResourceContent> handleRead(String uri) {\n        log.info(\"Reading resource: {}\", uri);\n        \n        switch (uri) {\n            case \"resource://data/example\":\n                String jsonData = String.format(\n                    \"{\\\"message\\\":\\\"Example resource data\\\",\\\"timestamp\\\":\\\"%s\\\"}\",\n                    Instant.now()\n                );\n                return Mono.just(ResourceContent.text(jsonData, uri, \"application/json\"));\n                \n            case \"resource://config\":\n                String config = \"{\\\"serverName\\\":\\\"my-mcp-server\\\",\\\"version\\\":\\\"1.0.0\\\"}\";\n                return Mono.just(ResourceContent.text(config, uri, \"application/json\"));\n                \n            default:\n                log.warn(\"Unknown resource requested: {}\", uri);\n                return Mono.error(new IllegalArgumentException(\"Unknown resource URI: \" + uri));\n        }\n    }\n    \n    private static Mono<Void> handleSubscribe(String uri) {\n        log.info(\"Client subscribed to resource: {}\", uri);\n        subscriptions.put(uri, true);\n        return Mono.empty();\n    }\n    \n    private static Mono<Void> handleUnsubscribe(String uri) {\n        log.info(\"Client unsubscribed from resource: {}\", uri);\n        subscriptions.remove(uri);\n        return Mono.empty();\n    }\n}\n```\n\n## PromptDefinitions.java Template\n\n```java\npackage com.example.mcp.prompts;\n\nimport io.mcp.server.prompt.Prompt;\nimport io.mcp.server.prompt.PromptArgument;\n\nimport java.util.List;\n\npublic class PromptDefinitions {\n    \n    public static List<Prompt> getPrompts() {\n        return List.of(\n            Prompt.builder()\n                .name(\"code-review\")\n                .description(\"Generate a code review prompt\")\n                .argument(PromptArgument.builder()\n                    .name(\"language\")\n                    .description(\"Programming language\")\n                    .required(true)\n                    .build())\n                .argument(PromptArgument.builder()\n                    .name(\"focus\")\n                    .description(\"Review focus area\")\n                    .required(false)\n                    .build())\n                .build()\n        );\n    }\n}\n```\n\n## PromptHandlers.java Template\n\n```java\npackage com.example.mcp.prompts;\n\nimport io.mcp.server.McpServer;\nimport io.mcp.server.prompt.PromptMessage;\nimport io.mcp.server.prompt.PromptResult;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport reactor.core.publisher.Mono;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic class PromptHandlers {\n    \n    private static final Logger log = LoggerFactory.getLogger(PromptHandlers.class);\n    \n    public static void register(McpServer server) {\n        // Register prompt list handler\n        server.addPromptListHandler(() -> {\n            log.debug(\"Listing available prompts\");\n            return Mono.just(PromptDefinitions.getPrompts());\n        });\n        \n        // Register prompt get handler\n        server.addPromptGetHandler(PromptHandlers::handleCodeReview);\n    }\n    \n    private static Mono<PromptResult> handleCodeReview(String name, Map<String, String> arguments) {\n        log.info(\"Getting prompt: {}\", name);\n        \n        if (!name.equals(\"code-review\")) {\n            return Mono.error(new IllegalArgumentException(\"Unknown prompt: \" + name));\n        }\n        \n        String language = arguments.getOrDefault(\"language\", \"Java\");\n        String focus = arguments.getOrDefault(\"focus\", \"general quality\");\n        \n        String description = \"Code review for \" + language + \" with focus on \" + focus;\n        \n        List<PromptMessage> messages = List.of(\n            PromptMessage.user(\"Please review this \" + language + \" code with focus on \" + focus + \".\"),\n            PromptMessage.assistant(\"I'll review the code focusing on \" + focus + \". Please share the code.\"),\n            PromptMessage.user(\"Here's the code to review: [paste code here]\")\n        );\n        \n        log.debug(\"Generated code review prompt for {} ({})\", language, focus);\n        \n        return Mono.just(PromptResult.builder()\n            .description(description)\n            .messages(messages)\n            .build());\n    }\n}\n```\n\n## McpServerTest.java Template\n\n```java\npackage com.example.mcp;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.databind.node.ObjectNode;\nimport io.mcp.server.McpServer;\nimport io.mcp.server.McpSyncServer;\nimport io.mcp.server.tool.ToolResponse;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\n\nimport static org.junit.jupiter.api.Assertions.*;\n\nclass McpServerTest {\n    \n    private McpSyncServer syncServer;\n    private ObjectMapper objectMapper;\n    \n    @BeforeEach\n    void setUp() {\n        McpServer server = createTestServer();\n        syncServer = server.toSyncServer();\n        objectMapper = new ObjectMapper();\n    }\n    \n    private McpServer createTestServer() {\n        // Same setup as main application\n        McpServer server = McpServerBuilder.builder()\n            .serverInfo(\"test-server\", \"1.0.0\")\n            .capabilities(cap -> cap.tools(true))\n            .build();\n        \n        // Register handlers\n        ToolHandlers.register(server);\n        \n        return server;\n    }\n    \n    @Test\n    void testGreetTool() {\n        ObjectNode args = objectMapper.createObjectNode();\n        args.put(\"name\", \"Java\");\n        \n        ToolResponse response = syncServer.callTool(\"greet\", args);\n        \n        assertFalse(response.isError());\n        assertEquals(1, response.getContent().size());\n        assertTrue(response.getContent().get(0).getText().contains(\"Java\"));\n    }\n    \n    @Test\n    void testCalculateTool() {\n        ObjectNode args = objectMapper.createObjectNode();\n        args.put(\"operation\", \"add\");\n        args.put(\"a\", 5);\n        args.put(\"b\", 3);\n        \n        ToolResponse response = syncServer.callTool(\"calculate\", args);\n        \n        assertFalse(response.isError());\n        assertTrue(response.getContent().get(0).getText().contains(\"8\"));\n    }\n    \n    @Test\n    void testDivideByZero() {\n        ObjectNode args = objectMapper.createObjectNode();\n        args.put(\"operation\", \"divide\");\n        args.put(\"a\", 10);\n        args.put(\"b\", 0);\n        \n        ToolResponse response = syncServer.callTool(\"calculate\", args);\n        \n        assertTrue(response.isError());\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# My MCP Server\n\nA Model Context Protocol server built with Java and the official MCP Java SDK.\n\n## Features\n\n- ✅ Tools: greet, calculate\n- ✅ Resources: example data, configuration\n- ✅ Prompts: code-review\n- ✅ Reactive Streams with Project Reactor\n- ✅ Structured logging with SLF4J\n- ✅ Full test coverage\n\n## Requirements\n\n- Java 17 or later\n- Maven 3.6+ or Gradle 7+\n\n## Build\n\n### Maven\n```bash\nmvn clean package\n```\n\n### Gradle\n```bash\n./gradlew build\n```\n\n## Run\n\n### Maven\n```bash\njava -jar target/my-mcp-server-1.0.0.jar\n```\n\n### Gradle\n```bash\n./gradlew run\n```\n\n## Testing\n\n### Maven\n```bash\nmvn test\n```\n\n### Gradle\n```bash\n./gradlew test\n```\n\n## Integration with Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"my-mcp-server\": {\n      \"command\": \"java\",\n      \"args\": [\"-jar\", \"/path/to/my-mcp-server-1.0.0.jar\"]\n    }\n  }\n}\n```\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\n1. **Ask for project name and package**\n2. **Choose build tool** (Maven or Gradle)\n3. **Generate all files** with proper package structure\n4. **Use Reactive Streams** for async handlers\n5. **Include comprehensive logging** with SLF4J\n6. **Add tests** for all handlers\n7. **Follow Java conventions** (camelCase, PascalCase)\n8. **Include error handling** with proper responses\n9. **Document public APIs** with Javadoc\n10. **Provide both sync and async** examples","tags":["java","mcp","server","generator","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest"],"capabilities":["skill","source-github","skill-java-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/java-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 (21,806 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.155Z","embedding":null,"createdAt":"2026-04-18T20:26:11.453Z","updatedAt":"2026-05-18T18:52:15.155Z","lastSeenAt":"2026-05-18T18:52:15.155Z","tsv":"'-8':127 '/gradlew':1292,1302,1311 '/path/to/my-mcp-server-1.0.0.jar':1330 '0':626,1175,1204,1222 '0.14.1':128,206 '1':330,1169,1335 '1.0.0':113,189,343,822,1140 '1.4.11':130,219 '10':1219,1395 '17':123,124,125,193,196,1276 '2':1342 '2.0.9':129,213 '3':1193,1349 '3.1.2':167 '3.11.0':161 '3.5.0':173,232 '3.6':1280 '4':1357 '4.0.0':107 '5':1190,1364 '5.10.0':131,226 '6':1370 '7':1283,1376 '8':1207,1382 '9':1389 'add':434,605,1187,1317,1371 'addshutdownhook':299 'addtextcont':557,657 'api':138,212,1392 'applic':185,233,1132 'application.properties':94 'application/json':690,701,811,828 'area':924 'arg':276,1156,1165,1183,1198,1212,1227,1328 'args.put':1158,1185,1188,1191,1214,1217,1220 'argument':521,565,907,917,994 'arguments.get':539,587,592,597 'arguments.getordefault':1013,1018 'arguments.has':527,571,573,575 'asdoubl':594,599 'ask':56,1336 'assertequ':1168 'assertfals':1166,1199 'asserttru':1172,1201,1228 'astext':541,589 'async':1362,1400 'avail':497,756,973 'b':449,576,596,598,608,614,620,625,637,652,1192,1221 'bash':1286,1291,1296,1301,1306,1310 'beforeeach':1114 'block':309 'boolean':739 'boot':28 'break':609,615,621,638 'build':353,410,456,536,559,584,634,647,660,691,702,916,927,928,1083,1145,1284,1293,1344 'build.gradle.kts':76,178 'built':1241 'calcul':418,422,510,513,567,649,1197,1226,1253 'call':525,569 'camelcas':1380 'cap':1142 'cap.tools':1143 'capabl':344,345,346,1141 'case':604,610,616,622,794,812 'catch':319 'ch.qos.logback':140,215 'choos':1343 'class':262,376,475,671,725,888,951,1106 'classic':143,218 'claud':1315 'claude_desktop_config.json':1319 'clean':1288 'client':850,867 'code':899,904,1002,1024,1040,1050,1057,1062,1066,1070,1260 'code-review':898,1001,1259 'com.example':108,187 'com.example.mcp':242,1088 'com.example.mcp.mcpserverapplication':176,235 'com.example.mcp.prompts':880,933 'com.example.mcp.prompts.prompthandlers':248 'com.example.mcp.resources':665,707 'com.example.mcp.resources.resourcehandlers':246 'com.example.mcp.tools':368,461 'com.example.mcp.tools.toolhandlers':244 'com.fasterxml.jackson.databind.jsonnode':463 'com.fasterxml.jackson.databind.node.objectnode':1092 'com.fasterxml.jackson.databind.objectmapper':1090 'com/example/mcp':80,100 'command':1326 'compil':159 'complet':8,36,65 'comprehens':1366 'concurrenthashmap':742 'config':82,696,813,815,826 'configur':694,699,1257 'contain':1177,1206 'context':10,119,1238 'convent':1379 'coverag':1273 'creat':58 'createcalculatetool':385,414 'creategreettool':384,389 'createserv':284,334 'createtestserv':1119,1127 'data':682,688,802,1256 'data/example':684,795 'default':639,829 'depend':199 'descript':394,404,419,428,443,451,685,697,901,911,921,1023,1079,1080 'desktop':1316 'dispos':291 'divid':437,623,1216 'divis':631 'document':1390 'doubl':590,595,600 'e':321,328 'enumvalu':432 'error':1384 'exampl':681,686,800,1255,1401 'except':320 'fail':323 'fals':926 'featur':1250 'file':1352 'final':266,479,729,736,955 'first':444 'focus':920,923,1017,1019,1029,1031,1042,1044,1051,1053,1075 'follow':1377 'full':1271 'general':1020 'generat':5,6,33,34,54,63,395,550,902,1069,1333,1350 'get':980,996,1174,1203 'getprompt':893 'getresourc':676 'gettext':1176,1205 'gettool':381 'grace':296 'gradl':52,177,1282,1290,1300,1309,1348 'greet':393,397,407,503,506,523,543,551,558,1164,1252 'group':186 'handl':1385 'handlecalcul':515,563 'handlecodereview':984,988 'handlegreet':508,519 'handler':355,493,504,511,752,764,771,778,969,981,1147,1363,1375 'handleread':767,785 'handlesubscrib':774,846 'handleunsubscrib':781,863 'hello':544 'id':182,184 'illegalargumentexcept':838,1007 'implement':122,203,208,214 'import':243,245,247,249,251,253,255,257,259,369,371,373,462,464,466,468,470,472,666,668,708,710,712,714,716,718,720,722,881,883,885,934,936,938,940,942,944,946,948,1089,1091,1093,1095,1097,1099,1101,1103 'includ':1365,1383 'inputschema':399,423 'instant.now':805 'instruct':1334 'integr':29,1313 'io.mcp.json.jsonschema':370 'io.mcp.server.mcpserver':250,465,709,935,1094 'io.mcp.server.mcpserverbuilder':252 'io.mcp.server.mcpsyncserver':1096 'io.mcp.server.prompt.prompt':882 'io.mcp.server.prompt.promptargument':884 'io.mcp.server.prompt.promptmessage':937 'io.mcp.server.prompt.promptresult':939 'io.mcp.server.resource.resource':667 'io.mcp.server.resource.resourcecontent':711 'io.mcp.server.tool.tool':372 'io.mcp.server.tool.toolresponse':467,1098 'io.mcp.server.transport.stdioservertransport':254 'io.modelcontextprotocol.sdk':132,204 'io.projectreactor':151,228 'jar':114,1298,1329 'java':2,15,20,30,43,47,60,79,99,183,190,201,240,366,459,663,705,878,931,1015,1086,1160,1178,1243,1248,1275,1297,1327,1378 'java-mcp-server-gener':1 'java.time.instant':719 'java.util.concurrent.concurrenthashmap':723 'java.util.list':374,669,886,947 'java.util.map':721,949 'javadoc':1394 'javaversion.version':192,195 'join':318 'json':1320 'jsondata':797,809 'jsonnod':520,564 'jsonschema.number':442,450 'jsonschema.object':400,424 'jsonschema.string':403,427 'junit':147,224 'junit-jupit':146,223 'junit.version':149 'jupit':148,225 'keep':315 'kotlin':180 'languag':910,913,1012,1014,1027,1039,1074 'later':1278 'licens':1331 'list':380,492,496,675,751,755,892,968,972,1032 'list.of':383,433,678,895,1034 'll':1047 'log':207,268,481,731,957,1268,1367 'log.debug':495,549,648,754,971,1068 'log.error':322 'log.info':277,302,310,522,566,788,849,866,995 'log.warn':830 'logback':142,217 'logback-class':141,216 'logback.version':144 'logger':267,480,730,956 'loggerfactory.getlogger':269,482,732,958 'main':78,274,1131 'mainclass.set':234 'map':737,991 'markdown':1232 'mathemat':421 'maven':50,103,158,164,170,1279,1285,1295,1305,1346 'maven-compiler-plugin':157 'maven-shade-plugin':169 'maven-surefire-plugin':163 'mavencentr':198 'mcp':3,19,31,40,61,72,111,116,133,200,205,279,305,311,326,341,548,819,1234,1247,1324 'mcp.version':134 'mcpserver':282,333,335,488,747,964,1117,1126,1133,1321 'mcpserverappl':263 'mcpserverapplication.class':270 'mcpserverapplication.java':81,238 'mcpserverbuilder.builder':337,1135 'mcpservertest':1107 'mcpservertest.java':101,1084 'mcpsyncserv':1109 'messag':398,532,580,630,643,799,1033,1081,1082 'mimetyp':689,700 'miss':533,581 'mit':1332 'model':9,118,1237 'mono':518,562,784,845,862,987 'mono.empty':859,875 'mono.error':836,1005 'mono.just':500,530,555,578,628,641,655,759,807,824,976,1077 'multipli':436,617 'mvn':1287,1307 'my-mcp-serv':70,109,339,817,1322 'name':392,402,405,417,528,534,538,540,545,553,680,693,897,909,919,990,998,1010,1159,1339 'name.equals':1000 'new':287,300,741,837,1006,1123 'objectmapp':1112,1113,1122,1124 'objectmapper.createobjectnode':1157,1184,1213 'objectnod':1155,1182,1211 'offici':18,46,1246 'oper':426,429,572,586,588,603,645,646,651,1186,1215 'operand':445,453 'option':26 'org.apache.maven.plugins':156,162,168 'org.junit.jupiter':145,222 'org.junit.jupiter.api.assertions':1105 'org.junit.jupiter.api.beforeeach':1100 'org.junit.jupiter.api.test':1102 'org.slf4j':135,209 'org.slf4j.logger':256,469,713,941 'org.slf4j.loggerfactory':258,471,715,943 'packag':174,241,367,460,664,706,879,932,1087,1289,1341,1355 'paramet':535,583 'pascalcas':1381 'past':1065 'perform':420,431 'pleas':1036,1054 'plugin':160,166,172,181 'pom.xml':74,104 'privat':264,331,386,411,477,516,560,727,734,782,843,860,953,985,1108,1111,1125 'product':38 'production-readi':37 'program':912 'project':13,53,66,1265,1338 'prompt':90,351,906,967,974,979,997,1009,1072,1258 'prompt.builder':896 'promptargument.builder':908,918 'promptdefinit':889 'promptdefinitions.getprompts':977 'promptdefinitions.java':91,876 'prompthandl':952,983 'prompthandlers.class':959 'prompthandlers.java':92,929 'prompthandlers.register':360 'promptmessage.assistant':1045 'promptmessage.user':1035,1058 'promptresult.builder':1078 'proper':1354,1387 'properti':401,425,440,448 'protocol':11,120,1239 'provid':1396 'public':261,271,375,378,474,484,670,673,724,743,887,890,950,960,1391 'qualiti':1021 'reactiv':23,1262,1359 'reactor':153,230,1266 'reactor-test':152,229 'reactor.core.disposable':260 'reactor.core.publisher.mono':473,717,945 'read':763,789 'readi':39 'readme.md':102,1230 'regist':354,487,490,502,509,746,749,761,768,775,963,966,978,1146 'repositori':197 'request':833 'requir':408,438,446,454,582,914,925,1274 'resourc':87,93,349,687,750,757,762,769,776,790,801,832,840,853,870,1254 'resource.builder':679,692 'resourcecontent.text':808,825 'resourcedefinit':672 'resourcedefinitions.getresources':760 'resourcedefinitions.java':88,661 'resourcehandl':726,766,773,780 'resourcehandlers.class':733 'resourcehandlers.java':89,703 'resourcehandlers.register':358 'respons':1162,1195,1224,1388 'response.getcontent':1170,1173,1202 'response.iserror':1167,1200,1229 'result':601,606,612,618,635,653,658,659 'return':362,382,390,415,499,529,554,577,627,640,654,677,758,806,823,835,858,874,894,975,1004,1076,1150 'review':900,905,922,1003,1025,1037,1048,1064,1071,1261 'run':316,1294,1303 'runtime.getruntime':298 'sdk':21,48,202,1249 'second':452 'server':4,12,32,41,62,73,112,117,121,280,283,290,306,312,327,336,342,357,359,361,363,489,698,748,820,965,1118,1134,1139,1149,1151,1235,1240,1325 'server.addpromptgethandler':982 'server.addpromptlisthandler':970 'server.addresourcelisthandler':753 'server.addresourcereadhandler':765 'server.addresourcesubscribehandler':772 'server.addresourceunsubscribehandler':779 'server.addtoolhandler':505,512 'server.addtoollisthandler':494 'server.start':293 'server.stop':308 'server.tosyncserver':1121 'serverconfiguration.java':83 'serverdispos':292 'serverdisposable.dispose':307 'serverinfo':338,1136 'servernam':816 'setup':1116,1129 'shade':171,175 'share':1055 'shut':303 'shutdown':297 'size':1171 'skill' 'skill-java-mcp-server-generator' 'slf4j':137,211,1270,1369 'slf4j-api':136,210 'slf4j.version':139 'source-github' 'sourcecompat':191 'spring':27,97 'src':77 'start':278,289,313,325 'static':265,272,332,379,387,412,478,485,517,561,674,728,735,744,783,844,861,891,954,961,986,1104 'stdioservertransport':285,288 'stream':24,1263,1360 'string':275,537,542,585,738,786,796,814,847,864,989,992,993,1011,1016,1022 'string.format':798 'structur':69,1267,1356 'subscrib':295,770,851 'subscript':740 'subscriptions.put':855 'subscriptions.remove':872 'subtract':435,611 'success':314 'surefir':165 'switch':602,792 'sync':1398 'syncserv':1110,1120 'syncserver.calltool':1163,1196,1225 'system.exit':329 'target/my-mcp-server-1.0.0.jar':1299 'targetcompat':194 'tasks.test':236 'templat':105,179,239,365,458,662,704,877,930,1085,1231 'test':98,150,154,155,220,231,1138,1152,1179,1208,1272,1304,1308,1312,1372 'test-serv':1137 'testcalculatetool':1181 'testdividebyzero':1210 'testgreettool':1154 'testimplement':221,227 'thread':301 'thread.currentthread':317 'timestamp':803 'tool':84,347,388,413,491,498,524,568,1251,1345 'tool.builder':391,416 'tooldefinit':377 'tooldefinitions.gettools':501 'tooldefinitions.java':85,364 'toolhandl':476,507,514 'toolhandlers.class':483 'toolhandlers.java':86,457 'toolhandlers.register':356,1148 'toolrespons':1161,1194,1223 'toolresponse.error':531,579,629,642 'toolresponse.success':556,656 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'transport':286,294 'tri':281 'true':348,350,352,409,439,447,455,857,915,1144 'unknown':644,831,839,1008 'unsubscrib':777,868 'uri':683,695,787,791,793,810,827,834,841,842,848,854,856,865,871,873 'use':16,44,96,1358 'usejunitplatform':237 'utf':126 'version':188,821 'void':273,486,745,962,1115,1153,1180,1209 'welcom':546 'xml':106 'zero':633","prices":[{"id":"a9a6461b-c55c-44aa-a3b0-728b82eba4be","listingId":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","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:11.453Z"}],"sources":[{"listingId":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","source":"github","sourceId":"github/awesome-copilot/java-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/java-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:49:56.409Z","lastSeenAt":"2026-05-18T18:52:15.155Z"},{"listingId":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","source":"skills_sh","sourceId":"github/awesome-copilot/java-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/java-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:11.453Z","lastSeenAt":"2026-05-07T22:40:18.883Z"}],"details":{"listingId":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"java-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":"209cf8976dd51f18a6b544c538b5614ab6926783","skill_md_path":"skills/java-mcp-server-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/java-mcp-server-generator"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"java-mcp-server-generator","description":"Generate a complete Model Context Protocol server project in Java using the official MCP Java SDK with reactive streams and optional Spring Boot integration."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/java-mcp-server-generator"},"updatedAt":"2026-05-18T18:52:15.155Z"}}