Hermes.Server.Registry (hermes_mcp v0.10.0)

Registry for MCP server and transport processes.

This module provides a safe way to manage process names without creating atoms dynamically at runtime. It uses a via tuple pattern with Registry.

Usage

# Register a server process
{:ok, _pid} = GenServer.start_link(MyServer, arg, name: Registry.server(MyModule))

# Register a transport process
{:ok, _pid} = GenServer.start_link(Transport, arg, name: Registry.transport(MyModule, :stdio))

# Look up a process
GenServer.call(Registry.server(MyModule), :ping)

Summary

Functions

Returns a via tuple for naming a server process.

Returns a via tuple for naming a server session process.

Returns a via tuple for naming a supervisor process.

Returns a via tuple for naming a transport process.

Gets the PID of a registered server.

Gets the PID of a session-specific server.

Gets the PID of a supervisor process.

Gets the PID of a registered transport.

Functions

child_spec(_)

server(module)

@spec server(server_module :: module()) :: GenServer.name()

Returns a via tuple for naming a server process.

server_session(server, session_id)

@spec server_session(server_module :: module(), session_id :: String.t()) ::
  GenServer.name()

Returns a via tuple for naming a server session process.

supervisor(kind \\ :supervisor, module)

@spec supervisor(kind :: atom(), server_module :: module()) :: GenServer.name()

Returns a via tuple for naming a supervisor process.

transport(module, type)

@spec transport(server_module :: module(), transport_type :: atom()) ::
  GenServer.name()

Returns a via tuple for naming a transport process.

whereis_server(module)

@spec whereis_server(module()) :: pid() | nil

Gets the PID of a registered server.

whereis_server_session(module, session_id)

@spec whereis_server_session(server_module :: module(), session_id :: String.t()) ::
  pid() | nil

Gets the PID of a session-specific server.

whereis_supervisor(server, kind \\ :supervisor)

@spec whereis_supervisor(atom(), module()) :: pid() | nil

Gets the PID of a supervisor process.

whereis_transport(module, type)

@spec whereis_transport(module(), atom()) :: pid() | nil

Gets the PID of a registered transport.