TripCreighton/peeky-search
MCP server for web search that extracts relevant excerpts instead of summarizing. BM25 + structural heuristics surface the actual Stack Overflow answer, GitHub discussion, or docs paragraph you need. No LLM summarization layer, just IR-based extraction.
Platform-specific configuration:
{
"mcpServers": {
"peeky-search": {
"command": "npx",
"args": [
"-y",
"peeky-search"
]
}
}
}Add the config above to .claude/settings.json under the mcpServers key.
[](https://www.npmjs.com/package/peeky-search) [](https://github.com/TripCreighton/peeky-search/blob/main/LICENSE)
Find the answer you're actually looking for.
Built-in web search gives you summaries. peeky-search gives you the Stack Overflow answer with the code fix, the GitHub discussion where someone debugged your exact issue, the documentation paragraph that actually explains the edge case.
No LLM summarization layer. Just IR-based extraction (BM25 + structural heuristics) that surfaces relevant passages directly from sources.
npx peeky-search --search --query "zod transform vs refine" --max 3# Search Results for: "zod transform vs refine"
Found 3 of 3 pages with relevant content.
## Zod: .transform() vs .refine() - Stack Overflow
Source: https://stackoverflow.com/questions/73715295
Use `.refine()` when you want to add custom validation logic that returns
true/false. Use `.transform()` when you want to modify the parsed value
before it's returned.
### Key difference
`.refine()` validates and returns the same type. `.transform()` can change
the output type entirely:
const stringToNumber = z.string().transform(val => parseInt(val));
// Input: string, Output: numberBuilt-in web search tools use an LLM to summarize pages. You get a polished overview, but edge cases get smoothed away.
peeky-search extracts evidence - the actual passages from sources, ranked by relevance. You see exactly what the docs say, what the maintainer wrote in th
Loading reviews...