{
  "markdown": "# Vascue Public Knowledge Search (MCP server)\n\n[![io.vascue/public-knowledge-search on the MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.vascue%2Fpublic--knowledge--search-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.vascue)\n[![CI](https://github.com/vascue-io/public-knowledge-search/actions/workflows/ci.yml/badge.svg)](https://github.com/vascue-io/public-knowledge-search/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![public-knowledge-search MCP server](https://glama.ai/mcp/servers/vascue-io/public-knowledge-search/badges/score.svg)](https://glama.ai/mcp/servers/vascue-io/public-knowledge-search)\n\n[![public-knowledge-search MCP server](https://glama.ai/mcp/servers/vascue-io/public-knowledge-search/badges/card.svg)](https://glama.ai/mcp/servers/vascue-io/public-knowledge-search)\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that searches [Vascue](https://www.vascue.io)'s public documentation: healthcare operations, the AI front desk for clinics, provider-side insurance claims automation, Cliniko integration, security, case studies and pricing.\n\nIt comes in two equivalent forms:\n\n- **Hosted (always current):** `https://www.vascue.io/mcp/search` - streamable HTTP, no authentication.\n- **Self-contained (this repo):** `python server.py` - local BM25 search over a bundled snapshot of the public pages (`content/`, refreshed per release with `scripts/fetch_content.py`). No network calls at runtime, so it also works offline and is what directory-built releases run.\n\n- **Endpoint:** `https://www.vascue.io/mcp/search` (streamable HTTP, no authentication)\n- **Server card:** https://www.vascue.io/.well-known/mcp/server-card.json\n- **Registry name:** `io.vascue/public-knowledge-search`\n- **Operated by:** Vascue Limited (ISO 27001 certified)\n\n> **Public content only.** This server indexes public product and educational pages. Never send patient information, claim documents, clinic credentials or booking requests to it. Agent-based clinic booking is a separate research pilot, not a public API.\n\n## Connect\n\nAny MCP client that speaks streamable HTTP can connect to the endpoint directly.\n\n**Claude Code**\n\n```bash\nclaude mcp add --transport http vascue-search https://www.vascue.io/mcp/search\n```\n\n**Cursor / Claude Desktop / other stdio-only clients** (via [`mcp-remote`](https://www.npmjs.com/package/mcp-remote))\n\n```json\n{\n  \"mcpServers\": {\n    \"vascue-search\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://www.vascue.io/mcp/search\"]\n    }\n  }\n}\n```\n\n**Self-contained local server** (stdio; bundled snapshot, no network)\n\n```bash\npip install -r requirements.txt\npython server.py\n```\n\n**Docker** (builds the self-contained server)\n\n```bash\ndocker build -t vascue-public-knowledge-search .\ndocker run -i --rm vascue-public-knowledge-search\n```\n\n## Tools\n\nOne tool, no authentication, read-only.\n\n### `search`\n\nHybrid (keyword + vector) search over Vascue's public pages. Returns matching excerpts with their canonical `https://www.vascue.io/...` URLs so answers can cite the source.\n\n| Input | Type | Notes |\n| --- | --- | --- |\n| `query` | `string` (required) | Natural-language question or keywords, e.g. \"how does Vascue handle insurance claim pre-authorisation\". |\n| `ai_search_options.retrieval.retrieval_type` | `\"hybrid\" \\| \"vector\" \\| \"keyword\"` | Default hybrid. |\n| `ai_search_options.retrieval.max_num_results` | `integer` 1–50 | Default 8. |\n| `ai_search_options.retrieval.match_threshold` | `number` 0–1 | Default 0.35. |\n| `ai_search_options.retrieval.context_expansion` | `integer` 0–3 | Neighbouring chunks to include. |\n\nQuery rewriting and reranking are disabled server-side; the server returns source chunks only and never a generated answer, so nothing is presented as a Vascue statement without a citation. Rate limit: 60 requests per minute per client.\n\nExample call:\n\n```json\n{ \"name\": \"search\", \"arguments\": { \"query\": \"Cliniko integration for AI front desk\" } }\n```\n\nThe endpoint is backed by a Cloudflare AI Search instance over the approved public Markdown export of vascue.io (the service descriptor at https://www.vascue.io/.well-known/ai-search.json states what is and is not indexed).\n\n## Development\n\n```bash\ndocker build -t vascue-public-knowledge-search .\nnode scripts/smoke.mjs docker run -i --rm vascue-public-knowledge-search   # initialize -> tools/list\nnode scripts/smoke.mjs npx -y mcp-remote https://www.vascue.io/mcp/search --transport http-only\n```\n\nCI runs the same build and smoke test on every push and weekly, so the badge above doubles as an endpoint health indicator.\n\n### Directory build specs\n\nDirectories that build the server from source (e.g. Glama) run the self-contained form. Generated build images vary (uv-managed Python without `pip`, or a PEP 668 externally-managed system Python), so use an explicit venv:\n\n- Build steps: `[\"uv venv /opt/venv && uv pip install --python /opt/venv/bin/python -r requirements.txt\"]`\n- CMD: `[\"/opt/venv/bin/python\", \"server.py\"]`\n- No environment variables.\n\nWhere a normal `pip` exists, plain `pip install -r requirements.txt` + `[\"python\", \"server.py\"]` works too.\n\n```bash\npip install -r requirements.txt\nSMOKE_CALL_QUERY=\"Cliniko integration\" node scripts/smoke.mjs python server.py   # local server\nnode scripts/smoke.mjs python bridge.py                                          # stdio bridge to the hosted endpoint\npython scripts/fetch_content.py                                                  # refresh the content/ snapshot\n```\n\n## Other machine-readable surfaces\n\n- `https://www.vascue.io/llms.txt`\n- `https://www.vascue.io/openapi.json` (public, read-only content API)\n- `https://www.vascue.io/.well-known/agent-skills/index.json` (agent skills; also at [vascue-io/skills](https://github.com/vascue-io/skills))\n\n## Licence\n\nThis repository (README, manifest, Dockerfile) is MIT licensed. The content served by the endpoint is Vascue's public website content.\n",
  "bytes": 6034,
  "sha": "22e5c6580a0960e42256ce67d1be67e5333d45068c2b4a87f12281240564f221",
  "repo_slug": "vascue-io/public-knowledge-search",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_vascue_public_knowledge_search_337ecbfa/readme"
}