solocrawl
Searches arXiv for academic papers.
Searches the web using DuckDuckGo and returns results.
Searches GitHub repositories.
Searches MDN Web Docs for web development documentation.
Looks up package versions from npm (Node Package Manager).
Looks up package versions from NuGet (.NET).
Looks up package versions from Packagist (PHP Composer).
Searches PubMed for biomedical literature.
Looks up package versions from PyPI (Python Package Index).
Searches Reddit for posts and discussions.
Looks up package versions from RubyGems (Ruby).
Searches via a self-hosted SearXNG instance.
Searches the Stack Exchange network (including Stack Overflow) for questions and answers.
Looks up package versions for Swift packages via GitHub git tags.
Searches Wikidata entities.
Searches Wikipedia for articles and returns relevant results.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@solocrawlsearch for python async programming tips"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SoloCrawl is a small, self-hosted, fully async Python tool that does three things well: it searches the web across many sources at once, scrapes pages into clean markdown that's ready for an LLM, and looks up the latest package version from official registries. It runs on your machine, for free, and works the moment you install it β nothing to sign up for, no keys to paste.
It's built for individual developers and people tinkering with local LLMs. Use it as an MCP server (LM Studio, Claude Desktop, OpenCode, β¦), straight from the CLI, or as a Python library.
β¨ Highlights
π Zero config | Search, scrape, and package lookup all work out of the box β no accounts, no keys. |
π Federated search | Queries 11 possible sources, merges them with Reciprocal Rank Fusion and de-duplicates URLs into one clean ranking. |
π Smart scraping | HTML β tidy markdown via |
π¦ Live package versions | 10 ecosystems (PyPI, npm, crates.io, Maven, Go, β¦) resolved live from official registries β never a stale local DB. |
π€ MCP-native | Drops straight into local LLM tooling as a stdio MCP server with five ready tools. |
β‘ Fully async, bounded | One shared HTTP client, one recycled browser, global + per-domain concurrency limits. Fast without hammering anyone. |
π§© Hackable | Add a search or package provider as a single self-registering file β the core stays untouched. |
π Safe by default | Blocks localhost/private/cloud-metadata targets and honours |
Related MCP server: Local-MCP-server
π Quick start
The recommended way to install SoloCrawl is pipx β it drops the solocrawl and solocrawl-mcp
commands onto your PATH in their own isolated environment, so you can run them from anywhere without
juggling a virtualenv:
git clone https://github.com/hlavacm/solocrawl.git
pipx install ./solocrawl # or an absolute path: pipx install /path/to/solocrawlAlready on PyPI? Then it's just
pipx install solocrawlβ no checkout needed.
That's it β now run the three core commands from any directory:
# Scrape a page to markdown
solocrawl scrape https://example.com
# Federated web search (Wikipedia + DuckDuckGo + StackExchange by default)
solocrawl search "python asyncio semaphore" --limit 5
# Live package version lookup
solocrawl package requests --ecosystem pypiUpdating
# Installed from PyPI:
pipx upgrade solocrawl
# Installed from a local checkout β pull the latest changes, then reinstall:
cd /path/to/solocrawl && git pull && pipx install --force . # alias: pipx reinstall solocrawlAfter upgrading, restart your MCP client (LM Studio, Cursor, Claude Desktop, β¦) so it picks up the new
solocrawl-mcp binary β your mcp.json needs no changes as long as it points at solocrawl-mcp on
your PATH.
What you can do
π Search the web
One query, many sources, a single merged ranking β no single provider deciding everything for you.
solocrawl search "python asyncio semaphore" --limit 5
# Pick exactly which sources to hit, and get machine-readable output
solocrawl search "django orm" --sources wikipedia,stackexchange --jsonπ Scrape a page to clean markdown
Turn any URL into LLM-ready markdown with page metadata (title, author, date, β¦) as front-matter.
solocrawl scrape https://example.com
# Save to a file, or force the browser for a JS-rendered page
solocrawl scrape https://example.com --out page.md
solocrawl scrape https://example.com --force-browserπ¦ Look up package versions
The current version β and the one matching your constraint β straight from the official registry.
solocrawl package react --ecosystem npm --constraint ">=18,<19"
solocrawl package monolog/monolog --ecosystem packagist --json
solocrawl package some-lib --ecosystem pypi --allow-prereleaseπ§ͺ Research in one shot
The classic LLM workflow β search, scrape the top hits, and get back one aggregated, cited report.
solocrawl research "python asyncio semaphore" --depth 3ποΈ Batch-scrape many URLs
Fetch a whole list at once under the same bounded concurrency; --out-dir writes one file per URL.
solocrawl batch https://example.com https://www.python.org --out-dir /tmp/scrape
solocrawl batch --from-file urls.txt --out-dir /tmp/scrapeβ¦and see what's available
# List every registered provider (search + package), default vs. opt-in
solocrawl providersπ€ Use it with your local LLM (MCP)
This is where SoloCrawl really shines β give your local model (LM Studio, OpenCode, Claude Desktop, β¦)
the ability to search, scrape, and check versions. The pipx install from the
Quick start already put solocrawl-mcp on your PATH, so all that's left is pointing
your MCP client at it.
LM Studio / Claude Desktop β ready-to-use config at examples/mcp.json.
Drop it into your client's MCP settings (mcp.json):
{
"mcpServers": {
"solocrawl": {
"command": "solocrawl-mcp",
"args": [],
"env": {
"SOLOCRAWL_LOG_LEVEL": "INFO",
"SOLOCRAWL_LOG_FILE": "~/.local/state/solocrawl/mcp.log"
}
}
}
}OpenCode β uses a different config format. Copy
examples/opencode.jsonc into ~/.config/opencode/opencode.jsonc
(global) or opencode.jsonc in your project root. OpenCode expects type: "local", command as an
array, and environment instead of env.
If your MCP client doesn't inherit your shell PATH, replace "solocrawl-mcp" with the full path
from which solocrawl-mcp (typically ~/.local/bin/solocrawl-mcp after pipx install). Logs go to
stderr (visible in LM Studio Developer Logs) and optionally to SOLOCRAWL_LOG_FILE.
The server exposes five tools:
web_search(query, limit=5, sources=None)β federated search across enabled providersscrape(url)β fetch and extract markdown (with page metadata) from a URLresearch(query, depth=3)β search, scrape the top results, and return an aggregated cited reportpackage_version(name, ecosystem, constraint=None, allow_prerelease=False)β live registry lookuplist_providers(provider_type="all")β list registered search/package providers (default vs. opt-in)
To check the active version and command path:
pipx list | grep solocrawl
which solocrawl-mcpWorking from a local clone? A
pipx-installedsolocrawl-mcpis a snapshot β editing the repo does not update the command on yourPATH, so your MCP client keeps running the old code. After changing the source, refresh it withpipx install --force .(or install once withpipx install --editable .so future edits are picked up automatically).
π Use it from Python
import asyncio
from solocrawl.config import load_config
from solocrawl.core.search import federated_search, select_providers
from solocrawl.core.search.providers import duckduckgo, stackexchange, wikipedia # noqa: F401
async def main() -> None:
providers = select_providers(load_config())
results = await federated_search(providers, "asyncio python", limit=3)
for result in results:
print(result.title, result.url)
asyncio.run(main())See examples/library_search.py for a runnable example.
Search providers
Default (zero-config, always enabled):
Provider | Source |
| MediaWiki API |
|
|
| Stack Exchange API (Stack Overflow) |
Opt-in (enable with SOLOCRAWL_ENABLE_PROVIDERS):
Provider | Source |
| Wikidata entity search |
| Hacker News (Algolia) |
| arXiv Atom API |
| PubMed/NCBI E-utilities |
| GitHub repository search |
| MDN Web Docs search |
| Reddit post search ( |
| Self-hosted SearXNG (set |
SOLOCRAWL_ENABLE_PROVIDERS=arxiv,hackernews solocrawl search "transformer attention" --limit 6
SOLOCRAWL_ENABLE_PROVIDERS=github,mdn solocrawl search "fetch api" --limit 6Package registries
Default ecosystems: PyPI, npm, Packagist, crates.io, NuGet, Maven Central,
RubyGems, Go modules, pub.dev, Swift. Versions are always fetched live from official
registries β SoloCrawl does not maintain its own version database. Swift packages have no central
registry, so versions come from the repository's git tags (owner/repo on GitHub).
solocrawl package serde --ecosystem crates
solocrawl package Newtonsoft.Json --ecosystem nuget
solocrawl package org.junit.jupiter:junit-jupiter --ecosystem maven
solocrawl package github.com/gorilla/mux --ecosystem go
solocrawl package apple/swift-argument-parser --ecosystem swiftOptional extras
# Browser fallback for JS-heavy pages (Playwright)
pip install -e ".[browser]"
playwright install chromium
solocrawl scrape https://example.com --force-browser
# Install everything
pip install -e ".[all]"βοΈ Configuration
All defaults work with no configuration. Everything below is optional and uses the SOLOCRAWL_
prefix. For local development, copy .env.dist to .env and uncomment what you need β SoloCrawl
loads .env automatically via python-dotenv, and existing
shell environment variables take precedence.
Variable | Default | Purpose |
| (empty) | Comma-separated opt-in provider names |
| (empty) | Base URL of a self-hosted SearXNG instance (enables the |
|
| Honour |
|
| In-memory fetch cache TTL in seconds ( |
|
| Global fetch concurrency limit |
|
| Per-domain concurrency limit |
|
| Per-request timeout in seconds |
|
| Retries on network errors / rate limits |
|
| Cap on fetched response body size (10 MiB); larger bodies are truncated |
|
| Enable optional proxy layer |
|
| Proxy mode: |
| (empty) | Comma-separated proxy URLs |
| (empty) | Single rotating proxy endpoint |
| (empty) | Proxy auth username |
| (empty) | Proxy auth password |
|
| Allow scraping localhost/private IPs (dev only) |
| (SoloCrawl default) | Override HTTP User-Agent for API requests |
|
| Allow Playwright fallback when installed |
|
| Log level: |
| (empty) | Optional log file path (also logs to stderr) |
π Security note on URL fetching
By default SoloCrawl refuses to fetch localhost, link-local, private, reserved, and
cloud-metadata addresses. It checks literal hosts, DNS-resolved A/AAAA records, HTTP redirect
targets, and Playwright's final browser URL. SoloCrawl is still a single-user local tool, not a
hostile-multi-tenant proxy β do not expose it to untrusted network callers.
SOLOCRAWL_ALLOW_INTERNAL_URLS=true disables these internal-target checks entirely (intended for
trusted local development only).
π§© Extending it
The whole point of the plugin layout is that adding a source is a single self-registering file β the core never changes. To add a search provider:
Create
src/solocrawl/core/search/providers/myprovider.pyimplementingSearchProvider.Register with
@register("myprovider", zero_config=True)or as opt-in.Import the module in
src/solocrawl/core/search/providers/__init__.pyso registration runs.Add fixture-based tests in
tests/.
The same pattern applies to package providers under src/solocrawl/core/packages/providers/.
Development
Work from a checkout in a virtualenv with an editable install β this also drops the solocrawl and
solocrawl-mcp scripts into .venv/bin/:
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"Then run the quality gate:
ruff check . && ruff format --check .
pyright
pytest
# β¦or all in one line:
ruff check . && pyright && pytestEthics and terms of use
SoloCrawl is built for individual developers and local LLM tooling. It respects the robots.txt and
terms of service of target sites β scrape consults robots.txt and refuses disallowed URLs by
default (fail-open on errors; opt out with SOLOCRAWL_RESPECT_ROBOTS=false). The proxy and scraping
features are not intended to bypass site rules, captchas, or anti-bot systems. Use responsibly and
stay within legitimate access patterns.
License
MIT β see LICENSE.
Available Tools
5 toolslist_providersA
List the registered search and package providers (default vs. opt-in).
| Name | Required | Description | Default |
|---|---|---|---|
| provider_type | No | Which providers to list: 'search', 'package', or 'all'. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It adds context about default vs. opt-in providers, but does not mention safety, authentication, or side effects, which is a moderate gap for a read-only listing tool.
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?
The description is a single sentence of 12 words, front-loaded with the action and resource, with no wasted words.
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 the tool has one simple optional parameter and an output schema, the description covers the necessary contextβlisting both search and package providers with default vs. opt-in distinctionβwithout needing to explain return values due to the output schema.
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?
Schema coverage is 100%, so baseline is 3. The description adds extra meaning by explaining that providers are listed as default vs. opt-in, which is not in the schema parameter description.
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 verb 'List' and the resource 'registered search and package providers', and distinguishes between default vs. opt-in, making it distinct from sibling tools like web_search or package_version.
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?
The description implies when to use this tool (to list providers), but does not provide explicit guidance on when not to use it or mention alternatives, though the purpose is clear enough in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_versionB
Look up the latest or constraint-satisfying version of a package from a registry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Package name (Packagist: vendor/package, Maven: groupId:artifactId, Go: module path, Swift: owner/repo on GitHub). | |
| ecosystem | Yes | Registry ecosystem (pypi, npm, packagist, crates, nuget, maven, rubygems, go, pub, swift). | |
| constraint | No | Optional version constraint such as '>=4.2,<5'. | |
| allow_prerelease | No | Whether pre-release versions may be selected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the basic operation and does not explain side effects, error handling, caching behavior, or constraints like network dependency.
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?
The description is a single concise sentence that immediately conveys the tool's core function. It is front-loaded with the key verb and resource, with no extraneous information.
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 that an output schema exists (not shown but indicated) and parameters are fully described, the description is adequate but minimal. It lacks details on behavior for edge cases like non-existent packages or constraint satisfaction.
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?
Schema description coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema; it repeats the purpose but does not elaborate on parameter usage or relationships.
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's verb ('look up') and resource ('latest or constraint-satisfying version of a package'), and the specific action distinguishes it from sibling tools like web_search or scrape which are more general.
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?
No guidance is provided on when to use this tool versus alternatives, nor does it mention exclusion criteria or prerequisites. The description leaves the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchA
Search the web, scrape the top results, and return an aggregated cited report.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many top results to scrape and aggregate (default 3). | |
| query | Yes | The research query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the multi-step process (search, scrape, aggregate, cite), which is fairly transparent. However, specifics like number of results searched or citation format are omitted.
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?
The description is a single, clear sentence without superfluous words, front-loaded with the key action 'Search the web'.
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 the tool's complexity and presence of an output schema, the description covers the essential workflow and output format, though it could mention limitations like the number of initial search results.
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?
Schema coverage is 100% with clear descriptions for query and depth. The tool's description adds no additional parameter meaning beyond the schema, so baseline score applies.
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 searches the web, scrapes top results, and returns an aggregated cited report, distinguishing it from sibling tools like web_search (search only) and scrape (scrape only).
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?
Usage is implied (for research tasks requiring aggregation), but there is no explicit guidance on when to use this tool versus alternatives like web_search or scrape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrapeA
Fetch a URL and return the main page content as markdown suitable for LLM context.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The HTTP or HTTPS URL to scrape. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully convey behavioral traits. It states the action (fetch, return markdown) but omits potential side effects, rate limits, authentication needs, or limitations (e.g., no JS rendering). Adequate but not rich.
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?
Single sentence with no extraneous information. Every word serves the purpose: verb, resource, output, and context. Efficient and front-loaded.
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 the tool's simplicity (one required parameter) and existence of an output schema, the description adequately covers what the agent needs. Return format is specified, and schema handles remaining details.
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?
Schema description coverage is 100% (url parameter fully described in schema). Description adds context about output format but does not add new meaning to the parameter itself. Baseline score of 3 is appropriate.
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?
Description uses specific verb 'Fetch', identifies resource 'URL', specifies output format 'markdown', and clarifies suitability 'for LLM context'. Clearly distinguishes from sibling tools like web_search (search results) and research (deeper investigation).
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?
Description implies use when a specific URL's content is needed, but provides no explicit guidance on when not to use or alternatives. Sibling tools exist (web_search, research) but no mention of their differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchB
Search the web across SoloCrawl's configured providers and return unified results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of merged results to return. | |
| query | Yes | The search query. | |
| sources | No | Optional provider names to restrict the search (e.g. wikipedia, duckduckgo). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral traits. It fails to mention potential latencies, rate limits, result quality variations, or error handling. It only states it searches across configured providers, which is minimal.
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?
The description is a single concise sentence, but could be more informative. It is efficiently front-loaded but lacks depth.
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 the presence of an output schema, return values need no explanation. However, the tool has three parameters and siblings, and the description is minimal. It could mention the role of the 'sources' parameter or the unified nature of results in more detail.
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?
Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; it doesn't elaborate on query format or default provider behavior.
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 verb 'search' and the resource 'web' across providers with unified results. It distinguishes from siblings like 'scrape' and 'list_providers' by focusing on general web search.
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?
The description does not explicitly state when to use this tool versus siblings. While the sibling names imply different scopes, the description lacks direct guidance on context or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools like research and web_search both perform web searches, with research also scraping and aggregating results. Similarly, scrape is available alongside research's scraping capability. While descriptions differentiate them, the boundaries could confuse an agent.
Tool names mix patterns: list_providers follows verb_noun, package_version uses noun_noun, while research and scrape are bare verbs, and web_search is noun_noun. No consistent style is maintained.
Five tools cover the core functionalityβprovider listing, package version lookup, web search, scraping, and combined researchβwithout being excessive or insufficient for the server's stated purpose.
The tool set covers primary use cases (search, scrape, package lookup) but lacks features like crawling multiple pages or provider management, which are minor gaps for a research-focused server.
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
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Real-time web search, reasoning, and research through Perplexity's API
The best web search for your AI Agent
Related MCP Servers
- AlicenseAqualityAmaintenanceWeb search (embedded SearXNG), content extraction, and library docs indexing with hybrid search. No API keys required.617Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables tool-calling LLMs to search the internet, capture website images, extract webpage text, and more via a local MCP server.15
- AlicenseAqualityCmaintenanceEnables local LLMs to search the web and fetch clean content from URLs without API keys, using SearxNG and Mozilla Readability.236MIT
- AlicenseNot gradedqualityCmaintenanceEnables local LLMs to search the web, scrape pages, and extract structured data (tables, metadata) from sources like Wikipedia and IMDb, with caching and rate limiting.MIT
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/hlavacm/solocrawl'
If you have feedback or need assistance with the MCP directory API, please join our Discord server