Protocol handling

Tools, resources and templates, prompts, completions, logging, elicitation, cancellation, progress, pagination, and subscriptions — conformance-tested against MCP 2025-11-25 and 2026-07-28.

Read the features guideJava and Kotlin Model Context Protocol server runtime built on Netty. Write your handlers — Tachyon handles transport and protocol details.

Your first MCP server

1var server = TachyonServer.builder()

2 .name("weather-mcp")

3 .withTools(tools -> tools.register(

4 b -> b.name("get_forecast")

5 .description("Get weather forecast")

6 .inputSchema("""

7 {"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}

8 """),

9 (ctx, request) -> ToolResult.text("☀️ 22°C")))

10 .port(8080)

11 .build();

12server.start();1import dev.tachyonmcp.kotlin.server.TachyonServer

2import dev.tachyonmcp.api.server.features.tools.ToolResult

3

4val server = TachyonServer(port = 8080) {

5 info { name = "weather-mcp"; version = "1.0" }

6 tool(name = "get_forecast", description = "Get weather forecast") {

7 ToolResult.text("☀️ 22°C, clear skies")

8 }

9}Tools, resources and templates, prompts, completions, logging, elicitation, cancellation, progress, pagination, and subscriptions — conformance-tested against MCP 2025-11-25 and 2026-07-28.

Read the features guideRun synchronous Java handlers on virtual threads, or suspending Kotlin handlers — never on the Netty event loop.

Read the tools guideNetty owns the socket and connection lifecycle. A localhost-only Host/Origin guard is enabled by default; deployments explicitly allow additional authorities.