It's here! :rocket: Hot on the heels of the latest...
# http4k
d
It's here! 🚀 Hot on the heels of the latest MCP specification—which we helped shape—we're proud to launch the first released JVM implementation of the http4k Model Context Protocol (MCP) SDK. Team #C5AL3AKUY involved in the discussions around evolving the MCP specification, contributing our expertise and insights to the open standard. Now, that spec is Gold, we're bringing those insights to life with an SDK that: 🌐 Delivers stateless HTTP MCP connections ☁️ Supports Server and Serverless deployments across on-prem and cloud platforms 🛡️ Maintains rock-solid testability that http4k is known for 🔒 Provides type-safe tooling 🔀 Switch protocols with 1 Line of Code . Maintains compatibility with the new and legacy transport versions. Key highlights: - First VM-based SDK for the new MCP spec - Native support for stateless AI interactions - Zero-compromise approach to testing AI integrations - Serverless deployment ready (AWS Lambda, GCP Functions) - Easy desktop integration with AI assistants like Claude Download it, have a play and come and tell us what you think! 🙃 https://www.http4k.org/news/http4k_mcp_has_landed/
🎉 4
🆒 3
g
This is great! thanks! I used this example: Tool.kt, where I used
mcpHttpStreaming
and ran it via the main method; however, it started the server in
jsonrpc
protocol I had to change my mcp config to this to make it work. Am I missing something?
Copy code
"MyMcpServer": {
      "command": "http4k-mcp-desktop",
      "args": [
        "--url",
        "<http://localhost:3001/mcp>",
        "--transport",
        "jsonrpc"
      ]
    }
d
That's strange. AFK at the moment but we'd be sure to take a look and patch anything that needs fixing asap! 🙃
The JsonRpc will work though.. all that does is deactivate streaming (which you're not going to miss if you're using Claude) 🙃
@Gopal S Akshintala your MCP runs out of the box for me with Claude, both with
Copy code
"MyMcpServer": {
      "command": "http4k-mcp-desktop",
      "args": [
        "--url",
        "<http://localhost:3001/mcp>",
        "--transport",
        "http-stream"
      ]
    }
and without the transport set (it's the default)
Which client are you using and we'll take a look 🙂
hmm - I've checked it using Cursor and I get the same message. It looks like the cursor MCP handshake doesn't use the same protocol negotiation loop as Claude, and this is why it's failing. What is strange is that this loop should be transparent to the client. Please stick with `jsonrpc`or
http-nonstream
for now and we'll dig in to why this is. 🙂
On further digging, it seems like Cursor is less idempotent than Claude to complaining about SSE responses that it has already seen - and the http4k-mcp-desktop maintains an SSE connection to read the history of messages that it might have missed. We'll see what we can do about tightening up replaying of already transmitted messages and get a new version out.
@Gopal S Akshintala we've released a new version of the desktop which is 1.4.0. if you upgrade via homebrew then the tools should work out of the box with booth cursor and claude. Thanks for reporting! 🙂
thank you color 1