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
13 changed files with 1063 additions and 1057 deletions

View file

@ -28,8 +28,8 @@ async def run():
# List available resource templates
templates = await session.list_resource_templates()
print("Available resource templates:")
for template in templates.resourceTemplates:
print(f" - {template.uriTemplate}")
for template in templates.resource_templates:
print(f" - {template.uri_template}")
# List available prompts
prompts = await session.list_prompts()
@ -38,20 +38,20 @@ async def run():
print(f" - {prompt.name}")
# Complete resource template arguments
if templates.resourceTemplates:
template = templates.resourceTemplates[0]
print(f"\nCompleting arguments for resource template: {template.uriTemplate}")
if templates.resource_templates:
template = templates.resource_templates[0]
print(f"\nCompleting arguments for resource template: {template.uri_template}")
# Complete without context
result = await session.complete(
ref=ResourceTemplateReference(type="ref/resource", uri=template.uriTemplate),
ref=ResourceTemplateReference(type="ref/resource", uri=template.uri_template),
argument={"name": "owner", "value": "model"},
)
print(f"Completions for 'owner' starting with 'model': {result.completion.values}")
# Complete with context - repo suggestions based on owner
result = await session.complete(
ref=ResourceTemplateReference(type="ref/resource", uri=template.uriTemplate),
ref=ResourceTemplateReference(type="ref/resource", uri=template.uri_template),
argument={"name": "repo", "value": ""},
context_arguments={"owner": "modelcontextprotocol"},
)

View file

@ -39,7 +39,7 @@ async def display_resources(session: ClientSession):
print(f"Resource: {display_name} ({resource.uri})")
templates_response = await session.list_resource_templates()
for template in templates_response.resourceTemplates:
for template in templates_response.resource_templates:
display_name = get_display_name(template)
print(f"Resource Template: {display_name}")

View file

@ -29,8 +29,8 @@ async def list_all_resources() -> None:
print(f"Fetched {len(result.resources)} resources")
# Check if there are more pages
if result.nextCursor:
cursor = result.nextCursor
if result.next_cursor:
cursor = result.next_cursor
else:
break

View file

@ -22,9 +22,9 @@ async def parse_tool_results():
# Example 2: Parsing structured content from JSON tools
result = await session.call_tool("get_user", {"id": "123"})
if hasattr(result, "structuredContent") and result.structuredContent:
if hasattr(result, "structured_content") and result.structured_content:
# Access structured data directly
user_data = result.structuredContent
user_data = result.structured_content
print(f"User: {user_data.get('name')}, Age: {user_data.get('age')}")
# Example 3: Parsing embedded resources
@ -41,11 +41,11 @@ async def parse_tool_results():
result = await session.call_tool("generate_chart", {"data": [1, 2, 3]})
for content in result.content:
if isinstance(content, types.ImageContent):
print(f"Image ({content.mimeType}): {len(content.data)} bytes")
print(f"Image ({content.mime_type}): {len(content.data)} bytes")
# Example 5: Handling errors
result = await session.call_tool("failing_tool", {})
if result.isError:
if result.is_error:
print("Tool execution failed!")
for content in result.content:
if isinstance(content, types.TextContent):

View file

@ -32,7 +32,7 @@ async def handle_sampling_message(
text="Hello, world! from model",
),
model="gpt-3.5-turbo",
stopReason="endTurn",
stop_reason="endTurn",
)
@ -70,7 +70,7 @@ async def run():
result_unstructured = result.content[0]
if isinstance(result_unstructured, types.TextContent):
print(f"Tool result: {result_unstructured.text}")
result_structured = result.structuredContent
result_structured = result.structured_content
print(f"Structured tool result: {result_structured}")

View file

@ -154,7 +154,7 @@ async def call_tool_with_error_handling(
result = await session.call_tool(tool_name, arguments)
# Check if the tool returned an error in the result
if result.isError:
if result.is_error:
print(f"Tool returned error: {result.content}")
return None

View file

@ -36,7 +36,7 @@ async def handle_completion(
languages = ["python", "javascript", "typescript", "go", "rust"]
return Completion(
values=[lang for lang in languages if lang.startswith(argument.value)],
hasMore=False,
has_more=False,
)
# Complete repository names for GitHub resources
@ -44,6 +44,6 @@ async def handle_completion(
if ref.uri == "github://repos/{owner}/{repo}" and argument.name == "repo":
if context and context.arguments and context.arguments.get("owner") == "modelcontextprotocol":
repos = ["python-sdk", "typescript-sdk", "specification"]
return Completion(values=repos, hasMore=False)
return Completion(values=repos, has_more=False)
return None

View file

@ -31,7 +31,7 @@ def validated_tool() -> Annotated[CallToolResult, ValidationModel]:
"""Return CallToolResult with structured output validation."""
return CallToolResult(
content=[TextContent(type="text", text="Validated response")],
structuredContent={"status": "success", "data": {"result": 42}},
structured_content={"status": "success", "data": {"result": 42}},
_meta={"internal": "metadata"},
)

View file

@ -93,7 +93,7 @@ async def connect_service(service_name: str, ctx: Context[ServerSession, None])
mode="url",
message=f"Authorization required to connect to {service_name}",
url=f"https://{service_name}.example.com/oauth/authorize?elicit={elicitation_id}",
elicitationId=elicitation_id,
elicitation_id=elicitation_id,
)
]
)

View file

@ -21,7 +21,7 @@ async def list_tools() -> list[types.Tool]:
types.Tool(
name="advanced_tool",
description="Tool with full control including _meta field",
inputSchema={
input_schema={
"type": "object",
"properties": {"message": {"type": "string"}},
"required": ["message"],
@ -37,7 +37,7 @@ async def handle_call_tool(name: str, arguments: dict[str, Any]) -> types.CallTo
message = str(arguments.get("message", ""))
return types.CallToolResult(
content=[types.TextContent(type="text", text=f"Processed: {message}")],
structuredContent={"result": "success", "message": message},
structured_content={"result": "success", "message": message},
_meta={"hidden": "data for client applications only"},
)

View file

@ -56,7 +56,7 @@ async def handle_list_tools() -> list[types.Tool]:
types.Tool(
name="query_db",
description="Query the database",
inputSchema={
input_schema={
"type": "object",
"properties": {"query": {"type": "string", "description": "SQL query to execute"}},
"required": ["query"],

View file

@ -21,12 +21,12 @@ async def list_tools() -> list[types.Tool]:
types.Tool(
name="get_weather",
description="Get current weather for a city",
inputSchema={
input_schema={
"type": "object",
"properties": {"city": {"type": "string", "description": "City name"}},
"required": ["city"],
},
outputSchema={
output_schema={
"type": "object",
"properties": {
"temperature": {"type": "number", "description": "Temperature in Celsius"},

View file

@ -33,4 +33,4 @@ async def list_resources_paginated(request: types.ListResourcesRequest) -> types
# Determine next cursor
next_cursor = str(end) if end < len(ITEMS) else None
return types.ListResourcesResult(resources=page_items, nextCursor=next_cursor)
return types.ListResourcesResult(resources=page_items, next_cursor=next_cursor)