A high-performance Model Context Protocol (MCP) implementation in Elixir.
Hermes MCP is a comprehensive Elixir SDK for the Model Context Protocol, providing complete client and server implementations with Elixir's exceptional concurrency model and fault tolerance.
def deps do [ {:hermes_mcp, "~> 0.14.1"} # x-release-please-version ] end
# Define a server with tools capabilities defmodule MyApp.MCPServer do use Hermes.Server, name: "My Server", version: "1.0.0", capabilities: [:tools] @impl true # this callback will be called when the # MCP initialize lifecycle completes def init(_client_info, frame) do {:ok,frame |> assign(counter: 0) |> register_tool("echo", input_schema: %{ text: {:required, :string, max: 150, description: "the text to be echoed"} }, annotations: %{read_only: true}, description: "echoes everything the user says to the LLM") } end @impl true def handle_tool("echo", %{text: text}, frame) do Logger.info("This tool was called #{frame.assigns.counter + 1}") {:reply, text, assign(frame, counter: frame.assigns.counter + 1)} end end # Add to your application supervisor children = [ Hermes.Server.Registry, {MyApp.MCPServer, transport: :streamable_http} ] # Add to your Plug/Phoenix router (if using HTTP) forward "/mcp", to: Hermes.Server.Transport.StreamableHTTP.Plug, init_opts: [server: MyApp.MCPServer]
Now you can achieve your MCP server on http://localhost:<port>/mcp
# Define a client module defmodule MyApp.MCPClient do use Hermes.Client, name: "MyApp", version: "1.0.0", protocol_version: "2025-03-26" end # Add to your application supervisor children = [ {MyApp.MCPClient, transport: {:streamable_http, base_url: "http://localhost:4000"}} ] # Use the client {:ok, result} = MyApp.MCPClient.call_tool("echo", %{text: "this will be echoed!"})
Named after Hermes, the Greek god of boundaries and communication, this library facilitates seamless interaction between Large Language Models and external tools - serving as a messenger between AI and data sources.
For detailed guides and examples, visit the official documentation.
We have build some elixir implementation examples using plug
based and phoenix
apps:
plug
based MCP server using streamable_httpphoenix
based MCP server using ssephoenix_live_view
based MCP server using streamable_http and UIMIT License. See LICENSE for details.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4