elasticsearch-mcp-server 2.0.14__tar.gz → 2.0.16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of elasticsearch-mcp-server might be problematic. Click here for more details.

Files changed (56) hide show
  1. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/PKG-INFO +21 -9
  2. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/README.md +19 -8
  3. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/pyproject.toml +2 -1
  4. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/server.json +2 -2
  5. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/base.py +3 -0
  6. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/client.py +2 -1
  7. elasticsearch_mcp_server-2.0.16/src/clients/common/data_stream.py +18 -0
  8. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/server.py +9 -1
  9. elasticsearch_mcp_server-2.0.16/src/tools/data_stream.py +47 -0
  10. elasticsearch_mcp_server-2.0.16/src/version.py +1 -0
  11. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/uv.lock +3 -1
  12. elasticsearch_mcp_server-2.0.14/src/version.py +0 -1
  13. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.env.example +0 -0
  14. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.github/workflows/publish-mcp.yml +0 -0
  15. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.github/workflows/pypi-publish.yaml +0 -0
  16. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.github/workflows/release.yml +0 -0
  17. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.gitignore +0 -0
  18. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/.python-version +0 -0
  19. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/CONTRIBUTING.md +0 -0
  20. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/LICENSE +0 -0
  21. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/Makefile +0 -0
  22. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/cliff.toml +0 -0
  23. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/docker-compose-elasticsearch.yml +0 -0
  24. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/docker-compose-opensearch.yml +0 -0
  25. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/python-sdk-anthropic/.gitignore +0 -0
  26. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/python-sdk-anthropic/__init__.py +0 -0
  27. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/python-sdk-anthropic/client.py +0 -0
  28. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/python-sdk-anthropic/config.py +0 -0
  29. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/README.md +0 -0
  30. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/build.gradle +0 -0
  31. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/gradle/wrapper/gradle-wrapper.jar +0 -0
  32. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/gradle/wrapper/gradle-wrapper.properties +0 -0
  33. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/gradle.properties +0 -0
  34. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/gradlew +0 -0
  35. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/gradlew.bat +0 -0
  36. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/settings.gradle +0 -0
  37. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/src/main/java/spring/ai/mcp/spring_ai_mcp/Application.java +0 -0
  38. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/src/main/resources/application.yml +0 -0
  39. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/src/main/resources/mcp-servers-config.json +0 -0
  40. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/mcp_client/spring-ai/src/test/java/spring/ai/mcp/spring_ai_mcp/SpringAiMcpApplicationTests.java +0 -0
  41. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/__init__.py +0 -0
  42. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/__init__.py +0 -0
  43. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/__init__.py +0 -0
  44. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/alias.py +0 -0
  45. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/cluster.py +0 -0
  46. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/document.py +0 -0
  47. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/general.py +0 -0
  48. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/common/index.py +0 -0
  49. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/clients/exceptions.py +0 -0
  50. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/__init__.py +0 -0
  51. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/alias.py +0 -0
  52. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/cluster.py +0 -0
  53. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/document.py +0 -0
  54. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/general.py +0 -0
  55. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/index.py +0 -0
  56. {elasticsearch_mcp_server-2.0.14 → elasticsearch_mcp_server-2.0.16}/src/tools/register.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elasticsearch-mcp-server
3
- Version: 2.0.14
3
+ Version: 2.0.16
4
4
  Summary: MCP Server for interacting with Elasticsearch and OpenSearch
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -210,6 +210,7 @@ Requires-Dist: elasticsearch==8.17.2
210
210
  Requires-Dist: fastmcp==2.8.0
211
211
  Requires-Dist: mcp==1.9.2
212
212
  Requires-Dist: opensearch-py==2.8.0
213
+ Requires-Dist: pydantic<2.12.0,>=2.11.0
213
214
  Requires-Dist: python-dotenv==1.1.0
214
215
  Requires-Dist: tomli-w==1.2.0
215
216
  Requires-Dist: tomli==2.2.1
@@ -248,6 +249,9 @@ https://github.com/user-attachments/assets/f7409e31-fac4-4321-9c94-b0ff2ea7ff15
248
249
  - `get_index`: Returns information (mappings, settings, aliases) about one or more indices.
249
250
  - `create_index`: Create a new index.
250
251
  - `delete_index`: Delete an index.
252
+ - `create_data_stream`: Create a new data stream (requires matching index template).
253
+ - `get_data_stream`: Get information about one or more data streams.
254
+ - `delete_data_stream`: Delete one or more data streams and their backing indices.
251
255
 
252
256
  ### Document Operations
253
257
 
@@ -372,7 +376,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
372
376
  "command": "uv",
373
377
  "args": [
374
378
  "--directory",
375
- "path/to/src/elasticsearch_mcp_server",
379
+ "path/to/elasticsearch-mcp-server",
376
380
  "run",
377
381
  "elasticsearch-mcp-server"
378
382
  ],
@@ -392,7 +396,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
392
396
  "command": "uv",
393
397
  "args": [
394
398
  "--directory",
395
- "path/to/src/elasticsearch_mcp_server",
399
+ "path/to/elasticsearch-mcp-server",
396
400
  "run",
397
401
  "elasticsearch-mcp-server"
398
402
  ],
@@ -411,7 +415,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
411
415
  "command": "uv",
412
416
  "args": [
413
417
  "--directory",
414
- "path/to/src/elasticsearch_mcp_server",
418
+ "path/to/elasticsearch-mcp-server",
415
419
  "run",
416
420
  "opensearch-mcp-server"
417
421
  ],
@@ -489,11 +493,7 @@ uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host
489
493
 
490
494
  ## Compatibility
491
495
 
492
- The MCP server is compatible with Elasticsearch 7.x, 8.x, and 9.x. By default, it uses the Elasticsearch 8.x client (without a suffix). To use the Elasticsearch 7.x client, run the `elasticsearch-mcp-server-es7` variant. For Elasticsearch 9.x, use `elasticsearch-mcp-server-es9`. For example:
493
-
494
- ```bash
495
- uvx elasticsearch-mcp-server-es7
496
- ```
496
+ The MCP server is compatible with Elasticsearch 7.x, 8.x, and 9.x. By default, it uses the Elasticsearch 8.x client (without a suffix).
497
497
 
498
498
  | MCP Server | Elasticsearch |
499
499
  | --- | --- |
@@ -502,6 +502,18 @@ uvx elasticsearch-mcp-server-es7
502
502
  | elasticsearch-mcp-server-es9 | Elasticsearch 9.x |
503
503
  | opensearch-mcp-server | OpenSearch 1.x, 2.x, 3.x |
504
504
 
505
+ To use the Elasticsearch 7.x client, run the `elasticsearch-mcp-server-es7` variant. For Elasticsearch 9.x, use `elasticsearch-mcp-server-es9`. For example:
506
+
507
+ ```bash
508
+ uvx elasticsearch-mcp-server-es7
509
+ ```
510
+
511
+ If you want to run different Elasticsearch variants (e.g., 7.x or 9.x) locally, simply update the `elasticsearch` dependency version in `pyproject.toml`, then start the server with:
512
+
513
+ ```bash
514
+ uv run src/server.py elasticsearch-mcp-server
515
+ ```
516
+
505
517
  ## License
506
518
 
507
519
  This project is licensed under the Apache License Version 2.0 - see the [LICENSE](LICENSE) file for details.
@@ -31,6 +31,9 @@ https://github.com/user-attachments/assets/f7409e31-fac4-4321-9c94-b0ff2ea7ff15
31
31
  - `get_index`: Returns information (mappings, settings, aliases) about one or more indices.
32
32
  - `create_index`: Create a new index.
33
33
  - `delete_index`: Delete an index.
34
+ - `create_data_stream`: Create a new data stream (requires matching index template).
35
+ - `get_data_stream`: Get information about one or more data streams.
36
+ - `delete_data_stream`: Delete one or more data streams and their backing indices.
34
37
 
35
38
  ### Document Operations
36
39
 
@@ -155,7 +158,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
155
158
  "command": "uv",
156
159
  "args": [
157
160
  "--directory",
158
- "path/to/src/elasticsearch_mcp_server",
161
+ "path/to/elasticsearch-mcp-server",
159
162
  "run",
160
163
  "elasticsearch-mcp-server"
161
164
  ],
@@ -175,7 +178,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
175
178
  "command": "uv",
176
179
  "args": [
177
180
  "--directory",
178
- "path/to/src/elasticsearch_mcp_server",
181
+ "path/to/elasticsearch-mcp-server",
179
182
  "run",
180
183
  "elasticsearch-mcp-server"
181
184
  ],
@@ -194,7 +197,7 @@ Using `uv` requires cloning the repository locally and specifying the path to th
194
197
  "command": "uv",
195
198
  "args": [
196
199
  "--directory",
197
- "path/to/src/elasticsearch_mcp_server",
200
+ "path/to/elasticsearch-mcp-server",
198
201
  "run",
199
202
  "opensearch-mcp-server"
200
203
  ],
@@ -272,11 +275,7 @@ uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host
272
275
 
273
276
  ## Compatibility
274
277
 
275
- The MCP server is compatible with Elasticsearch 7.x, 8.x, and 9.x. By default, it uses the Elasticsearch 8.x client (without a suffix). To use the Elasticsearch 7.x client, run the `elasticsearch-mcp-server-es7` variant. For Elasticsearch 9.x, use `elasticsearch-mcp-server-es9`. For example:
276
-
277
- ```bash
278
- uvx elasticsearch-mcp-server-es7
279
- ```
278
+ The MCP server is compatible with Elasticsearch 7.x, 8.x, and 9.x. By default, it uses the Elasticsearch 8.x client (without a suffix).
280
279
 
281
280
  | MCP Server | Elasticsearch |
282
281
  | --- | --- |
@@ -285,6 +284,18 @@ uvx elasticsearch-mcp-server-es7
285
284
  | elasticsearch-mcp-server-es9 | Elasticsearch 9.x |
286
285
  | opensearch-mcp-server | OpenSearch 1.x, 2.x, 3.x |
287
286
 
287
+ To use the Elasticsearch 7.x client, run the `elasticsearch-mcp-server-es7` variant. For Elasticsearch 9.x, use `elasticsearch-mcp-server-es9`. For example:
288
+
289
+ ```bash
290
+ uvx elasticsearch-mcp-server-es7
291
+ ```
292
+
293
+ If you want to run different Elasticsearch variants (e.g., 7.x or 9.x) locally, simply update the `elasticsearch` dependency version in `pyproject.toml`, then start the server with:
294
+
295
+ ```bash
296
+ uv run src/server.py elasticsearch-mcp-server
297
+ ```
298
+
288
299
  ## License
289
300
 
290
301
  This project is licensed under the Apache License Version 2.0 - see the [LICENSE](LICENSE) file for details.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "elasticsearch-mcp-server"
3
- version = "2.0.14"
3
+ version = "2.0.16"
4
4
  description = "MCP Server for interacting with Elasticsearch and OpenSearch"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -10,6 +10,7 @@ dependencies = [
10
10
  "mcp==1.9.2",
11
11
  "python-dotenv==1.1.0",
12
12
  "fastmcp==2.8.0",
13
+ "pydantic>=2.11.0,<2.12.0",
13
14
  "anthropic==0.49.0",
14
15
  "tomli==2.2.1",
15
16
  "tomli-w==1.2.0",
@@ -7,13 +7,13 @@
7
7
  "url": "https://github.com/cr7258/elasticsearch-mcp-server",
8
8
  "source": "github"
9
9
  },
10
- "version": "2.0.14",
10
+ "version": "2.0.16",
11
11
  "packages": [
12
12
  {
13
13
  "registry_type": "pypi",
14
14
  "registry_base_url": "https://pypi.org",
15
15
  "identifier": "elasticsearch-mcp-server",
16
- "version": "2.0.14",
16
+ "version": "2.0.16",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },
@@ -91,6 +91,9 @@ class SearchClientBase(ABC):
91
91
  # Check Elasticsearch package version to determine auth parameter name
92
92
  try:
93
93
  from elasticsearch import __version__ as es_version
94
+ # Convert version tuple to string format
95
+ version_str = '.'.join(map(str, es_version))
96
+ self.logger.info(f"Elasticsearch client version: {version_str}")
94
97
  major_version = es_version[0]
95
98
  if major_version >= 8:
96
99
  # ES 8+ uses basic_auth
@@ -2,11 +2,12 @@ from typing import Dict
2
2
 
3
3
  from src.clients.common.alias import AliasClient
4
4
  from src.clients.common.cluster import ClusterClient
5
+ from src.clients.common.data_stream import DataStreamClient
5
6
  from src.clients.common.document import DocumentClient
6
7
  from src.clients.common.general import GeneralClient
7
8
  from src.clients.common.index import IndexClient
8
9
 
9
- class SearchClient(IndexClient, DocumentClient, ClusterClient, AliasClient, GeneralClient):
10
+ class SearchClient(IndexClient, DocumentClient, ClusterClient, AliasClient, DataStreamClient, GeneralClient):
10
11
  """
11
12
  Unified search client that combines all search functionality.
12
13
 
@@ -0,0 +1,18 @@
1
+ from typing import Dict, Optional
2
+ from src.clients.base import SearchClientBase
3
+
4
+ class DataStreamClient(SearchClientBase):
5
+ def create_data_stream(self, name: str) -> Dict:
6
+ """Create a new data stream."""
7
+ return self.client.indices.create_data_stream(name=name)
8
+
9
+ def get_data_stream(self, name: Optional[str] = None) -> Dict:
10
+ """Get information about one or more data streams."""
11
+ if name:
12
+ return self.client.indices.get_data_stream(name=name)
13
+ else:
14
+ return self.client.indices.get_data_stream()
15
+
16
+ def delete_data_stream(self, name: str) -> Dict:
17
+ """Delete one or more data streams."""
18
+ return self.client.indices.delete_data_stream(name=name)
@@ -7,6 +7,7 @@ from fastmcp import FastMCP
7
7
  from src.clients import create_search_client
8
8
  from src.tools.alias import AliasTools
9
9
  from src.tools.cluster import ClusterTools
10
+ from src.tools.data_stream import DataStreamTools
10
11
  from src.tools.document import DocumentTools
11
12
  from src.tools.general import GeneralTools
12
13
  from src.tools.index import IndexTools
@@ -19,7 +20,13 @@ class SearchMCPServer:
19
20
  self.engine_type = engine_type
20
21
  self.name = f"{self.engine_type}-mcp-server"
21
22
  self.mcp = FastMCP(self.name)
22
- self.logger = logging.getLogger()
23
+
24
+ # Configure logging
25
+ logging.basicConfig(
26
+ level=logging.INFO,
27
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
28
+ )
29
+ self.logger = logging.getLogger(__name__)
23
30
  self.logger.info(f"Initializing {self.name}, Version: {VERSION}")
24
31
 
25
32
  # Create the corresponding search client
@@ -39,6 +46,7 @@ class SearchMCPServer:
39
46
  DocumentTools,
40
47
  ClusterTools,
41
48
  AliasTools,
49
+ DataStreamTools,
42
50
  GeneralTools,
43
51
  ]
44
52
  # Register all tools
@@ -0,0 +1,47 @@
1
+ from typing import Dict, Optional
2
+ from fastmcp import FastMCP
3
+
4
+ class DataStreamTools:
5
+ def __init__(self, search_client):
6
+ self.search_client = search_client
7
+
8
+ def register_tools(self, mcp: FastMCP):
9
+ """Register data stream tools with the MCP server."""
10
+
11
+ @mcp.tool()
12
+ def create_data_stream(name: str) -> Dict:
13
+ """Create a new data stream.
14
+
15
+ This creates a new data stream with the specified name.
16
+ The data stream must have a matching index template before creation.
17
+
18
+ Args:
19
+ name: Name of the data stream to create
20
+ """
21
+ return self.search_client.create_data_stream(name=name)
22
+
23
+ @mcp.tool()
24
+ def get_data_stream(name: Optional[str] = None) -> Dict:
25
+ """Get information about one or more data streams.
26
+
27
+ Retrieves configuration, mappings, settings, and other information
28
+ about the specified data streams.
29
+
30
+ Args:
31
+ name: Name of the data stream(s) to retrieve.
32
+ Can be a comma-separated list or wildcard pattern.
33
+ If not provided, retrieves all data streams.
34
+ """
35
+ return self.search_client.get_data_stream(name=name)
36
+
37
+ @mcp.tool()
38
+ def delete_data_stream(name: str) -> Dict:
39
+ """Delete one or more data streams.
40
+
41
+ Permanently deletes the specified data streams and all their backing indices.
42
+
43
+ Args:
44
+ name: Name of the data stream(s) to delete.
45
+ Can be a comma-separated list or wildcard pattern.
46
+ """
47
+ return self.search_client.delete_data_stream(name=name)
@@ -0,0 +1 @@
1
+ __version__ = "2.0.16"
@@ -287,7 +287,7 @@ wheels = [
287
287
 
288
288
  [[package]]
289
289
  name = "elasticsearch-mcp-server"
290
- version = "2.0.14"
290
+ version = "2.0.16"
291
291
  source = { editable = "." }
292
292
  dependencies = [
293
293
  { name = "anthropic" },
@@ -295,6 +295,7 @@ dependencies = [
295
295
  { name = "fastmcp" },
296
296
  { name = "mcp" },
297
297
  { name = "opensearch-py" },
298
+ { name = "pydantic" },
298
299
  { name = "python-dotenv" },
299
300
  { name = "tomli" },
300
301
  { name = "tomli-w" },
@@ -307,6 +308,7 @@ requires-dist = [
307
308
  { name = "fastmcp", specifier = "==2.8.0" },
308
309
  { name = "mcp", specifier = "==1.9.2" },
309
310
  { name = "opensearch-py", specifier = "==2.8.0" },
311
+ { name = "pydantic", specifier = ">=2.11.0,<2.12.0" },
310
312
  { name = "python-dotenv", specifier = "==1.1.0" },
311
313
  { name = "tomli", specifier = "==2.2.1" },
312
314
  { name = "tomli-w", specifier = "==1.2.0" },
@@ -1 +0,0 @@
1
- __version__ = "2.0.14"