Get started with Webpill
Add web search to any AI agent in under 2 minutes. One URL, three tools, structured JSON responses in <50ms.
Quickstart
Webpill is an MCP (Model Context Protocol) server. Connect it to any MCP-compatible client — no SDK installation, no API keys to manage during beta.
01Claude Desktop
Open Claude Desktop settings, navigate to the MCP section, and add Webpill as a server. Edit your claude_desktop_config.json:
{
"mcpServers": {
"webpill": {
"url": "https://mcp.webpill.dev"
}
}
}Config location: macOS ~/Library/Application Support/Claude/claude_desktop_config.json
02Cursor
In Cursor, go to Settings → MCP and add a new server:
{
"mcpServers": {
"webpill": {
"url": "https://mcp.webpill.dev"
}
}
}Restart Cursor after saving. The Webpill tools will appear in your AI chat.
03Any MCP Client
Webpill supports both Streamable HTTP and SSE transports. Point any MCP-compatible client to:
https://mcp.webpill.devSupported transports:
API Reference
Webpill exposes three MCP tools. When connected via MCP, your AI agent can call these tools directly. You can also call them via HTTP REST.
web_search
Search the web and get structured results. Returns titles, URLs, snippets, and metadata.
| Param | Type | Required | Description |
|---|---|---|---|
| query | string | required | The search query |
| num_results | number | optional | Number of results to return (default: 10, max: 50) |
| language | string | optional | Language code, e.g. 'en', 'fr', 'de' |
| region | string | optional | Region code, e.g. 'us', 'eu', 'uk' |
Example request
{
"tool": "web_search",
"arguments": {
"query": "best open source LLM frameworks 2025",
"num_results": 5
}
}Example response
{
"results": [
{
"title": "Top Open Source LLM Frameworks in 2025",
"url": "https://example.com/article",
"snippet": "A comprehensive guide to the best open source...",
"published_date": "2025-01-15"
}
],
"total_results": 5,
"query": "best open source LLM frameworks 2025",
"response_time_ms": 42
}fetch_page
Fetch any URL and get its content as clean, parsed text. Handles JavaScript rendering, removes ads and boilerplate — returns just the content.
| Param | Type | Required | Description |
|---|---|---|---|
| url | string | required | The URL to fetch |
| format | string | optional | Output format: 'text' (default), 'markdown', or 'html' |
| max_length | number | optional | Max content length in characters (default: 50000) |
Example request
{
"tool": "fetch_page",
"arguments": {
"url": "https://docs.anthropic.com/en/docs/agents",
"format": "markdown"
}
}Example response
{
"content": "# Building Agents with Claude\n\nAgents are AI systems that can...",
"url": "https://docs.anthropic.com/en/docs/agents",
"title": "Building Agents - Anthropic Documentation",
"content_type": "text/html",
"word_count": 2847,
"response_time_ms": 38
}extract
Extract structured data from a web page. Define what you want using a natural language prompt, and get back clean JSON.
| Param | Type | Required | Description |
|---|---|---|---|
| url | string | required | The URL to extract data from |
| prompt | string | required | What data to extract (natural language) |
| schema | object | optional | Optional JSON schema for the output structure |
Example request
{
"tool": "extract",
"arguments": {
"url": "https://news.ycombinator.com",
"prompt": "Extract the top 5 stories with title, URL, points, and comment count"
}
}Example response
{
"data": [
{
"title": "Show HN: I built a web search MCP server",
"url": "https://example.com/post",
"points": 342,
"comment_count": 127
}
],
"url": "https://news.ycombinator.com",
"items_extracted": 5,
"response_time_ms": 45
}Code Examples
Use Webpill from any language. Connect via MCP client libraries or call the HTTP endpoint directly.
Python— using mcp client library
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
# Connect to Webpill MCP server
async with streamablehttp_client("https://mcp.webpill.dev") as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
# Search the web
result = await session.call_tool("web_search", {
"query": "latest Python 3.13 features",
"num_results": 5
})
print(result)
# Fetch a page
page = await session.call_tool("fetch_page", {
"url": "https://docs.python.org/3.13/whatsnew",
"format": "markdown"
})
print(page)
# Extract structured data
data = await session.call_tool("extract", {
"url": "https://pypi.org/project/fastapi",
"prompt": "Get package name, version, description, and download count"
})
print(data)
import asyncio
asyncio.run(main())Install: pip install mcp
TypeScript— using @modelcontextprotocol/sdk
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://mcp.webpill.dev")
);
const client = new Client({
name: "my-app",
version: "1.0.0",
});
await client.connect(transport);
// Search the web
const searchResult = await client.callTool({
name: "web_search",
arguments: {
query: "best TypeScript ORMs 2025",
num_results: 5,
},
});
console.log(searchResult);
// Fetch a page as markdown
const page = await client.callTool({
name: "fetch_page",
arguments: {
url: "https://orm.drizzle.team/docs/overview",
format: "markdown",
},
});
console.log(page);
// Extract structured data
const data = await client.callTool({
name: "extract",
arguments: {
url: "https://npmjs.com/package/drizzle-orm",
prompt: "Get package name, latest version, weekly downloads",
},
});
console.log(data);Install: npm install @modelcontextprotocol/sdk
cURL— direct HTTP endpoint
# Search the web
curl -X POST https://mcp.webpill.dev/call \
-H "Content-Type: application/json" \
-d '{
"tool": "web_search",
"arguments": {
"query": "MCP protocol specification",
"num_results": 5
}
}'# Fetch and parse a page
curl -X POST https://mcp.webpill.dev/call \
-H "Content-Type: application/json" \
-d '{
"tool": "fetch_page",
"arguments": {
"url": "https://example.com",
"format": "markdown"
}
}'# Extract structured data
curl -X POST https://mcp.webpill.dev/call \
-H "Content-Type: application/json" \
-d '{
"tool": "extract",
"arguments": {
"url": "https://github.com/trending",
"prompt": "Get top 5 trending repos with name, stars, language"
}
}'Why Webpill
Stop fighting with browser automation, CAPTCHAs, and slow headless browsers. Webpill gives you web data as fast as a database query.
40×
faster than browser agents
50ms vs 2-5s
$49
flat monthly price
vs $100-500+ /mo
1
URL to configure
zero infrastructure
vs Browserbase
Browserbase charges per browser session ($0.01–0.05+ per request) and requires managing headless browser infrastructure. Webpill is a flat $49/mo with unlimited calls, no browser sessions to manage, and 40× faster responses.
vs Firecrawl
Firecrawl's Starter plan is $49/mo for 3,000 credits. Webpill gives you unlimited calls at the same price, plus native MCP integration — no SDK wrappers needed. And you get web search + extraction built in, not just crawling.
vs DIY (Puppeteer / Playwright)
Building your own scraping infra means managing browser pools, handling CAPTCHAs, proxy rotation, and HTML parsing. Webpill replaces all of that with a single URL. Spend time building your product, not fighting anti-bot systems.
Ready to get started?
Join the waitlist and get free access during beta. One URL, three tools, under 50ms.
Join Waitlist