{"_id":"@addumone/milo-mcp","_rev":"6-586ee3cc47008168accbc8aa1fdb176f","name":"@addumone/milo-mcp","dist-tags":{"latest":"0.2.9"},"versions":{"0.2.0":{"name":"@addumone/milo-mcp","version":"0.2.0","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","_id":"@addumone/milo-mcp@0.2.0","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"bin":{"milo-mcp":"dist/server.js"},"dist":{"shasum":"b392bbd4fcfcb45782ed5da46d68f31d7f6a4229","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.0.tgz","fileCount":165,"integrity":"sha512-RKPHgl3DnCXSSbLDQ+CYNgiRRhnukOjiscG7X/++rdZ9dRasNvRoIiXdB+BMKi8W+2Vy/bKTfqgKkhU/ZrMTwQ==","signatures":[{"sig":"MEQCIAZfUqhzLiUqrJnPthqU6HUgjsjXwZ1zoE0Iv9s5jNLKAiAEglC4tNjvd4kdW2z3Ro+BMLU5/jMwoBq9mRCmdOn0ug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281433},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e6ef3a7e4f93012edc6e4e6be58c49be6def329f","scripts":{"dev":"tsx watch src/server.ts","eval":"tsx src/rag/evaluation/runner.ts","test":"vitest run","build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack","fetch:model":"node scripts/fetch-embedding-model.mjs","test:integration":"vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"repository":{"url":"git+https://github.com/AddumOne/milo-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for Milo/EDS block discovery, ownership, and search","directories":{},"_nodeVersion":"24.2.0","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","p-limit":"^6.0.0","@octokit/rest":"^21.0.0","@anthropic-ai/sdk":"^0.37.0","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/milo-mcp_0.2.0_1776456429772_0.2649333278271664","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@addumone/milo-mcp","version":"0.2.4","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","_id":"@addumone/milo-mcp@0.2.4","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"bin":{"milo-mcp":"dist/server.js"},"dist":{"shasum":"aed73a07865ad9ada3fb308586d1fbdc9aa09094","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.4.tgz","fileCount":165,"integrity":"sha512-5d7k1e9O4jja07bA2hcV1CFIjhWgay23NUoMPvug6BY9S7Qzrtko0kn3DqeHocBbKbbT3jRfeqMy9c58UFHOHA==","signatures":[{"sig":"MEYCIQDHV12L8ZVrJg9IqjdVP+1Tk+YjOpW9BqJuoQKVblBBnwIhAMxnIYipMX4zCgkweQkSmPQju4f1sbMZNE3oMnsJxqDt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281433},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d60e11feda5be11f547d74f275de25a481298a67","scripts":{"dev":"tsx watch src/server.ts","eval":"tsx src/rag/evaluation/runner.ts","test":"vitest run","build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack","fetch:model":"node scripts/fetch-embedding-model.mjs","test:integration":"vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"repository":{"url":"git+https://github.com/AddumOne/milo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Milo/EDS block discovery, ownership, and search","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","p-limit":"^6.0.0","@octokit/rest":"^21.0.0","@anthropic-ai/sdk":"^0.37.0","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/milo-mcp_0.2.4_1776459914541_0.31336943697552155","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@addumone/milo-mcp","version":"0.2.5","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","_id":"@addumone/milo-mcp@0.2.5","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"bin":{"milo-mcp":"dist/server.js"},"dist":{"shasum":"24c823413c3615714e23b8caf169395a04563021","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.5.tgz","fileCount":165,"integrity":"sha512-qbyGhBS/chqhtbsYjGrnGBC2Q7PJRbs0cWVvn6H3pGyz8UlFbbuiOymGE8RwkabA/dC0N+HMBFhBz1n/wPDjQA==","signatures":[{"sig":"MEYCIQCjJPwO7rhKqzb6YWwXBNI4O8zlFw3PNdbdpqxX9ahcigIhAOEa1Yv5DGpxMc50l+ao/Ey2MoZiYMQ5I1dI9U1Gfifs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281597},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4a81f630472e555cc2d03dff8b85a6bfa2fae01a","scripts":{"dev":"tsx watch src/server.ts","eval":"tsx src/rag/evaluation/runner.ts","test":"vitest run","build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack","fetch:model":"node scripts/fetch-embedding-model.mjs","test:integration":"vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"repository":{"url":"git+https://github.com/AddumOne/milo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Milo/EDS block discovery, ownership, and search","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","p-limit":"^6.0.0","@octokit/rest":"^21.0.0","@anthropic-ai/sdk":"^0.37.0","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/milo-mcp_0.2.5_1776460682734_0.8754915804423331","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@addumone/milo-mcp","version":"0.2.6","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","_id":"@addumone/milo-mcp@0.2.6","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"bin":{"milo-mcp":"dist/server.js"},"dist":{"shasum":"6d1d96169eeb5c576e0b8dc8efb28746007b4aac","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.6.tgz","fileCount":165,"integrity":"sha512-471aWcttz17gloZOVYxyXXu1zCGcInlyLe+zAkJynqTHdZ3CGqUatmr98odJT2oeHA1+j6uOcQmQzz+A2oe72A==","signatures":[{"sig":"MEUCIQCQSmmCDUJQh6aCPb2LPVaT9OQMUsxfQNsG5B0GmYFW8AIgCaGKlpTgxrJZAepQ8sADJQ08OZjUGiqH6g8F5CpNprs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282638},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cad7464e0f13d55bbf3da00ba27876e02fbe1198","scripts":{"dev":"tsx watch src/server.ts","eval":"tsx src/rag/evaluation/runner.ts","test":"vitest run","build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack","fetch:model":"node scripts/fetch-embedding-model.mjs","test:integration":"vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"repository":{"url":"git+https://github.com/AddumOne/milo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Milo/EDS block discovery, ownership, and search","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","p-limit":"^6.0.0","@octokit/rest":"^21.0.0","@anthropic-ai/sdk":"^0.37.0","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/milo-mcp_0.2.6_1776461406816_0.7318701580510099","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@addumone/milo-mcp","version":"0.2.8","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","_id":"@addumone/milo-mcp@0.2.8","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"bin":{"milo-mcp":"dist/server.js"},"dist":{"shasum":"f82e44f61047fb88a8056b567745b67935cb4a77","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.8.tgz","fileCount":165,"integrity":"sha512-VNBeV/Pcqw7vcTtiLCEOiV5VhGPlUW49bF0HCrghhEgm5SsQI6dmQPHgw5taAhnA4l2WdmUvB1HXgLAOxnR/fA==","signatures":[{"sig":"MEQCIAMQTwsNXAke2HC4IO2SfwHUmW2iKRiGCVQpT2DMleWpAiBdPIA/9yzRiAL6cQ5ZRXgLlnUnIHzxHFgZ98ZNvF2l3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282735},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a8c811d0da5e5ba71db08824b29abf3b43359032","scripts":{"dev":"tsx watch src/server.ts","eval":"tsx src/rag/evaluation/runner.ts","test":"vitest run","build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack","fetch:model":"node scripts/fetch-embedding-model.mjs","test:integration":"vitest run --config vitest.integration.config.ts"},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"repository":{"url":"git+https://github.com/AddumOne/milo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Milo/EDS block discovery, ownership, and search","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","dotenv":"^17.4.2","p-limit":"^6.0.0","@octokit/rest":"^21.0.0","@anthropic-ai/sdk":"^0.37.0","@xenova/transformers":"^2.17.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.3.4","tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/milo-mcp_0.2.8_1776463296823_0.909842796007742","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@addumone/milo-mcp","version":"0.2.9","description":"MCP server for Milo/EDS block discovery, ownership, and search","type":"module","author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/AddumOne/milo-mcp.git"},"homepage":"https://github.com/AddumOne/milo-mcp#readme","bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"main":"dist/server.js","bin":{"milo-mcp":"dist/server.js"},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsc && node scripts/copy-resource-markdown.mjs && shx chmod +x dist/server.js","start":"node dist/server.js","dev":"tsx watch src/server.ts","test":"vitest run","test:integration":"vitest run --config vitest.integration.config.ts","eval":"tsx src/rag/evaluation/runner.ts","fetch:model":"node scripts/fetch-embedding-model.mjs","prepack":"npm run build","version":"node scripts/sync-manifest-version.mjs && git add manifest.json","pack:mcpb":"npx @anthropic-ai/mcpb pack"},"dependencies":{"@anthropic-ai/sdk":"^0.37.0","@modelcontextprotocol/sdk":"^1.0.0","@octokit/rest":"^21.0.0","@xenova/transformers":"^2.17.0","dotenv":"^17.4.2","p-limit":"^6.0.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20.0.0","shx":"^0.3.4","tsx":"^4.0.0","typescript":"^5.4.0","vitest":"^1.0.0"},"_id":"@addumone/milo-mcp@0.2.9","gitHead":"e614d5f1df4bf61f6c4edf33f2afa365b22f08a1","types":"./dist/server.d.ts","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-5OWzihMYypL5APa1u/oT1FWEn+AQd1+oUAdgTkancNTJ8GU7ISVn+iUgNmGcP7wBOOW6W5kj5g3pzDp+6Pulsw==","shasum":"19449cc8c4309fafd05308643090baf62c8a034f","tarball":"https://registry.npmjs.org/@addumone/milo-mcp/-/milo-mcp-0.2.9.tgz","fileCount":165,"unpackedSize":282735,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGgTdsgN3W4yggYIIZJjdmsWHwILXbf6+hRszyaUSklHAiA4UvmfG6Rp1IUlOM1Zy1FCbuuuUzB7eSRvBAu6kiw6pw=="}]},"_npmUser":{"name":"addumone","email":"abaker.mail@gmail.com"},"directories":{},"maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/milo-mcp_0.2.9_1776463556423_0.1840032804998144"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-17T20:07:09.661Z","modified":"2026-04-17T22:05:56.684Z","0.2.0":"2026-04-17T20:07:09.947Z","0.2.4":"2026-04-17T21:05:14.763Z","0.2.5":"2026-04-17T21:18:02.898Z","0.2.6":"2026-04-17T21:30:06.969Z","0.2.8":"2026-04-17T22:01:36.998Z","0.2.9":"2026-04-17T22:05:56.563Z"},"bugs":{"url":"https://github.com/AddumOne/milo-mcp/issues"},"author":{"name":"Adam Baker","email":"adamb@adobe.com"},"license":"Apache-2.0","homepage":"https://github.com/AddumOne/milo-mcp#readme","repository":{"type":"git","url":"git+https://github.com/AddumOne/milo-mcp.git"},"description":"MCP server for Milo/EDS block discovery, ownership, and search","maintainers":[{"name":"addumone","email":"abaker.mail@gmail.com"}],"readme":"# milo-mcp\n\nMCP server for the Milo/EDS ecosystem. Gives AI assistants (Claude, Cursor) a context-aware interface to browse, search, and inspect Milo blocks (write/scaffold tools are planned for later phases).\n\n## Phase 1 — Foundation (current)\n\nRead-only tools for block discovery and inspection:\n\n| Tool | Description |\n|---|---|\n| `get_block_repo_owner` | Project key + GitHub org/repo for the resolved block (same resolver as `get_block_location`) |\n| `get_block_codeowner` | CODEOWNERS teams/individuals (Milo when block exists in core) + commit activity on the block directory |\n| `get_block_location` | File path + GitHub blob URL for the block’s main `.js` |\n| `get_block` | Fetch block metadata + optional source/CSS/tests |\n| `search_blocks` | RAG-powered discovery (Adaptive RAG routing) |\n| `list_blocks` | List blocks; optional `include_child_overrides` compares child overrides to Milo core and reports lag |\n| `get_block_history` | Git commit history for a block |\n| `get_preview_url` | AEM URLs: `env` is `stage` (default, `*.aem.page`) or `live` (`*.aem.live`); also returns `milo_override_url` and `local_url` |\n| `refresh_index` | Rebuild the block index (one project or all) without restarting the server |\n| `analyze_block_dependencies` | Inspect which blocks a block imports, and optionally the reverse direction (expensive) |\n| `get_override_migration_guide` | For a child-project override, show what changed in Milo core since it was last updated; optional LLM-generated migration steps |\n| `add_project` | Register a new GitHub repo at runtime (custom projects persist across restarts) |\n| `remove_project` | Remove a custom project; cannot remove built-in defaults |\n| `list_projects` | List registered projects with source (default/custom/custom_override) and indexed block count |\n| `check_setup_status` | Diagnose setup: verify `GITHUB_TOKEN` / `ANTHROPIC_API_KEY` with live test calls, report index state and per-project block counts |\n\n**Resources**\n\n- `milo://conventions/block-anatomy` — canonical JS/CSS/test structure\n- `milo://conventions/da-table-syntax` — DA markdown block tables\n- `milo://conventions/nala-test-pattern` — Playwright test structure\n- `milo://conventions/codeowners` — where Milo’s CODEOWNERS lives and how tools use it\n- `milo://project/{project}/fstab` — child project `fstab.yaml` (e.g. `da-bacom`, `bacom`, `cc` are listed in MCP; any [known project](src/config.ts) can be read by URI)\n\n**Prompts**\n\n- `audit-child-project-blocks` — guided audit of stale overrides vs Milo core (uses `list_blocks` with `include_child_overrides=true`)\n\n## Install\n\nTwo distribution channels. Pick whichever fits your client.\n\n### Claude Desktop — one-click bundle\n\nDownload the latest `*.mcpb` file from the [Releases page](https://github.com/AddumOne/milo-mcp/releases) and double-click it. Claude Desktop opens an install dialog; fill in your `GITHUB_TOKEN` and optionally `ANTHROPIC_API_KEY`, then click Install. No local Node install needed — Claude Desktop ships its own runtime and the embedding model is pre-bundled in the file.\n\nTo uninstall, open Claude Desktop → Settings → Extensions, find milo-mcp, and click Remove.\n\n### Any MCP client — npm package\n\nPublished as [`@addumone/milo-mcp`](https://www.npmjs.com/package/@addumone/milo-mcp) on the public npm registry. Configure your MCP client to invoke it via `npx`:\n\n```json\n{\n  \"mcpServers\": {\n    \"milo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@addumone/milo-mcp\"],\n      \"env\": {\n        \"GITHUB_TOKEN\": \"ghp_...\",\n        \"ANTHROPIC_API_KEY\": \"sk-ant-...\"  // optional — enables CRAG; omit for cosine-only search\n      }\n    }\n  }\n}\n```\n\nNo `.npmrc` setup needed — the package is on the public registry. The embedding model is downloaded from Hugging Face on first run and cached locally; subsequent starts are instant. To force the latest version: `npx --prefer-online @addumone/milo-mcp`.\n\n### Local development\n\n```bash\ncp .env.example .env\n# GITHUB_TOKEN is required; ANTHROPIC_API_KEY is optional (enables CRAG for search_blocks)\nnpm install\nnpm run dev\n```\n\nThe server loads `.env` from the process working directory (`dotenv`) when you run `npm run dev` or `npm start`; set the same vars in your MCP host config if the cwd has no `.env`.\n\n## Commands\n\n```bash\nnpm run dev              # Development mode with hot reload\nnpm test                 # Run unit tests (Vitest)\nnpm run test:integration # Integration tests under test/integration/ (separate Vitest config)\nnpm run eval             # Run RAGAS evaluation (Phase 1 gate)\nnpm run build            # Compile TypeScript and copy convention markdown into dist/\nnpm start                # Run compiled server\n```\n\n## RAG Strategy\n\nQueries are classified into four types and routed to the most appropriate technique:\n\n| Type | Technique | Example |\n|---|---|---|\n| LOOKUP | Direct fetch | \"get the accordion block\" |\n| SEMANTIC | Cosine + CRAG (1–2 word queries try a direct name match first) | \"find a block for promotional content\" |\n| COMPOSITIONAL | Iterative (3-pass) | \"which blocks override milo and are stale?\" |\n| MULTI_SOURCE | Semantic + CRAG (same path as SEMANTIC today; agentic multi-tool flow is Phase 4) | Queries mentioning Figma, DA, or “new page” |\n\n## Environment Variables\n\nSee `.env.example` for all variables.\n\nRequired:\n- `GITHUB_TOKEN` — read:repo scope (indexing + GitHub-backed tools)\n\nOptional:\n- `ANTHROPIC_API_KEY` — enables CRAG semantic validation in `search_blocks`. Without it, `search_blocks` still works but uses cosine-similarity ranking only, which produces lower-quality results. All other tools are unaffected. A warning is logged at startup when this key is not set.\n- Optional tuning (see `.env.example`; defaults in `src/config.ts`): `MILO_REPO_*`, `EMBEDDING_MODEL`, `CRAG_THRESHOLD`, `SELF_RAG_MAX_ATTEMPTS`, `COSINE_GAP` (CRAG candidate band vs top cosine score, default `0.20`).\n\nRequired for write tools (Phase 3+):\n- `GITHUB_WRITE_TOKEN` — repo scope\n\nFuture phases (documented in `.env.example`): `FIGMA_API_KEY`, `DA_API_TOKEN`.\n","readmeFilename":"README.md"}