"""13: Introspection: init metadata, context usage, MCP status, server info, dynamic model switch."""
import asyncio
from claude_agent_sdk import AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, ResultMessage, SystemMessage
from demo_util import PROJECT
async def main():
options = ClaudeAgentOptions(
cwd=PROJECT,
allowed_tools=["Read"],
mcp_servers={"claude-code-docs": {"type": "http", "url": "https://code.claude.com/docs/mcp"}},
max_turns=2,
)
async with ClaudeSDKClient(options) as client:
await client.query("Reply with exactly: ready")
model_turn_1 = None
async for message in client.receive_response():
if isinstance(message, SystemMessage) and message.subtype == "init":
d = message.data
print("init.claude_code_version:", d.get("claude_code_version"))
print("init.model:", d.get("model"))
print("init.permissionMode:", d.get("permissionMode"))
print("init.tools:", d.get("tools"))
print("init.slash_commands:", d.get("slash_commands"))
print("init.skills:", d.get("skills"))
print("init.mcp_servers:", d.get("mcp_servers"))
if isinstance(message, AssistantMessage):
model_turn_1 = message.model
usage = await client.get_context_usage()
print(f"\nget_context_usage: {usage['totalTokens']}/{usage['maxTokens']} tokens "
f"({usage['percentage']:.1f}%), model={usage['model']}, autocompact={usage['isAutoCompactEnabled']}")
print(" categories:", [(c['name'], c['tokens']) for c in usage['categories']][:8])
status = await client.get_mcp_status()
for s in status["mcpServers"]:
print(f"get_mcp_status: {s['name']} -> {s['status']} tools={len(s.get('tools') or [])}")
info = await client.get_server_info()
print("get_server_info keys:", sorted(info.keys()) if info else None)
await client.set_model("claude-haiku-5-5")
await client.query("Reply with exactly: done")
model_turn_2 = None
async for message in client.receive_response():
if isinstance(message, AssistantMessage):
model_turn_2 = message.model
print(f"\nTurn 1 model: {model_turn_1}\nTurn 2 model (after set_model): {model_turn_2}")
asyncio.run(main())
54 lines · Back to the folder