Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
Managed Apache Solr for agents: hybrid BM25+kNN search, server-side embeddings, RAG answers
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
OPENSOLR_EMAIL, OPENSOLR_API_KEY标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"opensolr": {
"command": "uvx",
"args": [
"opensolr-mcp"
],
"env": {
"OPENSOLR_EMAIL": "your-value",
"OPENSOLR_API_KEY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add opensolr --env OPENSOLR_EMAIL=your-value --env OPENSOLR_API_KEY=your-value -- uvx opensolr-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"opensolr": {
"command": "uvx",
"args": [
"opensolr-mcp"
],
"env": {
"OPENSOLR_EMAIL": "your-value",
"OPENSOLR_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"opensolr": {
"type": "stdio",
"command": "uvx",
"args": [
"opensolr-mcp"
],
"env": {
"OPENSOLR_EMAIL": "your-value",
"OPENSOLR_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过域名 opensolr.com 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:OPENSOLR_EMAIL, OPENSOLR_API_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.8.1)于28天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
mcp-name: com.opensolr/opensolr-mcp
MCP (Model Context Protocol) server for Opensolr — gives any AI agent managed Apache Solr search as tools: hybrid (BM25 + kNN) retrieval, server-side GPU embeddings, document indexing (local files and folders too, PDFs page by page, scans through OCR), and grounded RAG answers.
See it live (real news index, hybrid + AI answer): https://search.opensolr.com/news__dense?q=how+am+I+supposed+to+save+money%3F
No embedding model to configure. No vector database to run. One API key.
| Tool | What it does |
|---|---|
opensolr_search | Hybrid (keyword + semantic) or pure semantic search, with Solr filters and a date range; a PDF comes back as its best page, with a link that opens it at that page |
opensolr_search_by_image | Search with a photo — Opensolr reads its visual labels, OCR text and any barcode/QR, then searches with those words (no image vector stored) |
opensolr_read_document | Read one result in full — a PDF page by page, any other document as one text |
opensolr_ai_answer | Grounded RAG answer: top hybrid hits become the LLM context — same pipeline as the hosted search UI |
opensolr_index_files | Index a local file or a whole folder: PDFs one document per page, Word / RTF / OpenDocument / text / HTML, scans and pictures through OCR |
opensolr_extract_text | Read local files without indexing them: text, OCR of their pictures, a PDF page by page |
opensolr_describe_image | What a picture shows (a sentence), the text printed on it, its labels and barcodes |
opensolr_add_documents | Index plain text + metadata (embedded server-side) |
opensolr_delete_documents | Remove documents by id |
opensolr_list_indexes / opensolr_index_info | Inspect the account's indexes |
opensolr_create_index | Provision a vector index in a region of opensolr_vector_regions (an environment id, or a short form like us matched against that live list) |
opensolr_vector_regions | Live list of vector-enabled regions |
opensolr_check_schema | Whether an index can do what each tool needs (Data Ingestion, vector and hybrid search, PDF pages, keyword search), and exactly why not |
opensolr_apply_schema | Install the Opensolr vector schema on an index of a vector region (replaces its configuration; force when it holds documents) |
Get a free Opensolr account (free forever, no card) at opensolr.com/register and copy your API key from Account.
There is a public demo account. Point the package at it and everything in this README works immediately, with no signup:
export OPENSOLR_EMAIL=mcp@opensolr.com
export OPENSOLR_API_KEY=420b8b23e7b12dc8ab838932145a5065
mcp_demo_d1__dense is already loaded with 300 news articles, so search, filtering and grounded answers work the moment you connect. You also get the write path: create your own index on the account, ingest into it and query it. Deletion is not available on this shared key: no index here can be deleted or reconfigured by hand. Whatever you create is removed automatically after 3 days.
Know what you are working with:
When you want an index that is private, yours and still there next week, get your own key — free forever, no card — and change the two variables above. Nothing else in your code changes.
{
"mcpServers": { "opensolr": { "command": "uvx", "args": ["opensolr-mcp"], "env": { "OPENSOLR_EMAIL": "you@example.com", "OPENSOLR_API_KEY": "YOUR_OPENSOLR_API_KEY" } } } }
Same shape — stdio transport, command uvx opensolr-mcp (or pipx run opensolr-mcp), with OPENSOLR_EMAIL and OPENSOLR_API_KEY in env.
You: Index our FAQ answers, then find everything about refunds.
The agent calls
opensolr_add_documents(index="faq__dense", texts=[...]),
then
opensolr_search(index="faq__dense", query="refund policy", hybrid=True)
— BM25 catches the exact word "refund", kNN catches "giving customers their
money back", and the scores fuse per document.
opensolr_search_by_image lets the agent search with a picture instead of a text query. Opensolr reads the image three ways — visual labels (what it depicts), OCR text (words printed on it), and any barcode / QR code — turns that into words, and runs the normal search. No image vector is stored.
opensolr_search_by_image(index="catalog__dense", image_path="/tmp/shelf.jpg",
using="auto", k=5)
search_mode, mode, alpha, fresh_bias, filter_query, date_from, date_to and group_pages behave exactly as in opensolr_search.
opensolr_index_files indexes a file or a whole folder from the machine the server runs on. Each file is read on Opensolr's servers — its text, the text in its pictures (OCR, more than 100 languages), a short description of the pictures that have no text — and a PDF is indexed one document per page, so a search lands on the page that answers it instead of a 200-page file that mentions it somewhere. Word, RTF, OpenDocument, text, HTML and picture files (scans, photos of documents) are one document each.
opensolr_index_files(index="contracts__dense", path="~/Documents/contracts",
pattern="*.pdf", metadata={"team": "legal"})
uri is https://ingest.opensolr.com/ / , where source is the file's path from the folder you sent (also in meta_source); its date is the file's modification time, so date ranges work on local files too.wait_seconds comes back under pending; call the tool again with the same path to index those (nothing is sent twice).opensolr_extract_text does the same reading without indexing anything — the text of each file, a PDF as its pages (page, text, is_ocr, lang) — for an agent that wants to read a contract, a scanned invoice or a folder of reports itself.
opensolr_describe_image answers what a picture shows and what is written on it: caption (a sentence), text (OCR), labels and barcode / QR codes.
On an index where PDFs are stored page by page (files indexed above, PDFs sent to Data Ingestion with rtf, PDFs found by the Web Crawler), opensolr_search returns each PDF once, as its best page:
{"title": "Master services agreement", "page": 14,
"page_url": "https://example.com/msa.pdf#page=14", # opens the PDF at that page "document_id": "9f2c...", # for opensolr_read_document "more_pages": [{"page": 3, "page_url": "...#page=3"}, ...], # its other matching pages "matching_pages": 4, "uri": "https://example.com/msa.pdf", ...}
group_pages=false returns the pages as separate results. opensolr_read_document reads any result in full: a PDF as its pages in order (page_from / page_to), any other document as one text.
date_from and date_to (YYYY-MM-DD, both included, either one can be left out) keep only the documents dated in that period (creation_date). They combine with every other option, fresh_bias included.
The query string understands the operators people already expect from a search box. They work in every mode — keyword, hybrid and pure vector.
| Operator | Meaning | Example |
|---|---|---|
"word1 word2" | Phrase — those words together, in that order | "machine learning" |
+word | Required — every result must contain it | +laptop 15 inch gaming |
+"word1 word2" | Required phrase | +"13 inch" |
-word | Excluded — drop any document containing it | laptop -refurbished |
-"word1 word2" | Excluded phrase | -"open box" |
They compose: +laptop +"13 inch" -refurbished returns only 13-inch laptops and never a refurbished one.
A prefixed term (+ or -, word or phrase) becomes a filter, applied to the whole result set. That matters as soon as a vector is involved: the semantic side of a hybrid search has no concept of negation, so left as query text -refurbished would actually pull refurbished listings *towards* the top rather than removing them. As a filter it binds every document, whichever side of the search found it, and the exclusion is absolute.
An unprefixed phrase ("machine learning" with no + in front) is a keyword-side relevance signal rather than a filter — use +"machine learning" when you need it enforced.
+ and - only count at the start of a word, so e-mail, covid-19 and 1+1 are searched for literally.
opensolr_vector_regions returns the regions that take new indexes right now (environment id, country, Solr version). location= takes an environment id from that list, or a short form such as us, de or fi, matched against the live list by environment id or country. Additional dedicated regions can be deployed on request (paid add-on): support@opensolr.com./select API — nothing is locked behind the tools.langchain-opensolr · Product page: opensolr.com/langchainWrites go through Opensolr's Data Ingestion API — the same pipeline the Drupal and WordPress connectors use. It is asynchronous: documents are queued, then embeddings, sentiment, language and all crawler-identical derived fields are computed server-side, and documents become searchable within about a minute. Progress is visible in Control Panel → Data Ingestion — a per-job status board (queued / processing / completed / failed, with processed / success / failed document counts per job) — and via the ingest_status API. Each document's identity is its uri (the Solr id is md5(uri)): pass a real URL in metadata ({"uri": "https://..."}), or a deterministic one is synthesized from your id. Re-submitting the same uri updates the docume
只显示了开头部分;其余内容请在仓库中阅读