@creezio/mcp-facade 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +420 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/admin/adapters.d.ts +10 -0
  4. package/dist/admin/adapters.d.ts.map +1 -0
  5. package/dist/admin/adapters.js +21 -0
  6. package/dist/admin/adapters.js.map +1 -0
  7. package/dist/admin/http-routes.d.ts +11 -0
  8. package/dist/admin/http-routes.d.ts.map +1 -0
  9. package/dist/admin/http-routes.js +66 -0
  10. package/dist/admin/http-routes.js.map +1 -0
  11. package/dist/admin/index.d.ts +12 -0
  12. package/dist/admin/index.d.ts.map +1 -0
  13. package/dist/admin/index.js +8 -0
  14. package/dist/admin/index.js.map +1 -0
  15. package/dist/admin/mcp-admin.d.ts +165 -0
  16. package/dist/admin/mcp-admin.d.ts.map +1 -0
  17. package/dist/admin/mcp-admin.js +419 -0
  18. package/dist/admin/mcp-admin.js.map +1 -0
  19. package/dist/admin/tool-policy-guard.d.ts +106 -0
  20. package/dist/admin/tool-policy-guard.d.ts.map +1 -0
  21. package/dist/admin/tool-policy-guard.js +187 -0
  22. package/dist/admin/tool-policy-guard.js.map +1 -0
  23. package/dist/admin/types.d.ts +62 -0
  24. package/dist/admin/types.d.ts.map +1 -0
  25. package/dist/admin/types.js +6 -0
  26. package/dist/admin/types.js.map +1 -0
  27. package/dist/brand-facade.d.ts +41 -0
  28. package/dist/brand-facade.d.ts.map +1 -0
  29. package/dist/brand-facade.js +67 -0
  30. package/dist/brand-facade.js.map +1 -0
  31. package/dist/core-tools.d.ts +22 -0
  32. package/dist/core-tools.d.ts.map +1 -0
  33. package/dist/core-tools.js +93 -0
  34. package/dist/core-tools.js.map +1 -0
  35. package/dist/dyn-import.d.ts +13 -0
  36. package/dist/dyn-import.d.ts.map +1 -0
  37. package/dist/dyn-import.js +2 -0
  38. package/dist/dyn-import.js.map +1 -0
  39. package/dist/facade.d.ts +40 -0
  40. package/dist/facade.d.ts.map +1 -0
  41. package/dist/facade.js +334 -0
  42. package/dist/facade.js.map +1 -0
  43. package/dist/hono-bind.d.ts +48 -0
  44. package/dist/hono-bind.d.ts.map +1 -0
  45. package/dist/hono-bind.js +70 -0
  46. package/dist/hono-bind.js.map +1 -0
  47. package/dist/hono-proxy.d.ts +63 -0
  48. package/dist/hono-proxy.d.ts.map +1 -0
  49. package/dist/hono-proxy.js +185 -0
  50. package/dist/hono-proxy.js.map +1 -0
  51. package/dist/index.d.ts +32 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/jwt.d.ts +20 -0
  56. package/dist/jwt.d.ts.map +1 -0
  57. package/dist/jwt.js +84 -0
  58. package/dist/jwt.js.map +1 -0
  59. package/dist/module-ops-tools.d.ts +43 -0
  60. package/dist/module-ops-tools.d.ts.map +1 -0
  61. package/dist/module-ops-tools.js +301 -0
  62. package/dist/module-ops-tools.js.map +1 -0
  63. package/dist/namespace.d.ts +23 -0
  64. package/dist/namespace.d.ts.map +1 -0
  65. package/dist/namespace.js +51 -0
  66. package/dist/namespace.js.map +1 -0
  67. package/dist/oauth/cors-policy.d.ts +3 -0
  68. package/dist/oauth/cors-policy.d.ts.map +1 -0
  69. package/dist/oauth/cors-policy.js +25 -0
  70. package/dist/oauth/cors-policy.js.map +1 -0
  71. package/dist/oauth/hono-app.d.ts +18 -0
  72. package/dist/oauth/hono-app.d.ts.map +1 -0
  73. package/dist/oauth/hono-app.js +175 -0
  74. package/dist/oauth/hono-app.js.map +1 -0
  75. package/dist/oauth/index.d.ts +9 -0
  76. package/dist/oauth/index.d.ts.map +1 -0
  77. package/dist/oauth/index.js +6 -0
  78. package/dist/oauth/index.js.map +1 -0
  79. package/dist/oauth/rate-limit.d.ts +11 -0
  80. package/dist/oauth/rate-limit.d.ts.map +1 -0
  81. package/dist/oauth/rate-limit.js +32 -0
  82. package/dist/oauth/rate-limit.js.map +1 -0
  83. package/dist/oauth/routes.d.ts +8 -0
  84. package/dist/oauth/routes.d.ts.map +1 -0
  85. package/dist/oauth/routes.js +671 -0
  86. package/dist/oauth/routes.js.map +1 -0
  87. package/dist/oauth/store.d.ts +113 -0
  88. package/dist/oauth/store.d.ts.map +1 -0
  89. package/dist/oauth/store.js +390 -0
  90. package/dist/oauth/store.js.map +1 -0
  91. package/dist/oauth/types.d.ts +97 -0
  92. package/dist/oauth/types.d.ts.map +1 -0
  93. package/dist/oauth/types.js +5 -0
  94. package/dist/oauth/types.js.map +1 -0
  95. package/dist/open-external-tab-host-tools.d.ts +67 -0
  96. package/dist/open-external-tab-host-tools.d.ts.map +1 -0
  97. package/dist/open-external-tab-host-tools.js +92 -0
  98. package/dist/open-external-tab-host-tools.js.map +1 -0
  99. package/dist/policy.d.ts +59 -0
  100. package/dist/policy.d.ts.map +1 -0
  101. package/dist/policy.js +88 -0
  102. package/dist/policy.js.map +1 -0
  103. package/dist/runtime.d.ts +22 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +20 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/types.d.ts +163 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist-cjs/admin/adapters.js +27 -0
  112. package/dist-cjs/admin/adapters.js.map +1 -0
  113. package/dist-cjs/admin/http-routes.js +69 -0
  114. package/dist-cjs/admin/http-routes.js.map +1 -0
  115. package/dist-cjs/admin/index.js +40 -0
  116. package/dist-cjs/admin/index.js.map +1 -0
  117. package/dist-cjs/admin/mcp-admin.js +441 -0
  118. package/dist-cjs/admin/mcp-admin.js.map +1 -0
  119. package/dist-cjs/admin/tool-policy-guard.js +193 -0
  120. package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
  121. package/dist-cjs/admin/types.js +7 -0
  122. package/dist-cjs/admin/types.js.map +1 -0
  123. package/dist-cjs/brand-facade.js +70 -0
  124. package/dist-cjs/brand-facade.js.map +1 -0
  125. package/dist-cjs/core-tools.js +97 -0
  126. package/dist-cjs/core-tools.js.map +1 -0
  127. package/dist-cjs/dyn-import.js +5 -0
  128. package/dist-cjs/dyn-import.js.map +1 -0
  129. package/dist-cjs/facade.js +337 -0
  130. package/dist-cjs/facade.js.map +1 -0
  131. package/dist-cjs/hono-bind.js +74 -0
  132. package/dist-cjs/hono-bind.js.map +1 -0
  133. package/dist-cjs/hono-proxy.js +189 -0
  134. package/dist-cjs/hono-proxy.js.map +1 -0
  135. package/dist-cjs/index.js +120 -0
  136. package/dist-cjs/index.js.map +1 -0
  137. package/dist-cjs/jwt.js +91 -0
  138. package/dist-cjs/jwt.js.map +1 -0
  139. package/dist-cjs/module-ops-tools.js +308 -0
  140. package/dist-cjs/module-ops-tools.js.map +1 -0
  141. package/dist-cjs/namespace.js +56 -0
  142. package/dist-cjs/namespace.js.map +1 -0
  143. package/dist-cjs/oauth/cors-policy.js +29 -0
  144. package/dist-cjs/oauth/cors-policy.js.map +1 -0
  145. package/dist-cjs/oauth/hono-app.js +178 -0
  146. package/dist-cjs/oauth/hono-app.js.map +1 -0
  147. package/dist-cjs/oauth/index.js +48 -0
  148. package/dist-cjs/oauth/index.js.map +1 -0
  149. package/dist-cjs/oauth/rate-limit.js +37 -0
  150. package/dist-cjs/oauth/rate-limit.js.map +1 -0
  151. package/dist-cjs/oauth/routes.js +674 -0
  152. package/dist-cjs/oauth/routes.js.map +1 -0
  153. package/dist-cjs/oauth/store.js +418 -0
  154. package/dist-cjs/oauth/store.js.map +1 -0
  155. package/dist-cjs/oauth/types.js +6 -0
  156. package/dist-cjs/oauth/types.js.map +1 -0
  157. package/dist-cjs/open-external-tab-host-tools.js +96 -0
  158. package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
  159. package/dist-cjs/package.json +3 -0
  160. package/dist-cjs/policy.js +93 -0
  161. package/dist-cjs/policy.js.map +1 -0
  162. package/dist-cjs/runtime.js +24 -0
  163. package/dist-cjs/runtime.js.map +1 -0
  164. package/dist-cjs/types.js +3 -0
  165. package/dist-cjs/types.js.map +1 -0
  166. package/package.json +92 -0
  167. package/ui/index.ts +5 -0
  168. package/ui/mcp-admin-client.tsx +270 -0
  169. package/ui/primitives/badge.tsx +37 -0
  170. package/ui/primitives/button.tsx +44 -0
  171. package/ui/primitives/card.tsx +44 -0
  172. package/ui/primitives/cn.ts +6 -0
  173. package/ui/primitives/input.tsx +19 -0
  174. package/ui/primitives/tabs.tsx +51 -0
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Proxy façade Electron → Hono `/mcp` (D1/C2 → M9 SoT kit).
3
+ *
4
+ * Parle le transport Streamable HTTP JSON (même shape que test-mcp-oauth).
5
+ * Si l'upstream est absent ou en erreur et `fallbackLocal`, délègue à la
6
+ * façade locale (brand mounts) — zéro perte offline / tests.
7
+ */
8
+ import { resolveMcpFacadeRole, } from "./runtime.js";
9
+ async function mcpJsonRpc(baseUrl, apiKey, body) {
10
+ const headers = {
11
+ "Content-Type": "application/json",
12
+ Accept: "application/json, text/event-stream",
13
+ };
14
+ if (apiKey)
15
+ headers.Authorization = `Bearer ${apiKey}`;
16
+ const res = await fetch(`${baseUrl.replace(/\/$/, "")}/mcp`, {
17
+ method: "POST",
18
+ headers,
19
+ body: JSON.stringify(body),
20
+ });
21
+ const text = await res.text();
22
+ let json = null;
23
+ try {
24
+ if (text.startsWith("event:") || text.startsWith("data:")) {
25
+ const dataLine = text.split("\n").find((l) => l.startsWith("data:"));
26
+ json = dataLine ? JSON.parse(dataLine.slice(5)) : null;
27
+ }
28
+ else {
29
+ json = JSON.parse(text);
30
+ }
31
+ }
32
+ catch {
33
+ json = null;
34
+ }
35
+ return { status: res.status, json, text };
36
+ }
37
+ function spaceForToolName(name) {
38
+ if (name.startsWith("creezio.") || name.startsWith("core."))
39
+ return "core";
40
+ if (name.startsWith("plugin."))
41
+ return "plugin";
42
+ return "module";
43
+ }
44
+ function ownerFromName(name) {
45
+ const m = /^module\.([^.]+)\./.exec(name);
46
+ return m?.[1];
47
+ }
48
+ async function honoListTools(baseUrl, apiKey, clientName, clientVersion) {
49
+ await mcpJsonRpc(baseUrl, apiKey, {
50
+ jsonrpc: "2.0",
51
+ id: 1,
52
+ method: "initialize",
53
+ params: {
54
+ protocolVersion: "2025-06-18",
55
+ capabilities: {},
56
+ clientInfo: { name: clientName, version: clientVersion },
57
+ },
58
+ });
59
+ const listed = await mcpJsonRpc(baseUrl, apiKey, {
60
+ jsonrpc: "2.0",
61
+ id: 2,
62
+ method: "tools/list",
63
+ params: {},
64
+ });
65
+ if (listed.status >= 400 || !listed.json?.result?.tools) {
66
+ throw new Error(`hono_mcp_list_failed: status=${listed.status} ${listed.text.slice(0, 200)}`);
67
+ }
68
+ return listed.json.result.tools.map((t) => ({
69
+ name: t.name,
70
+ description: t.description || t.name,
71
+ space: spaceForToolName(t.name),
72
+ ...(ownerFromName(t.name) ? { ownerId: ownerFromName(t.name) } : {}),
73
+ }));
74
+ }
75
+ async function honoCallTool(baseUrl, apiKey, name, args, clientName, clientVersion) {
76
+ await mcpJsonRpc(baseUrl, apiKey, {
77
+ jsonrpc: "2.0",
78
+ id: 1,
79
+ method: "initialize",
80
+ params: {
81
+ protocolVersion: "2025-06-18",
82
+ capabilities: {},
83
+ clientInfo: { name: clientName, version: clientVersion },
84
+ },
85
+ });
86
+ const call = await mcpJsonRpc(baseUrl, apiKey, {
87
+ jsonrpc: "2.0",
88
+ id: 2,
89
+ method: "tools/call",
90
+ params: { name, arguments: args },
91
+ });
92
+ if (call.status >= 400) {
93
+ return {
94
+ ok: false,
95
+ error: `hono_http_${call.status}`,
96
+ content: { text: call.text.slice(0, 500) },
97
+ };
98
+ }
99
+ if (call.json?.error) {
100
+ return {
101
+ ok: false,
102
+ error: call.json.error.message || "hono_rpc_error",
103
+ };
104
+ }
105
+ const raw = call.json?.result?.content?.[0]?.text;
106
+ let content = raw;
107
+ if (typeof raw === "string") {
108
+ try {
109
+ content = JSON.parse(raw);
110
+ }
111
+ catch {
112
+ content = { text: raw };
113
+ }
114
+ }
115
+ const isErr = Boolean(call.json?.result?.isError);
116
+ return { ok: !isErr, content, ...(isErr ? { error: "hono_tool_error" } : {}) };
117
+ }
118
+ function groupBySpace(defs) {
119
+ const out = { core: [], module: [], plugin: [] };
120
+ for (const d of defs) {
121
+ const space = d.space || "module";
122
+ if (space === "core" || space === "plugin" || space === "module") {
123
+ out[space].push(d);
124
+ }
125
+ else {
126
+ out.module.push(d);
127
+ }
128
+ }
129
+ return out;
130
+ }
131
+ /**
132
+ * Enrobe une façade locale : dès qu'un upstream Hono est disponible
133
+ * (mode hono-proxy / hono-preferred), list/call passent par `/mcp`.
134
+ */
135
+ export function wrapMcpFacadeWithHonoProxy(opts) {
136
+ const mode = opts.mode ?? "hono-preferred";
137
+ const fallbackLocal = opts.fallbackLocal ?? mode !== "hono-proxy";
138
+ const local = opts.local;
139
+ const clientName = opts.clientName ?? "creezio-mcp-proxy";
140
+ const clientVersion = opts.clientVersion ?? "m9";
141
+ async function viaHono(run, localRun) {
142
+ const base = opts.upstream.getBaseUrl();
143
+ const role = resolveMcpFacadeRole(mode, base);
144
+ if (role !== "hono-proxy" || !base) {
145
+ return localRun();
146
+ }
147
+ try {
148
+ return await run(base, opts.upstream.getApiKey());
149
+ }
150
+ catch (err) {
151
+ if (!fallbackLocal)
152
+ throw err;
153
+ return localRun();
154
+ }
155
+ }
156
+ return {
157
+ setDiscoverTools: (fn) => local.setDiscoverTools(fn),
158
+ setDiscoverToolsBySpace: (fn) => local.setDiscoverToolsBySpace(fn),
159
+ registerTool: (t) => local.registerTool(t),
160
+ registerAlias: (a, c) => local.registerAlias(a, c),
161
+ unregisterTool: (n) => local.unregisterTool(n),
162
+ listAliases: () => local.listAliases(),
163
+ resolveToolName: (n) => local.resolveToolName(n),
164
+ async listTools(listOpts) {
165
+ return viaHono(async (base, key) => {
166
+ const tools = await honoListTools(base, key, clientName, clientVersion);
167
+ return { tools };
168
+ }, () => local.listTools(listOpts));
169
+ },
170
+ async listToolsBySpace(listOpts) {
171
+ return viaHono(async (base, key) => groupBySpace(await honoListTools(base, key, clientName, clientVersion)), () => local.listToolsBySpace(listOpts));
172
+ },
173
+ async callTool(name, args = {}, callOpts) {
174
+ return viaHono((base, key) => honoCallTool(base, key, name, args, clientName, clientVersion), () => local.callTool(name, args, callOpts));
175
+ },
176
+ };
177
+ }
178
+ /** Helpers testables sans façade complète. */
179
+ export const __mcpHonoProxyTest = {
180
+ honoListTools,
181
+ honoCallTool,
182
+ groupBySpace,
183
+ mcpJsonRpc,
184
+ };
185
+ //# sourceMappingURL=hono-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-proxy.js","sourceRoot":"","sources":["../src/hono-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @creezio/mcp-facade — MCP d'app unique (H1.2 / discovery H2.3 / proxy H4 / M9).
3
+ */
4
+ export type { DiscoverToolsBySpaceFn, DiscoverToolsFn, McpAuthResult, McpAuthorizeContext, McpAuthorizeToolCallFn, McpBearerActor, McpCallToolOpts, McpFacadeOptions, McpListToolsResult, McpPublicSurfaceMode, McpRegisteredTool, McpResolveBearerActorFn, McpToolCallActor, McpToolCallResult, McpToolDefinition, McpToolHandler, McpToolPolicyDecision, McpToolsBySpace, McpToolSpace, } from "./types.js";
5
+ export type { McpFacade } from "./facade.js";
6
+ export { createMcpFacade } from "./facade.js";
7
+ export { signMcpJwt, verifyMcpBearer } from "./jwt.js";
8
+ export { assertNamespacedToolName, isLegacyAliasName, parseNamespacedToolName, } from "./namespace.js";
9
+ export type { ParsedToolName } from "./namespace.js";
10
+ export type { DecidePluginAccessFn, PluginAclActorResolver, PluginAclPolicyResolver, } from "./policy.js";
11
+ export { composeToolPolicies, createDenyUnauthorizedPluginToolPolicy, denyCrossLayerToolCall, } from "./policy.js";
12
+ export type { CreezioCoreMcpToolName, CreateCoreMcpToolsOptions, } from "./core-tools.js";
13
+ export { CREEZIO_CORE_MCP_TOOL_NAMES, createCoreMcpTools, } from "./core-tools.js";
14
+ export type { McpFacadeMode, McpFacadeRole, McpProductExecutor, McpUpstreamRef, } from "./runtime.js";
15
+ export { MCP_PRODUCT_EXECUTOR, resolveMcpFacadeRole, } from "./runtime.js";
16
+ export type { WrapMcpFacadeWithHonoProxyOptions } from "./hono-proxy.js";
17
+ export { __mcpHonoProxyTest, wrapMcpFacadeWithHonoProxy, } from "./hono-proxy.js";
18
+ export type { BindFacadeToolsToHonoOptions, HonoMcpSdkResult, HonoMcpToolRegisterFn, } from "./hono-bind.js";
19
+ export { bindFacadeToolsToHono, mcpFacadeResultToSdk, } from "./hono-bind.js";
20
+ export type { CreateBrandMcpFacadeOptions } from "./brand-facade.js";
21
+ export { createBrandMcpFacade } from "./brand-facade.js";
22
+ export type { BrandModuleOpsSource, GenerateModuleToolsInvoke, GenerateModuleToolsOptions, } from "./module-ops-tools.js";
23
+ export { discoverModuleToolsFromBrandModules, discoverModuleToolsFromKernel, generateModuleToolsFromListedOps, generateModuleToolsFromMountedOps, generateModuleToolsFromOperations, } from "./module-ops-tools.js";
24
+ export type { CreateMcpHonoAppOptions, McpApiKeyRecord, McpConnectedServer, McpOAuthAdapters, McpOAuthRoutesConfig, McpOAuthSession, McpOAuthSessionBridge, McpOAuthSessionUser, McpOAuthSqliteDatabase, McpServerAuthContext, McpStreamableTransport, ConsumedCode, CreateCodeInput, McpAccessToken, McpOAuthClient, RegisterClientInput, RotatedRefresh, McpRateLimitResult, } from "./oauth/index.js";
25
+ export { ACCESS_TOKEN_TTL_S, REFRESH_TOKEN_TTL_S, MCP_SCOPE, MCP_SCOPE_LEGACY, MCP_SCOPE_READ, MCP_SCOPE_WRITE, MCP_SCOPES, McpPublicUrlRequiredError, canonicalizeMcpUrl, checkMcpRateLimit, configureMcpOAuth, consumeAuthCode, createAuthCode, createMcpHonoApp, createMcpOAuthRoutes, createRefreshToken, getClient, getMcpOAuthAdapters, isMcpPublicUrlRequiredError, mcpBaseUrl, mcpCorsAllowlist, mcpOauthReady, mcpResourceUrl, normalizeMcpScopes, peekAuthCode, pruneExpiredCodes, rateLimitHeaders, registerClient, resetMcpOAuthAdaptersForTests, resetMcpRateLimits, resolveMcpCorsOrigin, resolveMcpPublicUrl, resourceAcceptable, rotateRefreshToken, signAccessToken, touchOAuthClientLastUsed, verifyAccessToken, verifyClientSecret, verifyPkceS256, } from "./oauth/index.js";
26
+ /** Host-only tools typiques (hors factory marque) — desktop / introspection. */
27
+ export declare const CREEZIO_PLATFORM_HOST_MCP_TOOL_NAMES: readonly ["open_external_tab", "list_tools_by_space"];
28
+ export type { CreateOpenExternalTabHostMcpToolsOptions, OpenExternalTabHostMcpRegisterFn, OpenExternalTabHostMcpToolConfig, OpenExternalTabResolveResult, OpenExternalTabResolved, OpenExternalTabUser, } from "./open-external-tab-host-tools.js";
29
+ export { CREEZIO_OPEN_EXTERNAL_TAB_MCP_TOOL_NAME, createOpenExternalTabHostMcpTools, } from "./open-external-tab-host-tools.js";
30
+ export { configureMcpAdmin, getMcpAdminAdapters, isMcpAdminConfigured, resetMcpAdminAdaptersForTests, ensureMcpAdminSchema, seedMcpToolPolicies, listMcpToolPolicies, getMcpToolPolicy, disabledMcpToolPolicyNames, filterListedToolsByEnabledPolicy, updateMcpToolPolicy, listMcpClients, setMcpClientEnabled, revokeMcpClient, rotateMcpClientSecret, clientCanAuthenticate, touchMcpClient, mcpAdminStatus, mcpDiagnostics, mcpMetrics, auditMcpAdmin, listMcpAuditLogs, pruneMcpAuditLogs, exportMcpDiagnostics, createMcpAdminRoutes, checkToolPolicy, createToolPolicyAuthorize, getStoredMcpToolPolicy, registerGuardedMcpTool, } from "./admin/index.js";
31
+ export type { McpAdminAdapters, McpAdminSqliteDatabase, McpAdminSqliteStatement, McpRequestLogEntry, McpToolDefinition as McpAdminToolDefinition, McpToolPolicy, McpAdminClient, CreateMcpAdminRoutesOptions, CreateToolPolicyAuthorizeOptions, GuardedMcpServerLike, GuardedMcpToolContext, GuardedMcpToolDefinition, RegisterGuardedMcpToolOptions, ToolPolicyActor, ToolPolicyDenialReason, ToolPolicyGuardOptions, ToolPolicyView, } from "./admin/index.js";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @creezio/mcp-facade — MCP d'app unique (H1.2 / discovery H2.3 / proxy H4 / M9).
3
+ */
4
+ export { createMcpFacade } from "./facade.js";
5
+ export { signMcpJwt, verifyMcpBearer } from "./jwt.js";
6
+ export { assertNamespacedToolName, isLegacyAliasName, parseNamespacedToolName, } from "./namespace.js";
7
+ export { composeToolPolicies, createDenyUnauthorizedPluginToolPolicy, denyCrossLayerToolCall, } from "./policy.js";
8
+ export { CREEZIO_CORE_MCP_TOOL_NAMES, createCoreMcpTools, } from "./core-tools.js";
9
+ export { MCP_PRODUCT_EXECUTOR, resolveMcpFacadeRole, } from "./runtime.js";
10
+ export { __mcpHonoProxyTest, wrapMcpFacadeWithHonoProxy, } from "./hono-proxy.js";
11
+ export { bindFacadeToolsToHono, mcpFacadeResultToSdk, } from "./hono-bind.js";
12
+ export { createBrandMcpFacade } from "./brand-facade.js";
13
+ export { discoverModuleToolsFromBrandModules, discoverModuleToolsFromKernel, generateModuleToolsFromListedOps, generateModuleToolsFromMountedOps, generateModuleToolsFromOperations, } from "./module-ops-tools.js";
14
+ export { ACCESS_TOKEN_TTL_S, REFRESH_TOKEN_TTL_S, MCP_SCOPE, MCP_SCOPE_LEGACY, MCP_SCOPE_READ, MCP_SCOPE_WRITE, MCP_SCOPES, McpPublicUrlRequiredError, canonicalizeMcpUrl, checkMcpRateLimit, configureMcpOAuth, consumeAuthCode, createAuthCode, createMcpHonoApp, createMcpOAuthRoutes, createRefreshToken, getClient, getMcpOAuthAdapters, isMcpPublicUrlRequiredError, mcpBaseUrl, mcpCorsAllowlist, mcpOauthReady, mcpResourceUrl, normalizeMcpScopes, peekAuthCode, pruneExpiredCodes, rateLimitHeaders, registerClient, resetMcpOAuthAdaptersForTests, resetMcpRateLimits, resolveMcpCorsOrigin, resolveMcpPublicUrl, resourceAcceptable, rotateRefreshToken, signAccessToken, touchOAuthClientLastUsed, verifyAccessToken, verifyClientSecret, verifyPkceS256, } from "./oauth/index.js";
15
+ /** Host-only tools typiques (hors factory marque) — desktop / introspection. */
16
+ export const CREEZIO_PLATFORM_HOST_MCP_TOOL_NAMES = [
17
+ "open_external_tab",
18
+ "list_tools_by_space",
19
+ ];
20
+ export { CREEZIO_OPEN_EXTERNAL_TAB_MCP_TOOL_NAME, createOpenExternalTabHostMcpTools, } from "./open-external-tab-host-tools.js";
21
+ /* ── N6 : MCP admin (port TempoFlow) ── */
22
+ export { configureMcpAdmin, getMcpAdminAdapters, isMcpAdminConfigured, resetMcpAdminAdaptersForTests, ensureMcpAdminSchema, seedMcpToolPolicies, listMcpToolPolicies, getMcpToolPolicy, disabledMcpToolPolicyNames, filterListedToolsByEnabledPolicy, updateMcpToolPolicy, listMcpClients, setMcpClientEnabled, revokeMcpClient, rotateMcpClientSecret, clientCanAuthenticate, touchMcpClient, mcpAdminStatus, mcpDiagnostics, mcpMetrics, auditMcpAdmin, listMcpAuditLogs, pruneMcpAuditLogs, exportMcpDiagnostics, createMcpAdminRoutes, checkToolPolicy, createToolPolicyAuthorize, getStoredMcpToolPolicy, registerGuardedMcpTool, } from "./admin/index.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EACL,mBAAmB,EACnB,sCAAsC,EACtC,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AASzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAOzD,OAAO,EACL,mCAAmC,EACnC,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,iCAAiC,GAClC,MAAM,uBAAuB,CAAC;AAuB/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,gFAAgF;AAChF,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,mBAAmB;IACnB,qBAAqB;CACb,CAAC;AAYX,OAAO,EACL,uCAAuC,EACvC,iCAAiC,GAClC,MAAM,mCAAmC,CAAC;AAE3C,2CAA2C;AAE3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,gCAAgC,EAChC,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC"}
package/dist/jwt.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vérification JWT HS256 minimale (sans dépendance jsonwebtoken).
3
+ * Alignée sur le secret local-config `mcpJwtSecret` / MCP_JWT_SECRET.
4
+ */
5
+ import type { McpAuthResult } from "./types.js";
6
+ /**
7
+ * Accepte :
8
+ * - bearer === secret (token opaque sandbox) ;
9
+ * - JWT HS256 signé avec le secret (payload.sub optionnel).
10
+ */
11
+ export declare function verifyMcpBearer(bearerToken: string | null | undefined, secret: string | null | undefined, opts?: {
12
+ allowUnauthenticated?: boolean;
13
+ }): McpAuthResult;
14
+ /** Émet un JWT HS256 court (tests / sandbox). */
15
+ export declare function signMcpJwt(secret: string, payload: {
16
+ sub?: string;
17
+ exp?: number;
18
+ [k: string]: unknown;
19
+ }): string;
20
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAchD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,CAAC,EAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,aAAa,CAwDf;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5D,MAAM,CAUR"}
package/dist/jwt.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Vérification JWT HS256 minimale (sans dépendance jsonwebtoken).
3
+ * Alignée sur le secret local-config `mcpJwtSecret` / MCP_JWT_SECRET.
4
+ */
5
+ import crypto from "node:crypto";
6
+ function b64urlToBuf(s) {
7
+ const pad = "=".repeat((4 - (s.length % 4)) % 4);
8
+ return Buffer.from(s.replace(/-/g, "+").replace(/_/g, "/") + pad, "base64");
9
+ }
10
+ function timingSafeEqualStr(a, b) {
11
+ const ba = Buffer.from(a);
12
+ const bb = Buffer.from(b);
13
+ if (ba.length !== bb.length)
14
+ return false;
15
+ return crypto.timingSafeEqual(ba, bb);
16
+ }
17
+ /**
18
+ * Accepte :
19
+ * - bearer === secret (token opaque sandbox) ;
20
+ * - JWT HS256 signé avec le secret (payload.sub optionnel).
21
+ */
22
+ export function verifyMcpBearer(bearerToken, secret, opts) {
23
+ if (!secret) {
24
+ if (opts?.allowUnauthenticated)
25
+ return { ok: true, subject: "anonymous" };
26
+ return { ok: false, error: "mcp_jwt_secret_missing", status: 503 };
27
+ }
28
+ if (!bearerToken) {
29
+ if (opts?.allowUnauthenticated)
30
+ return { ok: true, subject: "anonymous" };
31
+ return { ok: false, error: "unauthorized", status: 401 };
32
+ }
33
+ const token = bearerToken.replace(/^Bearer\s+/i, "").trim();
34
+ if (!token) {
35
+ return { ok: false, error: "unauthorized", status: 401 };
36
+ }
37
+ if (timingSafeEqualStr(token, secret)) {
38
+ return { ok: true, subject: "opaque-token" };
39
+ }
40
+ const parts = token.split(".");
41
+ if (parts.length !== 3) {
42
+ return { ok: false, error: "invalid_token", status: 401 };
43
+ }
44
+ const [h, p, s] = parts;
45
+ const data = `${h}.${p}`;
46
+ const expected = crypto
47
+ .createHmac("sha256", secret)
48
+ .update(data)
49
+ .digest("base64url");
50
+ if (!timingSafeEqualStr(s, expected)) {
51
+ return { ok: false, error: "invalid_signature", status: 401 };
52
+ }
53
+ try {
54
+ const payload = JSON.parse(b64urlToBuf(p).toString("utf8"));
55
+ if (typeof payload.exp === "number" && payload.exp * 1000 < Date.now()) {
56
+ return { ok: false, error: "token_expired", status: 401 };
57
+ }
58
+ const orgId = typeof payload.orgId === "string"
59
+ ? payload.orgId
60
+ : typeof payload.org_id === "string"
61
+ ? payload.org_id
62
+ : undefined;
63
+ return {
64
+ ok: true,
65
+ subject: payload.sub || "jwt",
66
+ ...(orgId ? { orgId } : {}),
67
+ claims: payload,
68
+ };
69
+ }
70
+ catch {
71
+ return { ok: false, error: "invalid_payload", status: 401 };
72
+ }
73
+ }
74
+ /** Émet un JWT HS256 court (tests / sandbox). */
75
+ export function signMcpJwt(secret, payload) {
76
+ const header = Buffer.from(JSON.stringify({ alg: "HS256", typ: "JWT" })).toString("base64url");
77
+ const body = Buffer.from(JSON.stringify(payload)).toString("base64url");
78
+ const sig = crypto
79
+ .createHmac("sha256", secret)
80
+ .update(`${header}.${body}`)
81
+ .digest("base64url");
82
+ return `${header}.${body}.${sig}`;
83
+ }
84
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Génération des tools MCP depuis les opérations de module (SoT).
3
+ * Handler = requête synthétique vers le même mount HTTP — zéro 2e implémentation.
4
+ */
5
+ import type { ApiKernel, ApiMount, ApiRequest, ApiResponse, ApiSpace, EntitySpec, ListedModuleOperation, ModuleOperation, MountedApiInfo } from "@creezio/api-kernel";
6
+ import type { McpRegisteredTool } from "./types.js";
7
+ export type GenerateModuleToolsInvoke = (req: ApiRequest) => Promise<ApiResponse>;
8
+ export type GenerateModuleToolsOptions = {
9
+ /** Id HTTP du mount (défaut = moduleId). */
10
+ mountId?: string;
11
+ space?: Exclude<ApiSpace, "core">;
12
+ };
13
+ /**
14
+ * Génère un tool MCP par op — `module.<id>.<op.id>`.
15
+ * Handler = requête synthétique (method/path/body) vers le même
16
+ * `ApiMount.handle` via `invokeMount` (typiquement `api.handle`) —
17
+ * zéro 2ᵉ implémentation métier.
18
+ */
19
+ export declare function generateModuleToolsFromOperations(moduleId: string, ops: readonly ModuleOperation[], invokeMount: GenerateModuleToolsInvoke, options?: GenerateModuleToolsOptions): McpRegisteredTool[];
20
+ /**
21
+ * Tools `module.*` générés depuis `api.listOperations()` (space module).
22
+ * SoT runtime — `BrandModuleDef.mcpTools` n'existe plus.
23
+ */
24
+ export declare function generateModuleToolsFromListedOps(api: ApiKernel, listed?: readonly ListedModuleOperation[]): McpRegisteredTool[];
25
+ /** Tools générés depuis les mounts déjà enregistrés sur le kernel. */
26
+ export declare function generateModuleToolsFromMountedOps(api: ApiKernel, mounts?: readonly MountedApiInfo[]): McpRegisteredTool[];
27
+ /**
28
+ * Discovery runtime : uniquement `listOperations()` (space module).
29
+ * `extraTools` = hook apps (health, JWT) — pas de `mcpTools` manuscrit.
30
+ */
31
+ export declare function discoverModuleToolsFromKernel(api: ApiKernel, extraTools?: readonly McpRegisteredTool[]): McpRegisteredTool[];
32
+ export type BrandModuleOpsSource = {
33
+ id: string;
34
+ entitySpecs?: Record<string, EntitySpec>;
35
+ apiMounts?: Record<string, ApiMount>;
36
+ };
37
+ /**
38
+ * Discovery kit-side : SoT = `api.listOperations()` (space module).
39
+ * Fallback : ops des BrandModuleDef (EntitySpec CRUD + apiMounts) si le
40
+ * kernel n'a pas encore les mounts. Pas de champ `mcpTools`.
41
+ */
42
+ export declare function discoverModuleToolsFromBrandModules(modules: readonly BrandModuleOpsSource[], api: ApiKernel): McpRegisteredTool[];
43
+ //# sourceMappingURL=module-ops-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-ops-tools.d.ts","sourceRoot":"","sources":["../src/module-ops-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,cAAc,EACf,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AA4HpB,MAAM,MAAM,yBAAyB,GAAG,CACtC,GAAG,EAAE,UAAU,KACZ,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B,MAAM,MAAM,0BAA0B,GAAG;IACvC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAgFF;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,SAAS,eAAe,EAAE,EAC/B,WAAW,EAAE,yBAAyB,EACtC,OAAO,GAAE,0BAA+B,GACvC,iBAAiB,EAAE,CAkCrB;AAiCD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,SAAS,EACd,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,GACxC,iBAAiB,EAAE,CAMrB;AAED,sEAAsE;AACtE,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,SAAS,EACd,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,GACjC,iBAAiB,EAAE,CAsBrB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,SAAS,EACd,UAAU,GAAE,SAAS,iBAAiB,EAAO,GAC5C,iBAAiB,EAAE,CAKrB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACtC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,GAAG,EAAE,SAAS,GACb,iBAAiB,EAAE,CAiCrB"}