Ask a coding agent to fix an obscure build error and it will usually search the web first. What happens next depends on the search tool. If the tool only returns ten titles and two-line snippets, the agent has to guess which link has the answer, call a separate fetch tool, and then spend context on raw HTML, navigation menus and cookie banners.
Developers who compare web search MCP servers for Claude Code and Cursor tend to want the same things:
- the full text of the accepted Stack Overflow answer or the GitHub issue thread, not a snippet;
- clean Markdown instead of raw HTML that wastes context;
- search and read without wiring up two servers;
- no juggling API keys across tools and machines.
This post turns those into a checklist, then shows how Search1API's hosted MCP server handles each one and how to connect it to your editor.
What to look for in a web search MCP server
Question | Why it matters for a coding agent |
|---|---|
Can one call return full page text, not just snippets? | Saves a round trip and a second tool |
Is the page text Markdown with page chrome removed? | Less context spent on navigation and ads |
Does it handle developer sites specially? | Q&A threads, READMEs and package pages have structure worth keeping |
Can it search GitHub issues and discussions, not only repositories? | Most error messages are answered in an issue thread |
How does it authenticate? | OAuth means no keys pasted into config files |
Remote or local? | Remote means one URL that works the same on every machine |
How is it billed? | Agents call tools in loops; per-call cost adds up |
Use these questions to evaluate any server. Below is how Search1API answers them.
One hosted server: search, read and parse
Search1API runs a hosted MCP server at:
https://mcp.search1api.com/mcpIt exposes eight tools:
Tool | What it does |
|---|---|
| Web search across Google, Bing, DuckDuckGo, GitHub, Reddit, arXiv, YouTube and more |
| News search |
| Describe what you need; Search1API picks the engines and time window |
| Read a URL as Markdown |
| List a site's links |
| GitHub and Hacker News trends |
| Show selected sources as cards or a list; no search credits |
| Report a wrong result or a missing capability; no credits |
Search and read in one call
The search tool takes a crawl_results parameter: the number of top results to read in full. With crawl_results: 3, the top three results come back with their whole page text instead of a snippet, in the same tool call. The agent doesn't need a second fetch step for the pages it is most likely to use.
Dedicated parsers for developer sites
crawl works on any public URL. For a set of sites developers read constantly, Search1API also maintains dedicated handling that returns structured Markdown:
- Stack Overflow and every Stack Exchange site are read through the public Stack Exchange API. You get the question, the full answer thread with scores, and the accepted answer flagged, not just ranked first. An answer permalink resolves to its whole thread.
- GitHub READMEs, file (blob) views and
raw.githubusercontent.comfiles go through a dedicated converter. - Hacker News story pages come back with their comment trees.
- npm and PyPI package pages are read from the registries' own JSON APIs.
Other pages, including GitHub issue pages, go through generic extraction, which still returns readable text rather than raw HTML.
GitHub search that finds issues
With search_service: "github", search returns issues, pull requests and discussions alongside repositories. Each result is labelled with kind (repo, issue, pr or discussion), and threads include their comment count. A query like tanstack start hydration error returns the matching issue threads, not only repositories. Add a GitHub qualifier such as is:issue to search one type only.
OAuth instead of pasted keys
The server supports OAuth 2.1 with dynamic client registration. An OAuth-aware client only needs the URL: on first connect it opens a browser sign-in, and there is no API key to store in your dotfiles. Clients without OAuth can still send an API key as a bearer header.
Current protocol, old clients still work
The server implements MCP revision 2026-07-28 (the stateless revision), and clients on the 2025 revisions keep working unchanged. See MCP 2026-07-28: The Protocol Goes Stateless for what changed.
Set it up in your editor
Claude Code
claude mcp add --transport http search1api https://mcp.search1api.com/mcpRun /mcp in Claude Code and sign in when prompted. To use an API key instead:
claude mcp add --transport http search1api https://mcp.search1api.com/mcp \
--header "Authorization: Bearer YOUR_SEARCH1API_KEY"On a paid Claude plan, you can instead install the Search1API plugin. It bundles the same tools with an Agent Skill, and it syncs to Claude Code v2.1.273 or later when you're signed in with the same account.
Cursor
Install from the Cursor Directory with Add to Cursor, then sign in when the browser opens. Or add this to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"search1api": {
"url": "https://mcp.search1api.com/mcp"
}
}
}Cursor discovers the authorization server and prompts you to sign in.
VS Code
VS Code uses servers (not mcpServers) and requires type:
{
"servers": {
"search1api": {
"type": "http",
"url": "https://mcp.search1api.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_SEARCH1API_KEY"
}
}
}
}Windsurf
Windsurf passes the key in the URL:
{
"mcpServers": {
"search1api": {
"serverUrl": "https://mcp.search1api.com/mcp?apiKey=YOUR_SEARCH1API_KEY"
}
}
}A key in a URL can end up in logs, so prefer OAuth or a header wherever the client supports one.
OpenCode
OpenCode has a native plugin that registers the tools directly, without an MCP bridge:
opencode plugin opencode-search1apiIt reads SEARCH1API_KEY, or reuses the OAuth session from s1 login if you have the Search1API CLI installed.
Run it locally
To run the server over stdio instead of connecting to the hosted endpoint:
{
"mcpServers": {
"search1api": {
"command": "npx",
"args": ["-y", "search1api-mcp@latest"],
"env": { "SEARCH1API_KEY": "YOUR_SEARCH1API_KEY" }
}
}
}What it costs
MCP tool calls cost the same as calling the API directly. A search or news call is 1 credit, and each page successfully read through crawl_results adds 1 more. render_results and send_feedback are free. New accounts get 100 free credits with no card required.
FAQ
Do I still need a separate fetch MCP server?
Usually not. crawl reads any public URL as Markdown, and crawl_results reads the top search results within the same search call.
How is this different from running a SearXNG MCP server?
A SearXNG MCP server sends queries through your own SearXNG instance, so result quality depends on how that instance's upstream engines treat its IP. It also leaves reading pages to another tool. Search1API is a hosted service: the same server searches and reads pages, and it adds the dedicated parsers above.
Remote or local — which should I use?
Use the remote endpoint if you want OAuth and the same URL on every machine. Use the local npx package if your client only supports stdio; it uses an API key.
Which clients have been tested?
Setup instructions are maintained for Claude, Cursor, OpenCode, VS Code and Windsurf. Any client that supports remote MCP over HTTP can use the same URL.
Get started
Sign up at app.s1.dev for 100 free credits, then add https://mcp.search1api.com/mcp to your editor. The full tool reference is on the MCP server page.
No comments yet