NAME

MCP::Server::Transport::Stdio - Stdio transport for MCP servers

SYNOPSIS

use MCP::Server::Transport::Stdio;

my $stdio = MCP::Server::Transport::Stdio->new;

DESCRIPTION

MCP::Server::Transport::Stdio is a transport for MCP (Model Context Protocol) server that reads requests from standard input (STDIN) and writes responses to standard output (STDOUT). It is designed for command-line tools and debugging tasks.

All messages share the one channel, so a subscriptions/listen request is answered with an acknowledgement notification and then left open, with its JSON-RPC response withheld until the client cancels it.

Requests are processed strictly in order, so a notifications/cancelled notification cannot be read while the request it refers to is still in flight; it can only cancel a subscription. Use MCP::Server::Transport::HTTP for workloads where cancelling a running tool matters.

ATTRIBUTES

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

subscriptions

my $subscriptions = $stdio->subscriptions;
$stdio            = $stdio->subscriptions({});

Registry of active MCP::Server::Subscription objects, keyed by the id of the request that opened them.

METHODS

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

handle_requests

$stdio->handle_requests;

Reads requests from standard input and prints responses to standard output.

notify_all

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

Send a JSON-RPC notification to standard output, once for every subscription in "subscriptions" that asked for it.

SEE ALSO

MCP, https://mojolicious.org, https://modelcontextprotocol.io.