Skip to content

Commit 680b736

Browse files
committed
backport: phase-1.5 mechanical types sweep (snake→camel kwargs, type= discriminators)
1 parent 78adb72 commit 680b736

34 files changed

Lines changed: 485 additions & 389 deletions

tests/interaction/auth/test_authorize_token.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252

5353
async def list_tools(ctx: ServerRequestContext, params: types.PaginatedRequestParams | None) -> ListToolsResult:
54-
return ListToolsResult(tools=[Tool(name="echo", input_schema={"type": "object"})])
54+
return ListToolsResult(tools=[Tool(name="echo", inputSchema={"type": "object"})])
5555

5656

5757
def authorize_params(authorize_url: str) -> dict[str, str]:

tests/interaction/auth/test_discovery.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444

4545
async def list_tools(ctx: ServerRequestContext, params: types.PaginatedRequestParams | None) -> ListToolsResult:
46-
return ListToolsResult(tools=[Tool(name="probe", input_schema={"type": "object"})])
46+
return ListToolsResult(tools=[Tool(name="probe", inputSchema={"type": "object"})])
4747

4848

4949
def discovery_gets(recorded: list[RecordedRequest]) -> list[str]:

tests/interaction/auth/test_flow.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141

4242
async def list_tools(ctx: ServerRequestContext, params: types.PaginatedRequestParams | None) -> ListToolsResult:
43-
return ListToolsResult(tools=[Tool(name="whoami", input_schema={"type": "object"})])
43+
return ListToolsResult(tools=[Tool(name="whoami", inputSchema={"type": "object"})])
4444

4545

4646
@requirement("flow:oauth:authorization-code-roundtrip")
@@ -76,7 +76,7 @@ async def test_an_unauthenticated_request_is_challenged_then_the_full_oauth_flow
7676
):
7777
result = await client.list_tools()
7878

79-
assert result == snapshot(ListToolsResult(tools=[Tool(name="whoami", input_schema={"type": "object"})]))
79+
assert result == snapshot(ListToolsResult(tools=[Tool(name="whoami", inputSchema={"type": "object"})]))
8080
assert headless.authorize_url is not None
8181

8282
paths = [(r.method, r.url.path) for r in requests]
@@ -126,7 +126,7 @@ async def call_tool(ctx: ServerRequestContext, params: types.CallToolRequestPara
126126
assert params.name == "whoami"
127127
token = get_access_token()
128128
assert token is not None
129-
return CallToolResult(content=[TextContent(text=" ".join(token.scopes))])
129+
return CallToolResult(content=[TextContent(type="text", text=" ".join(token.scopes))])
130130

131131
server = Server("guarded", on_list_tools=list_tools, on_call_tool=call_tool)
132132
provider = InMemoryAuthorizationServerProvider()
@@ -135,7 +135,7 @@ async def call_tool(ctx: ServerRequestContext, params: types.CallToolRequestPara
135135
async with connect_with_oauth(server, provider=provider) as (client, _):
136136
result = await client.call_tool("whoami", {})
137137

138-
assert result == snapshot(CallToolResult(content=[TextContent(text="mcp")]))
138+
assert result == snapshot(CallToolResult(content=[TextContent(type="text", text="mcp")]))
139139

140140

141141
@requirement("client-auth:pre-registration")

tests/interaction/auth/test_lifecycle.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545

4646
async def list_tools(ctx: ServerRequestContext, params: types.PaginatedRequestParams | None) -> ListToolsResult:
47-
return ListToolsResult(tools=[Tool(name="echo", input_schema={"type": "object"})])
47+
return ListToolsResult(tools=[Tool(name="echo", inputSchema={"type": "object"})])
4848

4949

5050
def form_body(request: RecordedRequest) -> dict[str, str]:

tests/interaction/lowlevel/test_cancellation.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def call_and_capture_error() -> None:
7676
await started.wait()
7777
await client.session.send_notification(
7878
types.CancelledNotification(
79-
params=types.CancelledNotificationParams(request_id=request_ids[0], reason="user aborted")
79+
params=types.CancelledNotificationParams(requestId=request_ids[0], reason="user aborted")
8080
)
8181
)
8282

@@ -96,14 +96,14 @@ async def list_tools(
9696
) -> types.ListToolsResult:
9797
return types.ListToolsResult(
9898
tools=[
99-
types.Tool(name="block", input_schema={"type": "object"}),
100-
types.Tool(name="echo", input_schema={"type": "object"}),
99+
types.Tool(name="block", inputSchema={"type": "object"}),
100+
types.Tool(name="echo", inputSchema={"type": "object"}),
101101
]
102102
)
103103

104104
async def call_tool(ctx: ServerRequestContext, params: types.CallToolRequestParams) -> CallToolResult:
105105
if params.name == "echo":
106-
return CallToolResult(content=[TextContent(text="still alive")])
106+
return CallToolResult(content=[TextContent(type="text", text="still alive")])
107107
assert ctx.request_id is not None
108108
request_ids.append(ctx.request_id)
109109
started.set()
@@ -123,12 +123,12 @@ async def call_and_swallow_cancellation_error() -> None:
123123
task_group.start_soon(call_and_swallow_cancellation_error)
124124
await started.wait()
125125
await client.session.send_notification(
126-
types.CancelledNotification(params=types.CancelledNotificationParams(request_id=request_ids[0]))
126+
types.CancelledNotification(params=types.CancelledNotificationParams(requestId=request_ids[0]))
127127
)
128128

129129
result = await client.call_tool("echo", {})
130130

131-
assert result == snapshot(CallToolResult(content=[TextContent(text="still alive")]))
131+
assert result == snapshot(CallToolResult(content=[TextContent(type="text", text="still alive")]))
132132

133133

134134
@requirement("protocol:cancel:unknown-id-ignored")
@@ -138,21 +138,21 @@ async def test_cancellation_for_unknown_request_is_ignored(connect: Connect) ->
138138
async def list_tools(
139139
ctx: ServerRequestContext, params: types.PaginatedRequestParams | None
140140
) -> types.ListToolsResult:
141-
return types.ListToolsResult(tools=[types.Tool(name="echo", input_schema={"type": "object"})])
141+
return types.ListToolsResult(tools=[types.Tool(name="echo", inputSchema={"type": "object"})])
142142

143143
async def call_tool(ctx: ServerRequestContext, params: types.CallToolRequestParams) -> CallToolResult:
144144
assert params.name == "echo"
145-
return CallToolResult(content=[TextContent(text="unbothered")])
145+
return CallToolResult(content=[TextContent(type="text", text="unbothered")])
146146

147147
server = Server("calm", on_list_tools=list_tools, on_call_tool=call_tool)
148148

149149
async with connect(server) as client:
150150
await client.session.send_notification(
151-
types.CancelledNotification(params=types.CancelledNotificationParams(request_id=9999))
151+
types.CancelledNotification(params=types.CancelledNotificationParams(requestId=9999))
152152
)
153153
result = await client.call_tool("echo", {})
154154

155-
assert result == snapshot(CallToolResult(content=[TextContent(text="unbothered")]))
155+
assert result == snapshot(CallToolResult(content=[TextContent(type="text", text="unbothered")]))
156156

157157

158158
@requirement("protocol:cancel:late-response-ignored")
@@ -192,9 +192,9 @@ def respond(request_id: types.RequestId, result: types.Result) -> SessionMessage
192192
respond(
193193
init.message.id,
194194
InitializeResult(
195-
protocol_version="2025-11-25",
195+
protocolVersion="2025-11-25",
196196
capabilities=ServerCapabilities(),
197-
server_info=Implementation(name="scripted", version="0.0.1"),
197+
serverInfo=Implementation(name="scripted", version="0.0.1"),
198198
),
199199
)
200200
)

tests/interaction/lowlevel/test_completion.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ async def completion(ctx: ServerRequestContext, params: types.CompleteRequestPar
3434
assert params.argument.name == "language"
3535
candidates = ["python", "pytorch", "ruby"]
3636
matches = [candidate for candidate in candidates if candidate.startswith(params.argument.value)]
37-
return CompleteResult(completion=Completion(values=matches, total=len(matches), has_more=False))
37+
return CompleteResult(completion=Completion(values=matches, total=len(matches), hasMore=False))
3838

3939
server = Server("completer", on_completion=completion)
4040

4141
async with connect(server) as client:
4242
result = await client.complete(
43-
PromptReference(name="code_review"), argument={"name": "language", "value": "py"}
43+
PromptReference(type="ref/prompt", name="code_review"), argument={"name": "language", "value": "py"}
4444
)
4545

4646
assert result == snapshot(
47-
CompleteResult(completion=Completion(values=["python", "pytorch"], total=2, has_more=False))
47+
CompleteResult(completion=Completion(values=["python", "pytorch"], total=2, hasMore=False))
4848
)
4949

5050

@@ -62,7 +62,7 @@ async def completion(ctx: ServerRequestContext, params: types.CompleteRequestPar
6262

6363
async with connect(server) as client:
6464
result = await client.complete(
65-
ResourceTemplateReference(uri="github://repos/{owner}/{repo}"),
65+
ResourceTemplateReference(type="ref/resource", uri="github://repos/{owner}/{repo}"),
6666
argument={"name": "owner", "value": "model"},
6767
)
6868

@@ -86,7 +86,7 @@ async def completion(ctx: ServerRequestContext, params: types.CompleteRequestPar
8686

8787
async with connect(server) as client:
8888
result = await client.complete(
89-
ResourceTemplateReference(uri="github://repos/{owner}/{repo}"),
89+
ResourceTemplateReference(type="ref/resource", uri="github://repos/{owner}/{repo}"),
9090
argument={"name": "repo", "value": ""},
9191
context_arguments={"owner": "modelcontextprotocol"},
9292
)
@@ -111,7 +111,7 @@ async def completion(ctx: ServerRequestContext, params: types.CompleteRequestPar
111111

112112
async with connect(server) as client:
113113
with pytest.raises(MCPError) as exc_info:
114-
await client.complete(PromptReference(name="ghost"), argument={"name": "x", "value": ""})
114+
await client.complete(PromptReference(type="ref/prompt", name="ghost"), argument={"name": "x", "value": ""})
115115

116116
assert exc_info.value.error.code == INVALID_PARAMS
117117

@@ -126,6 +126,8 @@ async def test_complete_without_handler_is_method_not_found(connect: Connect) ->
126126
assert client.initialize_result.capabilities.completions is None
127127

128128
with pytest.raises(MCPError) as exc_info:
129-
await client.complete(PromptReference(name="anything"), argument={"name": "topic", "value": ""})
129+
await client.complete(
130+
PromptReference(type="ref/prompt", name="anything"), argument={"name": "topic", "value": ""}
131+
)
130132

131133
assert exc_info.value.error == snapshot(ErrorData(code=METHOD_NOT_FOUND, message="Method not found"))

0 commit comments

Comments
 (0)