@drop2run/mcp 0.4.1 → 0.4.2

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/README.md CHANGED
@@ -7,13 +7,18 @@ Full documentation at [dropto.run/docs/mcp](https://dropto.run/docs/mcp).
7
7
 
8
8
  ## Setup
9
9
 
10
+ **Claude Desktop** — download [`drop2run.mcpb`](https://dropto.run/drop2run.mcpb) and open it. Claude
11
+ shows an install dialog; that is the whole of it. No terminal, no config file to edit, and nothing to
12
+ install first — Claude for macOS and Windows ships the node this runs on.
13
+
10
14
  **Claude Code** — one command:
11
15
 
12
16
  ```bash
13
17
  claude mcp add drop2run -s user -- npx -y @drop2run/mcp
14
18
  ```
15
19
 
16
- **Claude Desktop** — add this to `claude_desktop_config.json`, then restart the app:
20
+ **Claude Desktop, from npm instead** — if you would rather run the published package than the bundle,
21
+ add this to `claude_desktop_config.json` and restart the app:
17
22
 
18
23
  ```json
19
24
  {
package/dist/index.js CHANGED
@@ -1027,7 +1027,23 @@ async function signInWithCode(waitSeconds, replace = false) {
1027
1027
  "Call this tool again to keep waiting. Nothing has been changed yet."
1028
1028
  ].join("\n");
1029
1029
  }
1030
- const SERVER_VERSION = "0.4.1";
1030
+ const SERVER_VERSION = "0.4.2";
1031
+ const CREDENTIAL_WRITE = {
1032
+ readOnlyHint: false,
1033
+ destructiveHint: false,
1034
+ idempotentHint: false,
1035
+ openWorldHint: true
1036
+ };
1037
+ const REPLACES_A_SITE = {
1038
+ readOnlyHint: false,
1039
+ destructiveHint: true,
1040
+ idempotentHint: false,
1041
+ openWorldHint: true
1042
+ };
1043
+ const READS_ONLY = {
1044
+ readOnlyHint: true,
1045
+ openWorldHint: true
1046
+ };
1031
1047
  function say(text, isError = false) {
1032
1048
  return { content: [{ type: "text", text }], ...isError ? { isError: true } : {} };
1033
1049
  }
@@ -1088,7 +1104,8 @@ function createServer() {
1088
1104
  replace: z.boolean().optional().describe(
1089
1105
  "Sign in even though a token is already stored. Use when switching accounts, or when the stored token is being refused."
1090
1106
  )
1091
- }
1107
+ },
1108
+ annotations: CREDENTIAL_WRITE
1092
1109
  },
1093
1110
  ({ waitSeconds, replace }) => attempt(() => signInWithBrowser(waitSeconds, replace))
1094
1111
  );
@@ -1100,7 +1117,8 @@ function createServer() {
1100
1117
  inputSchema: {
1101
1118
  waitSeconds: z.number().int().min(5).max(MAX_WAIT_SECONDS).optional().describe("How long a waiting call polls before answering. Default 120."),
1102
1119
  replace: z.boolean().optional().describe("Sign in even though a token is already stored.")
1103
- }
1120
+ },
1121
+ annotations: CREDENTIAL_WRITE
1104
1122
  },
1105
1123
  ({ waitSeconds, replace }) => attempt(() => signInWithCode(waitSeconds, replace))
1106
1124
  );
@@ -1117,7 +1135,8 @@ function createServer() {
1117
1135
  })
1118
1136
  ).min(1).describe("The files to publish."),
1119
1137
  site: z.string().optional().describe("Subdomain or site id to publish over. Omit to create a new site.")
1120
- }
1138
+ },
1139
+ annotations: REPLACES_A_SITE
1121
1140
  },
1122
1141
  ({ files, site }) => withCredentials(
1123
1142
  async (credentials) => describe(await publishFiles(credentials, files, site))
@@ -1131,7 +1150,8 @@ function createServer() {
1131
1150
  inputSchema: {
1132
1151
  path: z.string().min(1).describe("Absolute path of the folder to publish."),
1133
1152
  site: z.string().optional().describe("Subdomain or site id to publish over. Omit to create a new site.")
1134
- }
1153
+ },
1154
+ annotations: REPLACES_A_SITE
1135
1155
  },
1136
1156
  ({ path, site }) => withCredentials(
1137
1157
  async (credentials) => describe(await publishDirectory(credentials, path, site))
@@ -1142,7 +1162,8 @@ function createServer() {
1142
1162
  {
1143
1163
  title: "List sites",
1144
1164
  description: "Lists the sites on this account, so a publish can go to one of them.",
1145
- inputSchema: {}
1165
+ inputSchema: {},
1166
+ annotations: READS_ONLY
1146
1167
  },
1147
1168
  () => withCredentials(async (credentials) => {
1148
1169
  const sites = await listSites(credentials);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drop2run/mcp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "MCP server that publishes a folder or an HTML page to Drop2Run and returns a live URL.",
5
5
  "mcpName": "run.dropto/drop2run",
6
6
  "license": "MIT",
@@ -42,7 +42,8 @@
42
42
  "test": "vitest run",
43
43
  "lint": "biome check .",
44
44
  "format": "biome check --write .",
45
- "build": "vite build"
45
+ "build": "vite build",
46
+ "build:mcpb": "node scripts/build-mcpb.mjs"
46
47
  },
47
48
  "dependencies": {
48
49
  "@modelcontextprotocol/sdk": "^1.30.0",