Skip to content

Commit e666d3e

Browse files
Add test for ctx.elicit_url() convenience method to fix coverage
1 parent c01ca89 commit e666d3e

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

tests/server/fastmcp/test_url_elicitation.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,34 @@ async def elicitation_callback(context: RequestContext[ClientSession, None], par
363363
assert len(result.content) == 1
364364
assert isinstance(result.content[0], TextContent)
365365
assert result.content[0].text == "Email: test@example.com"
366+
367+
368+
@pytest.mark.anyio
369+
async def test_ctx_elicit_url_convenience_method():
370+
"""Test the ctx.elicit_url() convenience method (vs ctx.session.elicit_url())."""
371+
mcp = FastMCP(name="CtxElicitUrlServer")
372+
373+
@mcp.tool(description="A tool that uses ctx.elicit_url() directly")
374+
async def direct_elicit_url(ctx: Context[ServerSession, None]) -> str:
375+
# Use ctx.elicit_url() directly instead of ctx.session.elicit_url()
376+
result = await ctx.elicit_url(
377+
message="Test the convenience method",
378+
url="https://example.com/test",
379+
elicitation_id="ctx-test-001",
380+
)
381+
return f"Result: {result.action}"
382+
383+
async def elicitation_callback(
384+
context: RequestContext[ClientSession, None], params: ElicitRequestParams
385+
):
386+
assert params.mode == "url"
387+
assert params.elicitationId == "ctx-test-001"
388+
return ElicitResult(action="accept")
389+
390+
async with create_connected_server_and_client_session(
391+
mcp._mcp_server, elicitation_callback=elicitation_callback
392+
) as client_session:
393+
await client_session.initialize()
394+
result = await client_session.call_tool("direct_elicit_url", {})
395+
assert isinstance(result.content[0], TextContent)
396+
assert result.content[0].text == "Result: accept"

0 commit comments

Comments
 (0)