@shipstatic/mcp 0.2.0 → 0.3.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/dist/server.js +12 -13
- package/package.json +5 -5
package/dist/server.js
CHANGED
|
@@ -9,12 +9,12 @@ const DESTRUCTIVE = { destructiveHint: true, idempotentHint: true, ...OPEN_WORLD
|
|
|
9
9
|
const INSTRUCTIONS = `ShipStatic hosts static websites.
|
|
10
10
|
|
|
11
11
|
Concepts:
|
|
12
|
-
- Deployment: an immutable set of uploaded files. Every deployment gets a permanent URL (e.g. happy-cat-abc1234.shipstatic.
|
|
12
|
+
- Deployment: an immutable set of uploaded files. Every deployment gets a permanent URL (e.g. happy-cat-abc1234.shipstatic.com) immediately — no domain setup needed.
|
|
13
13
|
- Domain: a custom domain (e.g. www.example.com) that points to a deployment. Optional. Only subdomains are supported (www.example.com, blog.example.com) — not apex domains (example.com).
|
|
14
14
|
|
|
15
|
-
To deploy a site: call deployments_upload with the absolute path to the build output directory. The response includes the
|
|
15
|
+
To deploy a site: call deployments_upload with the absolute path to the build output directory. The response includes the deployment hostname.
|
|
16
16
|
|
|
17
|
-
To add a custom domain: domains_validate → domains_set (with the deployment
|
|
17
|
+
To add a custom domain: domains_validate → domains_set (with the deployment) → domains_records (show the DNS records to the user) → user configures DNS → domains_verify.`;
|
|
18
18
|
export function createServer(ship) {
|
|
19
19
|
const server = new McpServer({
|
|
20
20
|
name: 'shipstatic',
|
|
@@ -24,38 +24,37 @@ export function createServer(ship) {
|
|
|
24
24
|
});
|
|
25
25
|
// Deployments
|
|
26
26
|
server.registerTool('deployments_upload', {
|
|
27
|
-
description: 'Deploy a static site by uploading files from a directory. Returns the deployment
|
|
27
|
+
description: 'Deploy a static site by uploading files from a directory. Returns the deployment details including hostname, file count, and size.',
|
|
28
28
|
annotations: CREATE,
|
|
29
29
|
inputSchema: {
|
|
30
30
|
path: z.string().describe('Absolute path to the build output directory to deploy (e.g. "/Users/me/project/dist")'),
|
|
31
|
-
subdomain: z.string().optional().describe('Preferred subdomain for the deployment URL (e.g. "my-site" for my-site.shipstatic.dev). If unavailable or omitted, a random name is assigned.'),
|
|
32
31
|
labels: z.array(z.string()).optional().describe('Labels for organizing deployments (e.g. ["production", "v1.2"]). Lowercase, 3-25 chars, allows . _ - separators.'),
|
|
33
32
|
},
|
|
34
|
-
}, ({ path,
|
|
33
|
+
}, ({ path, labels }) => call(() => ship.deployments.upload(path, { labels, via: 'mcp' })));
|
|
35
34
|
server.registerTool('deployments_list', {
|
|
36
|
-
description: 'List all deployments with their
|
|
35
|
+
description: 'List all deployments with their hostnames, status, and labels.',
|
|
37
36
|
annotations: READ,
|
|
38
37
|
}, () => call(() => ship.deployments.list()));
|
|
39
38
|
server.registerTool('deployments_get', {
|
|
40
|
-
description: 'Get deployment details including
|
|
39
|
+
description: 'Get deployment details including status, file count, size, and labels.',
|
|
41
40
|
annotations: READ,
|
|
42
41
|
inputSchema: {
|
|
43
|
-
deployment: z.string().describe('Deployment
|
|
42
|
+
deployment: z.string().describe('Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Returned by deployments_upload or deployments_list.'),
|
|
44
43
|
},
|
|
45
44
|
}, ({ deployment }) => call(() => ship.deployments.get(deployment)));
|
|
46
45
|
server.registerTool('deployments_set', {
|
|
47
46
|
description: 'Update deployment labels. Replaces all existing labels.',
|
|
48
47
|
annotations: WRITE,
|
|
49
48
|
inputSchema: {
|
|
50
|
-
deployment: z.string().describe('Deployment
|
|
49
|
+
deployment: z.string().describe('Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Use deployments_list to find deployments.'),
|
|
51
50
|
labels: z.array(z.string()).describe('Labels to set. Replaces all existing labels. Pass empty array to clear.'),
|
|
52
51
|
},
|
|
53
52
|
}, ({ deployment, labels }) => call(() => ship.deployments.set(deployment, { labels })));
|
|
54
53
|
server.registerTool('deployments_remove', {
|
|
55
|
-
description: 'Permanently delete a deployment and its files. You MUST confirm with the user before calling this tool, referencing the deployment
|
|
54
|
+
description: 'Permanently delete a deployment and its files. You MUST confirm with the user before calling this tool, referencing the deployment.',
|
|
56
55
|
annotations: DESTRUCTIVE,
|
|
57
56
|
inputSchema: {
|
|
58
|
-
deployment: z.string().describe('Deployment
|
|
57
|
+
deployment: z.string().describe('Deployment hostname to delete (e.g. "happy-cat-abc1234.shipstatic.com")'),
|
|
59
58
|
},
|
|
60
59
|
}, ({ deployment }) => call(() => ship.deployments.remove(deployment)));
|
|
61
60
|
// Domains
|
|
@@ -64,7 +63,7 @@ export function createServer(ship) {
|
|
|
64
63
|
annotations: WRITE,
|
|
65
64
|
inputSchema: {
|
|
66
65
|
domain: z.string().describe('Domain name (e.g. "www.example.com" or "blog.example.com")'),
|
|
67
|
-
deployment: z.string().optional().describe('Deployment
|
|
66
|
+
deployment: z.string().optional().describe('Deployment to serve on this domain (e.g. "happy-cat-abc1234.shipstatic.com"). Omit to reserve the domain without linking.'),
|
|
68
67
|
labels: z.array(z.string()).optional().describe('Labels for organizing domains (e.g. ["production"]).'),
|
|
69
68
|
},
|
|
70
69
|
}, ({ domain, deployment, labels }) => call(() => ship.domains.set(domain, { deployment, labels })));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shipstatic/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"mcpName": "com.shipstatic/mcp",
|
|
5
5
|
"description": "MCP server for ShipStatic — deploy and manage static sites from AI agents",
|
|
6
6
|
"type": "module",
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
"author": "ShipStatic",
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
45
|
-
"@shipstatic/ship": "^0.
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
45
|
+
"@shipstatic/ship": "^0.8.1",
|
|
46
46
|
"zod": "^4.3.6"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@shipstatic/types": "^0.
|
|
50
|
-
"@types/node": "^20.
|
|
49
|
+
"@shipstatic/types": "^0.8.1",
|
|
50
|
+
"@types/node": "^20.19.37",
|
|
51
51
|
"husky": "^9.1.7",
|
|
52
52
|
"typescript": "^5.9.3",
|
|
53
53
|
"vitest": "^3.2.4"
|