Packages

Reusable Streamable HTTP MCP runtime and Phoenix router DSL

Current section

Files

Jump to
mcp_kit lib mcp_kit runtime supervisor.ex
Raw

lib/mcp_kit/runtime/supervisor.ex

defmodule MCPKit.Runtime.Supervisor do
@moduledoc false
use Supervisor
def start_link(opts) do
name = Keyword.fetch!(opts, :name)
Supervisor.start_link(__MODULE__, opts, name: name)
end
@impl true
def init(opts) do
name = Keyword.fetch!(opts, :name)
queue_limit = Keyword.fetch!(opts, :notification_queue_limit)
:persistent_term.put(config_key(name), %{notification_queue_limit: queue_limit})
children = [
{Registry, keys: :unique, name: registry_name(name)},
{DynamicSupervisor, strategy: :one_for_one, name: session_supervisor_name(name)}
]
Supervisor.init(children, strategy: :one_for_all)
end
def registry_name(name), do: Module.concat(name, Registry)
def session_supervisor_name(name), do: Module.concat(name, SessionSupervisor)
def notification_queue_limit(name) do
name
|> config_key()
|> :persistent_term.get(%{notification_queue_limit: 50})
|> Map.fetch!(:notification_queue_limit)
end
defp config_key(name), do: {__MODULE__, name}
end