ServerSession methods (create_message, elicit_form) don't expose progress_callback parameter
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
Research direction
Start with the ServerSession.create_message() and elicit_form() entry points, then compare their calls with BaseSession.send_request() and the existing progress callback handling. Review tests/shared/test_progress_notifications.py, and consider the work done when both methods accept and forward progress_callback with coverage for the bidirectional flow.
Written by the indexing model from the issue text.
Description
Summary
The ServerSession high-level methods for sending requests to clients (create_message, elicit_form) don't expose the progress_callback parameter, even though the underlying BaseSession.send_request() fully supports it.
This means servers can't easily receive progress notifications from clients during sampling or elicitation requests.
Current Behavior
# ServerSession.elicit_form() - no progress_callback parameter
async def elicit_form(
self,
message: str,
requestedSchema: types.ElicitRequestedSchema,
related_request_id: types.RequestId | None = None,
) -> types.ElicitResult:
return await self.send_request(...) # progress_callback not passed through
# ServerSession.create_message() - same issue
async def create_message(
self,
messages: list[types.SamplingMessage],
*,
max_tokens: int,
# ... other params ...
related_request_id: types.RequestId | None = None,
) -> types.CreateMessageResult:
return await self.send_request(...) # progress_callback not passed through
Expected Behavior
# Should be able to pass progress_callback
result = await server_session.elicit_form(
message="Please provide your details",
requestedSchema=schema,
progress_callback=lambda progress, total, msg: print(f"Progress: {progress}/{total} - {msg}")
)
result = await server_session.create_message(
messages=messages,
max_tokens=1000,
progress_callback=lambda progress, total, msg: print(f"Sampling progress: {progress}/{total}")
)
Context
- The MCP spec supports bidirectional progress notifications - clients CAN send
notifications/progressback to servers during request handling BaseSession.send_request()already supportsprogress_callbackparameterClientSession.call_tool()exposesprogress_callbackfor the client→server direction- The TypeScript SDK exposes this via
RequestOptions.onprogressin bothcreateMessage()andelicitInput() - Tests in
tests/shared/test_progress_notifications.pydemonstrate the bidirectional flow works
Suggested Fix
Add progress_callback: ProgressFnT | None = None parameter to:
ServerSession.create_message()ServerSession.elicit_form()- Any other
ServerSessionmethods that send requests to clients
And pass it through to send_request().
- Dominant language
- Python
- Stars
- 24.3k
- Forks
- 4k
- Avg merge
- 1d 19m
- Merged PRs (30d)
- 29
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from modelcontextprotocol/python-sdk
-
v1 v2
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
modelcontextprotocol/python-sdk#3546 · 5 comments ·
-
v1 v2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
modelcontextprotocol/python-sdk#3545 · 1 comment ·
-
v1 v2
Difficulty 1/5 Under an hour Newbie friendliness 91/100
modelcontextprotocol/python-sdk#3508 · 2 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
modelcontextprotocol/python-sdk#3504 ·
-
v1 v2
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
modelcontextprotocol/python-sdk#3492 · 1 comment ·
All issues in modelcontextprotocol/python-sdk
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100