#!/usr/bin/env python3 """Diamond native MCP quickstart. Free discovery and an unpaid quote; never signs or pays.""" import asyncio import importlib.metadata import json import time from pathlib import Path from mcp import Client URL = "https://diamond.tail1b5f86.ts.net/api/mcp" async def inspect(): started = time.monotonic() async with Client(URL) as client: names = {tool.name for tool in (await client.list_tools()).tools} required = {"search", "recommend", "analyze", "verify", "score", "check_outputs", "plan_cpfp"} assert required <= names, "Expected Diamond tools missing" search = await client.call_tool("search", {"query": "outpoints"}) assert not search.is_error assert any(r["id"] == "check_outputs" for r in search.structured_content["results"]) recommendation = await client.call_tool("recommend", {"task": "outputs", "max_usdc": 0.02}) assert not recommendation.is_error assert recommendation.structured_content["mcp_tool"] == "check_outputs" quote = await client.call_tool("analyze", {"plan": "1000:140,220,350"}) # x402 MCP represents an unpaid quote as a tool error with structured requirements. assert quote.is_error pr = quote.structured_content assert pr["x402Version"] == 2 options = [x for x in pr["accepts"] if x["network"] == "eip155:8453" and x["asset"].lower() == "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"] assert options and options[0]["amount"] == "10000" return {"sdk": "mcp", "sdk_version": importlib.metadata.version("mcp"), "protocol_version": client.protocol_version, "tool_count": len(names), "free_search": "passed", "free_recommend": "passed", "unpaid_analyze_quote": "0.01 USDC on Base", "payment_sent": False, "elapsed_seconds": round(time.monotonic() - started, 3)} async def main(): result = await asyncio.wait_for(inspect(), timeout=45) print(json.dumps(result, indent=2)) if __name__ == "__main__": asyncio.run(main())