drupal-mcp-server 0.3.0__tar.gz → 0.3.1__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 (159) hide show
  1. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/PKG-INFO +2 -2
  2. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/README.md +1 -1
  3. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/CHANGELOG.md +15 -0
  4. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/agents.md +4 -4
  5. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/pyproject.toml +4 -1
  6. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/live-migration-d7d11.sh +2 -5
  7. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/__init__.py +1 -1
  8. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/installer.py +9 -4
  9. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_installer.py +1 -1
  10. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.codecov.yml +0 -0
  11. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.env.example +0 -0
  12. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/workflows/ci.yml +0 -0
  16. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/workflows/docs.yml +0 -0
  17. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.github/workflows/release.yml +0 -0
  18. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/.gitignore +0 -0
  19. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/LICENSE +0 -0
  20. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/MAINTAINERS.md +0 -0
  21. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/CODE_OF_CONDUCT.md +0 -0
  22. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/CONTRIBUTING.md +0 -0
  23. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/SECURITY.md +0 -0
  24. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/adr/0001-use-fastmcp.md +0 -0
  25. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/adr/0002-pydantic-settings.md +0 -0
  26. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/adr/0003-subprocess-drush.md +0 -0
  27. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/adr/0004-http-transport.md +0 -0
  28. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/architecture.md +0 -0
  29. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/configuration.md +0 -0
  30. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/docstring_standard.md +0 -0
  31. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/index.md +0 -0
  32. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/installation.md +0 -0
  33. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/migration.md +0 -0
  34. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/quickstart.md +0 -0
  35. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/tools/content.md +0 -0
  36. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/tools/devops.md +0 -0
  37. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/tools/index.md +0 -0
  38. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/docs/tools/users.md +0 -0
  39. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/.env.example +0 -0
  40. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/README.md +0 -0
  41. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/basic_usage.py +0 -0
  42. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/content_workflow.py +0 -0
  43. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/custom_tool.py +0 -0
  44. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/examples/migration_workflow.py +0 -0
  45. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/mkdocs.yml +0 -0
  46. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/lint.sh +0 -0
  47. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/live-migration-d9d11-run.py +0 -0
  48. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/live-migration-d9d11.sh +0 -0
  49. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/live-migration-smoke-run.py +0 -0
  50. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/live-migration-smoke.sh +0 -0
  51. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/run.sh +0 -0
  52. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/setup.sh +0 -0
  53. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/scripts/test.sh +0 -0
  54. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/auth/__init__.py +0 -0
  55. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/auth/basic.py +0 -0
  56. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/auth/mcp_oauth.py +0 -0
  57. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/auth/session.py +0 -0
  58. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/auth/token.py +0 -0
  59. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/cli.py +0 -0
  60. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/clients/__init__.py +0 -0
  61. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/clients/base.py +0 -0
  62. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/clients/drush.py +0 -0
  63. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/clients/graphql.py +0 -0
  64. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/clients/jsonapi.py +0 -0
  65. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/codebase/__init__.py +0 -0
  66. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/codebase/indexer.py +0 -0
  67. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/codebase/parsers.py +0 -0
  68. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/codebase/search.py +0 -0
  69. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/config.py +0 -0
  70. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/errors.py +0 -0
  71. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/exceptions.py +0 -0
  72. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/logging_config.py +0 -0
  73. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/schemas.py +0 -0
  74. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/server.py +0 -0
  75. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/services/__init__.py +0 -0
  76. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/services/ai_service.py +0 -0
  77. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/services/migration_service.py +0 -0
  78. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/services/site_manager.py +0 -0
  79. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/__init__.py +0 -0
  80. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/_utils.py +0 -0
  81. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/accessibility.py +0 -0
  82. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/ai.py +0 -0
  83. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/analysis.py +0 -0
  84. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/code_audit.py +0 -0
  85. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/codebase.py +0 -0
  86. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/comments.py +0 -0
  87. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/commerce.py +0 -0
  88. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/config.py +0 -0
  89. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/contact.py +0 -0
  90. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/content.py +0 -0
  91. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/database.py +0 -0
  92. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/devops.py +0 -0
  93. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/drupal_org.py +0 -0
  94. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/exports.py +0 -0
  95. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/feeds.py +0 -0
  96. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/fields.py +0 -0
  97. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/headless.py +0 -0
  98. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/layout_builder.py +0 -0
  99. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/media_enhanced.py +0 -0
  100. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/menus.py +0 -0
  101. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/metatag.py +0 -0
  102. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/migration.py +0 -0
  103. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/moderation.py +0 -0
  104. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/module_dev.py +0 -0
  105. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/multilingual.py +0 -0
  106. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/paragraphs.py +0 -0
  107. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/pathauto.py +0 -0
  108. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/performance.py +0 -0
  109. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/redirects.py +0 -0
  110. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/revisions.py +0 -0
  111. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/scheduler.py +0 -0
  112. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/search_api.py +0 -0
  113. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/security_audit.py +0 -0
  114. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/status.py +0 -0
  115. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/taxonomy.py +0 -0
  116. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/testing.py +0 -0
  117. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/theme_analysis.py +0 -0
  118. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/theme_dev.py +0 -0
  119. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/users.py +0 -0
  120. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/views.py +0 -0
  121. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/tools/webform.py +0 -0
  122. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/src/drupal_mcp_server/validation.py +0 -0
  123. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/__init__.py +0 -0
  124. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/integration/test_server.py +0 -0
  125. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/README.md +0 -0
  126. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/bootstrap.py +0 -0
  127. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/filter_check.py +0 -0
  128. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/install_modules.py +0 -0
  129. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/layout_builder_test.py +0 -0
  130. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/mcp_call.py +0 -0
  131. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/queue_test.py +0 -0
  132. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/resource_check.py +0 -0
  133. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/seed.php +0 -0
  134. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/smoke_test.py +0 -0
  135. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/live/sweep.py +0 -0
  136. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/__init__.py +0 -0
  137. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_auth.py +0 -0
  138. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_clients.py +0 -0
  139. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_codebase.py +0 -0
  140. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_content_tools.py +0 -0
  141. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_drupal_org.py +0 -0
  142. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_errors.py +0 -0
  143. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_exports.py +0 -0
  144. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_handler_and_translation_tools.py +0 -0
  145. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_insight_tools.py +0 -0
  146. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_logging_config.py +0 -0
  147. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_migration_service.py +0 -0
  148. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_moderation_transitions.py +0 -0
  149. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_resource_names.py +0 -0
  150. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_revisions.py +0 -0
  151. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_scheduler_tools.py +0 -0
  152. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_schemas.py +0 -0
  153. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_security_scanners.py +0 -0
  154. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_status_tools.py +0 -0
  155. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_sweep_harness.py +0 -0
  156. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_theme_analysis.py +0 -0
  157. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_tool_utils.py +0 -0
  158. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_tools.py +0 -0
  159. {drupal_mcp_server-0.3.0 → drupal_mcp_server-0.3.1}/tests/unit/test_validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: drupal-mcp-server
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: MCP server for Drupal operations - JSON:API, GraphQL, Drush, AI-powered migration
5
5
  Author: Loganathane V
6
6
  License: MIT
@@ -147,7 +147,7 @@ config (preferring the client's own `mcp add` command when it has one).
147
147
 
148
148
  ```bash
149
149
  drupal-mcp install --client claude-code --print # preview without writing
150
- drupal-mcp install --command 'uvx drupal-mcp-server' # run from PyPI, no install
150
+ drupal-mcp install --command 'uvx --from drupal-mcp-server drupal-mcp' # run from PyPI, no install
151
151
  ```
152
152
 
153
153
  See the [AI Coding Agents guide](docs/agents.md) for per-client copy-paste
@@ -104,7 +104,7 @@ config (preferring the client's own `mcp add` command when it has one).
104
104
 
105
105
  ```bash
106
106
  drupal-mcp install --client claude-code --print # preview without writing
107
- drupal-mcp install --command 'uvx drupal-mcp-server' # run from PyPI, no install
107
+ drupal-mcp install --command 'uvx --from drupal-mcp-server drupal-mcp' # run from PyPI, no install
108
108
  ```
109
109
 
110
110
  See the [AI Coding Agents guide](docs/agents.md) for per-client copy-paste
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.1] - 2026-10-17
11
+
12
+ ### Fixed
13
+
14
+ - Make `uvx drupal-mcp-server` actually run the server. The package
15
+ shipped only a `drupal-mcp` executable, and current uv refuses to
16
+ guess when the tool name differs from the package name ("Use `uvx
17
+ --from drupal-mcp-server drupal-mcp` instead"), so the documented
18
+ no-install command — including the PATH fallback the installer
19
+ writes into client configs — failed to start. A `drupal-mcp-server`
20
+ console-script alias now runs the same entry point, and the
21
+ installer's fallback, help text, README and AI-agents guide name the
22
+ unambiguous `uvx --from drupal-mcp-server drupal-mcp` form, which
23
+ works on every uv version.
24
+
10
25
  ## [0.3.0] - 2026-10-17
11
26
 
12
27
  ### Added
@@ -38,7 +38,7 @@ With no arguments it:
38
38
  | `--env KEY=VALUE` | Extra environment variable (repeatable) |
39
39
  | `--dotenv PATH` | Env file to read (default `./.env` if present) |
40
40
  | `--name NAME` | Server name inside the client config (default `drupal`) |
41
- | `--command CMD` | Launch command override, e.g. `--command 'uvx drupal-mcp-server'` |
41
+ | `--command CMD` | Launch command override, e.g. `--command 'uvx --from drupal-mcp-server drupal-mcp'` |
42
42
  | `--scope local\|user\|project` | Claude Code configuration scope |
43
43
  | `--global` | OpenCode: write the global config instead of the project one |
44
44
 
@@ -58,8 +58,8 @@ With no arguments it:
58
58
 
59
59
  The launch command is the absolute path to the `drupal-mcp` script when it is
60
60
  on `PATH` (GUI clients like Claude Desktop launch servers with a sanitized
61
- environment, so a bare name can fail there); otherwise `uvx drupal-mcp-server`
62
- runs it straight from PyPI.
61
+ environment, so a bare name can fail there); otherwise
62
+ `uvx --from drupal-mcp-server drupal-mcp` runs it straight from PyPI.
63
63
 
64
64
  Existing configs are merged, never clobbered: other servers in the same file
65
65
  survive, a server of the same name is replaced (so re-running is idempotent),
@@ -197,7 +197,7 @@ against the client's current CLI or docs:
197
197
  Point any client at PyPI directly:
198
198
 
199
199
  ```bash
200
- drupal-mcp install --command 'uvx drupal-mcp-server'
200
+ drupal-mcp install --command 'uvx --from drupal-mcp-server drupal-mcp'
201
201
  ```
202
202
 
203
203
  ## Verify
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "drupal-mcp-server"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "MCP server for Drupal operations - JSON:API, GraphQL, Drush, AI-powered migration"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -50,6 +50,9 @@ all = [
50
50
 
51
51
  [project.scripts]
52
52
  drupal-mcp = "drupal_mcp_server.cli:main"
53
+ # Alias so `uvx drupal-mcp-server` works: uvx runs the executable named
54
+ # after the package, and current uv refuses to guess when it differs.
55
+ drupal-mcp-server = "drupal_mcp_server.cli:main"
53
56
 
54
57
  [build-system]
55
58
  requires = ["hatchling"]
@@ -85,18 +85,15 @@ create_target() {
85
85
  rm -rf "$TARGET_DIR"
86
86
  mkdir -p "$TARGET_DIR"
87
87
  cd "$TARGET_DIR"
88
+ composer create-project drupal/recommended-project . --prefer-dist --no-interaction
88
89
  ddev config --project-type=drupal11 --project-name="$TARGET_NAME" --php-version=8.3 --docroot=web --auto
89
90
  ddev start
90
- ddev composer create drupal/recommended-project --prefer-dist --no-interaction
91
- ddev composer require drush/drush --no-interaction
92
- ddev config --docroot=web --project-name="$TARGET_NAME"
93
- ddev restart
91
+ ddev composer require drush/drush drupal/migrate_tools drupal/migrate_plus --no-interaction
94
92
  ddev drush site:install standard \
95
93
  --site-name="$TARGET_NAME" \
96
94
  --account-name=admin \
97
95
  --account-pass=admin \
98
96
  -y
99
- ddev composer require drupal/migrate_tools drupal/migrate_plus --no-interaction
100
97
  ddev drush en migrate migrate_drupal migrate_plus migrate_tools -y
101
98
  ddev drush cr
102
99
  cd "$REPO_ROOT"
@@ -1,3 +1,3 @@
1
1
  """Drupal MCP Server - Model Context Protocol server for Drupal."""
2
2
 
3
- __version__ = "0.3.0"
3
+ __version__ = "0.3.1"
@@ -152,7 +152,8 @@ def resolve_command(
152
152
  An absolute path wins when the console script is on PATH, because GUI
153
153
  clients (Claude Desktop, Cursor) launch servers with a sanitized
154
154
  environment that does not include the shell's PATH. Without the script,
155
- `uvx drupal-mcp-server` runs straight from PyPI. Returns (argv, warnings).
155
+ `uvx --from drupal-mcp-server drupal-mcp` runs straight from PyPI.
156
+ Returns (argv, warnings).
156
157
  """
157
158
  environ = os.environ if environ is None else environ
158
159
  if override:
@@ -166,8 +167,9 @@ def resolve_command(
166
167
  if script:
167
168
  return [script], []
168
169
  if shutil.which("uvx", path=path):
169
- return ["uvx", "drupal-mcp-server"], [
170
- "drupal-mcp is not on PATH; the config will run `uvx drupal-mcp-server` instead"
170
+ return ["uvx", "--from", "drupal-mcp-server", "drupal-mcp"], [
171
+ "drupal-mcp is not on PATH; the config will run "
172
+ "`uvx --from drupal-mcp-server drupal-mcp` instead"
171
173
  ]
172
174
  return ["drupal-mcp"], [
173
175
  "drupal-mcp is not on PATH; the config points at the bare command and will "
@@ -685,7 +687,10 @@ def _print_list() -> None:
685
687
  "--command",
686
688
  "command_override",
687
689
  default=None,
688
- help="Launch command (shlex-split), e.g. --command 'uvx drupal-mcp-server'.",
690
+ help=(
691
+ "Launch command (shlex-split), e.g. "
692
+ "--command 'uvx --from drupal-mcp-server drupal-mcp'."
693
+ ),
689
694
  )
690
695
  @click.option(
691
696
  "--env",
@@ -114,7 +114,7 @@ class TestCommandResolution:
114
114
  def test_uvx_fallback_when_script_missing(self, tmp_path):
115
115
  stub_cli(tmp_path, "uvx")
116
116
  argv, warnings = resolve_command(None, environ={"PATH": str(tmp_path / "bin")})
117
- assert argv == ["uvx", "drupal-mcp-server"]
117
+ assert argv == ["uvx", "--from", "drupal-mcp-server", "drupal-mcp"]
118
118
  assert warnings and "uvx" in warnings[0]
119
119
 
120
120
  def test_bare_name_and_warning_when_nothing_found(self, tmp_path):