{"_id":"@aviralv/scry","_rev":"2-fc2c699a819e4903a5743a52ef99dc73","name":"@aviralv/scry","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.1":{"name":"@aviralv/scry","version":"0.1.1","keywords":["mcp","search","federation","cli","slack","confluence","email"],"_id":"@aviralv/scry@0.1.1","maintainers":[{"name":"aviralv","email":"aviralv@gmail.com"}],"bin":{"scry":"dist/cli.js"},"dist":{"shasum":"188882219b78c5788f19cae4b604c996c2b04ef9","tarball":"https://registry.npmjs.org/@aviralv/scry/-/scry-0.1.1.tgz","fileCount":44,"integrity":"sha512-AQ+O1xKSxEJC1RIec4+h3rqaMoE1fwEJOYvRqdc3jg3JzmjSrty0LDHFGZBkc9HWMjlUhBlz2smb6zkXL3diyw==","signatures":[{"sig":"MEUCIQCDYzmsB6dL4za740/y93Mv4wqAlyv6AXFq0TF0jwHOeQIgQzlo23UTufCqQ/sP7FiqErzL/CFRKZzrxMKO3rcrvyw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73931},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"e2b36686309f25ed1f36b36d8d033b42a5d77cb0","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"aviralv","email":"aviralv@gmail.com"},"_npmVersion":"11.12.1","description":"Federated search orchestrator over MCP","directories":{},"_nodeVersion":"25.9.0","dependencies":{"yaml":"^2.7.0","commander":"^13.1.0","@anthropic-ai/sdk":"^0.39.0","@inquirer/prompts":"^8.4.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0"},"_npmOperationalInternal":{"tmp":"tmp/scry_0.1.1_1779135978962_0.24977357799402533","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aviralv/scry","publishConfig":{"access":"public"},"version":"0.1.2","description":"Federated search orchestrator over MCP","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"scry":"dist/cli.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","dev":"tsx src/cli.ts","test":"vitest run","test:watch":"vitest"},"engines":{"node":">=20"},"keywords":["mcp","search","federation","cli","slack","confluence","email"],"dependencies":{"@anthropic-ai/sdk":"^0.39.0","@inquirer/prompts":"^8.4.3","@modelcontextprotocol/sdk":"^1.29.0","commander":"^13.1.0","yaml":"^2.7.0"},"devDependencies":{"@types/node":"^22.15.0","tsx":"^4.19.0","typescript":"^5.8.0","vitest":"^3.1.0"},"gitHead":"02f926183c4027453136c3c0f939307a03e45b01","_id":"@aviralv/scry@0.1.2","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-5HOTbSqKc6VMMS5720E0hPMRF11lTrbleZZnZBB4JCCmX1f1DWA7ZfnbkEqm4pkiFDwUml9PaRfq3/JTO9aq/g==","shasum":"e762024739f162a509b94e9ad86115a911c8fe3b","tarball":"https://registry.npmjs.org/@aviralv/scry/-/scry-0.1.2.tgz","fileCount":47,"unpackedSize":80782,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCfdNw2F3ri7aOhelT/j0eHHczXTTFfAddq/UpXT1OoagIgSr3y6C2HUORNDPjb7iSRLVqAcUkeutJgcPJFiaeQp0M="}]},"_npmUser":{"name":"aviralv","email":"aviralv@gmail.com"},"directories":{},"maintainers":[{"name":"aviralv","email":"aviralv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scry_0.1.2_1779170614437_0.8524182152157864"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-18T20:26:18.804Z","modified":"2026-05-19T06:03:34.695Z","0.1.1":"2026-05-18T20:26:19.122Z","0.1.2":"2026-05-19T06:03:34.599Z"},"keywords":["mcp","search","federation","cli","slack","confluence","email"],"description":"Federated search orchestrator over MCP","maintainers":[{"name":"aviralv","email":"aviralv@gmail.com"}],"readme":"# scry\n\nFederated search orchestrator over MCP. Query Slack, Confluence, email, and more from a single CLI — get synthesized answers with source attribution.\n\n## Quick Start\n\n```bash\nnpm install -g scry\nscry init\nscry \"what did we decide about pricing?\"\n```\n\n## How It Works\n\n```\nquery → discover sources → parallel search → normalize → synthesize → cited answer\n```\n\n1. **Discover**: Detects MCP servers from your Claude config or PATH\n2. **Route**: Uses a context registry (people, projects, channels) to target the right sources\n3. **Search**: Fans out parallel queries with per-source timeouts\n4. **Synthesize**: LLM combines results with source citations\n\n## Supported MCP Servers\n\n| Name | Command | Install |\n|------|---------|---------|\n| Slack | `slack-mcp` | `uv tool install git+https://github.com/aviralv/slack-mcp` |\n| Microsoft 365 | `ms365-intent-mcp` | `uv tool install git+https://github.com/aviralv/ms365-intent-mcp` |\n| Confluence & Jira | `confluence-jira-mcp` | `uv tool install git+https://github.com/aviralv/confluence-jira-mcp` |\n\nAny MCP server with search tools works — these three are bundled with optimized normalizers.\n\n## Configuration\n\n`scry init` generates a `scry.config.yaml`:\n\n```yaml\nllm:\n  base_url: \"https://api.anthropic.com\"\n  auth_token: \"${ANTHROPIC_API_KEY}\"\n  model: \"claude-haiku-4-5-20251001\"\n\nmcp_servers:\n  slack:\n    command: \"slack-mcp\"\n  ms365:\n    command: \"ms365-intent-mcp\"\n\nsearch_tools:\n  slack:\n    - tool: \"slack_search\"\n      params: { format: \"json\" }\n      normalizer: \"slack\"\n  ms365:\n    - tool: \"outlook_list_messages\"\n      params: { format: \"json\" }\n      normalizer: \"email\"\n\nregistry:  # optional — enables context-aware routing\n  projects:\n    my-project:\n      name: My Project\n      routing:\n        slack_channels: [team-channel]\n        jira_project: PROJ\n```\n\n## CLI Options\n\n```\nscry [query]              Search and synthesize\nscry init                 Interactive setup wizard\nscry config show          Show current configuration\n\nOptions:\n  -c, --config <path>     Config file (default: scry.config.yaml)\n  -t, --timeout <ms>      Per-source timeout (default: 15000)\n  --no-synthesize         Show raw results without LLM synthesis\n```\n\n## Environment Variables\n\n| Variable | Purpose |\n|----------|---------|\n| `SCRY_CONFIG` | Custom config file path |\n| `ANTHROPIC_API_KEY` | LLM API key (used via `${...}` in config) |\n\n## How Normalizers Work\n\nEach MCP server returns different JSON shapes. Scry uses **normalizers** to convert them into a common format:\n\n- **Built-in**: `slack`, `confluence`, `email` — optimized for known response shapes\n- **Generic fallback**: Best-effort extraction for unknown servers (results marked low-confidence)\n- **Config-driven**: Set `normalizer: \"slack\"` in `search_tools` to assign a normalizer to any tool\n\n## Requirements\n\n- Node.js >= 20\n- At least one MCP server installed and authenticated\n- An Anthropic API key (for synthesis)\n","readmeFilename":"README.md"}