amalgm 0.0.0 → 0.0.1

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 (107) hide show
  1. package/README.md +37 -1
  2. package/bin/amalgm.js +8 -2
  3. package/lib/auth-store.js +223 -0
  4. package/lib/cli.js +1000 -0
  5. package/lib/paths.js +30 -0
  6. package/lib/supervisor.js +467 -0
  7. package/lib/tunnel-chat.js +328 -0
  8. package/lib/tunnel-events.js +499 -0
  9. package/package.json +29 -3
  10. package/runtime/README.md +4 -0
  11. package/runtime/lib/chatInput.js +306 -0
  12. package/runtime/lib/harnesses.js +988 -0
  13. package/runtime/lib/local/amalgmStore.js +128 -0
  14. package/runtime/lib/local/credentialResolver.js +425 -0
  15. package/runtime/lib/mcpApps/registry.js +619 -0
  16. package/runtime/package.json +5 -0
  17. package/runtime/scripts/amalgm-mcp/agents/rest.js +165 -0
  18. package/runtime/scripts/amalgm-mcp/agents/store.js +153 -0
  19. package/runtime/scripts/amalgm-mcp/agents/talk.js +1156 -0
  20. package/runtime/scripts/amalgm-mcp/agents/tools.js +210 -0
  21. package/runtime/scripts/amalgm-mcp/artifacts/advertise.js +132 -0
  22. package/runtime/scripts/amalgm-mcp/artifacts/rest.js +103 -0
  23. package/runtime/scripts/amalgm-mcp/artifacts/store.js +141 -0
  24. package/runtime/scripts/amalgm-mcp/artifacts/supervisor.js +402 -0
  25. package/runtime/scripts/amalgm-mcp/artifacts/tools.js +176 -0
  26. package/runtime/scripts/amalgm-mcp/browser/page.js +637 -0
  27. package/runtime/scripts/amalgm-mcp/browser/tools.js +688 -0
  28. package/runtime/scripts/amalgm-mcp/config.js +138 -0
  29. package/runtime/scripts/amalgm-mcp/credentials/rest.js +45 -0
  30. package/runtime/scripts/amalgm-mcp/deps.js +40 -0
  31. package/runtime/scripts/amalgm-mcp/email/inbound.js +215 -0
  32. package/runtime/scripts/amalgm-mcp/events/executor.js +179 -0
  33. package/runtime/scripts/amalgm-mcp/events/ingress.js +113 -0
  34. package/runtime/scripts/amalgm-mcp/events/matcher.js +125 -0
  35. package/runtime/scripts/amalgm-mcp/events/rest.js +200 -0
  36. package/runtime/scripts/amalgm-mcp/events/ring-buffer.js +19 -0
  37. package/runtime/scripts/amalgm-mcp/events/store.js +98 -0
  38. package/runtime/scripts/amalgm-mcp/events/tools.js +306 -0
  39. package/runtime/scripts/amalgm-mcp/events/webhook-url.js +28 -0
  40. package/runtime/scripts/amalgm-mcp/fs/rest.js +293 -0
  41. package/runtime/scripts/amalgm-mcp/index.js +100 -0
  42. package/runtime/scripts/amalgm-mcp/lib/chat-runner.js +167 -0
  43. package/runtime/scripts/amalgm-mcp/lib/email-md.js +288 -0
  44. package/runtime/scripts/amalgm-mcp/lib/mcp-resolver.js +63 -0
  45. package/runtime/scripts/amalgm-mcp/lib/prefs.js +393 -0
  46. package/runtime/scripts/amalgm-mcp/lib/storage.js +92 -0
  47. package/runtime/scripts/amalgm-mcp/lib/supabase.js +118 -0
  48. package/runtime/scripts/amalgm-mcp/lib/tool-result.js +177 -0
  49. package/runtime/scripts/amalgm-mcp/local/rest.js +80 -0
  50. package/runtime/scripts/amalgm-mcp/mcp-connections/rest.js +151 -0
  51. package/runtime/scripts/amalgm-mcp/notify/index.js +107 -0
  52. package/runtime/scripts/amalgm-mcp/server/http.js +335 -0
  53. package/runtime/scripts/amalgm-mcp/server/mcp.js +116 -0
  54. package/runtime/scripts/amalgm-mcp/slack/inbound.js +200 -0
  55. package/runtime/scripts/amalgm-mcp/tasks/executor.js +225 -0
  56. package/runtime/scripts/amalgm-mcp/tasks/rest.js +110 -0
  57. package/runtime/scripts/amalgm-mcp/tasks/schedule-normalization.js +85 -0
  58. package/runtime/scripts/amalgm-mcp/tasks/scheduler.js +105 -0
  59. package/runtime/scripts/amalgm-mcp/tasks/store.js +139 -0
  60. package/runtime/scripts/amalgm-mcp/tasks/tools.js +391 -0
  61. package/runtime/scripts/amalgm-mcp/user-api-keys/rest.js +105 -0
  62. package/runtime/scripts/amalgm-mcp/workspace/rest.js +389 -0
  63. package/runtime/scripts/chat-core/adapters/claude.js +163 -0
  64. package/runtime/scripts/chat-core/adapters/codex.js +313 -0
  65. package/runtime/scripts/chat-core/adapters/opencode.js +412 -0
  66. package/runtime/scripts/chat-core/auth.js +177 -0
  67. package/runtime/scripts/chat-core/contract.js +326 -0
  68. package/runtime/scripts/chat-core/credentials/store.js +212 -0
  69. package/runtime/scripts/chat-core/egress.js +87 -0
  70. package/runtime/scripts/chat-core/engine.js +195 -0
  71. package/runtime/scripts/chat-core/event-schema.js +231 -0
  72. package/runtime/scripts/chat-core/events.js +190 -0
  73. package/runtime/scripts/chat-core/index.js +11 -0
  74. package/runtime/scripts/chat-core/input.js +50 -0
  75. package/runtime/scripts/chat-core/normalizers/claude.js +450 -0
  76. package/runtime/scripts/chat-core/normalizers/codex.js +380 -0
  77. package/runtime/scripts/chat-core/normalizers/normalizer_spec.md +259 -0
  78. package/runtime/scripts/chat-core/normalizers/opencode.js +552 -0
  79. package/runtime/scripts/chat-core/normalizers/tool_contract.md +123 -0
  80. package/runtime/scripts/chat-core/normalizers/usage_contract.md +304 -0
  81. package/runtime/scripts/chat-core/parts.js +253 -0
  82. package/runtime/scripts/chat-core/recorder.js +65 -0
  83. package/runtime/scripts/chat-core/runtime.js +86 -0
  84. package/runtime/scripts/chat-core/server.js +163 -0
  85. package/runtime/scripts/chat-core/sse.js +196 -0
  86. package/runtime/scripts/chat-core/stores.js +100 -0
  87. package/runtime/scripts/chat-core/tool-display.js +149 -0
  88. package/runtime/scripts/chat-core/tool-shape.js +143 -0
  89. package/runtime/scripts/chat-core/tooling/mcp-bundle.js +161 -0
  90. package/runtime/scripts/chat-core/tooling/mcp-relay.js +97 -0
  91. package/runtime/scripts/chat-core/tooling/native-binaries.js +608 -0
  92. package/runtime/scripts/chat-core/tooling/system-prompt.js +20 -0
  93. package/runtime/scripts/chat-core/usage.js +343 -0
  94. package/runtime/scripts/chat-server/config.js +110 -0
  95. package/runtime/scripts/chat-server/db.js +529 -0
  96. package/runtime/scripts/chat-server/index.js +33 -0
  97. package/runtime/scripts/chat-server/model-catalog.js +327 -0
  98. package/runtime/scripts/chat-server.js +75 -0
  99. package/runtime/scripts/credential-adapter.js +129 -0
  100. package/runtime/scripts/fs-watcher.js +888 -0
  101. package/runtime/scripts/local-gateway.js +852 -0
  102. package/runtime/scripts/platform-context.txt +246 -0
  103. package/runtime/scripts/port-monitor.js +175 -0
  104. package/runtime/scripts/proxy-token-store.js +162 -0
  105. package/runtime/scripts/runtime-auth.js +163 -0
  106. package/runtime/scripts/test-claude-code-models.js +87 -0
  107. package/runtime/tsconfig.json +15 -0
@@ -0,0 +1,619 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // lib/mcpApps/registry.ts
21
+ var registry_exports = {};
22
+ __export(registry_exports, {
23
+ MCP_APP_CATEGORY_META: () => MCP_APP_CATEGORY_META,
24
+ MCP_APP_REGISTRY: () => MCP_APP_REGISTRY,
25
+ buildSessionConfig: () => buildSessionConfig,
26
+ getAllMcpApps: () => getAllMcpApps,
27
+ getMcpApp: () => getMcpApp,
28
+ getMcpAppCategories: () => getMcpAppCategories,
29
+ getMcpAppIds: () => getMcpAppIds,
30
+ getMcpAppsByCategory: () => getMcpAppsByCategory
31
+ });
32
+ module.exports = __toCommonJS(registry_exports);
33
+ var MCP_APP_REGISTRY = {
34
+ // ─── Productivity & Collaboration ──────────────────────────────────────
35
+ notion: {
36
+ id: "notion",
37
+ name: "Notion",
38
+ description: "Search, read, create, and update Notion pages, databases, and blocks",
39
+ category: "productivity",
40
+ authType: "oauth",
41
+ url: "https://mcp.notion.com/mcp",
42
+ transport: "streamable-http",
43
+ status: "available",
44
+ website: "https://notion.so",
45
+ docsUrl: "https://developers.notion.com/docs/mcp",
46
+ iconUrl: "https://img.icons8.com/color/48/notion.png",
47
+ oauthConfig: {
48
+ authorizationUrl: "https://mcp.notion.com/authorize",
49
+ tokenUrl: "https://mcp.notion.com/token",
50
+ registrationUrl: "https://mcp.notion.com/register"
51
+ }
52
+ },
53
+ slack: {
54
+ id: "slack",
55
+ name: "Slack",
56
+ description: "Channel management, messaging, and search across your Slack workspace",
57
+ category: "productivity",
58
+ authType: "oauth",
59
+ url: "https://mcp.slack.com/mcp",
60
+ transport: "streamable-http",
61
+ status: "available",
62
+ website: "https://slack.com",
63
+ docsUrl: "https://docs.slack.dev/ai/slack-mcp-server",
64
+ iconUrl: "https://img.icons8.com/color/48/slack-new.png",
65
+ oauthConfig: {
66
+ authorizationUrl: "https://slack.com/oauth/v2_user/authorize",
67
+ tokenUrl: "https://slack.com/api/oauth.v2.user.access",
68
+ clientIdEnv: "SLACK_MCP_CLIENT_ID",
69
+ clientSecretEnv: "SLACK_MCP_CLIENT_SECRET",
70
+ scopes: ["search:read.public", "chat:write", "channels:history", "users:read"]
71
+ }
72
+ },
73
+ atlassian: {
74
+ id: "atlassian",
75
+ name: "Atlassian",
76
+ description: "Create and search Jira issues, read and create Confluence pages",
77
+ category: "productivity",
78
+ authType: "oauth",
79
+ url: "https://mcp.atlassian.com/v1/sse",
80
+ transport: "sse",
81
+ status: "available",
82
+ website: "https://atlassian.com",
83
+ docsUrl: "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/",
84
+ iconUrl: "https://img.icons8.com/color/48/jira.png",
85
+ oauthConfig: {
86
+ authorizationUrl: "https://mcp.atlassian.com/v1/authorize",
87
+ tokenUrl: "https://cf.mcp.atlassian.com/v1/token",
88
+ registrationUrl: "https://cf.mcp.atlassian.com/v1/register"
89
+ }
90
+ },
91
+ linear: {
92
+ id: "linear",
93
+ name: "Linear",
94
+ description: "Issue tracking, project management, cycles, and labels in Linear",
95
+ category: "productivity",
96
+ authType: "oauth",
97
+ url: "https://mcp.linear.app/mcp",
98
+ transport: "streamable-http",
99
+ status: "available",
100
+ website: "https://linear.app",
101
+ docsUrl: "https://linear.app/docs/mcp",
102
+ iconUrl: "/assets/images/linear.svg",
103
+ oauthConfig: {
104
+ authorizationUrl: "https://mcp.linear.app/authorize",
105
+ tokenUrl: "https://mcp.linear.app/token",
106
+ registrationUrl: "https://mcp.linear.app/register",
107
+ scopes: ["read", "write", "issues:create"]
108
+ }
109
+ },
110
+ hubspot: {
111
+ id: "hubspot",
112
+ name: "HubSpot",
113
+ description: "Read-only CRM access to contacts, companies, and deals",
114
+ category: "productivity",
115
+ authType: "oauth",
116
+ url: "https://mcp.hubspot.com",
117
+ transport: "streamable-http",
118
+ status: "beta",
119
+ website: "https://hubspot.com",
120
+ docsUrl: "https://developers.hubspot.com/mcp",
121
+ iconUrl: "/assets/images/hubspot.png",
122
+ oauthConfig: {
123
+ authorizationUrl: "https://mcp.hubspot.com/oauth/authorize/user",
124
+ tokenUrl: "https://mcp.hubspot.com/oauth/v3/token"
125
+ // No dynamic registration — HubSpot doesn't expose a registration endpoint
126
+ }
127
+ },
128
+ intercom: {
129
+ id: "intercom",
130
+ name: "Intercom",
131
+ description: "Customer messaging, conversations, and help articles",
132
+ category: "productivity",
133
+ authType: "oauth",
134
+ url: "https://mcp.intercom.com/mcp",
135
+ transport: "streamable-http",
136
+ status: "available",
137
+ website: "https://intercom.com",
138
+ docsUrl: "https://developers.intercom.com",
139
+ iconUrl: "https://img.icons8.com/color/48/intercom.png",
140
+ oauthConfig: {
141
+ authorizationUrl: "https://mcp.intercom.com/authorize",
142
+ tokenUrl: "https://mcp.intercom.com/token",
143
+ registrationUrl: "https://mcp.intercom.com/register"
144
+ }
145
+ },
146
+ egnyte: {
147
+ id: "egnyte",
148
+ name: "Egnyte",
149
+ description: "Enterprise file access, document search, and file management",
150
+ category: "productivity",
151
+ authType: "oauth",
152
+ url: "https://mcp-server.egnyte.com/mcp",
153
+ transport: "streamable-http",
154
+ status: "available",
155
+ website: "https://egnyte.com",
156
+ docsUrl: "https://developers.egnyte.com/docs/Remote_MCP_Server",
157
+ oauthConfig: {
158
+ authorizationUrl: "https://mcp-oauth.egnyte.com/domain-picker",
159
+ tokenUrl: "https://mcp-oauth.egnyte.com/oauth2/token",
160
+ registrationUrl: "https://mcp-oauth.egnyte.com/clients"
161
+ }
162
+ },
163
+ // ─── Developer Tools ───────────────────────────────────────────────────
164
+ github: {
165
+ id: "github",
166
+ name: "GitHub",
167
+ description: "Repos, issues, PRs, code search, file operations, and Actions",
168
+ category: "developer",
169
+ authType: "oauth",
170
+ url: "https://api.githubcopilot.com/mcp/",
171
+ transport: "streamable-http",
172
+ status: "available",
173
+ website: "https://github.com",
174
+ docsUrl: "https://github.com/github/github-mcp-server/blob/main/docs/remote-server.md",
175
+ iconUrl: "/assets/images/github.svg",
176
+ oauthConfig: {
177
+ authorizationUrl: "https://github.com/login/oauth/authorize",
178
+ tokenUrl: "https://github.com/login/oauth/access_token",
179
+ clientIdEnv: "GITHUB_MCP_CLIENT_ID",
180
+ clientSecretEnv: "GITHUB_MCP_CLIENT_SECRET",
181
+ scopes: ["repo", "read:org", "read:user"]
182
+ }
183
+ },
184
+ gitlab: {
185
+ id: "gitlab",
186
+ name: "GitLab",
187
+ description: "Issues, merge requests, pipelines, wiki, and snippets",
188
+ category: "developer",
189
+ authType: "oauth",
190
+ url: "https://gitlab.com/api/v4/mcp",
191
+ transport: "streamable-http",
192
+ requiresInstanceUrl: true,
193
+ instanceUrlTemplate: "https://{instance}/api/v4/mcp",
194
+ configFields: [
195
+ {
196
+ key: "instance",
197
+ label: "GitLab Instance",
198
+ type: "url",
199
+ placeholder: "gitlab.com"
200
+ }
201
+ ],
202
+ status: "available",
203
+ website: "https://gitlab.com",
204
+ docsUrl: "https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/",
205
+ iconUrl: "https://img.icons8.com/color/48/gitlab.png",
206
+ oauthConfig: {
207
+ authorizationUrl: "https://gitlab.com/oauth/authorize",
208
+ tokenUrl: "https://gitlab.com/oauth/token",
209
+ registrationUrl: "https://gitlab.com/oauth/register",
210
+ scopes: ["mcp"]
211
+ }
212
+ },
213
+ sentry: {
214
+ id: "sentry",
215
+ name: "Sentry",
216
+ description: "Issues, errors, projects, Seer AI analysis, and alerts",
217
+ category: "developer",
218
+ authType: "oauth",
219
+ url: "https://mcp.sentry.dev/mcp",
220
+ transport: "streamable-http",
221
+ status: "available",
222
+ website: "https://sentry.io",
223
+ docsUrl: "https://docs.sentry.io/product/sentry-mcp/",
224
+ iconUrl: "/assets/images/sentry.svg",
225
+ oauthConfig: {
226
+ authorizationUrl: "https://mcp.sentry.dev/oauth/authorize",
227
+ tokenUrl: "https://mcp.sentry.dev/oauth/token",
228
+ registrationUrl: "https://mcp.sentry.dev/oauth/register",
229
+ scopes: ["org:read", "project:write"]
230
+ }
231
+ },
232
+ vercel: {
233
+ id: "vercel",
234
+ name: "Vercel",
235
+ description: "Deployments, projects, domains, environment variables, and logs",
236
+ category: "developer",
237
+ authType: "oauth",
238
+ url: "https://mcp.vercel.com",
239
+ transport: "streamable-http",
240
+ status: "available",
241
+ website: "https://vercel.com",
242
+ docsUrl: "https://vercel.com/docs/agent-resources/vercel-mcp",
243
+ iconUrl: "/assets/images/vercel.png",
244
+ oauthConfig: {
245
+ authorizationUrl: "https://vercel.com/oauth/authorize",
246
+ tokenUrl: "https://vercel.com/api/login/oauth/token",
247
+ registrationUrl: "https://vercel.com/api/login/oauth/register",
248
+ scopes: ["openid", "offline_access"]
249
+ }
250
+ },
251
+ // ─── Payments & Commerce ───────────────────────────────────────────────
252
+ stripe: {
253
+ id: "stripe",
254
+ name: "Stripe",
255
+ description: "Payments, subscriptions, invoices, customers, and knowledge base",
256
+ category: "payments",
257
+ authType: "oauth",
258
+ url: "https://mcp.stripe.com",
259
+ transport: "streamable-http",
260
+ status: "available",
261
+ website: "https://stripe.com",
262
+ docsUrl: "https://docs.stripe.com/mcp",
263
+ iconUrl: "https://img.icons8.com/color/48/stripe.png",
264
+ oauthConfig: {
265
+ authorizationUrl: "https://access.stripe.com/mcp/oauth2/authorize",
266
+ tokenUrl: "https://access.stripe.com/mcp/oauth2/token",
267
+ registrationUrl: "https://access.stripe.com/mcp/oauth2/register"
268
+ }
269
+ },
270
+ paypal: {
271
+ id: "paypal",
272
+ name: "PayPal",
273
+ description: "Payments, invoices, transactions, disputes, and subscriptions",
274
+ category: "payments",
275
+ authType: "oauth",
276
+ url: "https://mcp.paypal.com/sse",
277
+ transport: "sse",
278
+ status: "available",
279
+ website: "https://paypal.com",
280
+ docsUrl: "https://docs.paypal.ai/developer/tools/ai/mcp-quickstart",
281
+ iconUrl: "https://img.icons8.com/color/48/paypal.png",
282
+ oauthConfig: {
283
+ authorizationUrl: "https://mcp.paypal.com/authorize",
284
+ tokenUrl: "https://mcp.paypal.com/token",
285
+ registrationUrl: "https://mcp.paypal.com/register"
286
+ }
287
+ },
288
+ square: {
289
+ id: "square",
290
+ name: "Square",
291
+ description: "25+ Square services: payments, inventory, catalog, orders, and more",
292
+ category: "payments",
293
+ authType: "oauth",
294
+ url: "https://mcp.squareup.com/sse",
295
+ transport: "sse",
296
+ status: "available",
297
+ website: "https://squareup.com",
298
+ docsUrl: "https://developer.squareup.com/docs/mcp",
299
+ iconUrl: "https://img.icons8.com/color/48/square.png",
300
+ oauthConfig: {
301
+ authorizationUrl: "https://mcp.squareup.com/authorize",
302
+ tokenUrl: "https://mcp.squareup.com/token",
303
+ registrationUrl: "https://mcp.squareup.com/register"
304
+ }
305
+ },
306
+ shopify: {
307
+ id: "shopify",
308
+ name: "Shopify",
309
+ description: "Product search, cart operations, orders, and inventory management",
310
+ category: "payments",
311
+ authType: "api_key",
312
+ url: "https://your-store.myshopify.com/api/mcp",
313
+ transport: "streamable-http",
314
+ requiresInstanceUrl: true,
315
+ instanceUrlTemplate: "https://{instance}/api/mcp",
316
+ configFields: [
317
+ {
318
+ key: "instance",
319
+ label: "Store Domain",
320
+ type: "text",
321
+ placeholder: "your-store.myshopify.com",
322
+ required: true
323
+ }
324
+ ],
325
+ status: "available",
326
+ website: "https://shopify.com",
327
+ docsUrl: "https://shopify.dev/docs/apps/build/storefront-mcp",
328
+ iconUrl: "https://img.icons8.com/color/48/shopify.png"
329
+ },
330
+ // ─── Design ────────────────────────────────────────────────────────────
331
+ figma: {
332
+ id: "figma",
333
+ name: "Figma",
334
+ description: "Read design files, extract layout and component data, get design tokens",
335
+ category: "design",
336
+ authType: "oauth",
337
+ url: "https://mcp.figma.com/mcp",
338
+ transport: "streamable-http",
339
+ status: "available",
340
+ website: "https://figma.com",
341
+ docsUrl: "https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/",
342
+ iconUrl: "https://img.icons8.com/color/48/figma.png",
343
+ oauthConfig: {
344
+ authorizationUrl: "https://www.figma.com/oauth/mcp",
345
+ tokenUrl: "https://api.figma.com/v1/oauth/token",
346
+ registrationUrl: "https://api.figma.com/v1/oauth/mcp/register",
347
+ scopes: ["mcp:connect"]
348
+ }
349
+ },
350
+ excalidraw: {
351
+ id: "excalidraw",
352
+ name: "Excalidraw",
353
+ description: "Create, edit, and display interactive hand-drawn diagrams and sketches",
354
+ category: "design",
355
+ authType: "none",
356
+ url: "https://mcp.excalidraw.com",
357
+ transport: "streamable-http",
358
+ status: "available",
359
+ website: "https://excalidraw.com",
360
+ docsUrl: "https://github.com/excalidraw/excalidraw-mcp",
361
+ iconUrl: "https://excalidraw.com/favicon.ico"
362
+ },
363
+ webflow: {
364
+ id: "webflow",
365
+ name: "Webflow",
366
+ description: "CMS collections, site data, design elements, and pages",
367
+ category: "design",
368
+ authType: "oauth",
369
+ url: "https://mcp.webflow.com/sse",
370
+ transport: "sse",
371
+ status: "available",
372
+ website: "https://webflow.com",
373
+ docsUrl: "https://developers.webflow.com/mcp/reference/overview",
374
+ iconUrl: "https://dhygzobemt712.cloudfront.net/Mark/Mark_Logo_Blue.svg",
375
+ oauthConfig: {
376
+ authorizationUrl: "https://mcp.webflow.com/oauth/authorize",
377
+ tokenUrl: "https://mcp.webflow.com/oauth/token",
378
+ registrationUrl: "https://mcp.webflow.com/oauth/register"
379
+ }
380
+ },
381
+ // ─── Infrastructure & Databases ────────────────────────────────────────
382
+ cloudflare: {
383
+ id: "cloudflare",
384
+ name: "Cloudflare",
385
+ description: "Workers, KV, R2, D1, DNS, Zero Trust, and WAF rules",
386
+ category: "infrastructure",
387
+ authType: "oauth",
388
+ url: "https://mcp.cloudflare.com/mcp",
389
+ transport: "streamable-http",
390
+ status: "available",
391
+ website: "https://cloudflare.com",
392
+ docsUrl: "https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/",
393
+ iconUrl: "/assets/images/cloudflare.svg",
394
+ oauthConfig: {
395
+ authorizationUrl: "https://mcp.cloudflare.com/authorize",
396
+ tokenUrl: "https://mcp.cloudflare.com/token",
397
+ registrationUrl: "https://mcp.cloudflare.com/register"
398
+ }
399
+ },
400
+ supabase: {
401
+ id: "supabase",
402
+ name: "Supabase",
403
+ description: "Database management, SQL queries, Edge Functions, auth, and docs",
404
+ category: "infrastructure",
405
+ authType: "oauth",
406
+ url: "https://mcp.supabase.com/mcp",
407
+ transport: "streamable-http",
408
+ status: "available",
409
+ website: "https://supabase.com",
410
+ docsUrl: "https://supabase.com/blog/remote-mcp-server",
411
+ iconUrl: "https://img.icons8.com/color/48/supabase.png",
412
+ oauthConfig: {
413
+ authorizationUrl: "https://api.supabase.com/v1/oauth/authorize",
414
+ tokenUrl: "https://api.supabase.com/v1/oauth/token",
415
+ registrationUrl: "https://api.supabase.com/platform/oauth/apps/register",
416
+ scopes: ["projects:read", "projects:write", "database:read", "database:write"]
417
+ }
418
+ },
419
+ neon: {
420
+ id: "neon",
421
+ name: "Neon",
422
+ description: "Postgres project, branch, and database management with SQL queries",
423
+ category: "infrastructure",
424
+ authType: "oauth",
425
+ url: "https://mcp.neon.tech/sse",
426
+ transport: "sse",
427
+ status: "available",
428
+ website: "https://neon.tech",
429
+ docsUrl: "https://neon.com/docs/ai/neon-mcp-server",
430
+ iconUrl: "/assets/images/neon.svg",
431
+ oauthConfig: {
432
+ authorizationUrl: "https://mcp.neon.tech/api/authorize",
433
+ tokenUrl: "https://mcp.neon.tech/api/token",
434
+ registrationUrl: "https://mcp.neon.tech/api/register",
435
+ scopes: ["read", "write"]
436
+ }
437
+ },
438
+ planetscale: {
439
+ id: "planetscale",
440
+ name: "PlanetScale",
441
+ description: "Database schemas, branches, Insights, and organization management",
442
+ category: "infrastructure",
443
+ authType: "oauth",
444
+ url: "https://mcp.pscale.dev/mcp/planetscale",
445
+ transport: "streamable-http",
446
+ status: "available",
447
+ website: "https://planetscale.com",
448
+ docsUrl: "https://planetscale.com/docs/connect/mcp",
449
+ iconUrl: "/assets/images/planetscale.png",
450
+ oauthConfig: {
451
+ authorizationUrl: "https://app.planetscale.com/oauth/authorize",
452
+ tokenUrl: "https://auth.planetscale.com/oauth/token",
453
+ registrationUrl: "https://auth.planetscale.com/oauth/registration",
454
+ scopes: ["openid"]
455
+ }
456
+ },
457
+ tinybird: {
458
+ id: "tinybird",
459
+ name: "Tinybird",
460
+ description: "Real-time analytics, query endpoints, and data pipes",
461
+ category: "infrastructure",
462
+ authType: "api_key",
463
+ url: "https://mcp.tinybird.co",
464
+ transport: "streamable-http",
465
+ status: "available",
466
+ website: "https://tinybird.co",
467
+ docsUrl: "https://www.tinybird.co/docs/forward/analytics-agents/mcp"
468
+ },
469
+ // ─── Observability & Monitoring ────────────────────────────────────────
470
+ datadog: {
471
+ id: "datadog",
472
+ name: "Datadog",
473
+ description: "Logs, metrics, traces, dashboards, monitors, incidents, and hosts",
474
+ category: "observability",
475
+ authType: "api_key",
476
+ url: "https://mcp.datadoghq.com",
477
+ transport: "streamable-http",
478
+ configFields: [
479
+ {
480
+ key: "region",
481
+ label: "Datadog Region",
482
+ type: "select",
483
+ options: [
484
+ { value: "us1", label: "US1 (datadoghq.com)" },
485
+ { value: "us3", label: "US3 (us3.datadoghq.com)" },
486
+ { value: "us5", label: "US5 (us5.datadoghq.com)" },
487
+ { value: "eu1", label: "EU (datadoghq.eu)" },
488
+ { value: "ap1", label: "AP1 (ap1.datadoghq.com)" }
489
+ ]
490
+ }
491
+ ],
492
+ status: "available",
493
+ website: "https://datadoghq.com",
494
+ docsUrl: "https://www.datadoghq.com/blog/datadog-remote-mcp-server/"
495
+ },
496
+ // ─── Search & AI ───────────────────────────────────────────────────────
497
+ exa: {
498
+ id: "exa",
499
+ name: "Exa",
500
+ description: "Web search, crawling, code context, company research, and deep researcher",
501
+ category: "search",
502
+ authType: "api_key",
503
+ url: "https://mcp.exa.ai/mcp",
504
+ transport: "streamable-http",
505
+ status: "available",
506
+ website: "https://exa.ai",
507
+ docsUrl: "https://docs.exa.ai/reference/exa-mcp",
508
+ iconUrl: "/assets/images/exa.png"
509
+ },
510
+ jina: {
511
+ id: "jina",
512
+ name: "Jina AI",
513
+ description: "URL-to-markdown, web search, image search, embeddings, and reranking",
514
+ category: "search",
515
+ authType: "api_key",
516
+ url: "https://mcp.jina.ai/v1",
517
+ transport: "streamable-http",
518
+ status: "available",
519
+ website: "https://jina.ai",
520
+ docsUrl: "https://github.com/jina-ai/MCP"
521
+ },
522
+ // ─── Finance ───────────────────────────────────────────────────────────
523
+ plaid: {
524
+ id: "plaid",
525
+ name: "Plaid",
526
+ description: "Integration health, user issue investigation, and production analytics",
527
+ category: "finance",
528
+ authType: "oauth",
529
+ url: "https://api.dashboard.plaid.com/mcp/sse",
530
+ transport: "sse",
531
+ status: "available",
532
+ website: "https://plaid.com",
533
+ docsUrl: "https://plaid.com/docs/resources/mcp/",
534
+ oauthConfig: {
535
+ authorizationUrl: "https://dashboard.plaid.com/oauth/authorize",
536
+ tokenUrl: "https://api.dashboard.plaid.com/oauth/token",
537
+ registrationUrl: "https://api.dashboard.plaid.com/oauth/register",
538
+ scopes: ["mcp:dashboard"]
539
+ }
540
+ },
541
+ // ─── Documentation ────────────────────────────────────────────────────
542
+ "microsoft-learn": {
543
+ id: "microsoft-learn",
544
+ name: "Microsoft Learn",
545
+ description: "Search and fetch Microsoft official documentation and code samples",
546
+ category: "docs",
547
+ authType: "none",
548
+ url: "https://learn.microsoft.com/api/mcp",
549
+ transport: "streamable-http",
550
+ status: "available",
551
+ website: "https://learn.microsoft.com",
552
+ docsUrl: "https://learn.microsoft.com/en-us/training/support/mcp",
553
+ iconUrl: "https://img.icons8.com/color/48/microsoft.png"
554
+ }
555
+ };
556
+ function getMcpApp(id) {
557
+ return MCP_APP_REGISTRY[id];
558
+ }
559
+ function getAllMcpApps() {
560
+ return Object.values(MCP_APP_REGISTRY);
561
+ }
562
+ function getMcpAppsByCategory(category) {
563
+ return getAllMcpApps().filter((app) => app.category === category);
564
+ }
565
+ function getMcpAppCategories() {
566
+ const categories = new Set(getAllMcpApps().map((app) => app.category));
567
+ return Array.from(categories);
568
+ }
569
+ function getMcpAppIds() {
570
+ return Object.keys(MCP_APP_REGISTRY);
571
+ }
572
+ function buildSessionConfig(app, credentials, userConfig) {
573
+ let url = app.url;
574
+ if (app.requiresInstanceUrl && userConfig?.instanceUrl) {
575
+ if (app.instanceUrlTemplate) {
576
+ url = app.instanceUrlTemplate.replace("{instance}", userConfig.instanceUrl);
577
+ } else {
578
+ url = userConfig.instanceUrl;
579
+ }
580
+ }
581
+ if (app.id === "tinybird" && credentials?.apiKey) {
582
+ const separator = url.includes("?") ? "&" : "?";
583
+ url = `${url}${separator}token=${credentials.apiKey}`;
584
+ }
585
+ const headers = [];
586
+ if (app.authType === "oauth" && credentials?.accessToken) {
587
+ headers.push({ name: "Authorization", value: `Bearer ${credentials.accessToken}` });
588
+ } else if (app.authType === "api_key" && credentials?.apiKey && app.id !== "tinybird") {
589
+ headers.push({ name: "Authorization", value: `Bearer ${credentials.apiKey}` });
590
+ }
591
+ return {
592
+ name: app.id,
593
+ type: app.transport === "sse" ? "sse" : "http",
594
+ url,
595
+ headers
596
+ };
597
+ }
598
+ var MCP_APP_CATEGORY_META = {
599
+ productivity: { label: "Productivity", order: 0 },
600
+ developer: { label: "Developer Tools", order: 1 },
601
+ design: { label: "Design", order: 2 },
602
+ payments: { label: "Payments & Commerce", order: 3 },
603
+ infrastructure: { label: "Infrastructure & Databases", order: 4 },
604
+ observability: { label: "Observability", order: 5 },
605
+ search: { label: "Search & AI", order: 6 },
606
+ finance: { label: "Finance", order: 7 },
607
+ docs: { label: "Documentation", order: 8 }
608
+ };
609
+ // Annotate the CommonJS export names for ESM import in node:
610
+ 0 && (module.exports = {
611
+ MCP_APP_CATEGORY_META,
612
+ MCP_APP_REGISTRY,
613
+ buildSessionConfig,
614
+ getAllMcpApps,
615
+ getMcpApp,
616
+ getMcpAppCategories,
617
+ getMcpAppIds,
618
+ getMcpAppsByCategory
619
+ });
@@ -0,0 +1,5 @@
1
+ {
2
+ "private": true,
3
+ "name": "amalgm-runtime",
4
+ "type": "commonjs"
5
+ }