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

Method render

src/mcp/server/mcpserver/prompts/base.py:138–189  ·  view source on GitHub ↗

Render the prompt with arguments. Raises: ValueError: If required arguments are missing, or if rendering fails.

(
        self,
        arguments: dict[str, Any] | None,
        context: Context[LifespanContextT, RequestT],
    )

Source from the content-addressed store, hash-verified

136 )
137
138 async def render(
139 self,
140 arguments: dict[str, Any] | None,
141 context: Context[LifespanContextT, RequestT],
142 ) -> list[Message]:
143 """Render the prompt with arguments.
144
145 Raises:
146 ValueError: If required arguments are missing, or if rendering fails.
147 """
148 # Validate required arguments
149 if self.arguments:
150 required = {arg.name for arg in self.arguments if arg.required}
151 provided = set(arguments or {})
152 missing = required - provided
153 if missing:
154 raise ValueError(f"Missing required arguments: {missing}")
155
156 try:
157 # Add context to arguments if needed
158 call_args = inject_context(self.fn, arguments or {}, context, self.context_kwarg)
159
160 fn = self.fn
161 if is_async_callable(fn):
162 result = await fn(**call_args)
163 else:
164 result = await anyio.to_thread.run_sync(functools.partial(self.fn, **call_args))
165
166 # Validate messages
167 if not isinstance(result, list | tuple):
168 result = [result]
169
170 # Convert result to messages
171 messages: list[Message] = []
172 for msg in result: # type: ignore[reportUnknownVariableType]
173 try:
174 if isinstance(msg, Message):
175 messages.append(msg)
176 elif isinstance(msg, dict):
177 messages.append(message_validator.validate_python(msg))
178 elif isinstance(msg, str):
179 content = TextContent(type="text", text=msg)
180 messages.append(UserMessage(content=content))
181 else: # pragma: no cover
182 content = pydantic_core.to_json(msg, fallback=str, indent=2).decode()
183 messages.append(Message(role="user", content=content))
184 except Exception: # pragma: no cover
185 raise ValueError(f"Could not convert prompt result to message: {msg}")
186
187 return messages
188 except Exception as e:
189 raise ValueError(f"Error rendering prompt {self.name}: {e}")

Calls 6

inject_contextFunction · 0.90
is_async_callableFunction · 0.90
TextContentClass · 0.90
fnFunction · 0.85
UserMessageClass · 0.85
MessageClass · 0.85