fix(prompts): await awaitable result returned by sync prompt callback (#3709) by nikolas-sapa · Pull Request #3734 · modelcontextprotocol/python-sdk · GitHub
Skip to content

fix(prompts): await awaitable result returned by sync prompt callback (#3709) - #3734

Closed
nikolas-sapa wants to merge 1 commit into
modelcontextprotocol:mainfrom
nikolas-sapa:fix/prompt-sync-awaitable-3709
Closed

nikolas-sapa wants to merge 1 commit into
modelcontextprotocol:mainfrom
nikolas-sapa:fix/prompt-sync-awaitable-3709

Conversation

@nikolas-sapa

Copy link
Copy Markdown

Summary

Closes #3709.

When a synchronous prompt function returns an awaitable (coroutine, Task, or Future), Prompt.render() previously ran the sync callable in a worker thread via anyio.to_thread.run_sync(), but did not await the returned awaitable. This resulted in the coroutine object being serialized as fallback JSON/string representation:

Left contains one more item: Message(role='user', content=TextContent(type='text', text='"<coroutine object ...>"'))

PromptResult explicitly allows Awaitable[SyncPromptResult]. This PR awaits any awaitable returned by the prompt callable before validating and converting messages.

Root Cause

Prompt.render() ran result = await anyio.to_thread.run_sync(...) for non-async callables, but did not check inspect.isawaitable(result).

Fix

Added if inspect.isawaitable(result): result = await result immediately after running the prompt callable in src/mcp/server/mcpserver/prompts/base.py.

Test Plan

  • Added regression test test_prompt_render_awaits_awaitable_returned_by_sync_callback in tests/server/mcpserver/prompts/test_base.py.
  • Verified test fails RED on base and passes GREEN with fix.
  • Ran all 22 prompt tests in test_base.py: 22 passed.
  • ruff check, ruff format --check, and pyright: 0 errors.

@github-actions github-actions Bot added the missing-issue-link Auto-closed: PR needs a linked issue assigned to its author (see CONTRIBUTING.md) label Oct 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot closed this Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

missing-issue-link Auto-closed: PR needs a linked issue assigned to its author (see CONTRIBUTING.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A synchronous prompt callback returning Awaitable is rendered as coroutine text

1 participant