# SPDX-FileCopyrightText: 2026 James Harton # # SPDX-License-Identifier: Apache-2.0 defmodule BB.MCP.Router do @moduledoc """ Phoenix router macro for mounting the BB MCP server over Streamable HTTP. ## Usage defmodule MyAppWeb.Router do use Phoenix.Router import BB.MCP.Router scope "/" do bb_mcp "/mcp" end end This forwards requests at the given path to `Anubis.Server.Transport.StreamableHTTP.Plug`, configured for `BB.MCP.Server`. Pass `server: MyOtherServerModule` to mount a different server module (useful if you've defined your own `use Anubis.Server` module). """ @doc """ Forwards `path` to the Anubis Streamable HTTP plug for the BB MCP server. ## Options - `:server` — the server module to mount. Defaults to `BB.MCP.Server`. """ defmacro bb_mcp(path, opts \\ []) do server = Keyword.get(opts, :server, BB.MCP.Server) other_opts = Keyword.delete(opts, :server) # Resolve the plug at macro-expansion time so that a surrounding # `scope "/", MyAppWeb do … end` cannot rewrite the alias. plug = Anubis.Server.Transport.StreamableHTTP.Plug quote do forward( unquote(path), unquote(plug), [server: unquote(server)] ++ unquote(other_opts) ) end end end