SearchForge
Allows searching Hacker News content via Algolia API for community discussions.
Provides web search results using the Brave Search API as an optional keyed backend.
Enables searching GitHub repositories for code using GitHub's search API.
Integrates with self-hosted SearXNG for broad web metasearch capabilities.
Serves as a fallback web knowledge source, returning Wikipedia page snippets.
SearchForge
Open-source web search API and MCP server for LLMs, agents, and RAG.
One local gateway. Intent-aware search. Clean Markdown. REST, MCP, CLI, and TypeScript.
Website · Quick start · Free tools · MCP · API · Design
SearchForge is a free, open-source web search API and MCP server for LLMs, AI agents, and retrieval-augmented generation (RAG) pipelines. It provides a predictable retrieval layer without forcing every project to integrate a paid search vendor. SearchForge routes each query to the right source, isolates provider failures, deduplicates URLs, fuses rankings, and turns public pages into LLM-ready Markdown.
It does not generate answers, hide citations, scrape public SearXNG instances, or send telemetry.
What you get
Capability | Default source | Cost / credentials |
| Intent-routed source mix | No key by default |
| Wikipedia; optional private SearXNG | No key / self-hosted |
| GitHub repository search | No key; token optional |
| Crossref works and DOI metadata | No key |
| Hacker News via Algolia | No key, community service |
| Jina Reader | No key, currently rate-limited |
SearchForge starts with all no-key adapters enabled. auto is the default and routes code, research, and current/community intent to relevant sources while retaining a web fallback. A GitHub token only raises the public API quota, and Brave remains an optional keyed backend. Broad, independent web metasearch is provided by the included SearXNG stack.
Related MCP server: Agent Search
Quick start
Try it without cloning
npx --yes --package github:divyanshu-iitian/SearchForge \
searchforge search "latest open-source agent frameworks"The first run downloads and builds the package from GitHub. Searches use intent-aware auto routing unless you select a category.
Zero-key local CLI
git clone https://github.com/divyanshu-iitian/SearchForge.git
cd SearchForge
npm install
npm run build
node dist/cli.js search "latest open-source agent frameworks"
node dist/cli.js search "retrieval augmented generation" --category academic
node dist/cli.js search "local LLM tooling" --category community
node dist/cli.js read "https://example.com"
node dist/cli.js doctorFull web search with private SearXNG
docker compose up --buildcurl -s http://localhost:3000/v1/search \
-H "content-type: application/json" \
-d '{"query":"open source vector databases","category":"web","limit":5}'This starts SearchForge on port 3000 and a private, JSON-enabled SearXNG on port 8080. Before exposing the stack, change the SearXNG secret, set SEARCHFORGE_API_KEY, and terminate TLS at a trusted proxy.
Free tools
Search by capability
searchforge search "latest open-source agent frameworks"
searchforge search "browser agent" --category code
searchforge search "semantic reranking" --category academic --json
searchforge search "Show HN search engine" --category communityThe default auto category detects code, academic, and current/community signals and queries the matching source families alongside the web fallback. Explicit categories prevent irrelevant providers from being queried. An explicit providers list overrides category routing, which is useful for evaluations.
Read a URL as Markdown
searchforge read "https://example.com/article"read_url accepts public HTTP(S) URLs only. Credentials, localhost, private IP literals, and non-web protocols are rejected. Responses are size-bounded, timed out, and cached.
Diagnose the whole retrieval path
searchforge doctorDoctor performs real, bounded probes and reports each provider's access tier, capability, latency, and error. A failed source produces degraded, not a misleading all-or-nothing status.
MCP
SearchForge exposes three stdio tools:
web_search— routed, citation-ready structured searchread_url— clean Markdown from a public URLsearch_status— live capability and latency report
{
"mcpServers": {
"searchforge": {
"command": "node",
"args": ["/absolute/path/to/SearchForge/dist/mcp.js"],
"env": {
"SEARCHFORGE_SEARXNG_URL": "http://localhost:8080"
}
}
}
}The search and status tools return MCP structured content as well as readable text.
Run the MCP server straight from GitHub without a clone:
{
"mcpServers": {
"searchforge": {
"command": "npx",
"args": [
"--yes",
"--package",
"github:divyanshu-iitian/SearchForge",
"searchforge-mcp"
]
}
}
}SearchForge is also published in the
official MCP Registry
as io.github.divyanshu-iitian/searchforge. To run the registry-backed OCI image
directly from any MCP client that supports a Docker command:
{
"mcpServers": {
"searchforge": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/divyanshu-iitian/searchforge-mcp:0.2.0"
]
}
}
}REST API
Search
POST /v1/search
Content-Type: application/json
{
"query": "open source reranking models",
"category": "academic",
"limit": 8,
"language": "en",
"freshness": "month",
"safeSearch": "moderate"
}{
"schemaVersion": "1.0",
"query": "open source reranking models",
"category": "academic",
"results": [
{
"title": "Example work",
"url": "https://doi.org/10.0000/example",
"snippet": "Authors · Publisher · journal-article",
"source": "crossref",
"sources": ["crossref"],
"score": 0.016393
}
],
"providers": [
{
"provider": "crossref",
"ok": true,
"latencyMs": 241,
"resultCount": 8
}
],
"tookMs": 243,
"cached": false
}Read
POST /v1/read
Content-Type: application/json
{"url":"https://example.com/article"}Other endpoints:
GET /healthz Process liveness
GET /v1/providers Configured capabilities and access tiers
GET /v1/doctor Live dependency healthSee the full OpenAPI contract.
TypeScript SDK
import {
CrossrefProvider,
GithubProvider,
JinaReader,
SearchForge,
} from "searchforge-rag";
const forge = new SearchForge({
providers: [new GithubProvider(), new CrossrefProvider()],
reader: new JinaReader(),
timeoutMs: 8_000,
});
const evidence = await forge.search({
query: "agentic retrieval",
category: "academic",
limit: 10,
});
const page = await forge.read("https://example.com/research");Until an npm release is published:
npm install github:divyanshu-iitian/SearchForgeProvider details
Provider | Capability | Access | Enabled |
Web | Self-hosted, no vendor fee |
| |
Wikipedia | Web knowledge fallback | No key | Always |
Code repositories | No key; 60 unauthenticated REST requests/hour, search has tighter limits | Always | |
Academic metadata | No key; | Always | |
Community | No key; community-operated availability | Always | |
URL to Markdown | No key; documented no-key quota currently 20 RPM | Always | |
Web | API key |
|
SearchForge intentionally does not configure public SearXNG instances. They often disable JSON or limit automated traffic; the Docker stack is the stable free path.
How it works
Agent / RAG / MCP client
|
validate + route
|
+--------+---------+-----------+
| | | |
web code academic community read_url
| | | | |
SearXNG GitHub Crossref Hacker News Jina Reader
Wikipedia
+--------+---------+-----------+
|
normalize -> canonicalize -> deduplicate -> reciprocal-rank fusion
|
versioned evidence + provenance + per-source healthEach idempotent provider call has its own abortable timeout. One outage cannot erase healthy results. Tracking parameters are removed before deduplication, and every contributing provider remains in sources.
This capability-first design is inspired by Agent Reach. Agent Reach helps an agent operate many upstream tools directly; SearchForge complements that approach with one stable, embeddable retrieval API for RAG applications.
Configuration
Variable | Default | Purpose |
| unset | Private SearXNG base URL |
| unset | Optional GitHub quota increase |
| unset | Crossref polite-pool identity |
| unset | Optional Brave backend |
| unset | REST bearer or |
|
| REST port |
|
| Bind address |
|
| Per-dependency timeout |
|
| In-memory cache TTL |
|
| Cache entry bound |
|
| Requests/client/minute |
Production boundary
Set an API key before binding to a public interface.
Search results and page content are untrusted input; delimit them and apply prompt-injection defenses.
The built-in cache and rate limiter are process-local. Use shared infrastructure for multiple replicas.
Provider bodies and credentials are excluded from surfaced errors.
healthzproves the process is alive;/v1/doctorchecks dependencies.
See SECURITY.md, CONTRIBUTING.md, and CHANGELOG.md.
Principles
Evidence over generated answers
Free and self-hosted paths before vendor lock-in
Partial results over total failure
Honest capability and quota reporting
Stable contracts and explicit provenance
No telemetry by default
License
MIT © Divyanshu.
If SearchForge helps your agent, star the repository and share your integration in Discussions.
Available Tools
1 toolsearch_statusCheck SearchForge capabilitiesARead-onlyIdempotent
Probe every configured search provider and the URL reader, returning availability, latency, and failure details. Use this to diagnose SearchForge setup or provider outages, not to search for content. The probe is read-only but makes small external test requests that may count against provider rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide read-only, idempotent, open-world hints. The description adds critical detail about making small external test requests that may count against rate limits, going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding essential information: purpose, usage guidance, and behavioral detail. No redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no parameters, the description fully explains the tool's functionality, return content, and side effects, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool probes every configured search provider and URL reader, returning availability, latency, and failure details, and explicitly distinguishes from searching for content, leaving no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use (diagnose setup or provider outages) and when not to (not for content search), and mentions rate limit implications. However, with no sibling tools, alternative guidance isn't needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no risk of confusion between tools. The tool's purpose is clearly distinct from any hypothetical other tools.
Only one tool exists, so naming consistency is trivially maintained. The name 'search_status' is clear and follows a predictable pattern.
The server is named SearchForge, implying search capabilities, but it contains only a diagnostic tool. One tool is far too few for the implied scope, resulting in a severe under-scoping.
The server completely lacks any search-related tools, which is its apparent core domain. The single tool is for health-check diagnostics, leaving a massive gap in functionality.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Related MCP Servers
- AlicenseAqualityAmaintenanceA local-first, no-API-key MCP server that enables LLMs to search the web, fetch pages, and read documents using multiple engines and smart fallbacks.1060MIT
- AlicenseNot gradedqualityBmaintenanceA self-hosted, MCP-native web-search backend for AI agents that provides meta-search, clean extraction, RAG with citations, and GitHub project selection.2MIT
- AlicenseAqualityBmaintenanceFree, unlimited web search MCP server powered by Google AI Mode (Gemini) without API key. Provides real-time search results for AI agents like Claude, Cursor, and Windsurf.2MIT
- AlicenseAqualityAmaintenanceFree self-hosted web search for AI agents with multi-engine parallel search, semantic re-ranking, and native China network support. Zero API keys.225MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/divyanshu-iitian/SearchForge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server