cd /news/ai-agents/show-hn-java-mcp-runtime-for-virtual… · home topics ai-agents article
[ARTICLE · art-127654] src=tachyonmcp.dev ↗ pub= topic=ai-agents verified=true sentiment=· neutral

Show HN: Java MCP Runtime for virtual threads

A new Java and Kotlin Model Context Protocol server runtime called Tachyon has been released, built on Netty and conformance-tested against MCP versions 2025-11-25 and 2026-07-28. Tachyon runs synchronous Java handlers on virtual threads or suspending Kotlin handlers rather than on the Netty event loop, and ships with a localhost-only Host/Origin guard enabled by default. The runtime handles transport and protocol details including tools, resources, prompts, completions, logging, elicitation, cancellation, progress, pagination, and subscriptions, letting developers register handlers via a Java builder or Kotlin DSL.

read1 min views2 publishedSep 12, 2026
Show HN: Java MCP Runtime for virtual threads
Image: source

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 guide

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

── more in #ai-agents 4 stories · sorted by recency
── more on @tachyon 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-java-mcp-run…] indexed:0 read:1min 2026-09-12 ·