capix-mcp 2.1.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.
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Capix MCP Server — CLI entry point.
4
+ *
5
+ * Commands:
6
+ * capix-mcp Start the MCP server on stdio (default).
7
+ * capix-mcp server Start on stdio; use --http <port> for HTTP.
8
+ * capix-mcp doctor Diagnose auth, base URL, and tool inventory.
9
+ * capix-mcp login Authenticate via OAuth (PKCE browser flow).
10
+ * capix-mcp logout Revoke tokens and clear stored credentials.
11
+ * capix-mcp --version Print version and exit.
12
+ *
13
+ * Config via env:
14
+ * CAPIX_BASE_URL Capix network URL (default: https://capix.network)
15
+ * CAPIX_API_KEY Session token / API key (fallback when no OAuth)
16
+ * CAPIX_PROJECT_ID Default project id for unscoped reads
17
+ * CAPIX_OAUTH_CLIENT_ID OAuth client id (default: capix-mcp)
18
+ * CAPIX_MCP_HTTP_PORT Port for the streamable HTTP transport
19
+ * CAPIX_MCP_HTTP_TOKEN Bearer service token guarding the HTTP transport
20
+ *
21
+ * Auth strategy: the shared @capix/auth-broker is used for OAuth when it is
22
+ * importable AND a stored refresh token exists; otherwise the server falls
23
+ * back to the CAPIX_API_KEY env var. Run `capix-mcp login` to populate the
24
+ * broker's credential store.
25
+ *
26
+ * License: Apache-2.0
27
+ * Repo: https://github.com/CapIX-Protocol/CapIX-MCP
28
+ */
29
+ import { createCapixMcpServer } from "./server.js";
30
+ import { TOOL_NAMES } from "./tools.js";
31
+ export { createCapixMcpServer, TOOL_NAMES };
32
+ export declare const CAPIX_VERSION = "2.0.0";
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,OAAO,EACL,oBAAoB,EAIrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAc,UAAU,EAAE,MAAM,YAAY,CAAC;AA8TpD,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC5C,eAAO,MAAM,aAAa,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,307 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Capix MCP Server — CLI entry point.
4
+ *
5
+ * Commands:
6
+ * capix-mcp Start the MCP server on stdio (default).
7
+ * capix-mcp server Start on stdio; use --http <port> for HTTP.
8
+ * capix-mcp doctor Diagnose auth, base URL, and tool inventory.
9
+ * capix-mcp login Authenticate via OAuth (PKCE browser flow).
10
+ * capix-mcp logout Revoke tokens and clear stored credentials.
11
+ * capix-mcp --version Print version and exit.
12
+ *
13
+ * Config via env:
14
+ * CAPIX_BASE_URL Capix network URL (default: https://capix.network)
15
+ * CAPIX_API_KEY Session token / API key (fallback when no OAuth)
16
+ * CAPIX_PROJECT_ID Default project id for unscoped reads
17
+ * CAPIX_OAUTH_CLIENT_ID OAuth client id (default: capix-mcp)
18
+ * CAPIX_MCP_HTTP_PORT Port for the streamable HTTP transport
19
+ * CAPIX_MCP_HTTP_TOKEN Bearer service token guarding the HTTP transport
20
+ *
21
+ * Auth strategy: the shared @capix/auth-broker is used for OAuth when it is
22
+ * importable AND a stored refresh token exists; otherwise the server falls
23
+ * back to the CAPIX_API_KEY env var. Run `capix-mcp login` to populate the
24
+ * broker's credential store.
25
+ *
26
+ * License: Apache-2.0
27
+ * Repo: https://github.com/CapIX-Protocol/CapIX-MCP
28
+ */
29
+ import { createClient, tryCreateBrokerAuthProvider } from "./client.js";
30
+ import { DEFAULT_CAPIX_BASE_URL, DEFAULT_OAUTH_CLIENT_ID, DEFAULT_OAUTH_SCOPE, } from "./types.js";
31
+ import { createCapixMcpServer, startStdioServer, startHttpServer, getToolSummary, } from "./server.js";
32
+ import { TOOL_COUNT, TOOL_NAMES } from "./tools.js";
33
+ import { CAPIX_RESOURCES } from "./resources.js";
34
+ import { CAPIX_PROMPTS } from "./prompts.js";
35
+ const VERSION = "2.0.0";
36
+ function parseArgs(argv) {
37
+ const args = argv.slice(2);
38
+ let command = "server";
39
+ let httpPort;
40
+ let httpToken;
41
+ let help = false;
42
+ let versionFlag = false;
43
+ for (let i = 0; i < args.length; i++) {
44
+ const arg = args[i];
45
+ if (arg === "--help" || arg === "-h") {
46
+ help = true;
47
+ }
48
+ else if (arg === "--version" || arg === "-v") {
49
+ versionFlag = true;
50
+ }
51
+ else if (arg === "--http") {
52
+ httpPort = Number(args[++i]) || undefined;
53
+ }
54
+ else if (arg === "--http-port") {
55
+ httpPort = Number(args[++i]) || undefined;
56
+ }
57
+ else if (arg === "--token") {
58
+ httpToken = args[++i];
59
+ }
60
+ else if (arg?.startsWith("--http=")) {
61
+ httpPort = Number(arg.slice("--http=".length)) || undefined;
62
+ }
63
+ else if (arg?.startsWith("--token=")) {
64
+ httpToken = arg.slice("--token=".length);
65
+ }
66
+ else if (arg && !arg.startsWith("-")) {
67
+ command = arg;
68
+ }
69
+ }
70
+ if (!httpPort && process.env.CAPIX_MCP_HTTP_PORT) {
71
+ httpPort = Number(process.env.CAPIX_MCP_HTTP_PORT) || undefined;
72
+ }
73
+ if (!httpToken)
74
+ httpToken = process.env.CAPIX_MCP_HTTP_TOKEN;
75
+ return { command, httpPort, httpToken, help, version: versionFlag };
76
+ }
77
+ const HELP = `Capix MCP Server v${VERSION}
78
+
79
+ Usage:
80
+ capix-mcp [server] [--http <port> [--token <token>]]
81
+ capix-mcp doctor
82
+ capix-mcp login [--device]
83
+ capix-mcp logout
84
+ capix-mcp --version
85
+
86
+ Commands:
87
+ (default) / server Run the MCP server. Defaults to stdio transport.
88
+ With --http <port>, also starts a streamable HTTP transport.
89
+ doctor Diagnose auth, base URL, and list the tool inventory.
90
+ login Authenticate via OAuth PKCE (browser flow).
91
+ logout Revoke tokens and clear stored credentials.
92
+
93
+ Options:
94
+ --http <port> Start the streamable HTTP transport on the given port.
95
+ --token <token> Bearer service token guarding the HTTP transport.
96
+ --device Use the device-code flow instead of the browser flow.
97
+ -h, --help Show this help.
98
+ -v, --version Print version and exit.
99
+
100
+ Environment:
101
+ CAPIX_BASE_URL Capix network URL (default: ${DEFAULT_CAPIX_BASE_URL})
102
+ CAPIX_API_KEY Session token / API key (fallback when no OAuth)
103
+ CAPIX_PROJECT_ID Default project id for unscoped reads
104
+ CAPIX_OAUTH_CLIENT_ID OAuth client id (default: ${DEFAULT_OAUTH_CLIENT_ID})
105
+ `;
106
+ async function main() {
107
+ const cli = parseArgs(process.argv);
108
+ if (cli.help) {
109
+ process.stdout.write(HELP);
110
+ return;
111
+ }
112
+ if (cli.version) {
113
+ process.stdout.write(`@capix/mcp v${VERSION}\n`);
114
+ return;
115
+ }
116
+ switch (cli.command) {
117
+ case "doctor":
118
+ await runDoctor();
119
+ return;
120
+ case "login":
121
+ await runLogin(process.argv.includes("--device"));
122
+ return;
123
+ case "logout":
124
+ await runLogout();
125
+ return;
126
+ case "server":
127
+ default:
128
+ await runServer(cli);
129
+ return;
130
+ }
131
+ }
132
+ // ===========================================================================
133
+ // doctor
134
+ // ===========================================================================
135
+ async function runDoctor() {
136
+ const baseUrl = process.env.CAPIX_BASE_URL ?? DEFAULT_CAPIX_BASE_URL;
137
+ const apiKey = process.env.CAPIX_API_KEY ?? "";
138
+ const projectId = process.env.CAPIX_PROJECT_ID;
139
+ const out = (msg) => process.stdout.write(msg + "\n");
140
+ out(`Capix MCP Server — doctor`);
141
+ out(` version : ${VERSION}`);
142
+ out(` base URL : ${baseUrl}`);
143
+ out(` project id : ${projectId ?? "(none — set CAPIX_PROJECT_ID)"}`);
144
+ // Auth probe.
145
+ const broker = await tryCreateBrokerAuthProvider({ baseUrl });
146
+ let authStatus;
147
+ if (broker && broker.isAuthenticated()) {
148
+ const acct = broker.getAccount();
149
+ authStatus = `OAuth (@capix/auth-broker) — account ${acct?.accountId ?? "unknown"}`;
150
+ }
151
+ else if (apiKey) {
152
+ authStatus = `API key (CAPIX_API_KEY) — ${apiKey.slice(0, 6)}…${apiKey.slice(-2)}`;
153
+ }
154
+ else {
155
+ authStatus = "NOT AUTHENTICATED — run `capix-mcp login` or set CAPIX_API_KEY";
156
+ }
157
+ out(` auth : ${authStatus}`);
158
+ // Tool inventory.
159
+ out(` tools : ${TOOL_COUNT}`);
160
+ const byScope = new Map();
161
+ for (const t of getToolSummary()) {
162
+ byScope.set(t.scope, (byScope.get(t.scope) ?? 0) + 1);
163
+ }
164
+ for (const [scope, count] of byScope) {
165
+ out(` ${scope.padEnd(12)} : ${count}`);
166
+ }
167
+ const billable = getToolSummary().filter((t) => t.billable).length;
168
+ out(` billable : ${billable}`);
169
+ out(` resources : ${CAPIX_RESOURCES.length}`);
170
+ out(` prompts : ${CAPIX_PROMPTS.length}`);
171
+ out(` transports : stdio, streamable-http`);
172
+ }
173
+ // ===========================================================================
174
+ // login / logout
175
+ // ===========================================================================
176
+ async function loadBroker() {
177
+ let mod = null;
178
+ try {
179
+ mod = await import("@capix/auth-broker");
180
+ }
181
+ catch {
182
+ return null;
183
+ }
184
+ if (!mod)
185
+ return null;
186
+ const baseUrl = process.env.CAPIX_BASE_URL ?? DEFAULT_CAPIX_BASE_URL;
187
+ const clientId = process.env.CAPIX_OAUTH_CLIENT_ID ?? DEFAULT_OAUTH_CLIENT_ID;
188
+ const scope = DEFAULT_OAUTH_SCOPE;
189
+ const store = new mod.FileCredentialStore(`${process.env.HOME}/.capix/credentials.json`);
190
+ const broker = new mod.AuthBroker({ baseUrl, clientId, scope }, store);
191
+ return { broker, mod };
192
+ }
193
+ async function runLogin(useDevice) {
194
+ const loaded = await loadBroker();
195
+ if (!loaded) {
196
+ process.stderr.write("Login requires the @capix/auth-broker package, which is not installed.\n" +
197
+ "Alternatively, set the CAPIX_API_KEY environment variable with a session\n" +
198
+ "token from capix.network → sign in → DevTools → Cookies → capix_session.\n");
199
+ process.exit(1);
200
+ }
201
+ const { broker } = loaded;
202
+ try {
203
+ if (useDevice) {
204
+ const challenge = await broker.startDeviceCodeLogin();
205
+ process.stdout.write(`Open ${challenge.url} and enter code: ${challenge.userCode}\n` +
206
+ `Waiting for authorisation (expires in ${challenge.expiresIn}s)…\n`);
207
+ const account = await broker.completeDeviceCodeLogin(challenge);
208
+ process.stdout.write(`✓ Authenticated as ${account.accountId}.\n`);
209
+ return;
210
+ }
211
+ const { authorizeUrl } = await broker.startLogin();
212
+ process.stdout.write(`Open this URL in a browser to sign in:\n ${authorizeUrl}\n\n`);
213
+ tryOpenBrowser(authorizeUrl);
214
+ process.stdout.write("Waiting for browser callback…\n");
215
+ // Poll the broker's captured authorization code (set by its loopback server).
216
+ const captured = await pollCapturedCode(broker);
217
+ if (!captured) {
218
+ process.stderr.write("Login timed out — no callback received.\n");
219
+ process.exit(1);
220
+ }
221
+ const account = await broker.completeLogin(captured.code, captured.state);
222
+ process.stdout.write(`✓ Authenticated as ${account.accountId}.\n`);
223
+ }
224
+ catch (err) {
225
+ process.stderr.write(`Login failed: ${err.message}\n`);
226
+ process.exit(1);
227
+ }
228
+ }
229
+ async function pollCapturedCode(broker, timeoutMs = 120_000) {
230
+ const deadline = Date.now() + timeoutMs;
231
+ const b = broker;
232
+ while (Date.now() < deadline) {
233
+ if (b.capturedCode)
234
+ return b.capturedCode;
235
+ await new Promise((r) => setTimeout(r, 500));
236
+ }
237
+ return null;
238
+ }
239
+ function tryOpenBrowser(url) {
240
+ const platform = process.platform;
241
+ const cmd = platform === "darwin"
242
+ ? "open"
243
+ : platform === "win32"
244
+ ? "start"
245
+ : "xdg-open";
246
+ try {
247
+ // best-effort; ignore failures.
248
+ const { exec } = require("node:child_process");
249
+ exec(`${cmd} "${url}"`);
250
+ }
251
+ catch {
252
+ /* no-op */
253
+ }
254
+ }
255
+ async function runLogout() {
256
+ const loaded = await loadBroker();
257
+ if (!loaded) {
258
+ process.stdout.write("@capix/auth-broker not installed — nothing to revoke. " +
259
+ "Remove CAPIX_API_KEY from your environment to clear the API-key fallback.\n");
260
+ return;
261
+ }
262
+ const { broker } = loaded;
263
+ await broker.logout();
264
+ process.stdout.write("✓ Logged out. Stored credentials cleared.\n");
265
+ }
266
+ // ===========================================================================
267
+ // server
268
+ // ===========================================================================
269
+ async function runServer(cli) {
270
+ const baseUrl = process.env.CAPIX_BASE_URL ?? DEFAULT_CAPIX_BASE_URL;
271
+ const log = (msg) => process.stderr.write(`${msg}\n`);
272
+ const client = await createClient({
273
+ baseUrl,
274
+ apiKey: process.env.CAPIX_API_KEY,
275
+ projectId: process.env.CAPIX_PROJECT_ID,
276
+ log,
277
+ });
278
+ if (!client.isAuthenticated()) {
279
+ log("Warning: not authenticated. Run `capix-mcp login` or set CAPIX_API_KEY.");
280
+ log("Get a session token from capix.network → sign in → DevTools → Cookies → capix_session.");
281
+ }
282
+ // HTTP transport (optional, alongside or instead of stdio).
283
+ if (cli.httpPort) {
284
+ if (!cli.httpToken) {
285
+ log("Error: --http requires --token <service-token> (or CAPIX_MCP_HTTP_TOKEN) to guard the endpoint.");
286
+ process.exit(1);
287
+ }
288
+ log(`Capix MCP Server (v${VERSION}) — streamable HTTP on :${cli.httpPort}`);
289
+ await startHttpServer(client, {
290
+ version: VERSION,
291
+ httpPort: cli.httpPort,
292
+ httpServiceToken: cli.httpToken,
293
+ });
294
+ return;
295
+ }
296
+ // Default: stdio transport.
297
+ log(`Capix MCP Server (v${VERSION}) — stdio transport · ${TOOL_COUNT} tools`);
298
+ await startStdioServer(client, { version: VERSION });
299
+ }
300
+ main().catch((error) => {
301
+ process.stderr.write(`Fatal: ${error instanceof Error ? error.message : String(error)}\n`);
302
+ process.exit(1);
303
+ });
304
+ // Re-export the assembled-server factory + tool names for programmatic use.
305
+ export { createCapixMcpServer, TOOL_NAMES };
306
+ export const CAPIX_VERSION = VERSION;
307
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Capix MCP Server — prompts.
3
+ *
4
+ * Prompts are parameterised, server-side message templates the MCP client can
5
+ * list and instantiate. Each prompt returns a short multi-message transcript
6
+ * that guides an agent through a common Capix workflow (deploy, diagnose,
7
+ * preview, plan, cleanup) — always ending with an assistant reminder that
8
+ * billable tools require a bound approval token before they will execute.
9
+ */
10
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ /** Static prompt descriptor surfaced via prompts/list. */
12
+ export interface CapixPrompt {
13
+ name: string;
14
+ description: string;
15
+ arguments: Array<{
16
+ name: string;
17
+ description: string;
18
+ required?: boolean;
19
+ }>;
20
+ }
21
+ export declare const CAPIX_PROMPTS: CapixPrompt[];
22
+ /**
23
+ * Register all Capix prompts with the given McpServer. Prompt callbacks are
24
+ * pure (no API calls) — they render a guided transcript the agent then drives
25
+ * by calling the referenced tools.
26
+ */
27
+ export declare function registerPrompts(server: McpServer): void;
28
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EA6CtC,CAAC;AAKF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwKvD"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Capix MCP Server — prompts.
3
+ *
4
+ * Prompts are parameterised, server-side message templates the MCP client can
5
+ * list and instantiate. Each prompt returns a short multi-message transcript
6
+ * that guides an agent through a common Capix workflow (deploy, diagnose,
7
+ * preview, plan, cleanup) — always ending with an assistant reminder that
8
+ * billable tools require a bound approval token before they will execute.
9
+ */
10
+ import { z } from "zod";
11
+ export const CAPIX_PROMPTS = [
12
+ {
13
+ name: "deploy_repository",
14
+ description: "Plan, quote, and deploy a repository as a Capix workload (compute or website).",
15
+ arguments: [
16
+ { name: "repoUrl", description: "Git repository URL.", required: true },
17
+ { name: "branch", description: "Branch to deploy (default: main)." },
18
+ { name: "region", description: "Preferred region." },
19
+ { name: "workloadType", description: "Workload type, e.g. replicated_service.v1." },
20
+ ],
21
+ },
22
+ {
23
+ name: "diagnose_deployment",
24
+ description: "Diagnose a failing deployment: pull logs, metrics, and health checks.",
25
+ arguments: [
26
+ { name: "deploymentId", description: "Deployment to diagnose.", required: true },
27
+ ],
28
+ },
29
+ {
30
+ name: "create_preview",
31
+ description: "Create a preview deployment of a website from a branch.",
32
+ arguments: [
33
+ { name: "siteId", description: "Website project id.", required: true },
34
+ { name: "branch", description: "Branch to preview.", required: true },
35
+ ],
36
+ },
37
+ {
38
+ name: "plan_stack",
39
+ description: "Validate and plan a multi-service stack from a manifest URL or inline spec.",
40
+ arguments: [
41
+ { name: "manifestUrl", description: "Stack manifest URL or inline spec.", required: true },
42
+ ],
43
+ },
44
+ {
45
+ name: "cleanup_task",
46
+ description: "Destroy all resources scoped to a completed task (§18 cleanup gate).",
47
+ arguments: [
48
+ { name: "taskId", description: "Task-scoped resource id.", required: true },
49
+ ],
50
+ },
51
+ ];
52
+ const APPROVAL_REMINDER = "Plan validated. Awaiting your approval token before any billable Capix tool runs.";
53
+ /**
54
+ * Register all Capix prompts with the given McpServer. Prompt callbacks are
55
+ * pure (no API calls) — they render a guided transcript the agent then drives
56
+ * by calling the referenced tools.
57
+ */
58
+ export function registerPrompts(server) {
59
+ // deploy_repository
60
+ server.registerPrompt("deploy_repository", {
61
+ description: CAPIX_PROMPTS[0].description,
62
+ argsSchema: {
63
+ repoUrl: z.string().describe("Git repository URL."),
64
+ branch: z.string().optional().describe("Branch to deploy (default: main)."),
65
+ region: z.string().optional().describe("Preferred region."),
66
+ workloadType: z.string().optional().describe("Workload type, e.g. replicated_service.v1."),
67
+ },
68
+ }, async (args) => ({
69
+ messages: [
70
+ {
71
+ role: "user",
72
+ content: {
73
+ type: "text",
74
+ text: [
75
+ `Deploy the repository ${args.repoUrl} (branch ${args.branch ?? "main"}) as a Capix workload.`,
76
+ args.region ? `Target region: ${args.region}.` : "Region: auto-select cheapest feasible.",
77
+ args.workloadType ? `Workload type: ${args.workloadType}.` : "",
78
+ "Steps:",
79
+ "1. capix_compute_plan — plan the deployment shape.",
80
+ "2. capix_compute_quote — obtain a canonical quote.",
81
+ "3. capix_deploy — provision against the quote (requires approvalToken).",
82
+ "4. capix_run_health_checks — verify readiness.",
83
+ ].filter(Boolean).join("\n"),
84
+ },
85
+ },
86
+ {
87
+ role: "assistant",
88
+ content: { type: "text", text: APPROVAL_REMINDER },
89
+ },
90
+ ],
91
+ }));
92
+ // diagnose_deployment
93
+ server.registerPrompt("diagnose_deployment", {
94
+ description: CAPIX_PROMPTS[1].description,
95
+ argsSchema: {
96
+ deploymentId: z.string().describe("Deployment to diagnose."),
97
+ },
98
+ }, async (args) => ({
99
+ messages: [
100
+ {
101
+ role: "user",
102
+ content: {
103
+ type: "text",
104
+ text: [
105
+ `Diagnose deployment ${args.deploymentId}:`,
106
+ "1. capix_inspect_logs — recent log lines.",
107
+ "2. capix_inspect_metrics — resource metrics.",
108
+ "3. capix_run_health_checks — probe results.",
109
+ "Summarise the failure mode and propose remediation (restart vs redeploy vs rollback).",
110
+ ].join("\n"),
111
+ },
112
+ },
113
+ {
114
+ role: "assistant",
115
+ content: {
116
+ type: "text",
117
+ text: "Diagnosis plan ready. All inspection tools are read-only and may auto-run; no approval token required.",
118
+ },
119
+ },
120
+ ],
121
+ }));
122
+ // create_preview
123
+ server.registerPrompt("create_preview", {
124
+ description: CAPIX_PROMPTS[2].description,
125
+ argsSchema: {
126
+ siteId: z.string().describe("Website project id."),
127
+ branch: z.string().describe("Branch to preview."),
128
+ },
129
+ }, async (args) => ({
130
+ messages: [
131
+ {
132
+ role: "user",
133
+ content: {
134
+ type: "text",
135
+ text: [
136
+ `Create a preview deployment for website ${args.siteId}, branch ${args.branch}.`,
137
+ "1. capix_website_preview — build a preview (requires approvalToken).",
138
+ "2. Return the preview URL.",
139
+ ].join("\n"),
140
+ },
141
+ },
142
+ {
143
+ role: "assistant",
144
+ content: { type: "text", text: APPROVAL_REMINDER },
145
+ },
146
+ ],
147
+ }));
148
+ // plan_stack
149
+ server.registerPrompt("plan_stack", {
150
+ description: CAPIX_PROMPTS[3].description,
151
+ argsSchema: {
152
+ manifestUrl: z.string().describe("Stack manifest URL or inline spec."),
153
+ },
154
+ }, async (args) => ({
155
+ messages: [
156
+ {
157
+ role: "user",
158
+ content: {
159
+ type: "text",
160
+ text: [
161
+ `Validate and plan the stack manifest at ${args.manifestUrl}.`,
162
+ "1. capix_stack_validate — check the manifest.",
163
+ "2. capix_stack_plan — produce a service plan graph + aggregate quote.",
164
+ "Report feasibility and per-service cost.",
165
+ ].join("\n"),
166
+ },
167
+ },
168
+ {
169
+ role: "assistant",
170
+ content: {
171
+ type: "text",
172
+ text: "Stack planning tools are read-only and may auto-run; no approval token required.",
173
+ },
174
+ },
175
+ ],
176
+ }));
177
+ // cleanup_task
178
+ server.registerPrompt("cleanup_task", {
179
+ description: CAPIX_PROMPTS[4].description,
180
+ argsSchema: {
181
+ taskId: z.string().describe("Task-scoped resource id."),
182
+ },
183
+ }, async (args) => ({
184
+ messages: [
185
+ {
186
+ role: "user",
187
+ content: {
188
+ type: "text",
189
+ text: [
190
+ `Destroy all task-scoped resources for ${args.taskId} (§18 cleanup gate).`,
191
+ "1. capix_destroy_task_resources — release allocations (requires approvalToken).",
192
+ "2. capix_receipts — confirm final settlement.",
193
+ ].join("\n"),
194
+ },
195
+ },
196
+ {
197
+ role: "assistant",
198
+ content: { type: "text", text: APPROVAL_REMINDER },
199
+ },
200
+ ],
201
+ }));
202
+ }
203
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Capix MCP Server — resources (capix:// URIs).
3
+ *
4
+ * Resources are read-only views the MCP client can list and read by URI. They
5
+ * mirror the discovery + website sub-ports: account, balance, projects,
6
+ * catalogs, deployments, receipts, attestations, websites, and memory/skills
7
+ * intelligence surfaces.
8
+ *
9
+ * `registerResources(server, client)` wires each `capix://…` URI to a
10
+ * `readResource` callback that delegates to the canonical Capix API client.
11
+ */
12
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
+ import type { CapixClient } from "./client.js";
14
+ /** Static resource descriptor surfaced via resources/list. */
15
+ export interface CapixResource {
16
+ uri: string;
17
+ name: string;
18
+ description: string;
19
+ mimeType: "application/json";
20
+ }
21
+ export declare const CAPIX_RESOURCES: CapixResource[];
22
+ /**
23
+ * Register all capix:// resources with the given McpServer. Each resource's
24
+ * read callback delegates to the canonical Capix API client and returns the
25
+ * raw JSON object as a text content block.
26
+ */
27
+ export declare function registerResources(server: McpServer, client: CapixClient): void;
28
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EAiD1C,CAAC;AAgBF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAuB9E"}