MCP::Server::Transport::HTTP(3pm)

NAME
MCP::Server::Transport::HTTP - HTTP transport for MCP servers

SYNOPSIS
  use MCP::Server::Transport::HTTP;

  my $http = MCP::Server::Transport::HTTP->new;

DESCRIPTION
MCP::Server::Transport::HTTP is a transport for MCP (Model Context Protocol) server that uses HTTP as the underlying transport mechanism.

By default only "POST" requests are handled. When "streaming" is enabled, the transport additionally supports the server-to-client SSE stream ("GET") and explicit session termination ("DELETE") defined by the Streamable HTTP transport. Note that this requires per-process state and is therefore not compatible with pre-forking web servers.

ATTRIBUTES
MCP::Server::Transport::HTTP inherits all attributes from MCP::Server::Transport and implements the following new ones.

  heartbeat
  my $seconds = $http->heartbeat;
  $http       = $http->heartbeat(30);

Interval in seconds at which a keep-alive comment is sent on each open server-to-client stream. Defaults to 30; set to 0 to disable. Useful when running behind reverse proxies that close idle connections. Only used when "streaming" is enabled.

  session_timeout
  my $seconds = $http->session_timeout;
  $http       = $http->session_timeout(3600);

Idle timeout in seconds for sessions without an open server-to-client stream. Defaults to 3600; set to 0 to disable. A periodic sweep removes sessions whose last activity is older than this value, so the effective lifetime of an idle session is up to twice the configured timeout. Only used when "streaming" is enabled.

  sessions
  my $sessions = $http->sessions;
  $http        = $http->sessions({});

Per-process registry of active MCP::Server::Session objects, keyed by session ID. Only used when "streaming" is enabled.

  streaming
  my $bool = $http->streaming;
  $http    = $http->streaming(1);

Enable server-to-client streaming and session lifecycle management. Defaults to false. When enabled, the transport tracks all sessions in "sessions", accepts "GET" requests to open a long-lived SSE stream the server can push notifications to, and accepts "DELETE" requests to terminate a session. Requests for unknown sessions are rejected with status 404.

METHODS
MCP::Server::Transport::HTTP inherits all methods from MCP::Server::Transport and implements the following new ones.

  handle_request
  $http->handle_request(Mojolicious::Controller->new);

Handles an incoming HTTP request.

  notifications
  my $bool = $http->notifications;

True when "streaming" is enabled, false otherwise.

  notify
  my $bool = $http->notify($session_id, $method);
  my $bool = $http->notify($session_id, $method, {foo => 'bar'});

Send a JSON-RPC notification to the open SSE stream of a session. Returns true on success, or "undef" if the session does not exist or has no open stream. Only available when "streaming" is enabled.

  notify_all
  my $bool = $http->notify_all($method);
  my $bool = $http->notify_all($method, {foo => 'bar'});

Send a JSON-RPC notification to the open SSE stream of every active session. Returns true on success, or "undef" when "streaming" is disabled.

SEE ALSO
MCP, <https://mojolicious.org>, <https://modelcontextprotocol.io>.