{"slug": "anip-open-protocol-so-websites-can-talk-directly-to-ai-agents", "title": "ANIP – open protocol so websites can talk directly to AI agents", "summary": "A new open protocol called ANIP (Agent-Native Interaction Protocol) enables websites to expose machine-readable interfaces for AI agents, allowing agents to discover and interact with site capabilities without scraping or custom integrations. The protocol uses a single YAML file at a well-known URL to describe endpoints, intents, and schemas, and is designed to be backwards compatible with existing APIs.", "body_md": "**An open standard for websites to speak directly to AI agents.**\n\nThe web was designed for humans. Buttons, menus, forms — all built so a person with eyes and a mouse can navigate them.\n\nAI agents can use these interfaces, but it's inefficient. An agent trying to book a flight or send an email has to scrape HTML, guess at form fields, and handle visual layouts that carry no meaning to a machine.\n\n**ANIP is the missing layer.**\n\nAny website can add a single file at `/.well-known/anip.yaml`\n\nthat describes, in structured machine-readable form, exactly what the site can do and how to call it. AI agents can discover this file, understand the site's capabilities, and act — without scraping, without custom integrations, without reading documentation.\n\nIt is to AI agents what HTML is to web browsers: a universal format that lets any agent understand any site.\n\n```\n# https://yoursite.com/.well-known/anip.yaml\n\nanip: \"0.1\"\n\nsite:\n  name: Your Site\n  description: A brief description of what your site does.\n  url: https://yoursite.com\n\ncapabilities:\n  - id: search-products\n    name: Search Products\n    description: Search the product catalog by keyword or category.\n    intents:\n      - search for products\n      - find items in the store\n      - browse product catalog\n    endpoint:\n      url: https://yoursite.com/api/products/search\n      method: GET\n      type: rest\n    auth:\n      type: none\n    input:\n      type: object\n      properties:\n        q:\n          type: string\n          description: Search query\n        limit:\n          type: integer\n          description: Maximum results to return\n    output:\n      type: object\n      properties:\n        products:\n          type: array\n          description: Matching products\n        total:\n          type: integer\n          description: Total result count\n    tags: [ecommerce, search, free, no-auth]\npython\nimport httpx, yaml\n\n# Fetch the ANIP document\nresp = httpx.get(\"https://yoursite.com/.well-known/anip.yaml\")\ndoc = yaml.safe_load(resp.text)\n\n# Find a capability matching the agent's goal\nfor cap in doc[\"capabilities\"]:\n    if any(\"search\" in intent for intent in cap[\"intents\"]):\n        # Call it — the schema tells the agent exactly what to send\n        result = httpx.get(cap[\"endpoint\"][\"url\"], params={\"q\": \"laptop\", \"limit\": 5})\n        print(result.json())\n        break\n```\n\nThat's it. No custom SDK. No API key hunt. No documentation reading.\n\nThe full specification lives in [ spec/ANIP-1.md](/shivanshmah14/anip/blob/main/spec/ANIP-1.md).\n\n**Key design choices:**\n\n**One well-known URL.** Always`/.well-known/anip.yaml`\n\n. Agents know where to look.**YAML.** Human-readable. Any developer can write and review it.**Intent-based discovery.** Capabilities are described by what agents*want to do*, not by endpoint paths.**Protocol-agnostic.** Works with REST, MCP, GraphQL, or gRPC.**Backwards compatible.** Adding ANIP to your site doesn't change your existing API at all.**No central authority.** Any site publishes its own document. No registration required.\n\n```\nanip/\n├── spec/\n│   ├── ANIP-1.md              # Core protocol specification\n│   ├── ANIP-2.md              # Registry protocol (optional, for discoverability)\n│   └── anip.schema.json       # JSON Schema for validation\n│\n├── reference-implementations/\n│   ├── python/                # Python library (pip install anip)\n│   ├── typescript/            # TypeScript library (npm install anip)\n│   └── go/                    # Go library (go get github.com/anip-protocol/anip-go)\n│\n├── tools/\n│   └── cli/anip.py            # CLI: validate, check, fetch, scaffold\n│\n├── examples/\n│   ├── website-integration/   # How to add ANIP to your site\n│   ├── agent-client/          # How agents use ANIP\n│   └── mcp-bridge/            # Using ANIP with MCP servers\n│\n└── rfcs/                      # Proposals for spec changes\n```\n\n**Step 1:** Create `/.well-known/anip.yaml`\n\n(or run `python tools/cli/anip.py scaffold`\n\n)\n\n**Step 2:** Serve it. Most web servers do this automatically. For nginx:\n\n```\nlocation /.well-known/ {\n    alias /var/www/well-known/;\n    add_header Access-Control-Allow-Origin *;\n}\n```\n\n**Step 3:** Validate it:\n\n```\npip install pyyaml\npython tools/cli/anip.py validate ./anip.yaml\n```\n\n**Step 4:** Check it's live:\n\n```\npython tools/cli/anip.py check yourdomain.com\n```\n\nDone. Your site now speaks to AI agents.\n\n```\npip install pyyaml httpx\npython\nimport asyncio\nimport httpx\nimport yaml\n\nasync def discover_and_call(site: str, goal: str):\n    async with httpx.AsyncClient() as client:\n        # Discover\n        resp = await client.get(f\"https://{site}/.well-known/anip.yaml\")\n        doc = yaml.safe_load(resp.text)\n\n        # Search by intent\n        for cap in doc[\"capabilities\"]:\n            if any(goal.lower() in intent.lower() for intent in cap[\"intents\"]):\n                print(f\"Found: {cap['name']} at {cap['endpoint']['url']}\")\n                # Call it using the schema\n                return cap\n\nasyncio.run(discover_and_call(\"open-meteo.com\", \"weather forecast\"))\n```\n\nOr use the Python reference implementation:\n\n```\npip install anip\npython\nfrom anip import fetch_sync\n\ndoc = fetch_sync(\"open-meteo.com\")\nresults = doc.search(\"weather forecast\")\ncap = results[0]\nprint(cap.endpoint.url)   # https://api.open-meteo.com/v1/forecast\nprint(cap.auth.type)      # none\nnpm install anip yaml\njs\nimport { fetch } from \"anip\";\n\nconst doc = await fetch(\"open-meteo.com\");\nconst results = await doc.search(\"weather forecast\");\nconst cap = results[0].capability;\n\nconsole.log(cap.endpoint.url);  // https://api.open-meteo.com/v1/forecast\nconsole.log(cap.auth.type);     // none\ngo get github.com/anip-protocol/anip-go\npython\nimport anip \"github.com/anip-protocol/anip-go\"\n\ndoc, err := anip.Fetch(context.Background(), \"open-meteo.com\")\nresults := doc.Search(\"weather forecast\")\ncap := results[0].Capability\n\nfmt.Println(cap.Endpoint.URL)  // https://api.open-meteo.com/v1/forecast\npip install pyyaml httpx\n\n# Generate a starter anip.yaml for your site\npython tools/cli/anip.py scaffold\n\n# Validate a local file\npython tools/cli/anip.py validate ./anip.yaml\n\n# Check if a live site has ANIP support\npython tools/cli/anip.py check open-meteo.com\n\n# Fetch and display a live ANIP document\npython tools/cli/anip.py fetch open-meteo.com\n```\n\n| Standard | Relationship |\n|---|---|\nMCP |\nComplementary. ANIP is the discovery layer; MCP is a transport. Set `endpoint.type: mcp` in your ANIP document to point to an MCP server. |\nOpenAPI |\nComplementary. ANIP is simpler and intent-focused. An ANIP capability can link to a full OpenAPI spec in its `docs` field. |\nrobots.txt |\nAnalogous pattern. `robots.txt` says what crawlers can't do. ANIP says what agents can do. |\nsitemap.xml |\nAnalogous purpose. Sitemaps are for search engines. ANIP is for agents. |\nJSON-LD |\nDifferent goal. JSON-LD describes entities. ANIP describes actions. |\n\nANIP is a community standard. Contributions to the spec, implementations, and documentation are welcome.\n\nSee [CONTRIBUTING.md](/shivanshmah14/anip/blob/main/CONTRIBUTING.md) for the process.\n\n**What we need most right now:**\n\n- Rust reference implementation\n- Java / Kotlin reference implementation\n- Real websites adding ANIP support (open a PR linking yours)\n- Feedback on the spec from real implementors\n\n**What we don't need yet:**\n\n- A central registry\n- Trust scores\n- Payment integrations\n- Governance structures\n\nKeep it simple. The protocol is the product.\n\nBecause infrastructure that everyone depends on should belong to everyone.\n\nTCP/IP is not owned by a company. HTTP is not owned by a company. DNS is not owned by a company. These protocols work because they are open, stable, and governed by the community.\n\nANIP should be the same: the foundational layer that any company, any startup, and any developer can build on — without asking permission, without paying fees, without depending on a single vendor.\n\nIf ANIP succeeds, the companies that build *on top of it* will generate the value. That's the right outcome.\n\nThe ANIP specification (`spec/`\n\n) is released under [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) — public domain. Use it for anything.\n\nReference implementations and tools are released under the [MIT License](/shivanshmah14/anip/blob/main/LICENSE).\n\nANIP is currently at **v0.1 — Draft**.\n\nThe spec is stable enough to implement and experiment with, but may change based on real-world feedback before v1.0. We will not make breaking changes without a clear migration path and advance notice.\n\n**v1.0 will be declared when:**\n\n- At least 5 production websites serve a valid ANIP document\n- At least 3 independent implementations exist in different languages\n- The spec has received at least 60 days of open community review\n\n*Built by developers, for developers. Forever open.*", "url": "https://wpnews.pro/news/anip-open-protocol-so-websites-can-talk-directly-to-ai-agents", "canonical_source": "https://github.com/shivanshmah14/anip", "published_at": "2026-06-16 08:09:01+00:00", "updated_at": "2026-06-16 08:18:39.587148+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["ANIP", "YAML", "REST", "GraphQL", "gRPC", "MCP"], "alternates": {"html": "https://wpnews.pro/news/anip-open-protocol-so-websites-can-talk-directly-to-ai-agents", "markdown": "https://wpnews.pro/news/anip-open-protocol-so-websites-can-talk-directly-to-ai-agents.md", "text": "https://wpnews.pro/news/anip-open-protocol-so-websites-can-talk-directly-to-ai-agents.txt", "jsonld": "https://wpnews.pro/news/anip-open-protocol-so-websites-can-talk-directly-to-ai-agents.jsonld"}}