MCP find_context and company_context return no results on Elasticsearch (OpenSearchVectorService singleton is null)
I maintainer di solito rispondono entro 1 giorno
@zerafachris ci sta già lavorando.
Dal 29/10/2026.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- elasticsearch, java
- Ambito
- backend-api-design, search
Direzione di ricerca
Leggi AIContextFinder.java e CompanyContextTool.java nei punti di chiamata identificati nell’issue, quindi controlla SearchRepository.java per vedere come viene inizializzato il servizio vettoriale per Elasticsearch. L’issue propone di usare l’accessor VectorIndexService del repository, indipendente dal backend, in entrambi i punti di chiamata. Il lavoro è completato quando l’endpoint di contesto e gli strumenti MCP restituiscono risultati di ricerca vettoriale su Elasticsearch; l’issue riporta la risposta prevista quando non esistono knowledge pills.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Affected module
Search / Discovery
Describe the bug
With Elasticsearch as the search backend and semantic search enabled, the find_context and company_context MCP tools never return results, although embeddings exist and semantic_search works on the same index.
find_context(andGET /api/v1/ai/context/find) always returns an empty result:{"items":[],"candidateAssets":[],"empty":true}. No error, no log line.company_contextwith aqueryreturns "Semantic search is not enabled. Configure vector embeddings in the OpenMetadata server settings."
Root cause:
SearchRepository.initializeVectorSearchService() only creates OpenSearchVectorService when searchType is OpenSearch. On Elasticsearch it creates ElasticSearchVectorService and stores it in SearchRepository.vectorIndexService, so OpenSearchVectorService.getInstance() stays null. Two call sites still read that OpenSearch-only singleton:
AIContextFinder.searchKnowledge(): skips the search when the singleton is null, so the result is silently empty.CompanyContextTool.runSearch(): returns the "not enabled" error when the singleton is null.
To Reproduce
- Run OpenMetadata with Elasticsearch as the search backend and semantic search enabled, for example:
SEARCH_TYPE=elasticsearch
SEMANTIC_SEARCH_ENABLED=true
LLM_ENABLED=true
LLM_PROVIDER=
EMBEDDING_PROVIDER=
LLM_OPENAI_API_KEY= - Make sure some entities are embedded. Any approved glossary term is enough; embeddings are written when an entity is created or reindexed. The server log should show
"ElasticSearchVectorService initialized" and "Vector search service initialized". - Search for a term that exists in the catalog, for example "bounce rate", through each of these:
- GET /api/v1/ai/context/find?q=bounce rate
- MCP find_context
- MCP company_context (with a
query) - MCP semantic_search (for comparison)
The same behaviour occurs on OpenMetadata 2.0.2, 2.0.6, 2.0.7 and 2.1.0-rc1
| Call | Result |
|---|---|
| GET /api/v1/ai/context/find | {"items":[],"candidateAssets":[],"empty":true} |
| MCP find_context | "No company knowledge found for this query." |
| MCP company_context | "Semantic search is not enabled. Configure vector embeddings ..." |
| MCP semantic_search | returns the matching entities with scores |
Expected behavior
find_context returns the matching glossary terms, metrics and pages (plus candidate assets), and company_context runs its vector query, on Elasticsearch exactly as on OpenSearch. With the fix below, find_context returns the 4 items listed above and company_context returns {"returnedCount":0,"results":[]} (no knowledge pills exist) instead of the error.
OS
Linux (Docker containers on macOS)
Python version
No response
OpenMetadata version
2.0.2 (stock image); same code in 2.0.6, 2.0.7, 2.1.0-rc1
OpenMetadata Ingestion package version
No response
Additional context
Code on main:
- AIContextFinder.java#L133: https://github.com/open-metadata/OpenMetadata/blob/a9757cf07820d370b5a6228bd9f1d0e4ed80a24c/openmetadata-service/src/main/java/org/openmetadata/service/aicontext/AIContextFinder.java#L133
- CompanyContextTool.java#L174: https://github.com/open-metadata/OpenMetadata/blob/a9757cf07820d370b5a6228bd9f1d0e4ed80a24c/openmetadata-mcp/src/main/java/org/openmetadata/mcp/tools/CompanyContextTool.java#L174
- SearchRepository.java#L966-L976 (the singleton is only created in the OpenSearch branch): https://github.com/open-metadata/OpenMetadata/blob/a9757cf07820d370b5a6228bd9f1d0e4ed80a24c/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchRepository.java#L966-L976
The same OpenSearchVectorService.getInstance() lookups are present in the 2.0.2, 2.0.6, 2.0.7 and 2.1.0-rc1 release tags.
Proposed fix (verified): both call sites only use methods declared on VectorIndexService (including the 8-argument search with SubjectContext), so they can read the backend-neutral accessor:
- OpenSearchVectorService service = OpenSearchVectorService.getInstance();
- VectorIndexService service = Entity.getSearchRepository().getVectorIndexService();
Pre-submission checklist
- I searched for duplicate issues.
- I removed credentials, hostnames, emails, and other sensitive data from logs and config.
- Lingua principale
- TypeScript
- Stelle
- 15.4k
- Fork
- 2.4k
- Merge medio
- 1g 1h
- PR unite (30g)
- 699
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di open-metadata/OpenMetadata
-
AI Context empty state covers the whole app and blocks sidebar navigation when no persona existsApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
open-metadata/OpenMetadata#36240 ·
I maintainer di solito rispondono entro 1 giorno
-
UpdatedOn semantic Playwright tests mix local dates with UTC thresholdsForse già presa @ZhangJin233 l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
open-metadata/OpenMetadata#36151 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Java SDK glossary term assets GET sends RequestOptions as a request bodyForse già presa @LubabaKhalid l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
open-metadata/OpenMetadata#36150 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
open-metadata/OpenMetadata#36094 ·
I maintainer di solito rispondono entro 1 giorno
-
[Detail Bug] Pipelines: /v1/pipelines/summary bypasses authorization and leaks pipeline summariesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
open-metadata/OpenMetadata#36021 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di open-metadata/OpenMetadata
Issue simili
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
area:plugins area:security area:skills bug has repro
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
anthropics/claude-code#105911 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
dev-five-git/devup-ui#879 ·
I maintainer di solito rispondono entro 11 giorni
-
openspec-apply-change skill: when blocked, may select a ready artifact unrelated to missingArtifactsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Fission-AI/OpenSpec#2165 ·
I maintainer di solito rispondono entro 1 giorno
-
🐞 bug 🧐 unconfirmed
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Tencent/tdesign-vue-next#7032 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno