MCPcopy Index your code
hub / github.com/modelcontextprotocol/python-sdk / send_request

Method send_request

src/mcp/server/session.py:57–86  ·  view source on GitHub ↗

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,
    )

Source from the content-addressed store, hash-verified

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,

Callers 5

create_messageMethod · 0.95
list_rootsMethod · 0.95
elicit_formMethod · 0.95
elicit_urlMethod · 0.95
send_pingMethod · 0.95

Calls 1

send_raw_requestMethod · 0.45

Tested by

no test coverage detected