groove-dev 0.26.38 → 0.27.0

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 (171) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CLAUDE.md +24 -19
  3. package/node_modules/@groove-dev/cli/bin/groove.js +2 -0
  4. package/node_modules/@groove-dev/cli/package.json +1 -1
  5. package/node_modules/@groove-dev/cli/src/commands/nuke.js +16 -4
  6. package/node_modules/@groove-dev/cli/src/commands/stop.js +17 -2
  7. package/node_modules/@groove-dev/daemon/integrations-registry.json +681 -75
  8. package/node_modules/@groove-dev/daemon/package.json +1 -1
  9. package/node_modules/@groove-dev/daemon/src/adaptive.js +23 -25
  10. package/node_modules/@groove-dev/daemon/src/api.js +346 -22
  11. package/node_modules/@groove-dev/daemon/src/classifier.js +53 -6
  12. package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
  13. package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
  14. package/node_modules/@groove-dev/daemon/src/index.js +28 -4
  15. package/node_modules/@groove-dev/daemon/src/integrations.js +215 -14
  16. package/node_modules/@groove-dev/daemon/src/introducer.js +84 -11
  17. package/node_modules/@groove-dev/daemon/src/journalist.js +43 -1
  18. package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
  19. package/node_modules/@groove-dev/daemon/src/mcp-manager.js +270 -0
  20. package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
  21. package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
  22. package/node_modules/@groove-dev/daemon/src/process.js +141 -9
  23. package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
  24. package/node_modules/@groove-dev/daemon/src/rotator.js +334 -31
  25. package/node_modules/@groove-dev/daemon/src/router.js +43 -0
  26. package/node_modules/@groove-dev/daemon/src/tokentracker.js +70 -18
  27. package/node_modules/@groove-dev/daemon/src/validate.js +5 -13
  28. package/node_modules/@groove-dev/daemon/templates/groove-slides.cjs +306 -0
  29. package/node_modules/@groove-dev/daemon/test/classifier.test.js +3 -5
  30. package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
  31. package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
  32. package/node_modules/@groove-dev/daemon/test/rotator.test.js +108 -0
  33. package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
  34. package/node_modules/@groove-dev/daemon/test/slides-engine.test.js +230 -0
  35. package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
  36. package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
  37. package/node_modules/@groove-dev/gui/dist/assets/index-eCrVowF0.js +652 -0
  38. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  39. package/node_modules/@groove-dev/gui/package.json +1 -4
  40. package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +26 -17
  41. package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +22 -1
  42. package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +53 -21
  43. package/node_modules/@groove-dev/gui/src/components/agents/agent-node.jsx +132 -90
  44. package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +212 -1
  45. package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
  46. package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +495 -174
  47. package/node_modules/@groove-dev/gui/src/components/dashboard/kpi-card.jsx +12 -2
  48. package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  49. package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +3 -3
  50. package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +24 -19
  51. package/node_modules/@groove-dev/gui/src/components/layout/command-palette.jsx +2 -2
  52. package/node_modules/@groove-dev/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  53. package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  54. package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
  55. package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +23 -5
  56. package/node_modules/@groove-dev/gui/src/stores/groove.js +59 -9
  57. package/node_modules/@groove-dev/gui/src/views/agents.jsx +84 -10
  58. package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +24 -21
  59. package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +153 -85
  60. package/package.json +2 -8
  61. package/packages/cli/bin/groove.js +2 -0
  62. package/packages/cli/package.json +1 -1
  63. package/packages/cli/src/commands/nuke.js +16 -4
  64. package/packages/cli/src/commands/stop.js +17 -2
  65. package/packages/daemon/integrations-registry.json +681 -75
  66. package/packages/daemon/package.json +1 -1
  67. package/packages/daemon/src/adaptive.js +23 -25
  68. package/packages/daemon/src/api.js +346 -22
  69. package/packages/daemon/src/classifier.js +53 -6
  70. package/packages/daemon/src/firstrun.js +14 -1
  71. package/packages/daemon/src/gateways/manager.js +2 -2
  72. package/packages/daemon/src/index.js +28 -4
  73. package/packages/daemon/src/integrations.js +215 -14
  74. package/packages/daemon/src/introducer.js +84 -11
  75. package/packages/daemon/src/journalist.js +43 -1
  76. package/packages/daemon/src/lockmanager.js +60 -0
  77. package/packages/daemon/src/mcp-manager.js +270 -0
  78. package/packages/daemon/src/memory.js +370 -0
  79. package/packages/daemon/src/pm.js +1 -1
  80. package/packages/daemon/src/process.js +141 -9
  81. package/packages/daemon/src/registry.js +1 -1
  82. package/packages/daemon/src/rotator.js +334 -31
  83. package/packages/daemon/src/router.js +43 -0
  84. package/packages/daemon/src/tokentracker.js +70 -18
  85. package/packages/daemon/src/validate.js +5 -13
  86. package/packages/daemon/templates/groove-slides.cjs +306 -0
  87. package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
  88. package/packages/gui/dist/assets/index-eCrVowF0.js +652 -0
  89. package/packages/gui/dist/index.html +2 -2
  90. package/packages/gui/package.json +1 -4
  91. package/packages/gui/src/components/agents/agent-chat.jsx +26 -17
  92. package/packages/gui/src/components/agents/agent-config.jsx +22 -1
  93. package/packages/gui/src/components/agents/agent-feed.jsx +53 -21
  94. package/packages/gui/src/components/agents/agent-node.jsx +132 -90
  95. package/packages/gui/src/components/agents/spawn-wizard.jsx +212 -1
  96. package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
  97. package/packages/gui/src/components/dashboard/intel-panel.jsx +495 -174
  98. package/packages/gui/src/components/dashboard/kpi-card.jsx +12 -2
  99. package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  100. package/packages/gui/src/components/layout/activity-bar.jsx +3 -3
  101. package/packages/gui/src/components/layout/app-shell.jsx +24 -19
  102. package/packages/gui/src/components/layout/command-palette.jsx +2 -2
  103. package/packages/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  104. package/packages/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  105. package/packages/gui/src/lib/format.js +0 -6
  106. package/packages/gui/src/lib/hooks/use-dashboard.js +23 -5
  107. package/packages/gui/src/stores/groove.js +59 -9
  108. package/packages/gui/src/views/agents.jsx +84 -10
  109. package/packages/gui/src/views/dashboard.jsx +24 -21
  110. package/packages/gui/src/views/marketplace.jsx +153 -85
  111. package/node_modules/@groove-dev/gui/dist/assets/index-CEFKgLGB.css +0 -1
  112. package/node_modules/@groove-dev/gui/dist/assets/index-CaKBNWcK.js +0 -638
  113. package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
  114. package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
  115. package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
  116. package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
  117. package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
  118. package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
  119. package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
  120. package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
  121. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
  122. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
  123. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
  124. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
  125. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
  126. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
  127. package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
  128. package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
  129. package/node_modules/@radix-ui/react-popover/README.md +0 -3
  130. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
  131. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
  132. package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
  133. package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
  134. package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
  135. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
  136. package/node_modules/@radix-ui/react-popover/package.json +0 -82
  137. package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
  138. package/node_modules/@radix-ui/react-separator/README.md +0 -3
  139. package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
  140. package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
  141. package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
  142. package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
  143. package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
  144. package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
  145. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
  146. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
  147. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
  148. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
  149. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
  150. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
  151. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
  152. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
  153. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
  154. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
  155. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
  156. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
  157. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
  158. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
  159. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
  160. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
  161. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
  162. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
  163. package/node_modules/@radix-ui/react-separator/package.json +0 -69
  164. package/packages/gui/dist/assets/index-CEFKgLGB.css +0 -1
  165. package/packages/gui/dist/assets/index-CaKBNWcK.js +0 -638
  166. package/packages/gui/dist/groove-logo-short.png +0 -0
  167. package/packages/gui/dist/groove-logo.png +0 -0
  168. package/packages/gui/public/groove-logo-short.png +0 -0
  169. package/packages/gui/public/groove-logo.png +0 -0
  170. package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
  171. package/packages/gui/src/lib/hooks/use-media-query.js +0 -18
@@ -1,36 +1,4 @@
1
1
  [
2
- {
3
- "id": "slack",
4
- "name": "Slack",
5
- "description": "Send and read messages, manage channels, search history, post reactions and thread replies",
6
- "category": "communication",
7
- "icon": "slack",
8
- "tags": ["chat", "messaging", "notifications", "team"],
9
- "roles": ["cmo", "ea", "support", "fullstack"],
10
- "npmPackage": "@modelcontextprotocol/server-slack",
11
- "transport": "stdio",
12
- "command": "npx",
13
- "args": ["-y", "@modelcontextprotocol/server-slack"],
14
- "authType": "api-key",
15
- "envKeys": [
16
- { "key": "SLACK_BOT_TOKEN", "label": "Bot Token", "placeholder": "xoxb-...", "required": true },
17
- { "key": "SLACK_TEAM_ID", "label": "Team ID", "placeholder": "T01234567", "required": true }
18
- ],
19
- "setupUrl": "https://api.slack.com/apps",
20
- "setupSteps": [
21
- "Go to api.slack.com/apps and click 'Create New App'",
22
- "Choose 'From scratch', name it 'Groove', pick your workspace",
23
- "Go to 'OAuth & Permissions', add scopes: channels:read, channels:history, chat:write, users:read",
24
- "Click 'Install to Workspace' and authorize",
25
- "Copy the 'Bot User OAuth Token' (starts with xoxb-)",
26
- "Your Team ID is in the workspace URL: app.slack.com/client/TXXXXXXX"
27
- ],
28
- "featured": true,
29
- "downloads": 0,
30
- "rating": 0,
31
- "ratingCount": 0,
32
- "verified": "mcp-official"
33
- },
34
2
  {
35
3
  "id": "github",
36
4
  "name": "GitHub",
@@ -53,6 +21,8 @@
53
21
  "Select scopes: repo, read:org, read:user",
54
22
  "Click 'Generate token' and copy it"
55
23
  ],
24
+ "requiresApproval": ["create_issue", "create_pull_request", "create_or_update_file", "delete_file", "push_files"],
25
+ "agentInstructions": "## GitHub Integration\n\nYou have GitHub connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/github/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `create_issue` — params: {owner, repo, title, body}\n- `search_repositories` — params: {query}\n- `create_pull_request` — params: {owner, repo, title, body, head, base}\n- `get_file_contents` — params: {owner, repo, path}\n\n### Rules\n- Confirm before creating issues or PRs\n- Use search before creating duplicates",
56
26
  "featured": true,
57
27
  "downloads": 0,
58
28
  "rating": 0,
@@ -81,6 +51,8 @@
81
51
  "Copy the 'Secret key' (starts with sk_live_ or sk_test_)",
82
52
  "Use a test key (sk_test_) for safe experimentation"
83
53
  ],
54
+ "requiresApproval": ["create_charge", "create_payment_link", "create_invoice", "create_subscription", "create_refund"],
55
+ "agentInstructions": "## Stripe Integration\n\nYou have Stripe connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/stripe/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `list_customers` — params: {limit}\n- `create_customer` — params: {email, name}\n- `list_charges` — params: {limit}\n- `create_payment_link` — params: {price, quantity}\n\n### Rules\n- Never create live charges without explicit confirmation\n- Prefer test mode keys for experimentation",
84
56
  "featured": true,
85
57
  "downloads": 0,
86
58
  "rating": 0,
@@ -100,13 +72,16 @@
100
72
  "command": "npx",
101
73
  "args": ["-y", "@gongrzhe/server-calendar-autoauth-mcp"],
102
74
  "authType": "google-autoauth",
75
+ "oauthScopes": ["https://www.googleapis.com/auth/calendar"],
103
76
  "oauthKeysDir": ".calendar-mcp",
104
77
  "envKeys": [],
105
78
  "setupSteps": [
106
- "One-time: link your Google Cloud OAuth app (shared across all Google integrations)",
107
- "Click 'Sign in with Google' a browser opens for authorization",
108
- "Donethe MCP server handles token refresh automatically"
79
+ "Click 'Sign in with Google' below your browser will open",
80
+ "Sign in and allow access to your calendar",
81
+ "That's it token refresh is handled automatically"
109
82
  ],
83
+ "requiresApproval": ["create_event", "delete_event"],
84
+ "agentInstructions": "## Google Calendar Integration\n\nYou have Google Calendar connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/google-calendar/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `list_events` — params: {timeMin, timeMax}\n- `create_event` — params: {summary, start, end, attendees}\n- `update_event` — params: {eventId, summary, start, end}\n- `delete_event` — params: {eventId}\n\n### Rules\n- Confirm date/time and attendees before creating events\n- Use ISO 8601 format for dates",
110
85
  "featured": false,
111
86
  "downloads": 0,
112
87
  "rating": 0,
@@ -126,17 +101,20 @@
126
101
  "command": "npx",
127
102
  "args": ["-y", "@gongrzhe/server-gmail-autoauth-mcp"],
128
103
  "authType": "google-autoauth",
104
+ "oauthScopes": ["https://www.googleapis.com/auth/gmail.modify"],
129
105
  "oauthKeysDir": ".gmail-mcp",
130
106
  "envKeys": [],
131
107
  "setupSteps": [
132
- "One-time: link your Google Cloud OAuth app (shared across all Google integrations)",
133
- "Click 'Sign in with Google' a browser opens for authorization",
134
- "Donethe MCP server handles token refresh automatically"
108
+ "Click 'Sign in with Google' below your browser will open",
109
+ "Sign in and allow access to your Gmail",
110
+ "That's it token refresh is handled automatically"
135
111
  ],
112
+ "requiresApproval": ["send_email"],
136
113
  "featured": false,
137
114
  "downloads": 0,
138
115
  "rating": 0,
139
116
  "ratingCount": 0,
117
+ "agentInstructions": "## Gmail Integration\n\nYou have Gmail connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/gmail/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `send_email` — params: {to, subject, body}\n- `search_emails` — params: {query}\n- `get_email` — params: {id}\n- `draft_email` — params: {to, subject, body}\n\n### Rules\n- Always confirm recipient and subject before sending\n- Use search before replying to find the thread\n- Draft emails in a professional tone unless told otherwise",
140
118
  "verified": "community"
141
119
  },
142
120
  {
@@ -163,6 +141,8 @@
163
141
  "downloads": 0,
164
142
  "rating": 0,
165
143
  "ratingCount": 0,
144
+ "requiresApproval": [],
145
+ "agentInstructions": "## PostgreSQL Integration\n\nYou have PostgreSQL connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/postgres/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `query` — params: {sql}\n- `list_tables` — params: {}\n- `describe_table` — params: {table}\n\n### Rules\n- Never run DROP, TRUNCATE, or DELETE without explicit confirmation\n- Prefer SELECT queries for exploration\n- Use LIMIT on large tables",
166
146
  "verified": "mcp-official"
167
147
  },
168
148
  {
@@ -191,36 +171,40 @@
191
171
  "downloads": 0,
192
172
  "rating": 0,
193
173
  "ratingCount": 0,
174
+ "requiresApproval": [],
175
+ "agentInstructions": "## Brave Search Integration\n\nYou have Brave Search connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/brave-search/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `brave_web_search` — params: {query, count}\n- `brave_local_search` — params: {query}\n\n### Rules\n- Use specific, targeted queries for best results\n- Summarize findings rather than dumping raw results",
194
176
  "verified": "mcp-official"
195
177
  },
196
178
  {
197
179
  "id": "google-drive",
198
180
  "name": "Google Drive",
199
- "description": "Search, read, and manage files in Google Drive",
181
+ "description": "Search, read, and upload files to Google Drive with auto-conversion to Slides/Docs/Sheets",
200
182
  "category": "productivity",
201
183
  "icon": "drive",
202
- "tags": ["files", "documents", "sheets", "storage"],
203
- "roles": ["ea", "analyst", "cmo"],
184
+ "tags": ["files", "documents", "sheets", "storage", "upload"],
185
+ "roles": ["ea", "analyst", "cmo", "slides"],
204
186
  "npmPackage": "@modelcontextprotocol/server-gdrive",
205
187
  "transport": "stdio",
206
188
  "command": "npx",
207
189
  "args": ["-y", "@modelcontextprotocol/server-gdrive"],
208
190
  "authType": "oauth-google",
209
- "oauthScopes": ["https://www.googleapis.com/auth/drive.readonly"],
191
+ "oauthScopes": ["https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"],
210
192
  "envKeys": [
211
193
  { "key": "GOOGLE_CLIENT_ID", "label": "OAuth Client ID", "required": true, "hidden": true },
212
194
  { "key": "GOOGLE_CLIENT_SECRET", "label": "OAuth Client Secret", "required": true, "hidden": true },
213
195
  { "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
214
196
  ],
215
197
  "setupSteps": [
216
- "Click 'Connect with Google' below to sign in",
217
- "Authorize Groove to access your Drive",
218
- "Done — credentials are encrypted and stored locally"
198
+ "Click 'Connect with Google' below your browser will open",
199
+ "Sign in and allow access to your Drive",
200
+ "That's it — credentials are encrypted and stored locally"
219
201
  ],
220
202
  "featured": false,
221
203
  "downloads": 0,
222
204
  "rating": 0,
223
205
  "ratingCount": 0,
206
+ "requiresApproval": ["upload"],
207
+ "agentInstructions": "## Google Drive Integration\n\nYou have Google Drive connected via GROOVE.\n\n### Search & Read (MCP)\n`POST http://localhost:31415/api/integrations/google-drive/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n- `search_files` — params: {query}\n- `get_file` — params: {fileId}\n- `list_files` — params: {folderId}\n\n### Upload (GROOVE API)\n`POST http://localhost:31415/api/integrations/google-drive/upload`\nBody: `{\"filePath\": \"/absolute/path/to/file.pptx\", \"name\": \"My Deck\", \"convert\": true}`\n\nAuto-converts on upload:\n- `.pptx` → Google Slides\n- `.docx` → Google Docs\n- `.xlsx` → Google Sheets\n- `.csv` → Google Sheets\n- `.html` → Google Docs\n\nResponse: `{\"id\": \"...\", \"name\": \"...\", \"webViewLink\": \"https://...\"}`\n\nRequires approval — you'll get an `approvalId` to retry with.\n\n### Rules\n- Build files locally first (PptxGenJS, etc.), then upload\n- Use `convert: true` (default) for native Google format\n- Use `convert: false` to keep original format in Drive",
224
208
  "verified": "mcp-official"
225
209
  },
226
210
  {
@@ -249,6 +233,8 @@
249
233
  "downloads": 0,
250
234
  "rating": 0,
251
235
  "ratingCount": 0,
236
+ "requiresApproval": ["create_issue", "update_issue", "delete_issue"],
237
+ "agentInstructions": "## Linear Integration\n\nYou have Linear connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/linear/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `create_issue` — params: {title, description, teamId, priority}\n- `list_issues` — params: {filter}\n- `update_issue` — params: {issueId, status, assigneeId}\n- `search_issues` — params: {query}\n\n### Rules\n- Search for existing issues before creating duplicates\n- Confirm title and assignee before creating",
252
238
  "verified": "community"
253
239
  },
254
240
  {
@@ -278,36 +264,8 @@
278
264
  "downloads": 0,
279
265
  "rating": 0,
280
266
  "ratingCount": 0,
281
- "verified": "community"
282
- },
283
- {
284
- "id": "discord",
285
- "name": "Discord",
286
- "description": "Send and read messages, manage channels and servers on Discord",
287
- "category": "communication",
288
- "icon": "discord",
289
- "tags": ["chat", "community", "messaging", "voice"],
290
- "roles": ["cmo", "support"],
291
- "npmPackage": "mcp-discord",
292
- "transport": "stdio",
293
- "command": "npx",
294
- "args": ["-y", "mcp-discord"],
295
- "authType": "api-key",
296
- "envKeys": [
297
- { "key": "DISCORD_BOT_TOKEN", "label": "Bot Token", "required": true }
298
- ],
299
- "setupUrl": "https://discord.com/developers/applications",
300
- "setupSteps": [
301
- "Click the link below to open Discord Developer Portal",
302
- "Click 'New Application', name it 'Groove'",
303
- "Go to 'Bot' tab, click 'Reset Token', copy it",
304
- "Enable 'Message Content Intent' under Privileged Gateway Intents",
305
- "Go to OAuth2 > URL Generator, select 'bot' scope, invite to your server"
306
- ],
307
- "featured": false,
308
- "downloads": 0,
309
- "rating": 0,
310
- "ratingCount": 0,
267
+ "requiresApproval": ["create_page", "update_page", "delete_page"],
268
+ "agentInstructions": "## Notion Integration\n\nYou have Notion connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/notion/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `search` — params: {query}\n- `create_page` — params: {parentId, title, content}\n- `update_page` — params: {pageId, properties}\n- `query_database` — params: {databaseId, filter}\n\n### Rules\n- Search for existing pages before creating new ones\n- Share pages with the integration first if they're not visible",
311
269
  "verified": "community"
312
270
  },
313
271
  {
@@ -336,8 +294,106 @@
336
294
  "downloads": 0,
337
295
  "rating": 0,
338
296
  "ratingCount": 0,
297
+ "requiresApproval": ["call_service"],
298
+ "agentInstructions": "## Home Assistant Integration\n\nYou have Home Assistant connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/home-assistant/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `get_states` — params: {}\n- `call_service` — params: {domain, service, entity_id}\n- `get_entity` — params: {entity_id}\n\n### Rules\n- Confirm before toggling devices or running automations\n- Check current state before changing it",
339
299
  "verified": "community"
340
300
  },
301
+ {
302
+ "id": "google-docs",
303
+ "name": "Google Docs",
304
+ "description": "Search and read Google Docs documents (read-only via Drive API)",
305
+ "category": "productivity",
306
+ "icon": "docs",
307
+ "tags": ["documents", "writing", "collaboration", "google"],
308
+ "roles": ["ea", "cmo", "analyst"],
309
+ "npmPackage": "@modelcontextprotocol/server-gdrive",
310
+ "transport": "stdio",
311
+ "command": "npx",
312
+ "args": ["-y", "@modelcontextprotocol/server-gdrive"],
313
+ "authType": "oauth-google",
314
+ "oauthScopes": ["https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/drive.readonly"],
315
+ "envKeys": [
316
+ { "key": "GOOGLE_CLIENT_ID", "label": "OAuth Client ID", "required": true, "hidden": true },
317
+ { "key": "GOOGLE_CLIENT_SECRET", "label": "OAuth Client Secret", "required": true, "hidden": true },
318
+ { "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
319
+ ],
320
+ "setupSteps": [
321
+ "Click 'Connect with Google' below — your browser will open",
322
+ "Sign in and allow access to your Docs",
323
+ "That's it — credentials are encrypted and stored locally"
324
+ ],
325
+ "requiresApproval": [],
326
+ "agentInstructions": "## Google Docs Integration\n\nYou have Google Docs connected via GROOVE.\n\n### Search & Read\n`POST http://localhost:31415/api/integrations/google-docs/exec`\n- `search_files` — params: {query}\n- `get_file` — params: {fileId}\n\n### Create (via Drive Upload)\nTo create a Google Doc, build a `.docx` or `.html` file locally, then upload:\n`POST http://localhost:31415/api/integrations/google-drive/upload`\nBody: `{\"filePath\": \"/path/to/doc.docx\", \"convert\": true}`\nThis auto-converts to a native Google Doc.",
327
+ "featured": false,
328
+ "downloads": 0,
329
+ "rating": 0,
330
+ "ratingCount": 0,
331
+ "verified": "mcp-official"
332
+ },
333
+ {
334
+ "id": "google-sheets",
335
+ "name": "Google Sheets",
336
+ "description": "Search and read Google Sheets spreadsheets (read-only via Drive API)",
337
+ "category": "productivity",
338
+ "icon": "sheets",
339
+ "tags": ["spreadsheets", "data", "tables", "google"],
340
+ "roles": ["analyst", "cfo", "ea"],
341
+ "npmPackage": "@modelcontextprotocol/server-gdrive",
342
+ "transport": "stdio",
343
+ "command": "npx",
344
+ "args": ["-y", "@modelcontextprotocol/server-gdrive"],
345
+ "authType": "oauth-google",
346
+ "oauthScopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive.readonly"],
347
+ "envKeys": [
348
+ { "key": "GOOGLE_CLIENT_ID", "label": "OAuth Client ID", "required": true, "hidden": true },
349
+ { "key": "GOOGLE_CLIENT_SECRET", "label": "OAuth Client Secret", "required": true, "hidden": true },
350
+ { "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
351
+ ],
352
+ "setupSteps": [
353
+ "Click 'Connect with Google' below — your browser will open",
354
+ "Sign in and allow access to your Sheets",
355
+ "That's it — credentials are encrypted and stored locally"
356
+ ],
357
+ "requiresApproval": [],
358
+ "agentInstructions": "## Google Sheets Integration\n\nYou have Google Sheets connected via GROOVE.\n\n### Search & Read\n`POST http://localhost:31415/api/integrations/google-sheets/exec`\n- `search_files` — params: {query}\n- `get_file` — params: {fileId}\n\n### Create (via Drive Upload)\nTo create a Google Sheet, build a `.xlsx` or `.csv` file locally, then upload:\n`POST http://localhost:31415/api/integrations/google-drive/upload`\nBody: `{\"filePath\": \"/path/to/data.xlsx\", \"convert\": true}`\nThis auto-converts to a native Google Sheet.",
359
+ "featured": false,
360
+ "downloads": 0,
361
+ "rating": 0,
362
+ "ratingCount": 0,
363
+ "verified": "mcp-official"
364
+ },
365
+ {
366
+ "id": "google-slides",
367
+ "name": "Google Slides",
368
+ "description": "Search and read Google Slides presentations (read-only via Drive API)",
369
+ "category": "productivity",
370
+ "icon": "slides",
371
+ "tags": ["presentations", "slides", "decks", "google"],
372
+ "roles": ["cmo", "ea", "analyst"],
373
+ "npmPackage": "@modelcontextprotocol/server-gdrive",
374
+ "transport": "stdio",
375
+ "command": "npx",
376
+ "args": ["-y", "@modelcontextprotocol/server-gdrive"],
377
+ "authType": "oauth-google",
378
+ "oauthScopes": ["https://www.googleapis.com/auth/presentations", "https://www.googleapis.com/auth/drive.readonly"],
379
+ "envKeys": [
380
+ { "key": "GOOGLE_CLIENT_ID", "label": "OAuth Client ID", "required": true, "hidden": true },
381
+ { "key": "GOOGLE_CLIENT_SECRET", "label": "OAuth Client Secret", "required": true, "hidden": true },
382
+ { "key": "GOOGLE_REFRESH_TOKEN", "label": "Refresh Token", "required": true, "hidden": true }
383
+ ],
384
+ "setupSteps": [
385
+ "Click 'Connect with Google' below — your browser will open",
386
+ "Sign in and allow access to your Slides",
387
+ "That's it — credentials are encrypted and stored locally"
388
+ ],
389
+ "requiresApproval": [],
390
+ "agentInstructions": "## Google Slides Integration\n\nYou have Google Slides connected via GROOVE.\n\n### Search & Read\n`POST http://localhost:31415/api/integrations/google-slides/exec`\n- `search_files` — params: {query}\n- `get_file` — params: {fileId}\n\n### Create (via Drive Upload)\nTo create a Google Slides deck, build a `.pptx` file locally (e.g., with PptxGenJS), then upload:\n`POST http://localhost:31415/api/integrations/google-drive/upload`\nBody: `{\"filePath\": \"/path/to/deck.pptx\", \"convert\": true}`\nThis auto-converts to a native Google Slides presentation.",
391
+ "featured": false,
392
+ "downloads": 0,
393
+ "rating": 0,
394
+ "ratingCount": 0,
395
+ "verified": "mcp-official"
396
+ },
341
397
  {
342
398
  "id": "google-maps",
343
399
  "name": "Google Maps",
@@ -360,10 +416,560 @@
360
416
  "Create or select a project, then 'Create Credentials' > 'API Key'",
361
417
  "Enable the Maps JavaScript API, Geocoding API, and Places API"
362
418
  ],
419
+ "requiresApproval": [],
420
+ "agentInstructions": "## Google Maps Integration\n\nYou have Google Maps connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/google-maps/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `maps_geocode` — params: {address}\n- `maps_directions` — params: {origin, destination}\n- `maps_search_places` — params: {query, location}\n- `maps_distance_matrix` — params: {origins, destinations}\n\n### Rules\n- Use specific addresses for best geocoding accuracy\n- Check distance/time before suggesting routes",
363
421
  "featured": false,
364
422
  "downloads": 0,
365
423
  "rating": 0,
366
424
  "ratingCount": 0,
367
425
  "verified": "mcp-official"
426
+ },
427
+ {
428
+ "id": "elevenlabs",
429
+ "name": "ElevenLabs",
430
+ "description": "Text-to-speech, voice generation, and audio synthesis",
431
+ "category": "ai",
432
+ "icon": "elevenlabs",
433
+ "tags": ["voice", "tts", "audio", "speech"],
434
+ "roles": ["creative", "cmo", "support"],
435
+ "npmPackage": "elevenlabs-mcp",
436
+ "transport": "stdio",
437
+ "command": "npx",
438
+ "args": ["-y", "elevenlabs-mcp"],
439
+ "authType": "api-key",
440
+ "envKeys": [
441
+ { "key": "ELEVENLABS_API_KEY", "label": "API Key", "required": true }
442
+ ],
443
+ "setupUrl": "https://elevenlabs.io/app/settings/api-keys",
444
+ "setupSteps": [
445
+ "Click the link below to open ElevenLabs settings",
446
+ "Copy your API key from the API Keys section"
447
+ ],
448
+ "requiresApproval": [],
449
+ "agentInstructions": "## ElevenLabs Integration\n\nYou have ElevenLabs connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/elevenlabs/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `text_to_speech` — params: {text, voice_id}\n- `list_voices` — params: {}\n- `get_voice` — params: {voice_id}\n\n### Rules\n- List voices first to find valid voice_id values\n- Keep text under 5000 chars per request",
450
+ "featured": false,
451
+ "downloads": 0,
452
+ "rating": 0,
453
+ "ratingCount": 0,
454
+ "verified": "community"
455
+ },
456
+ {
457
+ "id": "sentry",
458
+ "name": "Sentry",
459
+ "description": "Error tracking, issue management, and application monitoring",
460
+ "category": "developer",
461
+ "icon": "sentry",
462
+ "tags": ["errors", "monitoring", "debugging", "issues"],
463
+ "roles": ["backend", "fullstack", "devops"],
464
+ "npmPackage": "@sentry/mcp-server",
465
+ "transport": "stdio",
466
+ "command": "npx",
467
+ "args": ["-y", "@sentry/mcp-server"],
468
+ "authType": "api-key",
469
+ "envKeys": [
470
+ { "key": "SENTRY_AUTH_TOKEN", "label": "Auth Token", "required": true }
471
+ ],
472
+ "setupUrl": "https://sentry.io/settings/account/api/auth-tokens/",
473
+ "setupSteps": [
474
+ "Click the link below to open Sentry auth tokens",
475
+ "Create a new auth token with project:read and issue:read scopes",
476
+ "Copy the token"
477
+ ],
478
+ "requiresApproval": [],
479
+ "agentInstructions": "## Sentry Integration\n\nYou have Sentry connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/sentry/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `list_issues` — params: {project, query}\n- `get_issue` — params: {issue_id}\n- `list_events` — params: {issue_id}\n- `resolve_issue` — params: {issue_id}\n\n### Rules\n- Use query filters to narrow results\n- Check issue frequency before triaging",
480
+ "featured": false,
481
+ "downloads": 0,
482
+ "rating": 0,
483
+ "ratingCount": 0,
484
+ "verified": "verified"
485
+ },
486
+ {
487
+ "id": "hubspot",
488
+ "name": "HubSpot",
489
+ "description": "CRM, contacts, deals, and marketing automation",
490
+ "category": "crm",
491
+ "icon": "hubspot",
492
+ "tags": ["crm", "sales", "contacts", "marketing"],
493
+ "roles": ["cmo", "analyst", "support"],
494
+ "npmPackage": "hubspot-mcp",
495
+ "transport": "stdio",
496
+ "command": "npx",
497
+ "args": ["-y", "hubspot-mcp"],
498
+ "authType": "api-key",
499
+ "envKeys": [
500
+ { "key": "HUBSPOT_ACCESS_TOKEN", "label": "Private App Token", "required": true }
501
+ ],
502
+ "setupUrl": "https://app.hubspot.com/settings/private-apps",
503
+ "setupSteps": [
504
+ "Click the link below to open HubSpot Private Apps",
505
+ "Create a new private app with the scopes you need",
506
+ "Copy the access token"
507
+ ],
508
+ "requiresApproval": ["create_contact", "create_deal"],
509
+ "agentInstructions": "## HubSpot Integration\n\nYou have HubSpot connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/hubspot/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `search_contacts` — params: {query}\n- `create_contact` — params: {email, firstName, lastName}\n- `list_deals` — params: {limit}\n- `create_deal` — params: {name, amount, stage}\n\n### Rules\n- Search before creating to avoid duplicates\n- Confirm contact details before creating",
510
+ "featured": false,
511
+ "downloads": 0,
512
+ "rating": 0,
513
+ "ratingCount": 0,
514
+ "verified": "community"
515
+ },
516
+ {
517
+ "id": "jira",
518
+ "name": "Jira",
519
+ "description": "Issue tracking, sprints, and project management",
520
+ "category": "productivity",
521
+ "icon": "jira",
522
+ "tags": ["issues", "project-management", "sprints", "tickets"],
523
+ "roles": ["fullstack", "backend", "devops"],
524
+ "npmPackage": "jira-mcp",
525
+ "transport": "stdio",
526
+ "command": "npx",
527
+ "args": ["-y", "jira-mcp"],
528
+ "authType": "api-key",
529
+ "envKeys": [
530
+ { "key": "JIRA_HOST", "label": "Jira Host", "placeholder": "your-domain.atlassian.net", "required": true },
531
+ { "key": "JIRA_EMAIL", "label": "Email", "required": true },
532
+ { "key": "JIRA_API_TOKEN", "label": "API Token", "required": true }
533
+ ],
534
+ "setupUrl": "https://id.atlassian.com/manage-profile/security/api-tokens",
535
+ "setupSteps": [
536
+ "Click the link below to open Atlassian API tokens",
537
+ "Click 'Create API token', label it 'Groove'",
538
+ "Copy the token and enter your Jira host and email"
539
+ ],
540
+ "requiresApproval": ["create_issue", "delete_issue"],
541
+ "agentInstructions": "## Jira Integration\n\nYou have Jira connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/jira/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `search_issues` — params: {jql}\n- `create_issue` — params: {project, summary, type, description}\n- `get_issue` — params: {issueKey}\n- `transition_issue` — params: {issueKey, transitionId}\n\n### Rules\n- Use JQL for efficient searches\n- Search before creating to avoid duplicates",
542
+ "featured": false,
543
+ "downloads": 0,
544
+ "rating": 0,
545
+ "ratingCount": 0,
546
+ "verified": "community"
547
+ },
548
+ {
549
+ "id": "sendgrid",
550
+ "name": "SendGrid",
551
+ "description": "Transactional and marketing email at scale",
552
+ "category": "communication",
553
+ "icon": "sendgrid",
554
+ "tags": ["email", "transactional", "marketing", "newsletters"],
555
+ "roles": ["cmo", "support", "fullstack"],
556
+ "npmPackage": "sendgrid-mcp",
557
+ "transport": "stdio",
558
+ "command": "npx",
559
+ "args": ["-y", "sendgrid-mcp"],
560
+ "authType": "api-key",
561
+ "envKeys": [
562
+ { "key": "SENDGRID_API_KEY", "label": "API Key", "placeholder": "SG...", "required": true }
563
+ ],
564
+ "setupUrl": "https://app.sendgrid.com/settings/api_keys",
565
+ "setupSteps": [
566
+ "Click the link below to open SendGrid API keys",
567
+ "Click 'Create API Key' with appropriate permissions",
568
+ "Copy the key (starts with SG)"
569
+ ],
570
+ "requiresApproval": ["send_email", "send_campaign"],
571
+ "agentInstructions": "## SendGrid Integration\n\nYou have SendGrid connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/sendgrid/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `send_email` — params: {to, from, subject, html}\n- `list_templates` — params: {}\n- `get_stats` — params: {start_date}\n\n### Rules\n- Always confirm recipient and content before sending\n- Use verified sender addresses only",
572
+ "featured": false,
573
+ "downloads": 0,
574
+ "rating": 0,
575
+ "ratingCount": 0,
576
+ "verified": "community"
577
+ },
578
+ {
579
+ "id": "resend",
580
+ "name": "Resend",
581
+ "description": "Modern email API for developers",
582
+ "category": "communication",
583
+ "icon": "resend",
584
+ "tags": ["email", "transactional", "developer"],
585
+ "roles": ["fullstack", "backend", "cmo"],
586
+ "npmPackage": "resend-mcp",
587
+ "transport": "stdio",
588
+ "command": "npx",
589
+ "args": ["-y", "resend-mcp"],
590
+ "authType": "api-key",
591
+ "envKeys": [
592
+ { "key": "RESEND_API_KEY", "label": "API Key", "placeholder": "re_...", "required": true }
593
+ ],
594
+ "setupUrl": "https://resend.com/api-keys",
595
+ "setupSteps": [
596
+ "Click the link below to open Resend API keys",
597
+ "Create a new API key",
598
+ "Copy the key (starts with re_)"
599
+ ],
600
+ "requiresApproval": ["send_email"],
601
+ "agentInstructions": "## Resend Integration\n\nYou have Resend connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/resend/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `send_email` — params: {from, to, subject, html}\n- `list_emails` — params: {}\n- `get_email` — params: {id}\n\n### Rules\n- Confirm recipient and subject before sending\n- Use a verified domain as the from address",
602
+ "featured": false,
603
+ "downloads": 0,
604
+ "rating": 0,
605
+ "ratingCount": 0,
606
+ "verified": "community"
607
+ },
608
+ {
609
+ "id": "replicate",
610
+ "name": "Replicate",
611
+ "description": "Run AI models — image generation, video, audio, and more",
612
+ "category": "ai",
613
+ "icon": "replicate",
614
+ "tags": ["ai", "images", "models", "generation"],
615
+ "roles": ["creative", "cmo", "analyst"],
616
+ "npmPackage": "replicate-mcp",
617
+ "transport": "stdio",
618
+ "command": "npx",
619
+ "args": ["-y", "replicate-mcp"],
620
+ "authType": "api-key",
621
+ "envKeys": [
622
+ { "key": "REPLICATE_API_TOKEN", "label": "API Token", "required": true }
623
+ ],
624
+ "setupUrl": "https://replicate.com/account/api-tokens",
625
+ "setupSteps": [
626
+ "Click the link below to open Replicate API tokens",
627
+ "Copy your API token"
628
+ ],
629
+ "requiresApproval": [],
630
+ "agentInstructions": "## Replicate Integration\n\nYou have Replicate connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/replicate/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `run_model` — params: {model, input}\n- `list_models` — params: {query}\n- `get_prediction` — params: {id}\n\n### Rules\n- Check model input schema before running\n- Models may take minutes — poll prediction status",
631
+ "featured": false,
632
+ "downloads": 0,
633
+ "rating": 0,
634
+ "ratingCount": 0,
635
+ "verified": "community"
636
+ },
637
+ {
638
+ "id": "vercel",
639
+ "name": "Vercel",
640
+ "description": "Deployments, domains, and serverless functions",
641
+ "category": "developer",
642
+ "icon": "vercel",
643
+ "tags": ["deploy", "hosting", "serverless", "domains"],
644
+ "roles": ["devops", "fullstack", "frontend"],
645
+ "npmPackage": "vercel-mcp",
646
+ "transport": "stdio",
647
+ "command": "npx",
648
+ "args": ["-y", "vercel-mcp"],
649
+ "authType": "api-key",
650
+ "envKeys": [
651
+ { "key": "VERCEL_TOKEN", "label": "Access Token", "required": true }
652
+ ],
653
+ "setupUrl": "https://vercel.com/account/tokens",
654
+ "setupSteps": [
655
+ "Click the link below to open Vercel tokens",
656
+ "Create a new token and copy it"
657
+ ],
658
+ "requiresApproval": ["create_deployment", "delete_deployment"],
659
+ "agentInstructions": "## Vercel Integration\n\nYou have Vercel connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/vercel/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `list_deployments` — params: {projectId}\n- `get_deployment` — params: {deploymentId}\n- `list_projects` — params: {}\n- `list_domains` — params: {}\n\n### Rules\n- Confirm before triggering new deployments\n- Check deployment status after triggering",
660
+ "featured": false,
661
+ "downloads": 0,
662
+ "rating": 0,
663
+ "ratingCount": 0,
664
+ "verified": "community"
665
+ },
666
+ {
667
+ "id": "supabase",
668
+ "name": "Supabase",
669
+ "description": "Database, auth, storage, and edge functions",
670
+ "category": "database",
671
+ "icon": "supabase",
672
+ "tags": ["database", "auth", "storage", "postgres"],
673
+ "roles": ["backend", "fullstack", "analyst"],
674
+ "npmPackage": "supabase-mcp",
675
+ "transport": "stdio",
676
+ "command": "npx",
677
+ "args": ["-y", "supabase-mcp"],
678
+ "authType": "api-key",
679
+ "envKeys": [
680
+ { "key": "SUPABASE_URL", "label": "Project URL", "placeholder": "https://xxx.supabase.co", "required": true },
681
+ { "key": "SUPABASE_SERVICE_KEY", "label": "Service Role Key", "required": true }
682
+ ],
683
+ "setupUrl": "https://supabase.com/dashboard/project/_/settings/api",
684
+ "setupSteps": [
685
+ "Click the link below to open Supabase project settings",
686
+ "Copy the Project URL and service_role key from the API section"
687
+ ],
688
+ "requiresApproval": [],
689
+ "agentInstructions": "## Supabase Integration\n\nYou have Supabase connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/supabase/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `query` — params: {sql}\n- `list_tables` — params: {}\n- `list_functions` — params: {}\n- `storage_list` — params: {bucket}\n\n### Rules\n- Never run destructive SQL without confirmation\n- Use service_role key only for admin operations",
690
+ "featured": false,
691
+ "downloads": 0,
692
+ "rating": 0,
693
+ "ratingCount": 0,
694
+ "verified": "community"
695
+ },
696
+ {
697
+ "id": "mixpanel",
698
+ "name": "Mixpanel",
699
+ "description": "Product analytics, user tracking, and funnel analysis",
700
+ "category": "analytics",
701
+ "icon": "mixpanel",
702
+ "tags": ["analytics", "events", "funnels", "users"],
703
+ "roles": ["analyst", "cmo", "cfo"],
704
+ "npmPackage": "mixpanel-mcp",
705
+ "transport": "stdio",
706
+ "command": "npx",
707
+ "args": ["-y", "mixpanel-mcp"],
708
+ "authType": "api-key",
709
+ "envKeys": [
710
+ { "key": "MIXPANEL_API_SECRET", "label": "API Secret", "required": true }
711
+ ],
712
+ "setupUrl": "https://mixpanel.com/settings/project",
713
+ "setupSteps": [
714
+ "Click the link below to open Mixpanel project settings",
715
+ "Copy the API Secret from the Overview section"
716
+ ],
717
+ "requiresApproval": [],
718
+ "agentInstructions": "## Mixpanel Integration\n\nYou have Mixpanel connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/mixpanel/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `query_events` — params: {event, from_date, to_date}\n- `get_funnels` — params: {funnel_id}\n- `query_retention` — params: {event}\n\n### Rules\n- Use date ranges to limit query scope\n- Summarize key metrics rather than dumping raw data",
719
+ "featured": false,
720
+ "downloads": 0,
721
+ "rating": 0,
722
+ "ratingCount": 0,
723
+ "verified": "community"
724
+ },
725
+ {
726
+ "id": "datadog",
727
+ "name": "Datadog",
728
+ "description": "Infrastructure monitoring, APM, and log analysis",
729
+ "category": "developer",
730
+ "icon": "datadog",
731
+ "tags": ["monitoring", "apm", "logs", "metrics"],
732
+ "roles": ["devops", "backend"],
733
+ "npmPackage": "datadog-mcp",
734
+ "transport": "stdio",
735
+ "command": "npx",
736
+ "args": ["-y", "datadog-mcp"],
737
+ "authType": "api-key",
738
+ "envKeys": [
739
+ { "key": "DD_API_KEY", "label": "API Key", "required": true },
740
+ { "key": "DD_APP_KEY", "label": "Application Key", "required": true }
741
+ ],
742
+ "setupUrl": "https://app.datadoghq.com/organization-settings/api-keys",
743
+ "setupSteps": [
744
+ "Click the link below to open Datadog API keys",
745
+ "Create an API key and an Application key",
746
+ "Copy both keys"
747
+ ],
748
+ "requiresApproval": [],
749
+ "agentInstructions": "## Datadog Integration\n\nYou have Datadog connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/datadog/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `query_metrics` — params: {query, from, to}\n- `search_logs` — params: {query, from, to}\n- `list_monitors` — params: {}\n- `get_monitor` — params: {monitor_id}\n\n### Rules\n- Use time ranges to limit query scope\n- Check monitor status before making changes",
750
+ "featured": false,
751
+ "downloads": 0,
752
+ "rating": 0,
753
+ "ratingCount": 0,
754
+ "verified": "community"
755
+ },
756
+ {
757
+ "id": "airtable",
758
+ "name": "Airtable",
759
+ "description": "Flexible databases and content management",
760
+ "category": "productivity",
761
+ "icon": "airtable",
762
+ "tags": ["database", "spreadsheet", "content", "crm"],
763
+ "roles": ["ea", "cmo", "analyst"],
764
+ "npmPackage": "airtable-mcp",
765
+ "transport": "stdio",
766
+ "command": "npx",
767
+ "args": ["-y", "airtable-mcp"],
768
+ "authType": "api-key",
769
+ "envKeys": [
770
+ { "key": "AIRTABLE_API_KEY", "label": "Personal Access Token", "required": true }
771
+ ],
772
+ "setupUrl": "https://airtable.com/create/tokens",
773
+ "setupSteps": [
774
+ "Click the link below to create an Airtable personal access token",
775
+ "Add scopes: data.records:read, data.records:write, schema.bases:read",
776
+ "Copy the token"
777
+ ],
778
+ "requiresApproval": ["create_record", "delete_record"],
779
+ "agentInstructions": "## Airtable Integration\n\nYou have Airtable connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/airtable/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `list_bases` — params: {}\n- `list_records` — params: {baseId, tableId}\n- `create_record` — params: {baseId, tableId, fields}\n- `search_records` — params: {baseId, tableId, formula}\n\n### Rules\n- List bases first to find valid base/table IDs\n- Use filterByFormula for efficient queries",
780
+ "featured": false,
781
+ "downloads": 0,
782
+ "rating": 0,
783
+ "ratingCount": 0,
784
+ "verified": "community"
785
+ },
786
+ {
787
+ "id": "zendesk",
788
+ "name": "Zendesk",
789
+ "description": "Customer support tickets and knowledge base",
790
+ "category": "support",
791
+ "icon": "zendesk",
792
+ "tags": ["tickets", "support", "helpdesk", "knowledge-base"],
793
+ "roles": ["support", "ea"],
794
+ "npmPackage": "zendesk-mcp",
795
+ "transport": "stdio",
796
+ "command": "npx",
797
+ "args": ["-y", "zendesk-mcp"],
798
+ "authType": "api-key",
799
+ "envKeys": [
800
+ { "key": "ZENDESK_SUBDOMAIN", "label": "Subdomain", "placeholder": "your-company", "required": true },
801
+ { "key": "ZENDESK_EMAIL", "label": "Email", "required": true },
802
+ { "key": "ZENDESK_API_TOKEN", "label": "API Token", "required": true }
803
+ ],
804
+ "setupUrl": "https://support.zendesk.com/hc/en-us/articles/4408889192858",
805
+ "setupSteps": [
806
+ "In Zendesk Admin: Apps and Integrations > APIs > Zendesk API",
807
+ "Enable Token Access and create a new API token",
808
+ "Enter your subdomain (e.g., 'mycompany' from mycompany.zendesk.com)"
809
+ ],
810
+ "requiresApproval": ["create_ticket", "update_ticket"],
811
+ "agentInstructions": "## Zendesk Integration\n\nYou have Zendesk connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/zendesk/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `search_tickets` — params: {query}\n- `get_ticket` — params: {ticket_id}\n- `create_ticket` — params: {subject, description, priority}\n- `list_articles` — params: {}\n\n### Rules\n- Search before creating duplicate tickets\n- Confirm priority and assignee before creating",
812
+ "featured": false,
813
+ "downloads": 0,
814
+ "rating": 0,
815
+ "ratingCount": 0,
816
+ "verified": "community"
817
+ },
818
+ {
819
+ "id": "intercom",
820
+ "name": "Intercom",
821
+ "description": "Customer messaging, support, and engagement",
822
+ "category": "support",
823
+ "icon": "intercom",
824
+ "tags": ["chat", "support", "messaging", "customers"],
825
+ "roles": ["support", "cmo"],
826
+ "npmPackage": "intercom-mcp",
827
+ "transport": "stdio",
828
+ "command": "npx",
829
+ "args": ["-y", "intercom-mcp"],
830
+ "authType": "api-key",
831
+ "envKeys": [
832
+ { "key": "INTERCOM_ACCESS_TOKEN", "label": "Access Token", "required": true }
833
+ ],
834
+ "setupUrl": "https://app.intercom.com/a/apps/_/developer-hub",
835
+ "setupSteps": [
836
+ "Click the link below to open Intercom Developer Hub",
837
+ "Create or select an app, then go to Authentication",
838
+ "Copy the Access Token"
839
+ ],
840
+ "requiresApproval": ["send_message", "create_conversation"],
841
+ "agentInstructions": "## Intercom Integration\n\nYou have Intercom connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/intercom/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `search_contacts` — params: {query}\n- `list_conversations` — params: {}\n- `send_message` — params: {conversation_id, body}\n- `create_note` — params: {contact_id, body}\n\n### Rules\n- Confirm before sending messages to customers\n- Search contacts before creating new ones",
842
+ "featured": false,
843
+ "downloads": 0,
844
+ "rating": 0,
845
+ "ratingCount": 0,
846
+ "verified": "community"
847
+ },
848
+ {
849
+ "id": "twilio",
850
+ "name": "Twilio",
851
+ "description": "SMS, voice calls, and WhatsApp messaging",
852
+ "category": "communication",
853
+ "icon": "twilio",
854
+ "tags": ["sms", "voice", "phone", "whatsapp"],
855
+ "roles": ["ea", "support", "cmo"],
856
+ "npmPackage": "twilio-mcp",
857
+ "transport": "stdio",
858
+ "command": "npx",
859
+ "args": ["-y", "twilio-mcp"],
860
+ "authType": "api-key",
861
+ "envKeys": [
862
+ { "key": "TWILIO_ACCOUNT_SID", "label": "Account SID", "placeholder": "AC...", "required": true },
863
+ { "key": "TWILIO_AUTH_TOKEN", "label": "Auth Token", "required": true },
864
+ { "key": "TWILIO_PHONE_NUMBER", "label": "Phone Number", "placeholder": "+1234567890", "required": true }
865
+ ],
866
+ "setupUrl": "https://console.twilio.com",
867
+ "setupSteps": [
868
+ "Go to console.twilio.com",
869
+ "Copy your Account SID and Auth Token from the dashboard",
870
+ "Get a phone number from Phone Numbers > Manage > Buy a number"
871
+ ],
872
+ "requiresApproval": ["send_sms", "make_call"],
873
+ "agentInstructions": "## Twilio Integration\n\nYou have Twilio connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/twilio/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `send_sms` — params: {to, body}\n- `list_messages` — params: {limit}\n- `make_call` — params: {to, twiml}\n- `list_calls` — params: {limit}\n\n### Rules\n- Always confirm recipient number before sending SMS or calling\n- Use E.164 format for phone numbers (+1234567890)",
874
+ "featured": false,
875
+ "downloads": 0,
876
+ "rating": 0,
877
+ "ratingCount": 0,
878
+ "verified": "community"
879
+ },
880
+ {
881
+ "id": "telnyx",
882
+ "name": "Telnyx",
883
+ "description": "SMS, voice, and fax API",
884
+ "category": "communication",
885
+ "icon": "telnyx",
886
+ "tags": ["sms", "voice", "phone", "fax"],
887
+ "roles": ["ea", "support"],
888
+ "npmPackage": "telnyx-mcp",
889
+ "transport": "stdio",
890
+ "command": "npx",
891
+ "args": ["-y", "telnyx-mcp"],
892
+ "authType": "api-key",
893
+ "envKeys": [
894
+ { "key": "TELNYX_API_KEY", "label": "API Key", "placeholder": "KEY...", "required": true },
895
+ { "key": "TELNYX_PHONE_NUMBER", "label": "Phone Number", "placeholder": "+1234567890", "required": true }
896
+ ],
897
+ "setupUrl": "https://portal.telnyx.com/#/app/api-keys",
898
+ "setupSteps": [
899
+ "Click the link below to open Telnyx API keys",
900
+ "Create a new API key and copy it",
901
+ "Get a phone number from the Telnyx portal"
902
+ ],
903
+ "requiresApproval": ["send_sms", "make_call"],
904
+ "agentInstructions": "## Telnyx Integration\n\nYou have Telnyx connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/telnyx/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `send_sms` — params: {to, text}\n- `list_messages` — params: {}\n- `make_call` — params: {to, from}\n\n### Rules\n- Confirm recipient before sending messages\n- Use E.164 format for phone numbers",
905
+ "featured": false,
906
+ "downloads": 0,
907
+ "rating": 0,
908
+ "ratingCount": 0,
909
+ "verified": "community"
910
+ },
911
+ {
912
+ "id": "aws",
913
+ "name": "AWS",
914
+ "description": "S3, Lambda, EC2, and cloud services",
915
+ "category": "developer",
916
+ "icon": "aws",
917
+ "tags": ["cloud", "s3", "lambda", "infrastructure"],
918
+ "roles": ["devops", "backend"],
919
+ "npmPackage": "aws-mcp",
920
+ "transport": "stdio",
921
+ "command": "npx",
922
+ "args": ["-y", "aws-mcp"],
923
+ "authType": "api-key",
924
+ "envKeys": [
925
+ { "key": "AWS_ACCESS_KEY_ID", "label": "Access Key ID", "required": true },
926
+ { "key": "AWS_SECRET_ACCESS_KEY", "label": "Secret Access Key", "required": true },
927
+ { "key": "AWS_REGION", "label": "Region", "placeholder": "us-east-1", "required": true }
928
+ ],
929
+ "setupUrl": "https://console.aws.amazon.com/iam/home#/security_credentials",
930
+ "setupSteps": [
931
+ "Click the link below to open AWS IAM Security Credentials",
932
+ "Create an access key under 'Access keys'",
933
+ "Copy the Access Key ID and Secret Access Key"
934
+ ],
935
+ "requiresApproval": ["delete_object", "terminate_instance", "delete_function"],
936
+ "agentInstructions": "## AWS Integration\n\nYou have AWS connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/aws/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `s3_list_buckets` — params: {}\n- `s3_list_objects` — params: {bucket, prefix}\n- `lambda_list_functions` — params: {}\n- `lambda_invoke` — params: {functionName, payload}\n\n### Rules\n- Never delete resources without explicit confirmation\n- Use least-privilege access keys",
937
+ "featured": false,
938
+ "downloads": 0,
939
+ "rating": 0,
940
+ "ratingCount": 0,
941
+ "verified": "community"
942
+ },
943
+ {
944
+ "id": "plaid",
945
+ "name": "Plaid",
946
+ "description": "Bank connections and financial data",
947
+ "category": "finance",
948
+ "icon": "plaid",
949
+ "tags": ["banking", "transactions", "finance", "accounts"],
950
+ "roles": ["cfo", "analyst"],
951
+ "npmPackage": "plaid-mcp",
952
+ "transport": "stdio",
953
+ "command": "npx",
954
+ "args": ["-y", "plaid-mcp"],
955
+ "authType": "api-key",
956
+ "envKeys": [
957
+ { "key": "PLAID_CLIENT_ID", "label": "Client ID", "required": true },
958
+ { "key": "PLAID_SECRET", "label": "Secret", "required": true },
959
+ { "key": "PLAID_ENV", "label": "Environment", "placeholder": "sandbox", "required": false }
960
+ ],
961
+ "setupUrl": "https://dashboard.plaid.com/team/keys",
962
+ "setupSteps": [
963
+ "Click the link below to open Plaid team keys",
964
+ "Copy your Client ID and Secret",
965
+ "Use 'sandbox' environment for testing"
966
+ ],
967
+ "requiresApproval": [],
968
+ "agentInstructions": "## Plaid Integration\n\nYou have Plaid connected via GROOVE.\n\n### API\n`POST http://localhost:31415/api/integrations/plaid/exec`\nBody: `{\"tool\": \"<tool>\", \"params\": {...}}`\n\n### Common Tools\n- `get_accounts` — params: {access_token}\n- `get_transactions` — params: {access_token, start_date, end_date}\n- `get_balance` — params: {access_token}\n\n### Rules\n- Use sandbox environment for testing\n- Never expose access_tokens in output",
969
+ "featured": false,
970
+ "downloads": 0,
971
+ "rating": 0,
972
+ "ratingCount": 0,
973
+ "verified": "community"
368
974
  }
369
975
  ]