deepset-mcp 0.0.2__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 (177) hide show
  1. deepset_mcp-0.0.2/.github/workflows/ai_agent.yml +27 -0
  2. deepset_mcp-0.0.2/.github/workflows/ci.yml +71 -0
  3. deepset_mcp-0.0.2/.github/workflows/docker_push.yml +45 -0
  4. deepset_mcp-0.0.2/.github/workflows/pypi_release.yml +47 -0
  5. deepset_mcp-0.0.2/.gitignore +28 -0
  6. deepset_mcp-0.0.2/.python-version +1 -0
  7. deepset_mcp-0.0.2/Dockerfile +57 -0
  8. deepset_mcp-0.0.2/Makefile +62 -0
  9. deepset_mcp-0.0.2/PKG-INFO +288 -0
  10. deepset_mcp-0.0.2/README.md +249 -0
  11. deepset_mcp-0.0.2/REPO.md +132 -0
  12. deepset_mcp-0.0.2/assets/claude_desktop_projects.png +0 -0
  13. deepset_mcp-0.0.2/assets/claude_desktop_with_tools.png +0 -0
  14. deepset_mcp-0.0.2/assets/deepset-mcp-3.gif +0 -0
  15. deepset_mcp-0.0.2/entrypoint.sh +16 -0
  16. deepset_mcp-0.0.2/pyproject.toml +147 -0
  17. deepset_mcp-0.0.2/src/deepset_mcp/__init__.py +0 -0
  18. deepset_mcp-0.0.2/src/deepset_mcp/agents/__init__.py +0 -0
  19. deepset_mcp-0.0.2/src/deepset_mcp/agents/debugging/__init__.py +0 -0
  20. deepset_mcp-0.0.2/src/deepset_mcp/agents/debugging/debugging_agent.py +37 -0
  21. deepset_mcp-0.0.2/src/deepset_mcp/agents/debugging/system_prompt.md +214 -0
  22. deepset_mcp-0.0.2/src/deepset_mcp/agents/generalist/__init__.py +0 -0
  23. deepset_mcp-0.0.2/src/deepset_mcp/agents/generalist/generalist_agent.py +38 -0
  24. deepset_mcp-0.0.2/src/deepset_mcp/agents/generalist/system_prompt.md +241 -0
  25. deepset_mcp-0.0.2/src/deepset_mcp/api/README.md +536 -0
  26. deepset_mcp-0.0.2/src/deepset_mcp/api/__init__.py +0 -0
  27. deepset_mcp-0.0.2/src/deepset_mcp/api/client.py +277 -0
  28. deepset_mcp-0.0.2/src/deepset_mcp/api/custom_components/__init__.py +0 -0
  29. deepset_mcp-0.0.2/src/deepset_mcp/api/custom_components/models.py +25 -0
  30. deepset_mcp-0.0.2/src/deepset_mcp/api/custom_components/protocols.py +17 -0
  31. deepset_mcp-0.0.2/src/deepset_mcp/api/custom_components/resource.py +56 -0
  32. deepset_mcp-0.0.2/src/deepset_mcp/api/exceptions.py +70 -0
  33. deepset_mcp-0.0.2/src/deepset_mcp/api/haystack_service/__init__.py +0 -0
  34. deepset_mcp-0.0.2/src/deepset_mcp/api/haystack_service/protocols.py +13 -0
  35. deepset_mcp-0.0.2/src/deepset_mcp/api/haystack_service/resource.py +55 -0
  36. deepset_mcp-0.0.2/src/deepset_mcp/api/indexes/__init__.py +0 -0
  37. deepset_mcp-0.0.2/src/deepset_mcp/api/indexes/models.py +63 -0
  38. deepset_mcp-0.0.2/src/deepset_mcp/api/indexes/protocols.py +53 -0
  39. deepset_mcp-0.0.2/src/deepset_mcp/api/indexes/resource.py +138 -0
  40. deepset_mcp-0.0.2/src/deepset_mcp/api/integrations/__init__.py +1 -0
  41. deepset_mcp-0.0.2/src/deepset_mcp/api/integrations/models.py +49 -0
  42. deepset_mcp-0.0.2/src/deepset_mcp/api/integrations/protocols.py +27 -0
  43. deepset_mcp-0.0.2/src/deepset_mcp/api/integrations/resource.py +57 -0
  44. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline/__init__.py +17 -0
  45. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline/log_level.py +9 -0
  46. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline/models.py +235 -0
  47. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline/protocols.py +83 -0
  48. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline/resource.py +378 -0
  49. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline_template/__init__.py +0 -0
  50. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline_template/models.py +56 -0
  51. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline_template/protocols.py +17 -0
  52. deepset_mcp-0.0.2/src/deepset_mcp/api/pipeline_template/resource.py +88 -0
  53. deepset_mcp-0.0.2/src/deepset_mcp/api/protocols.py +122 -0
  54. deepset_mcp-0.0.2/src/deepset_mcp/api/secrets/__init__.py +0 -0
  55. deepset_mcp-0.0.2/src/deepset_mcp/api/secrets/models.py +16 -0
  56. deepset_mcp-0.0.2/src/deepset_mcp/api/secrets/protocols.py +29 -0
  57. deepset_mcp-0.0.2/src/deepset_mcp/api/secrets/resource.py +112 -0
  58. deepset_mcp-0.0.2/src/deepset_mcp/api/shared_models.py +17 -0
  59. deepset_mcp-0.0.2/src/deepset_mcp/api/transport.py +336 -0
  60. deepset_mcp-0.0.2/src/deepset_mcp/api/user/__init__.py +0 -0
  61. deepset_mcp-0.0.2/src/deepset_mcp/api/user/protocols.py +11 -0
  62. deepset_mcp-0.0.2/src/deepset_mcp/api/user/resource.py +38 -0
  63. deepset_mcp-0.0.2/src/deepset_mcp/api/workspace/__init__.py +7 -0
  64. deepset_mcp-0.0.2/src/deepset_mcp/api/workspace/models.py +23 -0
  65. deepset_mcp-0.0.2/src/deepset_mcp/api/workspace/protocols.py +41 -0
  66. deepset_mcp-0.0.2/src/deepset_mcp/api/workspace/resource.py +94 -0
  67. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/README.md +425 -0
  68. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/__init__.py +1 -0
  69. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/agent_configs/debugging_agent.yml +10 -0
  70. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/agent_configs/generalist_agent.yml +6 -0
  71. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/dp_validation_error_analysis/__init__.py +0 -0
  72. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/dp_validation_error_analysis/eda.ipynb +757 -0
  73. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/dp_validation_error_analysis/prepare_interaction_data.ipynb +167 -0
  74. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/dp_validation_error_analysis/preprocessing_utils.py +213 -0
  75. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/__init__.py +0 -0
  76. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/agent_benchmark_runner.py +561 -0
  77. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/agent_loader.py +110 -0
  78. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli.py +39 -0
  79. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli_agent.py +373 -0
  80. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli_index.py +71 -0
  81. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli_pipeline.py +73 -0
  82. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli_tests.py +226 -0
  83. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/cli_utils.py +61 -0
  84. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/config.py +73 -0
  85. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/config_loader.py +64 -0
  86. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/interactive.py +140 -0
  87. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/models.py +203 -0
  88. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/repl.py +67 -0
  89. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/setup_actions.py +238 -0
  90. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/streaming.py +360 -0
  91. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/teardown_actions.py +196 -0
  92. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/runner/tracing.py +21 -0
  93. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/chat_rag_answers_wrong_format.yml +16 -0
  94. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/documents_output_wrong.yml +13 -0
  95. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/jinja_str_instead_of_complex_type.yml +11 -0
  96. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/jinja_syntax_error.yml +11 -0
  97. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/missing_output_mapping.yml +14 -0
  98. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/no_query_input.yml +13 -0
  99. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/chat_agent_jinja_str.yml +141 -0
  100. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/chat_agent_jinja_syntax.yml +141 -0
  101. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/chat_rag_answers_wrong_format.yml +181 -0
  102. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/chat_rag_missing_output_mapping.yml +189 -0
  103. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/rag_documents_wrong_format.yml +193 -0
  104. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/rag_no_query_input.yml +191 -0
  105. deepset_mcp-0.0.2/src/deepset_mcp/benchmark/tasks/pipelines/standard_index.yml +167 -0
  106. deepset_mcp-0.0.2/src/deepset_mcp/initialize_embedding_model.py +12 -0
  107. deepset_mcp-0.0.2/src/deepset_mcp/main.py +133 -0
  108. deepset_mcp-0.0.2/src/deepset_mcp/prompts/deepset_copilot_prompt.md +271 -0
  109. deepset_mcp-0.0.2/src/deepset_mcp/prompts/deepset_debugging_agent.md +214 -0
  110. deepset_mcp-0.0.2/src/deepset_mcp/store.py +5 -0
  111. deepset_mcp-0.0.2/src/deepset_mcp/tool_factory.py +473 -0
  112. deepset_mcp-0.0.2/src/deepset_mcp/tools/__init__.py +0 -0
  113. deepset_mcp-0.0.2/src/deepset_mcp/tools/custom_components.py +52 -0
  114. deepset_mcp-0.0.2/src/deepset_mcp/tools/doc_search.py +83 -0
  115. deepset_mcp-0.0.2/src/deepset_mcp/tools/haystack_service.py +358 -0
  116. deepset_mcp-0.0.2/src/deepset_mcp/tools/haystack_service_models.py +97 -0
  117. deepset_mcp-0.0.2/src/deepset_mcp/tools/indexes.py +129 -0
  118. deepset_mcp-0.0.2/src/deepset_mcp/tools/model_protocol.py +16 -0
  119. deepset_mcp-0.0.2/src/deepset_mcp/tools/pipeline.py +335 -0
  120. deepset_mcp-0.0.2/src/deepset_mcp/tools/pipeline_template.py +116 -0
  121. deepset_mcp-0.0.2/src/deepset_mcp/tools/secrets.py +45 -0
  122. deepset_mcp-0.0.2/src/deepset_mcp/tools/tokonomics/__init__.py +73 -0
  123. deepset_mcp-0.0.2/src/deepset_mcp/tools/tokonomics/decorators.py +396 -0
  124. deepset_mcp-0.0.2/src/deepset_mcp/tools/tokonomics/explorer.py +347 -0
  125. deepset_mcp-0.0.2/src/deepset_mcp/tools/tokonomics/object_store.py +177 -0
  126. deepset_mcp-0.0.2/src/deepset_mcp/tools/workspace.py +61 -0
  127. deepset_mcp-0.0.2/test/__init__.py +0 -0
  128. deepset_mcp-0.0.2/test/integration/__init__.py +0 -0
  129. deepset_mcp-0.0.2/test/integration/conftest.py +54 -0
  130. deepset_mcp-0.0.2/test/integration/test_integration_haystack_service_resource.py +39 -0
  131. deepset_mcp-0.0.2/test/integration/test_integration_index_resource.py +379 -0
  132. deepset_mcp-0.0.2/test/integration/test_integration_integrations_resource.py +73 -0
  133. deepset_mcp-0.0.2/test/integration/test_integration_pipeline_logs.py +207 -0
  134. deepset_mcp-0.0.2/test/integration/test_integration_pipeline_resource.py +381 -0
  135. deepset_mcp-0.0.2/test/integration/test_integration_pipeline_template_resource.py +145 -0
  136. deepset_mcp-0.0.2/test/integration/test_integration_secret_resource.py +194 -0
  137. deepset_mcp-0.0.2/test/integration/test_integration_workspace_resource.py +64 -0
  138. deepset_mcp-0.0.2/test/unit/__init__.py +0 -0
  139. deepset_mcp-0.0.2/test/unit/api/__init__.py +0 -0
  140. deepset_mcp-0.0.2/test/unit/api/custom_components/__init__.py +0 -0
  141. deepset_mcp-0.0.2/test/unit/api/custom_components/test_custom_components_resource.py +125 -0
  142. deepset_mcp-0.0.2/test/unit/api/haystack_service/__init__.py +0 -0
  143. deepset_mcp-0.0.2/test/unit/api/haystack_service/test_haystack_service_resource.py +113 -0
  144. deepset_mcp-0.0.2/test/unit/api/indexes/__init__.py +0 -0
  145. deepset_mcp-0.0.2/test/unit/api/indexes/test_index_resource.py +412 -0
  146. deepset_mcp-0.0.2/test/unit/api/integrations/__init__.py +1 -0
  147. deepset_mcp-0.0.2/test/unit/api/integrations/test_integration_resource.py +192 -0
  148. deepset_mcp-0.0.2/test/unit/api/pipeline/__init__.py +0 -0
  149. deepset_mcp-0.0.2/test/unit/api/pipeline/test_pipeline_resource.py +1082 -0
  150. deepset_mcp-0.0.2/test/unit/api/pipeline/test_pipeline_resource_search.py +478 -0
  151. deepset_mcp-0.0.2/test/unit/api/pipeline_template/__init__.py +0 -0
  152. deepset_mcp-0.0.2/test/unit/api/pipeline_template/test_pipeline_template_resource.py +270 -0
  153. deepset_mcp-0.0.2/test/unit/api/secrets/test_secret_resource.py +206 -0
  154. deepset_mcp-0.0.2/test/unit/api/test_transport.py +227 -0
  155. deepset_mcp-0.0.2/test/unit/api/user/__init__.py +0 -0
  156. deepset_mcp-0.0.2/test/unit/api/user/test_user_resource.py +76 -0
  157. deepset_mcp-0.0.2/test/unit/api/workspace/__init__.py +1 -0
  158. deepset_mcp-0.0.2/test/unit/api/workspace/test_workspace_resource.py +308 -0
  159. deepset_mcp-0.0.2/test/unit/conftest.py +281 -0
  160. deepset_mcp-0.0.2/test/unit/test_async_deepset_client.py +158 -0
  161. deepset_mcp-0.0.2/test/unit/tools/__init__.py +0 -0
  162. deepset_mcp-0.0.2/test/unit/tools/test_custom_components.py +269 -0
  163. deepset_mcp-0.0.2/test/unit/tools/test_doc_search.py +304 -0
  164. deepset_mcp-0.0.2/test/unit/tools/test_haystack_service.py +516 -0
  165. deepset_mcp-0.0.2/test/unit/tools/test_indexes.py +429 -0
  166. deepset_mcp-0.0.2/test/unit/tools/test_pipeline.py +1210 -0
  167. deepset_mcp-0.0.2/test/unit/tools/test_pipeline_template.py +354 -0
  168. deepset_mcp-0.0.2/test/unit/tools/test_secrets.py +180 -0
  169. deepset_mcp-0.0.2/test/unit/tools/test_workspace.py +239 -0
  170. deepset_mcp-0.0.2/test/unit/tools/tokonomics/__init__.py +0 -0
  171. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_decorators.py +452 -0
  172. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_explorable.py +165 -0
  173. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_explorer.py +447 -0
  174. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_integration.py +439 -0
  175. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_object_ref.py +161 -0
  176. deepset_mcp-0.0.2/test/unit/tools/tokonomics/test_object_store.py +220 -0
  177. deepset_mcp-0.0.2/uv.lock +2841 -0
@@ -0,0 +1,27 @@
1
+ name: AI Agent
2
+
3
+ on:
4
+ issues:
5
+ types: [labeled]
6
+ issue_comment:
7
+ types: [created]
8
+
9
+ jobs:
10
+ process-ai-issue:
11
+ if: |
12
+ (github.event_name == 'issues' && github.event.label.name == 'deepset-ai') ||
13
+ (github.event_name == 'issue_comment' && contains(github.event.issue.labels.*.name, 'deepset-ai'))
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Send Issue to deepset AI Platform
17
+ env:
18
+ DEEPSET_API_TOKEN: ${{ secrets.DEEPSET_API_TOKEN }}
19
+ ISSUE_URL: ${{ github.event.issue.html_url }}
20
+ REPOSITORY: ${{ github.repository }}
21
+ run: |
22
+ curl --request POST \
23
+ --url https://api.cloud.deepset.ai/api/v1/workspaces/default/pipelines/github-agent-claude/search \
24
+ --header 'accept: application/json' \
25
+ --header 'authorization: Bearer ${{ env.DEEPSET_API_TOKEN }}' \
26
+ --header 'content-type: application/json' \
27
+ --data '{"debug": false, "view_prompts": false, "queries": ["${{ env.ISSUE_URL }}"], "params": {"agent": {"repo": "${{ env.REPOSITORY }}"}}}'
@@ -0,0 +1,71 @@
1
+ name: Run CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ name: Run Tests
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Install uv
17
+ uses: astral-sh/setup-uv@v5
18
+
19
+ - name: Install Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version-file: ".python-version"
23
+
24
+ - name: Install project
25
+ run: uv sync --locked --all-extras --dev
26
+
27
+ - name: Run tests
28
+ run: uv run --dev pytest -m "not integration"
29
+
30
+ lint:
31
+ name: Run Linting
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v4
35
+
36
+ - name: Install uv
37
+ uses: astral-sh/setup-uv@v5
38
+
39
+ - name: Install Python
40
+ uses: actions/setup-python@v5
41
+ with:
42
+ python-version-file: ".python-version"
43
+
44
+ - name: Install project
45
+ run: uv sync --locked --all-extras --group lint
46
+
47
+ - name: Run lint
48
+ run: uv run ruff check
49
+
50
+ - name: Run format
51
+ run: uv run ruff format --check
52
+
53
+ types:
54
+ name: Run mypy
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+
59
+ - name: Install uv
60
+ uses: astral-sh/setup-uv@v5
61
+
62
+ - name: Install Python
63
+ uses: actions/setup-python@v5
64
+ with:
65
+ python-version-file: ".python-version"
66
+
67
+ - name: Install project
68
+ run: uv sync --locked --all-extras --group types
69
+
70
+ - name: Run types
71
+ run: uv run mypy src/ test/
@@ -0,0 +1,45 @@
1
+ name: Docker image release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [main]
7
+ tags: ["v[0-9].[0-9]+.[0-9]+*"]
8
+
9
+
10
+ jobs:
11
+ build-and-push:
12
+ name: Build base image
13
+ runs-on: ubuntu-latest
14
+ if: github.repository_owner == 'deepset-ai'
15
+
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up QEMU
21
+ uses: docker/setup-qemu-action@v3
22
+
23
+ - name: Set up Docker Buildx
24
+ uses: docker/setup-buildx-action@v3
25
+
26
+ - name: Login to DockerHub
27
+ uses: docker/login-action@v3
28
+ with:
29
+ username: ${{ secrets.DOCKER_HUB_USER }}
30
+ password: ${{ secrets.DOCKER_HUB_TOKEN }}
31
+
32
+ - name: Docker meta
33
+ id: meta
34
+ uses: docker/metadata-action@v5
35
+ with:
36
+ images: deepset/deepset-mcp-server
37
+
38
+ - name: Build and push Docker image
39
+ uses: docker/build-push-action@v6
40
+ with:
41
+ context: .
42
+ platforms: linux/amd64,linux/arm64
43
+ push: true
44
+ tags: ${{ steps.meta.outputs.tags }}
45
+ labels: ${{ steps.meta.outputs.labels }}
@@ -0,0 +1,47 @@
1
+ name: Publish deepset-mcp distribution to PyPI and TestPyPI
2
+ on:
3
+ push:
4
+ tags:
5
+ - 'v*.*.*' # matches v1.0.0, v0.10.0, etc.
6
+ - 'v*.*.*-rc*' # matches v1.0.2-rc1, v0.10.0-rc2, etc.
7
+ jobs:
8
+ build:
9
+ name: Build distribution
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ persist-credentials: false
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v5
17
+ - name: Set up Python
18
+ run: uv python install
19
+ - name: Install the project
20
+ run: uv sync --locked --all-extras --dev
21
+ - name: Build a binary wheel and a source tarball
22
+ run: uv build
23
+ - name: Store the distribution packages
24
+ uses: actions/upload-artifact@v4
25
+ with:
26
+ name: python-package-distributions
27
+ path: dist/
28
+ publish-to-pypi:
29
+ name: >-
30
+ Publish deepset-mcp distribution to PyPI
31
+ if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
32
+ needs:
33
+ - build
34
+ runs-on: ubuntu-latest
35
+ environment:
36
+ name: pypi
37
+ url: https://pypi.org/p/deepset-mcp
38
+ permissions:
39
+ id-token: write # IMPORTANT: mandatory for trusted publishing
40
+ steps:
41
+ - name: Download all the dists
42
+ uses: actions/download-artifact@v4
43
+ with:
44
+ name: python-package-distributions
45
+ path: dist/
46
+ - name: Publish distribution to PyPI
47
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,28 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ data/
7
+ wheels/
8
+ *.egg-info
9
+
10
+ # Virtual environments
11
+ .venv
12
+
13
+ # env files
14
+ .env
15
+ .env.prod
16
+ .env.dev
17
+ .env.test
18
+
19
+
20
+ agent_runs/
21
+
22
+ misc.xml
23
+ modules.xml
24
+ profiles_settings.xml
25
+ deepset-mcp-server.iml
26
+ Project_Default.xml
27
+ pyright-overrides.xml
28
+ vcs.xml
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,57 @@
1
+ # ─── BUILD STAGE ───────────────────────────────────────────────────────────────
2
+ FROM python:3.11-slim AS builder
3
+
4
+ # 1. Install curl & build tools for uv & any C extensions
5
+ RUN apt-get update \
6
+ && apt-get install -y --no-install-recommends curl build-essential git \
7
+ && rm -rf /var/lib/apt/lists/*
8
+
9
+ # 2. Install uv standalone and symlink it
10
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
11
+ && ln -sf /root/.local/bin/uv /usr/local/bin/uv
12
+
13
+ WORKDIR /src
14
+
15
+ # We need git for uv-dynamic-versioning
16
+ COPY .git/ .git/
17
+
18
+ # 3. Copy in only what uv needs to build the locked venv
19
+ COPY pyproject.toml uv.lock README.md entrypoint.sh ./
20
+ COPY src/deepset_mcp/ src/deepset_mcp/
21
+
22
+ # 4. Create & populate .venv from uv.lock
23
+ RUN uv sync --locked
24
+
25
+
26
+
27
+ # ─── RUNTIME STAGE ─────────────────────────────────────────────────────────────
28
+ FROM python:3.11-slim
29
+
30
+ # 2. Create an unprivileged user with a home directory
31
+ RUN groupadd --system appgroup \
32
+ && useradd --system --create-home --home-dir /home/appuser --gid appgroup appuser
33
+
34
+ ENV HOME=/home/appuser
35
+
36
+ WORKDIR /app
37
+
38
+ # 5. Copy in the pre-built venv and your project sources
39
+ COPY --from=builder /src/.venv /app/.venv
40
+ COPY --from=builder /src/pyproject.toml /app/pyproject.toml
41
+ COPY --from=builder /src/uv.lock /app/uv.lock
42
+ COPY --from=builder /src/README.md /app/README.md
43
+ COPY --from=builder /src/src/deepset_mcp /app/src/deepset_mcp
44
+ COPY --from=builder /src/entrypoint.sh /app/entrypoint.sh
45
+
46
+ RUN chmod +x /app/entrypoint.sh
47
+
48
+ # 6. Ensure appuser owns all of /app
49
+ RUN chown -R appuser:appgroup /app
50
+
51
+ # 7. Put the venv’s bin first in PATH
52
+ ENV PATH="/app/.venv/bin:${PATH}"
53
+
54
+ # 9. Switch to non-root user
55
+ USER appuser
56
+
57
+ ENTRYPOINT ["/app/entrypoint.sh"]
@@ -0,0 +1,62 @@
1
+ .PHONY: help install test test-unit test-integration test-integration-slow test-all lint lint-fix format format-check types clean
2
+
3
+ # Default target
4
+ help:
5
+ @echo "Available commands:"
6
+ @echo " install Install dependencies with uv"
7
+ @echo " test-unit Run unit tests only (excludes integration tests)"
8
+ @echo " test-integration Run integration tests without extra slow tests"
9
+ @echo " test-integration-slow Run integration tests including extra slow tests"
10
+ @echo " test-all Run all tests"
11
+ @echo " lint Run ruff check"
12
+ @echo " lint-fix Run ruff check with --fix"
13
+ @echo " format Run ruff format"
14
+ @echo " format-check Run ruff format with --check"
15
+ @echo " types Run mypy type checking"
16
+ @echo " clean Clean up cache files"
17
+
18
+ # Install dependencies
19
+ install:
20
+ uv sync --locked --all-extras --all-groups
21
+
22
+ # Test commands
23
+ test-unit:
24
+ uv run --dev pytest -m "not integration"
25
+
26
+ test-integration:
27
+ uv run --dev pytest -m "integration and not extra_slow"
28
+
29
+ test-integration-slow:
30
+ uv run --dev pytest -m "integration"
31
+
32
+ test-all:
33
+ uv run --dev pytest
34
+
35
+ # Shorthand for test-unit (most common use case)
36
+ test: test-unit
37
+
38
+ # Linting commands
39
+ lint:
40
+ uv run ruff check
41
+
42
+ lint-fix:
43
+ uv run ruff check --fix
44
+
45
+ # Formatting commands
46
+ format:
47
+ uv run ruff format
48
+
49
+ format-check:
50
+ uv run ruff format --check
51
+
52
+ # Type checking
53
+ types:
54
+ uv run mypy src/ test/
55
+
56
+ # Clean up
57
+ clean:
58
+ find . -type f -name "*.pyc" -delete
59
+ find . -type d -name "__pycache__" -delete
60
+ find . -type d -name ".pytest_cache" -exec rm -rf {} +
61
+ find . -type d -name ".mypy_cache" -exec rm -rf {} +
62
+ find . -type d -name ".ruff_cache" -exec rm -rf {} +
@@ -0,0 +1,288 @@
1
+ Metadata-Version: 2.4
2
+ Name: deepset-mcp
3
+ Version: 0.0.2
4
+ Summary: Collection of MCP tools and Agents to work with the deepset AI platform. Create, debug or learn about pipelines on the platform. Useable from the CLI, Cursor, Claude Code, or other MCP clients.
5
+ Project-URL: Homepage, https://deepset.ai
6
+ Author-email: Mathis Lucka <mathis.lucka@deepset.ai>, Tanay Soni <tanay.soni@deepset.ai>
7
+ Keywords: Agents,Haystack,LLM,MCP,deepset,pipelines
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
17
+ Requires-Python: >=3.11
18
+ Requires-Dist: fastapi
19
+ Requires-Dist: glom
20
+ Requires-Dist: httpx
21
+ Requires-Dist: mcp>=1.10.1
22
+ Requires-Dist: model2vec
23
+ Requires-Dist: numpy
24
+ Requires-Dist: pydantic>=2.0.0
25
+ Requires-Dist: pyyaml
26
+ Requires-Dist: rich
27
+ Provides-Extra: analysis
28
+ Requires-Dist: jupyterlab; extra == 'analysis'
29
+ Requires-Dist: matplotlib; extra == 'analysis'
30
+ Requires-Dist: pandas; extra == 'analysis'
31
+ Requires-Dist: seaborn; extra == 'analysis'
32
+ Provides-Extra: cli
33
+ Requires-Dist: anthropic-haystack>=2.7.0; extra == 'cli'
34
+ Requires-Dist: haystack-ai>=2.15.1; extra == 'cli'
35
+ Requires-Dist: langfuse-haystack; extra == 'cli'
36
+ Requires-Dist: mcp-haystack>=0.4.0; extra == 'cli'
37
+ Requires-Dist: typer; extra == 'cli'
38
+ Description-Content-Type: text/markdown
39
+
40
+ # MCP Server for the deepset AI platform
41
+
42
+ The deepset MCP server exposes tools that MCP clients like Claude or Cursor can use to interact with the deepset AI platform.
43
+
44
+ Agents can use these tools to:
45
+
46
+ - develop and iterate on Pipelines or Indexes
47
+ - debug Pipelines and Indexes
48
+ - search the deepset AI platform documentation
49
+
50
+ ## Contents
51
+
52
+ - [1. Installation](#installation)
53
+ - [1.1. Claude Desktop](#claude-desktop-app)
54
+ - [1.2. Other MCP Clients](#other-mcp-clients)
55
+ - [1.3. Advanced Configuration](#advanced-configuration)
56
+ - [2. Prompts](#prompts)
57
+ - [3. Use Cases](#use-cases)
58
+ - [3.1. Creating Pipelines](#creating-pipelines)
59
+ - [3.2. Debugging Pipelines](#debugging-pipelines)
60
+ - [4. CLI](#cli)
61
+
62
+
63
+
64
+
65
+
66
+ ![GIF showing CLI interaction with the MCP server](assets/deepset-mcp-3.gif)
67
+
68
+
69
+ ## Installation
70
+
71
+ ### Claude Desktop App
72
+
73
+ **Prerequisites:**
74
+ - [Claude Desktop App](https://claude.ai/download) needs to be installed
75
+ - You need to be on the Claude Pro, Team, Max, or Enterprise plan
76
+ - You need an installation of [Docker](https://docs.docker.com/desktop/) ([Go here](#using-uv-instead-of-docker) if you want to use `uv` instead of Docker)
77
+ - You need an [API key](https://docs.cloud.deepset.ai/docs/generate-api-key) for the deepset platform
78
+
79
+ **Steps:**
80
+ 1. Go to: `/Users/your_user/Library/Application Support/Claude` (Mac)
81
+ 2. Either open or create `claude_desktop_config.json`
82
+ 3. Add the following json as your config (or update your existing config if you are already using other MCP servers)
83
+
84
+ ```json
85
+ {
86
+ "mcpServers": {
87
+ "deepset": {
88
+ "command": "/usr/local/bin/docker",
89
+ "args": [
90
+ "run",
91
+ "-i",
92
+ "-e",
93
+ "DEEPSET_WORKSPACE",
94
+ "-e",
95
+ "DEEPSET_API_KEY",
96
+ "deepset/deepset-mcp-server:main"
97
+ ],
98
+ "env": {
99
+ "DEEPSET_WORKSPACE":"<WORKSPACE>",
100
+ "DEEPSET_API_KEY":"<DEEPSET_API_KEY>"
101
+ }
102
+
103
+ }
104
+ }
105
+ }
106
+ ```
107
+
108
+ 4. Quit and start the Claude Desktop App
109
+ 5. The deepset server should appear in the "Search and Tools" menu (this takes a few seconds as the Docker image needs to be downloaded and started)
110
+
111
+ ![Screenshot of the Search and Tools menu in the Claude Desktop App with deepset server running.](assets/claude_desktop_with_tools.png)
112
+
113
+
114
+
115
+ #### Using uv instead of Docker
116
+
117
+ Running the server with uv gives you faster startup time and consumes slightly less resources on your system.
118
+
119
+ 1. [Install uv](https://docs.astral.sh/uv/guides/install-python/) if you don't have it yet
120
+ 2. Put the following into your `claude_desktop_config.json`
121
+
122
+ ```python
123
+ {
124
+ "mcpServers": {
125
+ "deepset": {
126
+ "command": "uvx",
127
+ "args": [
128
+ "deepset-mcp"
129
+ ],
130
+ "env": {
131
+ "DEEPSET_WORKSPACE":"<WORKSPACE>",
132
+ "DEEPSET_API_KEY":"<DEEPSET_API_KEY>"
133
+ }
134
+
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ This will load the [deepset-mcp package from PyPi](https://pypi.org/project/deepset-mcp/) and install it into a temporary virtual environment.
141
+
142
+ 3. Quit and start the Claude Desktop App
143
+
144
+
145
+
146
+ ### Other MCP Clients
147
+
148
+ `deepset-mcp` can be used with other MCP clients.
149
+
150
+ Here is where you need to configure `deepset-mcp` for:
151
+
152
+ - [Cursor](https://docs.cursor.com/context/mcp#using-mcp-json)
153
+ - [Claude Code](https://docs.anthropic.com/en/docs/claude-code/mcp#configure-mcp-servers)
154
+ - [Gemini CLI](https://cloud.google.com/gemini/docs/codeassist/use-agentic-chat-pair-programmer#configure-mcp-servers)
155
+
156
+ Generally speaking, depending on your installation, you need to configure an MCP client with one of the following commands:
157
+
158
+ `uvx deepset-mcp --workspace your_workspace --api-key your_api_key`
159
+
160
+ If you installed the deepset-mcp package globally and added it to your `PATH`, you can just run:
161
+
162
+ `deepset-mcp --workspace your_workspace --api-key your_api_key`
163
+
164
+ The server runs locally using `stdio` to communicate with the client.
165
+
166
+ ### Advanced Configuration
167
+
168
+ #### Tool Selection
169
+
170
+ You can customize which tools the MCP server should expose.
171
+ Use the `´--tools`-option in your config to explicitly specify which tools should be exposed.
172
+
173
+ You can list available tools with: `deepset-mcp --list-tools`.
174
+
175
+ To only expose the `list_pipelines` and `get_pipeline` tools you would use the following command:
176
+
177
+ `deepset-mcp --tools list_pipelines get_pipeline`
178
+
179
+ For smooth operations, you should always expose the `get_from_object_store` and `get_slice_from_object_store` tools.
180
+
181
+
182
+ #### Allowing access to multiple workspaces
183
+
184
+ The basic configuration uses a hardcoded workspace which you pass in via the `DEEPSET_WORKSPACE` environment variable.
185
+ If you want to allow an agent to access resources from multiple workspaces, you can use `--workspace-mode explicit`
186
+ in your config.
187
+
188
+ For example:
189
+
190
+ ```json
191
+ {
192
+ "mcpServers": {
193
+ "deepset": {
194
+ "command": "uvx",
195
+ "args": [
196
+ "deepset-mcp",
197
+ "--workspace-mode",
198
+ "explicit"
199
+ ],
200
+ "env": {
201
+ "DEEPSET_API_KEY":"<DEEPSET_API_KEY>"
202
+ }
203
+
204
+ }
205
+ }
206
+ }
207
+ ```
208
+
209
+ An agent using the MCP server now has access to all workspaces that the API-key has access to. When interacting with most
210
+ resources, you will need to tell the agent what workspace it should use to perform an action. Instead of prompting it
211
+ with "list my pipelines", you would now have to prompt it with "list my pipelines in the staging workspace".
212
+
213
+
214
+ ## Prompts
215
+
216
+ All tools exposed through the MCP server have minimal prompts. Any Agent interacting with these tools benefits from an additional system prompt.
217
+
218
+ View the **recommended prompt** [here](src/deepset_mcp/prompts/deepset_debugging_agent.md).
219
+
220
+ This prompt is also exposed as the `deepset_recommended_prompt` on the MCP server.
221
+ In Claude Desktop, click `add from deepset` to add the prompt to your context.
222
+ A better way to add system prompts in Claude Desktop is through "Projects".
223
+
224
+ You can customize the system prompt to your specific needs.
225
+
226
+
227
+ ## Use Cases
228
+
229
+ The primary way to use the deepset MCP server is through an LLM that interacts with the deepset MCP tools in an agentic way.
230
+
231
+ ### Creating Pipelines
232
+
233
+ Tell the LLM about the type of pipeline you want to build. Creating new pipelines will work best if you use terminology
234
+ that is similar to what is used on the deepset AI platform or in Haystack.
235
+
236
+ Your prompts should be precise and specific.
237
+
238
+ Examples:
239
+
240
+ - "Build a RAG pipeline with hybrid retrieval that uses claude-sonnet-4 from Anthropic as the LLM."
241
+ - "Build an Agent that can iteratively search the web (deep research). Use SerperDev for web search and GPT-4o as the LLM."
242
+
243
+ You can also instruct the LLM to deploy pipelines, and it can issue search requests against pipelines to test them.
244
+
245
+ **Best Practices**
246
+
247
+ - be specific in your requests
248
+ - point the LLM to examples, if there is already a similar pipeline in your workspace, then ask it to look at it first,
249
+ if you have a template in mind, ask it to look at the template
250
+ - instruct the LLM to iterate with you locally before creating the pipeline, have it validate the drafts and then let it
251
+ create it once the pipeline is up to your standards
252
+
253
+
254
+ ### Debugging Pipelines
255
+
256
+ The `deepset-mcp` tools allow LLMs to debug pipelines on the deepset AI platform.
257
+ Primary tools used for debugging are:
258
+ - get_logs
259
+ - validate_pipeline
260
+ - search_pipeline
261
+ - search_pipeline_templates
262
+ - search_component_definition
263
+
264
+ You can ask the LLM to check the logs of a specific pipeline in case it is already deployed but has errors.
265
+ The LLM will find errors in the logs and devise strategies to fix them.
266
+ If your pipeline is not deployed yet, the LLM can autonomously validate it and fix validation errors.
267
+
268
+ ## CLI
269
+ You can use the MCP server as a Haystack Agent through a command-line interface.
270
+
271
+ Install with `uvx tool install "deepset-mcp[cli]"`.
272
+
273
+ Start the interactive CLI with:
274
+
275
+ `deepset agent chat`
276
+
277
+ You can set environment variables before starting the Agent via:
278
+
279
+ ```shell
280
+ export DEEPSET_API_KEY=your_key
281
+ export DEEPSET_WORKSPACE=your_workspace
282
+ ```
283
+
284
+ You can also provide an `.env` file using the `--env-file` option:
285
+
286
+ `deepset agent chat --env-file your/env/.file`
287
+
288
+ The agent will load environment variables from the file on startup.