spice-mcp 0.1.2__tar.gz → 0.1.3__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 spice-mcp might be problematic. Click here for more details.

Files changed (164) hide show
  1. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/.gitignore +3 -0
  2. spice_mcp-0.1.3/.hypothesis/constants/03230d036f66298e +4 -0
  3. spice_mcp-0.1.3/.hypothesis/constants/06eb11a7027a88cd +4 -0
  4. spice_mcp-0.1.3/.hypothesis/constants/0f801575b114e021 +4 -0
  5. spice_mcp-0.1.3/.hypothesis/constants/1eeb4d051122e156 +4 -0
  6. spice_mcp-0.1.3/.hypothesis/constants/366c70be49a7442b +4 -0
  7. spice_mcp-0.1.3/.hypothesis/constants/4753a088eccf5421 +4 -0
  8. spice_mcp-0.1.3/.hypothesis/constants/4a324fb33357cad2 +4 -0
  9. spice_mcp-0.1.3/.hypothesis/constants/4cc858fdf36f013d +4 -0
  10. spice_mcp-0.1.3/.hypothesis/constants/5405706eff340311 +4 -0
  11. spice_mcp-0.1.3/.hypothesis/constants/6cfc775ad89a5b6a +4 -0
  12. spice_mcp-0.1.3/.hypothesis/constants/71bc6f8cf28bcc19 +4 -0
  13. spice_mcp-0.1.3/.hypothesis/constants/851c74a7cccd312b +4 -0
  14. spice_mcp-0.1.3/.hypothesis/constants/8c85c7b24d65d86a +4 -0
  15. spice_mcp-0.1.3/.hypothesis/constants/8d1eb008907ca218 +4 -0
  16. spice_mcp-0.1.3/.hypothesis/constants/9da684ed8a9b8d9c +4 -0
  17. spice_mcp-0.1.3/.hypothesis/constants/adc83b19e793491b +4 -0
  18. spice_mcp-0.1.3/.hypothesis/constants/ae79689a9c0be3fc +4 -0
  19. spice_mcp-0.1.3/.hypothesis/constants/c9f1afd2a84c92ac +4 -0
  20. spice_mcp-0.1.3/.hypothesis/constants/d427659fa4d8fdef +4 -0
  21. spice_mcp-0.1.3/.hypothesis/constants/d946c4cbd3f551fb +4 -0
  22. spice_mcp-0.1.3/.hypothesis/constants/da39a3ee5e6b4b0d +4 -0
  23. spice_mcp-0.1.3/.hypothesis/constants/df167ab23556209e +4 -0
  24. spice_mcp-0.1.3/.hypothesis/constants/e5d028d6ca3bc6c6 +4 -0
  25. spice_mcp-0.1.3/.hypothesis/constants/ea30e4add0a6171c +4 -0
  26. spice_mcp-0.1.3/.hypothesis/constants/ebbaf5778e99a3e9 +4 -0
  27. spice_mcp-0.1.3/.hypothesis/constants/ebfda9399227f401 +4 -0
  28. spice_mcp-0.1.3/.hypothesis/constants/f8058dd8f3978a9f +4 -0
  29. spice_mcp-0.1.3/.hypothesis/examples/04e6b3400353b141/3297e56a00db6e8d +0 -0
  30. spice_mcp-0.1.3/.hypothesis/examples/04e6b3400353b141/5206044c103f45ca +2 -0
  31. spice_mcp-0.1.3/.hypothesis/examples/04e6b3400353b141/8c16f33e2460573e +1 -0
  32. spice_mcp-0.1.3/.hypothesis/examples/04e6b3400353b141/c67ab7f30dd41ebd +1 -0
  33. spice_mcp-0.1.3/.hypothesis/examples/3297e56a00db6e8d/1236c0a13f38a176 +0 -0
  34. spice_mcp-0.1.3/.hypothesis/examples/5206044c103f45ca/e4201915c9a55aa8 +1 -0
  35. spice_mcp-0.1.3/.hypothesis/examples/8c16f33e2460573e/05f4853fe973fb8f +1 -0
  36. spice_mcp-0.1.3/.hypothesis/examples/8c16f33e2460573e/57bd1d7010b0a3e5 +1 -0
  37. spice_mcp-0.1.3/.hypothesis/examples/8c16f33e2460573e/6c3ff7a3026f98fd +1 -0
  38. spice_mcp-0.1.3/.hypothesis/examples/8c16f33e2460573e/ccd03e0f6bc2e1a2 +1 -0
  39. spice_mcp-0.1.3/.hypothesis/examples/8c16f33e2460573e/d179779eaa64628d +1 -0
  40. spice_mcp-0.1.3/.hypothesis/examples/c67ab7f30dd41ebd/31f5e37d90db6ce6 +1 -0
  41. spice_mcp-0.1.3/.hypothesis/unicode_data/15.1.0/charmap.json.gz +0 -0
  42. spice_mcp-0.1.3/.hypothesis/unicode_data/15.1.0/codec-utf-8.json.gz +0 -0
  43. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/PKG-INFO +18 -13
  44. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/README.md +17 -12
  45. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/architecture.md +3 -4
  46. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/codex_cli.md +7 -13
  47. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/config.md +1 -1
  48. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/development.md +3 -3
  49. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/discovery.md +0 -4
  50. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/index.md +1 -1
  51. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/tools.md +1 -14
  52. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/pyproject.toml +1 -1
  53. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/__init__.py +4 -2
  54. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/cache.py +2 -34
  55. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/extract.py +33 -631
  56. spice_mcp-0.1.3/src/spice_mcp/adapters/spellbook/__init__.py +6 -0
  57. spice_mcp-0.1.3/src/spice_mcp/adapters/spellbook/explorer.py +313 -0
  58. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/config.py +1 -1
  59. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/core/models.py +0 -8
  60. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/core/ports.py +0 -15
  61. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/mcp/server.py +321 -116
  62. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/mcp/tools/base.py +1 -1
  63. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/mcp/tools/execute_query.py +26 -59
  64. spice_mcp-0.1.3/tests/fastmcp/test_resources_and_validation.py +58 -0
  65. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/fastmcp/test_server_fastmcp.py +34 -27
  66. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/fastmcp/test_server_mcp_extras.py +1 -3
  67. spice_mcp-0.1.3/tests/integration/__init__.py +2 -0
  68. spice_mcp-0.1.3/tests/integration/test_spellbook_discovery.py +214 -0
  69. spice_mcp-0.1.3/tests/integration/test_user_journeys.py +327 -0
  70. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/mcp/conftest.py +2 -21
  71. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/mcp/test_tool_contracts.py +0 -16
  72. spice_mcp-0.1.3/tests/offline/test_cache_consistency.py +253 -0
  73. spice_mcp-0.1.3/tests/offline/test_edge_cases.py +256 -0
  74. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_typing_utils.py +4 -6
  75. spice_mcp-0.1.3/tests/property/__init__.py +2 -0
  76. spice_mcp-0.1.3/tests/property/test_property_based.py +195 -0
  77. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_mcp_simulation.py +0 -1
  78. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_mcp_tools.py +4 -5
  79. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/support/helpers.py +2 -7
  80. spice_mcp-0.1.3/tests/tools/test_additional_mcp_tools.py +117 -0
  81. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/tools/test_execute_query_tool.py +6 -15
  82. spice_mcp-0.1.3/tests/tools/test_unified_discover.py +183 -0
  83. spice_mcp-0.1.3/tests/validation/__init__.py +2 -0
  84. spice_mcp-0.1.3/tests/validation/test_error_messages.py +206 -0
  85. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/uv.lock +1 -1
  86. spice_mcp-0.1.2/debug_mcp_tool.py +0 -147
  87. spice_mcp-0.1.2/debug_template_query.py +0 -147
  88. spice_mcp-0.1.2/docs/commands.md +0 -41
  89. spice_mcp-0.1.2/issue_diagnostics.py +0 -76
  90. spice_mcp-0.1.2/src/spice_mcp/mcp/tools/sui_package_overview.py +0 -56
  91. spice_mcp-0.1.2/src/spice_mcp/service_layer/sui_service.py +0 -131
  92. spice_mcp-0.1.2/test_semaphore_fix.py +0 -101
  93. spice_mcp-0.1.2/test_sync_fix.py +0 -55
  94. spice_mcp-0.1.2/tests/fastmcp/test_resources_and_validation.py +0 -49
  95. spice_mcp-0.1.2/tests/mcp/test_resources.py +0 -53
  96. spice_mcp-0.1.2/tests/tools/test_additional_mcp_tools.py +0 -82
  97. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/.python-version +0 -0
  98. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/CONTRIBUTING.md +0 -0
  99. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/LICENSE +0 -0
  100. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/codex_cli_tools.md +0 -0
  101. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/dune_api.md +0 -0
  102. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/docs/installation.md +0 -0
  103. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/pytest.ini +0 -0
  104. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/scripts/bridgez/make_circle_comparison.py +0 -0
  105. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/scripts/codex_tools_doctor.sh +0 -0
  106. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/__init__.py +0 -0
  107. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/__init__.py +0 -0
  108. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/admin.py +0 -0
  109. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/client.py +0 -0
  110. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/helpers.py +0 -0
  111. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/transport.py +0 -0
  112. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/types.py +0 -0
  113. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/typing_utils.py +0 -0
  114. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/dune/urls.py +0 -0
  115. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/adapters/http_client.py +0 -0
  116. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/core/__init__.py +0 -0
  117. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/core/errors.py +0 -0
  118. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/logging/query_history.py +0 -0
  119. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/mcp/__init__.py +0 -0
  120. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/mcp/tools/__init__.py +0 -0
  121. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/observability/__init__.py +0 -0
  122. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/observability/logging.py +0 -0
  123. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/polars_utils.py +0 -0
  124. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/py.typed +0 -0
  125. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/service_layer/__init__.py +0 -0
  126. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/service_layer/discovery_service.py +0 -0
  127. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/service_layer/query_admin_service.py +0 -0
  128. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/src/spice_mcp/service_layer/query_service.py +0 -0
  129. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/cassettes/.gitkeep +0 -0
  130. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/config/environments.yaml +0 -0
  131. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/config/test_queries.yaml +0 -0
  132. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/conftest.py +0 -0
  133. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/http_stubbed/test_age.py +0 -0
  134. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/http_stubbed/test_errors.py +0 -0
  135. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/http_stubbed/test_pagination.py +0 -0
  136. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/live/test_live_basic.py +0 -0
  137. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/live/test_live_sui.py +0 -0
  138. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_cache.py +0 -0
  139. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_discovery.py +0 -0
  140. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_dune_adapter.py +0 -0
  141. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_parsing.py +0 -0
  142. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_query_history.py +0 -0
  143. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_show_rewrite.py +0 -0
  144. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_timeout.py +0 -0
  145. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/offline/test_urls.py +0 -0
  146. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/comprehensive_test_runner.py +0 -0
  147. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/run_tests.py +0 -0
  148. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_api_health.py +0 -0
  149. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_cache_functionality.py +0 -0
  150. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_data_types.py +0 -0
  151. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_dune_connectivity.py +0 -0
  152. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_dune_query_execution.py +0 -0
  153. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_error_handling.py +0 -0
  154. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_performance.py +0 -0
  155. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_query_lifecycle.py +0 -0
  156. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_resilience.py +0 -0
  157. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/scripts/test_resource_management.py +0 -0
  158. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/style/test_polars_lazy.py +0 -0
  159. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/support/api_client.py +0 -0
  160. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/support/query_factory.py +0 -0
  161. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/support/test_data.py +0 -0
  162. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/tools/test_health_tool.py +0 -0
  163. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/tools/test_query_service.py +0 -0
  164. {spice_mcp-0.1.2 → spice_mcp-0.1.3}/tests/tools/test_schemas.py +0 -0
@@ -21,3 +21,6 @@ bin/
21
21
  .github/
22
22
  .factory/
23
23
  debug_api.py
24
+
25
+ # Local testing environment
26
+ test_spice_mcp/
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/mcp/tools/base.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['query']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/__init__.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/mcp/tools/sui_package_overview.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['additionalProperties', 'array', 'default', 'hours', 'integer', 'items', 'number', 'object', 'packages', 'properties', 'required', 'string', 'sui_package_overview', 'timeout_seconds', 'tool', 'type']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/config.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [500, '0.35', '15', '3', '30', '5', '5.0', '500', 'DUNE_API_KEY', 'DUNE_API_URL', 'SPICE_ARTIFACT_ROOT', 'SPICE_CACHE_DIR', 'SPICE_CACHE_MODE', 'SPICE_HTTP_BACKOFF', 'SPICE_HTTP_RETRIES', 'SPICE_HTTP_TIMEOUT', 'SPICE_QUERY_HISTORY', 'disabled', 'enabled', 'read_only', 'refresh', 'true']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/service_layer/query_admin_service.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/core/ports.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/types.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['large', 'medium']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/mcp/tools/execute_query.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [10.0, 1000, '4060379', 'DUNE_API_KEY', 'DUNE_API_KEY_present', 'GET', 'Query parameters', 'User-Agent', 'X-Dune-API-Key', 'additionalProperties', 'array', 'boolean', 'columns', 'compute_query_sha256', 'data', 'data_preview', 'debug_info', 'default', 'description', 'dune.com/queries', 'dune_error', 'dune_query', 'dune_state', 'duration_ms', 'enum', 'environment_vars', 'error', 'execution', 'execution_ended_at', 'execution_id', 'execution_started_at', 'extras', 'format', 'https://', 'integer', 'items', 'large', 'limit', 'max_age', 'medium', 'metadata', 'next_offset', 'next_uri', 'number', 'object', 'offset', 'parameters', 'performance', 'poll', 'preview', 'properties', 'query', 'query_id', 'query_sha256', 'query_sql', 'query_type', 'query_url', 'raw', 'raw_sql', 'refresh', 'required', 'rowcount', 'sample_count', 'sort_by', 'state', 'status', 'string', 'submitted', 'success', 'suggested_action', 'template_query_id', 'timeout_seconds', 'tool', 'type', 'unknown', 'url', 'write_sql_artifact']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/urls.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['&', ',', '.', '/', '/api/v1/query/(\\d+)', '/query/', '/query/{query_id}', '?', 'DUNE_API_KEY', 'DUNE_API_URL', 'X-Dune-API-Key', 'execution_results', 'execution_status', 'invalid query id: ', 'params', 'query', 'query_create', 'query_execution', 'query_fork', 'query_parameters', 'query_results', 'query_results_json']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/service_layer/sui_service.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [200, 1000, 3600, ' OR ', ',', '0x', 'columns', 'data_preview', 'events_count', 'events_error', 'events_preview', 'events_timeout', 'large', 'objects_count', 'objects_error', 'objects_preview', 'objects_timeout', 'ok', 'rowcount', 'transactions_count', 'transactions_error', 'transactions_preview', 'transactions_timeout']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/cache.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['/tmp/dune_spice', '_tmp_', 'all_types', 'cache_dir', 'columns', 'execution_id', 'extras', 'include_execution', 'invalid format for ', 'limit', 'offset', 'parameters', 'query_id', 'sample_count', 'sort_by', 'spice-mcp', 'spice_version', 'timestamp', 'types', 'utf-8', 'verbose']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/logging/query_history.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [200, '.spice_mcp', 'SPICE_ARTIFACT_ROOT', 'SPICE_QUERY_HISTORY', 'a', 'artifacts', 'by_sha', 'cache_hit', 'disabled', 'duration_ms', 'error', 'execution_id', 'logs', 'queries', 'queries.jsonl', 'query_preview', 'query_sha256', 'query_type', 'reason', 'rowcount', 'sql_path', 'status', 'timestamp', 'ts', 'utf-8']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/admin.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['Content-Type', 'GET', 'PATCH', 'POST', 'User-Agent', 'X-Dune-API-Key', 'application/json', 'description', 'is_private', 'name', 'parameters', 'query', 'query_create', 'query_fork', 'query_sql', 'spice-mcp-admin/1', 'tags']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/transport.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['GET', 'POST']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/__init__.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['query', 'urls']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/mcp/__init__.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/service_layer/discovery_service.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/extract.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [0.5, 1.0, 1.5, 2.5, 5.0, 15.0, 404, 429, 502, '%.02f', ',', ', t = ', '30', '<nil>', 'GET', 'QUERY_STATE_FAILED', 'SPICE_HTTP_TIMEOUT', 'User-Agent', 'X-Dune-API-Key', 'Z', 'all_types', 'api.dune.com', 'api_key', 'cache', 'cache_dir', 'columns', 'dune.com/queries', 'empty query', 'error', 'execute_kwargs', 'execution_id', 'execution_started_at', 'extras', 'https://', 'include_execution', 'latest result age:', 'limit', 'medium', 'offset', 'parameters', 'performance', 'poll_interval', 'query', 'query_id', 'query_parameters', 'result_kwargs', 'sample_count', 'save_to_cache', 'sort_by', 'spice-mcp-adapter', 'spice-mcp/', 'state', 'timeout_seconds', 'timestamp', 'true', 'types', 'unknown', 'verbose', 'x-dune-next-offset', 'x-dune-next-uri']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/client.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [1000, 'Column', 'Comment', 'DUNE_API_KEY', 'Extra', 'GET', 'Schema', 'Table', 'Type', 'User-Agent', 'X-Dune-API-Key', 'column_name', 'columns', 'data_type', 'error', 'limit', 'medium', 'metadata', 'name', 'next_offset', 'next_uri', 'offset', 'query_parameters', 'result', 'sample_count', 'sort_by', 'state']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/mcp/server.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [5.0, 10.0, 30.0, 200, 1000, '#', ',', '.env', '1', '=', 'Create Saved Query', 'DUNE_API_KEY', 'Describe Table', 'ERROR', 'FASTMCP_LOG_LEVEL', 'FASTMCP_NO_BANNER', 'Find Tables', 'Fork Saved Query', 'GET', 'Health Check', 'Query History Tail', 'Query Info', 'Run Dune Query', 'SQL Artifact', 'Sui Events Preview', 'Sui Package Overview', 'Update Saved Query', 'User-Agent', 'X-Dune-API-Key', '[a-f0-9]{64}', '_', '__main__', 'admin', 'api_key_present', 'application/json', 'artifact_root', 'by_sha', 'columns', 'comment', 'content-type', 'degraded', 'description', 'dune', 'dune_describe_table', 'dune_find_tables', 'dune_health_check', 'dune_query', 'dune_query_create', 'dune_query_fork', 'dune_query_info', 'dune_query_update', 'dune_type', 'extra', 'health', 'history_path', 'hours', 'keyword', 'limit', 'logging_enabled', 'metadata', 'name', 'offset', 'ok', 'packages', 'parameters', 'polars_dtype', 'poll', 'preview', 'queries', 'query', 'query_history_path', 'query_id', 'query_sql', 'query_url', 'raw', 'resource', 'schema', 'schemas', 'source_query_id', 'spice-mcp', 'spice:artifact/{sha}', 'status', 'sui', 'sui_events_preview', 'sui_package_overview', 'table', 'tables', 'tags', 'template_query_id', 'template_query_ok', 'timeout_seconds', 'tool', 'utf-8', 'version', '~/.env']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/service_layer/__init__.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/http_client.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [0.35, 1.25, 2.25, 5.0, 15.0, 408, 409, 425, 429, 500, 502, 503, 504, 1000, 'attempt', 'duration_ms', 'error', 'http_request', 'http_request_error', 'http_request_failed', 'method', 'spice_mcp.http', 'status', 'url']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/service_layer/query_service.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['columns', 'data', 'data_preview', 'duration_ms', 'execution', 'lazyframe', 'metadata', 'next_offset', 'next_uri', 'rowcount']
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/adapters/dune/typing_utils.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ [4060379]
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/core/models.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/polars_utils.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ []
@@ -0,0 +1,4 @@
1
+ # file: /Users/evandekim/Documents/spice_mcp/src/spice_mcp/core/errors.py
2
+ # hypothesis_version: 6.142.5
3
+
4
+ ['****', '401', '429', 'AUTH_ERROR', 'QUERY_ERROR', 'QUERY_TIMEOUT', 'Query timed out', 'RATE_LIMIT', 'Retry the request.', 'UNKNOWN_ERROR', 'api key', 'api_key', 'code', 'context', 'data', 'error', 'message', 'ok', 'query failed', 'rate limit', 'secret', 'sql', 'suggestions', 'syntax', 'timed out', 'timeout', 'token', 'unauthorized']
@@ -0,0 +1,2 @@
1
+ ���ޭ��Ͼ���ٛ;0�FlHO� �� )�fa&$0��]{a>��
2
+ �
@@ -0,0 +1 @@
1
+ �%�%�=��0��X����E.@��C
@@ -0,0 +1 @@
1
+ �%�%�=��0��X����E.@��C
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spice-mcp
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: MCP server for Dune Analytics data access
5
5
  Author-email: Evan-Kim2028 <ekcopersonal@gmail.com>
6
6
  License-File: LICENSE
@@ -21,7 +21,12 @@ Description-Content-Type: text/markdown
21
21
 
22
22
  # spice-mcp
23
23
 
24
- spice-mcp is an MCP server for [Dune](https://dune.com/) Analytics. It wraps a curated subset of the original Spice client inside a clean architecture (`core` models/ports → `adapters.dune` → service layer → FastMCP tools) and adds agent-friendly workflows for discovery and Sui package exploration. Results are Polars-first in Python and compact, token-efficient in MCP responses.
24
+ spice-mcp is an MCP server for [Dune](https://dune.com/) Analytics. It wraps a curated subset of the original Spice client inside a clean architecture (`core` models/ports → `adapters.dune` → service layer → FastMCP tools) and adds agent-friendly workflows for discovery. Results are Polars-first in Python and compact, token-efficient in MCP responses.
25
+
26
+ [![PyPI version](https://img.shields.io/pypi/v/spice-mcp.svg)](https://pypi.org/project/spice-mcp/)
27
+ <a href="https://glama.ai/mcp/servers/@Evan-Kim2028/spice-mcp">
28
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@Evan-Kim2028/spice-mcp/badge" alt="Spice MCP server" />
29
+ </a>
25
30
 
26
31
  Requirements: Python 3.13+
27
32
 
@@ -31,16 +36,17 @@ This project uses FastMCP for typed, decorator-registered tools and resources.
31
36
  - Polars LazyFrame-first pipeline: results stay lazy until explicitly materialized
32
37
  - Ports/adapters layering for maintainable integrations ([docs/architecture.md](docs/architecture.md))
33
38
  - Discovery utilities (find schemas/tables, describe columns)
34
- - Sui package workflows (events/transactions/objects) with safe defaults
35
39
  - JSONL query history + SQL artifacts (SHA-256) for reproducibility
36
- - Rich MCP surface: query info/run, discovery, health, Sui, and Dune admin (create/update/fork)
40
+ - Rich MCP surface: query info/run, discovery, health, and Dune admin (create/update/fork)
37
41
 
38
42
  ## What is Dune?
39
43
  [Dune](https://dune.com/) is a crypto data platform providing curated blockchain datasets and a public API to run and fetch query results. See the [Dune Docs](https://dune.com/docs) and [Dune API](https://dune.com/docs/api/) for full details.
40
44
 
41
45
  ## Quick Start
42
46
  - Export `DUNE_API_KEY` in your shell (the server can also load a local `.env`; set `SPICE_MCP_SKIP_DOTENV=1` to skip during tests).
43
- - Install dependencies (`uv sync` or `pip install -e .`).
47
+ - Install from PyPI: `uv pip install spice-mcp`
48
+ - Or install from source:
49
+ - `uv sync` then `uv pip install -e .`
44
50
  - Start the FastMCP stdio server:
45
51
  - `python -m spice_mcp.mcp.server --env PYTHONPATH=$(pwd)/src`
46
52
  - or install the console script via `uv tool install .` and run `spice-mcp`.
@@ -51,9 +57,12 @@ To use spice-mcp with Cursor IDE:
51
57
 
52
58
  1. **Install the MCP Server**:
53
59
  ```bash
54
- # Install dependencies and package
60
+ # Install from PyPI (recommended)
61
+ uv pip install spice-mcp
62
+
63
+ # Or install from source
55
64
  uv sync
56
- pip install -e .
65
+ uv pip install -e .
57
66
 
58
67
  # Or install via uv tool (creates console script)
59
68
  uv tool install .
@@ -97,7 +106,6 @@ To use spice-mcp with Cursor IDE:
97
106
  - `dune_query`: Run Dune queries by ID, URL, or raw SQL
98
107
  - `dune_find_tables`: Search schemas and list tables
99
108
  - `dune_describe_table`: Get column metadata
100
- - `sui_package_overview`: Analyze Sui packages
101
109
  - `dune_health_check`: Verify API connection
102
110
 
103
111
  **Tip**: Create a `.env` file in your project root with `DUNE_API_KEY=your-key-here` for easier configuration.
@@ -121,9 +129,6 @@ All tools expose typed parameters, titles, and tags; failures return a consisten
121
129
  - `dune_describe_table` (Describe Table, tags: dune, schema)
122
130
  - Column metadata for `schema.table` (Dune types + Polars inferred dtypes when available).
123
131
 
124
- - `sui_package_overview` (Sui Package Overview, tag: sui)
125
- - Compact Sui activity overview for `packages[]` with `hours` (default 72) and `timeout_seconds`.
126
-
127
132
  - Dune Admin tools (tags: dune, admin)
128
133
  - `dune_query_create(name, query_sql, description?, tags?, parameters?)`
129
134
  - `dune_query_update(query_id, name?, query_sql?, description?, tags?, parameters?)`
@@ -178,7 +183,7 @@ Core Tools (with parameters)
178
183
  - See [docs/index.md](docs/index.md) for full documentation:
179
184
  - Dune API structure and capabilities: [docs/dune_api.md](docs/dune_api.md)
180
185
  - Discovery patterns and examples: [docs/discovery.md](docs/discovery.md)
181
- - Sui package workflows: [docs/sui_packages.md](docs/sui_packages.md)
186
+
182
187
  - Tool reference and schemas: [docs/tools.md](docs/tools.md)
183
188
  - Codex CLI + tooling integration: [docs/codex_cli.md](docs/codex_cli.md), [docs/codex_cli_tools.md](docs/codex_cli_tools.md)
184
189
  - Architecture overview: [docs/architecture.md](docs/architecture.md)
@@ -190,4 +195,4 @@ Notes
190
195
  - Ports and models live in `src/spice_mcp/core`; services consume ports and are exercised by FastMCP tools.
191
196
  - Query history and SQL artefacts are always-on (see `src/spice_mcp/logging/query_history.py`).
192
197
  - To bypass dot-env loading during tests/CI, export `SPICE_MCP_SKIP_DOTENV=1`.
193
- - LazyFrames everywhere: eager `.collect()` or `pl.DataFrame` usage outside dedicated helpers is blocked by `tests/style/test_polars_lazy.py`; materialization helpers live in `src/spice_mcp/polars_utils.py`.
198
+ - LazyFrames everywhere: eager `.collect()` or `pl.DataFrame` usage outside dedicated helpers is blocked by `tests/style/test_polars_lazy.py`; materialization helpers live in `src/spice_mcp/polars_utils.py`.
@@ -1,6 +1,11 @@
1
1
  # spice-mcp
2
2
 
3
- spice-mcp is an MCP server for [Dune](https://dune.com/) Analytics. It wraps a curated subset of the original Spice client inside a clean architecture (`core` models/ports → `adapters.dune` → service layer → FastMCP tools) and adds agent-friendly workflows for discovery and Sui package exploration. Results are Polars-first in Python and compact, token-efficient in MCP responses.
3
+ spice-mcp is an MCP server for [Dune](https://dune.com/) Analytics. It wraps a curated subset of the original Spice client inside a clean architecture (`core` models/ports → `adapters.dune` → service layer → FastMCP tools) and adds agent-friendly workflows for discovery. Results are Polars-first in Python and compact, token-efficient in MCP responses.
4
+
5
+ [![PyPI version](https://img.shields.io/pypi/v/spice-mcp.svg)](https://pypi.org/project/spice-mcp/)
6
+ <a href="https://glama.ai/mcp/servers/@Evan-Kim2028/spice-mcp">
7
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@Evan-Kim2028/spice-mcp/badge" alt="Spice MCP server" />
8
+ </a>
4
9
 
5
10
  Requirements: Python 3.13+
6
11
 
@@ -10,16 +15,17 @@ This project uses FastMCP for typed, decorator-registered tools and resources.
10
15
  - Polars LazyFrame-first pipeline: results stay lazy until explicitly materialized
11
16
  - Ports/adapters layering for maintainable integrations ([docs/architecture.md](docs/architecture.md))
12
17
  - Discovery utilities (find schemas/tables, describe columns)
13
- - Sui package workflows (events/transactions/objects) with safe defaults
14
18
  - JSONL query history + SQL artifacts (SHA-256) for reproducibility
15
- - Rich MCP surface: query info/run, discovery, health, Sui, and Dune admin (create/update/fork)
19
+ - Rich MCP surface: query info/run, discovery, health, and Dune admin (create/update/fork)
16
20
 
17
21
  ## What is Dune?
18
22
  [Dune](https://dune.com/) is a crypto data platform providing curated blockchain datasets and a public API to run and fetch query results. See the [Dune Docs](https://dune.com/docs) and [Dune API](https://dune.com/docs/api/) for full details.
19
23
 
20
24
  ## Quick Start
21
25
  - Export `DUNE_API_KEY` in your shell (the server can also load a local `.env`; set `SPICE_MCP_SKIP_DOTENV=1` to skip during tests).
22
- - Install dependencies (`uv sync` or `pip install -e .`).
26
+ - Install from PyPI: `uv pip install spice-mcp`
27
+ - Or install from source:
28
+ - `uv sync` then `uv pip install -e .`
23
29
  - Start the FastMCP stdio server:
24
30
  - `python -m spice_mcp.mcp.server --env PYTHONPATH=$(pwd)/src`
25
31
  - or install the console script via `uv tool install .` and run `spice-mcp`.
@@ -30,9 +36,12 @@ To use spice-mcp with Cursor IDE:
30
36
 
31
37
  1. **Install the MCP Server**:
32
38
  ```bash
33
- # Install dependencies and package
39
+ # Install from PyPI (recommended)
40
+ uv pip install spice-mcp
41
+
42
+ # Or install from source
34
43
  uv sync
35
- pip install -e .
44
+ uv pip install -e .
36
45
 
37
46
  # Or install via uv tool (creates console script)
38
47
  uv tool install .
@@ -76,7 +85,6 @@ To use spice-mcp with Cursor IDE:
76
85
  - `dune_query`: Run Dune queries by ID, URL, or raw SQL
77
86
  - `dune_find_tables`: Search schemas and list tables
78
87
  - `dune_describe_table`: Get column metadata
79
- - `sui_package_overview`: Analyze Sui packages
80
88
  - `dune_health_check`: Verify API connection
81
89
 
82
90
  **Tip**: Create a `.env` file in your project root with `DUNE_API_KEY=your-key-here` for easier configuration.
@@ -100,9 +108,6 @@ All tools expose typed parameters, titles, and tags; failures return a consisten
100
108
  - `dune_describe_table` (Describe Table, tags: dune, schema)
101
109
  - Column metadata for `schema.table` (Dune types + Polars inferred dtypes when available).
102
110
 
103
- - `sui_package_overview` (Sui Package Overview, tag: sui)
104
- - Compact Sui activity overview for `packages[]` with `hours` (default 72) and `timeout_seconds`.
105
-
106
111
  - Dune Admin tools (tags: dune, admin)
107
112
  - `dune_query_create(name, query_sql, description?, tags?, parameters?)`
108
113
  - `dune_query_update(query_id, name?, query_sql?, description?, tags?, parameters?)`
@@ -157,7 +162,7 @@ Core Tools (with parameters)
157
162
  - See [docs/index.md](docs/index.md) for full documentation:
158
163
  - Dune API structure and capabilities: [docs/dune_api.md](docs/dune_api.md)
159
164
  - Discovery patterns and examples: [docs/discovery.md](docs/discovery.md)
160
- - Sui package workflows: [docs/sui_packages.md](docs/sui_packages.md)
165
+
161
166
  - Tool reference and schemas: [docs/tools.md](docs/tools.md)
162
167
  - Codex CLI + tooling integration: [docs/codex_cli.md](docs/codex_cli.md), [docs/codex_cli_tools.md](docs/codex_cli_tools.md)
163
168
  - Architecture overview: [docs/architecture.md](docs/architecture.md)
@@ -169,4 +174,4 @@ Notes
169
174
  - Ports and models live in `src/spice_mcp/core`; services consume ports and are exercised by FastMCP tools.
170
175
  - Query history and SQL artefacts are always-on (see `src/spice_mcp/logging/query_history.py`).
171
176
  - To bypass dot-env loading during tests/CI, export `SPICE_MCP_SKIP_DOTENV=1`.
172
- - LazyFrames everywhere: eager `.collect()` or `pl.DataFrame` usage outside dedicated helpers is blocked by `tests/style/test_polars_lazy.py`; materialization helpers live in `src/spice_mcp/polars_utils.py`.
177
+ - LazyFrames everywhere: eager `.collect()` or `pl.DataFrame` usage outside dedicated helpers is blocked by `tests/style/test_polars_lazy.py`; materialization helpers live in `src/spice_mcp/polars_utils.py`.
@@ -24,8 +24,8 @@
24
24
  ## Layers
25
25
 
26
26
  ### Core (`src/spice_mcp/core`)
27
- - `models.py` – dataclass representations for query requests, previews, metadata, schema descriptions, and Sui artefacts.
28
- - `ports.py` – protocols defining the boundaries (`QueryExecutor`, `CatalogExplorer`, `SuiInspector`).
27
+ - `models.py` – dataclass representations for query requests, previews, metadata, schema descriptions.
28
+ - `ports.py` – protocols defining the boundaries (`QueryExecutor`, `CatalogExplorer`).
29
29
  - `errors.py` – MCP-oriented error categorisation and envelope helpers (`error_response`).
30
30
 
31
31
  These modules contain zero infrastructure concerns; they define the shapes that higher layers orchestrate.
@@ -39,13 +39,12 @@ These modules contain zero infrastructure concerns; they define the shapes that
39
39
  ### Service Layer (`src/spice_mcp/service_layer`)
40
40
  - `query_service.py` – orchestrates `QueryExecutor` calls and shapes the dictionaries returned to MCP tools. Handles `performance` passthrough, metadata merging, and preview formatting.
41
41
  - `discovery_service.py` – thin façade around `CatalogExplorer`, returning friendlier lists for schema/table introspection.
42
- - `sui_service.py` – composes `QueryService` to deliver Sui-specific behaviours (events preview, package overview defaults).
43
42
 
44
43
  Services are pure Python and easily testable with stubbed ports (see `tests/tools/test_query_service.py`).
45
44
 
46
45
  ### MCP Integration (`src/spice_mcp/mcp`)
47
46
  - `server.py` – FastMCP stdio bridge. Lazily initialises configuration, adapters, services, tools, and resources. Provides resource URIs and tools while keeping stdout clean.
48
- - `tools/execute_query.py`, `tools/sui_package_overview.py` – thin glue calling into services, handling logging/audit trails, and shaping agent-friendly responses.
47
+ - `tools/execute_query.py` – thin glue calling into services, handling logging/audit trails, and shaping agent-friendly responses.
49
48
  - Uses `QueryHistory` (`src/spice_mcp/logging/query_history.py`) for JSONL audit trails and SQL artefact storage.
50
49
 
51
50
  ### Observability (`src/spice_mcp/observability`)
@@ -1,7 +1,7 @@
1
1
  Codex CLI MCP Setup (spice_mcp_beta)
2
2
 
3
3
  Goal
4
- - Register the spice-mcp server as an MCP provider named `spice_mcp_beta` for Codex CLI, so you can call tools like `dune_query` and use the Sui command URIs.
4
+ - Register the spice-mcp server as an MCP provider named `spice_mcp_beta` for Codex CLI, so you can call tools like `dune_query`.
5
5
 
6
6
  Prereqs
7
7
  - Dune API key in your shell (e.g., export `DUNE_API_KEY=...`)
@@ -54,23 +54,17 @@ Verify configuration
54
54
  - `codex mcp list` should list `spice_mcp_beta` with the python command and no secrets in Env.
55
55
 
56
56
  Try some tools
57
- - Find Sui schemas
58
- - `mcp__spice_mcp_beta__dune_find_tables {"keyword": "sui"}`
59
- - Describe `sui.transactions`
60
- - `mcp__spice_mcp_beta__dune_describe_table {"schema": "sui", "table": "transactions"}`
57
+ - Find schemas
58
+ - `mcp__spice_mcp_beta__dune_find_tables {"keyword": "dex"}`
59
+ - Describe a table
60
+ - `mcp__spice_mcp_beta__dune_describe_table {"schema": "dex", "table": "trades"}`
61
61
  - Query preview (with metadata/pagination)
62
62
  - `mcp__spice_mcp_beta__dune_query {"query": "4388", "limit": 5}`
63
- - `mcp__spice_mcp_beta__dune_query {"query": "SELECT * FROM sui.events LIMIT 5"}`
64
- MCP command URIs (resources)
65
- - You can read command-style resources for safe defaults (3-day windows, small LIMITs):
66
- - Events preview: `spice:sui/events_preview/72/50/0xcaf6...,0x2c8d...`
67
- - Package overview (cmd): `spice:sui/package_overview/72/30/0xcaf6...,0x2c8d...`
68
- - Global preview (no package filter): `spice:sui/events_preview/72/50/_`
69
- - See `docs/commands.md` for details. (Your client must support reading MCP resources.)
63
+ - `mcp__spice_mcp_beta__dune_query {"query": "SELECT * FROM dex.trades LIMIT 5"}`
70
64
 
71
65
  Notes & troubleshooting
72
66
  - Secret safety: Never store `DUNE_API_KEY` in Codex config; use `shell_environment_policy.inherit=["DUNE_API_KEY"]` or set it in your shell.
73
67
  - Missing key error: If you see `DUNE_API_KEY required`, export it in your shell and relaunch. The server also attempts to load `.env` from the project or home directory as a fallback.
74
68
  - FastMCP stdout: This server disables FastMCP banners/logging to keep stdio clean; if handshakes fail, ensure you used the exact `python -m spice_mcp.mcp.server` and PYTHONPATH as shown.
75
- - Heavy scans: Start with `format="metadata"` on `dune_query`, use `performance="large"`, and small `limit` with a recent time window; the Sui command URIs default to safe windows and limits.
69
+ - Heavy scans: Start with `format="metadata"` on `dune_query`, use `performance="large"`, and small `limit` with a recent time window.
76
70
  - Tests/CI: set `SPICE_MCP_SKIP_DOTENV=1` to stop `_ensure_initialized` from reading local `.env` files when the key is intentionally absent.
@@ -15,7 +15,7 @@ Optional
15
15
  - `SPICE_LOGGING_ENABLED`: true/false (default: true)
16
16
  - Timeouts
17
17
  - `SPICE_TIMEOUT_SECONDS`: default polling timeout (seconds)
18
- - `SPICE_MAX_CONCURRENT_QUERIES`: max concurrent dune_query executions (default: 5)
18
+ - `SPICE_MAX_CONCURRENT_QUERIES`: reserved for future concurrency control (default: 5, not currently enforced)
19
19
  - Raw SQL
20
20
  - `SPICE_RAW_SQL_QUERY_ID`: ID of the template query used to execute raw SQL (default: 4060379). Health is reported by `dune_health_check` when set.
21
21
 
@@ -4,7 +4,7 @@ This document summarizes local development workflows for spice-mcp.
4
4
 
5
5
  ## Tooling
6
6
 
7
- - Tests: `pytest` (+ `pytest-asyncio`, `responses`, `aioresponses`, `vcrpy`)
7
+ - Tests: `pytest` (+ `responses`, `vcrpy`, `hypothesis`)
8
8
  - Lint/Format: `ruff` (lint + import sort + formatting)
9
9
  - Types: `mypy`
10
10
 
@@ -27,7 +27,7 @@ Enable live tests explicitly:
27
27
  - `tests/offline/`: pure unit tests; no network.
28
28
  - `tests/http_stubbed/`: HTTP boundary via `responses`.
29
29
  - `tests/tools/`: service + MCP tool unit tests.
30
- - `tests/mcp/`: FastMCP contract tests with stubbed services (preview/raw/metadata, Sui resources).
30
+ - `tests/mcp/`: FastMCP contract tests with stubbed services (preview/raw/metadata).
31
31
  - `tests/fastmcp/`: registration/metadata smoke tests for FastMCP wiring.
32
32
  - `tests/style/`: static safety checks (lazyframe enforcement, etc.).
33
33
  - `tests/live/`: opt-in integrations; require `SPICE_TEST_LIVE=1` and `DUNE_API_KEY`.
@@ -36,7 +36,7 @@ Most unit/contract tests construct stub implementations of the ports in `src/spi
36
36
 
37
37
  ## Style
38
38
 
39
- - Follow Ruff + ruff-format defaults (88 cols, py39).
39
+ - Follow Ruff + ruff-format defaults (88 cols, py313).
40
40
  - Prefer small, focused functions and explicit typing in `src/`.
41
41
  - Tests prioritize readability over strict typing.
42
42
  - Export `SPICE_MCP_SKIP_DOTENV=1` when running tests that expect the API key to be unset.
@@ -17,10 +17,6 @@ Approach
17
17
  - Some deployments allow: information_schema.schemata/tables/columns
18
18
  - If blocked, use SHOW + probes
19
19
 
20
- Sui Examples
21
- - Find Sui schemas: SHOW SCHEMAS LIKE '%sui%'
22
- - Confirm core tables: SELECT * FROM sui.events/transactions/checkpoints/objects LIMIT 1
23
- - SHOW TABLES works on some Sui-related schemas (e.g., sui_base), but not all
24
20
 
25
21
  Helpers in this repo
26
22
  - `src/spice_mcp/service_layer/discovery_service.py` provides service wrappers around the Dune adapter:
@@ -7,7 +7,7 @@ spice-mcp Documentation
7
7
  - Architecture Overview: `docs/architecture.md`
8
8
  - Dune API Overview: `docs/dune_api.md`
9
9
  - Catalog Discovery Guide: `docs/discovery.md`
10
- - Sui Packages (Deepbook) Workflow: `docs/sui_packages.md`
10
+
11
11
  - Codex CLI MCP Setup: `docs/codex_cli.md`
12
12
  - Development & Testing: `docs/development.md`
13
13
 
@@ -53,20 +53,7 @@ Logging & Artifacts
53
53
  - columns: [{ name, dune_type?, polars_dtype?, extra?, comment? }]
54
54
  - Errors follow the standard MCP envelope.
55
55
 
56
- 4) sui_package_overview
57
- - Purpose: Preview Sui package activity (events, transactions, objects) over a time window; timeouts supported.
58
- - Input schema:
59
- - packages: string[] (required)
60
- - hours?: integer (default 72)
61
- - timeout_seconds?: number (default 30)
62
- - Output fields (best-effort):
63
- - ok: boolean
64
- - events_count?, events_preview?, events_timeout?, events_error?
65
- - transactions_count?, transactions_preview?, transactions_timeout?, transactions_error?
66
- - objects_count?, objects_preview?, objects_timeout?, objects_error?
67
- - On error: { ok: false, error: { … } }
68
-
69
- 5) dune_health_check
56
+ 4) dune_health_check
70
57
  - Purpose: Basic environment and logging readiness check.
71
58
  - Output fields: ok, api_key_present, status
72
59
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spice-mcp"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "MCP server for Dune Analytics data access"
5
5
  authors = [
6
6
  { name = "Evan-Kim2028", email = "ekcopersonal@gmail.com" }
@@ -2,9 +2,11 @@
2
2
 
3
3
  This module provides a thin façade used by the new service layer while
4
4
  keeping the battle-tested logic that the original spice client offered.
5
+
6
+ Only synchronous interfaces are exposed.
5
7
  """
6
8
 
7
9
  from . import urls # re-export for callers needing low-level helpers
8
- from .extract import async_query, query # noqa: F401
10
+ from .extract import query # noqa: F401
9
11
 
10
- __all__ = ["query", "async_query", "urls"]
12
+ __all__ = ["query", "urls"]