@strapi/core 5.46.1 → 5.47.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.
- package/dist/core-api/routes/index.js +2 -0
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +2 -0
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/routes/validation/content-type.d.ts +13 -1
- package/dist/core-api/routes/validation/content-type.d.ts.map +1 -1
- package/dist/core-api/routes/validation/content-type.js +15 -2
- package/dist/core-api/routes/validation/content-type.js.map +1 -1
- package/dist/core-api/routes/validation/content-type.mjs +15 -2
- package/dist/core-api/routes/validation/content-type.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -1
- package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +41 -30
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +41 -30
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/package.json.js +14 -12
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +14 -12
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +3 -1
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/mcp.d.ts +3 -0
- package/dist/providers/mcp.d.ts.map +1 -0
- package/dist/providers/mcp.js +39 -0
- package/dist/providers/mcp.js.map +1 -0
- package/dist/providers/mcp.mjs +37 -0
- package/dist/providers/mcp.mjs.map +1 -0
- package/dist/services/ai.d.ts.map +1 -1
- package/dist/services/ai.js +3 -0
- package/dist/services/ai.js.map +1 -1
- package/dist/services/ai.mjs +3 -0
- package/dist/services/ai.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +2 -16
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +0 -53
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +2 -53
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
- package/dist/services/document-service/params.d.ts +2 -2
- package/dist/services/document-service/params.d.ts.map +1 -1
- package/dist/services/document-service/publication-filter.d.ts +6 -0
- package/dist/services/document-service/publication-filter.d.ts.map +1 -0
- package/dist/services/document-service/publication-filter.js +20 -0
- package/dist/services/document-service/publication-filter.js.map +1 -0
- package/dist/services/document-service/publication-filter.mjs +15 -0
- package/dist/services/document-service/publication-filter.mjs.map +1 -0
- package/dist/services/document-service/transform/query.d.ts +1 -1
- package/dist/services/document-service/transform/query.d.ts.map +1 -1
- package/dist/services/document-service/transform/query.js +32 -19
- package/dist/services/document-service/transform/query.js.map +1 -1
- package/dist/services/document-service/transform/query.mjs +33 -20
- package/dist/services/document-service/transform/query.mjs.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js +1 -1
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/mcp/authentication.d.ts +23 -0
- package/dist/services/mcp/authentication.d.ts.map +1 -0
- package/dist/services/mcp/authentication.js +45 -0
- package/dist/services/mcp/authentication.js.map +1 -0
- package/dist/services/mcp/authentication.mjs +43 -0
- package/dist/services/mcp/authentication.mjs.map +1 -0
- package/dist/services/mcp/handlers/handlePost.d.ts +4 -0
- package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -0
- package/dist/services/mcp/handlers/handlePost.js +59 -0
- package/dist/services/mcp/handlers/handlePost.js.map +1 -0
- package/dist/services/mcp/handlers/handlePost.mjs +57 -0
- package/dist/services/mcp/handlers/handlePost.mjs.map +1 -0
- package/dist/services/mcp/handlers/types.d.ts +12 -0
- package/dist/services/mcp/handlers/types.d.ts.map +1 -0
- package/dist/services/mcp/index.d.ts +6 -0
- package/dist/services/mcp/index.d.ts.map +1 -0
- package/dist/services/mcp/index.js +101 -0
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/mcp/index.mjs +99 -0
- package/dist/services/mcp/index.mjs.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.d.ts +13 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.js +53 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.js.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.mjs +51 -0
- package/dist/services/mcp/internal/McpCapabilityDefinitionRegistry.mjs.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +43 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.js +108 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.js.map +1 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.mjs +106 -0
- package/dist/services/mcp/internal/McpCapabilityRegistry.mjs.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.d.ts +11 -0
- package/dist/services/mcp/internal/McpConfiguration.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.js +34 -0
- package/dist/services/mcp/internal/McpConfiguration.js.map +1 -0
- package/dist/services/mcp/internal/McpConfiguration.mjs +32 -0
- package/dist/services/mcp/internal/McpConfiguration.mjs.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.d.ts +37 -0
- package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.js +71 -0
- package/dist/services/mcp/internal/McpServerFactory.js.map +1 -0
- package/dist/services/mcp/internal/McpServerFactory.mjs +69 -0
- package/dist/services/mcp/internal/McpServerFactory.mjs.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts +21 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.js +76 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.js.map +1 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.mjs +73 -0
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.mjs.map +1 -0
- package/dist/services/mcp/metrics/metrics.d.ts +29 -0
- package/dist/services/mcp/metrics/metrics.d.ts.map +1 -0
- package/dist/services/mcp/metrics/metrics.js +97 -0
- package/dist/services/mcp/metrics/metrics.js.map +1 -0
- package/dist/services/mcp/metrics/metrics.mjs +88 -0
- package/dist/services/mcp/metrics/metrics.mjs.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts +11 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.js +10 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.js.map +1 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.mjs +8 -0
- package/dist/services/mcp/metrics/normalizeMcpCapability.mjs.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts +4 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.js +27 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.js.map +1 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.mjs +25 -0
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.mjs.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts +3 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.js +47 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.js.map +1 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.mjs +45 -0
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.mjs.map +1 -0
- package/dist/services/mcp/prompt-registry.d.ts +16 -0
- package/dist/services/mcp/prompt-registry.d.ts.map +1 -0
- package/dist/services/mcp/prompt-registry.js +77 -0
- package/dist/services/mcp/prompt-registry.js.map +1 -0
- package/dist/services/mcp/prompt-registry.mjs +75 -0
- package/dist/services/mcp/prompt-registry.mjs.map +1 -0
- package/dist/services/mcp/resource-registry.d.ts +14 -0
- package/dist/services/mcp/resource-registry.d.ts.map +1 -0
- package/dist/services/mcp/resource-registry.js +67 -0
- package/dist/services/mcp/resource-registry.js.map +1 -0
- package/dist/services/mcp/resource-registry.mjs +65 -0
- package/dist/services/mcp/resource-registry.mjs.map +1 -0
- package/dist/services/mcp/routes.d.ts +11 -0
- package/dist/services/mcp/routes.d.ts.map +1 -0
- package/dist/services/mcp/routes.js +58 -0
- package/dist/services/mcp/routes.js.map +1 -0
- package/dist/services/mcp/routes.mjs +56 -0
- package/dist/services/mcp/routes.mjs.map +1 -0
- package/dist/services/mcp/tool-registry.d.ts +25 -0
- package/dist/services/mcp/tool-registry.d.ts.map +1 -0
- package/dist/services/mcp/tool-registry.js +102 -0
- package/dist/services/mcp/tool-registry.js.map +1 -0
- package/dist/services/mcp/tool-registry.mjs +99 -0
- package/dist/services/mcp/tool-registry.mjs.map +1 -0
- package/dist/services/mcp/tools/log.d.ts +87 -0
- package/dist/services/mcp/tools/log.d.ts.map +1 -0
- package/dist/services/mcp/tools/log.js +88 -0
- package/dist/services/mcp/tools/log.js.map +1 -0
- package/dist/services/mcp/tools/log.mjs +86 -0
- package/dist/services/mcp/tools/log.mjs.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts +36 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.js +59 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.js.map +1 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.mjs +56 -0
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.mjs.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.d.ts +22 -0
- package/dist/services/mcp/utils/jsonRpcErrors.d.ts.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.js +25 -0
- package/dist/services/mcp/utils/jsonRpcErrors.js.map +1 -0
- package/dist/services/mcp/utils/jsonRpcErrors.mjs +23 -0
- package/dist/services/mcp/utils/jsonRpcErrors.mjs.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.d.ts +18 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.js +29 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.js.map +1 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.mjs +27 -0
- package/dist/services/mcp/utils/safeHandlerWrapper.mjs.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts +5 -0
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.js +23 -0
- package/dist/services/mcp/utils/sendJsonRpcError.js.map +1 -0
- package/dist/services/mcp/utils/sendJsonRpcError.mjs +21 -0
- package/dist/services/mcp/utils/sendJsonRpcError.mjs.map +1 -0
- package/dist/services/mcp/utils/withTimeout.d.ts +7 -0
- package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -0
- package/dist/services/mcp/utils/withTimeout.js +23 -0
- package/dist/services/mcp/utils/withTimeout.js.map +1 -0
- package/dist/services/mcp/utils/withTimeout.mjs +21 -0
- package/dist/services/mcp/utils/withTimeout.mjs.map +1 -0
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js +3 -1
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +3 -1
- package/dist/services/metrics/index.mjs.map +1 -1
- package/package.json +14 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthDiscoveryFallback.js","sources":["../../../../src/services/mcp/middleware/oauthDiscoveryFallback.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\n/**\n * OAuth discovery paths probed by MCP SDK clients during the authentication\n * fallback flow (RFC 8414 § 3, RFC 7591, OpenID Connect Discovery).\n *\n * Strapi is a resource server, not an authorization server, so these paths\n * have no real handler. Without this middleware, Koa returns plain-text\n * 404/405 responses that crash clients expecting JSON (e.g. Claude Code).\n *\n * The middleware only fires when downstream already returned 404 or 405,\n * so user-defined routes on these paths are never shadowed.\n */\nconst OAUTH_DISCOVERY_PROBES: ReadonlyArray<{ method: string; path: string }> = [\n { method: 'GET', path: '/.well-known/oauth-authorization-server' },\n { method: 'GET', path: '/.well-known/openid-configuration' },\n { method: 'POST', path: '/register' },\n];\n\nexport const createOAuthDiscoveryFallbackMiddleware = (): Core.MiddlewareHandler => {\n return async (ctx, next) => {\n await next();\n\n if (ctx.status !== 404 && ctx.status !== 405) {\n return;\n }\n\n const isOAuthProbe = OAUTH_DISCOVERY_PROBES.some(\n (probe) => ctx.method === probe.method && ctx.path === probe.path\n );\n\n if (isOAuthProbe === false) {\n return;\n }\n\n ctx.status = 404;\n ctx.set('Content-Type', 'application/json');\n ctx.body = { error: 'not_found', error_description: 'OAuth is not supported' };\n };\n};\n"],"names":["OAUTH_DISCOVERY_PROBES","method","path","createOAuthDiscoveryFallbackMiddleware","ctx","next","status","isOAuthProbe","some","probe","set","body","error","error_description"],"mappings":";;AAEA;;;;;;;;;;AAUC,IACD,MAAMA,sBAAAA,GAA0E;AAC9E,IAAA;QAAEC,MAAAA,EAAQ,KAAA;QAAOC,IAAAA,EAAM;AAA0C,KAAA;AACjE,IAAA;QAAED,MAAAA,EAAQ,KAAA;QAAOC,IAAAA,EAAM;AAAoC,KAAA;AAC3D,IAAA;QAAED,MAAAA,EAAQ,MAAA;QAAQC,IAAAA,EAAM;AAAY;AACrC,CAAA;MAEYC,sCAAAA,GAAyC,IAAA;AACpD,IAAA,OAAO,OAAOC,GAAAA,EAAKC,IAAAA,GAAAA;QACjB,MAAMA,IAAAA,EAAAA;AAEN,QAAA,IAAID,IAAIE,MAAM,KAAK,OAAOF,GAAAA,CAAIE,MAAM,KAAK,GAAA,EAAK;AAC5C,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,eAAeP,sBAAAA,CAAuBQ,IAAI,CAC9C,CAACC,QAAUL,GAAAA,CAAIH,MAAM,KAAKQ,KAAAA,CAAMR,MAAM,IAAIG,GAAAA,CAAIF,IAAI,KAAKO,MAAMP,IAAI,CAAA;AAGnE,QAAA,IAAIK,iBAAiB,KAAA,EAAO;AAC1B,YAAA;AACF,QAAA;AAEAH,QAAAA,GAAAA,CAAIE,MAAM,GAAG,GAAA;QACbF,GAAAA,CAAIM,GAAG,CAAC,cAAA,EAAgB,kBAAA,CAAA;AACxBN,QAAAA,GAAAA,CAAIO,IAAI,GAAG;YAAEC,KAAAA,EAAO,WAAA;YAAaC,iBAAAA,EAAmB;AAAyB,SAAA;AAC/E,IAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth discovery paths probed by MCP SDK clients during the authentication
|
|
3
|
+
* fallback flow (RFC 8414 § 3, RFC 7591, OpenID Connect Discovery).
|
|
4
|
+
*
|
|
5
|
+
* Strapi is a resource server, not an authorization server, so these paths
|
|
6
|
+
* have no real handler. Without this middleware, Koa returns plain-text
|
|
7
|
+
* 404/405 responses that crash clients expecting JSON (e.g. Claude Code).
|
|
8
|
+
*
|
|
9
|
+
* The middleware only fires when downstream already returned 404 or 405,
|
|
10
|
+
* so user-defined routes on these paths are never shadowed.
|
|
11
|
+
*/ const OAUTH_DISCOVERY_PROBES = [
|
|
12
|
+
{
|
|
13
|
+
method: 'GET',
|
|
14
|
+
path: '/.well-known/oauth-authorization-server'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
method: 'GET',
|
|
18
|
+
path: '/.well-known/openid-configuration'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
method: 'POST',
|
|
22
|
+
path: '/register'
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
const createOAuthDiscoveryFallbackMiddleware = ()=>{
|
|
26
|
+
return async (ctx, next)=>{
|
|
27
|
+
await next();
|
|
28
|
+
if (ctx.status !== 404 && ctx.status !== 405) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const isOAuthProbe = OAUTH_DISCOVERY_PROBES.some((probe)=>ctx.method === probe.method && ctx.path === probe.path);
|
|
32
|
+
if (isOAuthProbe === false) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
ctx.status = 404;
|
|
36
|
+
ctx.set('Content-Type', 'application/json');
|
|
37
|
+
ctx.body = {
|
|
38
|
+
error: 'not_found',
|
|
39
|
+
error_description: 'OAuth is not supported'
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { createOAuthDiscoveryFallbackMiddleware };
|
|
45
|
+
//# sourceMappingURL=oauthDiscoveryFallback.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthDiscoveryFallback.mjs","sources":["../../../../src/services/mcp/middleware/oauthDiscoveryFallback.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\n/**\n * OAuth discovery paths probed by MCP SDK clients during the authentication\n * fallback flow (RFC 8414 § 3, RFC 7591, OpenID Connect Discovery).\n *\n * Strapi is a resource server, not an authorization server, so these paths\n * have no real handler. Without this middleware, Koa returns plain-text\n * 404/405 responses that crash clients expecting JSON (e.g. Claude Code).\n *\n * The middleware only fires when downstream already returned 404 or 405,\n * so user-defined routes on these paths are never shadowed.\n */\nconst OAUTH_DISCOVERY_PROBES: ReadonlyArray<{ method: string; path: string }> = [\n { method: 'GET', path: '/.well-known/oauth-authorization-server' },\n { method: 'GET', path: '/.well-known/openid-configuration' },\n { method: 'POST', path: '/register' },\n];\n\nexport const createOAuthDiscoveryFallbackMiddleware = (): Core.MiddlewareHandler => {\n return async (ctx, next) => {\n await next();\n\n if (ctx.status !== 404 && ctx.status !== 405) {\n return;\n }\n\n const isOAuthProbe = OAUTH_DISCOVERY_PROBES.some(\n (probe) => ctx.method === probe.method && ctx.path === probe.path\n );\n\n if (isOAuthProbe === false) {\n return;\n }\n\n ctx.status = 404;\n ctx.set('Content-Type', 'application/json');\n ctx.body = { error: 'not_found', error_description: 'OAuth is not supported' };\n };\n};\n"],"names":["OAUTH_DISCOVERY_PROBES","method","path","createOAuthDiscoveryFallbackMiddleware","ctx","next","status","isOAuthProbe","some","probe","set","body","error","error_description"],"mappings":"AAEA;;;;;;;;;;AAUC,IACD,MAAMA,sBAAAA,GAA0E;AAC9E,IAAA;QAAEC,MAAAA,EAAQ,KAAA;QAAOC,IAAAA,EAAM;AAA0C,KAAA;AACjE,IAAA;QAAED,MAAAA,EAAQ,KAAA;QAAOC,IAAAA,EAAM;AAAoC,KAAA;AAC3D,IAAA;QAAED,MAAAA,EAAQ,MAAA;QAAQC,IAAAA,EAAM;AAAY;AACrC,CAAA;MAEYC,sCAAAA,GAAyC,IAAA;AACpD,IAAA,OAAO,OAAOC,GAAAA,EAAKC,IAAAA,GAAAA;QACjB,MAAMA,IAAAA,EAAAA;AAEN,QAAA,IAAID,IAAIE,MAAM,KAAK,OAAOF,GAAAA,CAAIE,MAAM,KAAK,GAAA,EAAK;AAC5C,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,eAAeP,sBAAAA,CAAuBQ,IAAI,CAC9C,CAACC,QAAUL,GAAAA,CAAIH,MAAM,KAAKQ,KAAAA,CAAMR,MAAM,IAAIG,GAAAA,CAAIF,IAAI,KAAKO,MAAMP,IAAI,CAAA;AAGnE,QAAA,IAAIK,iBAAiB,KAAA,EAAO;AAC1B,YAAA;AACF,QAAA;AAEAH,QAAAA,GAAAA,CAAIE,MAAM,GAAG,GAAA;QACbF,GAAAA,CAAIM,GAAG,CAAC,cAAA,EAAgB,kBAAA,CAAA;AACxBN,QAAAA,GAAAA,CAAIO,IAAI,GAAG;YAAEC,KAAAA,EAAO,WAAA;YAAaC,iBAAAA,EAAmB;AAAyB,SAAA;AAC/E,IAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { McpServer, RegisteredPrompt } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { Core, Modules } from '@strapi/types';
|
|
3
|
+
import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
|
|
4
|
+
import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
|
|
5
|
+
export declare const makeMcpPromptDefinition: <Definition extends Modules.MCP.McpPromptDefinition<string, import("zod/v4").ZodObject<Readonly<{
|
|
6
|
+
[k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
|
|
7
|
+
}>, import("zod/v4/core").$strip> | undefined, string, string>>(prompt: Definition) => Definition;
|
|
8
|
+
export declare class McpPromptRegistry extends McpCapabilityRegistryBase<'prompt', Modules.MCP.McpPromptDefinition, RegisteredPrompt> implements McpCapabilityRegistry {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(ctx: {
|
|
11
|
+
strapi: Core.Strapi;
|
|
12
|
+
definitions: McpCapabilityDefinitionRegistry<'prompt', Modules.MCP.McpPromptDefinition>;
|
|
13
|
+
});
|
|
14
|
+
bind(mcpServer: McpServer): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=prompt-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/prompt-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C,eAAO,MAAM,uBAAuB;;wEAC1B,UAAU,KACjB,UAAoB,CAAC;AAExB,qBAAa,iBACX,SAAQ,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,CAC7F,YAAW,qBAAqB;;gBAIpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;KACzF;IAKD,IAAI,CAAC,SAAS,EAAE,SAAS;CA4D1B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var McpCapabilityRegistry = require('./internal/McpCapabilityRegistry.js');
|
|
4
|
+
var createSafeCapabilityRegistration = require('./utils/createSafeCapabilityRegistration.js');
|
|
5
|
+
var wrapCapabilityHandlerForMetrics = require('./metrics/wrapCapabilityHandlerForMetrics.js');
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line import/extensions
|
|
8
|
+
function _class_private_field_loose_base(receiver, privateKey) {
|
|
9
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
10
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
11
|
+
}
|
|
12
|
+
return receiver;
|
|
13
|
+
}
|
|
14
|
+
var id = 0;
|
|
15
|
+
function _class_private_field_loose_key(name) {
|
|
16
|
+
return "__private_" + id++ + "_" + name;
|
|
17
|
+
}
|
|
18
|
+
var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
|
|
19
|
+
class McpPromptRegistry extends McpCapabilityRegistry.McpCapabilityRegistryBase {
|
|
20
|
+
bind(mcpServer) {
|
|
21
|
+
const strapi = _class_private_field_loose_base(this, _strapi)[_strapi];
|
|
22
|
+
super.register((definition)=>{
|
|
23
|
+
const { name, title, description, argsSchema, createHandler } = definition;
|
|
24
|
+
return createSafeCapabilityRegistration.createSafeCapabilityRegistration({
|
|
25
|
+
strapi,
|
|
26
|
+
capabilityType: 'Prompt',
|
|
27
|
+
name,
|
|
28
|
+
createHandler,
|
|
29
|
+
createFallbackHandler (errorMessage) {
|
|
30
|
+
return async ()=>({
|
|
31
|
+
messages: [
|
|
32
|
+
{
|
|
33
|
+
role: 'user',
|
|
34
|
+
content: {
|
|
35
|
+
type: 'text',
|
|
36
|
+
text: `Prompt "${name}" failed to initialize: ${errorMessage}`
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
createErrorResult (error) {
|
|
43
|
+
return {
|
|
44
|
+
messages: [
|
|
45
|
+
{
|
|
46
|
+
role: 'user',
|
|
47
|
+
content: {
|
|
48
|
+
type: 'text',
|
|
49
|
+
text: `Prompt "${name}" execution failed: ${error.message}`
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
registerWithSdk (safeHandler) {
|
|
56
|
+
const sdkHandler = wrapCapabilityHandlerForMetrics.wrapCapabilityHandlerForMetrics(strapi, 'prompt', name, definition.telemetry, safeHandler);
|
|
57
|
+
return mcpServer.registerPrompt(name, {
|
|
58
|
+
title,
|
|
59
|
+
description,
|
|
60
|
+
// @ts-expect-error - Internal handler type mismatch due to optional argsSchema
|
|
61
|
+
argsSchema
|
|
62
|
+
}, sdkHandler);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
constructor(ctx){
|
|
68
|
+
super(ctx.definitions), Object.defineProperty(this, _strapi, {
|
|
69
|
+
writable: true,
|
|
70
|
+
value: void 0
|
|
71
|
+
});
|
|
72
|
+
_class_private_field_loose_base(this, _strapi)[_strapi] = ctx.strapi;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
exports.McpPromptRegistry = McpPromptRegistry;
|
|
77
|
+
//# sourceMappingURL=prompt-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registry.js","sources":["../../../src/services/mcp/prompt-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredPrompt } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpPromptDefinition = <Definition extends Modules.MCP.McpPromptDefinition>(\n prompt: Definition\n): Definition => prompt;\n\nexport class McpPromptRegistry\n extends McpCapabilityRegistryBase<'prompt', Modules.MCP.McpPromptDefinition, RegisteredPrompt>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'prompt', Modules.MCP.McpPromptDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, argsSchema, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Prompt',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" failed to initialize: ${errorMessage}`,\n },\n },\n ],\n });\n },\n createErrorResult(error) {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" execution failed: ${error.message}`,\n },\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'prompt',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerPrompt(\n name,\n {\n title,\n description,\n // @ts-expect-error - Internal handler type mismatch due to optional argsSchema\n argsSchema,\n },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["McpPromptRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","title","description","argsSchema","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","messages","role","content","type","text","createErrorResult","error","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerPrompt","ctx","definitions"],"mappings":";;;;;;AAAA;;;;;;;;;;;AAoBE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AAJK,MAAMA,iBAAAA,SACHC,+CAAAA,CAAAA;AAaRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,WAAW,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGL,UAAAA;AAEhE,YAAA,OAAOM,iEAAAA,CAAiC;AACtCR,gBAAAA,MAAAA;gBACAS,cAAAA,EAAgB,QAAA;AAChBN,gBAAAA,IAAAA;AACAI,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;AAChC,oBAAA,OAAO,WAAa;4BAClBC,QAAAA,EAAU;AACR,gCAAA;oCACEC,IAAAA,EAAM,MAAA;oCACNC,OAAAA,EAAS;wCACPC,IAAAA,EAAM,MAAA;AACNC,wCAAAA,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,wBAAwB,EAAEQ,YAAAA,CAAAA;AAClD;AACF;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,iBAAAA,CAAAA,CAAkBC,KAAK,EAAA;oBACrB,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACEC,IAAAA,EAAM,MAAA;gCACNC,OAAAA,EAAS;oCACPC,IAAAA,EAAM,MAAA;oCACNC,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,oBAAoB,EAAEe,KAAAA,CAAMC,OAAO,CAAA;AAC3D;AACF;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAC,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+DAAAA,CACjBvB,MAAAA,EACA,UACAG,IAAAA,EACAD,UAAAA,CAAWsB,SAAS,EACpBH,WAAAA,CAAAA;oBAGF,OAAOtB,SAAAA,CAAU0B,cAAc,CAC7BtB,IAAAA,EACA;AACEC,wBAAAA,KAAAA;AACAC,wBAAAA,WAAAA;;AAEAC,wBAAAA;qBACF,EACAgB,UAAAA,CAAAA;AAEJ,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAnEA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI1B,MAAM;AAC3B,IAAA;AA8DF;;;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry.mjs';
|
|
2
|
+
import { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration.mjs';
|
|
3
|
+
import { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics.mjs';
|
|
4
|
+
|
|
5
|
+
// eslint-disable-next-line import/extensions
|
|
6
|
+
function _class_private_field_loose_base(receiver, privateKey) {
|
|
7
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
8
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
9
|
+
}
|
|
10
|
+
return receiver;
|
|
11
|
+
}
|
|
12
|
+
var id = 0;
|
|
13
|
+
function _class_private_field_loose_key(name) {
|
|
14
|
+
return "__private_" + id++ + "_" + name;
|
|
15
|
+
}
|
|
16
|
+
var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
|
|
17
|
+
class McpPromptRegistry extends McpCapabilityRegistryBase {
|
|
18
|
+
bind(mcpServer) {
|
|
19
|
+
const strapi = _class_private_field_loose_base(this, _strapi)[_strapi];
|
|
20
|
+
super.register((definition)=>{
|
|
21
|
+
const { name, title, description, argsSchema, createHandler } = definition;
|
|
22
|
+
return createSafeCapabilityRegistration({
|
|
23
|
+
strapi,
|
|
24
|
+
capabilityType: 'Prompt',
|
|
25
|
+
name,
|
|
26
|
+
createHandler,
|
|
27
|
+
createFallbackHandler (errorMessage) {
|
|
28
|
+
return async ()=>({
|
|
29
|
+
messages: [
|
|
30
|
+
{
|
|
31
|
+
role: 'user',
|
|
32
|
+
content: {
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: `Prompt "${name}" failed to initialize: ${errorMessage}`
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
createErrorResult (error) {
|
|
41
|
+
return {
|
|
42
|
+
messages: [
|
|
43
|
+
{
|
|
44
|
+
role: 'user',
|
|
45
|
+
content: {
|
|
46
|
+
type: 'text',
|
|
47
|
+
text: `Prompt "${name}" execution failed: ${error.message}`
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
registerWithSdk (safeHandler) {
|
|
54
|
+
const sdkHandler = wrapCapabilityHandlerForMetrics(strapi, 'prompt', name, definition.telemetry, safeHandler);
|
|
55
|
+
return mcpServer.registerPrompt(name, {
|
|
56
|
+
title,
|
|
57
|
+
description,
|
|
58
|
+
// @ts-expect-error - Internal handler type mismatch due to optional argsSchema
|
|
59
|
+
argsSchema
|
|
60
|
+
}, sdkHandler);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
constructor(ctx){
|
|
66
|
+
super(ctx.definitions), Object.defineProperty(this, _strapi, {
|
|
67
|
+
writable: true,
|
|
68
|
+
value: void 0
|
|
69
|
+
});
|
|
70
|
+
_class_private_field_loose_base(this, _strapi)[_strapi] = ctx.strapi;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { McpPromptRegistry };
|
|
75
|
+
//# sourceMappingURL=prompt-registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registry.mjs","sources":["../../../src/services/mcp/prompt-registry.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport type { McpServer, RegisteredPrompt } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpPromptDefinition = <Definition extends Modules.MCP.McpPromptDefinition>(\n prompt: Definition\n): Definition => prompt;\n\nexport class McpPromptRegistry\n extends McpCapabilityRegistryBase<'prompt', Modules.MCP.McpPromptDefinition, RegisteredPrompt>\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'prompt', Modules.MCP.McpPromptDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, title, description, argsSchema, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Prompt',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async () => ({\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" failed to initialize: ${errorMessage}`,\n },\n },\n ],\n });\n },\n createErrorResult(error) {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Prompt \"${name}\" execution failed: ${error.message}`,\n },\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'prompt',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerPrompt(\n name,\n {\n title,\n description,\n // @ts-expect-error - Internal handler type mismatch due to optional argsSchema\n argsSchema,\n },\n sdkHandler\n );\n },\n });\n });\n }\n}\n"],"names":["McpPromptRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","title","description","argsSchema","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","messages","role","content","type","text","createErrorResult","error","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerPrompt","ctx","definitions"],"mappings":";;;;AAAA;;;;;;;;;;;AAoBE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AAJK,MAAMA,iBAAAA,SACHC,yBAAAA,CAAAA;AAaRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,WAAW,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGL,UAAAA;AAEhE,YAAA,OAAOM,gCAAAA,CAAiC;AACtCR,gBAAAA,MAAAA;gBACAS,cAAAA,EAAgB,QAAA;AAChBN,gBAAAA,IAAAA;AACAI,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;AAChC,oBAAA,OAAO,WAAa;4BAClBC,QAAAA,EAAU;AACR,gCAAA;oCACEC,IAAAA,EAAM,MAAA;oCACNC,OAAAA,EAAS;wCACPC,IAAAA,EAAM,MAAA;AACNC,wCAAAA,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,wBAAwB,EAAEQ,YAAAA,CAAAA;AAClD;AACF;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,iBAAAA,CAAAA,CAAkBC,KAAK,EAAA;oBACrB,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACEC,IAAAA,EAAM,MAAA;gCACNC,OAAAA,EAAS;oCACPC,IAAAA,EAAM,MAAA;oCACNC,IAAAA,EAAM,CAAC,QAAQ,EAAEb,IAAAA,CAAK,oBAAoB,EAAEe,KAAAA,CAAMC,OAAO,CAAA;AAC3D;AACF;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAC,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBvB,MAAAA,EACA,UACAG,IAAAA,EACAD,UAAAA,CAAWsB,SAAS,EACpBH,WAAAA,CAAAA;oBAGF,OAAOtB,SAAAA,CAAU0B,cAAc,CAC7BtB,IAAAA,EACA;AACEC,wBAAAA,KAAAA;AACAC,wBAAAA,WAAAA;;AAEAC,wBAAAA;qBACF,EACAgB,UAAAA,CAAAA;AAEJ,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAnEA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI1B,MAAM;AAC3B,IAAA;AA8DF;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { McpServer, RegisteredResource } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { Core, Modules } from '@strapi/types';
|
|
3
|
+
import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
|
|
4
|
+
import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
|
|
5
|
+
export declare const makeMcpResourceDefinition: <Definition extends Modules.MCP.McpResourceDefinition<string>>(resource: Definition) => Definition;
|
|
6
|
+
export declare class McpResourceRegistry extends McpCapabilityRegistryBase<'resource', Modules.MCP.McpResourceDefinition, RegisteredResource> implements McpCapabilityRegistry {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(ctx: {
|
|
9
|
+
strapi: Core.Strapi;
|
|
10
|
+
definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;
|
|
11
|
+
});
|
|
12
|
+
bind(mcpServer: McpServer): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=resource-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/resource-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAI1C,eAAO,MAAM,yBAAyB,2EAC1B,UAAU,KACnB,UAAsB,CAAC;AAE1B,qBAAa,mBACX,SAAQ,yBAAyB,CAC/B,UAAU,EACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,EACjC,kBAAkB,CAEpB,YAAW,qBAAqB;;gBAIpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;KAC7F;IAKD,IAAI,CAAC,SAAS,EAAE,SAAS;CA+C1B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var McpCapabilityRegistry = require('./internal/McpCapabilityRegistry.js');
|
|
4
|
+
var createSafeCapabilityRegistration = require('./utils/createSafeCapabilityRegistration.js');
|
|
5
|
+
var wrapCapabilityHandlerForMetrics = require('./metrics/wrapCapabilityHandlerForMetrics.js');
|
|
6
|
+
|
|
7
|
+
function _class_private_field_loose_base(receiver, privateKey) {
|
|
8
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
9
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
10
|
+
}
|
|
11
|
+
return receiver;
|
|
12
|
+
}
|
|
13
|
+
var id = 0;
|
|
14
|
+
function _class_private_field_loose_key(name) {
|
|
15
|
+
return "__private_" + id++ + "_" + name;
|
|
16
|
+
}
|
|
17
|
+
var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
|
|
18
|
+
class McpResourceRegistry extends McpCapabilityRegistry.McpCapabilityRegistryBase {
|
|
19
|
+
bind(mcpServer) {
|
|
20
|
+
const strapi = _class_private_field_loose_base(this, _strapi)[_strapi];
|
|
21
|
+
super.register((definition)=>{
|
|
22
|
+
const { name, uri, metadata, createHandler } = definition;
|
|
23
|
+
return createSafeCapabilityRegistration.createSafeCapabilityRegistration({
|
|
24
|
+
strapi,
|
|
25
|
+
capabilityType: 'Resource',
|
|
26
|
+
name,
|
|
27
|
+
createHandler,
|
|
28
|
+
createFallbackHandler (errorMessage) {
|
|
29
|
+
return async (resourceUri)=>({
|
|
30
|
+
contents: [
|
|
31
|
+
{
|
|
32
|
+
uri: resourceUri.href,
|
|
33
|
+
text: `Resource "${name}" failed to initialize: ${errorMessage}`,
|
|
34
|
+
mimeType: 'text/plain'
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
createErrorResult (error, args) {
|
|
40
|
+
return {
|
|
41
|
+
contents: [
|
|
42
|
+
{
|
|
43
|
+
uri: args[0] instanceof URL ? args[0].href : uri,
|
|
44
|
+
text: `Resource "${name}" execution failed: ${error.message}`,
|
|
45
|
+
mimeType: 'text/plain'
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
registerWithSdk (safeHandler) {
|
|
51
|
+
const sdkHandler = wrapCapabilityHandlerForMetrics.wrapCapabilityHandlerForMetrics(strapi, 'resource', name, definition.telemetry, safeHandler);
|
|
52
|
+
return mcpServer.registerResource(name, uri, metadata, sdkHandler);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
constructor(ctx){
|
|
58
|
+
super(ctx.definitions), Object.defineProperty(this, _strapi, {
|
|
59
|
+
writable: true,
|
|
60
|
+
value: void 0
|
|
61
|
+
});
|
|
62
|
+
_class_private_field_loose_base(this, _strapi)[_strapi] = ctx.strapi;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
exports.McpResourceRegistry = McpResourceRegistry;
|
|
67
|
+
//# sourceMappingURL=resource-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registry.js","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpResourceDefinition = <Definition extends Modules.MCP.McpResourceDefinition>(\n resource: Definition\n): Definition => resource;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;;;AA0BE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMA,mBAAAA,SACHC,+CAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGJ,UAAAA;AAE/C,YAAA,OAAOK,iEAAAA,CAAiC;AACtCP,gBAAAA,MAAAA;gBACAQ,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+DAAAA,CACjBxB,MAAAA,EACA,YACAG,IAAAA,EACAD,UAAAA,CAAWuB,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOvB,SAAAA,CAAU2B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI3B,MAAM;AAC3B,IAAA;AAiDF;;;;"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry.mjs';
|
|
2
|
+
import { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration.mjs';
|
|
3
|
+
import { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics.mjs';
|
|
4
|
+
|
|
5
|
+
function _class_private_field_loose_base(receiver, privateKey) {
|
|
6
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
7
|
+
throw new TypeError("attempted to use private field on non-instance");
|
|
8
|
+
}
|
|
9
|
+
return receiver;
|
|
10
|
+
}
|
|
11
|
+
var id = 0;
|
|
12
|
+
function _class_private_field_loose_key(name) {
|
|
13
|
+
return "__private_" + id++ + "_" + name;
|
|
14
|
+
}
|
|
15
|
+
var _strapi = /*#__PURE__*/ _class_private_field_loose_key("_strapi");
|
|
16
|
+
class McpResourceRegistry extends McpCapabilityRegistryBase {
|
|
17
|
+
bind(mcpServer) {
|
|
18
|
+
const strapi = _class_private_field_loose_base(this, _strapi)[_strapi];
|
|
19
|
+
super.register((definition)=>{
|
|
20
|
+
const { name, uri, metadata, createHandler } = definition;
|
|
21
|
+
return createSafeCapabilityRegistration({
|
|
22
|
+
strapi,
|
|
23
|
+
capabilityType: 'Resource',
|
|
24
|
+
name,
|
|
25
|
+
createHandler,
|
|
26
|
+
createFallbackHandler (errorMessage) {
|
|
27
|
+
return async (resourceUri)=>({
|
|
28
|
+
contents: [
|
|
29
|
+
{
|
|
30
|
+
uri: resourceUri.href,
|
|
31
|
+
text: `Resource "${name}" failed to initialize: ${errorMessage}`,
|
|
32
|
+
mimeType: 'text/plain'
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
createErrorResult (error, args) {
|
|
38
|
+
return {
|
|
39
|
+
contents: [
|
|
40
|
+
{
|
|
41
|
+
uri: args[0] instanceof URL ? args[0].href : uri,
|
|
42
|
+
text: `Resource "${name}" execution failed: ${error.message}`,
|
|
43
|
+
mimeType: 'text/plain'
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
registerWithSdk (safeHandler) {
|
|
49
|
+
const sdkHandler = wrapCapabilityHandlerForMetrics(strapi, 'resource', name, definition.telemetry, safeHandler);
|
|
50
|
+
return mcpServer.registerResource(name, uri, metadata, sdkHandler);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
constructor(ctx){
|
|
56
|
+
super(ctx.definitions), Object.defineProperty(this, _strapi, {
|
|
57
|
+
writable: true,
|
|
58
|
+
value: void 0
|
|
59
|
+
});
|
|
60
|
+
_class_private_field_loose_base(this, _strapi)[_strapi] = ctx.strapi;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { McpResourceRegistry };
|
|
65
|
+
//# sourceMappingURL=resource-registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registry.mjs","sources":["../../../src/services/mcp/resource-registry.ts"],"sourcesContent":["import type {\n McpServer,\n RegisteredResource,\n // eslint-disable-next-line import/extensions\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Core, Modules } from '@strapi/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport {\n type McpCapabilityRegistry,\n McpCapabilityRegistryBase,\n} from './internal/McpCapabilityRegistry';\nimport { createSafeCapabilityRegistration } from './utils/createSafeCapabilityRegistration';\nimport { wrapCapabilityHandlerForMetrics } from './metrics/wrapCapabilityHandlerForMetrics';\n\nexport const makeMcpResourceDefinition = <Definition extends Modules.MCP.McpResourceDefinition>(\n resource: Definition\n): Definition => resource;\n\nexport class McpResourceRegistry\n extends McpCapabilityRegistryBase<\n 'resource',\n Modules.MCP.McpResourceDefinition,\n RegisteredResource\n >\n implements McpCapabilityRegistry\n{\n #strapi: Core.Strapi;\n\n constructor(ctx: {\n strapi: Core.Strapi;\n definitions: McpCapabilityDefinitionRegistry<'resource', Modules.MCP.McpResourceDefinition>;\n }) {\n super(ctx.definitions);\n this.#strapi = ctx.strapi;\n }\n\n bind(mcpServer: McpServer) {\n const strapi = this.#strapi;\n\n super.register((definition) => {\n const { name, uri, metadata, createHandler } = definition;\n\n return createSafeCapabilityRegistration({\n strapi,\n capabilityType: 'Resource',\n name,\n createHandler,\n createFallbackHandler(errorMessage) {\n return async (resourceUri) => ({\n contents: [\n {\n uri: resourceUri.href,\n text: `Resource \"${name}\" failed to initialize: ${errorMessage}`,\n mimeType: 'text/plain',\n },\n ],\n });\n },\n createErrorResult(error, args) {\n return {\n contents: [\n {\n uri: args[0] instanceof URL ? args[0].href : uri,\n text: `Resource \"${name}\" execution failed: ${error.message}`,\n mimeType: 'text/plain',\n },\n ],\n };\n },\n registerWithSdk(safeHandler) {\n const sdkHandler = wrapCapabilityHandlerForMetrics(\n strapi,\n 'resource',\n name,\n definition.telemetry,\n safeHandler\n );\n\n return mcpServer.registerResource(name, uri, metadata, sdkHandler);\n },\n });\n });\n }\n}\n"],"names":["McpResourceRegistry","McpCapabilityRegistryBase","bind","mcpServer","strapi","register","definition","name","uri","metadata","createHandler","createSafeCapabilityRegistration","capabilityType","createFallbackHandler","errorMessage","resourceUri","contents","href","text","mimeType","createErrorResult","error","args","URL","message","registerWithSdk","safeHandler","sdkHandler","wrapCapabilityHandlerForMetrics","telemetry","registerResource","ctx","definitions"],"mappings":";;;;;;;;;;;;;;AA0BE,IAAA,OAAA,iBAAA,8BAAA,CAAA,SAAA,CAAA;AARK,MAAMA,mBAAAA,SACHC,yBAAAA,CAAAA;AAiBRC,IAAAA,IAAAA,CAAKC,SAAoB,EAAE;AACzB,QAAA,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA;QAEpB,KAAK,CAACC,SAAS,CAACC,UAAAA,GAAAA;YACd,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGJ,UAAAA;AAE/C,YAAA,OAAOK,gCAAAA,CAAiC;AACtCP,gBAAAA,MAAAA;gBACAQ,cAAAA,EAAgB,UAAA;AAChBL,gBAAAA,IAAAA;AACAG,gBAAAA,aAAAA;AACAG,gBAAAA,qBAAAA,CAAAA,CAAsBC,YAAY,EAAA;oBAChC,OAAO,OAAOC,eAAiB;4BAC7BC,QAAAA,EAAU;AACR,gCAAA;AACER,oCAAAA,GAAAA,EAAKO,YAAYE,IAAI;AACrBC,oCAAAA,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,wBAAwB,EAAEO,YAAAA,CAAAA,CAAc;oCAChEK,QAAAA,EAAU;AACZ;AACD;yBACH,CAAA;AACF,gBAAA,CAAA;gBACAC,iBAAAA,CAAAA,CAAkBC,KAAK,EAAEC,IAAI,EAAA;oBAC3B,OAAO;wBACLN,QAAAA,EAAU;AACR,4BAAA;gCACER,GAAAA,EAAKc,IAAI,CAAC,CAAA,CAAE,YAAYC,GAAAA,GAAMD,IAAI,CAAC,CAAA,CAAE,CAACL,IAAI,GAAGT,GAAAA;gCAC7CU,IAAAA,EAAM,CAAC,UAAU,EAAEX,IAAAA,CAAK,oBAAoB,EAAEc,KAAAA,CAAMG,OAAO,CAAA,CAAE;gCAC7DL,QAAAA,EAAU;AACZ;AACD;AACH,qBAAA;AACF,gBAAA,CAAA;AACAM,gBAAAA,eAAAA,CAAAA,CAAgBC,WAAW,EAAA;AACzB,oBAAA,MAAMC,aAAaC,+BAAAA,CACjBxB,MAAAA,EACA,YACAG,IAAAA,EACAD,UAAAA,CAAWuB,SAAS,EACpBH,WAAAA,CAAAA;AAGF,oBAAA,OAAOvB,SAAAA,CAAU2B,gBAAgB,CAACvB,IAAAA,EAAMC,KAAKC,QAAAA,EAAUkB,UAAAA,CAAAA;AACzD,gBAAA;AACF,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AAtDA,IAAA,WAAA,CAAYI,GAGX,CAAE;AACD,QAAA,KAAK,CAACA,GAAAA,CAAIC,WAAW,CAAA,EANvB,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;mBAAA;;AAOE,QAAA,+BAAA,CAAA,IAAI,EAAC,OAAA,CAAA,CAAA,OAAA,CAAA,GAAUD,IAAI3B,MAAM;AAC3B,IAAA;AAiDF;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
import { McpConfiguration } from './internal/McpConfiguration';
|
|
3
|
+
export type McpRouteHandlers = {
|
|
4
|
+
handlePost: Core.MiddlewareHandler;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Creates MCP route definitions for registration with Strapi server.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const createMcpRoutes: (config: McpConfiguration, handlers: McpRouteHandlers) => Omit<Core.Route, 'info'>[];
|
|
11
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAgB/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,WAClB,gBAAgB,YACd,gBAAgB,KACzB,KAAK,KAAK,KAAK,EAAE,MAAM,CAAC,EAU1B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var sendJsonRpcError = require('./utils/sendJsonRpcError.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Handler for unsupported HTTP methods on /mcp endpoint.
|
|
7
|
+
* Returns JSON-RPC error instead of plain text so MCP clients can parse it.
|
|
8
|
+
*/ const handleMethodNotAllowed = async (ctx)=>{
|
|
9
|
+
// Opt out of Koa's response phase — sendJsonRpcError writes directly to ctx.res.
|
|
10
|
+
ctx.respond = false;
|
|
11
|
+
// ctx.set() writes to Koa's in-memory headers which are never flushed when ctx.respond = false.
|
|
12
|
+
// Use res.setHeader() so the header is included when sendJsonRpcError calls res.writeHead().
|
|
13
|
+
ctx.res.setHeader('Allow', 'POST');
|
|
14
|
+
sendJsonRpcError.sendJsonRpcError(ctx.res, 'METHOD_NOT_ALLOWED');
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Creates MCP route definitions for registration with Strapi server.
|
|
18
|
+
* @internal
|
|
19
|
+
*/ const createMcpRoutes = (config, handlers)=>{
|
|
20
|
+
const noAuth = {
|
|
21
|
+
auth: false
|
|
22
|
+
};
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
method: 'POST',
|
|
26
|
+
path: config.path,
|
|
27
|
+
handler: handlers.handlePost,
|
|
28
|
+
config: noAuth
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
method: 'GET',
|
|
32
|
+
path: config.path,
|
|
33
|
+
handler: handleMethodNotAllowed,
|
|
34
|
+
config: noAuth
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
method: 'DELETE',
|
|
38
|
+
path: config.path,
|
|
39
|
+
handler: handleMethodNotAllowed,
|
|
40
|
+
config: noAuth
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
method: 'PUT',
|
|
44
|
+
path: config.path,
|
|
45
|
+
handler: handleMethodNotAllowed,
|
|
46
|
+
config: noAuth
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
method: 'PATCH',
|
|
50
|
+
path: config.path,
|
|
51
|
+
handler: handleMethodNotAllowed,
|
|
52
|
+
config: noAuth
|
|
53
|
+
}
|
|
54
|
+
];
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
exports.createMcpRoutes = createMcpRoutes;
|
|
58
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sources":["../../../src/services/mcp/routes.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { sendJsonRpcError } from './utils/sendJsonRpcError';\n\n/**\n * Handler for unsupported HTTP methods on /mcp endpoint.\n * Returns JSON-RPC error instead of plain text so MCP clients can parse it.\n */\nconst handleMethodNotAllowed: Core.MiddlewareHandler = async (ctx) => {\n // Opt out of Koa's response phase — sendJsonRpcError writes directly to ctx.res.\n ctx.respond = false;\n // ctx.set() writes to Koa's in-memory headers which are never flushed when ctx.respond = false.\n // Use res.setHeader() so the header is included when sendJsonRpcError calls res.writeHead().\n ctx.res.setHeader('Allow', 'POST');\n sendJsonRpcError(ctx.res, 'METHOD_NOT_ALLOWED');\n};\n\nexport type McpRouteHandlers = {\n handlePost: Core.MiddlewareHandler;\n};\n\n/**\n * Creates MCP route definitions for registration with Strapi server.\n * @internal\n */\nexport const createMcpRoutes = (\n config: McpConfiguration,\n handlers: McpRouteHandlers\n): Omit<Core.Route, 'info'>[] => {\n const noAuth = { auth: false } as const;\n\n return [\n { method: 'POST', path: config.path, handler: handlers.handlePost, config: noAuth },\n { method: 'GET', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'DELETE', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'PUT', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'PATCH', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n ];\n};\n"],"names":["handleMethodNotAllowed","ctx","respond","res","setHeader","sendJsonRpcError","createMcpRoutes","config","handlers","noAuth","auth","method","path","handler","handlePost"],"mappings":";;;;AAIA;;;IAIA,MAAMA,yBAAiD,OAAOC,GAAAA,GAAAA;;AAE5DA,IAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;;;AAGdD,IAAAA,GAAAA,CAAIE,GAAG,CAACC,SAAS,CAAC,OAAA,EAAS,MAAA,CAAA;IAC3BC,iCAAAA,CAAiBJ,GAAAA,CAAIE,GAAG,EAAE,oBAAA,CAAA;AAC5B,CAAA;AAMA;;;AAGC,IACM,MAAMG,eAAAA,GAAkB,CAC7BC,MAAAA,EACAC,QAAAA,GAAAA;AAEA,IAAA,MAAMC,MAAAA,GAAS;QAAEC,IAAAA,EAAM;AAAM,KAAA;IAE7B,OAAO;AACL,QAAA;YAAEC,MAAAA,EAAQ,MAAA;AAAQC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;AAAEC,YAAAA,OAAAA,EAASL,SAASM,UAAU;YAAEP,MAAAA,EAAQE;AAAO,SAAA;AAClF,QAAA;YAAEE,MAAAA,EAAQ,KAAA;AAAOC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACpF,QAAA;YAAEE,MAAAA,EAAQ,QAAA;AAAUC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACvF,QAAA;YAAEE,MAAAA,EAAQ,KAAA;AAAOC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACpF,QAAA;YAAEE,MAAAA,EAAQ,OAAA;AAASC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO;AACvF,KAAA;AACH;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { sendJsonRpcError } from './utils/sendJsonRpcError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Handler for unsupported HTTP methods on /mcp endpoint.
|
|
5
|
+
* Returns JSON-RPC error instead of plain text so MCP clients can parse it.
|
|
6
|
+
*/ const handleMethodNotAllowed = async (ctx)=>{
|
|
7
|
+
// Opt out of Koa's response phase — sendJsonRpcError writes directly to ctx.res.
|
|
8
|
+
ctx.respond = false;
|
|
9
|
+
// ctx.set() writes to Koa's in-memory headers which are never flushed when ctx.respond = false.
|
|
10
|
+
// Use res.setHeader() so the header is included when sendJsonRpcError calls res.writeHead().
|
|
11
|
+
ctx.res.setHeader('Allow', 'POST');
|
|
12
|
+
sendJsonRpcError(ctx.res, 'METHOD_NOT_ALLOWED');
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Creates MCP route definitions for registration with Strapi server.
|
|
16
|
+
* @internal
|
|
17
|
+
*/ const createMcpRoutes = (config, handlers)=>{
|
|
18
|
+
const noAuth = {
|
|
19
|
+
auth: false
|
|
20
|
+
};
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
method: 'POST',
|
|
24
|
+
path: config.path,
|
|
25
|
+
handler: handlers.handlePost,
|
|
26
|
+
config: noAuth
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
method: 'GET',
|
|
30
|
+
path: config.path,
|
|
31
|
+
handler: handleMethodNotAllowed,
|
|
32
|
+
config: noAuth
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
method: 'DELETE',
|
|
36
|
+
path: config.path,
|
|
37
|
+
handler: handleMethodNotAllowed,
|
|
38
|
+
config: noAuth
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
method: 'PUT',
|
|
42
|
+
path: config.path,
|
|
43
|
+
handler: handleMethodNotAllowed,
|
|
44
|
+
config: noAuth
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
method: 'PATCH',
|
|
48
|
+
path: config.path,
|
|
49
|
+
handler: handleMethodNotAllowed,
|
|
50
|
+
config: noAuth
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { createMcpRoutes };
|
|
56
|
+
//# sourceMappingURL=routes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.mjs","sources":["../../../src/services/mcp/routes.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { sendJsonRpcError } from './utils/sendJsonRpcError';\n\n/**\n * Handler for unsupported HTTP methods on /mcp endpoint.\n * Returns JSON-RPC error instead of plain text so MCP clients can parse it.\n */\nconst handleMethodNotAllowed: Core.MiddlewareHandler = async (ctx) => {\n // Opt out of Koa's response phase — sendJsonRpcError writes directly to ctx.res.\n ctx.respond = false;\n // ctx.set() writes to Koa's in-memory headers which are never flushed when ctx.respond = false.\n // Use res.setHeader() so the header is included when sendJsonRpcError calls res.writeHead().\n ctx.res.setHeader('Allow', 'POST');\n sendJsonRpcError(ctx.res, 'METHOD_NOT_ALLOWED');\n};\n\nexport type McpRouteHandlers = {\n handlePost: Core.MiddlewareHandler;\n};\n\n/**\n * Creates MCP route definitions for registration with Strapi server.\n * @internal\n */\nexport const createMcpRoutes = (\n config: McpConfiguration,\n handlers: McpRouteHandlers\n): Omit<Core.Route, 'info'>[] => {\n const noAuth = { auth: false } as const;\n\n return [\n { method: 'POST', path: config.path, handler: handlers.handlePost, config: noAuth },\n { method: 'GET', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'DELETE', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'PUT', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n { method: 'PATCH', path: config.path, handler: handleMethodNotAllowed, config: noAuth },\n ];\n};\n"],"names":["handleMethodNotAllowed","ctx","respond","res","setHeader","sendJsonRpcError","createMcpRoutes","config","handlers","noAuth","auth","method","path","handler","handlePost"],"mappings":";;AAIA;;;IAIA,MAAMA,yBAAiD,OAAOC,GAAAA,GAAAA;;AAE5DA,IAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;;;AAGdD,IAAAA,GAAAA,CAAIE,GAAG,CAACC,SAAS,CAAC,OAAA,EAAS,MAAA,CAAA;IAC3BC,gBAAAA,CAAiBJ,GAAAA,CAAIE,GAAG,EAAE,oBAAA,CAAA;AAC5B,CAAA;AAMA;;;AAGC,IACM,MAAMG,eAAAA,GAAkB,CAC7BC,MAAAA,EACAC,QAAAA,GAAAA;AAEA,IAAA,MAAMC,MAAAA,GAAS;QAAEC,IAAAA,EAAM;AAAM,KAAA;IAE7B,OAAO;AACL,QAAA;YAAEC,MAAAA,EAAQ,MAAA;AAAQC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;AAAEC,YAAAA,OAAAA,EAASL,SAASM,UAAU;YAAEP,MAAAA,EAAQE;AAAO,SAAA;AAClF,QAAA;YAAEE,MAAAA,EAAQ,KAAA;AAAOC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACpF,QAAA;YAAEE,MAAAA,EAAQ,QAAA;AAAUC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACvF,QAAA;YAAEE,MAAAA,EAAQ,KAAA;AAAOC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO,SAAA;AACpF,QAAA;YAAEE,MAAAA,EAAQ,OAAA;AAASC,YAAAA,IAAAA,EAAML,OAAOK,IAAI;YAAEC,OAAAA,EAASb,sBAAAA;YAAwBO,MAAAA,EAAQE;AAAO;AACvF,KAAA;AACH;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { Core, Modules } from '@strapi/types';
|
|
3
|
+
import { z } from '@strapi/utils';
|
|
4
|
+
import { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';
|
|
5
|
+
import { type McpCapabilityRegistry, McpCapabilityRegistryBase } from './internal/McpCapabilityRegistry';
|
|
6
|
+
import type { McpAdminTokenAbility } from './authentication';
|
|
7
|
+
export declare function makeMcpToolDefinition<Name extends string, Title extends string, Description extends string, OutputSchema extends z.ZodObject<z.ZodRawShape>, InputSchema extends z.ZodObject<z.ZodRawShape> | undefined = undefined, Access extends Modules.MCP.McpCapabilityAccess = Modules.MCP.McpCapabilityAccess>(tool: {
|
|
8
|
+
name: Name;
|
|
9
|
+
title: Title;
|
|
10
|
+
description: Description;
|
|
11
|
+
resolveInputSchema?: (context: Modules.MCP.McpHandlerContext) => InputSchema;
|
|
12
|
+
resolveOutputSchema: (context: Modules.MCP.McpHandlerContext) => OutputSchema;
|
|
13
|
+
createHandler: (strapi: Core.Strapi, context: Modules.MCP.McpHandlerContext) => Modules.MCP.McpToolHandler<NoInfer<InputSchema>, NoInfer<OutputSchema>>;
|
|
14
|
+
} & Access): Modules.MCP.McpToolDefinition<Name, InputSchema, OutputSchema, Title, Description> & Access;
|
|
15
|
+
export declare class McpToolRegistry extends McpCapabilityRegistryBase<'tool', Modules.MCP.McpToolDefinition, RegisteredTool> implements McpCapabilityRegistry {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(ctx: {
|
|
18
|
+
strapi: Core.Strapi;
|
|
19
|
+
definitions: McpCapabilityDefinitionRegistry<'tool', Modules.MCP.McpToolDefinition>;
|
|
20
|
+
ability: McpAdminTokenAbility;
|
|
21
|
+
user: Modules.MCP.McpHandlerContext['user'];
|
|
22
|
+
});
|
|
23
|
+
bind(mcpServer: McpServer): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,wBAAgB,qBAAqB,CACnC,IAAI,SAAS,MAAM,EACnB,KAAK,SAAS,MAAM,EACpB,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAC/C,WAAW,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,SAAS,EACtE,MAAM,SAAS,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAEhF,IAAI,EAAE;IACJ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,WAAW,CAAC;IAC7E,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,YAAY,CAAC;IAC9E,aAAa,EAAE,CACb,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KACnC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CAC9E,GAAG,MAAM,GACT,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,CAS7F;AAED,qBAAa,eACX,SAAQ,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CACvF,YAAW,qBAAqB;;gBAQpB,GAAG,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpF,OAAO,EAAE,oBAAoB,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAC7C;IAOD,IAAI,CAAC,SAAS,EAAE,SAAS;CAwE1B"}
|