@ifc-lite/mcp 0.2.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 (155) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +186 -0
  3. package/dist/auth/index.d.ts +3 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/index.js +5 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/scope.d.ts +24 -0
  8. package/dist/auth/scope.d.ts.map +1 -0
  9. package/dist/auth/scope.js +26 -0
  10. package/dist/auth/scope.js.map +1 -0
  11. package/dist/browser.d.ts +37 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +37 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +233 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/context.d.ts +87 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +41 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/errors.d.ts +37 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +49 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/headless-backend.d.ts +61 -0
  28. package/dist/headless-backend.d.ts.map +1 -0
  29. package/dist/headless-backend.js +472 -0
  30. package/dist/headless-backend.js.map +1 -0
  31. package/dist/index.d.ts +39 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +49 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/loader.d.ts +9 -0
  36. package/dist/loader.d.ts.map +1 -0
  37. package/dist/loader.js +76 -0
  38. package/dist/loader.js.map +1 -0
  39. package/dist/prompts/index.d.ts +6 -0
  40. package/dist/prompts/index.d.ts.map +1 -0
  41. package/dist/prompts/index.js +13 -0
  42. package/dist/prompts/index.js.map +1 -0
  43. package/dist/prompts/templates.d.ts +21 -0
  44. package/dist/prompts/templates.d.ts.map +1 -0
  45. package/dist/prompts/templates.js +238 -0
  46. package/dist/prompts/templates.js.map +1 -0
  47. package/dist/prompts/types.d.ts +17 -0
  48. package/dist/prompts/types.d.ts.map +1 -0
  49. package/dist/prompts/types.js +27 -0
  50. package/dist/prompts/types.js.map +1 -0
  51. package/dist/protocol/index.d.ts +3 -0
  52. package/dist/protocol/index.d.ts.map +1 -0
  53. package/dist/protocol/index.js +6 -0
  54. package/dist/protocol/index.js.map +1 -0
  55. package/dist/protocol/jsonrpc.d.ts +12 -0
  56. package/dist/protocol/jsonrpc.d.ts.map +1 -0
  57. package/dist/protocol/jsonrpc.js +62 -0
  58. package/dist/protocol/jsonrpc.js.map +1 -0
  59. package/dist/protocol/types.d.ts +223 -0
  60. package/dist/protocol/types.d.ts.map +1 -0
  61. package/dist/protocol/types.js +37 -0
  62. package/dist/protocol/types.js.map +1 -0
  63. package/dist/resources/index.d.ts +6 -0
  64. package/dist/resources/index.d.ts.map +1 -0
  65. package/dist/resources/index.js +13 -0
  66. package/dist/resources/index.js.map +1 -0
  67. package/dist/resources/providers.d.ts +3 -0
  68. package/dist/resources/providers.d.ts.map +1 -0
  69. package/dist/resources/providers.js +270 -0
  70. package/dist/resources/providers.js.map +1 -0
  71. package/dist/resources/types.d.ts +29 -0
  72. package/dist/resources/types.d.ts.map +1 -0
  73. package/dist/resources/types.js +30 -0
  74. package/dist/resources/types.js.map +1 -0
  75. package/dist/server.d.ts +93 -0
  76. package/dist/server.d.ts.map +1 -0
  77. package/dist/server.js +396 -0
  78. package/dist/server.js.map +1 -0
  79. package/dist/tools/bcf.d.ts +3 -0
  80. package/dist/tools/bcf.d.ts.map +1 -0
  81. package/dist/tools/bcf.js +208 -0
  82. package/dist/tools/bcf.js.map +1 -0
  83. package/dist/tools/bsdd.d.ts +3 -0
  84. package/dist/tools/bsdd.d.ts.map +1 -0
  85. package/dist/tools/bsdd.js +267 -0
  86. package/dist/tools/bsdd.js.map +1 -0
  87. package/dist/tools/diff.d.ts +3 -0
  88. package/dist/tools/diff.d.ts.map +1 -0
  89. package/dist/tools/diff.js +149 -0
  90. package/dist/tools/diff.js.map +1 -0
  91. package/dist/tools/discovery.d.ts +8 -0
  92. package/dist/tools/discovery.d.ts.map +1 -0
  93. package/dist/tools/discovery.js +181 -0
  94. package/dist/tools/discovery.js.map +1 -0
  95. package/dist/tools/export.d.ts +3 -0
  96. package/dist/tools/export.d.ts.map +1 -0
  97. package/dist/tools/export.js +157 -0
  98. package/dist/tools/export.js.map +1 -0
  99. package/dist/tools/geometry.d.ts +3 -0
  100. package/dist/tools/geometry.d.ts.map +1 -0
  101. package/dist/tools/geometry.js +252 -0
  102. package/dist/tools/geometry.js.map +1 -0
  103. package/dist/tools/ids-accessor.d.ts +9 -0
  104. package/dist/tools/ids-accessor.d.ts.map +1 -0
  105. package/dist/tools/ids-accessor.js +131 -0
  106. package/dist/tools/ids-accessor.js.map +1 -0
  107. package/dist/tools/index.d.ts +21 -0
  108. package/dist/tools/index.d.ts.map +1 -0
  109. package/dist/tools/index.js +36 -0
  110. package/dist/tools/index.js.map +1 -0
  111. package/dist/tools/mutate.d.ts +3 -0
  112. package/dist/tools/mutate.d.ts.map +1 -0
  113. package/dist/tools/mutate.js +350 -0
  114. package/dist/tools/mutate.js.map +1 -0
  115. package/dist/tools/query.d.ts +3 -0
  116. package/dist/tools/query.d.ts.map +1 -0
  117. package/dist/tools/query.js +549 -0
  118. package/dist/tools/query.js.map +1 -0
  119. package/dist/tools/types.d.ts +18 -0
  120. package/dist/tools/types.d.ts.map +1 -0
  121. package/dist/tools/types.js +26 -0
  122. package/dist/tools/types.js.map +1 -0
  123. package/dist/tools/util.d.ts +19 -0
  124. package/dist/tools/util.d.ts.map +1 -0
  125. package/dist/tools/util.js +53 -0
  126. package/dist/tools/util.js.map +1 -0
  127. package/dist/tools/validation.d.ts +3 -0
  128. package/dist/tools/validation.d.ts.map +1 -0
  129. package/dist/tools/validation.js +244 -0
  130. package/dist/tools/validation.js.map +1 -0
  131. package/dist/tools/viewer.d.ts +3 -0
  132. package/dist/tools/viewer.d.ts.map +1 -0
  133. package/dist/tools/viewer.js +651 -0
  134. package/dist/tools/viewer.js.map +1 -0
  135. package/dist/transport/http.d.ts +64 -0
  136. package/dist/transport/http.d.ts.map +1 -0
  137. package/dist/transport/http.js +268 -0
  138. package/dist/transport/http.js.map +1 -0
  139. package/dist/transport/in-process.d.ts +25 -0
  140. package/dist/transport/in-process.d.ts.map +1 -0
  141. package/dist/transport/in-process.js +48 -0
  142. package/dist/transport/in-process.js.map +1 -0
  143. package/dist/transport/stdio.d.ts +33 -0
  144. package/dist/transport/stdio.d.ts.map +1 -0
  145. package/dist/transport/stdio.js +86 -0
  146. package/dist/transport/stdio.js.map +1 -0
  147. package/dist/validate.d.ts +23 -0
  148. package/dist/validate.d.ts.map +1 -0
  149. package/dist/validate.js +88 -0
  150. package/dist/validate.js.map +1 -0
  151. package/dist/viewer-manager.d.ts +51 -0
  152. package/dist/viewer-manager.d.ts.map +1 -0
  153. package/dist/viewer-manager.js +183 -0
  154. package/dist/viewer-manager.js.map +1 -0
  155. package/package.json +86 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Model Context Protocol (MCP) wire types.
3
+ *
4
+ * Implements the subset of MCP 2025-11 we need. JSON-RPC 2.0 envelopes,
5
+ * tool/resource/prompt shapes, progress notifications, and the cancellation
6
+ * helpers. We deliberately avoid `any` and keep the types narrow so the
7
+ * tool implementations get strong type-checking out of the box.
8
+ */
9
+ export declare const PROTOCOL_VERSION = "2025-11-05";
10
+ /**
11
+ * Protocol versions we are willing to negotiate. The server's wire surface
12
+ * (initialize, tools/{list,call}, resources/*, prompts/*, notifications/*,
13
+ * logging) has been backwards-compatible across these spec revisions, so we
14
+ * accept any of them and echo the requested version back during initialize.
15
+ * Unrecognized versions get downgraded to PROTOCOL_VERSION instead.
16
+ */
17
+ export declare const SUPPORTED_PROTOCOL_VERSIONS: ReadonlySet<string>;
18
+ export declare const JSONRPC_VERSION: "2.0";
19
+ export type JsonRpcId = string | number;
20
+ export interface JsonRpcRequest<P = unknown> {
21
+ jsonrpc: typeof JSONRPC_VERSION;
22
+ id: JsonRpcId;
23
+ method: string;
24
+ params?: P;
25
+ }
26
+ export interface JsonRpcNotification<P = unknown> {
27
+ jsonrpc: typeof JSONRPC_VERSION;
28
+ method: string;
29
+ params?: P;
30
+ }
31
+ export interface JsonRpcSuccessResponse<R = unknown> {
32
+ jsonrpc: typeof JSONRPC_VERSION;
33
+ id: JsonRpcId;
34
+ result: R;
35
+ }
36
+ export interface JsonRpcErrorResponse {
37
+ jsonrpc: typeof JSONRPC_VERSION;
38
+ id: JsonRpcId | null;
39
+ error: JsonRpcErrorObject;
40
+ }
41
+ export interface JsonRpcErrorObject {
42
+ code: number;
43
+ message: string;
44
+ data?: unknown;
45
+ }
46
+ export type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;
47
+ export type JsonRpcMessage = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse;
48
+ export declare const JsonRpcErrorCode: {
49
+ readonly ParseError: -32700;
50
+ readonly InvalidRequest: -32600;
51
+ readonly MethodNotFound: -32601;
52
+ readonly InvalidParams: -32602;
53
+ readonly InternalError: -32603;
54
+ readonly ServerNotInitialized: -32002;
55
+ readonly RequestCancelled: -32800;
56
+ };
57
+ export interface ServerCapabilities {
58
+ tools?: {
59
+ listChanged?: boolean;
60
+ };
61
+ resources?: {
62
+ subscribe?: boolean;
63
+ listChanged?: boolean;
64
+ };
65
+ prompts?: {
66
+ listChanged?: boolean;
67
+ };
68
+ logging?: Record<string, never>;
69
+ experimental?: Record<string, unknown>;
70
+ }
71
+ export interface ClientCapabilities {
72
+ roots?: {
73
+ listChanged?: boolean;
74
+ };
75
+ sampling?: Record<string, never>;
76
+ experimental?: Record<string, unknown>;
77
+ }
78
+ export interface InitializeParams {
79
+ protocolVersion: string;
80
+ capabilities: ClientCapabilities;
81
+ clientInfo: {
82
+ name: string;
83
+ version: string;
84
+ };
85
+ }
86
+ export interface InitializeResult {
87
+ protocolVersion: string;
88
+ capabilities: ServerCapabilities;
89
+ serverInfo: {
90
+ name: string;
91
+ version: string;
92
+ };
93
+ instructions?: string;
94
+ }
95
+ export type ContentBlock = TextContent | ImageContent | ResourceLink | EmbeddedResource;
96
+ export interface TextContent {
97
+ type: 'text';
98
+ text: string;
99
+ }
100
+ export interface ImageContent {
101
+ type: 'image';
102
+ data: string;
103
+ mimeType: string;
104
+ }
105
+ export interface ResourceLink {
106
+ type: 'resource';
107
+ resource: {
108
+ uri: string;
109
+ mimeType?: string;
110
+ text?: string;
111
+ };
112
+ }
113
+ export interface EmbeddedResource {
114
+ type: 'resource';
115
+ resource: ResourceContents;
116
+ }
117
+ export interface ResourceContents {
118
+ uri: string;
119
+ mimeType?: string;
120
+ text?: string;
121
+ blob?: string;
122
+ }
123
+ export interface ToolDefinition {
124
+ name: string;
125
+ description: string;
126
+ inputSchema: JsonSchema;
127
+ /** Optional metadata: which scope a token needs to call this tool. */
128
+ scope?: ToolScope;
129
+ }
130
+ export interface ListToolsResult {
131
+ tools: ToolDefinition[];
132
+ nextCursor?: string;
133
+ }
134
+ export interface CallToolParams {
135
+ name: string;
136
+ arguments?: Record<string, unknown>;
137
+ _meta?: {
138
+ progressToken?: string | number;
139
+ };
140
+ }
141
+ export interface CallToolResult {
142
+ content: ContentBlock[];
143
+ structuredContent?: Record<string, unknown>;
144
+ isError?: boolean;
145
+ }
146
+ export type ToolScope = 'read' | 'validate' | 'mutate' | 'export' | 'admin';
147
+ export interface ResourceDefinition {
148
+ uri: string;
149
+ name: string;
150
+ description?: string;
151
+ mimeType?: string;
152
+ }
153
+ export interface ListResourcesResult {
154
+ resources: ResourceDefinition[];
155
+ nextCursor?: string;
156
+ }
157
+ export interface ReadResourceParams {
158
+ uri: string;
159
+ }
160
+ export interface ReadResourceResult {
161
+ contents: ResourceContents[];
162
+ }
163
+ export interface SubscribeParams {
164
+ uri: string;
165
+ }
166
+ export interface PromptArgument {
167
+ name: string;
168
+ description?: string;
169
+ required?: boolean;
170
+ }
171
+ export interface PromptDefinition {
172
+ name: string;
173
+ description: string;
174
+ arguments?: PromptArgument[];
175
+ }
176
+ export interface ListPromptsResult {
177
+ prompts: PromptDefinition[];
178
+ }
179
+ export interface GetPromptParams {
180
+ name: string;
181
+ arguments?: Record<string, string>;
182
+ }
183
+ export interface PromptMessage {
184
+ role: 'user' | 'assistant' | 'system';
185
+ content: ContentBlock;
186
+ }
187
+ export interface GetPromptResult {
188
+ description?: string;
189
+ messages: PromptMessage[];
190
+ }
191
+ export interface ProgressNotification {
192
+ progressToken: string | number;
193
+ progress: number;
194
+ total?: number;
195
+ message?: string;
196
+ }
197
+ export interface ResourceUpdatedNotification {
198
+ uri: string;
199
+ }
200
+ export interface LogNotification {
201
+ level: 'debug' | 'info' | 'notice' | 'warning' | 'error' | 'critical';
202
+ logger?: string;
203
+ data: unknown;
204
+ }
205
+ export interface JsonSchema {
206
+ type?: string | string[];
207
+ description?: string;
208
+ properties?: Record<string, JsonSchema>;
209
+ required?: string[];
210
+ items?: JsonSchema;
211
+ enum?: readonly unknown[];
212
+ default?: unknown;
213
+ minimum?: number;
214
+ maximum?: number;
215
+ minLength?: number;
216
+ maxLength?: number;
217
+ format?: string;
218
+ oneOf?: JsonSchema[];
219
+ anyOf?: JsonSchema[];
220
+ additionalProperties?: boolean | JsonSchema;
221
+ [key: string]: unknown;
222
+ }
223
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Model Context Protocol (MCP) wire types.
6
+ *
7
+ * Implements the subset of MCP 2025-11 we need. JSON-RPC 2.0 envelopes,
8
+ * tool/resource/prompt shapes, progress notifications, and the cancellation
9
+ * helpers. We deliberately avoid `any` and keep the types narrow so the
10
+ * tool implementations get strong type-checking out of the box.
11
+ */
12
+ export const PROTOCOL_VERSION = '2025-11-05';
13
+ /**
14
+ * Protocol versions we are willing to negotiate. The server's wire surface
15
+ * (initialize, tools/{list,call}, resources/*, prompts/*, notifications/*,
16
+ * logging) has been backwards-compatible across these spec revisions, so we
17
+ * accept any of them and echo the requested version back during initialize.
18
+ * Unrecognized versions get downgraded to PROTOCOL_VERSION instead.
19
+ */
20
+ export const SUPPORTED_PROTOCOL_VERSIONS = new Set([
21
+ '2025-03-26',
22
+ '2025-06-18',
23
+ '2025-11-05',
24
+ '2025-11-25',
25
+ ]);
26
+ export const JSONRPC_VERSION = '2.0';
27
+ export const JsonRpcErrorCode = {
28
+ ParseError: -32700,
29
+ InvalidRequest: -32600,
30
+ MethodNotFound: -32601,
31
+ InvalidParams: -32602,
32
+ InternalError: -32603,
33
+ // MCP-defined extension range starts at -32000.
34
+ ServerNotInitialized: -32002,
35
+ RequestCancelled: -32800,
36
+ };
37
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAwB,IAAI,GAAG,CAAC;IACtE,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAc,CAAC;AAwC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,CAAC,KAAK;IAClB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;IACtB,aAAa,EAAE,CAAC,KAAK;IACrB,aAAa,EAAE,CAAC,KAAK;IACrB,gDAAgD;IAChD,oBAAoB,EAAE,CAAC,KAAK;IAC5B,gBAAgB,EAAE,CAAC,KAAK;CAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ResourceRegistry } from './types.js';
2
+ export { ResourceRegistry } from './types.js';
3
+ export type { ResourceProvider } from './types.js';
4
+ export { defaultResourceProviders } from './providers.js';
5
+ export declare function buildDefaultResourceRegistry(): ResourceRegistry;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,wBAAgB,4BAA4B,IAAI,gBAAgB,CAI/D"}
@@ -0,0 +1,13 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { ResourceRegistry } from './types.js';
5
+ import { defaultResourceProviders } from './providers.js';
6
+ export { ResourceRegistry } from './types.js';
7
+ export { defaultResourceProviders } from './providers.js';
8
+ export function buildDefaultResourceRegistry() {
9
+ const registry = new ResourceRegistry();
10
+ registry.registerAll(defaultResourceProviders());
11
+ return registry;
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,UAAU,4BAA4B;IAC1C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ResourceProvider } from './types.js';
2
+ export declare function defaultResourceProviders(): ResourceProvider[];
3
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/resources/providers.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgQnD,wBAAgB,wBAAwB,IAAI,gBAAgB,EAAE,CAW7D"}
@@ -0,0 +1,270 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Resource providers for the `ifc-lite://` URI scheme (spec §8).
6
+ *
7
+ * The set lines up with the resource patterns in the spec table. Each
8
+ * provider knows both how to enumerate static resources (so they appear in
9
+ * `resources/list`) and how to resolve dynamic ones via URI matching.
10
+ */
11
+ import { EntityNode } from '@ifc-lite/query';
12
+ import { extractGeoreferencingOnDemand } from '@ifc-lite/parser';
13
+ const URI_PREFIX = 'ifc-lite://';
14
+ function jsonContents(uri, value) {
15
+ return {
16
+ uri,
17
+ mimeType: 'application/json',
18
+ text: JSON.stringify(value, null, 2),
19
+ };
20
+ }
21
+ class ManifestProvider {
22
+ name = 'manifest';
23
+ list(ctx) {
24
+ return ctx.registry.list().map((m) => ({
25
+ uri: `${URI_PREFIX}model/${m.id}/manifest`,
26
+ name: `${m.name} — manifest`,
27
+ description: `Schema, entity counts, georef, units for model '${m.id}'.`,
28
+ mimeType: 'application/json',
29
+ }));
30
+ }
31
+ match(uri) {
32
+ return /^ifc-lite:\/\/model\/[^/]+\/manifest$/.test(uri);
33
+ }
34
+ read(uri, ctx) {
35
+ const id = uri.replace(/^ifc-lite:\/\/model\//, '').replace(/\/manifest$/, '');
36
+ const m = ctx.registry.get(id);
37
+ if (!m)
38
+ return [];
39
+ const georef = extractGeoreferencingOnDemand(m.store);
40
+ return [jsonContents(uri, {
41
+ id: m.id,
42
+ name: m.name,
43
+ schema: m.store.schemaVersion,
44
+ entityCount: m.store.entityCount,
45
+ fileSize: m.store.fileSize,
46
+ georeferencing: georef ?? null,
47
+ })];
48
+ }
49
+ }
50
+ class EntityProvider {
51
+ name = 'entity';
52
+ list() {
53
+ // Entities are dynamic; expose the URL pattern as a hint via a single
54
+ // template entry the client can show in UI but won't try to fetch.
55
+ return [{
56
+ uri: `${URI_PREFIX}model/{model_id}/entity/{global_id}`,
57
+ name: 'Entity (template)',
58
+ description: 'Read full entity data by GlobalId. Substitute {model_id} and {global_id}.',
59
+ mimeType: 'application/json',
60
+ }];
61
+ }
62
+ match(uri) {
63
+ return /^ifc-lite:\/\/model\/[^/]+\/entity\/[^/]+$/.test(uri);
64
+ }
65
+ read(uri, ctx) {
66
+ const m = uri.match(/^ifc-lite:\/\/model\/([^/]+)\/entity\/(.+)$/);
67
+ if (!m)
68
+ return [];
69
+ const model = ctx.registry.get(m[1]);
70
+ if (!model)
71
+ return [];
72
+ const gid = decodeURIComponent(m[2]);
73
+ for (const [, ids] of model.store.entityIndex.byType) {
74
+ for (const id of ids) {
75
+ const node = new EntityNode(model.store, id);
76
+ if (node.globalId !== gid)
77
+ continue;
78
+ const ref = { modelId: model.id, expressId: id };
79
+ return [jsonContents(uri, {
80
+ ref,
81
+ globalId: node.globalId,
82
+ name: node.name,
83
+ type: node.type,
84
+ description: node.description,
85
+ objectType: node.objectType,
86
+ attributes: model.bim.attributes(ref),
87
+ properties: model.bim.properties(ref),
88
+ quantities: model.bim.quantities(ref),
89
+ classifications: model.bim.classifications(ref),
90
+ materials: model.bim.materials(ref),
91
+ })];
92
+ }
93
+ }
94
+ return [];
95
+ }
96
+ }
97
+ class SpatialTreeProvider {
98
+ name = 'spatial-tree';
99
+ list(ctx) {
100
+ return ctx.registry.list().map((m) => ({
101
+ uri: `${URI_PREFIX}model/${m.id}/spatial-tree`,
102
+ name: `${m.name} — spatial tree`,
103
+ mimeType: 'application/json',
104
+ }));
105
+ }
106
+ match(uri) {
107
+ return /^ifc-lite:\/\/model\/[^/]+\/spatial-tree$/.test(uri);
108
+ }
109
+ read(uri, ctx) {
110
+ const id = uri.replace(/^ifc-lite:\/\/model\//, '').replace(/\/spatial-tree$/, '');
111
+ const m = ctx.registry.get(id);
112
+ if (!m)
113
+ return [];
114
+ const projectIds = m.store.entityIndex.byType.get('IFCPROJECT') ?? [];
115
+ if (projectIds.length === 0)
116
+ return [jsonContents(uri, null)];
117
+ return [jsonContents(uri, buildTreeNode(m.store, projectIds[0]))];
118
+ }
119
+ }
120
+ function buildTreeNode(store, expressId) {
121
+ const node = new EntityNode(store, expressId);
122
+ return {
123
+ expressId,
124
+ globalId: node.globalId,
125
+ type: node.type,
126
+ name: node.name,
127
+ children: node.decomposes().map((c) => buildTreeNode(store, c.expressId)),
128
+ };
129
+ }
130
+ class MaterialsProvider {
131
+ name = 'materials';
132
+ list(ctx) {
133
+ return ctx.registry.list().map((m) => ({
134
+ uri: `${URI_PREFIX}model/${m.id}/materials`,
135
+ name: `${m.name} — materials`,
136
+ mimeType: 'application/json',
137
+ }));
138
+ }
139
+ match(uri) {
140
+ return /^ifc-lite:\/\/model\/[^/]+\/materials$/.test(uri);
141
+ }
142
+ read(uri, ctx) {
143
+ const id = uri.replace(/^ifc-lite:\/\/model\//, '').replace(/\/materials$/, '');
144
+ const m = ctx.registry.get(id);
145
+ if (!m)
146
+ return [];
147
+ const counts = new Map();
148
+ for (const e of m.bim.query().toArray()) {
149
+ const mat = m.bim.materials(e.ref);
150
+ if (!mat)
151
+ continue;
152
+ const key = mat.name ?? '(unnamed)';
153
+ counts.set(key, (counts.get(key) ?? 0) + 1);
154
+ }
155
+ return [jsonContents(uri, {
156
+ materials: Array.from(counts.entries()).sort((a, b) => b[1] - a[1]).map(([name, count]) => ({ name, count })),
157
+ })];
158
+ }
159
+ }
160
+ class PropertySetsProvider {
161
+ name = 'property-sets';
162
+ list(ctx) {
163
+ return ctx.registry.list().map((m) => ({
164
+ uri: `${URI_PREFIX}model/${m.id}/property-sets`,
165
+ name: `${m.name} — property sets`,
166
+ mimeType: 'application/json',
167
+ }));
168
+ }
169
+ match(uri) {
170
+ return /^ifc-lite:\/\/model\/[^/]+\/property-sets$/.test(uri);
171
+ }
172
+ read(uri, ctx) {
173
+ const id = uri.replace(/^ifc-lite:\/\/model\//, '').replace(/\/property-sets$/, '');
174
+ const m = ctx.registry.get(id);
175
+ if (!m)
176
+ return [];
177
+ const seen = new Set();
178
+ const psets = [];
179
+ for (const e of m.bim.query().toArray()) {
180
+ for (const pset of m.bim.properties(e.ref)) {
181
+ if (seen.has(pset.name))
182
+ continue;
183
+ seen.add(pset.name);
184
+ psets.push({ name: pset.name, properties: pset.properties.map((p) => p.name) });
185
+ }
186
+ }
187
+ return [jsonContents(uri, { propertySets: psets })];
188
+ }
189
+ }
190
+ class ServerManifestProvider {
191
+ name = 'server-manifest';
192
+ list() {
193
+ return [{
194
+ uri: `${URI_PREFIX}server/manifest`,
195
+ name: 'ifc-lite-mcp manifest',
196
+ description: 'Server-wide capabilities, version, and tool catalog summary.',
197
+ mimeType: 'application/json',
198
+ }];
199
+ }
200
+ match(uri) {
201
+ return uri === `${URI_PREFIX}server/manifest`;
202
+ }
203
+ read(uri, ctx) {
204
+ return [jsonContents(uri, {
205
+ readOnly: ctx.config.readOnly,
206
+ samplingEnabled: ctx.config.samplingEnabled,
207
+ bsddEndpoint: ctx.config.bsddEndpoint ?? 'https://api.bsdd.buildingsmart.org',
208
+ viewerOpen: ctx.viewer?.isOpen() ?? false,
209
+ modelsLoaded: ctx.registry.list().map((m) => ({ id: m.id, name: m.name, schema: m.store.schemaVersion })),
210
+ })];
211
+ }
212
+ }
213
+ class ViewerSelectionProvider {
214
+ name = 'viewer-selection';
215
+ list() {
216
+ return [{
217
+ uri: `${URI_PREFIX}viewer/selection`,
218
+ name: 'Viewer selection (live)',
219
+ description: 'Entity the user has clicked in the 3D viewer. Subscribe to receive `notifications/resources/updated` on every pick.',
220
+ mimeType: 'application/json',
221
+ }];
222
+ }
223
+ match(uri) {
224
+ return uri === `${URI_PREFIX}viewer/selection` || /^ifc-lite:\/\/model\/[^/]+\/viewer\/selection$/.test(uri);
225
+ }
226
+ read(uri, ctx) {
227
+ const state = ctx.viewer?.state();
228
+ if (!state) {
229
+ return [jsonContents(uri, { open: false, selection: [] })];
230
+ }
231
+ return [jsonContents(uri, {
232
+ open: true,
233
+ modelId: state.modelId,
234
+ url: state.url,
235
+ port: state.port,
236
+ selection: state.selection,
237
+ })];
238
+ }
239
+ }
240
+ class ViewerStatusProvider {
241
+ name = 'viewer-status';
242
+ list() {
243
+ return [{
244
+ uri: `${URI_PREFIX}viewer/status`,
245
+ name: 'Viewer status',
246
+ description: 'Whether the viewer is open, on what port, and how many browser clients are connected.',
247
+ mimeType: 'application/json',
248
+ }];
249
+ }
250
+ match(uri) {
251
+ return uri === `${URI_PREFIX}viewer/status`;
252
+ }
253
+ read(uri, ctx) {
254
+ const state = ctx.viewer?.state();
255
+ return [jsonContents(uri, state ?? { open: false })];
256
+ }
257
+ }
258
+ export function defaultResourceProviders() {
259
+ return [
260
+ new ServerManifestProvider(),
261
+ new ManifestProvider(),
262
+ new EntityProvider(),
263
+ new SpatialTreeProvider(),
264
+ new MaterialsProvider(),
265
+ new PropertySetsProvider(),
266
+ new ViewerSelectionProvider(),
267
+ new ViewerStatusProvider(),
268
+ ];
269
+ }
270
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/resources/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ResourceContents, ResourceDefinition } from '../protocol/index.js';
2
+ import type { ToolContext } from '../context.js';
3
+ /**
4
+ * A ResourceProvider can either:
5
+ * - enumerate concrete resources (`list()`) — useful for static resources
6
+ * - resolve URIs by pattern (`match()` + `read()`) — for dynamic ones
7
+ * (e.g. `ifc-lite://model/{id}/entity/{globalId}`)
8
+ *
9
+ * Most providers do both: they enumerate the "manifest" resources and serve
10
+ * any URI that matches their patterns.
11
+ */
12
+ export interface ResourceProvider {
13
+ /** Stable name for diagnostics. */
14
+ name: string;
15
+ /** Static resources advertised in `resources/list`. */
16
+ list(ctx: ToolContext): Promise<ResourceDefinition[]> | ResourceDefinition[];
17
+ /** True iff this provider can read the given URI. */
18
+ match(uri: string): boolean;
19
+ /** Read the resource. Throws when uri doesn't match. */
20
+ read(uri: string, ctx: ToolContext): Promise<ResourceContents[]> | ResourceContents[];
21
+ }
22
+ export declare class ResourceRegistry {
23
+ private providers;
24
+ register(provider: ResourceProvider): void;
25
+ registerAll(providers: ResourceProvider[]): void;
26
+ list(ctx: ToolContext): Promise<ResourceDefinition[]>;
27
+ matchProvider(uri: string): ResourceProvider | null;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC;IAC7E,qDAAqD;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,wDAAwD;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC;CACvF;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAE3C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI1C,WAAW,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAI1C,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAS3D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAMpD"}
@@ -0,0 +1,30 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export class ResourceRegistry {
5
+ providers = [];
6
+ register(provider) {
7
+ this.providers.push(provider);
8
+ }
9
+ registerAll(providers) {
10
+ for (const p of providers)
11
+ this.register(p);
12
+ }
13
+ async list(ctx) {
14
+ const all = [];
15
+ for (const p of this.providers) {
16
+ const items = await p.list(ctx);
17
+ for (const item of items)
18
+ all.push(item);
19
+ }
20
+ return all;
21
+ }
22
+ matchProvider(uri) {
23
+ for (const p of this.providers) {
24
+ if (p.match(uri))
25
+ return p;
26
+ }
27
+ return null;
28
+ }
29
+ }
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyB/D,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAuB,EAAE,CAAC;IAE3C,QAAQ,CAAC,QAA0B;QACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,SAA6B;QACvC,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAgB;QACzB,MAAM,GAAG,GAAyB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa,CAAC,GAAW;QACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}