Odel
Annolux Search

Annolux Search

Local
@eason4kim-rocketGoApache-2.0Updated Today

Search a curated English and Chinese web index through one read-only MCP tool.

⚑ Annolux

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.

Go Version NPM Version Smithery Badge Glama MCP Add to Cursor MCP Protocol License Free Tier

🌐 Website β€’ πŸ“– API Docs β€’ ⚑ MCP Quickstart β€’ πŸ“Š Frozen Benchmarks β€’ πŸ“ Examples β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡ζ–‡ζ‘£


πŸ’‘ Why Annolux?

Current web search APIs for AI agents suffer from three fatal flaws:

  1. Garbage in, garbage out: Commercial search engines index millions of SEO farms, scraped spam, and auto-generated noise that pollute LLM context windows.
  2. Missing time-provenance: LLMs hallucinate current state because search APIs omit the exact snapshot timestamp (fetched_at).
  3. Predatory billing: Paying full price for failed requests, empty outputs, or rate-limited retries.

Annolux solves this with an agent-first curated approach:

  • πŸ›‘οΈ Curated Bilingual Technical Index: High-signal English & Chinese corpus (Rust, Go, Python, AI/ML, Official Docs, RFCs, GitHub, arXiv).
  • πŸ•’ Explicit fetched_at Timestamp: Every ranked hit reveals the exact second it was ingestedβ€”enabling grounded citations and temporal reasoning.
  • 🎯 Predictable Ledger Billing: Exactly 1 credit per successful 2xx response. Errors, timeouts (504), rate limits (429), and bad requests cost 0 credits.
  • 🧩 Native Model Context Protocol (MCP): Zero setup across Claude Code, Cursor, Windsurf, Cline, Zed, and Claude Desktop.
  • πŸš€ 1,000 Free Credits Every Month: Sign in with GitHub or Google at annolux.com and start querying in 30 seconds.

πŸ₯Š Comparison: Annolux vs. Generic Search APIs

Feature / MetricAnnoluxExa (Metaphor)TavilySerper / Google
Index QualityCurated Tech & Knowledge (EN/ZH)Web-wide neuralWeb-wide aggregatorEntire Web (noisy SEO)
Chinese (ZH) Tech CorpusFirst-class native bilingual FTSModerateWeak / TranslatedMixed with content farms
Explicit Snapshot Timestampβœ… fetched_at on every result❌ Inconsistent❌ Omitted❌ Snippet approximate only
Billing Guaranteeβœ… 1 credit only on 2xx successRequest-basedRequest-basedRequest-based
Failed / Timeout QueriesπŸ†“ 0 Credits charged❌ Billed❌ Billed❌ Billed
MCP Tool SurfaceSingle lean search_web (Minimal token waste)Multiple bulky toolsMulti-step toolsNeeds custom bridge
Domain Restrictionβœ… Exact hostname filtering (domains)βœ… Supportedβœ… SupportedLimited site: query
Free Starter Tier1,000 credits / monthLimited trial1,000 / mo2,500 one-time

πŸ“¦ Quick Installation

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

πŸ”Œ MCP Integration

Annolux implements the official Model Context Protocol (MCP) specification with a single, high-efficiency tool: search_web.

⚑ 1-Click Installation (Cursor & Smithery)

  • Cursor: Click Add to Cursor to install natively via deep link.
  • Smithery CLI:
    npx -y @smithery/cli install annolux-mcp --client claude
    npx -y @smithery/cli install annolux-mcp --client cursor
    
  • Glama Online Playground: Test queries instantly without local setup on Glama.ai.

1. Claude Code

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 --.

2. Cursor / Windsurf

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"
      }
    }
  }
}

3. Claude Desktop

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"
      }
    }
  }
}

πŸš€ HTTP API Quickstart

Standard Search Endpoint

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"
}

Python

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']}")

TypeScript / Node.js

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

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 .

πŸ›οΈ Architecture & Mechanics

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 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 ]

πŸ“Š Search Quality & Frozen Benchmarks

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.

MetricFirst Gate BaselinePrelaunch Verification Gate
Hit@172.5%72.5%
Hit@382.5%82.5%
Hit@1085.0%85.0%
MRR@100.781250.78125
P95 Latency532 ms356 ms
5xx Error Rate0.00%0.00%

All benchmarks are evaluated client-side under full concurrency load.


πŸ’³ Transparent Pricing

PlanPriceCreditsRate LimitsBilling Rules
Free$01,000 / month5 RPS / Burst 10Free forever, no credit card required
Pro$29 / mo20,000 / mo5 RPS / Burst 101 success = 1 credit, no rollover
Scale$99 / mo100,000 / mo5 RPS / Burst 101 success = 1 credit, no rollover
  • No overage charges.
  • Errors, rate-limits, and timeouts are 100% free (0 credit charged).
  • Up to 3 active API keys per account.

πŸ“ Examples & Recipes

Check the examples/ directory for production-ready starters:


🀝 Community & Support


πŸ“„ License

Annolux is open-source software licensed under the Apache License, Version 2.0.