Hermes MCP
A high-performance Model Context Protocol (MCP) implementation in Elixir.
Overview
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.
Installation
def deps do
[
{:hermes_mcp, "~> 0.14.1"} # x-release-please-version
]
end
Quick Start
Server
# 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
Client
# 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!"})
Why Hermes?
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.
Documentation
For detailed guides and examples, visit the official documentation.
Examples
We have build some elixir implementation examples using plug based and phoenix apps:
- upcase-server:
plugbased MCP server using streamable_http - echo-elixir:
phoenixbased MCP server using sse - ascii-server:
phoenix_live_viewbased MCP server using streamable_http and UI
License
MIT License. See LICENSE for details.
Recommend MCP Servers 💡
coresignal_data_api
The Coresignal MCP Server integrates Coresignal's B2B data (companies, employees, job postings) with AI applications, allowing AI assistants to access fresh data directly within chat interfaces.
@fanyangmeng/ghost-mcp
Model Context Protocol (MCP) server for interacting with Ghost CMS through LLM interfaces like Claude, enabling control of Ghost blog via LLM queries.
Atlassian Remote MCP Server
Atlassian's official remote MCP server securely connects enterprise knowledge from Jira and Confluence to external AI tools, enabling AI-powered workflows with rich context.
@taazkareem/clickup-mcp-server
Integrates ClickUp project management with AI applications via Model Context Protocol, allowing AI agents to manage tasks, documents, time tracking, and workspace organization.
m0xai/trello-mcp-server
An MCP server that enables interaction with Trello boards, lists, and cards via AI hosts.
Microsoft.PowerPlatform.Dataverse.MCP
Microsoft Dataverse MCP Server enables seamless integration between LLM applications and Dataverse, providing intelligent access to tables, records, and knowledge sources, standardizing AI model interaction with Dataverse data.