Search a curated English and Chinese web index through one read-only MCP tool.
Curated English & Chinese Search API and MCP for AI Agents & RAG Systems
Search that can show its work. Every result carries an explicit fetched_at timestamp and provenance.
π Website β’ π API Docs β’ β‘ MCP Quickstart β’ π Frozen Benchmarks β’ π Examples β’ π¨π³ δΈζζζ‘£
Current web search APIs for AI agents suffer from three fatal flaws:
fetched_at).Annolux solves this with an agent-first curated approach:
fetched_at Timestamp: Every ranked hit reveals the exact second it was ingestedβenabling grounded citations and temporal reasoning.| Feature / Metric | Annolux | Exa (Metaphor) | Tavily | Serper / Google |
|---|---|---|---|---|
| Index Quality | Curated Tech & Knowledge (EN/ZH) | Web-wide neural | Web-wide aggregator | Entire Web (noisy SEO) |
| Chinese (ZH) Tech Corpus | First-class native bilingual FTS | Moderate | Weak / Translated | Mixed with content farms |
| Explicit Snapshot Timestamp | β
fetched_at on every result | β Inconsistent | β Omitted | β Snippet approximate only |
| Billing Guarantee | β 1 credit only on 2xx success | Request-based | Request-based | Request-based |
| Failed / Timeout Queries | π 0 Credits charged | β Billed | β Billed | β Billed |
| MCP Tool Surface | Single lean search_web (Minimal token waste) | Multiple bulky tools | Multi-step tools | Needs custom bridge |
| Domain Restriction | β
Exact hostname filtering (domains) | β Supported | β Supported | Limited site: query |
| Free Starter Tier | 1,000 credits / month | Limited trial | 1,000 / mo | 2,500 one-time |
Node.js 18+ is the only prerequisite. Start in the zero-config sandboxβno account or API key is required:
npx -y annolux-mcp
For the full monthly allowance, create a free key at annolux.com and pass it through the process environment:
ANNOLUX_API_KEY=ann_live_YOUR_API_KEY npx -y annolux-mcp
Annolux implements the official Model Context Protocol (MCP) specification with a single, high-efficiency tool: search_web.
npx -y @smithery/cli install annolux-mcp --client claude
npx -y @smithery/cli install annolux-mcp --client cursor
claude mcp add annolux -- npx -y annolux-mcp
This starts in sandbox mode. To use an account key, add it with -e ANNOLUX_API_KEY=ann_live_YOUR_API_KEY before --.
Add to your project .cursor/mcp.json or global configuration:
{
"mcpServers": {
"annolux": {
"command": "npx",
"args": ["-y", "annolux-mcp"],
"env": {
"ANNOLUX_API_KEY": "ann_live_YOUR_API_KEY"
}
}
}
}
Add to claude_desktop_config.json:
{
"mcpServers": {
"annolux": {
"command": "npx",
"args": ["-y", "annolux-mcp"],
"env": {
"ANNOLUX_API_URL": "https://api.annolux.com",
"ANNOLUX_API_KEY": "ann_live_YOUR_API_KEY"
}
}
}
}
POST https://api.annolux.com/api/v1/search
Authorization: Bearer ann_live_YOUR_API_KEY
Content-Type: application/json
{
"query": "tokio async runtime memory model",
"domains": ["tokio.rs", "docs.rs", "github.com"],
"deduplicate": true,
"limit": 5,
"timeout": 10,
"ranking": "default"
}
import os
import requests
response = requests.post(
"https://api.annolux.com/api/v1/search",
headers={"Authorization": f"Bearer {os.environ.get('ANNOLUX_API_KEY')}"},
json={
"query": "DeepSeek R1 architecture reinforcement learning",
"limit": 5,
"deduplicate": True
},
timeout=15
)
data = response.json()
for result in data.get("results", []):
print(f"[{result['fetched_at']}] {result['title']} -> {result['url']}")
const res = await fetch("https://api.annolux.com/api/v1/search", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.ANNOLUX_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
query: "vLLM PagedAttention implementation details",
limit: 5,
deduplicate: true
})
});
const data = await res.json();
console.log(`Credits Remaining: ${res.headers.get("X-Annolux-Credits-Remaining")}`);
console.log(data.results);
curl -s -X POST https://api.annolux.com/api/v1/search \
-H "Authorization: Bearer ann_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "Go sync.Pool benchmark best practices",
"limit": 3
}' | jq .
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Agent / RAG Application β
β (Claude Code / Cursor / LangChain / Custom LLM) β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
Stdio MCP / HTTPS REST Request
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Annolux Gateway API Engine β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββ β
β β 1. Account & Rate Limit β βββΊ β Reserve 1 Credit β β
β β (5 RPS, Burst 10) β β in /data/accounts.db β β
β βββββββββββββββββββββββββββ βββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 2. Bilingual FTS Ranker (/data/index.db) β β
β β β’ Curated English & Chinese Corpus β β
β β β’ SimHash Content-Deduplication Engine β β
β β β’ Domain Filter & Exact Substring Match β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 3. Atomic Response & Ledger Settlement β β
β β β’ 2xx Success βββΊ Commit 1 Credit & Attach Timing β β
β β β’ 4xx/5xx Err βββΊ Release Reservation (0 Cost) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
JSON with exact `fetched_at` & verified URL
β
βΌ
[ Grounded LLM Response ]
Annolux evaluates search retrieval performance against an immutable, frozen blind set of 40 complex bilingual queries. The ranking weights are never tuned on the test set.
| Metric | First Gate Baseline | Prelaunch Verification Gate |
|---|---|---|
| Hit@1 | 72.5% | 72.5% |
| Hit@3 | 82.5% | 82.5% |
| Hit@10 | 85.0% | 85.0% |
| MRR@10 | 0.78125 | 0.78125 |
| P95 Latency | 532 ms | 356 ms |
| 5xx Error Rate | 0.00% | 0.00% |
All benchmarks are evaluated client-side under full concurrency load.
| Plan | Price | Credits | Rate Limits | Billing Rules |
|---|---|---|---|---|
| Free | $0 | 1,000 / month | 5 RPS / Burst 10 | Free forever, no credit card required |
| Pro | $29 / mo | 20,000 / mo | 5 RPS / Burst 10 | 1 success = 1 credit, no rollover |
| Scale | $99 / mo | 100,000 / mo | 5 RPS / Burst 10 | 1 success = 1 credit, no rollover |
Check the examples/ directory for production-ready starters:
01-claude-code-literature-research: Automated technical survey agent with timestamped citations.02-cursor-authority-domain-refactor: Restrict search to official doc domains (react.dev, go.dev) for zero-hallucination refactoring.03-production-rag-temporal-pipeline: Production RAG hybrid search pipeline with fallback retrieval.04-n8n-ai-research-agent: Ready-to-import n8n AI Agent workflow with community node (n8n-nodes-annolux) and temporal citations.Annolux is open-source software licensed under the Apache License, Version 2.0.
Source-derived launch command. Check the maintainerβs required arguments and credentials before running:
docker run -i --rm ghcr.io/eason4kim-rocket/annolux-mcp:0.1.2Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-eason4kim-rocket-annolux": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/eason4kim-rocket/annolux-mcp:0.1.2"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the clientβs tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceghcr.io/eason4kim-rocket/annolux-mcp:0.1.2dockerAnnolux Search works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.