@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 +6 -1
- package/dist/index.js +27 -6
- package/package.json +3 -2
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** —
|
|
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.
|
|
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.
|
|
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",
|