@saplo/cli 0.2.2 → 2.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/bin/mcp.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // Direct MCP entry point - alias for `saplo mcp serve`.
3
+ // Allows: `claude mcp add saplo -- saplo-mcp` (back-compat z PyPI version).
4
+ // Token auth: SAPLO_API_TOKEN env LUB ~/.saplo/config.json (z `saplo login`).
5
+ import {startMcpServer} from '../dist/mcp/server.js'
6
+
7
+ startMcpServer().catch((err) => {
8
+ // stderr - stdout zarezerwowane dla JSON-RPC MCP framing.
9
+ console.error('[saplo-mcp] Fatal error:', err?.message ?? err)
10
+ process.exit(1)
11
+ })
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class McpServe extends Command {
3
+ static description: string;
4
+ static examples: {
5
+ description: string;
6
+ command: string;
7
+ }[];
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAA;AAGnC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SACgF;IAE3G,OAAgB,QAAQ;;;QAavB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B"}
@@ -0,0 +1,26 @@
1
+ import { Command } from '@oclif/core';
2
+ import { startMcpServer } from '../../mcp/server.js';
3
+ export default class McpServe extends Command {
4
+ static description = 'Start the Saplo MCP server (stdio transport). Use this in Claude Code / Desktop / Cursor configuration.';
5
+ static examples = [
6
+ {
7
+ description: 'Add to Claude Code:',
8
+ command: 'claude mcp add saplo -- saplo mcp serve',
9
+ },
10
+ {
11
+ description: 'Add to Claude Desktop (~/.config/Claude/claude_desktop_config.json):',
12
+ command: '"saplo": {"command": "saplo", "args": ["mcp", "serve"]}',
13
+ },
14
+ {
15
+ description: 'Test locally (server reads JSON-RPC from stdin):',
16
+ command: 'saplo mcp serve',
17
+ },
18
+ ];
19
+ async run() {
20
+ // Token validation NIE robimy tutaj - serwer i tak rzuci 401 przy
21
+ // pierwszym wywolaniu, a sam start MCP nie wymaga tokenu (resource
22
+ // saplo://docs/manifest jest publiczne).
23
+ await startMcpServer();
24
+ }
25
+ }
26
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/mcp/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAA;AACnC,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,WAAW,GACzB,yGAAyG,CAAA;IAE3G,MAAM,CAAU,QAAQ,GAAG;QACzB;YACE,WAAW,EAAE,qBAAqB;YAClC,OAAO,EAAE,yCAAyC;SACnD;QACD;YACE,WAAW,EAAE,sEAAsE;YACnF,OAAO,EAAE,yDAAyD;SACnE;QACD;YACE,WAAW,EAAE,kDAAkD;YAC/D,OAAO,EAAE,iBAAiB;SAC3B;KACF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,kEAAkE;QAClE,mEAAmE;QACnE,yCAAyC;QACzC,MAAM,cAAc,EAAE,CAAA;IACxB,CAAC"}
package/dist/lib/api.d.ts CHANGED
@@ -64,5 +64,61 @@ export declare const api: {
64
64
  rollback(appId: number, deploymentId?: number): Promise<{
65
65
  now_live: number;
66
66
  }>;
67
+ restart(appId: number): Promise<{
68
+ status: string;
69
+ }>;
70
+ validateManifest(manifestYaml: string): Promise<ValidateManifestResponse>;
71
+ manifestSchema(): Promise<unknown>;
72
+ scaffoldManifest(stack: string, name: string): Promise<ScaffoldManifestResponse>;
73
+ listPlans(): Promise<{
74
+ plans: HostingPlan[];
75
+ }>;
67
76
  };
77
+ export interface ManifestError {
78
+ path: string;
79
+ line: number | null;
80
+ col: number | null;
81
+ message: string;
82
+ hint: string;
83
+ }
84
+ export interface ManifestWarning {
85
+ path: string;
86
+ message: string;
87
+ }
88
+ export interface ValidateManifestResponse {
89
+ valid: boolean;
90
+ errors: ManifestError[];
91
+ warnings: ManifestWarning[];
92
+ normalized: Record<string, unknown> | null;
93
+ }
94
+ export interface ScaffoldManifestResponse {
95
+ manifest: string;
96
+ saploignore: string;
97
+ filename: string;
98
+ stack: string;
99
+ name: string;
100
+ }
101
+ export interface HostingPlan {
102
+ slug: string;
103
+ name: string;
104
+ price_per_year_pln: number;
105
+ price_per_month_pln: number | null;
106
+ description: string;
107
+ limits: {
108
+ max_apps: number;
109
+ ssd_gb_per_app: number;
110
+ ram_mb_per_app: number;
111
+ cpu_per_app: number;
112
+ max_custom_domains: number;
113
+ additional_ports: number;
114
+ backup_limit: number;
115
+ max_mailboxes: number;
116
+ mail_storage_gb: number;
117
+ };
118
+ features: {
119
+ sftp_access: boolean;
120
+ ssh_access: boolean;
121
+ additional: string[];
122
+ };
123
+ }
68
124
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAC,aAAa,EAAa,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AAGrC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAID,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAqD7D;AAED,wBAAgB,SAAS,IAAI,aAAa,CAKzC;AAED,eAAO,MAAM,GAAG;mBACC,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;wBAK3B,OAAO,CAAC,WAAW,EAAE,CAAC;uBAIvB,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;4BAIxB;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,WAAW,CAAC;4BAIzE,MAAM,YAAY,QAAQ,iBAAiB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC;2BAYtG,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;sBAInC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;gBAIlC,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;yBAalC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAIzB,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;sBAI1B,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;wBAItD,MAAM,OAAO,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;uBAIpC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;qBAI5B,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAC,CAAC;wBAIzD,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;oBAI1C,MAAM,iBAAiB,MAAM,GAAG,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC;CAI5E,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
package/dist/lib/api.js CHANGED
@@ -125,5 +125,26 @@ export const api = {
125
125
  const data = deploymentId ? { deployment_id: deploymentId } : {};
126
126
  return getClient().post(`/api/v1/applications/${appId}/rollback/`, data).then((r) => r.data);
127
127
  },
128
+ restart(appId) {
129
+ return getClient().post(`/api/v1/applications/${appId}/restart/`).then((r) => r.data);
130
+ },
131
+ // ---- MCP v2 faza A: manifest copilot + plans ----
132
+ validateManifest(manifestYaml) {
133
+ return getClient()
134
+ .post('/api/v1/manifest/validate', { manifest: manifestYaml })
135
+ .then((r) => r.data);
136
+ },
137
+ manifestSchema() {
138
+ // Endpoint publiczny - bez auth tez dziala, ale getClient() i tak doda token.
139
+ return getClient().get('/api/v1/manifest/schema').then((r) => r.data);
140
+ },
141
+ scaffoldManifest(stack, name) {
142
+ return getClient()
143
+ .get('/api/v1/manifest/scaffold', { params: { stack, name } })
144
+ .then((r) => r.data);
145
+ },
146
+ listPlans() {
147
+ return getClient().get('/api/v1/plans/').then((r) => r.data);
148
+ },
128
149
  };
129
150
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD,wBAAgB,eAAe,IAAI,YAAY,CAe9C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAQpE;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,GAAG,IAAI,CASlF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI,CAO1F;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAM/E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD,wBAAgB,eAAe,IAAI,YAAY,CAwB9C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAQpE;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,GAAG,IAAI,CASlF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI,CAO1F;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAM/E"}
@@ -7,21 +7,28 @@ const DEFAULT_API_URL = 'https://api.saplo.pl';
7
7
  // Old default that used to be stored in config files - treat as stale
8
8
  const LEGACY_API_URL = 'https://panel.saplo.pl';
9
9
  export function getGlobalConfig() {
10
- if (!existsSync(GLOBAL_CONFIG_PATH)) {
11
- return { api_url: DEFAULT_API_URL };
12
- }
13
- try {
14
- const raw = readFileSync(GLOBAL_CONFIG_PATH, 'utf-8');
15
- const stored = JSON.parse(raw);
16
- // Migrate: if the stored api_url still points to the old panel host, replace it with the new default
17
- if (!stored.api_url || stored.api_url === LEGACY_API_URL) {
18
- stored.api_url = DEFAULT_API_URL;
10
+ // Env vars maja pierwszenstwo - tak MCP server (Claude Code / Desktop)
11
+ // przekazuje konfiguracje, bo nie ma dostepu do ~/.saplo/config.json
12
+ // (instalowany przez `npm i -g` moze nie miec mojego HOME).
13
+ const envToken = process.env.SAPLO_API_TOKEN;
14
+ const envUrl = process.env.SAPLO_API_URL;
15
+ let stored = { api_url: DEFAULT_API_URL };
16
+ if (existsSync(GLOBAL_CONFIG_PATH)) {
17
+ try {
18
+ const raw = readFileSync(GLOBAL_CONFIG_PATH, 'utf-8');
19
+ stored = JSON.parse(raw);
20
+ if (!stored.api_url || stored.api_url === LEGACY_API_URL) {
21
+ stored.api_url = DEFAULT_API_URL;
22
+ }
23
+ }
24
+ catch {
25
+ // Plik zepsuty - traktuj jakby go nie bylo, env vars i tak moga zadzialac
19
26
  }
20
- return stored;
21
- }
22
- catch {
23
- return { api_url: DEFAULT_API_URL };
24
27
  }
28
+ return {
29
+ token: envToken ?? stored.token,
30
+ api_url: envUrl ?? stored.api_url,
31
+ };
25
32
  }
26
33
  export function saveGlobalConfig(config) {
27
34
  if (!existsSync(SAPLO_DIR)) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,SAAS,CAAA;AACrF,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAY9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AACzD,MAAM,eAAe,GAAG,sBAAsB,CAAA;AAC9C,sEAAsE;AACtE,MAAM,cAAc,GAAG,wBAAwB,CAAA;AAE/C,MAAM,UAAU,eAAe;IAC7B,uEAAuE;IACvE,qEAAqE;IACrE,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IAExC,IAAI,MAAM,GAAiB,EAAC,OAAO,EAAE,eAAe,EAAC,CAAA;IACrD,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;YACrD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;gBACzD,MAAM,CAAC,OAAO,GAAG,eAAe,CAAA;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK;QAC/B,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;KAClC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,MAAM,MAAM,GAAiB,EAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,eAAe,EAAC,CAAA;IACrH,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC3E,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,KAAK,CAAA;IACnB,gBAAgB,CAAC,MAAM,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACtC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface McpResource {
2
+ uri: string;
3
+ name: string;
4
+ description: string;
5
+ mimeType?: string;
6
+ read: (uri: string) => Promise<string>;
7
+ }
8
+ export declare function registerResources(): McpResource[];
9
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACvC;AAED,wBAAgB,iBAAiB,IAAI,WAAW,EAAE,CAkDjD"}
@@ -0,0 +1,91 @@
1
+ // MCP resources dla Saplo - kontekst przegladalny przez Claude/Cursor.
2
+ // Zwracane jako markdown (lepiej parsuje sie przez LLM) z wyjatkiem schema.
3
+ import { api } from '../lib/api.js';
4
+ export function registerResources() {
5
+ return [
6
+ {
7
+ uri: 'saplo://apps',
8
+ name: 'saplo_apps',
9
+ description: 'List of all your Saplo applications',
10
+ read: async () => {
11
+ const apps = await api.listApplications();
12
+ return appsMarkdown(apps);
13
+ },
14
+ },
15
+ {
16
+ uri: 'saplo://app/{app_id}',
17
+ name: 'saplo_app_detail',
18
+ description: 'Details for a specific Saplo application (use with app id from saplo://apps)',
19
+ read: async (uri) => {
20
+ const appId = Number(uri.split('/').pop());
21
+ if (!Number.isFinite(appId)) {
22
+ throw new Error(`Invalid app id in URI: ${uri}`);
23
+ }
24
+ const app = await api.getApplication(appId);
25
+ return appMarkdown(app);
26
+ },
27
+ },
28
+ {
29
+ uri: 'saplo://plans',
30
+ name: 'saplo_plans',
31
+ description: 'Saplo hosting plans matrix - RAM, SSD, CPU, SSH, mail, prices',
32
+ read: async () => {
33
+ const data = await api.listPlans();
34
+ return plansMarkdown(data.plans);
35
+ },
36
+ },
37
+ {
38
+ uri: 'saplo://docs/manifest',
39
+ name: 'saplo_docs_manifest',
40
+ description: 'Full JSON Schema for saplo.yaml - reference when authoring or editing manifests',
41
+ read: async () => {
42
+ const schema = await api.manifestSchema();
43
+ return ('# saplo.yaml JSON Schema (draft-07)\n\n' +
44
+ 'Use this schema to write and validate `saplo.yaml`. Call `saplo_init_scaffold` ' +
45
+ 'for a ready template, then `saplo_validate_manifest` before deploying.\n\n' +
46
+ '```json\n' +
47
+ JSON.stringify(schema, null, 2) +
48
+ '\n```\n');
49
+ },
50
+ },
51
+ ];
52
+ }
53
+ function appsMarkdown(apps) {
54
+ if (!apps || apps.length === 0) {
55
+ return 'No applications found. Create one with the `saplo_create_app` tool.';
56
+ }
57
+ const lines = ['# Your Saplo Applications\n'];
58
+ for (const app of apps) {
59
+ const url = app.url ?? '-';
60
+ lines.push(`- **${app.name}** (id=${app.id}) | stack=${app.stack} | status=${app.status} | ${url}`);
61
+ }
62
+ return lines.join('\n');
63
+ }
64
+ function appMarkdown(app) {
65
+ return [
66
+ `# Application: ${app.name} (id=${app.id})`,
67
+ `**Stack:** ${app.stack}`,
68
+ `**Status:** ${app.status}`,
69
+ `**URL:** ${app.url ?? '-'}`,
70
+ `**Domains:** ${(app.domains ?? []).join(', ') || '(none custom)'}`,
71
+ ].join('\n');
72
+ }
73
+ function plansMarkdown(plans) {
74
+ if (!plans || plans.length === 0) {
75
+ return 'No plans available.';
76
+ }
77
+ const lines = ['# Saplo Hosting Plans\n'];
78
+ for (const p of plans) {
79
+ lines.push(`## ${p.name} (\`${p.slug}\`) - ${p.price_per_year_pln} PLN/year`);
80
+ lines.push(`- RAM: ${p.limits.ram_mb_per_app} MB`);
81
+ lines.push(`- SSD: ${p.limits.ssd_gb_per_app} GB`);
82
+ lines.push(`- CPU: ${p.limits.cpu_per_app} cores`);
83
+ lines.push(`- Apps: ${p.limits.max_apps}`);
84
+ lines.push(`- Custom domains: ${p.limits.max_custom_domains}`);
85
+ lines.push(`- SSH: ${p.features.ssh_access ? 'yes' : 'no'}`);
86
+ lines.push(`- Mailboxes: ${p.limits.max_mailboxes}`);
87
+ lines.push('');
88
+ }
89
+ return lines.join('\n');
90
+ }
91
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function startMcpServer(): Promise<void>;
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmFpD"}
@@ -0,0 +1,96 @@
1
+ // Saplo MCP server - integracja z Claude Code / Desktop / Cursor.
2
+ //
3
+ // Token: SAPLO_API_TOKEN env LUB ~/.saplo/config.json (`saplo login`).
4
+ // URL: SAPLO_API_URL env LUB config (domyslnie https://api.saplo.pl).
5
+ //
6
+ // Uruchamiany przez `saplo mcp serve`, `saplo-mcp` (bin alias) lub bezposrednio
7
+ // przez startMcpServer() z innego kodu. Transport: stdio (FastMCP-style).
8
+ //
9
+ // stdout zarezerwowane dla JSON-RPC MCP framing - cale logowanie na stderr.
10
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
11
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
13
+ import { registerTools } from './tools.js';
14
+ import { registerResources } from './resources.js';
15
+ export async function startMcpServer() {
16
+ const server = new Server({
17
+ name: 'saplo',
18
+ version: '2.0.0',
19
+ }, {
20
+ capabilities: {
21
+ tools: {},
22
+ resources: {},
23
+ },
24
+ });
25
+ // Rejestracja tools (handler dla list + call)
26
+ const tools = registerTools();
27
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
28
+ tools: tools.map((t) => ({
29
+ name: t.name,
30
+ description: t.description,
31
+ inputSchema: t.inputSchema,
32
+ })),
33
+ }));
34
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
35
+ const { name, arguments: args } = request.params;
36
+ const tool = tools.find((t) => t.name === name);
37
+ if (!tool) {
38
+ return {
39
+ isError: true,
40
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
41
+ };
42
+ }
43
+ try {
44
+ const result = await tool.handler(args ?? {});
45
+ return {
46
+ content: [{ type: 'text', text: typeof result === 'string' ? result : JSON.stringify(result, null, 2) }],
47
+ };
48
+ }
49
+ catch (err) {
50
+ const message = err.message ?? String(err);
51
+ return {
52
+ isError: true,
53
+ content: [{ type: 'text', text: `Error in ${name}: ${message}` }],
54
+ };
55
+ }
56
+ });
57
+ // Rejestracja resources (handler dla list + read)
58
+ const resources = registerResources();
59
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
60
+ resources: resources.map((r) => ({
61
+ uri: r.uri,
62
+ name: r.name,
63
+ description: r.description,
64
+ mimeType: r.mimeType ?? 'text/markdown',
65
+ })),
66
+ }));
67
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
68
+ const { uri } = request.params;
69
+ const resource = resources.find((r) => r.uri === uri || matchTemplate(r.uri, uri));
70
+ if (!resource) {
71
+ throw new Error(`Unknown resource: ${uri}`);
72
+ }
73
+ const text = await resource.read(uri);
74
+ return {
75
+ contents: [
76
+ {
77
+ uri,
78
+ mimeType: resource.mimeType ?? 'text/markdown',
79
+ text,
80
+ },
81
+ ],
82
+ };
83
+ });
84
+ // Stdio transport - czyta JSON-RPC ze stdin, pisze odpowiedzi na stdout.
85
+ const transport = new StdioServerTransport();
86
+ await server.connect(transport);
87
+ // Po connect proces zyje az do EOF na stdin (klient odlaczy).
88
+ console.error('[saplo-mcp] Server started on stdio transport. Ready for MCP requests.');
89
+ }
90
+ // Bardzo prosty matcher dla URI z template-ami typu "saplo://app/{id}".
91
+ // Dopasowuje "saplo://app/123" do template "saplo://app/{id}".
92
+ function matchTemplate(template, uri) {
93
+ const regex = new RegExp('^' + template.replace(/\{[^}]+\}/g, '[^/]+') + '$');
94
+ return regex.test(uri);
95
+ }
96
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface McpTool {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: Record<string, unknown>;
5
+ handler: (args: Record<string, unknown>) => Promise<unknown>;
6
+ }
7
+ export declare function registerTools(): McpTool[];
8
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7D;AAMD,wBAAgB,aAAa,IAAI,OAAO,EAAE,CA2MzC"}
@@ -0,0 +1,212 @@
1
+ // MCP tools dla Saplo - 13 narzedzi v2.0 faza A.
2
+ //
3
+ // Kazdy tool: name, description (widoczne dla LLM), inputSchema (JSON Schema -
4
+ // wymagane przez MCP spec), handler (async function args -> result).
5
+ //
6
+ // Style: cienkie wrappery na axios `api` - cala logika serwerowa zostaje
7
+ // w backendzie Django. Walidacja args na poziomie inputSchema (MCP klient
8
+ // odrzuca zle parametry przed dotarciem do nas).
9
+ import { api } from '../lib/api.js';
10
+ // Allowed stacks - jeden source of truth, uzywany w description (LLM widzi)
11
+ // i jako enum w inputSchema (klient waliduje).
12
+ const STACKS = ['nextjs', 'react', 'vue', 'nuxt', 'sveltekit', 'angular', 'django', 'static', 'docker', 'node', 'astro'];
13
+ export function registerTools() {
14
+ return [
15
+ // ---- Apps ----
16
+ {
17
+ name: 'saplo_list_apps',
18
+ description: 'List all applications in your Saplo account. Returns id, name, stack, status, url.',
19
+ inputSchema: { type: 'object', properties: {}, additionalProperties: false },
20
+ handler: async () => api.listApplications(),
21
+ },
22
+ {
23
+ name: 'saplo_get_app',
24
+ description: 'Get details for a specific application including its current deployment, env count, and domains.',
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: { app_id: { type: 'integer', description: 'Application ID (use saplo_list_apps to find).' } },
28
+ required: ['app_id'],
29
+ additionalProperties: false,
30
+ },
31
+ handler: async (args) => api.getApplication(args.app_id),
32
+ },
33
+ {
34
+ name: 'saplo_create_app',
35
+ description: `Create a new Saplo application. Returns app id, url and access credentials. Allowed stacks: ${STACKS.join(', ')}.`,
36
+ inputSchema: {
37
+ type: 'object',
38
+ properties: {
39
+ name: { type: 'string', description: 'App slug (lowercase, digits, hyphens). Example: "my-portfolio".' },
40
+ stack: { type: 'string', enum: STACKS, description: 'Technology stack.' },
41
+ izolbox_id: { type: 'integer', description: 'Optional Box ID. Defaults to first active Box of the user.' },
42
+ },
43
+ required: ['name', 'stack'],
44
+ additionalProperties: false,
45
+ },
46
+ handler: async (args) => api.createApplication({
47
+ name: args.name,
48
+ stack: args.stack,
49
+ izolbox_id: args.izolbox_id,
50
+ }),
51
+ },
52
+ // ---- Deploy ----
53
+ {
54
+ name: 'saplo_deployment_status',
55
+ description: 'Get the current status of a deployment (queued, building, releasing, running, failed, cancelled, rolled_back).',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: { deployment_id: { type: 'integer' } },
59
+ required: ['deployment_id'],
60
+ additionalProperties: false,
61
+ },
62
+ handler: async (args) => api.getDeployment(args.deployment_id),
63
+ },
64
+ {
65
+ name: 'saplo_logs',
66
+ description: 'Get the most recent build/runtime log lines for a deployment. HTTP polling - for live streaming use WebSocket (coming in v2.3).',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ deployment_id: { type: 'integer' },
71
+ since: { type: 'string', description: 'ISO timestamp - return only logs after this time. Optional.' },
72
+ },
73
+ required: ['deployment_id'],
74
+ additionalProperties: false,
75
+ },
76
+ handler: async (args) => api.getLogs(args.deployment_id, args.since),
77
+ },
78
+ {
79
+ name: 'saplo_rollback',
80
+ description: 'Roll back to a previous deployment (or the last stable one if deployment_id omitted). Returns the now-live deployment id. Destructive - confirm with user first.',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ app_id: { type: 'integer' },
85
+ deployment_id: { type: 'integer', description: 'Optional - specific deployment to roll back to.' },
86
+ },
87
+ required: ['app_id'],
88
+ additionalProperties: false,
89
+ },
90
+ handler: async (args) => api.rollback(args.app_id, args.deployment_id),
91
+ },
92
+ {
93
+ name: 'saplo_restart',
94
+ description: 'Restart the live deployment of an application (no rebuild). Destructive - confirm with user first.',
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: { app_id: { type: 'integer' } },
98
+ required: ['app_id'],
99
+ additionalProperties: false,
100
+ },
101
+ handler: async (args) => api.restart(args.app_id),
102
+ },
103
+ // ---- Env vars ----
104
+ {
105
+ name: 'saplo_env_get',
106
+ description: 'List environment variables for an application. Secret values are hidden, only keys returned.',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: { app_id: { type: 'integer' } },
110
+ required: ['app_id'],
111
+ additionalProperties: false,
112
+ },
113
+ handler: async (args) => api.getEnvVars(args.app_id),
114
+ },
115
+ {
116
+ name: 'saplo_env_set',
117
+ description: 'Create or update environment variables for an application. Pass {KEY: "value"} pairs. Triggers redeploy on next app boot. Destructive - confirm with user.',
118
+ inputSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ app_id: { type: 'integer' },
122
+ vars: {
123
+ type: 'object',
124
+ additionalProperties: { type: 'string' },
125
+ description: 'Key-value map. Prefix value with "@secret:" to reference a stored secret instead of plaintext.',
126
+ },
127
+ },
128
+ required: ['app_id', 'vars'],
129
+ additionalProperties: false,
130
+ },
131
+ handler: async (args) => api.setEnvVars(args.app_id, args.vars),
132
+ },
133
+ {
134
+ name: 'saplo_env_unset',
135
+ description: 'Delete a single environment variable by key. Destructive - confirm with user first.',
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ app_id: { type: 'integer' },
140
+ key: { type: 'string' },
141
+ },
142
+ required: ['app_id', 'key'],
143
+ additionalProperties: false,
144
+ },
145
+ handler: async (args) => {
146
+ await api.deleteEnvVar(args.app_id, args.key);
147
+ return { deleted: args.key };
148
+ },
149
+ },
150
+ // ---- Domains ----
151
+ {
152
+ name: 'saplo_domain_list',
153
+ description: 'List all custom domains attached to an application with their verification status.',
154
+ inputSchema: {
155
+ type: 'object',
156
+ properties: { app_id: { type: 'integer' } },
157
+ required: ['app_id'],
158
+ additionalProperties: false,
159
+ },
160
+ handler: async (args) => api.listDomains(args.app_id),
161
+ },
162
+ {
163
+ name: 'saplo_domain_add',
164
+ description: 'Add a custom domain to an application. Returns DNS records (A/CNAME) the user needs to set at their registrar. SSL via Let\'s Encrypt is provisioned automatically.',
165
+ inputSchema: {
166
+ type: 'object',
167
+ properties: {
168
+ app_id: { type: 'integer' },
169
+ domain: { type: 'string', description: 'Fully qualified domain. Example: "example.com" or "www.example.com".' },
170
+ },
171
+ required: ['app_id', 'domain'],
172
+ additionalProperties: false,
173
+ },
174
+ handler: async (args) => api.addDomain(args.app_id, args.domain),
175
+ },
176
+ // ---- MCP v2 faza A: manifest copilot + plans ----
177
+ {
178
+ name: 'saplo_validate_manifest',
179
+ description: 'Validate a saplo.yaml manifest. Returns ALL errors with path and actionable hints (not just first). Call BEFORE saplo_deploy to catch problems early. Empty errors list means the manifest is valid.',
180
+ inputSchema: {
181
+ type: 'object',
182
+ properties: {
183
+ manifest: { type: 'string', description: 'Full YAML source of saplo.yaml as a string.' },
184
+ },
185
+ required: ['manifest'],
186
+ additionalProperties: false,
187
+ },
188
+ handler: async (args) => api.validateManifest(args.manifest),
189
+ },
190
+ {
191
+ name: 'saplo_init_scaffold',
192
+ description: `Generate a ready-to-edit saplo.yaml manifest + .saploignore for the given stack. The manifest contains inline comments to guide further edits. Use this when starting a new app. Allowed stacks: ${STACKS.join(', ')}.`,
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ stack: { type: 'string', enum: STACKS },
197
+ name: { type: 'string', description: 'App slug (lowercase letters, digits, hyphens).' },
198
+ },
199
+ required: ['stack', 'name'],
200
+ additionalProperties: false,
201
+ },
202
+ handler: async (args) => api.scaffoldManifest(args.stack, args.name),
203
+ },
204
+ {
205
+ name: 'saplo_list_plans',
206
+ description: 'List available Saplo hosting plans with prices (PLN/year), RAM/SSD/CPU limits, and feature flags (ssh, mail, backups). Public data - useful BEFORE saplo_create_app to pick the right plan.',
207
+ inputSchema: { type: 'object', properties: {}, additionalProperties: false },
208
+ handler: async () => api.listPlans(),
209
+ },
210
+ ];
211
+ }
212
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "@saplo/cli",
3
- "version": "0.2.2",
4
- "description": "Official CLI for Saplo hosting platform",
3
+ "version": "2.0.0",
4
+ "description": "Official CLI + MCP server for Saplo hosting platform - deploy apps from terminal or AI assistants (Claude, Cursor)",
5
5
  "keywords": [
6
6
  "saplo",
7
7
  "hosting",
8
8
  "cli",
9
- "deploy"
9
+ "deploy",
10
+ "mcp",
11
+ "claude",
12
+ "claude-code",
13
+ "cursor",
14
+ "model-context-protocol"
10
15
  ],
11
16
  "homepage": "https://saplo.pl/docs/cli/",
12
17
  "repository": {
@@ -21,7 +26,8 @@
21
26
  "access": "public"
22
27
  },
23
28
  "bin": {
24
- "saplo": "./bin/run.js"
29
+ "saplo": "./bin/run.js",
30
+ "saplo-mcp": "./bin/mcp.js"
25
31
  },
26
32
  "main": "./dist/index.js",
27
33
  "exports": "./dist/index.js",
@@ -40,6 +46,7 @@
40
46
  "readme": "oclif readme"
41
47
  },
42
48
  "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.29.0",
43
50
  "@oclif/core": "^3.27.0",
44
51
  "axios": "^1.7.9",
45
52
  "chalk": "^5.3.0",
@@ -47,7 +54,8 @@
47
54
  "ora": "^8.1.1",
48
55
  "tar": "^7.4.3",
49
56
  "ws": "^8.18.0",
50
- "yaml": "^2.7.0"
57
+ "yaml": "^2.7.0",
58
+ "zod": "^3.25.76"
51
59
  },
52
60
  "devDependencies": {
53
61
  "@types/form-data": "^2.2.1",
@@ -74,6 +82,9 @@
74
82
  },
75
83
  "domain": {
76
84
  "description": "Manage custom domains for your application"
85
+ },
86
+ "mcp": {
87
+ "description": "MCP server - integration with Claude Code / Desktop / Cursor"
77
88
  }
78
89
  }
79
90
  }