This enables platform-specific tools (e.g., Apple Notes on macOS only), runtime-specific resources (e.g., Node.js file system), and environment-gated features (e.g., debug tools in development only).
The availableWhen Option
Add availableWhen to any entry’s metadata to constrain its availability:
Matching Semantics
- AND across fields — all specified fields must match
- OR within arrays — at least one value in an array must match
- Omitted fields — unconstrained (matches everything)
- Empty array — matches nothing (entry is never available)
- No
availableWhen— always available (default)
Available Fields
platform
Operating system, matching process.platform values:
runtime
JavaScript runtime:
deployment
Deployment mode:
env
NODE_ENV value:
Supported Entry Types
availableWhen works on all five entry types:
- Tool
- Resource
- Prompt
- Skill
- Agent
Runtime Context API
Insideexecute() methods, use runtime context helpers for imperative checks:
Available Methods
These methods are available on
ToolContext, ResourceContext, PromptContext, and AgentContext.
Multi-Platform Pattern
When building tools that serve the same purpose across platforms, use separate files withavailableWhen in each:
Error Handling
When a client tries to call a tool that exists but is unavailable in the current environment, the SDK returns anEntryUnavailableError (HTTP 403) with both the constraint and the current context:
ToolNotFoundError (404), helping clients understand why a tool is inaccessible.
How It Works: Registry-Level Filtering
Key differences:
availableWhenis a hard constraint — filtered entries cannot be listed OR called- It runs at registry initialization, not in HTTP flows — no per-request overhead
- The runtime context (OS, runtime, deployment, NODE_ENV) is detected once and cached
- Results are logged at boot time for operational visibility
Boot-Time Logging
When entries haveavailableWhen constraints, the SDK logs a summary at startup: