{"id":"c0025ca2-be96-468c-9d27-0a1b63ecbb0c","shortId":"QLfZkx","kind":"skill","title":"Java Mcp Server Generator","tagline":"Awesome Copilot skill by Github","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"],"capabilities":["skill","source-github","category-awesome-copilot"],"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":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under github/awesome-copilot","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:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T08:40:12.468Z","embedding":null,"createdAt":"2026-04-18T20:26:11.453Z","updatedAt":"2026-04-22T08:40:12.468Z","lastSeenAt":"2026-04-22T08:40:12.468Z","tsv":"'-8':107 '/gradlew':1272,1282,1291 '/path/to/my-mcp-server-1.0.0.jar':1310 '0':606,1155,1184,1202 '0.14.1':108,186 '1':310,1149,1315 '1.0.0':93,169,323,802,1120 '1.4.11':110,199 '10':1199,1375 '17':103,104,105,173,176,1256 '2':1322 '2.0.9':109,193 '3':1173,1329 '3.1.2':147 '3.11.0':141 '3.5.0':153,212 '3.6':1260 '4':1337 '4.0.0':87 '5':1170,1344 '5.10.0':111,206 '6':1350 '7':1263,1356 '8':1187,1362 '9':1369 'add':414,585,1167,1297,1351 'addshutdownhook':279 'addtextcont':537,637 'api':118,192,1372 'applic':165,213,1112 'application.properties':74 'application/json':670,681,791,808 'area':904 'arg':256,1136,1145,1163,1178,1192,1207,1308 'args.put':1138,1165,1168,1171,1194,1197,1200 'argument':501,545,887,897,974 'arguments.get':519,567,572,577 'arguments.getordefault':993,998 'arguments.has':507,551,553,555 'asdoubl':574,579 'ask':36,1316 'assertequ':1148 'assertfals':1146,1179 'asserttru':1152,1181,1208 'astext':521,569 'async':1342,1380 'avail':477,736,953 'awesom':5 'b':429,556,576,578,588,594,600,605,617,632,1172,1201 'bash':1266,1271,1276,1281,1286,1290 'beforeeach':1094 'block':289 'boolean':719 'break':589,595,601,618 'build':333,390,436,516,539,564,614,627,640,671,682,896,907,908,1063,1125,1264,1273,1324 'build.gradle.kts':56,158 'built':1221 'calcul':398,402,490,493,547,629,1177,1206,1233 'call':505,549 'camelcas':1360 'cap':1122 'cap.tools':1123 'capabl':324,325,326,1121 'case':584,590,596,602,774,792 'catch':299 'category-awesome-copilot' 'ch.qos.logback':120,195 'choos':1323 'class':242,356,455,651,705,868,931,1086 'classic':123,198 'claud':1295 'claude_desktop_config.json':1299 'clean':1268 'client':830,847 'code':879,884,982,1004,1020,1030,1037,1042,1046,1050,1240 'code-review':878,981,1239 'com.example':88,167 'com.example.mcp':222,1068 'com.example.mcp.mcpserverapplication':156,215 'com.example.mcp.prompts':860,913 'com.example.mcp.prompts.prompthandlers':228 'com.example.mcp.resources':645,687 'com.example.mcp.resources.resourcehandlers':226 'com.example.mcp.tools':348,441 'com.example.mcp.tools.toolhandlers':224 'com.fasterxml.jackson.databind.jsonnode':443 'com.fasterxml.jackson.databind.node.objectnode':1072 'com.fasterxml.jackson.databind.objectmapper':1070 'com/example/mcp':60,80 'command':1306 'compil':139 'complet':16,45 'comprehens':1346 'concurrenthashmap':722 'config':62,676,793,795,806 'configur':674,679,1237 'contain':1157,1186 'context':99,1218 'convent':1359 'copilot':6 'coverag':1253 'creat':38 'createcalculatetool':365,394 'creategreettool':364,369 'createserv':264,314 'createtestserv':1099,1107 'data':662,668,782,1236 'data/example':664,775 'default':619,809 'depend':179 'descript':374,384,399,408,423,431,665,677,881,891,901,1003,1059,1060 'desktop':1296 'dispos':271 'divid':417,603,1196 'divis':611 'document':1370 'doubl':570,575,580 'e':301,308 'enumvalu':412 'error':1364 'exampl':661,666,780,1235,1381 'except':300 'fail':303 'fals':906 'featur':1230 'file':1332 'final':246,459,709,716,935 'first':424 'focus':900,903,997,999,1009,1011,1022,1024,1031,1033,1055 'follow':1357 'full':1251 'general':1000 'generat':4,13,14,34,43,375,530,882,1049,1313,1330 'get':960,976,1154,1183 'getprompt':873 'getresourc':656 'gettext':1156,1185 'gettool':361 'github':9 'grace':276 'gradl':32,157,1262,1270,1280,1289,1328 'greet':373,377,387,483,486,503,523,531,538,1144,1232 'group':166 'handl':1365 'handlecalcul':495,543 'handlecodereview':964,968 'handlegreet':488,499 'handler':335,473,484,491,732,744,751,758,949,961,1127,1343,1355 'handleread':747,765 'handlesubscrib':754,826 'handleunsubscrib':761,843 'hello':524 'id':162,164 'illegalargumentexcept':818,987 'implement':102,183,188,194 'import':223,225,227,229,231,233,235,237,239,349,351,353,442,444,446,448,450,452,646,648,688,690,692,694,696,698,700,702,861,863,865,914,916,918,920,922,924,926,928,1069,1071,1073,1075,1077,1079,1081,1083 'includ':1345,1363 'inputschema':379,403 'instant.now':785 'instruct':1314 'integr':1293 'io.mcp.json.jsonschema':350 'io.mcp.server.mcpserver':230,445,689,915,1074 'io.mcp.server.mcpserverbuilder':232 'io.mcp.server.mcpsyncserver':1076 'io.mcp.server.prompt.prompt':862 'io.mcp.server.prompt.promptargument':864 'io.mcp.server.prompt.promptmessage':917 'io.mcp.server.prompt.promptresult':919 'io.mcp.server.resource.resource':647 'io.mcp.server.resource.resourcecontent':691 'io.mcp.server.tool.tool':352 'io.mcp.server.tool.toolresponse':447,1078 'io.mcp.server.transport.stdioservertransport':234 'io.modelcontextprotocol.sdk':112,184 'io.projectreactor':131,208 'jar':94,1278,1309 'java':1,10,23,27,40,59,79,163,170,181,220,346,439,643,685,858,911,995,1066,1140,1158,1223,1228,1255,1277,1307,1358 'java.time.instant':699 'java.util.concurrent.concurrenthashmap':703 'java.util.list':354,649,866,927 'java.util.map':701,929 'javadoc':1374 'javaversion.version':172,175 'join':298 'json':1300 'jsondata':777,789 'jsonnod':500,544 'jsonschema.number':422,430 'jsonschema.object':380,404 'jsonschema.string':383,407 'junit':127,204 'junit-jupit':126,203 'junit.version':129 'jupit':128,205 'keep':295 'kotlin':160 'languag':890,893,992,994,1007,1019,1054 'later':1258 'licens':1311 'list':360,472,476,655,731,735,872,948,952,1012 'list.of':363,413,658,875,1014 'll':1027 'log':187,248,461,711,937,1248,1347 'log.debug':475,529,628,734,951,1048 'log.error':302 'log.info':257,282,290,502,546,768,829,846,975 'log.warn':810 'logback':122,197 'logback-class':121,196 'logback.version':124 'logger':247,460,710,936 'loggerfactory.getlogger':249,462,712,938 'main':58,254,1111 'mainclass.set':214 'map':717,971 'markdown':1212 'mathemat':401 'maven':30,83,138,144,150,1259,1265,1275,1285,1326 'maven-compiler-plugin':137 'maven-shade-plugin':149 'maven-surefire-plugin':143 'mavencentr':178 'mcp':2,11,20,41,52,91,96,113,180,185,259,285,291,306,321,528,799,1214,1227,1304 'mcp.version':114 'mcpserver':262,313,315,468,727,944,1097,1106,1113,1301 'mcpserverappl':243 'mcpserverapplication.class':250 'mcpserverapplication.java':61,218 'mcpserverbuilder.builder':317,1115 'mcpservertest':1087 'mcpservertest.java':81,1064 'mcpsyncserv':1089 'messag':378,512,560,610,623,779,1013,1061,1062 'mimetyp':669,680 'miss':513,561 'mit':1312 'model':98,1217 'mono':498,542,764,825,842,967 'mono.empty':839,855 'mono.error':816,985 'mono.just':480,510,535,558,608,621,635,739,787,804,956,1057 'multipli':416,597 'mvn':1267,1287 'my-mcp-serv':50,89,319,797,1302 'name':372,382,385,397,508,514,518,520,525,533,660,673,877,889,899,970,978,990,1139,1319 'name.equals':980 'new':267,280,721,817,986,1103 'objectmapp':1092,1093,1102,1104 'objectmapper.createobjectnode':1137,1164,1193 'objectnod':1135,1162,1191 'offici':26,1226 'oper':406,409,552,566,568,583,625,626,631,1166,1195 'operand':425,433 'org.apache.maven.plugins':136,142,148 'org.junit.jupiter':125,202 'org.junit.jupiter.api.assertions':1085 'org.junit.jupiter.api.beforeeach':1080 'org.junit.jupiter.api.test':1082 'org.slf4j':115,189 'org.slf4j.logger':236,449,693,921 'org.slf4j.loggerfactory':238,451,695,923 'packag':154,221,347,440,644,686,859,912,1067,1269,1321,1335 'paramet':515,563 'pascalcas':1361 'past':1045 'perform':400,411 'pleas':1016,1034 'plugin':140,146,152,161 'pom.xml':54,84 'privat':244,311,366,391,457,496,540,707,714,762,823,840,933,965,1088,1091,1105 'product':18 'production-readi':17 'program':892 'project':33,46,1245,1318 'prompt':70,331,886,947,954,959,977,989,1052,1238 'prompt.builder':876 'promptargument.builder':888,898 'promptdefinit':869 'promptdefinitions.getprompts':957 'promptdefinitions.java':71,856 'prompthandl':932,963 'prompthandlers.class':939 'prompthandlers.java':72,909 'prompthandlers.register':340 'promptmessage.assistant':1025 'promptmessage.user':1015,1038 'promptresult.builder':1058 'proper':1334,1367 'properti':381,405,420,428 'protocol':100,1219 'provid':1376 'public':241,251,355,358,454,464,650,653,704,723,867,870,930,940,1371 'qualiti':1001 'reactiv':1242,1339 'reactor':133,210,1246 'reactor-test':132,209 'reactor.core.disposable':240 'reactor.core.publisher.mono':453,697,925 'read':743,769 'readi':19 'readme.md':82,1210 'regist':334,467,470,482,489,726,729,741,748,755,943,946,958,1126 'repositori':177 'request':813 'requir':388,418,426,434,562,894,905,1254 'resourc':67,73,329,667,730,737,742,749,756,770,781,812,820,833,850,1234 'resource.builder':659,672 'resourcecontent.text':788,805 'resourcedefinit':652 'resourcedefinitions.getresources':740 'resourcedefinitions.java':68,641 'resourcehandl':706,746,753,760 'resourcehandlers.class':713 'resourcehandlers.java':69,683 'resourcehandlers.register':338 'respons':1142,1175,1204,1368 'response.getcontent':1150,1153,1182 'response.iserror':1147,1180,1209 'result':581,586,592,598,615,633,638,639 'return':342,362,370,395,479,509,534,557,607,620,634,657,738,786,803,815,838,854,874,955,984,1056,1130 'review':880,885,902,983,1005,1017,1028,1044,1051,1241 'run':296,1274,1283 'runtime.getruntime':278 'sdk':28,182,1229 'second':432 'server':3,12,21,42,53,92,97,101,260,263,270,286,292,307,316,322,337,339,341,343,469,678,728,800,945,1098,1114,1119,1129,1131,1215,1220,1305 'server.addpromptgethandler':962 'server.addpromptlisthandler':950 'server.addresourcelisthandler':733 'server.addresourcereadhandler':745 'server.addresourcesubscribehandler':752 'server.addresourceunsubscribehandler':759 'server.addtoolhandler':485,492 'server.addtoollisthandler':474 'server.start':273 'server.stop':288 'server.tosyncserver':1101 'serverconfiguration.java':63 'serverdispos':272 'serverdisposable.dispose':287 'serverinfo':318,1116 'servernam':796 'setup':1096,1109 'shade':151,155 'share':1035 'shut':283 'shutdown':277 'size':1151 'skill':7 'slf4j':117,191,1250,1349 'slf4j-api':116,190 'slf4j.version':119 'source-github' 'sourcecompat':171 'spring':77 'src':57 'start':258,269,293,305 'static':245,252,312,359,367,392,458,465,497,541,654,708,715,724,763,824,841,871,934,941,966,1084 'stdioservertransport':265,268 'stream':1243,1340 'string':255,517,522,565,718,766,776,794,827,844,969,972,973,991,996,1002 'string.format':778 'structur':49,1247,1336 'subscrib':275,750,831 'subscript':720 'subscriptions.put':835 'subscriptions.remove':852 'subtract':415,591 'success':294 'surefir':145 'switch':582,772 'sync':1378 'syncserv':1090,1100 'syncserver.calltool':1143,1176,1205 'system.exit':309 'target/my-mcp-server-1.0.0.jar':1279 'targetcompat':174 'tasks.test':216 'templat':85,159,219,345,438,642,684,857,910,1065,1211 'test':78,130,134,135,200,211,1118,1132,1159,1188,1252,1284,1288,1292,1352 'test-serv':1117 'testcalculatetool':1161 'testdividebyzero':1190 'testgreettool':1134 'testimplement':201,207 'thread':281 'thread.currentthread':297 'timestamp':783 'tool':64,327,368,393,471,478,504,548,1231,1325 'tool.builder':371,396 'tooldefinit':357 'tooldefinitions.gettools':481 'tooldefinitions.java':65,344 'toolhandl':456,487,494 'toolhandlers.class':463 'toolhandlers.java':66,437 'toolhandlers.register':336,1128 'toolrespons':1141,1174,1203 'toolresponse.error':511,559,609,622 'toolresponse.success':536,636 'transport':266,274 'tri':261 'true':328,330,332,389,419,427,435,837,895,1124 'unknown':624,811,819,988 'unsubscrib':757,848 'uri':663,675,767,771,773,790,807,814,821,822,828,834,836,845,851,853 'use':24,76,1338 'usejunitplatform':217 'utf':106 'version':168,801 'void':253,466,725,942,1095,1133,1160,1189 'welcom':526 'xml':86 'zero':613","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-04-22T06:52:24.014Z"},{"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-04-22T08:40:12.468Z"}],"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","source":"skills_sh","category":"awesome-copilot","skills_sh_url":"https://skills.sh/github/awesome-copilot/java-mcp-server-generator"},"updatedAt":"2026-04-22T08:40:12.468Z"}}