{"service":"ipnops","description":"The agent-native search engine: hybrid retrieval over an own crawled index, serving typed, cited, grounded results for AI agents — answers as structured objects (claims + evidence + confidence), not link lists.","version":"1","auth":{"scheme":"bearer","required":true,"header":"Authorization: Bearer <key>","alternative_header":"x-api-key: <key>","note":"A public API key is required for agent routes. Contact the operator to obtain one."},"mcp":{"endpoint":"/mcp","transport":"streamable-http"},"tools":[{"name":"search","method":"POST","path":"/search","summary":"Hybrid retrieval (BM25 + dense) → RRF → BGE rerank over Ipnops' own crawled index.","returns":"Typed cited highlights: {text, score, sourceUrl, sourceTitle, fetchedAt}[]."},{"name":"answer","method":"POST","path":"/answer","summary":"Search → tiered grounded synthesis → ONE cited answer. SSE via stream:true or Accept: text/event-stream.","returns":"Grounded object: {answer, citations[], claims[] (with entailment verdicts), confidence, sufficiency, conflicts, freshness}."},{"name":"research","method":"POST","path":"/research","summary":"Async deep research (gap-driven answer→assess→crawl loop). Returns a run_id immediately; poll or stream.","returns":"202 {run_id, status}. GET /research/:id to poll, GET /research/:id/events for SSE, POST /research/:id/cancel."},{"name":"monitor","method":"POST","path":"/monitor","summary":"Register a standing watch over a query; webhook fires only when the grounded facts change.","returns":"201 {monitor_id}. GET /monitor to list, GET/DELETE /monitor/:id."},{"name":"mcp","method":"POST","path":"/mcp","summary":"Model Context Protocol server (Streamable HTTP, stateless). Exposes the same tools with typed outputSchemas.","returns":"MCP tool results with structuredContent (search/answer/extract/research/research_status/monitor)."}],"response_shape":"Every answer surface returns a typed grounded object (Answer / Claims / Evidence / Confidence), never a bare list of URLs.","probes":{"health":"/healthz","ready":"/readyz"}}