opensolr-mcp
The server exposes an MCP interface to Opensolr-managed Apache Solr, giving AI agents full search, RAG, and index-management capabilities.
Search indexes with hybrid (BM25 + semantic kNN), pure semantic, or pure lexical modes via
opensolr_search.Get grounded RAG answers generated only from indexed content via
opensolr_ai_answer.Add documents (plain text + metadata) through the async Data Ingestion API; embeddings and derived fields are computed server-side with optional
wait.Delete documents by ids or by a raw Solr query.
Inspect your account: list indexes, get index connection info, and check ingestion job status.
Create new vector-enabled indexes in regions such as
us,de, orfi.List available vector-enabled regions dynamically.
Tune retrieval per call: hybrid mode, alpha, filters (
filter_query), field weights, freshness bias, lexical/semantic balance, and more.Use the public demo account or your own API key; everything works on any Opensolr index, including non-vector ones in lexical mode.
Provides tools for searching and managing Apache Solr indexes via Opensolr's managed service, including hybrid, lexical, and semantic search, RAG-grounded answers, document ingestion and deletion, index creation and inspection, and search tuning.
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., "@opensolr-mcpSearch my product docs for hybrid retrieval best practices"
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.
opensolr-mcp
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, 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.
Tools
Tool | What it does |
| Hybrid (keyword + semantic) or pure semantic search, with Solr filters |
| Grounded RAG answer: top hybrid hits become the LLM context — same pipeline as the hosted search UI |
| Index plain text + metadata (embedded server-side) |
| Remove documents by id |
| Inspect the account's indexes |
| Provision a vector-enabled index ( |
| Live list of vector-enabled regions |
Related MCP server: RAG MCP Server
Setup
Get a free Opensolr account (15-day trial, no card) at opensolr.com/register and copy your API key from Account.
Try it without an 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=420b8b23e7b12dc8ab838932145a5065mcp_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 full write path:
create your own index on the account, ingest into it, query it, delete it.
Know what you are working with:
Anything you create there is deleted after 3 days. Automatically, without warning or export. That includes indexes you created and every document in them.
The account is shared with everyone reading this. Your index is visible to them, they can change or delete it, and you can do the same to theirs. Never put anything real, private or client-owned in it.
The limits are per index, and deliberately small. 200 MB of bandwidth and 50 MB of disk per index. Bandwidth is the one you will hit first: it covers a demo, a tutorial and a proof of concept, and it will not carry an application.
When you want an index that is private, yours and still there next week, get your own key — free 15-day trial, no card — and change the two variables above. Nothing else in your code changes.
Claude Desktop / Claude Code
{
"mcpServers": {
"opensolr": {
"command": "uvx",
"args": ["opensolr-mcp"],
"env": {
"OPENSOLR_EMAIL": "you@example.com",
"OPENSOLR_API_KEY": "YOUR_OPENSOLR_API_KEY"
}
}
}
}Cursor / Windsurf / any MCP client
Same shape — stdio transport, command uvx opensolr-mcp (or
pipx run opensolr-mcp), with OPENSOLR_EMAIL and OPENSOLR_API_KEY in env.
Example agent session
You: Index our FAQ answers, then find everything about refunds.
The agent calls
opensolr_add_documents(index="faq__dense", texts=[...]), thenopensolr_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.
Notes
Vector-enabled indexes run on Opensolr's Solr 9.x environments — currently
us(Chicago),de(Germany),fi(Finland), fetched live viaopensolr_vector_regions. Additional dedicated regions can be deployed on request (paid add-on): support@opensolr.com.Every index is also plain Apache Solr with the native
/selectAPI — nothing is locked behind the tools.Python sibling for LangChain:
langchain-opensolr· Product page: opensolr.com/langchain
How writing works (Data Ingestion API)
Writes 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 document. Pass
{"rtf": True, "uri": "https://.../file.pdf"} and the server extracts the
text from PDF/DOCX/XLSX for you.
Lexical-only mode
Don't need vectors? Pure keyword search skips the embedding call entirely — zero AI quota, and it works on any Opensolr index, including non-vector ones and older Solr versions.
Your index schema
Documents follow the Opensolr document model (title, description, text,
meta_* custom fields). The whole schema, every field and every type suffix,
is explained in the Index Schema Reference.
To see your own copy: Control Panel → click your
index → Configuration → Edit File → schema.xml. Prefer zero-effort data
entry? Configure the Web Crawler in the Control Panel (Index Tools →
WebCrawler): add your site URL, validate it, and Opensolr indexes the whole
site for you.
Search tuning
Retrieval (search and RAG grounding) runs through the platform's tuned
pipeline: global defaults → your index's saved Search Tuning (Control
Panel → Index Settings → Search Tuning: semantic↔lexical balance, field
weights, minimum match, search mode, vector candidate pool, content quality
boost) → optional per-call overrides via tuning:
tuning={"search_mode": "keywords_required", "fw_title": 0.2,
"mm": "strict", "vector_topk": 500, "quality_boost": 0.3}Defaults match the platform's PHP configuration exactly — customize in the Control Panel once, or per call from code.
Fresh Results Bias
Rank newer documents higher without hiding anything older. Every score is
multiplied by a recency curve on creation_date — full weight for a document
published today, about half after a year:
store.similarity_search_with_score("solar inverter warranty", fresh_bias=True)
client.hybrid_search(index, query, fresh_bias=True)
client.ai_answer(index, question, tuning={"fresh_bias": 1})It re-orders and never filters: the hit count is identical either way,
nothing old becomes unreachable, and a document with no creation_date simply
keeps its place instead of being pushed to the bottom. It applies to all three
retrieval shapes — vector-only, keyword-only and the fused hybrid ranking —
because the boost wraps the final score rather than one half of it. Off by
default.
This is the same control visitors get as the Fresh toggle beside the sort options on the hosted Opensolr search page, so a query behaves identically here and there.
fresh_biasandfreshness_boostare two different knobs and the names invite confusion.freshness_boostis a hard window in days — anything older is filtered out and the hit count drops.fresh_biasfilters nothing.
How it's tested
Every release is validated against live Opensolr infrastructure — no mocks:
Unit tests (offline): location aliases, filter→fq mapping, query building, escaping.
End-to-end suite: the full write path through the async Data Ingestion queue (queued → server-side enrichment → searchable), semantic / hybrid / lexical retrieval, metadata round-trip, filters, id round-trip (your ids and the Solr
md5(uri)ids), deletes by id and by query.Real-corpus validation: searches run against a 340-document replica of opensolr.com's own production search index. Verified: pure-semantic hits with zero keyword overlap ("how do I get my data back after a disaster" → backup & restore docs), cross-lingual queries (Romanian query → English content), exact-term surfacing in hybrid mode, all four hybrid modes, and the full alpha range 0 → 1.
PDF ingestion: a real PDF ingested via
rtf:true— server-side text extraction (13k+ chars), automatic content-type detection, then retrieved with a purely semantic query against its contents.
The tools are exercised live (search modes, ingestion with wait, status, deletes, RAG answers) before every release. RAG grounding is verified end-to-end: a question answerable only from the ingested PDF returns the correct answer sourced from the PDF's extracted text.
MIT license.
Available Tools
9 toolsopensolr_add_documentsA
Index plain-text documents via the Opensolr Data Ingestion API.
Ingestion is ASYNC: embeddings, sentiment, and all derived fields are
computed server-side and documents become searchable within about a
minute (progress is visible in the Opensolr Control Panel). With
wait=true (default) this blocks until the job completes. Metadata keys
become filterable meta_* fields; metadata "uri" (a real URL) is used as
the document identity — the Solr id is md5(uri). Returns job info and
the resulting Solr document ids.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| wait | No | ||
| index | Yes | ||
| texts | Yes | ||
| metadatas | No |
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 behavioral disclosure. It reveals the async nature, server-side derived fields, ~1-minute visibility delay, wait semantics, metadata prefixing, URI-based identity with md5(uri), and that job info and Solr ids are returned. This is rich, honest context far beyond the schema.
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 lean sentences front-load the core action and then pack high-value behavioral details without fluff. Every sentence earns its place, covering asynchronous execution, identity, metadata mapping, and return value.
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?
For a moderately complex ingestion tool with no annotations and low schema detail, the description is unusually complete: async behavior, wait semantics, metadata transformation, identity strategy, and return values are all covered. The remaining gaps are minor-ish: the optional 'ids' parameter and prerequisites like the index needing to exist beforehand.
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 0%, so the description must compensate for all 5 parameters. It adds real meaning for wait (default true, blocks), metadatas (prefix meta_* fields), and uri (identity/Solr id). However, it leaves 'ids' unexplained and does not explicitly tie 'texts' and 'index' to their expected formats.
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 states a specific verb and resource: 'Index plain-text documents via the Opensolr Data Ingestion API.' It clearly identifies the operation and distinguishes it from siblings like search, list, delete, and ingest status by action and purpose.
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 usage context is implied by the operation ('Index...documents') and the detailed wait/async behavior, but it never explicitly states when to choose this over alternatives. It also fails to mention prerequisites such as an existing index or the option of using opensolr_ingest_status to poll progress when wait=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_ai_answerA
Ask a question and get a grounded RAG answer generated ONLY from the content already indexed in the given Opensolr index. Retrieval runs through the platform's tuned hybrid pipeline (the index's saved Search Tuning applies automatically) — the top rag_docs hits (first rag_words words of text each) become the LLM context, the same pipeline as the hosted search UI. filter_query optionally narrows retrieval with a raw Solr fq expression; instruction optionally replaces the default prompt (e.g. "Answer in German", "Extract a list of people"); tuning optionally overrides retrieval knobs per call. That list is the whole set, not a sample — an abbreviated one reads as everything that is supported, and freshness_boost was invisible to callers because of it: fw_title, fw_description, fw_uri, fw_text, fw_text_t, lexical_weight, vector_weight, vector_topk, search_mode (union / keywords_required / meaning_required / intersection), quality_boost, min_score, freshness_boost, fresh_bias, lexical_norm_k, mm (flexible / balanced / strict or raw Solr mm syntax). freshness_boost and fresh_bias are different knobs despite the names: the first is a hard window in DAYS that filters older documents out, the second only re-orders, multiplying each score by a recency curve on creation_date so recent documents win ties while nothing becomes unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| query | Yes | ||
| tuning | No | ||
| rag_docs | No | ||
| rag_words | No | ||
| instruction | No | ||
| filter_query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does so thoroughly: it explains that retrieval runs through a tuned hybrid pipeline, saved Search Tuning applies automatically, the top rag_docs hits are used as context, and it details tuning knobs including the subtle distinction between freshness_boost and fresh_bias. This goes well beyond a bare function statement.
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 front-loaded with the core purpose and uses clear separators for parameter explanations. The exhaustive tuning list is justified because the tuning schema is a generic object, but the meta sentence 'That list is the whole set, not a sample...' adds unnecessary narrative and could be trimmed without losing value.
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 — 7 parameters, no annotations, and a generic tuning object — the description covers all essential operational context: what the answer is grounded in, how retrieval works, how parameters affect behavior, and which tuning options are supported. Since an output schema exists, omission of return-value details is acceptable.
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 0%, so the description must compensate for all 7 parameters. It explains query as a question, index as the target index, rag_docs and rag_words as retrieval context sizing, filter_query as a raw Solr fq expression, instruction as a prompt replacement, and tuning as an override mechanism with the complete list of supported knobs. This is strong compensation.
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 a specific action: 'Ask a question and get a grounded RAG answer generated ONLY from the content already indexed in the given Opensolr index.' It identifies the tool's resource (the index) and distinguishes it from raw search or management tools by emphasizing the RAG answer and grounded retrieval pipeline.
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 gives clear context for when to use the tool: for grounded question answering over already-indexed Opensolr content, with the same retrieval pipeline as the hosted search UI. It does not explicitly contrast this with sibling tools like opensolr_search or describe when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_create_indexB
Create a new vector-enabled Opensolr index. location: us, de, fi, or any environment id from opensolr_vector_regions. Additional dedicated regions can be deployed on request (support@opensolr.com).
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| location | No | us |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does mention that the index is 'vector-enabled' and describes location options plus the ability to request additional regions, which is useful. But it does not disclose whether creation is synchronous, what happens if an index with the same name already exists, whether it is irreversible, or any permission/authorization requirements. These are significant gaps for a mutation operation.
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 three sentences with no wasted words. It front-loads the core operation, then supplies parameter context, and ends with an actionable support note. Every sentence adds value and there is no repetition.
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?
Although an output schema exists, the description lacks important context for a create operation: it does not mention whether the operation is idempotent, what happens on duplicate index names, whether creation is immediate or asynchronous, or how the location affects data residency. It also does not specify any prerequisites or error scenarios. Given the tool's simplicity and absence of annotations, the description is not fully complete for safe autonomous invocation.
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 0%, so the description must compensate for the absence of parameter documentation. It explicitly explains the location parameter by listing valid regions and pointing to opensolr_vector_regions, which is helpful. However, it never explains the 'index' parameter—its format, allowed characters, uniqueness constraints, or whether it is a display name or an identifier. The description only partially compensates for the schema gap.
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 opens with a specific verb and resource: 'Create a new vector-enabled Opensolr index.' This clearly states the tool's purpose and differentiates it from sibling tools such as opensolr_list_indexes, opensolr_search, and opensolr_add_documents. The 'vector-enabled' qualifier adds further specificity without 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?
The intended use is implied by the verb 'Create' and the resource 'index,' making it clear this is for creating an index rather than listing, deleting, or searching. However, the description provides no explicit 'use this when...' guidance, no mention of alternatives, and no conditions under which a different tool should be chosen. The location notes give context but not operational selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_delete_documentsA
Delete documents by ids (Solr ids or your original ids) or by a raw Solr query, e.g. 'meta_category:"drafts"' or '+id:"abc123"'.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| index | Yes | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral disclosure burden. It does reveal that deletion can be performed by IDs or a raw query, and gives concrete query examples. However, it omits important traits such as irreversibility, commit behavior, permission needs, and the effect of supplying both `ids` and `query`.
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?
A single, well-structured sentence front-loads the action and immediately provides selection modes with examples. Every word earns its place; there is no redundant or filler content.
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?
The output schema likely covers return values, so the description need not detail those. For a destructive operation with no annotations, a note on permanence or at least one expected ID/query requirement would improve completeness. Otherwise the core deletion modes are adequately captured for a tool of this complexity.
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 0%, so the description must compensate. It adds useful meaning to `ids` by clarifying 'Solr ids or your original ids' and gives raw query examples for `query`. Yet it does not describe the required `index` parameter nor whether `ids` and `query` are mutually exclusive or can be combined.
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 states a specific action ('Delete documents') and the two selection modes (IDs or raw query). This clearly distinguishes it from sibling tools like opensolr_search, opensolr_add_documentss, and opensolr_list_indexes, which serve different purposes.
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 choose this tool over alternatives, nor any exclusions or prerequisites. The intended usage is implied by the name and description, but no explicit when/when-not context exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_index_infoB
Get connection details for an index: Solr URL, version, environment. (Credentials are intentionally not returned.)
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that credentials are intentionally not returned, which is a useful behavioral disclosure beyond the raw schema. With no annotations provided, the description carries the full burden, and this single caveat is helpful but limited. It does not disclose whether the operation requires special permissions, whether it makes network calls to Solr, or what happens if the index does not exist.
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 two concise sentences with no filler. The primary purpose and key detail (credentials not returned) are front-loaded, and every word contributes meaningful 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?
The tool has a simple single-parameter interface and an output schema, so the description does not need to detail return values. The description conveys the tool's purpose and a notable security caveat. However, the lack of parameter format explanation and the absence of any usage guidance relative to sibling tools leaves an agent with some uncertainty about how to invoke it correctly in context.
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?
The schema has one required parameter, 'index', but its description coverage is 0%, so the schema provides no meaning beyond the parameter name. The tool description also does not explain what format the index parameter should take (e.g., index name, ID, or URL). The description's mention of 'an index' adds minimal context, but the parameter semantics remain largely undocumented, leaving the agent to guess the parameter format.
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 a specific verb ('Get') and resource ('connection details for an index'), including the specific details returned: Solr URL, version, environment. It distinguishes itself from sibling tools that delete, search, create, or add documents, though it does not explicitly name an alternative for index listing or management.
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 usage for retrieving connection metadata for a single index, and the sibling list shows this is not a search or mutation tool. However, there is no explicit guidance on when to use this over opensolr_list_indexes, which likely provides index-level information while this provides connection details. The usage context is mostly implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_ingest_statusB
Status of a Data Ingestion job (state, processed/success/failed doc counts). Also visible in the Opensolr Control Panel.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
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 must carry the behavioral burden. It does convey an informational, non-mutating operation through 'status' and document counts, and adds a reference to the Control Panel. However, it does not explicitly state read-only behavior, handling of unknown job IDs, or whether the status can be polled.
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, compact sentence with a parenthetical that efficiently enumerates the returned status fields. The Control Panel note adds minor context without padding, and there is no redundant or filler wording.
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?
The tool is low-complexity and has an output schema, so return-value details are covered externally. However, the description omits usage context and leaves the sole parameter underdescribed, forcing an agent to infer how to acquire a job_id. It is adequate but not fully complete.
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?
The input schema only specifies job_id as a required string with no description, and schema description coverage is 0%. The description does not define job_id, its format, or where to obtain it; it only implicitly connects it to a Data Ingestion job. This is a significant gap at this coverage level.
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 returns the status of a Data Ingestion job and lists the specific status fields (state, processed/success/failed doc counts). This differentiates it from index-management siblings by focusing on ingestion jobs, though it does not explicitly name an alternative.
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 about when to use this tool versus alternatives, such as after starting an ingestion job with opensolr_add_documents or when checking job completion. The note about the Control Panel is informational, not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_list_indexesA
List all search indexes in the connected Opensolr account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does state a read-only 'List' operation, which makes side effects unlikely. However, it adds no further context such as pagination, limits, authentication expectations, or whether the list is exhaustive, though the output schema may cover return structure.
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 efficient sentence that front-loads the verb and resource with no filler. Every word adds meaning, including the 'connected account' scope.
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, zero parameters, and the presence of an output schema, the description is fully adequate. An agent can confidently invoke this tool to list all indexes without missing critical context.
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?
The tool has zero parameters and 100% schema coverage, so there is no parameter semantic burden for the description to carry. The baseline for zero parameters is 4, and the description appropriately says nothing about parameters.
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 specific action ('List') and resource ('all search indexes'), and scopes it to the connected Opensolr account. This distinguishes it from sibling tools like opensolr_index_info (specific index details) and opensolr_create_index (creation).
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 this is the tool for enumerating all indexes, but it does not explicitly state when to use it versus alternatives or when not to use it. For a simple list tool the purpose is mostly self-evident, but there is no direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_searchA
Search an Opensolr index and return the k most relevant documents.
search_mode: "hybrid" (default — BM25 + semantic kNN fused per document),
"semantic" (pure kNN), or "lexical" (pure keyword edismax — no embedding
call, zero AI quota, works on ANY index including non-vector ones).
For hybrid: mode is union / keywords_required / meaning_required /
intersection, alpha balances semantic (0) vs lexical (1).
filter_query accepts a raw Solr fq expression, e.g. 'meta_category:"docs"'.
fresh_bias biases the ranking toward recent documents by multiplying each
score by a recency curve on creation_date. It re-orders and never filters:
the hit count is unchanged, nothing old becomes unreachable, and a document
with no creation_date is simply left unboosted. Works in all three search
modes. Off by default — turn it on when newer should beat older on a tie.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| mode | No | union | |
| alpha | No | ||
| index | Yes | ||
| query | Yes | ||
| fresh_bias | No | ||
| search_mode | No | hybrid | |
| filter_query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden, and it is exceptionally transparent. It discloses that lexical mode uses zero AI quota, that fresh_bias re-orders but never filters, that hit counts stay unchanged, that documents without creation_date remain unboosted, and that fresh_bias defaults to off.
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 long but every sentence earns its place, providing necessary detail for an 8-parameter tool with zero schema descriptions. It is front-loaded with the core purpose and uses line breaks to keep complex mode and bias semantics readable.
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?
All meaningful parameters are covered in the description, and the output schema exists to define the return shape. Given the tool's complexity and absent annotations, the description gives an agent enough context to select modes, set filters, and understand ranking behavior without guessing.
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 0%, so the description must compensate, and it does. It explains search_mode values, the hybrid-mode sub-parameter 'mode', alpha's semantic-vs-lexical weighting, filter_query syntax with an example, fresh_bias behavior, and k in the opening sentence.
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?
States a specific verb and resource: search an Opensolr index and return the k most relevant documents. This clearly differentiates the tool from sibling operations like listing, deleting, or ingesting indexes, and the first sentence is unambiguous.
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?
Provides strong guidance on when to choose lexical vs semantic/hybrid search modes, when fresh_bias should be enabled, and how filter_query works. However, it does not explicitly compare against sibling tools such as opensolr_ai_answer or explain when one should be preferred over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opensolr_vector_regionsA
List the vector-enabled Opensolr environments currently available (Solr 9.x with dense vectors and the hybrid query parser).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 behavioral disclosure burden. The verb 'List' communicates a read-side effect, and 'currently available' plus the Solr/vector criteria specifies what conditions determine the result. It does not fully describe response shape, but the presence of an output schema reduces that need.
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 entire description is one focused sentence that front-loads the action and resource, then adds only the essential clarifying condition. No wasted words or redundant restatements exist.
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?
For a zero-parameter, no-side-effect lising tool with an output schema available, this description fully covers what the tool does and how it filters. Nothing essential is missing for an agent to select and invoke it correctly.
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?
The tool accepts zero parameters, so there is no parameter meaning to add. The schema already reflects this with an empty properties object, making further description unnecessary and the baseline 4 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?
The description uses a specific verb ('List') with a clear resource ('vector-enabled Opensolr environments') and a concrete eligibility filter ('Solr 9.x with dense vectors and the hybrid query parser'). It separates this from general index-listing siblings like opensolr_list_indexes by emphasizing vector-enabled.
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 its use case: if you need vector-capable Solr environments, call this tool. However, it never explicitly contrasts it with alternatives, such as opensolr_list_indexes, or states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation: listing, creation, info, ingestion, status, deletion, search, RAG answering, and region listing. Search and ai_answer are related but clearly separated by output type (documents vs grounded answer), and index_info vs list_indexes differ by single-index details vs collection. No two tools appear to overlap in responsibility.
All tools share the opensolr_ prefix and snake_case, and mostly follow verb_noun (list_indexes, create_index, add_documents, delete_documents). Two names break the pattern slightly: opensolr_search lacks an object noun and opensolr_index_info/vector_regions are noun phrases, but the style is still predictable and readable.
Nine tools is a well-scoped size for an index-management MCP server; every tool covers a distinct administrative or data operation without redundancy. It is comfortably within the ideal range and not bloated.
The set covers create/list/inspect indexes and full document ingestion/search/delete/status plus RAG, but there is no delete_index operation and no direct index settings update. Agents can work around document updates via delete+add, but the missing index deletion is a notable lifecycle gap.
Maintenance
Related MCP Connectors
Agent-driven search: build, import, tune, search, and score result quality — all over MCP.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Make your knowledge agent-ready. One MCP endpoint, 5 connectors, 3 search modes.
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Python server that enables AI assistants to perform hybrid search queries against Apache Solr indexes through the Model Context Protocol, combining keyword precision with vector-based semantic understanding.20MIT
- FlicenseCqualityDmaintenanceCombines a knowledge graph with RAG (Retrieval-Augmented Generation) capabilities for semantic code indexing and search. Enables creating entity relationships, managing observations, and performing semantic searches across indexed codebases.13
- AlicenseNot gradedqualityDmaintenanceAn MCP server that indexes documents and serves relevant context to LLMs via Retrieval Augmented Generation (RAG).4837MIT
- FlicenseNot gradedqualityBmaintenanceA CLI tool and MCP server that turns markdown documentation into a searchable, queryable knowledge base.22
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/phpcip/opensolr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server