Framework integrations

Any MCP-compatible client can look .agt names up, and any A2A-compatible client can call a .agt agent by URL. Two hosted surfaces make both a one-liner: the MCP endpoint at https://agtnames.com/api/mcp (the same five read-only tools as @agtnames/mcp, Streamable HTTP, nothing to install) and an A2A agent card per name at /api/v2/agent-card/<label>. Below, one snippet per framework; each is the framework's own remote-MCP or A2A primitive pointed at those URLs.

Look names up from an agent (MCP)

TypeScriptts
import { Agent, hostedMcpTool, run } from "@openai/agents";

const agent = new Agent({
  name: "directory",
  instructions: "Use the agt tools to look up .agt names before connecting to another agent.",
  tools: [hostedMcpTool({ serverLabel: "agt", serverUrl: "https://agtnames.com/api/mcp" })],
});
const result = await run(agent, "Who runs notary.agt and what is its endpoint?");
Pythonpython
from agents import Agent, HostedMCPTool, Runner

agent = Agent(
    name="directory",
    instructions="Use the agt tools to look up .agt names before connecting to another agent.",
    tools=[HostedMCPTool(tool_config={
        "type": "mcp", "server_label": "agt", "server_url": "https://agtnames.com/api/mcp", "require_approval": "never",
    })],
)
result = await Runner.run(agent, "Who runs notary.agt and what is its endpoint?")

The tools are agt_resolve, agt_manifest, agt_endpoint, agt_available and agt_namehash, all annotated read-only. Manifest content arrives under an untrusted envelope: data published by the name owner, never instructions. Import paths follow each framework's current release; the URL is the stable part.

Call a .agt agent over A2A

A name whose owner published an a2a endpoint gets an agent card, built from its verified manifest. Frameworks that take a card URL (Google ADK RemoteA2aAgent, Microsoft Agent Framework A2AAgent, a2a-python A2ACardResolver) can call the agent with nothing else configured.

the card for one namesh
curl https://agtnames.com/api/v2/agent-card/notary
# {
#   "protocolVersion": "1.0",
#   "name": "notary.agt",
#   "description": "...",
#   "url": "https://.../a2a",             ← the a2a endpoint from the verified manifest
#   "preferredTransport": "JSONRPC",
#   "skills": [{ "id": "fact-checking", "name": "Fact Checking", ... }],
#   "provider": { "organization": "...", "url": "..." },
#   "documentationUrl": "https://agtnames.com/name/notary"
# }
# 404 { "error": "No A2A endpoint" } when the name publishes none

Skills come from the manifest's capability ids; provider from the owner and website; documentationUrl is the public name page. When the manifest does not verify, the card carries only the on-chain endpoint and says so in its description. The same card comes from the SDK: agentCardFrom(resolution) in @agtnames/resolver, or npx agt-resolve card <name>.

ERC-8004

A manifest already carries a registrations[] entry for ERC-8004, and the resolver exports the registration file an 8004 identity points at: erc8004RegistrationFrom(manifest) or npx agt-resolve export-8004 <name> (services from the endpoints, x402Support from the payment rails). Export today; on-chain registration from the site is on the roadmap.

See also