@sealab/mcp-server 1.0.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/PROPOSED-CHANGES-INSERTION-POINTS.md +220 -0
- package/SEALAB_MCP_DOCUMENTATION.md +1136 -0
- package/dist/client/api-client.js +44 -0
- package/dist/index.js +42 -0
- package/dist/tools/canvas.js +446 -0
- package/dist/tools/catalog.js +95 -0
- package/dist/tools/configuration-info.js +299 -0
- package/dist/tools/configuration.js +32 -0
- package/dist/tools/orders.js +1267 -0
- package/dist/tools/saved-settings.js +271 -0
- package/package.json +32 -0
- package/resources/tooltips/backPanel.txt +17 -0
- package/resources/tooltips/backPanelMaterial.txt +29 -0
- package/resources/tooltips/caseEdge.txt +18 -0
- package/resources/tooltips/caseMaterial.txt +31 -0
- package/resources/tooltips/depth.txt +11 -0
- package/resources/tooltips/drawerType.txt +12 -0
- package/resources/tooltips/edgeBandingType.txt +18 -0
- package/resources/tooltips/excludeFronts.txt +5 -0
- package/resources/tooltips/frontEdge.txt +18 -0
- package/resources/tooltips/frontMaterial.txt +35 -0
- package/resources/tooltips/gapBottom.txt +2 -0
- package/resources/tooltips/gapCenter.txt +2 -0
- package/resources/tooltips/gapLeft.txt +15 -0
- package/resources/tooltips/gapRight.txt +15 -0
- package/resources/tooltips/gapTop.txt +2 -0
- package/resources/tooltips/height.txt +6 -0
- package/resources/tooltips/hingePlate.txt +11 -0
- package/resources/tooltips/includeLegLevelers.txt +8 -0
- package/resources/tooltips/jointMethod.txt +7 -0
- package/resources/tooltips/leftCornerWidth.txt +2 -0
- package/resources/tooltips/numOfShelves.txt +6 -0
- package/resources/tooltips/positionName.txt +3 -0
- package/resources/tooltips/rightCornerDepth.txt +2 -0
- package/resources/tooltips/topDrwrHeight.txt +8 -0
- package/resources/tooltips/width.txt +5 -0
- package/src/client/api-client.ts +37 -0
- package/src/index.ts +52 -0
- package/src/tools/canvas.ts +442 -0
- package/src/tools/catalog.test.ts +61 -0
- package/src/tools/catalog.ts +80 -0
- package/src/tools/configuration-info.ts +274 -0
- package/src/tools/configuration.test.ts +43 -0
- package/src/tools/configuration.ts +25 -0
- package/src/tools/orders.test.ts +260 -0
- package/src/tools/orders.ts +1229 -0
- package/src/tools/saved-settings.ts +241 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.savedSettingsTools = void 0;
|
|
4
|
+
exports.getSavedSettingsPresets = getSavedSettingsPresets;
|
|
5
|
+
exports.getMySavedSettings = getMySavedSettings;
|
|
6
|
+
exports.getSavedSettingById = getSavedSettingById;
|
|
7
|
+
exports.createSavedSetting = createSavedSetting;
|
|
8
|
+
exports.updateSavedSetting = updateSavedSetting;
|
|
9
|
+
exports.deleteSavedSetting = deleteSavedSetting;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const api_client_1 = require("../client/api-client");
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Schemas
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const SavedSettingSchema = zod_1.z.object({
|
|
16
|
+
savedSettingsId: zod_1.z.number().optional(),
|
|
17
|
+
name: zod_1.z.string().describe('Name of the saved setting (e.g., "Modern Euro", "Traditional")'),
|
|
18
|
+
frontMaterial: zod_1.z.string().describe('Front material specification'),
|
|
19
|
+
caseMaterial: zod_1.z.string().describe('Case material specification'),
|
|
20
|
+
backPanelMaterial: zod_1.z.string().describe('Back panel material'),
|
|
21
|
+
backPanel: zod_1.z.string().describe('Back panel type'),
|
|
22
|
+
drawerType: zod_1.z.string().describe('Drawer type'),
|
|
23
|
+
jointMethod: zod_1.z.string().describe('Joint method'),
|
|
24
|
+
caseEdge: zod_1.z.string().describe('Case edge treatment'),
|
|
25
|
+
frontEdge: zod_1.z.string().describe('Front edge treatment'),
|
|
26
|
+
numOfShelves: zod_1.z.string().describe('Number of shelves'),
|
|
27
|
+
bottomPanelConnector: zod_1.z.string().describe('Bottom panel connector (e.g., "Leg Levelers")'),
|
|
28
|
+
topDrwrHeightValue: zod_1.z.string().describe('Top drawer height value'),
|
|
29
|
+
hingePlate: zod_1.z.string().describe('Hinge plate type'),
|
|
30
|
+
includeLegLevelers: zod_1.z.string().describe('Include leg levelers flag'),
|
|
31
|
+
isPreset: zod_1.z.number().optional().describe('1 = public preset, 0 = user-specific'),
|
|
32
|
+
});
|
|
33
|
+
const GetSavedSettingsPresetsSchema = zod_1.z.object({});
|
|
34
|
+
const GetMySavedSettingsSchema = zod_1.z.object({});
|
|
35
|
+
const GetSavedSettingByIdSchema = zod_1.z.object({
|
|
36
|
+
id: zod_1.z.number().describe('Saved setting ID'),
|
|
37
|
+
});
|
|
38
|
+
const CreateSavedSettingSchema = SavedSettingSchema.omit({ savedSettingsId: true, isPreset: true }).extend({
|
|
39
|
+
isPreset: zod_1.z.boolean().optional().default(false).describe('Set to true to create a public preset (requires admin privileges)'),
|
|
40
|
+
});
|
|
41
|
+
const UpdateSavedSettingSchema = SavedSettingSchema.pick({
|
|
42
|
+
savedSettingsId: true,
|
|
43
|
+
name: true,
|
|
44
|
+
frontMaterial: true,
|
|
45
|
+
caseMaterial: true,
|
|
46
|
+
backPanelMaterial: true,
|
|
47
|
+
backPanel: true,
|
|
48
|
+
drawerType: true,
|
|
49
|
+
jointMethod: true,
|
|
50
|
+
caseEdge: true,
|
|
51
|
+
frontEdge: true,
|
|
52
|
+
numOfShelves: true,
|
|
53
|
+
bottomPanelConnector: true,
|
|
54
|
+
topDrwrHeightValue: true,
|
|
55
|
+
hingePlate: true,
|
|
56
|
+
includeLegLevelers: true,
|
|
57
|
+
});
|
|
58
|
+
const DeleteSavedSettingSchema = zod_1.z.object({
|
|
59
|
+
id: zod_1.z.number().describe('Saved setting ID to delete'),
|
|
60
|
+
});
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Handlers
|
|
63
|
+
// ============================================================================
|
|
64
|
+
async function getSavedSettingsPresets() {
|
|
65
|
+
try {
|
|
66
|
+
const { data } = await api_client_1.client.get('/saved-settings/presets');
|
|
67
|
+
if (!data || data.length === 0)
|
|
68
|
+
return 'No preset saved settings found.';
|
|
69
|
+
return JSON.stringify(data, null, 2);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
try {
|
|
73
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
return e.message;
|
|
77
|
+
}
|
|
78
|
+
return 'Unexpected error fetching preset saved settings.';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function getMySavedSettings() {
|
|
82
|
+
try {
|
|
83
|
+
const { data } = await api_client_1.client.get('/saved-settings/user');
|
|
84
|
+
if (!data || data.length === 0)
|
|
85
|
+
return 'No saved settings found for your account.';
|
|
86
|
+
return JSON.stringify(data, null, 2);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
try {
|
|
90
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
return e.message;
|
|
94
|
+
}
|
|
95
|
+
return 'Unexpected error fetching your saved settings.';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function getSavedSettingById(input) {
|
|
99
|
+
try {
|
|
100
|
+
const { data } = await api_client_1.client.get(`/saved-settings/${input.id}`);
|
|
101
|
+
return JSON.stringify(data, null, 2);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
try {
|
|
105
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
return e.message;
|
|
109
|
+
}
|
|
110
|
+
return 'Unexpected error fetching saved setting.';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function createSavedSetting(input) {
|
|
114
|
+
try {
|
|
115
|
+
const { data } = await api_client_1.client.post('/saved-settings/user', input);
|
|
116
|
+
return `Saved setting created successfully. ID: ${data.savedSettingsId}`;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
try {
|
|
120
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
return e.message;
|
|
124
|
+
}
|
|
125
|
+
return 'Unexpected error creating saved setting.';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function updateSavedSetting(input) {
|
|
129
|
+
try {
|
|
130
|
+
const { data } = await api_client_1.client.put(`/saved-settings/${input.savedSettingsId}`, input);
|
|
131
|
+
return `Saved setting updated successfully. ID: ${data.savedSettingsId}`;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
try {
|
|
135
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
return e.message;
|
|
139
|
+
}
|
|
140
|
+
return 'Unexpected error updating saved setting.';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function deleteSavedSetting(input) {
|
|
144
|
+
try {
|
|
145
|
+
await api_client_1.client.delete(`/saved-settings/${input.id}`);
|
|
146
|
+
return `Saved setting ${input.id} deleted successfully.`;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
try {
|
|
150
|
+
(0, api_client_1.handleAxiosError)(error);
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
return e.message;
|
|
154
|
+
}
|
|
155
|
+
return 'Unexpected error deleting saved setting.';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// Tool definitions
|
|
160
|
+
// ============================================================================
|
|
161
|
+
exports.savedSettingsTools = [
|
|
162
|
+
{
|
|
163
|
+
name: 'get_saved_settings_presets',
|
|
164
|
+
description: `Get all public preset saved settings. These are shared templates available to all users.
|
|
165
|
+
|
|
166
|
+
Use this tool when:
|
|
167
|
+
- User wants to see available preset templates
|
|
168
|
+
- User is looking for standard configurations (e.g., "Modern Euro", "Traditional")
|
|
169
|
+
- User wants to apply a preset to their current configuration
|
|
170
|
+
|
|
171
|
+
IMPORTANT: When you use values from a saved setting to configure an article (via create_saved_cart, create_order, or add_articles_to_cart),
|
|
172
|
+
you MUST also set the "settingsName" field INSIDE each article object to the exact name of the saved setting (e.g., "Modern Euro", "Zach's Kitchen").
|
|
173
|
+
CRITICAL: settingsName is an ARTICLE-LEVEL field only. NEVER pass it at the order level — it will cause a validation error.
|
|
174
|
+
|
|
175
|
+
Returns: Array of preset saved settings with all configuration fields.`,
|
|
176
|
+
inputSchema: GetSavedSettingsPresetsSchema,
|
|
177
|
+
handler: getSavedSettingsPresets,
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: 'get_my_saved_settings',
|
|
181
|
+
description: `Get all saved settings for the currently authenticated user.
|
|
182
|
+
|
|
183
|
+
This includes:
|
|
184
|
+
- User's personal saved settings (created by the user)
|
|
185
|
+
- Public presets (available to all users)
|
|
186
|
+
|
|
187
|
+
Use this tool when:
|
|
188
|
+
- User wants to see their saved configurations
|
|
189
|
+
- User wants to load a previously saved setting
|
|
190
|
+
- User is managing their saved settings
|
|
191
|
+
|
|
192
|
+
IMPORTANT: When you use values from a saved setting to configure an article (via create_saved_cart, create_order, or add_articles_to_cart),
|
|
193
|
+
you MUST also set the "settingsName" field INSIDE each article object to the exact name of the saved setting (e.g., "Modern Euro", "Zach's Kitchen").
|
|
194
|
+
CRITICAL: settingsName is an ARTICLE-LEVEL field only. NEVER pass it at the order level — it will cause a validation error.
|
|
195
|
+
|
|
196
|
+
Returns: Array of saved settings (both personal and presets).`,
|
|
197
|
+
inputSchema: GetMySavedSettingsSchema,
|
|
198
|
+
handler: getMySavedSettings,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'get_saved_setting_by_id',
|
|
202
|
+
description: `Get a specific saved setting by its ID.
|
|
203
|
+
|
|
204
|
+
Authorization:
|
|
205
|
+
- Presets (isPreset=1): Available to all authenticated users
|
|
206
|
+
- User settings: Only available to the owner
|
|
207
|
+
|
|
208
|
+
Use this tool when:
|
|
209
|
+
- User wants to view details of a specific saved setting
|
|
210
|
+
- You have a saved setting ID from a previous operation
|
|
211
|
+
|
|
212
|
+
Returns: Single saved setting object.`,
|
|
213
|
+
inputSchema: GetSavedSettingByIdSchema,
|
|
214
|
+
handler: getSavedSettingById,
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: 'create_saved_setting',
|
|
218
|
+
description: `Create a new saved setting for the current user.
|
|
219
|
+
|
|
220
|
+
Use this tool when:
|
|
221
|
+
- User wants to save their current configuration for later use
|
|
222
|
+
- User has configured materials, edges, and options and wants to reuse them
|
|
223
|
+
- User says "save these settings" or "save this as a preset"
|
|
224
|
+
|
|
225
|
+
Required fields:
|
|
226
|
+
- name: A descriptive name for the setting (e.g., "My Modern Kitchen")
|
|
227
|
+
- frontMaterial: Front material specification
|
|
228
|
+
- caseMaterial: Case material specification
|
|
229
|
+
- Other fields as needed
|
|
230
|
+
|
|
231
|
+
Note: User-created settings are private by default (isPreset=0).`,
|
|
232
|
+
inputSchema: CreateSavedSettingSchema,
|
|
233
|
+
handler: createSavedSetting,
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'update_saved_setting',
|
|
237
|
+
description: `Update an existing saved setting.
|
|
238
|
+
|
|
239
|
+
Authorization:
|
|
240
|
+
- Can only update user's own settings (not presets)
|
|
241
|
+
- savedSettingsId is required to identify which setting to update
|
|
242
|
+
|
|
243
|
+
Use this tool when:
|
|
244
|
+
- User wants to modify a previously saved setting
|
|
245
|
+
- User wants to update material choices or configuration
|
|
246
|
+
- User says "update my saved setting" or "change the settings I saved"
|
|
247
|
+
|
|
248
|
+
Required fields:
|
|
249
|
+
- savedSettingsId: ID of the setting to update
|
|
250
|
+
- At least one field to update`,
|
|
251
|
+
inputSchema: UpdateSavedSettingSchema,
|
|
252
|
+
handler: updateSavedSetting,
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'delete_saved_setting',
|
|
256
|
+
description: `Delete a saved setting.
|
|
257
|
+
|
|
258
|
+
Authorization:
|
|
259
|
+
- Can only delete user's own settings (not presets)
|
|
260
|
+
- User must be the owner of the setting
|
|
261
|
+
|
|
262
|
+
Use this tool when:
|
|
263
|
+
- User wants to remove a saved setting
|
|
264
|
+
- User says "delete my saved setting" or "remove this configuration"
|
|
265
|
+
|
|
266
|
+
Required fields:
|
|
267
|
+
- id: ID of the setting to delete`,
|
|
268
|
+
inputSchema: DeleteSavedSettingSchema,
|
|
269
|
+
handler: deleteSavedSetting,
|
|
270
|
+
},
|
|
271
|
+
];
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sealab/mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for the Sealab cabinetry catalog",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"sealab-mcp-server": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"start": "node dist/index.js",
|
|
12
|
+
"dev": "ts-node src/index.ts",
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:watch": "vitest"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
18
|
+
"axios": "^1.6.0",
|
|
19
|
+
"form-data": "^4.0.0",
|
|
20
|
+
"zod": "^3.22.0",
|
|
21
|
+
"zod-to-json-schema": "^3.22.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^20.0.0",
|
|
25
|
+
"typescript": "^5.3.0",
|
|
26
|
+
"vitest": "^1.0.0",
|
|
27
|
+
"ts-node": "^10.9.0"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<h1>Cabinet Back Panel Attachment Methods</h1>
|
|
2
|
+
|
|
3
|
+
<p>The back panel method determines how the back panel of a cabinet is attached or positioned. Common methods include:</p>
|
|
4
|
+
|
|
5
|
+
<dl>
|
|
6
|
+
<dt><strong>Inset</strong></dt>
|
|
7
|
+
<dd>The back panel is placed flush inside the top, bottom, and sides of the cabinet. This method is useful if you want the back panel to be removable or if the sides are exposed.</dd>
|
|
8
|
+
|
|
9
|
+
<dt><strong>Applied</strong> (also referred to as <em>planted</em>)</dt>
|
|
10
|
+
<dd>The back panel sits on top of the top, bottom, and sides. It is typically screwed onto the edges of the cabinet case. With plywood core substrates, this is often the fastest and sturdiest way to assemble a cabinet.</dd>
|
|
11
|
+
|
|
12
|
+
<dt><strong>Rabbeted</strong></dt>
|
|
13
|
+
<dd>A rabbet (a recessed cut) is made along the back edges of the top, bottom, and sides, creating a 1/4-inch deep groove. The back panel fits into this rabbeted groove, providing a flush fit.</dd>
|
|
14
|
+
|
|
15
|
+
<dt><strong>Dadoed</strong> (also called <em>tongue and groove</em>)</dt>
|
|
16
|
+
<dd>A dado (a groove) is milled into the top, bottom, and sides of the cabinet. The back panel, often rabbeted along its edges, fits into these grooves. This method adds rigidity to the cabinet structure, making it especially beneficial for cabinets that are suspended from a wall or freestanding.</dd>
|
|
17
|
+
</dl>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<h1>Cabinet Back Panel Material</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>back panel material</strong> refers to the type of material used for the back section of the cabinet. The same material options are available for all parts of the cabinet, but the selection should be based on the specific requirements of your project.</p>
|
|
4
|
+
|
|
5
|
+
<p>For example, when configuring a prefinished maple cabinet box, you might choose <strong>3/4" maple</strong> for the case and <strong>1/2" maple</strong> for the back. In some cases, you may opt for an entirely different material depending on the style or structure you are trying to achieve.</p>
|
|
6
|
+
|
|
7
|
+
<p>In most situations, it is common to use the same material for the back panel as the case.</p>
|
|
8
|
+
|
|
9
|
+
<h2>Available Materials</h2>
|
|
10
|
+
<ul>
|
|
11
|
+
<li>1" Pre-finished Maple</li>
|
|
12
|
+
<li>3/4" Medex</li>
|
|
13
|
+
<li>1/2" Pre-finished Maple</li>
|
|
14
|
+
<li>1/2" Baltic Birch Multiply</li>
|
|
15
|
+
<li>1/2" Standard MDF</li>
|
|
16
|
+
<li>3/4" Pre-finished Maple</li>
|
|
17
|
+
<li>3/4" D3 Veneer Core Maple</li>
|
|
18
|
+
<li>1/2" Pre-finished Oak</li>
|
|
19
|
+
<li>5/8" Baltic Birch Multiply</li>
|
|
20
|
+
<li>3/4" Baltic Birch Multiply</li>
|
|
21
|
+
<li>Fronts By Others</li>
|
|
22
|
+
<li>3/4" Custom Oak</li>
|
|
23
|
+
<li>1" Medex</li>
|
|
24
|
+
<li>1/4" Pre-finished Maple</li>
|
|
25
|
+
<li>1" Pre-finished Oak</li>
|
|
26
|
+
<li>1/2" Pre-finished Walnut</li>
|
|
27
|
+
<li>1/2" D3 Veneer Core Maple</li>
|
|
28
|
+
<li>3/4" Pre-finished Oak</li>
|
|
29
|
+
</ul>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<h1>Cabinet Case Edge Banding</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>case edge</strong> refers to the edge banding applied to the visible edges of the cabinet's body or frame. Edge banding is a thin material, typically made of plastic or wood, used to cover the exposed edges of the case, providing a finished appearance and protecting the core material from damage.</p>
|
|
4
|
+
|
|
5
|
+
<p>We offer a wide range of edge banding options, but there are many more available. If you require a specific edge banding not listed below, please reach out and we will do our best to accommodate your request.</p>
|
|
6
|
+
|
|
7
|
+
<h2>Available Edge Banding Options</h2>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>0.5 millimeter Edgebanding</li>
|
|
10
|
+
<li>0.5 millimeter Prefinished Oak</li>
|
|
11
|
+
<li>0.5 millimeter White Oak</li>
|
|
12
|
+
<li>0.5 millimeter Walnut</li>
|
|
13
|
+
<li>0.5 millimeter White PVC</li>
|
|
14
|
+
<li>No Edgebanding</li>
|
|
15
|
+
<li>0.5 millimeter Prefinished Maple</li>
|
|
16
|
+
<li>0.5 millimeter PVC (White)</li>
|
|
17
|
+
<li>1.0 millimeter Edgebanding (contact for details)</li>
|
|
18
|
+
</ul>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<h1>Cabinet Case Panel Material</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>case material</strong> refers to the type of material used for the top, bottom, sides, shelves, and dividers of the cabinet. The same material options are available for all parts of the cabinet, and the selection should be based on the specific requirements of your project.</p>
|
|
4
|
+
|
|
5
|
+
<p>For example, when configuring a prefinished maple cabinet box, you might choose <strong>3/4" maple</strong> for the case and <strong>1/2" maple</strong> for the back. In some cases, you may opt for a different material depending on the style or structure you are trying to achieve.</p>
|
|
6
|
+
|
|
7
|
+
<p>In most situations, using <strong>3/4" thick material</strong> for the case is reccomended, as it helps ensure all hardware functions as intended.</p>
|
|
8
|
+
|
|
9
|
+
<p><strong>Note:</strong> While we make every effort to review all orders in detail, it is the user's responsibility to select materials that suit the functional requirements of their project. Sealab does not guarantee that the intended hardware will function correctly if the selected material is incompatible. If you are unsure how the case material may affect the cabinet's function, please reach out to our team for assistance.</p>
|
|
10
|
+
|
|
11
|
+
<h2>Available Materials</h2>
|
|
12
|
+
<ul>
|
|
13
|
+
<li>1" Pre-finished Maple</li>
|
|
14
|
+
<li>3/4" Medex</li>
|
|
15
|
+
<li>1/2" Pre-finished Maple</li>
|
|
16
|
+
<li>1/2" Baltic Birch Multiply</li>
|
|
17
|
+
<li>1/2" Standard MDF</li>
|
|
18
|
+
<li>3/4" Pre-finished Maple</li>
|
|
19
|
+
<li>3/4" D3 Veneer Core Maple</li>
|
|
20
|
+
<li>1/2" Pre-finished Oak</li>
|
|
21
|
+
<li>5/8" Baltic Birch Multiply</li>
|
|
22
|
+
<li>3/4" Baltic Birch Multiply</li>
|
|
23
|
+
<li>Fronts By Others</li>
|
|
24
|
+
<li>3/4" Custom Oak</li>
|
|
25
|
+
<li>1" Medex</li>
|
|
26
|
+
<li>1/4" Pre-finished Maple</li>
|
|
27
|
+
<li>1" Pre-finished Oak</li>
|
|
28
|
+
<li>1/2" Pre-finished Walnut</li>
|
|
29
|
+
<li>1/2" D3 Veneer Core Maple</li>
|
|
30
|
+
<li>3/4" Pre-finished Oak</li>
|
|
31
|
+
</ul>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<h1>Cabinet Depth</h1>
|
|
2
|
+
|
|
3
|
+
<p><strong>Depth</strong> is the measurement from the front edge of the case to the outside of the back panel of the cabinet. The front panel and bumper gap are additional to this measurement.</p>
|
|
4
|
+
|
|
5
|
+
<p>For example, if the specified cabinet depth is <strong>12"</strong> and the door thickness is <strong>3/4"</strong>, the overall depth of the cabinet will be <strong>12 7/8"</strong>.</p>
|
|
6
|
+
|
|
7
|
+
<p>The overall depth is calculated as follows:</p>
|
|
8
|
+
|
|
9
|
+
<ul>
|
|
10
|
+
<li>Unit overall depth = Specified Depth + 1/8" bumper space + Front material thickness</li>
|
|
11
|
+
</ul>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h1>Drawer Type</h1>
|
|
2
|
+
|
|
3
|
+
<p>Sealab cabinets are currently programmed exclusively for <strong>undermount drawer glides</strong>. Most brands offering undermount glides follow the same drilling pattern for the sides of the cabinet, and the sizing of the drawer box typically adheres to the same rules across brands.</p>
|
|
4
|
+
|
|
5
|
+
<p>For example, when using <strong>Blum Tandem</strong> drawer glides, the drawer box will be offset by either <strong>5/16"</strong> or <strong>3/8"</strong> from the sides of the cabinet, depending on the thickness of the drawer box material.</p>
|
|
6
|
+
|
|
7
|
+
<p>The <strong>drawer type</strong> refers to the material and thickness used for the sides of the drawer. For example, a <strong>Wooden 5/8" drawer</strong> indicates that the drawer sides are made of <strong>5/8"</strong> thick material.</p>
|
|
8
|
+
|
|
9
|
+
<p>While Sealab does not currently offer drawer boxes as part of our deliverables, we include the drillings for the undermount glides, and provide sizing for the drawer boxes in a convenient list. Many third-party providers offer made-to-order drawer boxes, and the dimensions from our list can be used directly for ordering.</p>
|
|
10
|
+
|
|
11
|
+
<p>It is important to specify the correct drawer type if you plan to use our dimensions for ordering. If you have any questions, feel free to reach out, and we will be happy to assist.</p>
|
|
12
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<h1>Edgebanding Type</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>edgebanding type</strong> refers to the material and finish applied to the edges of your cabinet components. Edgebanding protects the core material from moisture and wear while providing a polished, finished appearance. Choosing <strong>No Edgebanding</strong> means the edges will remain exposed, which can be suitable for areas where aesthetics and durability are less critical, but it may leave the edges more susceptible to damage.</p>
|
|
4
|
+
|
|
5
|
+
<p>We offer a wide range of edgebanding options, but many more are available. If you require a specific type of edgebanding not listed below, please reach out and we will do our best to accommodate your request.</p>
|
|
6
|
+
|
|
7
|
+
<h2>Available Edgebanding Options</h2>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>0.5 millimeter Edgebanding</li>
|
|
10
|
+
<li>0.5 millimeter Prefinished Oak</li>
|
|
11
|
+
<li>0.5 millimeter White Oak</li>
|
|
12
|
+
<li>0.5 millimeter Walnut</li>
|
|
13
|
+
<li>0.5 millimeter White PVC</li>
|
|
14
|
+
<li>No Edgebanding</li>
|
|
15
|
+
<li>0.5 millimeter Prefinished Maple</li>
|
|
16
|
+
<li>0.5 millimeter PVC (White)</li>
|
|
17
|
+
<li>1.0 millimeter Edgebanding (contact for details)</li>
|
|
18
|
+
</ul>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<h1>No Front Option</h1>
|
|
2
|
+
|
|
3
|
+
<p>Checking this option allows you to exclude the front-facing parts of the cabinet from your order. This is useful if you plan to source or customize the cabinet fronts separately, or if you only need the cabinet case. It offers flexibility for customization and may reduce costs if fronts are not required for your project.</p>
|
|
4
|
+
|
|
5
|
+
<p><strong>Note:</strong> If you choose a cabinet configuration that includes a door or drawer and select "No Front," you will still receive the hinge drilling and drawer glide drilling inside the cabinet. For configurations that you plan to leave open, consider one of the <strong>Open Type</strong> cabinets from the catalog.</p>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<h1>Front Edge Banding</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>front edge</strong> refers to the edge banding applied to the visible edges of the cabinet's front-facing components, such as doors or drawers. Edge banding on these parts not only enhances the aesthetic by providing a seamless finish but also protects frequently used areas from wear and tear. The <strong>0.5 mm edge banding</strong> adds a sleek, clean finish while offering durability in high-contact areas.</p>
|
|
4
|
+
|
|
5
|
+
<p>We offer a wide range of edge banding options, but many more are available. If you require a specific edge banding not listed below, please reach out, and we will do our best to accommodate your request.</p>
|
|
6
|
+
|
|
7
|
+
<h2>Available Edge Banding Options</h2>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>0.5 millimeter Edgebanding</li>
|
|
10
|
+
<li>0.5 millimeter Prefinished Oak</li>
|
|
11
|
+
<li>0.5 millimeter White Oak</li>
|
|
12
|
+
<li>0.5 millimeter Walnut</li>
|
|
13
|
+
<li>0.5 millimeter White PVC</li>
|
|
14
|
+
<li>No Edgebanding</li>
|
|
15
|
+
<li>0.5 millimeter Prefinished Maple</li>
|
|
16
|
+
<li>0.5 millimeter PVC (White)</li>
|
|
17
|
+
<li>1.0 millimeter Edgebanding (contact for details)</li>
|
|
18
|
+
</ul>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<h1>Front Material</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>front material</strong> refers to the material used for the cabinet's front-facing parts, such as doors or drawer fronts. This choice influences the cabinet's overall look and feel, as well as its resistance to wear and tear. Front materials like <strong>Medex</strong> are known for their stability and smooth surface, making them ideal for painting. Choosing the right front material ensures that the cabinet's exterior complements the rest of your space.</p>
|
|
4
|
+
|
|
5
|
+
<p>We offer the same material options for all parts of the cabinet, and the selection should be based on the specific requirements of your project.</p>
|
|
6
|
+
|
|
7
|
+
<p>For projects where you plan to create your own fronts or order fronts from another vendor, we provide a complete list of front dimensions as part of our production data deliverables. Using this list, you can accurately and confidently pre-produce all of the fronts separately.</p>
|
|
8
|
+
|
|
9
|
+
<p><strong>Note:</strong> It is especially important to pay attention to the <strong>GAP settings</strong> to ensure consistent reveals between all fronts in an elevation. Refer to the GAP settings page for more information.</p>
|
|
10
|
+
|
|
11
|
+
<p><strong>Note:</strong> When planning your project, be sure to order enough loose parts such as panels, fillers, and toe kicks. These parts are typically configured with the same material as the fronts on the cabinets.</p>
|
|
12
|
+
|
|
13
|
+
<p><strong>Note:</strong> While we make every effort to review all orders in detail, it is the user's responsibility to select materials that suit the functional requirements of their project. Sealab does not guarantee that the intended hardware will function correctly if the selected material is incompatible. If you are unsure how the material may affect the cabinet's function, please reach out to our team for assistance.</p>
|
|
14
|
+
|
|
15
|
+
<h2>Available Materials</h2>
|
|
16
|
+
<ul>
|
|
17
|
+
<li>1" Pre-finished Maple</li>
|
|
18
|
+
<li>3/4" Medex</li>
|
|
19
|
+
<li>1/2" Pre-finished Maple</li>
|
|
20
|
+
<li>1/2" Baltic Birch Multiply</li>
|
|
21
|
+
<li>1/2" Standard MDF</li>
|
|
22
|
+
<li>3/4" Pre-finished Maple</li>
|
|
23
|
+
<li>3/4" D3 Veneer Core Maple</li>
|
|
24
|
+
<li>1/2" Pre-finished Oak</li>
|
|
25
|
+
<li>5/8" Baltic Birch Multiply</li>
|
|
26
|
+
<li>3/4" Baltic Birch Multiply</li>
|
|
27
|
+
<li>Fronts By Others</li>
|
|
28
|
+
<li>3/4" Custom Oak</li>
|
|
29
|
+
<li>1" Medex</li>
|
|
30
|
+
<li>1/4" Pre-finished Maple</li>
|
|
31
|
+
<li>1" Pre-finished Oak</li>
|
|
32
|
+
<li>1/2" Pre-finished Walnut</li>
|
|
33
|
+
<li>1/2" D3 Veneer Core Maple</li>
|
|
34
|
+
<li>3/4" Pre-finished Oak</li>
|
|
35
|
+
</ul>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<h1>Gap Bottom</h1>
|
|
2
|
+
The gap bottom is the space between the bottom edge of the cabinet or door and the surface beneath it, such as the floor or another cabinet. Adjusting this gap is essential to ensure that the cabinet doors or drawers do not scrape the surface below and can open freely.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<h1>Gap Left</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>gap left</strong> refers to the space on the left side between the cabinet or door and the adjacent surface. This measurement is crucial for maintaining consistent spacing in multi-cabinet setups or when aligning with walls and other surfaces, preventing any tight fits or rubbing.</p>
|
|
4
|
+
|
|
5
|
+
<p>For cabinets that abut a finished panel or wall, the <strong>Gap Left/Right</strong> will typically be set to a full typical reveal.</p>
|
|
6
|
+
|
|
7
|
+
<p>For cabinets placed in a line of adjacent cabinets, the <strong>Gap Left/Right</strong> will be set to half of the typical reveal.</p>
|
|
8
|
+
|
|
9
|
+
<p>For example, a typical full reveal is usually set to <strong>1/8"</strong>. When cabinets are placed in line with other cabinets, the adjoining <strong>Gap Left/Right</strong> will be <strong>1/16"</strong> on each cabinet, leaving a total of <strong>1/8"</strong> between them.</p>
|
|
10
|
+
|
|
11
|
+
<p>The revealed space between adjacent fronts is often a matter of style and taste. However, it is important to set the reveals appropriately to ensure the hardware functions as intended.</p>
|
|
12
|
+
|
|
13
|
+
<p><strong>Note:</strong> Sealab cabinets are typically configured for full-overlay frameless applications. If you plan to add frames or apply fronts in an alternative way, it may be possible to adjust the gap settings to achieve the desired result. However, trial applications are recommended, and Sealab does not guarantee that hardware will function as intended for cabinets configured outside the manufacturer's specifications.</p>
|
|
14
|
+
|
|
15
|
+
<p>We have limits in place to prevent such mistakes, but it is ultimately the user's responsibility to ensure that the configuration will work as intended.</p>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<h1>Gap Right</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>gap right</strong> refers to the space on the right side between the cabinet or door and the adjacent surface. This measurement is crucial for maintaining consistent spacing in multi-cabinet setups or when aligning with walls and other surfaces, preventing any tight fits or rubbing.</p>
|
|
4
|
+
|
|
5
|
+
<p>For cabinets that abut a finished panel or wall, the <strong>Gap Left/Right</strong> will typically be set to a full typical reveal.</p>
|
|
6
|
+
|
|
7
|
+
<p>For cabinets placed in a line of adjacent cabinets, the <strong>Gap Left/Right</strong> will be set to half of the typical reveal.</p>
|
|
8
|
+
|
|
9
|
+
<p>For example, a typical full reveal is usually set to <strong>1/8"</strong>. When cabinets are placed in line with other cabinets, the adjoining <strong>Gap Left/Right</strong> will be <strong>1/16"</strong> on each cabinet, leaving a total of <strong>1/8"</strong> between them.</p>
|
|
10
|
+
|
|
11
|
+
<p>The revealed space between adjacent fronts is often a matter of style and taste. However, it is important to set the reveals appropriately to ensure the hardware functions as intended.</p>
|
|
12
|
+
|
|
13
|
+
<p><strong>Note:</strong> Sealab cabinets are typically configured for full-overlay frameless applications. If you plan to add frames or apply fronts in an alternative way, it may be possible to adjust the gap settings to achieve the desired result. However, trial applications are recommended, and Sealab does not guarantee that hardware will function as intended for cabinets configured outside the manufacturer's specifications.</p>
|
|
14
|
+
|
|
15
|
+
<p>We have limits in place to prevent such mistakes, but it is ultimately the user's responsibility to ensure that the configuration will work as intended.</p>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<h1>Gap Top</h1>
|
|
2
|
+
The gap top represents the space between the top edge of the cabinet or door and any adjacent surfaces or components. Adjusting this measurement allows for precise alignment and smooth operation of doors or drawers, ensuring they open and close without obstruction.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
<h1>Cabinet Height</h1>
|
|
3
|
+
|
|
4
|
+
<p>The <strong>height</strong> represents the vertical dimension of the cabinet, measured from the bottom of the carcass to the top. This measurement does not include the height of leg levelers, plinth, toekick, or countertop—it only refers to the case of the cabinet.</p>
|
|
5
|
+
|
|
6
|
+
<p><strong>Note:</strong> The height of the cabinet may differ from the height of the fronts. For more information on front sizing, refer to the <strong>GAP SETTINGS</strong> page.</p>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<h1>Hinge Plate</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>hinge plate</strong> is the mounting component that connects the cabinet door part of the concealed hinge to the cabinet's side panel. The drilling pattern for the hinge plate is based on common Euro-style cup hinges, such as <strong>BLUM Clip</strong>, and many brands share the same template.</p>
|
|
4
|
+
|
|
5
|
+
<p>There are two primary styles of hinge plates:</p>
|
|
6
|
+
<ul>
|
|
7
|
+
<li><strong>Cross Plate</strong>: The traditional wing-style mounting plate.</li>
|
|
8
|
+
<li><strong>Inline Plate</strong>: A newer, sleek style that minimizes the appearance inside the cabinet.</li>
|
|
9
|
+
</ul>
|
|
10
|
+
|
|
11
|
+
<p>The typical mounting screw for hinges is a <strong>5mm dowel screw</strong>.</p>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<h1>Top Drawer Height</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>top drawer height</strong> refers to the vertical dimension of the top drawer, measured in inches.</p>
|
|
4
|
+
|
|
5
|
+
<p>This is often the most noticeable datum on the elevation of base cabinets and typically ranges from <strong>5 to 7 inches</strong>. In some cases, this variable is also used to set the open space at the top of an appliance cabinet.</p>
|
|
6
|
+
|
|
7
|
+
<p>It's important to note that, although we make every effort to ensure consistency across cabinet configurations, it is essential that the user reviews the front dimensions in the production data documents. If you encounter any difficulties in setting the drawer heights, we are here to assist.</p>
|
|
8
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<h1>Joint Method</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>joint method</strong> refers to how the various cabinet parts, such as sides, top, bottom, and dividers, are joined together. The <strong>biscuit joint method</strong> uses Lamello-style #20 joining biscuits that are inserted into slots cut into the edges of the parts being joined. When glued, the biscuits swell, creating a strong, precise, and durable joint. This method is widely used for its efficiency and reliability in woodworking.</p>
|
|
4
|
+
|
|
5
|
+
<p>We place biscuits parametrically about <strong>5 inches</strong> apart along the edge of the part, with screw holes positioned between them as an optional feature.</p>
|
|
6
|
+
|
|
7
|
+
<p><strong>Pilot screw holes</strong> are typically drilled to <strong>4mm</strong>, allowing a #8 wood screw to pass through easily while holding the nib securely-usually without the need for countersinking.</p>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<h1>Number of Shelves</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>number of shelves</strong> refers to the quantity of adjustable shelves within the cabinet. Parametric shelves are automatically generated based on the cabinet height, with typical spacing of approximately <strong>10 inches</strong> between each shelf.</p>
|
|
4
|
+
|
|
5
|
+
<p><strong>Note:</strong> The number of shelves can be customized to fit specific project requirements. Be sure to review the production data to confirm the shelf configuration for your cabinet.</p>
|
|
6
|
+
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<h1>Item Name</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>item name</strong> allows you to assign a unique identifier to your cabinet configuration. This name helps distinguish the cabinet from others in your project, making it easier to reference later. Please note that the name is limited to <strong>six characters</strong>, so it's important to choose something concise and recognizable, such as abbreviations or short codes related to the cabinet's style or placement.</p>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<h1>Right Corner Depth</h1>
|
|
2
|
+
The right corner depth refers to the measurement from the front to the back of the cabinet along the right side. This depth is important for corner cabinets because it determines how far the cabinet will extend into the room. Optimizing the depth ensures the cabinet provides enough storage space without encroaching too much into the surrounding area, particularly in small or tight spaces.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<h1>Top Drawer Height</h1>
|
|
2
|
+
|
|
3
|
+
<p>The <strong>top drawer height</strong> refers to the vertical dimension of the top drawer, measured in inches.</p>
|
|
4
|
+
|
|
5
|
+
<p>This is often the most noticeable datum on the elevation of base cabinets and typically ranges from <strong>5 to 7 inches</strong>. In some cases, this variable is also used to set the open space at the top of an appliance cabinet.</p>
|
|
6
|
+
|
|
7
|
+
<p>It's important to note that, although we make every effort to ensure consistency across cabinet configurations, it is essential that the user reviews the front dimensions in the production data documents. If you encounter any difficulties in setting the drawer heights, we are here to assist.</p>
|
|
8
|
+
|