Name.al · Albanian Domain Registration

Help Center / api

Use OSIR with LangChain, CrewAI, AutoGen and other agent frameworks

OSIR speaks the Model Context Protocol, so any framework with an MCP client can use it as a tool source. You point the client at one URL and your agent gains 105 domain, DNS, VPS, email and hosting tools.

The part that matters for agents: searching costs nothing and needs no account. Availability, pricing, suggestions and the full catalog are anonymous. Your agent can research names on the first run, with no API key, no signup and no configuration. Credentials only enter the picture when something is actually bought.

The one thing you need

https://be.osir.com/mcp/http

Transport is Streamable HTTP. There is nothing to install and no key to provision.

What works without an account

Tool What it does
checkDomainAvailability One domain, with price
checkKeywordAvailability One keyword across many extensions
generateDomainSuggestions Brandable name ideas
bulkDomainSuggestions Suggestions in batch
addPrefixToDomain / addSuffixToDomain Variations on a stem
spinDomainWords / suggestAlternatives Word play and near-misses
getDomainPricing / getDomainExtensions Prices and the full TLD catalog
getHostingBundle Hosting options for a specific name
validateDomainName Syntax and IDN checks before you spend a lookup

60 of the 105 tools are read-only and carry readOnlyHint, so a framework that inspects annotations can let an agent roam the safe ones freely.

Python: LangChain

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

client = MultiServerMCPClient({
    "osir": {
        "transport": "streamable_http",
        "url": "https://be.osir.com/mcp/http",
    }
})

tools = await client.get_tools()
agent = create_react_agent("anthropic:claude-sonnet-5", tools)

result = await agent.ainvoke({
    "messages": [{"role": "user",
                  "content": "Find three available .dev domains for a CI tool called Fernweh"}]
})

Python: CrewAI

from crewai import Agent, Crew, Task
from crewai_tools import MCPServerAdapter

server = {"url": "https://be.osir.com/mcp/http", "transport": "streamable-http"}

with MCPServerAdapter(server) as tools:
    researcher = Agent(
        role="Domain researcher",
        goal="Find short, available domains that match the brand",
        backstory="You check availability and price before recommending anything.",
        tools=tools,
    )
    crew = Crew(agents=[researcher], tasks=[
        Task(description="Suggest 5 available domains for a coffee subscription brand",
             expected_output="A table of domain, price and extension",
             agent=researcher)
    ])
    print(crew.kickoff())

Python: AutoGen

from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools
from autogen_agentchat.agents import AssistantAgent

params = StreamableHttpServerParams(url="https://be.osir.com/mcp/http")
tools = await mcp_server_tools(params)

agent = AssistantAgent("domain_scout", model_client=model_client, tools=tools)

TypeScript: the MCP SDK directly

import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"

const client = new Client({ name: "my-agent", version: "1.0.0" })
await client.connect(new StreamableHTTPClientTransport(
  new URL("https://be.osir.com/mcp/http")
))

const res = await client.callTool({
  name: "checkDomainAvailability",
  arguments: { domain: "fernweh.dev" }
})

No MCP client? Use plain HTTP

The same lookups are public REST endpoints, so anything that can make a GET request can use them:

curl https://be.osir.com/v1/public/catalog/domains/fernweh.dev/availability
{
  "domain": "fernweh.dev",
  "available": true,
  "price": 1039,
  "icannFee": 20,
  "registrarFee": 30,
  "totalPrice": 1089
}

Prices are in cents, and totalPrice is what is actually charged: the base price plus the ICANN fee and payment processing. Quote totalPrice to a user, never price alone.

Going from searching to registering

Registration needs an account and funds. There are three ways to get one, and none of them requires a human to open a browser mid-task:

  1. Device login - call loginWithDevice, show the user the URL, poll checkDeviceLoginStatus, then pass the returned sessionKey on every later call.
  2. Create the account from the agent - createAccount then verifyAccount with the emailed code. The principal's contact becomes the ICANN registrant.
  3. OAuth - anonymous Dynamic Client Registration with PKCE, for agents that already manage tokens.

The purchase gate

Anything that spends money or destroys data is deliberately two-step. The tool returns an actionId with an itemised summary; nothing happens until you call executeConfirmedAction. Your agent cannot spend money by accident, which is what makes it safe to give an autonomous agent a registrar in the first place. Show the summary to your user and let them approve it.

Rate limits and etiquette

Anonymous lookups are limited to 150 requests per minute per IP; authenticated callers get 500 per minute per account. Budgets refill continuously, so a burst recovers within seconds, and every response reports what is left in x-ratelimit-remaining. If you are checking hundreds of names, use checkKeywordAvailability (one keyword across many extensions in a single call) or bulkDomainSuggestions rather than looping checkDomainAvailability. It is faster for you and kinder to the registries behind us.

Also available

  • Hosted connectors - see Connect OSIR to Claude for the no-code path.
  • CLI - a single binary with 76 commands, for agents that prefer a shell. See the developer docs.
  • A2A - 9 specialist agents with 89 skills over JSON-RPC, for agent-to-agent pipelines. See AI integration.