{
 "summary": "IDs are permanent strings '<kind>:<key>'. Use resolve_tool (MCP) or GET https://api.toolwork.org/v1/resolve?url=|repo=|package=|name= to turn a URL, repo, package or registry name into an ID.",
 "patterns": [
  {
   "pattern": "mcp:<registry name>",
   "example": "mcp:com.stripe/mcp",
   "source": "Official MCP Registry server name (reverse-DNS namespace / server)"
  },
  {
   "pattern": "mcp:docker/<catalog key>",
   "example": "mcp:docker/globalping",
   "source": "Docker MCP Catalog key (merged into the registry ID when both list the same repo)"
  },
  {
   "pattern": "api:<apis.guru key>",
   "example": "api:stripe.com, api:twilio.com:api",
   "source": "APIs.guru provider[:service] key"
  },
  {
   "pattern": "api:<vendor domain>[:<product>]",
   "example": "api:cloudflare.com:workers",
   "source": "Toolwork curated entry from the vendor's own docs"
  },
  {
   "pattern": "cli:<vendor domain>:<tool> | lib:<package> | app:<vendor domain>",
   "example": "cli:cloudflare.com:wrangler, lib:puppeteer, app:cursor.com",
   "source": "Toolwork curated non-HTTP tools"
  },
  {
   "pattern": "mcp:<vendor domain>",
   "example": "mcp:vercel.com",
   "source": "Toolwork curated vendor-official MCP server not (yet) in the Official MCP Registry"
  },
  {
   "pattern": "stub:<host>[/<path>]",
   "example": "stub:example.com/my-tool",
   "source": "proposed inline by a contributor via share_experience; unverified, pending moderation, never ranked"
  }
 ],
 "stability": "IDs never change once issued; merged entries leave a 'merged' change event pointing to the surviving ID."
}