gabriel / musehub public
feat BREAKING feat/mcp-crud-expansion #1 / 1
gabriel · 170 days ago · Apr 10, 2026 · Diff

feat: MCP CRUD expansion — issue comment delete, collaborators, webhooks, release assets

New MCP executors: - execute_delete_issue_comment (issues.py): soft-delete with write-access guard - execute_list_collaborators, execute_invite_collaborator, execute_update_collaborator_permission, execute_remove_collaborator (collaborators.py): full collaborator CRUD with admin/owner auth enforcement - execute_create_webhook, execute_list_webhooks, execute_delete_webhook (webhooks.py): webhook subscription management with write-access guard - execute_attach_release_asset, execute_delete_release_asset (releases.py): release asset management with write-access guard

Dispatcher wired for all 10 new tool names. Tool defs added to MUSEHUB_WRITE_TOOLS (musehub.py).

Tests: 100/100 passing including new integration classes: - TestIntegrationDeleteIssueComment (3 tests) - TestIntegrationCollaborators (6 tests) - TestIntegrationWebhooksMCP (5 tests) - TestIntegrationReleaseAssets (3 tests)

sha256:972be37b25923cf9035ad5b252d5a19c609221645c4d56a827e007bb1a8ddbc4 sha
+67 ~4 −1 symbols
sha256:5644acecf505860d6f09a8754407b16d8984248eb5dd5926696a76360270d81c snapshot
+67
symbols added
~4
symbols modified
−1
symbol removed
0
dead code introduced
Semantic Changes 72 symbols
+ _PERMISSION_RANK variable variable _PERMISSION_RANK L18–23
+ _collab_data function function _collab_data L31–39
+ _has_permission function function _has_permission L26–28
+ execute_invite_collaborator function async_function execute_invite_collaborator L95–193
+ execute_list_collaborators function async_function execute_list_collaborators L42–92
+ execute_remove_collaborator function async_function execute_remove_collaborator L295–385
+ execute_update_collaborator_permission function async_function execute_update_collaborator_permission L196–292
+ AsyncSessionLocal import import AsyncSessionLocal L9–9
+ JSONObject import import JSONObject L11–11
+ MusehubCollaborator import import MusehubCollaborator L10–10
+ MusehubToolResult import import MusehubToolResult L13–13
+ _check_db_available import import _check_db_available L13–13
+ annotations import import annotations L3–3
+ delete import import delete L7–7
+ logging import import logging L5–5
+ musehub_repository import import musehub_repository L12–12
+ select import import select L7–7
+ logger variable variable logger L15–15
~ musehub/mcp/write_tools/webhooks.py .py 15 symbols added
+ _webhook_data function function _webhook_data L17–27
+ execute_create_webhook function async_function execute_create_webhook L30–90
+ execute_delete_webhook function async_function execute_delete_webhook L138–184
+ execute_list_webhooks function async_function execute_list_webhooks L93–135
+ AsyncSessionLocal import import AsyncSessionLocal L7–7
+ JSONObject import import JSONObject L9–9
+ MusehubToolResult import import MusehubToolResult L11–11
+ WEBHOOK_EVENT_TYPES import import WEBHOOK_EVENT_TYPES L8–8
+ _check_db_available import import _check_db_available L11–11
+ _require_write_access import import _require_write_access L12–12
+ annotations import import annotations L3–3
+ logging import import logging L5–5
+ musehub_repository import import musehub_repository L10–10
+ musehub_webhook_dispatcher import import musehub_webhook_dispatcher L10–10
+ logger variable variable logger L14–14
~ musehub/mcp/dispatcher.py .py 1 symbol modified
~ musehub/mcp/write_tools/issues.py .py 1 symbol added
+ execute_delete_issue_comment function async_function execute_delete_issue_comment L529–589
~ musehub/mcp/write_tools/releases.py .py 2 symbols added, 1 symbol removed, 1 symbol modified
− JSONValue import import JSONValue L5–5
+ execute_attach_release_asset function async_function execute_attach_release_asset L97–178
+ execute_delete_release_asset function async_function execute_delete_release_asset L181–239
~ tests/test_mcp_write_tools.py .py 31 symbols added, 1 symbol modified
+ TestIntegrationCollaborators class class TestIntegrationCollaborators L1416–1493
+ test_invite_and_list_collaborator method async_method test_invite_and_list_collaborator L1420–1435
+ test_invite_duplicate_returns_conflict method async_method test_invite_duplicate_returns_conflict L1438–1446
+ test_invite_forbidden_for_non_admin method async_method test_invite_forbidden_for_non_admin L1477–1486
+ test_list_collaborators_unknown_repo method async_method test_list_collaborators_unknown_repo L1489–1493
+ test_remove_collaborator method async_method test_remove_collaborator L1462–1474
+ test_update_collaborator_permission method async_method test_update_collaborator_permission L1449–1459
+ TestIntegrationDeleteIssueComment class class TestIntegrationDeleteIssueComment L1351–1413
+ test_delete_comment_forbidden_for_non_owner method async_method test_delete_comment_forbidden_for_non_owner L1394–1413
+ test_delete_existing_comment method async_method test_delete_existing_comment L1355–1376
+ test_delete_unknown_comment_returns_error method async_method test_delete_unknown_comment_returns_error L1379–1391
+ TestIntegrationReleaseAssets class class TestIntegrationReleaseAssets L1586–1649
+ test_attach_and_delete_asset method async_method test_attach_and_delete_asset L1590–1615
+ test_attach_asset_forbidden_for_non_owner method async_method test_attach_asset_forbidden_for_non_owner L1634–1649
+ test_attach_asset_release_not_found method async_method test_attach_asset_release_not_found L1618–1631
+ TestIntegrationWebhooksMCP class class TestIntegrationWebhooksMCP L1496–1583
+ test_create_and_list_webhook method async_method test_create_and_list_webhook L1500–1519
+ test_create_webhook_forbidden_for_non_owner method async_method test_create_webhook_forbidden_for_non_owner L1559–1571
+ test_create_webhook_invalid_event_type method async_method test_create_webhook_invalid_event_type L1544–1556
+ test_delete_unknown_webhook_returns_error method async_method test_delete_unknown_webhook_returns_error L1574–1583
+ test_delete_webhook method async_method test_delete_webhook L1522–1541
+ execute_attach_release_asset import import execute_attach_release_asset L93–93
+ execute_create_webhook import import execute_create_webhook L110–110
+ execute_delete_issue_comment import import execute_delete_issue_comment L115–115
+ execute_delete_release_asset import import execute_delete_release_asset L93–93
+ execute_delete_webhook import import execute_delete_webhook L110–110
+ execute_invite_collaborator import import execute_invite_collaborator L104–104
+ execute_list_collaborators import import execute_list_collaborators L104–104
+ execute_list_webhooks import import execute_list_webhooks L110–110
+ execute_remove_collaborator import import execute_remove_collaborator L104–104
+ execute_update_collaborator_permission import import execute_update_collaborator_permission L104–104
← Older Oldest on feat/mcp-crud-expansion
All commits
Newer → Latest on feat/mcp-crud-expansion

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:972be37b25923cf9035ad5b252d5a19c609221645c4d56a827e007bb1a8ddbc4 --body "your comment"