Title: Two notification-subscription tools omit destructiveHint, defaulting to destructive under MCP 2025-06-18 · Issue #2841 · github/github-mcp-server · GitHub
Open Graph Title: Two notification-subscription tools omit destructiveHint, defaulting to destructive under MCP 2025-06-18 · Issue #2841 · github/github-mcp-server
X Title: Two notification-subscription tools omit destructiveHint, defaulting to destructive under MCP 2025-06-18 · Issue #2841 · github/github-mcp-server
Description: Describe the bug Under MCP schema 2025-06-18, an omitted destructiveHint defaults to true. Two tools currently emit readOnlyHint: false but omit destructiveHint, so a spec-conformant client will render them as destructive even though the...
Open Graph Description: Describe the bug Under MCP schema 2025-06-18, an omitted destructiveHint defaults to true. Two tools currently emit readOnlyHint: false but omit destructiveHint, so a spec-conformant client will re...
X Description: Describe the bug Under MCP schema 2025-06-18, an omitted destructiveHint defaults to true. Two tools currently emit readOnlyHint: false but omit destructiveHint, so a spec-conformant client will re...
Opengraph URL: https://github.com/github/github-mcp-server/issues/2841
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Two notification-subscription tools omit destructiveHint, defaulting to destructive under MCP 2025-06-18","articleBody":"### Describe the bug\n\nUnder MCP schema 2025-06-18, an omitted `destructiveHint` defaults to `true`.\n\nTwo tools currently emit `readOnlyHint: false` but omit `destructiveHint`, so a spec-conformant client will render them as destructive even though they appear to operate only on the caller's own notification-subscription state:\n\n1. `manage_notification_subscription` in `pkg/github/notifications.go:413`\n - Updates the caller's own thread subscription state (`watch`, `ignore`, or remove the subscription preference record at `:460` and `:465`)\n - This does not modify thread or repository content\n\n2. `manage_repository_notification_subscription` in `pkg/github/notifications.go:509`\n - Updates the caller's own repository subscription state (`subscribed`, `ignored`, or remove the subscription preference record at `:564` and `:569`)\n - This does not modify repository content\n\nIf that reading is right, both tools are non-read-only but not destructive, and should set `destructiveHint: false` explicitly.\n\nI'm filing this as a question rather than asserting a bug in case I'm misreading the intended risk model.\n\nI scoped this deliberately to these two tools. I did not include other write tools because their current hints are more arguable from source review.\n\n### Affected version\n\nGitHub MCP Server `v1.5.0`\n\nSource reviewed at commit `40db5e3` \nAffected code:\n- `pkg/github/notifications.go:413`\n- `pkg/github/notifications.go:509`\n\n### Steps to reproduce\n\n1. Open `pkg/github/notifications.go`\n2. Inspect `manage_notification_subscription` and `manage_repository_notification_subscription`\n3. Note that both emit `readOnlyHint: false`\n4. Note that neither sets `destructiveHint`\n5. Under MCP schema 2025-06-18, a conformant client therefore interprets both as `destructiveHint: true`\n\n### Expected behavior\n\nThese per-user subscription toggles should surface as non-destructive writes.\n\n### Actual behavior\n\nThey default to destructive under schema 2025-06-18, so consent UIs over-warn on operations that appear to affect only the caller's own subscription metadata.\n\n### Logs\n\nN/A. Static annotation review only.\n\nIf this matches the intended semantics, I'm happy to open a small PR setting `destructiveHint: false` explicitly on both. From the repo comments, it looks like snapshots can be regenerated with:\n\n`UPDATE_TOOLSNAPS=true go test ./...`","author":{"url":"https://github.com/MaazAhmed47","@type":"Person","name":"MaazAhmed47"},"datePublished":"2026-07-08T13:26:31.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2841/github-mcp-server/issues/2841"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1f0ef487-5e5c-4ad8-3754-ef77b495c68f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C310:338D73:520141:754395:6A5F1FF2 |
| html-safe-nonce | 3389e90269a62f62aef2f84829f300476c62995cf487c0ee1f93a21bc44b6efd |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMzEwOjMzOEQ3Mzo1MjAxNDE6NzU0Mzk1OjZBNUYxRkYyIiwidmlzaXRvcl9pZCI6IjQ3NDgyNTgzMzUxODMwMjAwMTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b20f5f2acd3fd7f4f89ba22eb42cabc0ce84f872ec37285b2294f86967b73b4f |
| hovercard-subject-tag | issue:4837884525 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/github/github-mcp-server/2841/issue_layout |
| twitter:image | https://opengraph.githubassets.com/3fa47a67f637d3a8f2d9f75b38e93df551818b1f21df364317299f32444e0506/github/github-mcp-server/issues/2841 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/3fa47a67f637d3a8f2d9f75b38e93df551818b1f21df364317299f32444e0506/github/github-mcp-server/issues/2841 |
| og:image:alt | Describe the bug Under MCP schema 2025-06-18, an omitted destructiveHint defaults to true. Two tools currently emit readOnlyHint: false but omit destructiveHint, so a spec-conformant client will re... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | MaazAhmed47 |
| hostname | github.com |
| expected-hostname | github.com |
| None | bf8fa4b42b6d150def6175efb9b0f1ec8e9628d7229ee2bdf6e850e7bdad923e |
| turbo-cache-control | no-preview |
| go-import | github.com/github/github-mcp-server git https://github.com/github/github-mcp-server.git |
| octolytics-dimension-user_id | 9919 |
| octolytics-dimension-user_login | github |
| octolytics-dimension-repository_id | 942771284 |
| octolytics-dimension-repository_nwo | github/github-mcp-server |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 942771284 |
| octolytics-dimension-repository_network_root_nwo | github/github-mcp-server |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7debc3c6cd5de09c6e22b47a1b9982acb2aabb7b |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width