Skip to content

Commit e94b386

Browse files
authored
refactor: use snake case instead of camel case in types (#1894)
1 parent 7080fcf commit e94b386

File tree

127 files changed

+1063
-1057
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+1063
-1057
lines changed

README.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ def validated_tool() -> Annotated[CallToolResult, ValidationModel]:
442442
"""Return CallToolResult with structured output validation."""
443443
return CallToolResult(
444444
content=[TextContent(type="text", text="Validated response")],
445-
structuredContent={"status": "success", "data": {"result": 42}},
445+
structured_content={"status": "success", "data": {"result": 42}},
446446
_meta={"internal": "metadata"},
447447
)
448448

@@ -757,8 +757,8 @@ async def run():
757757
# List available resource templates
758758
templates = await session.list_resource_templates()
759759
print("Available resource templates:")
760-
for template in templates.resourceTemplates:
761-
print(f" - {template.uriTemplate}")
760+
for template in templates.resource_templates:
761+
print(f" - {template.uri_template}")
762762

763763
# List available prompts
764764
prompts = await session.list_prompts()
@@ -767,20 +767,20 @@ async def run():
767767
print(f" - {prompt.name}")
768768

769769
# Complete resource template arguments
770-
if templates.resourceTemplates:
771-
template = templates.resourceTemplates[0]
772-
print(f"\nCompleting arguments for resource template: {template.uriTemplate}")
770+
if templates.resource_templates:
771+
template = templates.resource_templates[0]
772+
print(f"\nCompleting arguments for resource template: {template.uri_template}")
773773

774774
# Complete without context
775775
result = await session.complete(
776-
ref=ResourceTemplateReference(type="ref/resource", uri=template.uriTemplate),
776+
ref=ResourceTemplateReference(type="ref/resource", uri=template.uri_template),
777777
argument={"name": "owner", "value": "model"},
778778
)
779779
print(f"Completions for 'owner' starting with 'model': {result.completion.values}")
780780

781781
# Complete with context - repo suggestions based on owner
782782
result = await session.complete(
783-
ref=ResourceTemplateReference(type="ref/resource", uri=template.uriTemplate),
783+
ref=ResourceTemplateReference(type="ref/resource", uri=template.uri_template),
784784
argument={"name": "repo", "value": ""},
785785
context_arguments={"owner": "modelcontextprotocol"},
786786
)
@@ -910,7 +910,7 @@ async def connect_service(service_name: str, ctx: Context[ServerSession, None])
910910
mode="url",
911911
message=f"Authorization required to connect to {service_name}",
912912
url=f"https://{service_name}.example.com/oauth/authorize?elicit={elicitation_id}",
913-
elicitationId=elicitation_id,
913+
elicitation_id=elicitation_id,
914914
)
915915
]
916916
)
@@ -1706,7 +1706,7 @@ async def handle_list_tools() -> list[types.Tool]:
17061706
types.Tool(
17071707
name="query_db",
17081708
description="Query the database",
1709-
inputSchema={
1709+
input_schema={
17101710
"type": "object",
17111711
"properties": {"query": {"type": "string", "description": "SQL query to execute"}},
17121712
"required": ["query"],
@@ -1867,12 +1867,12 @@ async def list_tools() -> list[types.Tool]:
18671867
types.Tool(
18681868
name="get_weather",
18691869
description="Get current weather for a city",
1870-
inputSchema={
1870+
input_schema={
18711871
"type": "object",
18721872
"properties": {"city": {"type": "string", "description": "City name"}},
18731873
"required": ["city"],
18741874
},
1875-
outputSchema={
1875+
output_schema={
18761876
"type": "object",
18771877
"properties": {
18781878
"temperature": {"type": "number", "description": "Temperature in Celsius"},
@@ -1970,7 +1970,7 @@ async def list_tools() -> list[types.Tool]:
19701970
types.Tool(
19711971
name="advanced_tool",
19721972
description="Tool with full control including _meta field",
1973-
inputSchema={
1973+
input_schema={
19741974
"type": "object",
19751975
"properties": {"message": {"type": "string"}},
19761976
"required": ["message"],
@@ -1986,7 +1986,7 @@ async def handle_call_tool(name: str, arguments: dict[str, Any]) -> types.CallTo
19861986
message = str(arguments.get("message", ""))
19871987
return types.CallToolResult(
19881988
content=[types.TextContent(type="text", text=f"Processed: {message}")],
1989-
structuredContent={"result": "success", "message": message},
1989+
structured_content={"result": "success", "message": message},
19901990
_meta={"hidden": "data for client applications only"},
19911991
)
19921992

@@ -2062,7 +2062,7 @@ async def list_resources_paginated(request: types.ListResourcesRequest) -> types
20622062
# Determine next cursor
20632063
next_cursor = str(end) if end < len(ITEMS) else None
20642064

2065-
return types.ListResourcesResult(resources=page_items, nextCursor=next_cursor)
2065+
return types.ListResourcesResult(resources=page_items, next_cursor=next_cursor)
20662066
```
20672067

20682068
_Full example: [examples/snippets/servers/pagination_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/pagination_example.py)_
@@ -2103,8 +2103,8 @@ async def list_all_resources() -> None:
21032103
print(f"Fetched {len(result.resources)} resources")
21042104

21052105
# Check if there are more pages
2106-
if result.nextCursor:
2107-
cursor = result.nextCursor
2106+
if result.next_cursor:
2107+
cursor = result.next_cursor
21082108
else:
21092109
break
21102110

@@ -2167,7 +2167,7 @@ async def handle_sampling_message(
21672167
text="Hello, world! from model",
21682168
),
21692169
model="gpt-3.5-turbo",
2170-
stopReason="endTurn",
2170+
stop_reason="endTurn",
21712171
)
21722172

21732173

@@ -2205,7 +2205,7 @@ async def run():
22052205
result_unstructured = result.content[0]
22062206
if isinstance(result_unstructured, types.TextContent):
22072207
print(f"Tool result: {result_unstructured.text}")
2208-
result_structured = result.structuredContent
2208+
result_structured = result.structured_content
22092209
print(f"Structured tool result: {result_structured}")
22102210

22112211

@@ -2306,7 +2306,7 @@ async def display_resources(session: ClientSession):
23062306
print(f"Resource: {display_name} ({resource.uri})")
23072307

23082308
templates_response = await session.list_resource_templates()
2309-
for template in templates_response.resourceTemplates:
2309+
for template in templates_response.resource_templates:
23102310
display_name = get_display_name(template)
23112311
print(f"Resource Template: {display_name}")
23122312

examples/clients/simple-chatbot/mcp_simple_chatbot/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ async def list_tools(self) -> list[Tool]:
112112

113113
for item in tools_response:
114114
if item[0] == "tools":
115-
tools.extend(Tool(tool.name, tool.description, tool.inputSchema, tool.title) for tool in item[1])
115+
tools.extend(Tool(tool.name, tool.description, tool.input_schema, tool.title) for tool in item[1])
116116

117117
return tools
118118

examples/clients/simple-task-client/mcp_simple_task_client/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ async def run(url: str) -> None:
2525
arguments={},
2626
ttl=60000,
2727
)
28-
task_id = result.task.taskId
28+
task_id = result.task.task_id
2929
print(f"Task created: {task_id}")
3030

3131
status = None
3232
# Poll until done (respects server's pollInterval hint)
3333
async for status in session.experimental.poll_task(task_id):
34-
print(f" Status: {status.status} - {status.statusMessage or ''}")
34+
print(f" Status: {status.status} - {status.status_message or ''}")
3535

3636
# Check final status
3737
if status and status.status != "completed":

examples/clients/simple-task-interactive-client/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async def sampling_callback(context, params) -> CreateMessageResult:
4949
```python
5050
# Call a tool as a task (returns immediately with task reference)
5151
result = await session.experimental.call_tool_as_task("tool_name", {"arg": "value"})
52-
task_id = result.task.taskId
52+
task_id = result.task.task_id
5353

5454
# Get result - this delivers elicitation/sampling requests and blocks until complete
5555
final = await session.experimental.get_task_result(task_id, CallToolResult)

examples/clients/simple-task-interactive-client/mcp_simple_task_interactive_client/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ async def run(url: str) -> None:
9191
print("Calling confirm_delete tool...")
9292

9393
elicit_task = await session.experimental.call_tool_as_task("confirm_delete", {"filename": "important.txt"})
94-
elicit_task_id = elicit_task.task.taskId
94+
elicit_task_id = elicit_task.task.task_id
9595
print(f"Task created: {elicit_task_id}")
9696

9797
# Poll until terminal, calling tasks/result on input_required
@@ -112,7 +112,7 @@ async def run(url: str) -> None:
112112
print("Calling write_haiku tool...")
113113

114114
sampling_task = await session.experimental.call_tool_as_task("write_haiku", {"topic": "autumn leaves"})
115-
sampling_task_id = sampling_task.task.taskId
115+
sampling_task_id = sampling_task.task.task_id
116116
print(f"Task created: {sampling_task_id}")
117117

118118
# Poll until terminal, calling tasks/result on input_required

examples/fastmcp/direct_call_tool_result_return.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ class EchoResponse(BaseModel):
2020
def echo(text: str) -> Annotated[CallToolResult, EchoResponse]:
2121
"""Echo the input text with structure and metadata"""
2222
return CallToolResult(
23-
content=[TextContent(type="text", text=text)], structuredContent={"text": text}, _meta={"some": "metadata"}
23+
content=[TextContent(type="text", text=text)], structured_content={"text": text}, _meta={"some": "metadata"}
2424
)

examples/fastmcp/icons_demo.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
icon_data = base64.standard_b64encode(icon_path.read_bytes()).decode()
1515
icon_data_uri = f"data:image/png;base64,{icon_data}"
1616

17-
icon_data = Icon(src=icon_data_uri, mimeType="image/png", sizes=["64x64"])
17+
icon_data = Icon(src=icon_data_uri, mime_type="image/png", sizes=["64x64"])
1818

1919
# Create server with icons in implementation
2020
mcp = FastMCP("Icons Demo Server", website_url="https://github.com/modelcontextprotocol/python-sdk", icons=[icon_data])
@@ -40,9 +40,9 @@ def prompt_with_icon(text: str) -> str:
4040

4141
@mcp.tool(
4242
icons=[
43-
Icon(src=icon_data_uri, mimeType="image/png", sizes=["16x16"]),
44-
Icon(src=icon_data_uri, mimeType="image/png", sizes=["32x32"]),
45-
Icon(src=icon_data_uri, mimeType="image/png", sizes=["64x64"]),
43+
Icon(src=icon_data_uri, mime_type="image/png", sizes=["16x16"]),
44+
Icon(src=icon_data_uri, mime_type="image/png", sizes=["32x32"]),
45+
Icon(src=icon_data_uri, mime_type="image/png", sizes=["64x64"]),
4646
]
4747
)
4848
def multi_icon_tool(action: str) -> str:

examples/fastmcp/weather_structured.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,32 +161,32 @@ async def test() -> None:
161161
# Test get_weather
162162
result = await client.call_tool("get_weather", {"city": "London"})
163163
print("\nWeather in London:")
164-
print(json.dumps(result.structuredContent, indent=2))
164+
print(json.dumps(result.structured_content, indent=2))
165165

166166
# Test get_weather_summary
167167
result = await client.call_tool("get_weather_summary", {"city": "Paris"})
168168
print("\nWeather summary for Paris:")
169-
print(json.dumps(result.structuredContent, indent=2))
169+
print(json.dumps(result.structured_content, indent=2))
170170

171171
# Test get_weather_metrics
172172
result = await client.call_tool("get_weather_metrics", {"cities": ["Tokyo", "Sydney", "Mumbai"]})
173173
print("\nWeather metrics:")
174-
print(json.dumps(result.structuredContent, indent=2))
174+
print(json.dumps(result.structured_content, indent=2))
175175

176176
# Test get_weather_alerts
177177
result = await client.call_tool("get_weather_alerts", {"region": "California"})
178178
print("\nWeather alerts for California:")
179-
print(json.dumps(result.structuredContent, indent=2))
179+
print(json.dumps(result.structured_content, indent=2))
180180

181181
# Test get_temperature
182182
result = await client.call_tool("get_temperature", {"city": "Berlin", "unit": "fahrenheit"})
183183
print("\nTemperature in Berlin:")
184-
print(json.dumps(result.structuredContent, indent=2))
184+
print(json.dumps(result.structured_content, indent=2))
185185

186186
# Test get_weather_stats
187187
result = await client.call_tool("get_weather_stats", {"city": "Seattle", "days": 30})
188188
print("\nWeather stats for Seattle (30 days):")
189-
print(json.dumps(result.structuredContent, indent=2))
189+
print(json.dumps(result.structured_content, indent=2))
190190

191191
# Also show the text content for comparison
192192
print("\nText content for last result:")
@@ -204,11 +204,11 @@ async def print_schemas() -> None:
204204
print(f"\nTool: {tool.name}")
205205
print(f"Description: {tool.description}")
206206
print("Input Schema:")
207-
print(json.dumps(tool.inputSchema, indent=2))
207+
print(json.dumps(tool.input_schema, indent=2))
208208

209-
if tool.outputSchema:
209+
if tool.output_schema:
210210
print("Output Schema:")
211-
print(json.dumps(tool.outputSchema, indent=2))
211+
print(json.dumps(tool.output_schema, indent=2))
212212
else:
213213
print("Output Schema: None (returns unstructured content)")
214214

examples/servers/everything-server/mcp_everything_server/server.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,13 @@ def test_simple_text() -> str:
9898
@mcp.tool()
9999
def test_image_content() -> list[ImageContent]:
100100
"""Tests image content response"""
101-
return [ImageContent(type="image", data=TEST_IMAGE_BASE64, mimeType="image/png")]
101+
return [ImageContent(type="image", data=TEST_IMAGE_BASE64, mime_type="image/png")]
102102

103103

104104
@mcp.tool()
105105
def test_audio_content() -> list[AudioContent]:
106106
"""Tests audio content response"""
107-
return [AudioContent(type="audio", data=TEST_AUDIO_BASE64, mimeType="audio/wav")]
107+
return [AudioContent(type="audio", data=TEST_AUDIO_BASE64, mime_type="audio/wav")]
108108

109109

110110
@mcp.tool()
@@ -115,7 +115,7 @@ def test_embedded_resource() -> list[EmbeddedResource]:
115115
type="resource",
116116
resource=TextResourceContents(
117117
uri="test://embedded-resource",
118-
mimeType="text/plain",
118+
mime_type="text/plain",
119119
text="This is an embedded resource content.",
120120
),
121121
)
@@ -127,12 +127,12 @@ def test_multiple_content_types() -> list[TextContent | ImageContent | EmbeddedR
127127
"""Tests response with multiple content types (text, image, resource)"""
128128
return [
129129
TextContent(type="text", text="Multiple content types test:"),
130-
ImageContent(type="image", data=TEST_IMAGE_BASE64, mimeType="image/png"),
130+
ImageContent(type="image", data=TEST_IMAGE_BASE64, mime_type="image/png"),
131131
EmbeddedResource(
132132
type="resource",
133133
resource=TextResourceContents(
134134
uri="test://mixed-content-resource",
135-
mimeType="application/json",
135+
mime_type="application/json",
136136
text='{"test": "data", "value": 123}',
137137
),
138138
),
@@ -164,7 +164,7 @@ async def test_tool_with_progress(ctx: Context[ServerSession, None]) -> str:
164164
await ctx.report_progress(progress=100, total=100, message="Completed step 100 of 100")
165165

166166
# Return progress token as string
167-
progress_token = ctx.request_context.meta.progressToken if ctx.request_context and ctx.request_context.meta else 0
167+
progress_token = ctx.request_context.meta.progress_token if ctx.request_context and ctx.request_context.meta else 0
168168
return str(progress_token)
169169

170170

@@ -373,7 +373,7 @@ def test_prompt_with_embedded_resource(resourceUri: str) -> list[UserMessage]:
373373
type="resource",
374374
resource=TextResourceContents(
375375
uri=resourceUri,
376-
mimeType="text/plain",
376+
mime_type="text/plain",
377377
text="Embedded resource content for testing.",
378378
),
379379
),
@@ -386,7 +386,7 @@ def test_prompt_with_embedded_resource(resourceUri: str) -> list[UserMessage]:
386386
def test_prompt_with_image() -> list[UserMessage]:
387387
"""A prompt that includes image content"""
388388
return [
389-
UserMessage(role="user", content=ImageContent(type="image", data=TEST_IMAGE_BASE64, mimeType="image/png")),
389+
UserMessage(role="user", content=ImageContent(type="image", data=TEST_IMAGE_BASE64, mime_type="image/png")),
390390
UserMessage(role="user", content=TextContent(type="text", text="Please analyze the image above.")),
391391
]
392392

@@ -427,7 +427,7 @@ async def _handle_completion(
427427
"""Handle completion requests"""
428428
# Basic completion support - returns empty array for conformance
429429
# Real implementations would provide contextual suggestions
430-
return Completion(values=[], total=0, hasMore=False)
430+
return Completion(values=[], total=0, has_more=False)
431431

432432

433433
# CLI

0 commit comments

Comments
 (0)