mirror of
https://github.com/aljazceru/mcp-python-sdk.git
synced 2025-12-26 10:14:25 +01:00
Include context into completions (#966)
This commit is contained in:
@@ -304,8 +304,13 @@ class ClientSession(
|
||||
self,
|
||||
ref: types.ResourceTemplateReference | types.PromptReference,
|
||||
argument: dict[str, str],
|
||||
context_arguments: dict[str, str] | None = None,
|
||||
) -> types.CompleteResult:
|
||||
"""Send a completion/complete request."""
|
||||
context = None
|
||||
if context_arguments is not None:
|
||||
context = types.CompletionContext(arguments=context_arguments)
|
||||
|
||||
return await self.send_request(
|
||||
types.ClientRequest(
|
||||
types.CompleteRequest(
|
||||
@@ -313,6 +318,7 @@ class ClientSession(
|
||||
params=types.CompleteRequestParams(
|
||||
ref=ref,
|
||||
argument=types.CompletionArgument(**argument),
|
||||
context=context,
|
||||
),
|
||||
)
|
||||
),
|
||||
|
||||
@@ -364,6 +364,24 @@ class FastMCP:
|
||||
|
||||
return decorator
|
||||
|
||||
def completion(self):
|
||||
"""Decorator to register a completion handler.
|
||||
|
||||
The completion handler receives:
|
||||
- ref: PromptReference or ResourceTemplateReference
|
||||
- argument: CompletionArgument with name and partial value
|
||||
- context: Optional CompletionContext with previously resolved arguments
|
||||
|
||||
Example:
|
||||
@mcp.completion()
|
||||
async def handle_completion(ref, argument, context):
|
||||
if isinstance(ref, ResourceTemplateReference):
|
||||
# Return completions based on ref, argument, and context
|
||||
return Completion(values=["option1", "option2"])
|
||||
return None
|
||||
"""
|
||||
return self._mcp_server.completion()
|
||||
|
||||
def add_resource(self, resource: Resource) -> None:
|
||||
"""Add a resource to the server.
|
||||
|
||||
|
||||
@@ -433,6 +433,7 @@ class Server(Generic[LifespanResultT, RequestT]):
|
||||
[
|
||||
types.PromptReference | types.ResourceTemplateReference,
|
||||
types.CompletionArgument,
|
||||
types.CompletionContext | None,
|
||||
],
|
||||
Awaitable[types.Completion | None],
|
||||
],
|
||||
@@ -440,7 +441,7 @@ class Server(Generic[LifespanResultT, RequestT]):
|
||||
logger.debug("Registering handler for CompleteRequest")
|
||||
|
||||
async def handler(req: types.CompleteRequest):
|
||||
completion = await func(req.params.ref, req.params.argument)
|
||||
completion = await func(req.params.ref, req.params.argument, req.params.context)
|
||||
return types.ServerResult(
|
||||
types.CompleteResult(
|
||||
completion=completion
|
||||
|
||||
@@ -1028,11 +1028,21 @@ class CompletionArgument(BaseModel):
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
|
||||
class CompletionContext(BaseModel):
|
||||
"""Additional, optional context for completions."""
|
||||
|
||||
arguments: dict[str, str] | None = None
|
||||
"""Previously-resolved variables in a URI template or prompt."""
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
|
||||
class CompleteRequestParams(RequestParams):
|
||||
"""Parameters for completion requests."""
|
||||
|
||||
ref: ResourceTemplateReference | PromptReference
|
||||
argument: CompletionArgument
|
||||
context: CompletionContext | None = None
|
||||
"""Additional, optional context for completions"""
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user