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.
Java 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}
Run synchronous Java handlers on virtual threads, or suspending Kotlin handlers — never on the Netty event loop.
Netty owns the socket and connection lifecycle. A localhost-only Host/ Origin guard is enabled by default; deployments explicitly allow additional authorities.
Choose the Java builder or Kotlin DSL, register a tool, and start the server. Open the quickstart