@opensaas/stack-core 0.1.3 → 0.1.5
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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +45 -0
- package/CLAUDE.md +4 -2
- package/dist/config/types.d.ts +12 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/mcp/handler.d.ts +40 -0
- package/dist/mcp/handler.d.ts.map +1 -0
- package/dist/mcp/handler.js +460 -0
- package/dist/mcp/handler.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +17 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/package.json +14 -1
- package/src/config/types.ts +58 -45
- package/src/mcp/handler.ts +600 -0
- package/src/mcp/index.ts +7 -0
- package/src/mcp/types.ts +18 -0
- package/tests/mcp-handler.test.ts +686 -0
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# @opensaas/stack-core
|
|
2
2
|
|
|
3
|
+
## 0.1.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 17eaafb: Update package urls
|
|
8
|
+
|
|
9
|
+
## 0.1.4
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- d013859: **BREAKING CHANGE**: Migrate MCP functionality into core and auth packages
|
|
14
|
+
|
|
15
|
+
The `@opensaas/stack-mcp` package has been deprecated and its functionality has been split into:
|
|
16
|
+
- `@opensaas/stack-core/mcp` - Auth-agnostic MCP runtime and handlers
|
|
17
|
+
- `@opensaas/stack-auth/mcp` - Better Auth OAuth adapter
|
|
18
|
+
|
|
19
|
+
**Migration required:**
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Before
|
|
23
|
+
import { createMcpHandlers } from '@opensaas/stack-mcp'
|
|
24
|
+
const { GET, POST, DELETE } = createMcpHandlers({ config, auth, getContext })
|
|
25
|
+
|
|
26
|
+
// After
|
|
27
|
+
import { createMcpHandlers } from '@opensaas/stack-core/mcp'
|
|
28
|
+
import { createBetterAuthMcpAdapter } from '@opensaas/stack-auth/mcp'
|
|
29
|
+
const { GET, POST, DELETE } = createMcpHandlers({
|
|
30
|
+
config,
|
|
31
|
+
getSession: createBetterAuthMcpAdapter(auth),
|
|
32
|
+
getContext,
|
|
33
|
+
})
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Why this change?**
|
|
37
|
+
- Reduces package count in the monorepo
|
|
38
|
+
- Core package handles auth-agnostic MCP protocol
|
|
39
|
+
- Auth package provides Better Auth specific adapter
|
|
40
|
+
- Better-auth is no longer a dependency of core
|
|
41
|
+
- Enables support for custom auth providers beyond Better Auth
|
|
42
|
+
|
|
43
|
+
**New features:**
|
|
44
|
+
- `McpSessionProvider` type for custom auth integration
|
|
45
|
+
- More generic `McpAuthConfig` type supporting custom auth providers
|
|
46
|
+
- Core MCP functionality available without auth dependencies
|
|
47
|
+
|
|
3
48
|
## 0.1.3
|
|
4
49
|
|
|
5
50
|
## 0.1.2
|
package/CLAUDE.md
CHANGED
|
@@ -149,11 +149,13 @@ const context = createContext<typeof prisma>(config, prisma, session)
|
|
|
149
149
|
- Session flows through context to access control
|
|
150
150
|
- Generator creates auth tables in Prisma schema
|
|
151
151
|
|
|
152
|
-
### With
|
|
152
|
+
### With MCP (Model Context Protocol)
|
|
153
153
|
|
|
154
|
-
-
|
|
154
|
+
- Core provides auth-agnostic MCP runtime via `@opensaas/stack-core/mcp`
|
|
155
|
+
- MCP handler reads config to generate tools
|
|
155
156
|
- Uses context for all operations (access control enforced)
|
|
156
157
|
- Zod schemas from fields validate tool inputs
|
|
158
|
+
- Auth adapters (like `@opensaas/stack-auth/mcp`) provide session integration
|
|
157
159
|
|
|
158
160
|
### With Third-Party Field Packages
|
|
159
161
|
|
package/dist/config/types.d.ts
CHANGED
|
@@ -482,11 +482,12 @@ export type ListMcpConfig = {
|
|
|
482
482
|
customTools?: McpCustomTool[];
|
|
483
483
|
};
|
|
484
484
|
/**
|
|
485
|
-
*
|
|
485
|
+
* OAuth configuration for MCP authentication
|
|
486
|
+
* Supports Better Auth and custom auth providers
|
|
486
487
|
*/
|
|
487
488
|
export type McpAuthConfig = {
|
|
488
489
|
/**
|
|
489
|
-
* Authentication type -
|
|
490
|
+
* Authentication type - Better Auth integration
|
|
490
491
|
*/
|
|
491
492
|
type: 'better-auth';
|
|
492
493
|
/**
|
|
@@ -527,6 +528,15 @@ export type McpAuthConfig = {
|
|
|
527
528
|
*/
|
|
528
529
|
scopes?: string[];
|
|
529
530
|
};
|
|
531
|
+
} | {
|
|
532
|
+
/**
|
|
533
|
+
* Authentication type - custom auth provider
|
|
534
|
+
*/
|
|
535
|
+
type: string;
|
|
536
|
+
/**
|
|
537
|
+
* Additional auth-specific configuration
|
|
538
|
+
*/
|
|
539
|
+
[key: string]: any;
|
|
530
540
|
};
|
|
531
541
|
/**
|
|
532
542
|
* Global MCP server configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,QAAQ,GACR,cAAc,GACd,MAAM,CAAA;AAEV;;;;;;;GAOG;AAEH,MAAM,MAAM,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,IAAI;IACpE;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;QAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,IAAI,CAAC,EAAE,KAAK,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IAEtD;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;QACzC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,IAAI,CAAC,EAAE,KAAK,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAE1B;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,CACf,IAAI,EACA;QACE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;QACzC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,IAAI,EAAE,KAAK,CAAA;QACX,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,GACD;QACE,SAAS,EAAE,OAAO,CAAA;QAClB,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;QAC1B,IAAI,EAAE,KAAK,CAAA;QACX,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,KACF,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAEzB;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QACrB,SAAS,EAAE,OAAO,CAAA;QAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,IAAI,EAAE,KAAK,CAAA;QACX,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,KAAK,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,GAAG,KAAK,CAAA;CACpC,CAAA;AAGD,MAAM,MAAM,eAAe,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,MAAM,IAAI;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,EAAE,CAAC,EAAE;QACH;;;;WAIG;QAEH,SAAS,CAAC,EAAE,GAAG,CAAA;QACf;;;WAGG;QACH,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB;;;;;;;;;;WAUG;QACH,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAA;QACnE;;WAEG;QACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC,UAAU,CAAA;IAClF;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,MAAM,CAAC,EAAE;YACP,GAAG,CAAC,EAAE,MAAM,CAAA;YACZ,GAAG,CAAC,EAAE,MAAM,CAAA;SACb,CAAA;KACF,CAAA;IACD,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC9B,EAAE,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;KACnC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC3D,IAAI,EAAE,SAAS,CAAA;IACf,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;CACF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAC9D,IAAI,EAAE,UAAU,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;IACzD,IAAI,EAAE,WAAW,CAAA;IACjB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,CACzC,MAAM,EACN,OAAO,sBAAsB,EAAE,cAAc,CAC9C,GAAG;IACF,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC1D,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAChD,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,EAAE,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAA;KACvD,CAAA;CACF,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG;IACtF,IAAI,EAAE,cAAc,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;KACjC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,EAAE,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,YAAY,GACZ,aAAa,GACb,cAAc,GACd,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,SAAS,GACT,eAAe,CAAA;AAEnB;;GAEG;AAEH;;;GAGG;AACH,KAAK,YAAY,CAAC,MAAM,SAAS,WAAW,EAAE,KAAK,IACjD,MAAM,SAAS,eAAe,CAAC,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC,GACvD,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;CAC3C,GACD,MAAM,CAAA;AAEZ;;;GAGG;AAEH,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,GAAG,GAAG,IAAI;KACxF,CAAC,IAAI,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;CACtD,CAAA;AAKD,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI;IACrC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAClD,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAC/C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG;QAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9F,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG;QAClB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;QAC9B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAC1C,KACE,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtD,CAAA;AAKD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,IAAI;IAGhC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;KAC/B,CAAA;IACD,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,aAAa,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;;;;;;;;;;;;;OAkBG;IAIH,uBAAuB,CAAC,EAAE,CAAC,iBAAiB,EAAE,GAAG,KAAK,GAAG,CAAA;CAC1D,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAI1B,UAAU,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;CAC/B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AAEvD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAED;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IAEH,WAAW,EAAE,GAAG,CAAA;IAChB;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE;QAEd,KAAK,EAAE,GAAG,CAAA;QACV,OAAO,EAAE,OAAO,oBAAoB,EAAE,aAAa,CAAA;KACpD,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;CAC9B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,IAAI,EAAE,aAAa,CAAA;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB;;;WAGG;QACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B;;;WAGG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B;;;WAGG;QACH,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;CACF,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;GAWG;AACH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAA;IACxB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,4BAA4B;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAAA;AAEpF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,cAAc,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,EAAE,CAAC,EAAE,QAAQ,CAAA;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime MCP route handler
|
|
3
|
+
* Creates MCP API handlers from OpenSaaS config at runtime
|
|
4
|
+
*/
|
|
5
|
+
import type { OpenSaasConfig } from '../config/types.js';
|
|
6
|
+
import type { AccessContext } from '../access/types.js';
|
|
7
|
+
import type { McpSessionProvider } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create MCP route handlers
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // app/api/mcp/[[...transport]]/route.ts
|
|
14
|
+
* import { createMcpHandlers } from '@opensaas/stack-core/mcp'
|
|
15
|
+
* import { createBetterAuthMcpAdapter } from '@opensaas/stack-auth/mcp'
|
|
16
|
+
* import config from '@/opensaas.config'
|
|
17
|
+
* import { auth } from '@/lib/auth'
|
|
18
|
+
* import { getContext } from '@/.opensaas/context'
|
|
19
|
+
*
|
|
20
|
+
* const { GET, POST, DELETE } = createMcpHandlers({
|
|
21
|
+
* config,
|
|
22
|
+
* getSession: createBetterAuthMcpAdapter(auth),
|
|
23
|
+
* getContext
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* export { GET, POST, DELETE }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createMcpHandlers(options: {
|
|
30
|
+
config: OpenSaasConfig;
|
|
31
|
+
getSession: McpSessionProvider;
|
|
32
|
+
getContext: (session?: {
|
|
33
|
+
userId: string;
|
|
34
|
+
}) => AccessContext;
|
|
35
|
+
}): {
|
|
36
|
+
GET: (req: Request) => Promise<Response>;
|
|
37
|
+
POST: (req: Request) => Promise<Response>;
|
|
38
|
+
DELETE: (req: Request) => Promise<Response>;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/mcp/handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,cAAc,CAAA;IACtB,UAAU,EAAE,kBAAkB,CAAA;IAC9B,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,aAAa,CAAA;CAC5D,GAAG;IACF,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC5C,CA0FA"}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime MCP route handler
|
|
3
|
+
* Creates MCP API handlers from OpenSaaS config at runtime
|
|
4
|
+
*/
|
|
5
|
+
import { getDbKey } from '../lib/case-utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create MCP route handlers
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // app/api/mcp/[[...transport]]/route.ts
|
|
12
|
+
* import { createMcpHandlers } from '@opensaas/stack-core/mcp'
|
|
13
|
+
* import { createBetterAuthMcpAdapter } from '@opensaas/stack-auth/mcp'
|
|
14
|
+
* import config from '@/opensaas.config'
|
|
15
|
+
* import { auth } from '@/lib/auth'
|
|
16
|
+
* import { getContext } from '@/.opensaas/context'
|
|
17
|
+
*
|
|
18
|
+
* const { GET, POST, DELETE } = createMcpHandlers({
|
|
19
|
+
* config,
|
|
20
|
+
* getSession: createBetterAuthMcpAdapter(auth),
|
|
21
|
+
* getContext
|
|
22
|
+
* })
|
|
23
|
+
*
|
|
24
|
+
* export { GET, POST, DELETE }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function createMcpHandlers(options) {
|
|
28
|
+
const { config, getSession, getContext } = options;
|
|
29
|
+
// Validate MCP is enabled
|
|
30
|
+
if (!config.mcp?.enabled) {
|
|
31
|
+
const notEnabledHandler = async () => new Response(JSON.stringify({ error: 'MCP not enabled' }), {
|
|
32
|
+
status: 404,
|
|
33
|
+
headers: { 'Content-Type': 'application/json' },
|
|
34
|
+
});
|
|
35
|
+
return { GET: notEnabledHandler, POST: notEnabledHandler, DELETE: notEnabledHandler };
|
|
36
|
+
}
|
|
37
|
+
const basePath = config.mcp.basePath || '/api/mcp';
|
|
38
|
+
/**
|
|
39
|
+
* Main MCP request handler
|
|
40
|
+
*/
|
|
41
|
+
const handler = async (req) => {
|
|
42
|
+
// Authenticate using provided session provider
|
|
43
|
+
const session = await getSession(req.headers);
|
|
44
|
+
if (!session) {
|
|
45
|
+
return new Response(null, {
|
|
46
|
+
status: 401,
|
|
47
|
+
headers: {
|
|
48
|
+
'WWW-Authenticate': `Bearer realm="${basePath}", error="invalid_token"`,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const body = (await req.json());
|
|
54
|
+
// Handle initialize
|
|
55
|
+
if (body.method === 'initialize') {
|
|
56
|
+
return handleInitialize(body.params, body.id);
|
|
57
|
+
}
|
|
58
|
+
// Handle notifications/initialized (sent by client after initialize response)
|
|
59
|
+
if (body.method === 'notifications/initialized') {
|
|
60
|
+
// Notifications don't require a response in JSON-RPC 2.0
|
|
61
|
+
return new Response(null, { status: 204 });
|
|
62
|
+
}
|
|
63
|
+
// Handle tools/list
|
|
64
|
+
if (body.method === 'tools/list') {
|
|
65
|
+
return handleToolsList(config, body.id);
|
|
66
|
+
}
|
|
67
|
+
// Handle tools/call
|
|
68
|
+
if (body.method === 'tools/call') {
|
|
69
|
+
return await handleToolsCall(body.params, session, config, getContext, body.id);
|
|
70
|
+
}
|
|
71
|
+
return new Response(JSON.stringify({
|
|
72
|
+
jsonrpc: '2.0',
|
|
73
|
+
id: body.id ?? null,
|
|
74
|
+
error: { code: -32601, message: 'Method not found' },
|
|
75
|
+
}), {
|
|
76
|
+
status: 400,
|
|
77
|
+
headers: { 'Content-Type': 'application/json' },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return new Response(JSON.stringify({
|
|
82
|
+
error: 'Request handling failed',
|
|
83
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
84
|
+
}), {
|
|
85
|
+
status: 500,
|
|
86
|
+
headers: { 'Content-Type': 'application/json' },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
GET: handler,
|
|
92
|
+
POST: handler,
|
|
93
|
+
DELETE: handler,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Handle initialize request - respond with server capabilities
|
|
98
|
+
*/
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Initialize params are from the client
|
|
100
|
+
function handleInitialize(_params, id) {
|
|
101
|
+
return new Response(JSON.stringify({
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
id: id ?? null,
|
|
104
|
+
result: {
|
|
105
|
+
protocolVersion: '2024-11-05',
|
|
106
|
+
capabilities: {
|
|
107
|
+
tools: {},
|
|
108
|
+
},
|
|
109
|
+
serverInfo: {
|
|
110
|
+
name: 'opensaas-mcp-server',
|
|
111
|
+
version: '1.0.0',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
}), {
|
|
115
|
+
headers: { 'Content-Type': 'application/json' },
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Convert field config to JSON schema property
|
|
120
|
+
*/
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Field configs have varying structures
|
|
122
|
+
function fieldToJsonSchema(fieldName, fieldConfig) {
|
|
123
|
+
const baseSchema = {};
|
|
124
|
+
switch (fieldConfig.type) {
|
|
125
|
+
case 'text':
|
|
126
|
+
case 'password':
|
|
127
|
+
baseSchema.type = 'string';
|
|
128
|
+
if (fieldConfig.validation?.length) {
|
|
129
|
+
if (fieldConfig.validation.length.min)
|
|
130
|
+
baseSchema.minLength = fieldConfig.validation.length.min;
|
|
131
|
+
if (fieldConfig.validation.length.max)
|
|
132
|
+
baseSchema.maxLength = fieldConfig.validation.length.max;
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
135
|
+
case 'integer':
|
|
136
|
+
baseSchema.type = 'number';
|
|
137
|
+
if (fieldConfig.validation?.min !== undefined)
|
|
138
|
+
baseSchema.minimum = fieldConfig.validation.min;
|
|
139
|
+
if (fieldConfig.validation?.max !== undefined)
|
|
140
|
+
baseSchema.maximum = fieldConfig.validation.max;
|
|
141
|
+
break;
|
|
142
|
+
case 'checkbox':
|
|
143
|
+
baseSchema.type = 'boolean';
|
|
144
|
+
break;
|
|
145
|
+
case 'timestamp':
|
|
146
|
+
baseSchema.type = 'string';
|
|
147
|
+
baseSchema.format = 'date-time';
|
|
148
|
+
break;
|
|
149
|
+
case 'select':
|
|
150
|
+
baseSchema.type = 'string';
|
|
151
|
+
if (fieldConfig.options) {
|
|
152
|
+
baseSchema.enum = fieldConfig.options.map((opt) => opt.value);
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
case 'relationship':
|
|
156
|
+
// For relationships, expect an ID or connect object
|
|
157
|
+
baseSchema.type = 'object';
|
|
158
|
+
baseSchema.properties = {
|
|
159
|
+
connect: {
|
|
160
|
+
type: 'object',
|
|
161
|
+
properties: {
|
|
162
|
+
id: { type: 'string' },
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
break;
|
|
167
|
+
default:
|
|
168
|
+
// For custom field types, default to string
|
|
169
|
+
baseSchema.type = 'string';
|
|
170
|
+
}
|
|
171
|
+
return baseSchema;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Generate field schemas for create/update operations
|
|
175
|
+
*/
|
|
176
|
+
function generateFieldSchemas(fields, operation) {
|
|
177
|
+
const properties = {};
|
|
178
|
+
const required = [];
|
|
179
|
+
for (const [fieldName, fieldConfig] of Object.entries(fields)) {
|
|
180
|
+
// Skip system fields
|
|
181
|
+
if (['id', 'createdAt', 'updatedAt'].includes(fieldName))
|
|
182
|
+
continue;
|
|
183
|
+
properties[fieldName] = fieldToJsonSchema(fieldName, fieldConfig);
|
|
184
|
+
// Add to required array if field is required for this operation
|
|
185
|
+
if (operation === 'create' &&
|
|
186
|
+
'validation' in fieldConfig &&
|
|
187
|
+
fieldConfig.validation?.isRequired) {
|
|
188
|
+
required.push(fieldName);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return { properties, required };
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Handle tools/list request - list all available tools
|
|
195
|
+
*/
|
|
196
|
+
function handleToolsList(config, id) {
|
|
197
|
+
const tools = [];
|
|
198
|
+
// Generate CRUD tools for each list
|
|
199
|
+
for (const [listKey, listConfig] of Object.entries(config.lists)) {
|
|
200
|
+
// Check if MCP is enabled for this list
|
|
201
|
+
if (listConfig.mcp?.enabled === false)
|
|
202
|
+
continue;
|
|
203
|
+
const dbKey = getDbKey(listKey);
|
|
204
|
+
const defaultTools = config.mcp?.defaultTools || {
|
|
205
|
+
read: true,
|
|
206
|
+
create: true,
|
|
207
|
+
update: true,
|
|
208
|
+
delete: true,
|
|
209
|
+
};
|
|
210
|
+
const enabledTools = {
|
|
211
|
+
read: listConfig.mcp?.tools?.read ?? defaultTools.read ?? true,
|
|
212
|
+
create: listConfig.mcp?.tools?.create ?? defaultTools.create ?? true,
|
|
213
|
+
update: listConfig.mcp?.tools?.update ?? defaultTools.update ?? true,
|
|
214
|
+
delete: listConfig.mcp?.tools?.delete ?? defaultTools.delete ?? true,
|
|
215
|
+
};
|
|
216
|
+
// Read tool
|
|
217
|
+
if (enabledTools.read) {
|
|
218
|
+
tools.push({
|
|
219
|
+
name: `list_${dbKey}_query`,
|
|
220
|
+
description: `Query ${listKey} records with optional filters`,
|
|
221
|
+
inputSchema: {
|
|
222
|
+
type: 'object',
|
|
223
|
+
properties: {
|
|
224
|
+
where: { type: 'object', description: 'Prisma where clause' },
|
|
225
|
+
take: { type: 'number', description: 'Number of records to return (max 100)' },
|
|
226
|
+
skip: { type: 'number', description: 'Number of records to skip' },
|
|
227
|
+
orderBy: { type: 'object', description: 'Sort order' },
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Create tool
|
|
233
|
+
if (enabledTools.create) {
|
|
234
|
+
const fieldSchemas = generateFieldSchemas(listConfig.fields, 'create');
|
|
235
|
+
tools.push({
|
|
236
|
+
name: `list_${dbKey}_create`,
|
|
237
|
+
description: `Create a new ${listKey} record`,
|
|
238
|
+
inputSchema: {
|
|
239
|
+
type: 'object',
|
|
240
|
+
properties: {
|
|
241
|
+
data: {
|
|
242
|
+
type: 'object',
|
|
243
|
+
description: 'Record data with the following fields',
|
|
244
|
+
properties: fieldSchemas.properties,
|
|
245
|
+
required: fieldSchemas.required,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
required: ['data'],
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// Update tool
|
|
253
|
+
if (enabledTools.update) {
|
|
254
|
+
const fieldSchemas = generateFieldSchemas(listConfig.fields, 'update');
|
|
255
|
+
tools.push({
|
|
256
|
+
name: `list_${dbKey}_update`,
|
|
257
|
+
description: `Update an existing ${listKey} record`,
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: 'object',
|
|
260
|
+
properties: {
|
|
261
|
+
where: {
|
|
262
|
+
type: 'object',
|
|
263
|
+
description: 'Record identifier',
|
|
264
|
+
properties: {
|
|
265
|
+
id: { type: 'string' },
|
|
266
|
+
},
|
|
267
|
+
required: ['id'],
|
|
268
|
+
},
|
|
269
|
+
data: {
|
|
270
|
+
type: 'object',
|
|
271
|
+
description: 'Fields to update',
|
|
272
|
+
properties: fieldSchemas.properties,
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
required: ['where', 'data'],
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Delete tool
|
|
280
|
+
if (enabledTools.delete) {
|
|
281
|
+
tools.push({
|
|
282
|
+
name: `list_${dbKey}_delete`,
|
|
283
|
+
description: `Delete a ${listKey} record`,
|
|
284
|
+
inputSchema: {
|
|
285
|
+
type: 'object',
|
|
286
|
+
properties: {
|
|
287
|
+
where: {
|
|
288
|
+
type: 'object',
|
|
289
|
+
description: 'Record identifier',
|
|
290
|
+
properties: {
|
|
291
|
+
id: { type: 'string' },
|
|
292
|
+
},
|
|
293
|
+
required: ['id'],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
required: ['where'],
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// Custom tools
|
|
301
|
+
if (listConfig.mcp?.customTools) {
|
|
302
|
+
for (const customTool of listConfig.mcp.customTools) {
|
|
303
|
+
tools.push({
|
|
304
|
+
name: customTool.name,
|
|
305
|
+
description: customTool.description,
|
|
306
|
+
inputSchema: customTool.inputSchema,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return new Response(JSON.stringify({
|
|
312
|
+
jsonrpc: '2.0',
|
|
313
|
+
id: id ?? null,
|
|
314
|
+
result: { tools },
|
|
315
|
+
}), {
|
|
316
|
+
headers: { 'Content-Type': 'application/json' },
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Handle tools/call request - execute a tool
|
|
321
|
+
*/
|
|
322
|
+
async function handleToolsCall(
|
|
323
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- MCP tool params vary by tool
|
|
324
|
+
params, session, config, getContext, id) {
|
|
325
|
+
const toolName = params?.name;
|
|
326
|
+
const toolArgs = params?.arguments || {};
|
|
327
|
+
console.log('Handling tool call:', toolName, toolArgs);
|
|
328
|
+
if (!toolName) {
|
|
329
|
+
return new Response(JSON.stringify({
|
|
330
|
+
jsonrpc: '2.0',
|
|
331
|
+
id: id ?? null,
|
|
332
|
+
error: { code: -32602, message: 'Invalid params: Tool name required' },
|
|
333
|
+
}), {
|
|
334
|
+
status: 400,
|
|
335
|
+
headers: { 'Content-Type': 'application/json' },
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
// Parse tool name: list_{dbKey}_{operation}
|
|
339
|
+
const match = toolName.match(/^list_([a-z][a-zA-Z0-9]*)_(query|create|update|delete)$/);
|
|
340
|
+
if (match) {
|
|
341
|
+
const [, dbKey, operation] = match;
|
|
342
|
+
return await handleCrudTool(dbKey, operation, toolArgs, session, config, getContext, id);
|
|
343
|
+
}
|
|
344
|
+
// Handle custom tools
|
|
345
|
+
return await handleCustomTool(toolName, toolArgs, session, config, getContext, id);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Handle CRUD tool execution
|
|
349
|
+
*/
|
|
350
|
+
async function handleCrudTool(dbKey, operation,
|
|
351
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Tool arguments vary by operation
|
|
352
|
+
args, session, config, getContext, id) {
|
|
353
|
+
// Create context with user session
|
|
354
|
+
const context = getContext({ userId: session.userId });
|
|
355
|
+
try {
|
|
356
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Result type varies by Prisma operation
|
|
357
|
+
let result;
|
|
358
|
+
switch (operation) {
|
|
359
|
+
case 'query':
|
|
360
|
+
result = await context.db[dbKey].findMany({
|
|
361
|
+
where: args.where,
|
|
362
|
+
take: Math.min(args.take || 10, 100),
|
|
363
|
+
skip: args.skip,
|
|
364
|
+
orderBy: args.orderBy,
|
|
365
|
+
});
|
|
366
|
+
return createSuccessResponse({
|
|
367
|
+
items: result,
|
|
368
|
+
count: result.length,
|
|
369
|
+
}, id);
|
|
370
|
+
case 'create':
|
|
371
|
+
result = await context.db[dbKey].create({
|
|
372
|
+
data: args.data,
|
|
373
|
+
});
|
|
374
|
+
if (!result) {
|
|
375
|
+
return createErrorResponse('Failed to create record. Access denied or validation failed.', id);
|
|
376
|
+
}
|
|
377
|
+
return createSuccessResponse({ success: true, item: result }, id);
|
|
378
|
+
case 'update':
|
|
379
|
+
result = await context.db[dbKey].update({
|
|
380
|
+
where: args.where,
|
|
381
|
+
data: args.data,
|
|
382
|
+
});
|
|
383
|
+
if (!result) {
|
|
384
|
+
return createErrorResponse('Failed to update record. Access denied or record not found.', id);
|
|
385
|
+
}
|
|
386
|
+
return createSuccessResponse({ success: true, item: result }, id);
|
|
387
|
+
case 'delete':
|
|
388
|
+
result = await context.db[dbKey].delete({
|
|
389
|
+
where: args.where,
|
|
390
|
+
});
|
|
391
|
+
if (!result) {
|
|
392
|
+
return createErrorResponse('Failed to delete record. Access denied or record not found.', id);
|
|
393
|
+
}
|
|
394
|
+
return createSuccessResponse({ success: true, deletedId: args.where.id }, id);
|
|
395
|
+
default:
|
|
396
|
+
return createErrorResponse(`Unknown operation: ${operation}`, id);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
return createErrorResponse('Operation failed: ' + (error instanceof Error ? error.message : 'Unknown error'), id);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Handle custom tool execution
|
|
405
|
+
*/
|
|
406
|
+
async function handleCustomTool(toolName,
|
|
407
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Custom tool arguments are user-defined
|
|
408
|
+
args, session, config, getContext, id) {
|
|
409
|
+
// Find custom tool in config
|
|
410
|
+
for (const [_listKey, listConfig] of Object.entries(config.lists)) {
|
|
411
|
+
const customTool = listConfig.mcp?.customTools?.find((t) => t.name === toolName);
|
|
412
|
+
if (customTool) {
|
|
413
|
+
const context = getContext({ userId: session.userId });
|
|
414
|
+
try {
|
|
415
|
+
const result = await customTool.handler({
|
|
416
|
+
input: args,
|
|
417
|
+
context,
|
|
418
|
+
});
|
|
419
|
+
return createSuccessResponse(result, id);
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
return createErrorResponse('Custom tool execution failed: ' +
|
|
423
|
+
(error instanceof Error ? error.message : 'Unknown error'), id);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return createErrorResponse(`Unknown tool: ${toolName}`, id);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Helper to create success response
|
|
431
|
+
*/
|
|
432
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Response data structure is flexible per MCP protocol
|
|
433
|
+
function createSuccessResponse(data, id) {
|
|
434
|
+
return new Response(JSON.stringify({
|
|
435
|
+
jsonrpc: '2.0',
|
|
436
|
+
id: id ?? null,
|
|
437
|
+
result: {
|
|
438
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
439
|
+
},
|
|
440
|
+
}), {
|
|
441
|
+
headers: { 'Content-Type': 'application/json' },
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Helper to create error response
|
|
446
|
+
*/
|
|
447
|
+
function createErrorResponse(message, id) {
|
|
448
|
+
return new Response(JSON.stringify({
|
|
449
|
+
jsonrpc: '2.0',
|
|
450
|
+
id: id ?? null,
|
|
451
|
+
error: {
|
|
452
|
+
code: -32603,
|
|
453
|
+
message,
|
|
454
|
+
},
|
|
455
|
+
}), {
|
|
456
|
+
status: 400,
|
|
457
|
+
headers: { 'Content-Type': 'application/json' },
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=handler.js.map
|