@nestcorehq/mcp-server 1.6.0 → 1.8.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/.mcp.json +2 -2
- package/README.md +510 -501
- package/dist/sdk/endpoints.d.ts +7 -0
- package/dist/sdk/endpoints.d.ts.map +1 -1
- package/dist/sdk/endpoints.js +8 -0
- package/dist/sdk/endpoints.js.map +1 -1
- package/dist/sdk/nestcore.client.d.ts +28 -1
- package/dist/sdk/nestcore.client.d.ts.map +1 -1
- package/dist/sdk/nestcore.client.js +55 -3
- package/dist/sdk/nestcore.client.js.map +1 -1
- package/dist/tools/branches.tools.d.ts +10 -0
- package/dist/tools/branches.tools.d.ts.map +1 -0
- package/dist/tools/branches.tools.js +114 -0
- package/dist/tools/branches.tools.js.map +1 -0
- package/dist/tools/credits.tools.d.ts +9 -0
- package/dist/tools/credits.tools.d.ts.map +1 -0
- package/dist/tools/credits.tools.js +63 -0
- package/dist/tools/credits.tools.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/project.tools.d.ts.map +1 -1
- package/dist/tools/project.tools.js +60 -9
- package/dist/tools/project.tools.js.map +1 -1
- package/dist/utils/errors.d.ts +10 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +34 -2
- package/dist/utils/errors.js.map +1 -1
- package/package.json +54 -54
- package/src/sdk/endpoints.ts +9 -0
- package/src/sdk/nestcore.client.ts +65 -4
- package/src/tools/branches.tools.ts +124 -0
- package/src/tools/credits.tools.ts +68 -0
- package/src/tools/index.ts +4 -0
- package/src/tools/project.tools.ts +64 -9
- package/src/utils/errors.ts +34 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { formatErrorResponse } from '../utils/errors.js';
|
|
3
|
+
import { requireProjectId } from '../utils/validators.js';
|
|
4
|
+
const json = (data) => ({ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] });
|
|
5
|
+
/**
|
|
6
|
+
* Project branches. Every App project has Production (the live project, its
|
|
7
|
+
* existing id) and Development (its own project id, URL, keys and database:
|
|
8
|
+
* Production's schema and config, none of its data). Work on Development by
|
|
9
|
+
* making its id the active project; promote reviewed changes to Production.
|
|
10
|
+
*/
|
|
11
|
+
export function registerBranchTools(server, ctx) {
|
|
12
|
+
const projectOf = (projectId) => requireProjectId(projectId, ctx.session.getSession().currentProjectId);
|
|
13
|
+
server.registerTool('nestcore_list_branches', {
|
|
14
|
+
description: "A project's branches: Production (the live app) and Development (safe copy: same schema and config, its own data, users, URL and keys). " +
|
|
15
|
+
'Returns each branch id, slug, setup status, database/file size and the number of schema changes waiting to be promoted. ' +
|
|
16
|
+
'To work on Development, call nestcore_set_active_project with the development branch id: every other tool then targets it. ' +
|
|
17
|
+
'Prefer Development for schema experiments; never test destructive SQL on Production.',
|
|
18
|
+
inputSchema: { projectId: z.string().optional().describe('Project or branch id (default: active project)') },
|
|
19
|
+
}, async ({ projectId }) => {
|
|
20
|
+
try {
|
|
21
|
+
await ctx.session.ensureAuthenticated();
|
|
22
|
+
return json(await ctx.apiClient.branches('GET', projectOf(projectId)));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return formatErrorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
server.registerTool('nestcore_create_branch', {
|
|
29
|
+
description: 'Create the Development branch of a project if it has none (idempotent). Copies schema and config from Production (tables, RLS, functions, ' +
|
|
30
|
+
'buckets, auth settings, env vars with their values); never copies rows, end users or files. Jobs and webhooks start disabled. Takes a few seconds.',
|
|
31
|
+
inputSchema: { projectId: z.string().optional() },
|
|
32
|
+
}, async ({ projectId }) => {
|
|
33
|
+
try {
|
|
34
|
+
await ctx.session.ensureAuthenticated();
|
|
35
|
+
return json(await ctx.apiClient.branches('POST', projectOf(projectId), '/development'));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return formatErrorResponse(error);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
server.registerTool('nestcore_reset_branch', {
|
|
42
|
+
description: "Rebuild Development from Production: drops Development's database and re-clones Production's schema; ALL Development rows, end users and files " +
|
|
43
|
+
'are deleted and unpromoted changes discarded. URL, keys, env vars and functions are kept. Production is not touched. ' +
|
|
44
|
+
'Destructive for Development: only with the user\'s explicit request. Pass confirm: true.',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
projectId: z.string().optional(),
|
|
47
|
+
confirm: z.literal(true).describe('Must be true: reset deletes all Development data'),
|
|
48
|
+
},
|
|
49
|
+
}, async ({ projectId }) => {
|
|
50
|
+
try {
|
|
51
|
+
await ctx.session.ensureAuthenticated();
|
|
52
|
+
const res = await ctx.apiClient.branches('POST', projectOf(projectId), '/development/reset', { confirm: true });
|
|
53
|
+
ctx.schemaService.invalidate(res.id);
|
|
54
|
+
return json(res);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return formatErrorResponse(error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
server.registerTool('nestcore_branch_changes', {
|
|
61
|
+
description: 'Schema changes recorded on Development and not yet promoted (DDL from the SQL editor, table editor, RLS, realtime, CLI or MCP), in order. ' +
|
|
62
|
+
'`destructive: true` marks DROP / RENAME / type changes / RLS off. Data changes (INSERT/UPDATE/DELETE) are never recorded or promoted.',
|
|
63
|
+
inputSchema: { projectId: z.string().optional() },
|
|
64
|
+
}, async ({ projectId }) => {
|
|
65
|
+
try {
|
|
66
|
+
await ctx.session.ensureAuthenticated();
|
|
67
|
+
return json(await ctx.apiClient.branches('GET', projectOf(projectId), '/development/changes'));
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
return formatErrorResponse(error);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
server.registerTool('nestcore_promote_branch', {
|
|
74
|
+
description: 'Promote Development to Production. Without apply: true it only PREVIEWS (pending schema changes, functions, buckets, jobs, env vars missing on ' +
|
|
75
|
+
'Production, auth-setting differences, and whether Production drifted). With apply: true (workspace admins) the schema changes run on Production in ONE ' +
|
|
76
|
+
'transaction (any failure rolls all back), then functions, new buckets and new jobs (created disabled) are copied. Env vars and auth settings are only ' +
|
|
77
|
+
'copied when asked. Production data is never touched. ALWAYS show the preview to the user and get their explicit go-ahead before apply: true; ' +
|
|
78
|
+
'destructive changes also need confirmDestructive and drift needs acknowledgeDrift, both only with the user\'s say-so.',
|
|
79
|
+
inputSchema: {
|
|
80
|
+
projectId: z.string().optional(),
|
|
81
|
+
apply: z.boolean().optional().describe('false/omitted = preview only'),
|
|
82
|
+
changeIds: z.array(z.string()).optional().describe('Subset of pending change ids (default: all)'),
|
|
83
|
+
includeEnvVars: z.boolean().optional().describe('Also add env vars missing on Production (Development values)'),
|
|
84
|
+
includeAuthSettings: z.boolean().optional().describe("Replace Production's auth settings with Development's"),
|
|
85
|
+
confirmDestructive: z.boolean().optional(),
|
|
86
|
+
acknowledgeDrift: z.boolean().optional(),
|
|
87
|
+
},
|
|
88
|
+
}, async ({ projectId, apply, changeIds, includeEnvVars, includeAuthSettings, confirmDestructive, acknowledgeDrift }) => {
|
|
89
|
+
try {
|
|
90
|
+
await ctx.session.ensureAuthenticated();
|
|
91
|
+
const id = projectOf(projectId);
|
|
92
|
+
const preview = await ctx.apiClient.branches('GET', id, '/development/promote');
|
|
93
|
+
if (!apply)
|
|
94
|
+
return json({ preview: true, ...preview });
|
|
95
|
+
const cfg = preview.config ?? {};
|
|
96
|
+
const result = await ctx.apiClient.branches('POST', id, '/development/promote', {
|
|
97
|
+
change_ids: changeIds ?? (preview.changes ?? []).map((c) => c.id),
|
|
98
|
+
functions: (cfg.functions ?? []).map((f) => f.name),
|
|
99
|
+
buckets: (cfg.buckets ?? []).map((b) => b.name),
|
|
100
|
+
jobs: (cfg.jobs ?? []).filter((j) => j.status === 'new').map((j) => j.name),
|
|
101
|
+
env_vars: includeEnvVars ? (cfg.env_vars ?? []).map((e) => e.name) : [],
|
|
102
|
+
auth_settings: !!includeAuthSettings,
|
|
103
|
+
confirm_destructive: !!confirmDestructive,
|
|
104
|
+
acknowledge_drift: !!acknowledgeDrift,
|
|
105
|
+
});
|
|
106
|
+
ctx.schemaService.invalidate(preview.production_id);
|
|
107
|
+
return json(result);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return formatErrorResponse(error);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=branches.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branches.tools.js","sourceRoot":"","sources":["../../src/tools/branches.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { ToolContext } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Workspace AI credit (prepaid). A project's own provider key always wins; without one,
|
|
5
|
+
* the workspace's credit pays for AI calls at the platform's key plus the margin.
|
|
6
|
+
* Credit is per workspace, shared by all its projects.
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerCreditTools(server: McpServer, ctx: ToolContext): void;
|
|
9
|
+
//# sourceMappingURL=credits.tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.tools.d.ts","sourceRoot":"","sources":["../../src/tools/credits.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAuD7E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { formatErrorResponse } from '../utils/errors.js';
|
|
3
|
+
const json = (data) => ({ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] });
|
|
4
|
+
/**
|
|
5
|
+
* Workspace AI credit (prepaid). A project's own provider key always wins; without one,
|
|
6
|
+
* the workspace's credit pays for AI calls at the platform's key plus the margin.
|
|
7
|
+
* Credit is per workspace, shared by all its projects.
|
|
8
|
+
*/
|
|
9
|
+
export function registerCreditTools(server, ctx) {
|
|
10
|
+
server.registerTool('nestcore_get_credits', {
|
|
11
|
+
description: "The workspace's AI credit: balance (USD), monthly cap (null = none), this month's spend, available (credit can pay for a call now), " +
|
|
12
|
+
'active (credit was ever bought; a workspace that never bought credit is never charged), margin %, the credit packs for sale and the recent ledger. ' +
|
|
13
|
+
"Credit only pays for AI calls of projects without their own provider key.",
|
|
14
|
+
inputSchema: {},
|
|
15
|
+
}, async () => {
|
|
16
|
+
try {
|
|
17
|
+
await ctx.session.ensureAuthenticated();
|
|
18
|
+
return json(await ctx.apiClient.getCredits());
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return formatErrorResponse(error);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
server.registerTool('nestcore_set_credit_cap', {
|
|
25
|
+
description: "Set the workspace's monthly cap on AI credit spend in USD (0 to 100000), or pass null to remove the cap. " +
|
|
26
|
+
'Calls paid from credit fail with CREDITS_EXHAUSTED (reason spend_cap) once the month reaches it. Needs the workspace admin role. Returns the new summary.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
monthlyCapUsd: z.number().min(0).max(100_000).nullable().describe('USD per month, or null for no cap'),
|
|
29
|
+
},
|
|
30
|
+
}, async ({ monthlyCapUsd }) => {
|
|
31
|
+
try {
|
|
32
|
+
await ctx.session.ensureAuthenticated();
|
|
33
|
+
return json(await ctx.apiClient.setCreditCap(monthlyCapUsd));
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return formatErrorResponse(error);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.registerTool('nestcore_buy_credits', {
|
|
40
|
+
description: 'Create a Stripe Checkout link for an AI credit pack (one-time payment) for a HUMAN to open and pay in a browser. ' +
|
|
41
|
+
'This does NOT charge anything or add credit by itself: the credit lands only after the person pays and Stripe confirms. ' +
|
|
42
|
+
'Never tell the user the purchase is done; give them the URL and check nestcore_get_credits afterwards. ' +
|
|
43
|
+
'Pack ids come from nestcore_get_credits (e.g. credits_5, credits_10, credits_25). Needs the workspace admin role.',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
pack: z.string().regex(/^[a-z0-9_-]{1,40}$/).describe('Credit pack id from nestcore_get_credits'),
|
|
46
|
+
},
|
|
47
|
+
}, async ({ pack }) => {
|
|
48
|
+
try {
|
|
49
|
+
await ctx.session.ensureAuthenticated();
|
|
50
|
+
const res = await ctx.apiClient.createCreditCheckout(pack, 'mcp');
|
|
51
|
+
return json({
|
|
52
|
+
checkoutUrl: res.url,
|
|
53
|
+
pack: res.pack,
|
|
54
|
+
paid: false,
|
|
55
|
+
next: 'Give this URL to the user to open and pay in a browser. No credit is added until the payment completes; nestcore_get_credits shows the new balance then.',
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return formatErrorResponse(error);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=credits.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.tools.js","sourceRoot":"","sources":["../../src/tools/credits.tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEhH;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,GAAgB;IACrE,MAAM,CAAC,YAAY,CAAC,sBAAsB,EAAE;QAC1C,WAAW,EACT,sIAAsI;YACtI,qJAAqJ;YACrJ,2EAA2E;QAC7E,WAAW,EAAE,EAAE;KAChB,EAAE,KAAK,IAAI,EAAE;QACZ,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,yBAAyB,EAAE;QAC7C,WAAW,EACT,2GAA2G;YAC3G,2JAA2J;QAC7J,WAAW,EAAE;YACX,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACvG;KACF,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,sBAAsB,EAAE;QAC1C,WAAW,EACT,mHAAmH;YACnH,0HAA0H;YAC1H,yGAAyG;YACzG,mHAAmH;QACrH,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SAClG;KACF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;gBACV,WAAW,EAAE,GAAG,CAAC,GAAG;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,0JAA0J;aACjK,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB;AAsBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAoB1E"}
|
package/dist/tools/index.js
CHANGED
|
@@ -8,11 +8,13 @@ import { registerLoggingTools } from './logging.tools.js';
|
|
|
8
8
|
import { registerAdminTools } from './admin.tools.js';
|
|
9
9
|
import { registerSmtpTools } from './smtp.tools.js';
|
|
10
10
|
import { registerIntegrationTools } from './integrations.tools.js';
|
|
11
|
+
import { registerCreditTools } from './credits.tools.js';
|
|
11
12
|
import { registerDashboardTools } from './dashboard.tools.js';
|
|
12
13
|
import { registerBackgroundJobsTools } from './background-jobs.tools.js';
|
|
13
14
|
import { registerRealtimeTools } from './realtime.tools.js';
|
|
14
15
|
import { registerAnalyticsTools } from './analytics.tools.js';
|
|
15
16
|
import { registerMigrationTools } from './migration.tools.js';
|
|
17
|
+
import { registerBranchTools } from './branches.tools.js';
|
|
16
18
|
import { registerProjectIntelligenceTools } from './project-intelligence.tools.js';
|
|
17
19
|
import { registerProjectIntelligencePrompts } from '../prompts/project-intelligence.prompts.js';
|
|
18
20
|
export function registerAllTools(server, ctx) {
|
|
@@ -27,10 +29,12 @@ export function registerAllTools(server, ctx) {
|
|
|
27
29
|
registerAdminTools(server, ctx);
|
|
28
30
|
registerSmtpTools(server, ctx);
|
|
29
31
|
registerIntegrationTools(server, ctx);
|
|
32
|
+
registerCreditTools(server, ctx);
|
|
30
33
|
registerDashboardTools(server, ctx);
|
|
31
34
|
registerRealtimeTools(server, ctx);
|
|
32
35
|
registerAnalyticsTools(server, ctx);
|
|
33
36
|
registerMigrationTools(server, ctx);
|
|
37
|
+
registerBranchTools(server, ctx);
|
|
34
38
|
registerProjectIntelligenceTools(server, ctx);
|
|
35
39
|
registerProjectIntelligencePrompts(server, ctx);
|
|
36
40
|
}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4CAA4C,CAAC;AAEhG,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAgB;IAClE,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,2BAA2B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,gCAAgC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4CAA4C,CAAC;AAEhG,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAgB;IAClE,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,2BAA2B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,gCAAgC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.tools.d.ts","sourceRoot":"","sources":["../../src/tools/project.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"project.tools.d.ts","sourceRoot":"","sources":["../../src/tools/project.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAkR9E"}
|
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { formatErrorResponse } from '../utils/errors.js';
|
|
2
|
+
import { formatErrorResponse, ValidationError } from '../utils/errors.js';
|
|
3
3
|
import { requireProjectId } from '../utils/validators.js';
|
|
4
4
|
export function registerProjectTools(server, ctx) {
|
|
5
5
|
// ─── Create Project ───
|
|
6
6
|
server.registerTool('nestcore_create_project', {
|
|
7
|
-
description: 'Create a new NestCore project with a dedicated database. Returns project details including API keys.'
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
description: 'Create a new NestCore project with a dedicated database. Returns project details including API keys. ' +
|
|
8
|
+
'kind "app" (default) is a backend for an app; kind "agent" is the private backend of ONE PC running NestCore Agent ' +
|
|
9
|
+
'(needs agent.deviceName and agent.os) and only ever holds the agent schema, agent-* buckets and the agent functions. ' +
|
|
10
|
+
'The kind cannot be changed later. Check nestcore_get_project_eligibility first: on the free plan the one project is an app OR an agent.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
name: z.string().min(3).max(120),
|
|
13
|
+
description: z.string().max(500).optional(),
|
|
14
|
+
kind: z.enum(['app', 'agent']).optional(),
|
|
15
|
+
agent: z.object({
|
|
16
|
+
deviceName: z.string().min(1).max(80),
|
|
17
|
+
os: z.string().min(1).max(40),
|
|
18
|
+
agentVersion: z.string().max(32).optional(),
|
|
19
|
+
}).optional(),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ name, description, kind, agent }) => {
|
|
22
|
+
try {
|
|
23
|
+
await ctx.session.ensureAuthenticated();
|
|
24
|
+
if (kind === 'agent' && !agent) {
|
|
25
|
+
throw new ValidationError('An agent project needs agent: { deviceName, os } (the PC it belongs to).');
|
|
26
|
+
}
|
|
27
|
+
const result = await ctx.apiClient.createProject({ name, description, kind, ...(kind === 'agent' && agent ? { agent } : {}) });
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return formatErrorResponse(error);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
// ─── Project Eligibility ───
|
|
37
|
+
server.registerTool('nestcore_get_project_eligibility', {
|
|
38
|
+
description: 'Can this workspace create one more project of a kind ("app" or "agent")? Returns { allowed, plan, used, limit, reason?, upgradeUrl }. ' +
|
|
39
|
+
'When allowed is false, give the user the upgradeUrl instead of trying to create the project.',
|
|
40
|
+
inputSchema: { kind: z.enum(['app', 'agent']).optional() },
|
|
41
|
+
}, async ({ kind }) => {
|
|
10
42
|
try {
|
|
11
43
|
await ctx.session.ensureAuthenticated();
|
|
12
|
-
const result = await ctx.apiClient.
|
|
44
|
+
const result = await ctx.apiClient.getProjectEligibility(kind ?? 'app');
|
|
13
45
|
return {
|
|
14
46
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
15
47
|
};
|
|
@@ -20,12 +52,31 @@ export function registerProjectTools(server, ctx) {
|
|
|
20
52
|
});
|
|
21
53
|
// ─── List Projects ───
|
|
22
54
|
server.registerTool('nestcore_list_projects', {
|
|
23
|
-
description: 'List all projects for the authenticated admin user.'
|
|
24
|
-
|
|
25
|
-
|
|
55
|
+
description: 'List all projects for the authenticated admin user. Each project has kind ("app" | "agent") and status ' +
|
|
56
|
+
'("active" | "paused" | "compromised"; paused projects reject writes and data-plane calls with 423 PROJECT_PAUSED). Optionally filter by kind.',
|
|
57
|
+
inputSchema: { kind: z.enum(['app', 'agent']).optional() },
|
|
58
|
+
}, async ({ kind }) => {
|
|
59
|
+
try {
|
|
60
|
+
await ctx.session.ensureAuthenticated();
|
|
61
|
+
const result = await ctx.apiClient.listProjects(kind);
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return formatErrorResponse(error);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// ─── Pause / Resume Project ───
|
|
71
|
+
server.registerTool('nestcore_set_project_status', {
|
|
72
|
+
description: 'Pause a project (API, realtime and relay go off; nothing is deleted) or resume it. Resuming counts against the plan\'s project limit ' +
|
|
73
|
+
'and returns QUOTA_EXCEEDED with an upgradeUrl when the plan is full. A "compromised" project (kill switch) cannot be resumed here.',
|
|
74
|
+
inputSchema: { projectId: z.string().optional(), status: z.enum(['active', 'paused']) },
|
|
75
|
+
}, async ({ projectId, status }) => {
|
|
26
76
|
try {
|
|
27
77
|
await ctx.session.ensureAuthenticated();
|
|
28
|
-
const
|
|
78
|
+
const id = requireProjectId(projectId, ctx.session.getSession().currentProjectId);
|
|
79
|
+
const result = await ctx.apiClient.setProjectStatus(id, status);
|
|
29
80
|
return {
|
|
30
81
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
31
82
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.tools.js","sourceRoot":"","sources":["../../src/tools/project.tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project.tools.js","sourceRoot":"","sources":["../../src/tools/project.tools.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -14,7 +14,16 @@ export declare class SafetyError extends McpError {
|
|
|
14
14
|
}
|
|
15
15
|
export declare class ApiError extends McpError {
|
|
16
16
|
readonly statusCode: number;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The API's error body (QUOTA_EXCEEDED carries quota/plan/limit/usage/kind/reason/upgradeUrl;
|
|
19
|
+
* CREDITS_EXHAUSTED carries reason/balanceUsd/monthlyCapUsd/spentThisMonthUsd/buyUrl).
|
|
20
|
+
*/
|
|
21
|
+
readonly details?: Record<string, unknown>;
|
|
22
|
+
/**
|
|
23
|
+
* `apiCode` is the platform's own code when it sent one, e.g. QUOTA_EXCEEDED,
|
|
24
|
+
* CREDITS_EXHAUSTED, AGENT_PROJECT_RESTRICTED, NOT_AN_AGENT_PROJECT or PROJECT_PAUSED.
|
|
25
|
+
*/
|
|
26
|
+
constructor(message: string, statusCode: number, apiCode?: string, details?: Record<string, unknown>);
|
|
18
27
|
}
|
|
19
28
|
export declare class ProjectContextError extends McpError {
|
|
20
29
|
constructor(message?: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,GAAE,MAA+E;CAIrG;AAED,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,QAAQ;IACvC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKnE;AAED,qBAAa,QAAS,SAAQ,QAAQ;IACpC,SAAgB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,GAAE,MAA+E;CAIrG;AAED,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,QAAQ;IACvC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKnE;AAED,qBAAa,QAAS,SAAQ,QAAQ;IACpC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElD;;;OAGG;gBACS,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMrG;AAQD,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,GAAE,MAAyF;CAI/G;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAiDtG"}
|
package/dist/utils/errors.js
CHANGED
|
@@ -28,12 +28,27 @@ export class SafetyError extends McpError {
|
|
|
28
28
|
}
|
|
29
29
|
export class ApiError extends McpError {
|
|
30
30
|
statusCode;
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The API's error body (QUOTA_EXCEEDED carries quota/plan/limit/usage/kind/reason/upgradeUrl;
|
|
33
|
+
* CREDITS_EXHAUSTED carries reason/balanceUsd/monthlyCapUsd/spentThisMonthUsd/buyUrl).
|
|
34
|
+
*/
|
|
35
|
+
details;
|
|
36
|
+
/**
|
|
37
|
+
* `apiCode` is the platform's own code when it sent one, e.g. QUOTA_EXCEEDED,
|
|
38
|
+
* CREDITS_EXHAUSTED, AGENT_PROJECT_RESTRICTED, NOT_AN_AGENT_PROJECT or PROJECT_PAUSED.
|
|
39
|
+
*/
|
|
40
|
+
constructor(message, statusCode, apiCode, details) {
|
|
41
|
+
super(message, apiCode ?? 'API_ERROR');
|
|
33
42
|
this.name = 'ApiError';
|
|
34
43
|
this.statusCode = statusCode;
|
|
44
|
+
this.details = details;
|
|
35
45
|
}
|
|
36
46
|
}
|
|
47
|
+
/** Fields of an API error body worth handing to the model (never the raw body). */
|
|
48
|
+
const API_DETAIL_FIELDS = [
|
|
49
|
+
'quota', 'plan', 'limit', 'usage', 'kind', 'reason', 'upgradeUrl', 'status',
|
|
50
|
+
'balanceUsd', 'monthlyCapUsd', 'spentThisMonthUsd', 'buyUrl',
|
|
51
|
+
];
|
|
37
52
|
export class ProjectContextError extends McpError {
|
|
38
53
|
constructor(message = 'No active project. Use nestcore_set_active_project first or provide projectId.') {
|
|
39
54
|
super(message, 'PROJECT_CONTEXT_ERROR');
|
|
@@ -53,6 +68,23 @@ export function formatErrorResponse(error) {
|
|
|
53
68
|
}],
|
|
54
69
|
};
|
|
55
70
|
}
|
|
71
|
+
if (error instanceof ApiError) {
|
|
72
|
+
const details = {};
|
|
73
|
+
for (const k of API_DETAIL_FIELDS)
|
|
74
|
+
if (error.details?.[k] !== undefined)
|
|
75
|
+
details[k] = error.details[k];
|
|
76
|
+
return {
|
|
77
|
+
content: [{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: JSON.stringify({
|
|
80
|
+
error: error.message,
|
|
81
|
+
code: error.code,
|
|
82
|
+
statusCode: error.statusCode,
|
|
83
|
+
...(Object.keys(details).length ? { details } : {}),
|
|
84
|
+
}, null, 2),
|
|
85
|
+
}],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
56
88
|
if (error instanceof McpError) {
|
|
57
89
|
return {
|
|
58
90
|
content: [{
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAS;IAE7B,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB,sEAAsE;QAClG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvB,OAAO,CAA0B;IAEjD,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpB,UAAU,CAAS;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nestcorehq/mcp-server",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Model Context Protocol server for NestCore",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"nestcore-mcp": "dist/index.js",
|
|
8
|
-
"orbitnest-mcp": "dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"type": "module",
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc",
|
|
13
|
-
"prepare": "npm run build",
|
|
14
|
-
"start": "node dist/index.js",
|
|
15
|
-
"dev": "tsx watch src/index.ts",
|
|
16
|
-
"test": "npm run build && node test/resource-size.mjs && node test/legacy-tool-names.mjs"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"dist/",
|
|
20
|
-
"src/",
|
|
21
|
-
".env.example",
|
|
22
|
-
".mcp.json",
|
|
23
|
-
"README.md",
|
|
24
|
-
"tsconfig.json"
|
|
25
|
-
],
|
|
26
|
-
"publishConfig": {
|
|
27
|
-
"access": "public"
|
|
28
|
-
},
|
|
29
|
-
"engines": {
|
|
30
|
-
"node": ">=22.0.0"
|
|
31
|
-
},
|
|
32
|
-
"repository": {
|
|
33
|
-
"type": "git",
|
|
34
|
-
"url": "git+https://github.com/Orbitnest/nestcore_mcp.git"
|
|
35
|
-
},
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
38
|
-
"dotenv": "^16.4.5",
|
|
39
|
-
"zod": "^3.22.4"
|
|
40
|
-
},
|
|
41
|
-
"devDependencies": {
|
|
42
|
-
"@types/node": "^22.20.5",
|
|
43
|
-
"tsx": "^4.7.0",
|
|
44
|
-
"typescript": "^5.3.3"
|
|
45
|
-
},
|
|
46
|
-
"keywords": [
|
|
47
|
-
"mcp",
|
|
48
|
-
"nestcore",
|
|
49
|
-
"model-context-protocol",
|
|
50
|
-
"ai"
|
|
51
|
-
],
|
|
52
|
-
"author": "NestCore Team",
|
|
53
|
-
"license": "MIT"
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@nestcorehq/mcp-server",
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "Model Context Protocol server for NestCore",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"nestcore-mcp": "dist/index.js",
|
|
8
|
+
"orbitnest-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"prepare": "npm run build",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"dev": "tsx watch src/index.ts",
|
|
16
|
+
"test": "npm run build && node test/resource-size.mjs && node test/legacy-tool-names.mjs && node test/credits.mjs && node test/branches.mjs"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist/",
|
|
20
|
+
"src/",
|
|
21
|
+
".env.example",
|
|
22
|
+
".mcp.json",
|
|
23
|
+
"README.md",
|
|
24
|
+
"tsconfig.json"
|
|
25
|
+
],
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=22.0.0"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/Orbitnest/nestcore_mcp.git"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
38
|
+
"dotenv": "^16.4.5",
|
|
39
|
+
"zod": "^3.22.4"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^22.20.5",
|
|
43
|
+
"tsx": "^4.7.0",
|
|
44
|
+
"typescript": "^5.3.3"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"mcp",
|
|
48
|
+
"nestcore",
|
|
49
|
+
"model-context-protocol",
|
|
50
|
+
"ai"
|
|
51
|
+
],
|
|
52
|
+
"author": "NestCore Team",
|
|
53
|
+
"license": "MIT"
|
|
54
|
+
}
|
package/src/sdk/endpoints.ts
CHANGED
|
@@ -89,6 +89,8 @@ export const ADMIN_INTEGRATIONS = {
|
|
|
89
89
|
export const PROJECTS = {
|
|
90
90
|
CREATE: '/projects',
|
|
91
91
|
LIST: '/projects',
|
|
92
|
+
ELIGIBILITY: '/projects/eligibility',
|
|
93
|
+
STATUS: (id: string) => `/projects/${e(id)}/status`,
|
|
92
94
|
GET: (id: string) => `/projects/${e(id)}`,
|
|
93
95
|
UPDATE: (id: string) => `/projects/${e(id)}`,
|
|
94
96
|
DELETE: (id: string) => `/projects/${e(id)}`,
|
|
@@ -192,6 +194,13 @@ export const DASHBOARD = {
|
|
|
192
194
|
ACTIVITY: '/dashboard/activity',
|
|
193
195
|
} as const;
|
|
194
196
|
|
|
197
|
+
// Workspace AI credit (admin JWT; checkout and cap need the workspace admin role)
|
|
198
|
+
export const BILLING = {
|
|
199
|
+
CREDITS: '/billing/credits',
|
|
200
|
+
CREDITS_CHECKOUT: '/billing/credits/checkout',
|
|
201
|
+
CREDITS_CAP: '/billing/credits/cap',
|
|
202
|
+
} as const;
|
|
203
|
+
|
|
195
204
|
// Realtime (admin-scoped; uses JWT auth + project UUID)
|
|
196
205
|
export const REALTIME = {
|
|
197
206
|
TABLES: (id: string) => `/admin/projects/${e(id)}/realtime/tables`,
|