opensearch-mcp-server 2.0.5__tar.gz → 2.0.7__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.
Files changed (55) hide show
  1. opensearch_mcp_server-2.0.7/.github/workflows/pypi-publish.yaml +58 -0
  2. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/.gitignore +1 -0
  3. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/PKG-INFO +39 -5
  4. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/README.md +38 -4
  5. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/pyproject.toml +1 -1
  6. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/server.py +55 -21
  7. opensearch_mcp_server-2.0.7/src/version.py +1 -0
  8. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/uv.lock +1 -1
  9. opensearch_mcp_server-2.0.5/.github/workflows/pypi-publish.yaml +0 -51
  10. opensearch_mcp_server-2.0.5/smithery.yaml +0 -25
  11. opensearch_mcp_server-2.0.5/src/version.py +0 -1
  12. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/.env.example +0 -0
  13. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/.github/workflows/release.yml +0 -0
  14. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/.python-version +0 -0
  15. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/CONTRIBUTING.md +0 -0
  16. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/Dockerfile +0 -0
  17. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/LICENSE +0 -0
  18. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/Makefile +0 -0
  19. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/cliff.toml +0 -0
  20. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/docker-compose-elasticsearch.yml +0 -0
  21. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/docker-compose-opensearch.yml +0 -0
  22. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/python-sdk-anthropic/.gitignore +0 -0
  23. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/python-sdk-anthropic/__init__.py +0 -0
  24. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/python-sdk-anthropic/client.py +0 -0
  25. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/python-sdk-anthropic/config.py +0 -0
  26. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/README.md +0 -0
  27. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/build.gradle +0 -0
  28. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/gradle/wrapper/gradle-wrapper.jar +0 -0
  29. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/gradle/wrapper/gradle-wrapper.properties +0 -0
  30. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/gradle.properties +0 -0
  31. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/gradlew +0 -0
  32. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/gradlew.bat +0 -0
  33. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/settings.gradle +0 -0
  34. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/src/main/java/spring/ai/mcp/spring_ai_mcp/Application.java +0 -0
  35. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/src/main/resources/application.yml +0 -0
  36. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/src/main/resources/mcp-servers-config.json +0 -0
  37. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/mcp_client/spring-ai/src/test/java/spring/ai/mcp/spring_ai_mcp/SpringAiMcpApplicationTests.java +0 -0
  38. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/__init__.py +0 -0
  39. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/__init__.py +0 -0
  40. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/base.py +0 -0
  41. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/__init__.py +0 -0
  42. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/alias.py +0 -0
  43. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/client.py +0 -0
  44. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/cluster.py +0 -0
  45. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/document.py +0 -0
  46. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/general.py +0 -0
  47. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/common/index.py +0 -0
  48. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/clients/exceptions.py +0 -0
  49. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/__init__.py +0 -0
  50. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/alias.py +0 -0
  51. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/cluster.py +0 -0
  52. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/document.py +0 -0
  53. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/general.py +0 -0
  54. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/index.py +0 -0
  55. {opensearch_mcp_server-2.0.5 → opensearch_mcp_server-2.0.7}/src/tools/register.py +0 -0
@@ -0,0 +1,58 @@
1
+ # This workflow will upload Python Packages using uv when a release is created
2
+ # It builds and publishes multiple packages for different Elasticsearch versions
3
+
4
+ name: PyPI Publish
5
+
6
+ on:
7
+ workflow_run:
8
+ workflows: ["Release"]
9
+ types:
10
+ - completed
11
+
12
+ env:
13
+ UV_PUBLISH_TOKEN: '${{ secrets.PYPI_API_TOKEN }}'
14
+
15
+ jobs:
16
+ deploy:
17
+ runs-on: ubuntu-latest
18
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
19
+ strategy:
20
+ matrix:
21
+ variant:
22
+ - name: "elasticsearch-mcp-server-es7"
23
+ elasticsearch_version: "7.13.0"
24
+ - name: "elasticsearch-mcp-server"
25
+ elasticsearch_version: "8.17.2"
26
+ - name: "elasticsearch-mcp-server-es9"
27
+ elasticsearch_version: "9.0.0"
28
+ - name: "opensearch-mcp-server"
29
+ elasticsearch_version: "8.17.2"
30
+ steps:
31
+ - uses: actions/checkout@v2
32
+
33
+ - name: Set up Python
34
+ uses: actions/setup-python@v2
35
+ with:
36
+ python-version: '3.10.x'
37
+
38
+ - name: Install dependencies
39
+ run: |
40
+ python -m pip install uv
41
+ uv sync
42
+
43
+ - name: Modify pyproject.toml for ${{ matrix.variant.name }}
44
+ run: |
45
+ # Update package name
46
+ sed -i 's/^name = .*$/name = "${{ matrix.variant.name }}"/' pyproject.toml
47
+
48
+ # Update elasticsearch version
49
+ sed -i 's/elasticsearch==.*/elasticsearch==${{ matrix.variant.elasticsearch_version }}",/' pyproject.toml
50
+
51
+ - name: Build ${{ matrix.variant.name }} package
52
+ run: uv build
53
+
54
+ - name: Publish ${{ matrix.variant.name }} package
55
+ run: uv publish
56
+
57
+ - name: Clean dist directory
58
+ run: rm -rf dist/*
@@ -1,6 +1,7 @@
1
1
  # IDE
2
2
  .idea
3
3
  .vscode
4
+ .kiro
4
5
 
5
6
  # Python
6
7
  .venv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensearch-mcp-server
3
- Version: 2.0.5
3
+ Version: 2.0.7
4
4
  Summary: MCP Server for interacting with Elasticsearch and OpenSearch
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -375,22 +375,56 @@ Using `uv` requires cloning the repository locally and specifying the path to th
375
375
 
376
376
  ## SSE
377
377
 
378
+ ### Option 1: Using uvx
379
+
380
+ ```bash
381
+ # export environment variables
382
+ export ELASTICSEARCH_HOSTS="https://localhost:9200"
383
+ export ELASTICSEARCH_USERNAME="elastic"
384
+ export ELASTICSEARCH_PASSWORD="test123"
385
+
386
+ # By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
387
+ uvx elasticsearch-mcp-server --transport sse
388
+
389
+ # The host, port, and path can be specified using the --host, --port, and --path options
390
+ uvx elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sse
391
+ ```
392
+
393
+ ### Option 2: Using uv
394
+
378
395
  ```bash
379
396
  # By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
380
- uv run src/server.py elasticsearch --transport sse
397
+ uv run src/server.py elasticsearch-mcp-server --transport sse
381
398
 
382
399
  # The host, port, and path can be specified using the --host, --port, and --path options
383
- uv run src/server.py elasticsearch --transport sse --host 0.0.0.0 --port 8000 --path /sse
400
+ uv run src/server.py elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sse
384
401
  ```
385
402
 
386
403
  ## Streamable HTTP
387
404
 
405
+ ### Option 1: Using uvx
406
+
407
+ ```bash
408
+ # export environment variables
409
+ export ELASTICSEARCH_HOSTS="https://localhost:9200"
410
+ export ELASTICSEARCH_USERNAME="elastic"
411
+ export ELASTICSEARCH_PASSWORD="test123"
412
+
413
+ # By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
414
+ uvx elasticsearch-mcp-server --transport streamable-http
415
+
416
+ # The host, port, and path can be specified using the --host, --port, and --path options
417
+ uvx elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
418
+ ```
419
+
420
+ ### Option 2: Using uv
421
+
388
422
  ```bash
389
423
  # By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
390
- uv run src/server.py elasticsearch --transport streamable-http
424
+ uv run src/server.py elasticsearch-mcp-server --transport streamable-http
391
425
 
392
426
  # The host, port, and path can be specified using the --host, --port, and --path options
393
- uv run src/server.py elasticsearch --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
427
+ uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
394
428
  ```
395
429
 
396
430
  ## License
@@ -158,22 +158,56 @@ Using `uv` requires cloning the repository locally and specifying the path to th
158
158
 
159
159
  ## SSE
160
160
 
161
+ ### Option 1: Using uvx
162
+
163
+ ```bash
164
+ # export environment variables
165
+ export ELASTICSEARCH_HOSTS="https://localhost:9200"
166
+ export ELASTICSEARCH_USERNAME="elastic"
167
+ export ELASTICSEARCH_PASSWORD="test123"
168
+
169
+ # By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
170
+ uvx elasticsearch-mcp-server --transport sse
171
+
172
+ # The host, port, and path can be specified using the --host, --port, and --path options
173
+ uvx elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sse
174
+ ```
175
+
176
+ ### Option 2: Using uv
177
+
161
178
  ```bash
162
179
  # By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
163
- uv run src/server.py elasticsearch --transport sse
180
+ uv run src/server.py elasticsearch-mcp-server --transport sse
164
181
 
165
182
  # The host, port, and path can be specified using the --host, --port, and --path options
166
- uv run src/server.py elasticsearch --transport sse --host 0.0.0.0 --port 8000 --path /sse
183
+ uv run src/server.py elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sse
167
184
  ```
168
185
 
169
186
  ## Streamable HTTP
170
187
 
188
+ ### Option 1: Using uvx
189
+
190
+ ```bash
191
+ # export environment variables
192
+ export ELASTICSEARCH_HOSTS="https://localhost:9200"
193
+ export ELASTICSEARCH_USERNAME="elastic"
194
+ export ELASTICSEARCH_PASSWORD="test123"
195
+
196
+ # By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
197
+ uvx elasticsearch-mcp-server --transport streamable-http
198
+
199
+ # The host, port, and path can be specified using the --host, --port, and --path options
200
+ uvx elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
201
+ ```
202
+
203
+ ### Option 2: Using uv
204
+
171
205
  ```bash
172
206
  # By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
173
- uv run src/server.py elasticsearch --transport streamable-http
207
+ uv run src/server.py elasticsearch-mcp-server --transport streamable-http
174
208
 
175
209
  # The host, port, and path can be specified using the --host, --port, and --path options
176
- uv run src/server.py elasticsearch --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
210
+ uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp
177
211
  ```
178
212
 
179
213
  ## License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "opensearch-mcp-server"
3
- version = "2.0.5"
3
+ version = "2.0.7"
4
4
  description = "MCP Server for interacting with Elasticsearch and OpenSearch"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -17,7 +17,7 @@ class SearchMCPServer:
17
17
  def __init__(self, engine_type):
18
18
  # Set engine type
19
19
  self.engine_type = engine_type
20
- self.name = f"{self.engine_type}_mcp_server"
20
+ self.name = f"{self.engine_type}-mcp-server"
21
21
  self.mcp = FastMCP(self.name)
22
22
  self.logger = logging.getLogger()
23
23
  self.logger.info(f"Initializing {self.name}, Version: {VERSION}")
@@ -65,24 +65,13 @@ def run_search_server(engine_type, transport, host, port, path):
65
65
  server.logger.info(f"Starting {server.name} with {transport} transport")
66
66
  server.mcp.run(transport=transport)
67
67
 
68
- def elasticsearch_mcp_server():
69
- """Entry point for Elasticsearch MCP server."""
70
- run_search_server(engine_type="elasticsearch")
71
-
72
- def opensearch_mcp_server():
73
- """Entry point for OpenSearch MCP server."""
74
- run_search_server(engine_type="opensearch")
75
-
76
- if __name__ == "__main__":
77
- # Parse command line arguments
78
- parser = argparse.ArgumentParser(description=f"Elasticsearch/OpenSearch MCP Server v{VERSION}")
79
- parser.add_argument(
80
- "engine_type",
81
- nargs="?",
82
- default="elasticsearch",
83
- choices=["elasticsearch", "opensearch"],
84
- help="Search engine type to use (default: elasticsearch)"
85
- )
68
+ def parse_server_args():
69
+ """Parse command line arguments for the MCP server.
70
+
71
+ Returns:
72
+ Parsed arguments
73
+ """
74
+ parser = argparse.ArgumentParser()
86
75
  parser.add_argument(
87
76
  "--transport", "-t",
88
77
  default="stdio",
@@ -113,12 +102,57 @@ if __name__ == "__main__":
113
102
  args.path = "/sse"
114
103
  else:
115
104
  args.path = "/mcp"
105
+
106
+ return args
107
+
108
+ def elasticsearch_mcp_server():
109
+ """Entry point for Elasticsearch MCP server."""
110
+ args = parse_server_args()
116
111
 
117
112
  # Run the server with the specified options
118
113
  run_search_server(
119
- engine_type=args.engine_type,
114
+ engine_type="elasticsearch",
120
115
  transport=args.transport,
121
116
  host=args.host,
122
117
  port=args.port,
123
118
  path=args.path
124
- )
119
+ )
120
+
121
+ def opensearch_mcp_server():
122
+ """Entry point for OpenSearch MCP server."""
123
+ args = parse_server_args()
124
+
125
+ # Run the server with the specified options
126
+ run_search_server(
127
+ engine_type="opensearch",
128
+ transport=args.transport,
129
+ host=args.host,
130
+ port=args.port,
131
+ path=args.path
132
+ )
133
+
134
+ if __name__ == "__main__":
135
+ # Require elasticsearch-mcp-server or opensearch-mcp-server as the first argument
136
+ if len(sys.argv) <= 1 or sys.argv[1] not in ["elasticsearch-mcp-server", "opensearch-mcp-server"]:
137
+ print("Error: First argument must be 'elasticsearch-mcp-server' or 'opensearch-mcp-server'")
138
+ sys.exit(1)
139
+
140
+ # Determine engine type based on the first argument
141
+ engine_type = "elasticsearch" # Default
142
+ if sys.argv[1] == "opensearch-mcp-server":
143
+ engine_type = "opensearch"
144
+
145
+ # Remove the first argument so it doesn't interfere with argparse
146
+ sys.argv.pop(1)
147
+
148
+ # Parse command line arguments
149
+ args = parse_server_args()
150
+
151
+ # Run the server with the specified options
152
+ run_search_server(
153
+ engine_type=engine_type,
154
+ transport=args.transport,
155
+ host=args.host,
156
+ port=args.port,
157
+ path=args.path
158
+ )
@@ -0,0 +1 @@
1
+ __version__ = "2.0.7"
@@ -287,7 +287,7 @@ wheels = [
287
287
 
288
288
  [[package]]
289
289
  name = "elasticsearch-mcp-server"
290
- version = "2.0.5"
290
+ version = "2.0.7"
291
291
  source = { editable = "." }
292
292
  dependencies = [
293
293
  { name = "anthropic" },
@@ -1,51 +0,0 @@
1
- # This workflow will upload Python Packages using uv when a release is created
2
- # It builds and publishes two separate packages: elasticsearch-mcp-server and opensearch-mcp-server
3
-
4
- name: PyPI Publish
5
-
6
- on:
7
- workflow_run:
8
- workflows: ["Release"]
9
- types:
10
- - completed
11
-
12
- env:
13
- UV_PUBLISH_TOKEN: '${{ secrets.PYPI_API_TOKEN }}'
14
-
15
- jobs:
16
- deploy:
17
- runs-on: ubuntu-latest
18
- if: ${{ github.event.workflow_run.conclusion == 'success' }}
19
- steps:
20
- - uses: actions/checkout@v2
21
-
22
- - name: Set up Python
23
- uses: actions/setup-python@v2
24
- with:
25
- python-version: '3.10.x'
26
-
27
- - name: Install dependencies
28
- run: |
29
- python -m pip install uv
30
- uv sync
31
-
32
- # First build and publish elasticsearch-mcp-server
33
- - name: Build elasticsearch-mcp-server package
34
- run: uv build
35
-
36
- - name: Publish elasticsearch-mcp-server package
37
- run: uv publish
38
-
39
- # Clean up dist directory
40
- - name: Clean dist directory
41
- run: rm -rf dist/*
42
-
43
- # Then build and publish opensearch-mcp-server
44
- - name: Build opensearch-mcp-server package
45
- run: |
46
- # Change package name to opensearch-mcp-server
47
- sed -i 's/^name = .*$/name = "opensearch-mcp-server"/' pyproject.toml
48
- uv build
49
-
50
- - name: Publish opensearch-mcp-server package
51
- run: uv publish
@@ -1,25 +0,0 @@
1
- # Smithery configuration file: https://smithery.ai/docs/config#smitheryyaml
2
-
3
- startCommand:
4
- type: stdio
5
- configSchema:
6
- # JSON Schema defining the configuration options for the MCP.
7
- type: object
8
- required:
9
- - elasticsearchHosts
10
- - elasticsearchUsername
11
- - elasticsearchPassword
12
- properties:
13
- elasticsearchHosts:
14
- type: string
15
- description: The host URL of the Elasticsearch cluster.
16
- elasticsearchUsername:
17
- type: string
18
- description: The username for Elasticsearch authentication.
19
- elasticsearchPassword:
20
- type: string
21
- description: The password for Elasticsearch authentication.
22
- commandFunction:
23
- # A function that produces the CLI command to start the MCP on stdio.
24
- |-
25
- (config) => ({ command: 'elasticsearch-mcp-server', env: { ELASTICSEARCH_HOSTS: config.elasticsearchHosts, ELASTICSEARCH_USERNAME: config.elasticsearchUsername, ELASTICSEARCH_PASSWORD: config.elasticsearchPassword } })
@@ -1 +0,0 @@
1
- __version__ = "2.0.5"