MCP
Web search MCP server for AI agents
Add one bounded web search tool to any MCP client: search_web queries a curated English and Chinese index and returns source-attributed results with fetched_at. Not realtime, not the whole web.
One tool, the standard Search contract
annolux-mcp registers exactly one tool: search_web. Its inputs match the commercial REST endpoint, and every result carries a title, URL, snippet when available, and an explicit fetched_at timestamp. The server does not expose scraping, extraction, verification, or any hidden enrichment, so an agent cannot buy a different operation through MCP than the one documented here.
The index behind it is curated and bilingual (English and Chinese), refreshed on a schedule. It is not a realtime feed and it does not claim whole-web coverage; an empty result set is a normal outcome, not an error.
Install the server binary
The server is a single static Go binary. With a Go toolchain installed, one command builds and installs it into $(go env GOPATH)/bin — make sure that directory is on your PATH, or reference the binary by absolute path in client configs.
go install github.com/eason4kim-rocket/annolux/cmd/annolux-mcp@latest
Configure any MCP client
Every MCP client accepts the same shape: a command plus two environment variables. The key lives only in the server process environment; annolux-mcp sends it in the Authorization header and never places it in tool results or model-visible arguments.
{
"mcpServers": {
"annolux": {
"command": "annolux-mcp",
"env": {
"ANNOLUX_API_URL": "https://api.annolux.com",
"ANNOLUX_API_KEY": "ann_live_REPLACE_ME"
}
}
}
}
search_web fields
- query — required, up to 500 characters.
- domains — optional hostname allow-list, up to 20 entries.
- deduplicate — defaults to true.
- limit — 1 to 10 results, default 10.
- timeout — 1 to 30 seconds, default 30.
- ranking — default or provider.
- freshness is not supported and is rejected explicitly.
What a response looks like
An illustrative response. Keep fetched_at beside any citation your agent produces, so downstream readers know when the page was retrieved.
{
"success": true,
"query": "rust ownership",
"results": [
{
"rank": 1,
"title": "What is Ownership? - The Rust Programming Language",
"url": "https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html",
"snippet": "Ownership is a set of rules that govern how a Rust program manages memory…",
"fetched_at": "2026-08-15T09:12:44Z"
}
],
"deduplicated": 0,
"partial": false,
"timing": { "total_ms": 212, "provider_ms": 180, "enrichment_ms": 32 }
}
Credits
Only a successful 2xx Search commits one credit. Validation errors, authentication failures, insufficient balance, rate limits, server errors, and timeouts commit zero. Read X-Annolux-Credits-Used and X-Annolux-Credits-Remaining from the response instead of estimating locally. New accounts start with 1,000 free credits.
Client setup guides
Each guide below is a copy-paste configuration for that client, including its file locations and the client-specific pitfalls.