NAME

MCP::Server::Context - Request context container

SYNOPSIS

use MCP::Server::Context;

my $context = MCP::Server::Context->new;
$context->notify_progress(1, 2, 'halfway');

DESCRIPTION

MCP::Server::Context is a container for per-invocation request context.

ATTRIBUTES

MCP::Server::Context implements the following attributes.

controller

my $c    = $context->controller;
$context = $context->controller(Mojolicious::Controller->new);

The Mojolicious::Controller serving the current request, when the HTTP transport is in use.

insufficient_scope

my $needed = $context->insufficient_scope;
$context   = $context->insufficient_scope(['mcp:write']);

Array reference of scopes a denied request was missing, set by the server so the HTTP transport can emit an insufficient_scope challenge. undef when no scope check failed.

progress_token

my $token = $context->progress_token;
$context  = $context->progress_token('tok-1');

The progress token provided by the client in _meta.progressToken, or undef if none was sent.

session_id

my $id   = $context->session_id;
$context = $context->session_id('12345');

Identifier of the session this request belongs to.

scopes

my $scopes = $context->scopes;
$context   = $context->scopes(['mcp:read', 'mcp:write']);

OAuth scopes granted to the current request, as an array reference, populated from the auth hook of the HTTP transport. undef (the default) imposes no scope restriction, so scopes are only enforced for authenticated requests that provide them.

transport

my $transport = $context->transport;
$context      = $context->transport(MCP::Server::Transport::HTTP->new);

The transport handling the current request.

METHODS

MCP::Server::Context inherits all methods from Mojo::Base and implements the following new ones.

has_scope

my $bool = $context->has_scope('mcp:write');
my $bool = $context->has_scope('mcp:read', 'mcp:write');

Returns true if every given scope is present in "scopes", or if "scopes" is undef (no restriction).

notify

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

Send a JSON-RPC notification to the client associated with the current request. Returns true on success, or undef if no notification could be delivered.

notify_progress

my $bool = $context->notify_progress($progress);
my $bool = $context->notify_progress($progress, $total);
my $bool = $context->notify_progress($progress, $total, $message);

Send a notifications/progress JSON-RPC notification for the progress token associated with the current request. Returns true on success, or undef if no progress token was provided by the client.

SEE ALSO

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