Send a typed server-to-client request and validate the result. Raises: MCPError: The peer responded with an error. NoBackChannelError: The connection has no back-channel for server-initiated requests (raised by the held `Outbound`). pydant
(
self,
request: types.ServerRequest,
result_type: type[ResultT],
request_read_timeout_seconds: float | None = None,
metadata: ServerMessageMetadata | None = None,
progress_callback: ProgressFnT | None = None,
)
| 55 | return self._connection.protocol_version |
| 56 | |
| 57 | async def send_request( |
| 58 | self, |
| 59 | request: types.ServerRequest, |
| 60 | result_type: type[ResultT], |
| 61 | request_read_timeout_seconds: float | None = None, |
| 62 | metadata: ServerMessageMetadata | None = None, |
| 63 | progress_callback: ProgressFnT | None = None, |
| 64 | ) -> ResultT: |
| 65 | """Send a typed server-to-client request and validate the result. |
| 66 | |
| 67 | Raises: |
| 68 | MCPError: The peer responded with an error. |
| 69 | NoBackChannelError: The connection has no back-channel for |
| 70 | server-initiated requests (raised by the held `Outbound`). |
| 71 | pydantic.ValidationError: The peer's result does not match `result_type`. |
| 72 | """ |
| 73 | related = metadata.related_request_id if metadata is not None else None |
| 74 | channel = self._request_outbound if related is not None else self._connection.outbound |
| 75 | data = request.model_dump(by_alias=True, mode="json", exclude_none=True) |
| 76 | opts: CallOptions = {} |
| 77 | if request_read_timeout_seconds is not None: |
| 78 | opts["timeout"] = request_read_timeout_seconds |
| 79 | if progress_callback is not None: |
| 80 | opts["on_progress"] = progress_callback |
| 81 | result = await channel.send_raw_request(data["method"], data.get("params"), opts or None) |
| 82 | try: |
| 83 | _methods.validate_client_result(request.method, self.protocol_version, result) |
| 84 | except KeyError: |
| 85 | pass |
| 86 | return result_type.model_validate(result, by_name=False) |
| 87 | |
| 88 | async def send_notification( |
| 89 | self, |
no test coverage detected