Skip to content

Commit b74bff2

Browse files
committed
Rename sampling capability types for clarity
Rename SamplingCapabilityNested to SamplingCapability and the old SamplingCapability to SamplingContextCapability for better clarity. - SamplingCapability is now the main structured type with context and tools fields - SamplingContextCapability represents the deprecated context capability - Updates all exports and tests to use the new names All tests pass and type checking passes.
1 parent 4ded25a commit b74bff2

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

src/mcp/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
ResourcesCapability,
4343
ResourceUpdatedNotification,
4444
RootsCapability,
45+
SamplingCapability,
46+
SamplingContextCapability,
4547
SamplingMessage,
4648
SamplingToolsCapability,
4749
ServerCapabilities,
@@ -104,6 +106,8 @@
104106
"ResourcesCapability",
105107
"ResourceUpdatedNotification",
106108
"RootsCapability",
109+
"SamplingCapability",
110+
"SamplingContextCapability",
107111
"SamplingMessage",
108112
"SamplingRole",
109113
"SamplingToolsCapability",

src/mcp/types.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,13 @@ class RootsCapability(BaseModel):
250250
model_config = ConfigDict(extra="allow")
251251

252252

253-
class SamplingCapability(BaseModel):
254-
"""Capability for sampling operations."""
253+
class SamplingContextCapability(BaseModel):
254+
"""
255+
Capability for context inclusion during sampling.
256+
257+
Indicates support for non-'none' values in the includeContext parameter.
258+
SOFT-DEPRECATED: New implementations should use tools parameter instead.
259+
"""
255260

256261
model_config = ConfigDict(extra="allow")
257262

@@ -273,12 +278,12 @@ class ElicitationCapability(BaseModel):
273278
model_config = ConfigDict(extra="allow")
274279

275280

276-
class SamplingCapabilityNested(BaseModel):
281+
class SamplingCapability(BaseModel):
277282
"""
278-
Nested structure for sampling capabilities, allowing fine-grained capability advertisement.
283+
Sampling capability structure, allowing fine-grained capability advertisement.
279284
"""
280285

281-
context: SamplingCapability | None = None
286+
context: SamplingContextCapability | None = None
282287
"""
283288
Present if the client supports non-'none' values for includeContext parameter.
284289
SOFT-DEPRECATED: New implementations should use tools parameter instead.
@@ -296,11 +301,10 @@ class ClientCapabilities(BaseModel):
296301

297302
experimental: dict[str, dict[str, Any]] | None = None
298303
"""Experimental, non-standard capabilities that the client supports."""
299-
sampling: SamplingCapabilityNested | SamplingCapability | None = None
304+
sampling: SamplingCapability | None = None
300305
"""
301306
Present if the client supports sampling from an LLM.
302-
Can be a structured object (SamplingCapabilityNested) with fine-grained capabilities,
303-
or a simple marker object (SamplingCapability) for backward compatibility.
307+
Can contain fine-grained capabilities like context and tools support.
304308
"""
305309
elicitation: ElicitationCapability | None = None
306310
"""Present if the client supports elicitation from the user."""

tests/test_types.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
InitializeRequestParams,
1313
JSONRPCMessage,
1414
JSONRPCRequest,
15-
SamplingCapabilityNested,
15+
SamplingCapability,
1616
SamplingMessage,
1717
TextContent,
1818
Tool,
@@ -257,12 +257,12 @@ async def test_client_capabilities_with_sampling_tools():
257257
}
258258
capabilities = ClientCapabilities.model_validate(capabilities_data)
259259
assert capabilities.sampling is not None
260-
assert isinstance(capabilities.sampling, SamplingCapabilityNested)
260+
assert isinstance(capabilities.sampling, SamplingCapability)
261261
assert capabilities.sampling.tools is not None
262262

263263
# With both context and tools
264264
full_capabilities_data = {"sampling": {"context": {}, "tools": {}}}
265265
full_caps = ClientCapabilities.model_validate(full_capabilities_data)
266-
assert isinstance(full_caps.sampling, SamplingCapabilityNested)
266+
assert isinstance(full_caps.sampling, SamplingCapability)
267267
assert full_caps.sampling.context is not None
268268
assert full_caps.sampling.tools is not None

0 commit comments

Comments
 (0)