Skip to main content
Glama

Solr MCP

A Python package for accessing Apache Solr indexes via Model Context Protocol (MCP). This integration allows AI assistants like Claude to perform powerful search queries against your Solr indexes, combining both keyword and vector search capabilities.

Features

  • MCP Server: Implements the Model Context Protocol for integration with AI assistants

  • Hybrid Search: Combines keyword search precision with vector search semantic understanding

  • Vector Embeddings: Generates embeddings for documents using Ollama with nomic-embed-text

  • Unified Collections: Store both document content and vector embeddings in the same collection

  • Docker Integration: Easy setup with Docker and docker-compose

  • Optimized Vector Search: Efficiently handles combined vector and SQL queries by pushing down SQL filters to the vector search stage, ensuring optimal performance even with large result sets and pagination

Related MCP server: Obsidian MCP Server

Architecture

Vector Search Optimization

The system employs an important optimization for combined vector and SQL queries. When executing a query that includes both vector similarity search and SQL filters:

  1. SQL filters (WHERE clauses) are pushed down to the vector search stage

  2. This ensures that vector similarity calculations are only performed on documents that will match the final SQL criteria

  3. Significantly improves performance for queries with:

    • Selective WHERE clauses

    • Pagination (LIMIT/OFFSET)

    • Large result sets

This optimization reduces computational overhead and network transfer by minimizing the number of vector similarity calculations needed.

Quick Start

  1. Clone this repository

  2. Start SolrCloud with Docker:

    docker-compose up -d
  3. Install dependencies:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    pip install uv
    uv sync
  4. Process and index the sample document:

    python scripts/process_markdown.py data/bitcoin-whitepaper.md --output data/processed/bitcoin_sections.json
    python scripts/create_unified_collection.py unified
    python scripts/unified_index.py data/processed/bitcoin_sections.json --collection unified
  5. Run the MCP server (stdio transport, for local MCP clients):

    uv run run-server

For more detailed setup and usage instructions, see the QUICKSTART.md guide.

MCP client configuration

The server speaks MCP over stdio by default. Install and run it from Git with uv:

{
  "mcpServers": {
    "solr-mcp-server": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/kevinbtalbert/solr-mcp-python-stdio@main",
        "run-server"
      ],
      "env": {
        "SOLR_BASE_URL": "https://solr-app.yoururlhere.ylcu-atmi.cloudera.site/solr",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

Use this block in Cursor MCP settings, Claude Desktop, or Agent Studio MCP configuration.

Set SOLR_BASE_URL to your Solr Admin base URL (including the /solr path). The server uses plain HTTP/HTTPS with no login or API keys—suitable for open Solr endpoints. ZooKeeper is not required: when ZOOKEEPER_HOSTS is unset, collections are discovered through Solr’s HTTP API. For local SolrCloud with ZK directly reachable, optionally set ZOOKEEPER_HOSTS to a comma-separated list (e.g. localhost:2181).

MCP tools (Agent Studio / Claude)

Tool

Use for

list-collections

Discover collection names

get-schema

Field names and types before querying

search

Primary — Lucene /select (full text, filters, facets, sort)

sql-select

Solr SQL when you need it explicitly

semantic-select / vector-select

SQL + vector similarity (requires embeddings setup)

get-default-text-vectorizer

Embedding model dimensions for semantic search

After changing this repo, refresh the MCP server (restart the host or bump the git ref) so clients pick up new tool names. No mcp or ZooKeeper parameters are required in tool calls.

Local checkout

{
  "mcpServers": {
    "solr-mcp-server": {
      "command": "uvx",
      "args": [
        "--from",
        "file:///absolute/path/to/solr-mcp-python-stdio",
        "run-server"
      ],
      "env": {
        "SOLR_BASE_URL": "https://your-solr-host.example.com/solr"
      }
    }
  }
}

Transport

Set MCP_TRANSPORT to choose how the server connects to the client:

Value

Use case

stdio (default)

Cursor, Claude Desktop, and other subprocess-based MCP hosts

sse

HTTP/SSE deployment (e.g. run-server --transport sse --port 8000)

Requirements

  • Python 3.10 or higher

  • Docker and Docker Compose

  • SolrCloud 9.x

  • Ollama (for embedding generation)

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Available Tools

7 tools
get-default-text-vectorizerA

Get the default embedding model used for semantic-select.

Returns model name, vector dimensionality, and service URL. Use this to ensure Solr vector fields match the embedding model dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden, and it does disclose the return content (model name, vector dimensionality, service URL) plus the read-only, zero-argument nature implied by the call shape. It does not state failure modes (e.g., what happens if no default is configured), which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then the return payload, then the use case. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be enumerated, yet the description helpfully summarizes them anyway, and the intended workflow (aligning Solr vector field dimensions) is clear. Only edge cases such as misconfigured or absent defaults are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing to document and schema coverage is 100%. No additional parameter meaning is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the default embedding model') and immediately scopes it to the semantic-select feature, which no sibling tool covers. An agent can distinguish this from search, sql-select, vector-select, and get-schema without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: 'Use this to ensure Solr vector fields match the embedding model dimensions.' That is a concrete triggering condition. It does not name alternatives, but no sibling duplicates this function, so the omission is minor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-schemaA

Retrieve schema information for a Solr collection.

Returns field definitions, field types, and copy-field relationships from the Schema API. Call this before search when you need valid field names or types.

Parameters:

  • collection: Solr collection name

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden; 'Retrieve ... from the Schema API' makes the read-only nature reasonably clear, and the source endpoint is named. However, it says nothing about behavior on an invalid/unknown collection, permissions required, or whether the result is cached or expensive, so disclosure is only partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then return contents, then the when-to-use cue, then a parameter note – good ordering with no filler. The trailing Parameters section is somewhat redundant with the input schema, though it is defensible given the 0% schema description coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with an output schema already defining the return shape, the description supplies purpose, timing guidance, and the sole parameter's meaning, which is close to sufficient. The remaining gap is failure/edge-case behavior for an unknown collection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% – the schema property is a bare 'Collection' string with no descriptions. The description partially compensates by identifying it as 'Solr collection name', but adds no format, alias, or naming-convention guidance beyond that label, so it leaves the parameter only minimally clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Retrieve schema information for a Solr collection') and it enumerates what the response contains (field definitions, field types, copy-field relationships). No sibling in the list (list-collections, search, sql-select, semantic-select, vector-select, get-default-text-vectorizer) returns schema data, so the agent can route to it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call it: 'Call this before search when you need valid field names or types,' which names a sibling and a triggering condition. It stops short of stating when-not to use it (e.g. that a previously cached schema or a different collection-level tool is preferable), so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-collectionsA

List all available Solr collections in the cluster.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'List all available' usefully signals a complete, unfiltered, non-destructive enumeration, but it says nothing about pagination, permissions, or failure behavior when the cluster is unreachable. Adequate but thin for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value details need not be restated. For a trivial zero-parameter read tool, the description is nearly sufficient; only when-to-use guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric this is a baseline 4. The schema is empty and there is nothing for the description to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (Solr collections) with clear cluster scope, so an agent knows exactly what is returned. It does not reference any sibling, but the sibling set (search, sql-select, get-schema) contains no competing 'list' tool, so differentiation is not a real risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus alternatives, no prerequisites (e.g., cluster connectivity or auth), and no exclusions. The reader must infer that it enumerates rather than searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

semantic-selectA

Semantic (vector) search combined with SQL filtering (advanced).

Extends sql-select with semantic search: natural language text is embedded and matched against a dense_vector/knn_vector field. Results rank by similarity; ORDER BY is not allowed in query.

Parameters:

  • query: SQL query to execute

  • text: Natural language text converted to a vector for similarity search

  • field: Vector field name (optional; auto-detected when omitted)

  • vector_provider: Optional model@host:port (e.g. nomic-embed-text@localhost:11434)

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
fieldNo
queryYes
vector_providerNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the burden. It usefully discloses ranking behavior ('Results rank by similarity') and the ORDER BY restriction, but says nothing about permissions, cost, field auto-detection failure modes, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then uses a compact parameter list. Every line earns its place, though the parenthetical '(advanced)' adds little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the parameter list compensates for the empty schema descriptions. The main missing piece is guidance on choosing among the search-oriented siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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: all four parameters are explained, including the optional field's auto-detection and a concrete vector_provider format example (model@host:port). Minor gap on explicitly flagging which parameters are required versus optional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific compound operation (vector similarity + SQL filtering) and names the sibling it extends ('Extends sql-select with semantic search'), so an agent can distinguish it from sql-select and vector-select without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clears the path from sql-select by explaining the extension, and gives a concrete exclusion ('ORDER BY is not allowed in query'). It does not say when to prefer this over vector-select or search, so sibling routing is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sql-selectA

Execute SQL SELECT queries against Solr (advanced).

Prefer the search tool for Lucene/full-text queries. Use this when you need Solr's SQL interface explicitly.

Collection/Field Rules:

  • Collections are used as table names (case-insensitive)

  • Field names are case-sensitive and must exist in Solr schema

  • SELECT * only allowed with LIMIT clause

  • Unlimited queries restricted to docValues-enabled fields

  • Reserved words must be backtick-escaped

WHERE Clause Differences:

  • Field must be on one side of predicate

  • No comparing two constants or two fields

  • No subqueries

  • Solr syntax in values:

    • '[0 TO 100]' for ranges

    • '(term1 term2)' for non-phrase OR search

  • String literals use single-quotes

Supported Features:

  • Operators: =, <>, >, >=, <, <=, IN, LIKE (wildcards), BETWEEN, IS [NOT] NULL

  • Functions: COUNT(*), COUNT(DISTINCT), MIN, MAX, SUM, AVG

  • GROUP BY: Uses faceting (fast) for low cardinality, map_reduce (slow) for high cardinality

  • ORDER BY: Requires docValues-enabled fields

  • LIMIT/OFFSET: Use 'OFFSET x FETCH NEXT y ROWS ONLY' syntax

    • Performance of OFFSET degrades beyond 10k docs per shard

Parameters:

  • query: SQL query to execute

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely succeeds: it discloses case-sensitivity rules, the SELECT * + LIMIT constraint, docValues restrictions on unlimited queries, ORDER BY docValues requirements, GROUP BY faceting vs map_reduce cost, and OFFSET performance degradation past 10k docs per shard. It stops short of stating read-only semantics, error behavior, or default result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the routing guidance before the dialect details, and the headed sections make it scannable. It is long, but nearly every bullet encodes a real constraint; the trailing 'Parameters: query' block is the one redundant element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary; the description covers the remaining burden — routing, dialect rules, and performance caveats. Nothing an agent needs in order to write a valid query is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single `query` parameter, so the description must compensate — and it does, effectively documenting the SQL dialect (operators, functions, WHERE restrictions, range syntax, backtick escaping, LIMIT/OFFSET form). The generic 'query: SQL query to execute' line adds nothing, but the surrounding dialect documentation is what makes the parameter usable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Execute SQL SELECT queries against Solr') and immediately qualifies the scope as the advanced/explicit SQL path. It names the sibling tool `search` as the default alternative, so an agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to prefer the alternative ('Prefer the `search` tool for Lucene/full-text queries') and when to use this one ('when you need Solr's SQL interface explicitly'). This is a clean when/when-not/alternative routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vector-selectA

Vector similarity search combined with SQL filtering (advanced).

Extends sql-select with a query vector matched against a dense_vector/knn_vector field. ORDER BY is not allowed in query.

Parameters:

  • query: SQL query to execute

  • vector: Query vector (dimensions must match the vector field)

  • field: Vector field name (optional; auto-detected when omitted)

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNo
queryYes
vectorYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose two real constraints beyond the schema: the ORDER BY prohibition and the auto-detection behavior of 'field'. It says nothing about read-only safety profile, cost/latency of vector search, or error modes when vector dimensions mismatch, leaving meaningful gaps for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key caveat are front-loaded, followed by a compact parameter list. The parameter list is justified given 0% schema coverage rather than redundant, though the bullet formatting is slightly verbose for three fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the purpose, main constraint, and all three parameters. What it lacks is guidance versus the remaining vector-related siblings and any note on failure conditions such as dimension mismatch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 that 'vector' dimensions must match the vector field and that 'field' is optional and auto-detected when omitted. Only the exact syntax/format expected inside 'query' is left unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination ('vector similarity search combined with SQL filtering') and explicitly positions itself relative to a named sibling ('Extends sql-select with a query vector matched against a dense_vector/knn_vector field'). An agent can distinguish this from sql-select and semantic-select without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Extends sql-select with a query vector' clearly tells the agent when to pick this over sql-select (when a vector match is needed). However, it never names the other plausible alternative semantic-select, nor states any when-not-to-use condition or prerequisite, so the guidance is clear but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedget-default-text-vectorizer
    • First observedget-schema
    • First observedlist-collections
    • First observedsearch
    • First observedsemantic-select
    • First observedsql-select
    • First observedvector-select

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

The four query tools (search, sql-select, semantic-select, vector-select) overlap in purpose, but descriptions explicitly steer agents—search for Lucene/full-text, sql-select for the SQL interface, and the two vector variants differ clearly by taking either natural-language text or a precomputed vector. Boundaries are mostly clear with only minor potential confusion between semantic-select and vector-select.

Naming Consistency4/5

All names use consistent kebab-case (get-default-text-vectorizer, list-collections, get-schema, sql-select, etc.), which is predictable and readable. Minor deviation: a few tools are noun-style rather than verb_noun (search, sql-select, vector-select), but the pattern is still coherent.

Tool Count5/5

Seven tools is well-scoped for a Solr query server, with each tool covering a distinct capability (listing, schema introspection, full-text search, SQL, semantic, vector, and vectorizer defaults). No filler or redundancy that would suggest bloat.

Completeness3/5

The read/query surface is fairly complete (collections, schema, multiple query modes), but there are no write operations—no document indexing/update/delete and no collection create/delete—which are core Solr lifecycle operations. Agents can search but cannot mutate data or manage collections, leaving notable gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables RAG-powered documentation search using OpenAI embeddings and Pinecone vector database. Provides an extensible framework for adding additional tools with support for both local STDIO and production HTTP transports.
    1
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Obsidian vaults for creating, reading, searching, and managing notes, daily notes, TODOs, session reports, and backlinks through both stdio and HTTP/SSE transports.
    10
    3,445 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants to Obsidian vaults via the Local REST API to search notes, retrieve content, and perform semantic searches. It features self-healing multi-URL connectivity and supports both stdio and HTTP transports for flexible deployment.
    151 npm
    13
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Exposes any Microsoft SQL Server database to AI agents with multi-database support, keyword lookup, free SELECT queries, and three transport modes (stdio/SSE/Streamable HTTP).
    4
    1,313 npm
    MIT