@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.
Files changed (2) hide show
  1. package/dist/server.js +12 -13
  2. 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.dev) immediately — no domain setup needed.
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 live URL.
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 ID) → domains_records (show the DNS records to the user) → user configures DNS → domains_verify.`;
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 with its live URL, file count, and size.',
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, subdomain, labels }) => call(() => ship.deployments.upload(path, { subdomain, labels, via: 'mcp' })));
33
+ }, ({ path, labels }) => call(() => ship.deployments.upload(path, { labels, via: 'mcp' })));
35
34
  server.registerTool('deployments_list', {
36
- description: 'List all deployments with their URLs, status, and labels.',
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 URL, status, file count, size, and labels.',
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 ID (e.g. "happy-cat-abc1234"). Returned by deployments_upload or deployments_list.'),
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 ID (e.g. "happy-cat-abc1234"). Use deployments_list to find IDs.'),
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 ID.',
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 ID to delete (e.g. "happy-cat-abc1234")'),
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 ID to serve on this domain (e.g. "happy-cat-abc1234"). Omit to reserve the domain without linking.'),
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.2.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.27.0",
45
- "@shipstatic/ship": "^0.7.18",
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.7.1",
50
- "@types/node": "^20.0.0",
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"