refactor: use snake case instead of camel case in types (#1894)

This commit is contained in:
Marcelo Trylesinski 2026-01-16 15:51:27 +01:00 • committed by GitHub
commit e94b386a13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 1063 additions and 1057 deletions

View file

@ -61,7 +61,7 @@ def run_unicode_server(port: int) -> None: # pragma: no cover
Tool(
name="echo_unicode",
description="🔤 Echo Unicode text - Hello 👋 World 🌍 - Testing 🧪 Unicode ✨",
inputSchema={
input_schema={
"type": "object",
"properties": {
"text": {"type": "string", "description": "Text to echo back"},

View file

@ -45,7 +45,7 @@ async def test_list_roots_callback():
async with create_session(server._mcp_server, list_roots_callback=list_roots_callback) as client_session:
# Make a request to trigger sampling callback
result = await client_session.call_tool("test_list_roots", {"message": "test message"})
assert result.isError is False
assert result.is_error is False
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "true"
@ -53,6 +53,6 @@ async def test_list_roots_callback():
async with create_session(server._mcp_server) as client_session:
# Make a request to trigger sampling callback
result = await client_session.call_tool("test_list_roots", {"message": "test message"})
assert result.isError is True
assert result.is_error is True
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "Error executing tool test_list_roots: List roots not supported"

View file

@ -78,7 +78,7 @@ async def test_logging_callback():
) as client_session:
# First verify our test tool works
result = await client_session.call_tool("test_tool", {})
assert result.isError is False
assert result.is_error is False
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "true"
@ -101,8 +101,8 @@ async def test_logging_callback():
"extra_dict": {"a": 1, "b": 2, "c": 3},
},
)
assert log_result.isError is False
assert log_result_with_extra.isError is False
assert log_result.is_error is False
assert log_result_with_extra.is_error is False
assert len(logging_collector.log_messages) == 2
# Create meta object with related_request_id added dynamically
log = logging_collector.log_messages[0]

View file

@ -66,8 +66,8 @@ class TestClientOutputSchemaValidation:
Tool(
name="get_user",
description="Get user data",
inputSchema={"type": "object"},
outputSchema=output_schema,
input_schema={"type": "object"},
output_schema=output_schema,
)
]
@ -105,8 +105,8 @@ class TestClientOutputSchemaValidation:
Tool(
name="calculate",
description="Calculate something",
inputSchema={"type": "object"},
outputSchema=output_schema,
input_schema={"type": "object"},
output_schema=output_schema,
)
]
@ -136,8 +136,8 @@ class TestClientOutputSchemaValidation:
Tool(
name="get_scores",
description="Get scores",
inputSchema={"type": "object"},
outputSchema=output_schema,
input_schema={"type": "object"},
output_schema=output_schema,
)
]
@ -171,8 +171,8 @@ class TestClientOutputSchemaValidation:
Tool(
name="get_person",
description="Get person data",
inputSchema={"type": "object"},
outputSchema=output_schema,
input_schema={"type": "object"},
output_schema=output_schema,
)
]
@ -190,7 +190,7 @@ class TestClientOutputSchemaValidation:
@pytest.mark.anyio
async def test_tool_not_listed_warning(self, caplog: pytest.LogCaptureFixture):
"""Test that client logs warning when tool is not in list_tools but has outputSchema"""
"""Test that client logs warning when tool is not in list_tools but has output_schema"""
server = Server("test-server")
@server.list_tools()
@ -210,8 +210,8 @@ class TestClientOutputSchemaValidation:
async with client_session(server) as client:
# Call a tool that wasn't listed
result = await client.call_tool("mystery_tool", {})
assert result.structuredContent == {"result": 42}
assert result.isError is False
assert result.structured_content == {"result": 42}
assert result.is_error is False
# Check that warning was logged
assert "Tool mystery_tool not listed" in caplog.text

View file

@ -25,7 +25,7 @@ async def test_sampling_callback():
role="assistant",
content=TextContent(type="text", text="This is a response from the sampling callback"),
model="test-model",
stopReason="endTurn",
stop_reason="endTurn",
)
async def sampling_callback(
@ -47,7 +47,7 @@ async def test_sampling_callback():
async with create_session(server._mcp_server, sampling_callback=sampling_callback) as client_session:
# Make a request to trigger sampling callback
result = await client_session.call_tool("test_sampling", {"message": "Test message for sampling"})
assert result.isError is False
assert result.is_error is False
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "true"
@ -55,7 +55,7 @@ async def test_sampling_callback():
async with create_session(server._mcp_server) as client_session:
# Make a request to trigger sampling callback
result = await client_session.call_tool("test_sampling", {"message": "Test message for sampling"})
assert result.isError is True
assert result.is_error is True
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "Error executing tool test_sampling: Sampling not supported"
@ -72,7 +72,7 @@ async def test_create_message_backwards_compat_single_content():
role="assistant",
content=TextContent(type="text", text="Hello from LLM"),
model="test-model",
stopReason="endTurn",
stop_reason="endTurn",
)
async def sampling_callback(
@ -99,7 +99,7 @@ async def test_create_message_backwards_compat_single_content():
async with create_session(server._mcp_server, sampling_callback=sampling_callback) as client_session:
result = await client_session.call_tool("test_backwards_compat", {"message": "Test"})
assert result.isError is False
assert result.is_error is False
assert isinstance(result.content[0], TextContent)
assert result.content[0].text == "true"
@ -112,7 +112,7 @@ async def test_create_message_result_with_tools_type():
role="assistant",
content=ToolUseContent(type="tool_use", id="call_123", name="get_weather", input={"city": "SF"}),
model="test-model",
stopReason="toolUse",
stop_reason="toolUse",
)
# CreateMessageResultWithTools should have content_as_list
@ -128,7 +128,7 @@ async def test_create_message_result_with_tools_type():
ToolUseContent(type="tool_use", id="call_456", name="get_weather", input={"city": "NYC"}),
],
model="test-model",
stopReason="toolUse",
stop_reason="toolUse",
)
content_list_array = result_array.content_as_list
assert len(content_list_array) == 2

View file

@ -49,7 +49,7 @@ async def test_client_session_initialize():
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(
logging=None,
resources=None,
@ -57,7 +57,7 @@ async def test_client_session_initialize():
experimental=None,
prompts=None,
),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
instructions="The server instructions.",
)
)
@ -105,9 +105,9 @@ async def test_client_session_initialize():
# Assert the result
assert isinstance(result, InitializeResult)
assert result.protocolVersion == LATEST_PROTOCOL_VERSION
assert result.protocol_version == LATEST_PROTOCOL_VERSION
assert isinstance(result.capabilities, ServerCapabilities)
assert result.serverInfo == Implementation(name="mock-server", version="0.1.0")
assert result.server_info == Implementation(name="mock-server", version="0.1.0")
assert result.instructions == "The server instructions."
# Check that the client sent the initialized notification
@ -133,13 +133,13 @@ async def test_client_session_custom_client_info():
jsonrpc_request.model_dump(by_alias=True, mode="json", exclude_none=True)
)
assert isinstance(request.root, InitializeRequest)
received_client_info = request.root.params.clientInfo
received_client_info = request.root.params.client_info
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -194,13 +194,13 @@ async def test_client_session_default_client_info():
jsonrpc_request.model_dump(by_alias=True, mode="json", exclude_none=True)
)
assert isinstance(request.root, InitializeRequest)
received_client_info = request.root.params.clientInfo
received_client_info = request.root.params.client_info
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -254,14 +254,14 @@ async def test_client_session_version_negotiation_success():
assert isinstance(request.root, InitializeRequest)
# Verify client sent the latest protocol version
assert request.root.params.protocolVersion == LATEST_PROTOCOL_VERSION
assert request.root.params.protocol_version == LATEST_PROTOCOL_VERSION
# Server responds with a supported older version
result = ServerResult(
InitializeResult(
protocolVersion="2024-11-05",
protocol_version="2024-11-05",
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -296,8 +296,8 @@ async def test_client_session_version_negotiation_success():
# Assert the result with negotiated version
assert isinstance(result, InitializeResult)
assert result.protocolVersion == "2024-11-05"
assert result.protocolVersion in SUPPORTED_PROTOCOL_VERSIONS
assert result.protocol_version == "2024-11-05"
assert result.protocol_version in SUPPORTED_PROTOCOL_VERSIONS
@pytest.mark.anyio
@ -318,9 +318,9 @@ async def test_client_session_version_negotiation_failure():
# Server responds with an unsupported version
result = ServerResult(
InitializeResult(
protocolVersion="2020-01-01", # Unsupported old version
protocol_version="2020-01-01", # Unsupported old version
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -377,9 +377,9 @@ async def test_client_capabilities_default():
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -455,9 +455,9 @@ async def test_client_capabilities_with_custom_callbacks():
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -503,7 +503,7 @@ async def test_client_capabilities_with_custom_callbacks():
assert received_capabilities.roots is not None
assert isinstance(received_capabilities.roots, types.RootsCapability)
# Should be True for custom callback
assert received_capabilities.roots.listChanged is True
assert received_capabilities.roots.list_changed is True
@pytest.mark.anyio
@ -538,9 +538,9 @@ async def test_client_capabilities_with_sampling_tools():
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -592,9 +592,9 @@ async def test_get_server_capabilities():
expected_capabilities = ServerCapabilities(
logging=types.LoggingCapability(),
prompts=types.PromptsCapability(listChanged=True),
resources=types.ResourcesCapability(subscribe=True, listChanged=True),
tools=types.ToolsCapability(listChanged=False),
prompts=types.PromptsCapability(list_changed=True),
resources=types.ResourcesCapability(subscribe=True, list_changed=True),
tools=types.ToolsCapability(list_changed=False),
)
async def mock_server():
@ -608,9 +608,9 @@ async def test_get_server_capabilities():
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=expected_capabilities,
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -649,11 +649,11 @@ async def test_get_server_capabilities():
assert capabilities == expected_capabilities
assert capabilities.logging is not None
assert capabilities.prompts is not None
assert capabilities.prompts.listChanged is True
assert capabilities.prompts.list_changed is True
assert capabilities.resources is not None
assert capabilities.resources.subscribe is True
assert capabilities.tools is not None
assert capabilities.tools.listChanged is False
assert capabilities.tools.list_changed is False
@pytest.mark.anyio
@ -663,7 +663,7 @@ async def test_client_tool_call_with_meta(meta: dict[str, Any] | None):
client_to_server_send, client_to_server_receive = anyio.create_memory_object_stream[SessionMessage](1)
server_to_client_send, server_to_client_receive = anyio.create_memory_object_stream[SessionMessage](1)
mocked_tool = types.Tool(name="sample_tool", inputSchema={})
mocked_tool = types.Tool(name="sample_tool", input_schema={})
async def mock_server():
# Receive initialization request from client
@ -677,9 +677,9 @@ async def test_client_tool_call_with_meta(meta: dict[str, Any] | None):
result = ServerResult(
InitializeResult(
protocolVersion=LATEST_PROTOCOL_VERSION,
protocol_version=LATEST_PROTOCOL_VERSION,
capabilities=ServerCapabilities(),
serverInfo=Implementation(name="mock-server", version="0.1.0"),
server_info=Implementation(name="mock-server", version="0.1.0"),
)
)
@ -712,7 +712,7 @@ async def test_client_tool_call_with_meta(meta: dict[str, Any] | None):
assert jsonrpc_request.root.params["_meta"] == meta
result = ServerResult(
CallToolResult(content=[TextContent(type="text", text="Called successfully")], isError=False)
CallToolResult(content=[TextContent(type="text", text="Called successfully")], is_error=False)
)
# Send the tools/call result

View file

@ -59,7 +59,7 @@ class TestClientSessionGroup:
return f"{(server_info.name)}-{name}"
mcp_session_group = ClientSessionGroup(component_name_hook=hook)
mcp_session_group._tools = {"server1-my_tool": types.Tool(name="my_tool", inputSchema={})}
mcp_session_group._tools = {"server1-my_tool": types.Tool(name="my_tool", input_schema={})}
mcp_session_group._tool_to_session = {"server1-my_tool": mock_session}
text_content = types.TextContent(type="text", text="OK")
mock_session.call_tool.return_value = types.CallToolResult(content=[text_content])
@ -324,7 +324,7 @@ class TestClientSessionGroup:
# Mock session.initialize()
mock_initialize_result = mock.AsyncMock(name="InitializeResult")
mock_initialize_result.serverInfo = types.Implementation(name="foo", version="1")
mock_initialize_result.server_info = types.Implementation(name="foo", version="1")
mock_entered_session.initialize.return_value = mock_initialize_result
# --- Test Execution ---
@ -381,5 +381,5 @@ class TestClientSessionGroup:
mock_entered_session.initialize.assert_awaited_once()
# 3. Assert returned values
assert returned_server_info is mock_initialize_result.serverInfo
assert returned_server_info is mock_initialize_result.server_info
assert returned_session is mock_entered_session