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:
- Device login - call
loginWithDevice, show the user the URL, pollcheckDeviceLoginStatus, then pass the returnedsessionKeyon every later call. - Create the account from the agent -
createAccountthenverifyAccountwith the emailed code. The principal's contact becomes the ICANN registrant. - 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.