pub struct ExecutionContext<'a> {
pub params: Value,
pub uri_params: HashMap<String, String>,
pub session: &'a Session,
pub logger: &'a McpLogger,
pub environment: Option<&'a dyn Environment>,
/* private fields */
}Expand description
Execution context passed to tools, resources, and prompts during execution
Provides access to:
- Input parameters (for tools) or arguments (for prompts)
- Session information (roles, state, client info)
- Environment state (git status, filesystem)
§Example
impl Tool for MyTool {
async fn execute(&self, ctx: ExecutionContext<'_>) -> Result<Vec<Box<dyn Content>>, ToolError> {
// Access session info
if ctx.is_admin() {
// Admin-only behavior
}
// Access parameters
let name = ctx.params.get("name").and_then(|v| v.as_str());
// Access environment
if let Some(env) = ctx.environment {
if env.has_git_repo() {
// Git-specific behavior
}
}
Ok(vec![])
}
}Fields§
§params: ValueInput parameters (from tool call or prompt arguments)
uri_params: HashMap<String, String>URI parameters (extracted from resource URI template)
session: &'a SessionReference to the current session
logger: &'a McpLoggerLogger for sending log notifications to the client
environment: Option<&'a dyn Environment>Optional environment state for contextual checks
Implementations§
Source§impl<'a> ExecutionContext<'a>
impl<'a> ExecutionContext<'a>
Sourcepub fn new(params: Value, session: &'a Session, logger: &'a McpLogger) -> Self
pub fn new(params: Value, session: &'a Session, logger: &'a McpLogger) -> Self
Create a new execution context
Sourcepub fn with_environment(
params: Value,
session: &'a Session,
logger: &'a McpLogger,
environment: &'a dyn Environment,
) -> Self
pub fn with_environment( params: Value, session: &'a Session, logger: &'a McpLogger, environment: &'a dyn Environment, ) -> Self
Create an execution context with environment
Sourcepub fn for_resource(
uri_params: HashMap<String, String>,
session: &'a Session,
logger: &'a McpLogger,
) -> Self
pub fn for_resource( uri_params: HashMap<String, String>, session: &'a Session, logger: &'a McpLogger, ) -> Self
Create an execution context for resources (with URI params)
Sourcepub fn for_resource_with_environment(
uri_params: HashMap<String, String>,
session: &'a Session,
logger: &'a McpLogger,
environment: &'a dyn Environment,
) -> Self
pub fn for_resource_with_environment( uri_params: HashMap<String, String>, session: &'a Session, logger: &'a McpLogger, environment: &'a dyn Environment, ) -> Self
Create a resource execution context with environment
Sourcepub fn with_client_requester(self, requester: ClientRequester) -> Self
pub fn with_client_requester(self, requester: ClientRequester) -> Self
Set the client requester for server→client requests
Sourcepub fn client_requester(&self) -> Option<&ClientRequester>
pub fn client_requester(&self) -> Option<&ClientRequester>
Get the client requester for making server→client requests
Returns None if the server hasn’t set up bidirectional communication.
Sourcepub fn get_uri_param(&self, name: &str) -> Option<&str>
pub fn get_uri_param(&self, name: &str) -> Option<&str>
Get a URI parameter by name
Sourcepub fn get_state<T: DeserializeOwned>(&self, key: &str) -> Option<T>
pub fn get_state<T: DeserializeOwned>(&self, key: &str) -> Option<T>
Get a session state value
Sourcepub fn session_id(&self) -> &str
pub fn session_id(&self) -> &str
Get session ID
Sourcepub fn client_name(&self) -> Option<&str>
pub fn client_name(&self) -> Option<&str>
Get client name if available
Sourcepub fn client_version(&self) -> Option<&str>
pub fn client_version(&self) -> Option<&str>
Get client version if available
Sourcepub fn protocol_version(&self) -> Option<&str>
pub fn protocol_version(&self) -> Option<&str>
Get negotiated protocol version if available
Sourcepub fn client_capabilities(&self) -> Option<&ClientCapabilities>
pub fn client_capabilities(&self) -> Option<&ClientCapabilities>
Get client capabilities if available
Sourcepub fn as_visibility_context(&self) -> VisibilityContext<'a>
pub fn as_visibility_context(&self) -> VisibilityContext<'a>
Convert to VisibilityContext (for visibility checks)