@filiksyos/mcptoskill 0.2.5 → 0.2.7

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
@@ -23,8 +23,8 @@ npx @filiksyos/mcptoskill <mcp-server-url> [--header "Key: Value"] [--name=<skil
23
23
  |---|---|
24
24
  | `<url>` | MCP server endpoint URL (required) |
25
25
  | `--header "Key: Value"` | Add an HTTP header (repeatable for multiple headers) |
26
- | `--skill-key=<key>` | Skill key from [mcptoskill.com](https://mcptoskill.com) OAuth flow (e.g. Notion). One-time use. |
27
- | `--name=<name>` | Override the generated skill name |
26
+ | `--skill-key=<key>` | *(Deprecated)* Legacy skill key from mcptoskill.com. Use local OAuth instead. |
27
+ | `--name=<name>` | Override the auto-generated skill name |
28
28
  | `--out=<dir>` | Output directory (default: `~/.openclaw/skills/`) |
29
29
 
30
30
  **Examples**
@@ -35,25 +35,33 @@ npx @filiksyos/mcptoskill <mcp-server-url> [--header "Key: Value"] [--name=<skil
35
35
  npx @filiksyos/mcptoskill https://mcp.context7.com/mcp
36
36
  ```
37
37
 
38
- 2. Supabase (Bearer token):
38
+ 2. Local OAuth (Notion, PostHog) — run the command, follow prompts:
39
39
 
40
40
  ```
41
- npx @filiksyos/mcptoskill "https://mcp.supabase.com/mcp?project_ref=YOUR_REF" --header "Authorization: Bearer YOUR_TOKEN"
41
+ npx @filiksyos/mcptoskill https://mcp.notion.com/mcp
42
42
  ```
43
43
 
44
- 3. Exa MCP (key in URL):
44
+ The CLI prints an auth URL. Open it in your browser, complete OAuth, then copy the redirect URL from the address bar (it will fail to load — that's fine) and paste it into the terminal. Tokens are saved locally to `~/.openclaw/mcptoskill/tokens/`.
45
+
46
+ 3. Supabase (local OAuth) — same flow as Notion, no env vars needed:
45
47
 
46
48
  ```
47
- npx @filiksyos/mcptoskill "https://mcp.exa.ai/mcp?exaApiKey=YOUR_KEY"
49
+ npx @filiksyos/mcptoskill https://mcp.supabase.com/mcp
48
50
  ```
49
51
 
50
- 4. Notion (OAuth via [mcptoskill.com](https://mcptoskill.com) — connect, then run the generated command):
52
+ 4. Supabase (manual Bearer token):
51
53
 
52
54
  ```
53
- npx @filiksyos/mcptoskill https://mcp.notion.com/mcp --skill-key sk_live_xxx
55
+ npx @filiksyos/mcptoskill "https://mcp.supabase.com/mcp?project_ref=YOUR_REF" --header "Authorization: Bearer YOUR_TOKEN"
56
+ ```
57
+
58
+ 5. Exa MCP (key in URL):
59
+
60
+ ```
61
+ npx @filiksyos/mcptoskill "https://mcp.exa.ai/mcp?exaApiKey=YOUR_KEY"
54
62
  ```
55
63
 
56
- **Skill keys (OAuth)** — Keys from mcptoskill.com are one-time use. The first install consumes the key; it cannot be used again. Re-installing on another machine requires re-authenticating at mcptoskill.com. No tokens are stored long-term on mcptoskill.com.
64
+ **VPS / headless** — Run the CLI on a remote machine. When prompted, open the auth URL on your laptop, complete OAuth, then copy the redirect URL from the address bar and paste it into the SSH terminal. No server needs to listen on localhost.
57
65
 
58
66
  **What gets generated** — two files are created inside `~/.openclaw/skills/<skill-name>/`:
59
67
 
@@ -66,8 +74,8 @@ npx @filiksyos/mcptoskill https://mcp.notion.com/mcp --skill-key sk_live_xxx
66
74
 
67
75
  ## Web Page
68
76
 
69
- [https://mcptoskill.vercel.app](https://mcptoskill.vercel.app)
77
+ [https://mcptoskill.com](https://mcptoskill.com)
70
78
 
71
79
  Generate the correct CLI command for any MCP server without leaving your browser.
72
80
 
73
- **Contributing** — Fork the repo → edit `index.html` → open a pull request.
81
+ **Contributing** — Fork the repo → edit → open a pull request.
@@ -1,8 +1,22 @@
1
1
  import type { McpClientResult } from "./client.js";
2
+ export interface OAuthTokenInfo {
3
+ access_token: string;
4
+ refresh_token: string;
5
+ expires_in: number | null;
6
+ token_endpoint: string;
7
+ client_id: string;
8
+ client_secret?: string;
9
+ mcp_oauth: boolean;
10
+ token_encoding: "basic" | "none";
11
+ resource_url: string | null;
12
+ provider: string;
13
+ mcp_url: string;
14
+ tokenFilePath?: string;
15
+ }
2
16
  export interface GeneratedSkill {
3
17
  skillName: string;
4
18
  skillMd: string;
5
19
  shellScript: string;
6
20
  }
7
- export declare function generate(result: McpClientResult, nameOverride?: string): GeneratedSkill;
21
+ export declare function generate(result: McpClientResult, nameOverride?: string, oauth?: OAuthTokenInfo): GeneratedSkill;
8
22
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAC;AAgKpE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,CAOvF"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiaD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,eAAe,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,cAAc,GACrB,cAAc,CAShB"}
package/dist/generator.js CHANGED
@@ -78,7 +78,7 @@ function generateSkillMd(result, skillName) {
78
78
  function curlHeaderLines(extraHeaders) {
79
79
  return Object.entries(extraHeaders).map(([k, v]) => ` -H "${k}: ${v}" \\`);
80
80
  }
81
- function generateShellScript(result, skillName) {
81
+ function generateStaticShellScript(result, skillName) {
82
82
  const { serverUrl, extraHeaders } = result;
83
83
  const headerLines = curlHeaderLines(extraHeaders);
84
84
  const initBody = JSON.stringify({
@@ -141,12 +141,256 @@ function generateShellScript(result, skillName) {
141
141
  ];
142
142
  return lines.join("\n");
143
143
  }
144
- export function generate(result, nameOverride) {
144
+ function generateOAuthShellScript(result, skillName, oauth) {
145
+ const { serverUrl } = result;
146
+ const tokenFilePath = oauth.tokenFilePath
147
+ ?? `$HOME/.openclaw/mcptoskill/tokens/${skillName}.json`;
148
+ const initBody = JSON.stringify({
149
+ jsonrpc: "2.0",
150
+ id: 0,
151
+ method: "initialize",
152
+ params: {
153
+ protocolVersion: "2024-11-05",
154
+ capabilities: {},
155
+ clientInfo: { name: "mcptoskill", version: "0.1.0" },
156
+ },
157
+ });
158
+ // Supabase requires Basic auth for refresh even with dynamic registration; check first
159
+ const refreshFunction = oauth.provider === "supabase" && oauth.client_secret
160
+ ? generateSupabaseRefreshFunction(oauth)
161
+ : oauth.mcp_oauth
162
+ ? generateClientSideRefreshFunction(oauth)
163
+ : generateProxiedRefreshFunction(oauth);
164
+ const lines = [
165
+ "#!/bin/bash",
166
+ `# Generated by mcptoskill — https://mcptoskill.com`,
167
+ `# Server: ${result.serverInfo.name} v${result.serverInfo.version}`,
168
+ `# URL: ${serverUrl}`,
169
+ `# OAuth: ${oauth.provider} (auto-refresh enabled)`,
170
+ "set -euo pipefail",
171
+ "",
172
+ `TOOL_NAME="\${1:?Usage: ${skillName}.sh <tool-name> '<json-args>'}"`,
173
+ `ARGS="\${2:-}"`,
174
+ `[ -z "$ARGS" ] && ARGS='{}'`,
175
+ `MCP_URL="${serverUrl}"`,
176
+ `TOKEN_FILE="${tokenFilePath}"`,
177
+ "",
178
+ "# --- Token management ---",
179
+ "",
180
+ "read_token() {",
181
+ " if [ ! -f \"$TOKEN_FILE\" ]; then",
182
+ ` echo "Error: token file not found at $TOKEN_FILE" >&2`,
183
+ ` echo "Re-run: npx @filiksyos/mcptoskill ${serverUrl}" >&2`,
184
+ " exit 1",
185
+ " fi",
186
+ " ACCESS_TOKEN=$(jq -r '.access_token' \"$TOKEN_FILE\")",
187
+ "}",
188
+ "",
189
+ "is_expired() {",
190
+ " local expires_at",
191
+ " expires_at=$(jq -r '.expires_at // 0' \"$TOKEN_FILE\")",
192
+ " if [ \"$expires_at\" = \"null\" ] || [ \"$expires_at\" = \"0\" ]; then",
193
+ " return 1",
194
+ " fi",
195
+ " local now",
196
+ " now=$(date +%s)",
197
+ " [ \"$now\" -ge \"$((expires_at - 60))\" ]",
198
+ "}",
199
+ "",
200
+ ...refreshFunction,
201
+ "",
202
+ "ensure_fresh_token() {",
203
+ " read_token",
204
+ " if is_expired; then",
205
+ " refresh_token_flow",
206
+ " read_token",
207
+ " fi",
208
+ "}",
209
+ "",
210
+ "ensure_fresh_token",
211
+ "",
212
+ "# --- MCP call ---",
213
+ "",
214
+ "AUTH_HEADER=\"Authorization: Bearer $ACCESS_TOKEN\"",
215
+ "",
216
+ "TEMP_HEADERS=$(mktemp)",
217
+ "curl -s -X POST \"$MCP_URL\" \\",
218
+ " -H \"Content-Type: application/json\" \\",
219
+ " -H \"Accept: application/json, text/event-stream\" \\",
220
+ " -H \"$AUTH_HEADER\" \\",
221
+ " -D \"$TEMP_HEADERS\" \\",
222
+ ` -d '${initBody}' > /dev/null`,
223
+ "",
224
+ "SESSION_ID=$(grep -i \"^mcp-session-id:\" \"$TEMP_HEADERS\" | awk '{print $2}' | tr -d '\\r' || true)",
225
+ "rm -f \"$TEMP_HEADERS\"",
226
+ "",
227
+ "if [ -n \"$SESSION_ID\" ]; then",
228
+ " RESPONSE=$(curl -s -X POST \"$MCP_URL\" \\",
229
+ " -H \"Content-Type: application/json\" \\",
230
+ " -H \"Accept: application/json, text/event-stream\" \\",
231
+ " -H \"$AUTH_HEADER\" \\",
232
+ " -H \"Mcp-Session-Id: $SESSION_ID\" \\",
233
+ ` -d "{\\"jsonrpc\\":\\"2.0\\",\\"id\\":1,\\"method\\":\\"tools/call\\",\\"params\\":{\\"name\\":\\"$TOOL_NAME\\",\\"arguments\\":$ARGS}}")`,
234
+ "else",
235
+ " RESPONSE=$(curl -s -X POST \"$MCP_URL\" \\",
236
+ " -H \"Content-Type: application/json\" \\",
237
+ " -H \"Accept: application/json, text/event-stream\" \\",
238
+ " -H \"$AUTH_HEADER\" \\",
239
+ ` -d "{\\"jsonrpc\\":\\"2.0\\",\\"id\\":1,\\"method\\":\\"tools/call\\",\\"params\\":{\\"name\\":\\"$TOOL_NAME\\",\\"arguments\\":$ARGS}}")`,
240
+ "fi",
241
+ "",
242
+ "# Handle SSE format (event: message / data: {...}) or plain JSON",
243
+ "if echo \"$RESPONSE\" | grep -q '^data: '; then",
244
+ " echo \"$RESPONSE\" | grep '^data: ' | tail -1 | sed 's/^data: //'",
245
+ "else",
246
+ " echo \"$RESPONSE\"",
247
+ "fi",
248
+ "",
249
+ ];
250
+ return lines.join("\n");
251
+ }
252
+ function generateClientSideRefreshFunction(oauth) {
253
+ const resourceParam = oauth.resource_url
254
+ ? `\n REFRESH_BODY="$REFRESH_BODY&resource=${encodeURIComponent(oauth.resource_url)}"`
255
+ : "";
256
+ return [
257
+ "refresh_token_flow() {",
258
+ " local rt token_endpoint client_id",
259
+ " rt=$(jq -r '.refresh_token // empty' \"$TOKEN_FILE\")",
260
+ " token_endpoint=$(jq -r '.token_endpoint // empty' \"$TOKEN_FILE\")",
261
+ " client_id=$(jq -r '.client_id // empty' \"$TOKEN_FILE\")",
262
+ "",
263
+ " if [ -z \"$rt\" ]; then",
264
+ ` echo "Error: no refresh token — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
265
+ " exit 1",
266
+ " fi",
267
+ "",
268
+ " REFRESH_BODY=\"grant_type=refresh_token&refresh_token=$rt&client_id=$client_id\"" +
269
+ resourceParam,
270
+ "",
271
+ " local resp",
272
+ " resp=$(curl -s -X POST \"$token_endpoint\" \\",
273
+ " -H \"Content-Type: application/x-www-form-urlencoded\" \\",
274
+ " -d \"$REFRESH_BODY\")",
275
+ "",
276
+ " local new_at",
277
+ " new_at=$(echo \"$resp\" | jq -r '.access_token // empty')",
278
+ " if [ -z \"$new_at\" ]; then",
279
+ ` echo "Error: token refresh failed — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
280
+ " echo \"$resp\" >&2",
281
+ " exit 1",
282
+ " fi",
283
+ "",
284
+ " local new_rt new_exp now new_expires_at",
285
+ " new_rt=$(echo \"$resp\" | jq -r '.refresh_token // empty')",
286
+ " new_exp=$(echo \"$resp\" | jq -r '.expires_in // 3600')",
287
+ " now=$(date +%s)",
288
+ " new_expires_at=$((now + new_exp))",
289
+ "",
290
+ " jq --arg at \"$new_at\" \\",
291
+ " --arg rt \"${new_rt:-$rt}\" \\",
292
+ " --argjson ea \"$new_expires_at\" \\",
293
+ " '.access_token=$at | .refresh_token=$rt | .expires_at=$ea' \\",
294
+ " \"$TOKEN_FILE\" > \"${TOKEN_FILE}.tmp\" && mv \"${TOKEN_FILE}.tmp\" \"$TOKEN_FILE\"",
295
+ " chmod 600 \"$TOKEN_FILE\"",
296
+ "}",
297
+ ];
298
+ }
299
+ function generateSupabaseRefreshFunction(oauth) {
300
+ return [
301
+ "refresh_token_flow() {",
302
+ " local rt token_endpoint client_id client_secret",
303
+ " rt=$(jq -r '.refresh_token // empty' \"$TOKEN_FILE\")",
304
+ " token_endpoint=$(jq -r '.token_endpoint // empty' \"$TOKEN_FILE\")",
305
+ " client_id=$(jq -r '.client_id // empty' \"$TOKEN_FILE\")",
306
+ " client_secret=$(jq -r '.client_secret // empty' \"$TOKEN_FILE\")",
307
+ "",
308
+ " if [ -z \"$rt\" ]; then",
309
+ ` echo "Error: no refresh token — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
310
+ " exit 1",
311
+ " fi",
312
+ "",
313
+ " if [ -z \"$client_secret\" ]; then",
314
+ ` echo "Error: token file missing client_secret — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
315
+ " exit 1",
316
+ " fi",
317
+ "",
318
+ " local resp",
319
+ " resp=$(curl -s -X POST \"$token_endpoint\" \\",
320
+ " -H \"Content-Type: application/x-www-form-urlencoded\" \\",
321
+ " -u \"$client_id:$client_secret\" \\",
322
+ " -d \"grant_type=refresh_token&refresh_token=$rt\")",
323
+ "",
324
+ " local new_at",
325
+ " new_at=$(echo \"$resp\" | jq -r '.access_token // empty')",
326
+ " if [ -z \"$new_at\" ]; then",
327
+ ` echo "Error: token refresh failed — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
328
+ " echo \"$resp\" >&2",
329
+ " exit 1",
330
+ " fi",
331
+ "",
332
+ " local new_rt new_exp now new_expires_at",
333
+ " new_rt=$(echo \"$resp\" | jq -r '.refresh_token // empty')",
334
+ " new_exp=$(echo \"$resp\" | jq -r '.expires_in // 3600')",
335
+ " now=$(date +%s)",
336
+ " new_expires_at=$((now + new_exp))",
337
+ "",
338
+ " jq --arg at \"$new_at\" \\",
339
+ " --arg rt \"${new_rt:-$rt}\" \\",
340
+ " --argjson ea \"$new_expires_at\" \\",
341
+ " '.access_token=$at | .refresh_token=$rt | .expires_at=$ea' \\",
342
+ " \"$TOKEN_FILE\" > \"${TOKEN_FILE}.tmp\" && mv \"${TOKEN_FILE}.tmp\" \"$TOKEN_FILE\"",
343
+ " chmod 600 \"$TOKEN_FILE\"",
344
+ "}",
345
+ ];
346
+ }
347
+ function generateProxiedRefreshFunction(oauth) {
348
+ return [
349
+ "refresh_token_flow() {",
350
+ " local rt",
351
+ " rt=$(jq -r '.refresh_token // empty' \"$TOKEN_FILE\")",
352
+ "",
353
+ " if [ -z \"$rt\" ]; then",
354
+ ` echo "Error: no refresh token — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
355
+ " exit 1",
356
+ " fi",
357
+ "",
358
+ " local resp",
359
+ ` resp=$(curl -s -X POST "https://mcptoskill.com/api/refresh/${oauth.provider}" \\`,
360
+ " -H \"Content-Type: application/json\" \\",
361
+ " -d \"{\\\"refresh_token\\\":\\\"$rt\\\"}\") ",
362
+ "",
363
+ " local new_at",
364
+ " new_at=$(echo \"$resp\" | jq -r '.access_token // empty')",
365
+ " if [ -z \"$new_at\" ]; then",
366
+ ` echo "Error: token refresh failed — re-run: npx @filiksyos/mcptoskill ${oauth.mcp_url}" >&2`,
367
+ " echo \"$resp\" >&2",
368
+ " exit 1",
369
+ " fi",
370
+ "",
371
+ " local new_rt new_exp now new_expires_at",
372
+ " new_rt=$(echo \"$resp\" | jq -r '.refresh_token // empty')",
373
+ " new_exp=$(echo \"$resp\" | jq -r '.expires_in // 3600')",
374
+ " now=$(date +%s)",
375
+ " new_expires_at=$((now + new_exp))",
376
+ "",
377
+ " jq --arg at \"$new_at\" \\",
378
+ " --arg rt \"${new_rt:-$rt}\" \\",
379
+ " --argjson ea \"$new_expires_at\" \\",
380
+ " '.access_token=$at | .refresh_token=$rt | .expires_at=$ea' \\",
381
+ " \"$TOKEN_FILE\" > \"${TOKEN_FILE}.tmp\" && mv \"${TOKEN_FILE}.tmp\" \"$TOKEN_FILE\"",
382
+ " chmod 600 \"$TOKEN_FILE\"",
383
+ "}",
384
+ ];
385
+ }
386
+ export function generate(result, nameOverride, oauth) {
145
387
  const skillName = nameOverride ?? slugify(result.serverInfo.name);
146
388
  return {
147
389
  skillName,
148
390
  skillMd: generateSkillMd(result, skillName),
149
- shellScript: generateShellScript(result, skillName),
391
+ shellScript: oauth
392
+ ? generateOAuthShellScript(result, skillName, oauth)
393
+ : generateStaticShellScript(result, skillName),
150
394
  };
151
395
  }
152
396
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,9 +5,12 @@ import { homedir } from "node:os";
5
5
  import { existsSync } from "node:fs";
6
6
  import { connectAndDiscover } from "./client.js";
7
7
  import { generate } from "./generator.js";
8
+ import { getProviderByMcpUrl } from "./providers.js";
9
+ import { runLocalOAuth } from "./oauth.js";
8
10
  const OPENCLAW_DIR = join(homedir(), ".openclaw");
9
11
  const OPENCLAW_SKILLS_DIR = join(OPENCLAW_DIR, "skills");
10
12
  const OPENCLAW_CONFIG = join(OPENCLAW_DIR, "openclaw.json");
13
+ const MCPTOSKILL_TOKENS_DIR = join(OPENCLAW_DIR, "mcptoskill", "tokens");
11
14
  function parseArgs(argv) {
12
15
  const args = argv.slice(2);
13
16
  const url = args.find((a) => !a.startsWith("--"));
@@ -37,9 +40,11 @@ function parseArgs(argv) {
37
40
  console.error("");
38
41
  console.error("Examples:");
39
42
  console.error(" mcptoskill https://mcp.context7.com/mcp");
43
+ console.error(" mcptoskill https://mcp.notion.com/mcp # local OAuth, follow prompts");
40
44
  console.error(" mcptoskill https://mcp.context7.com/mcp --name=context7 --out=./skills");
41
45
  console.error(" mcptoskill https://mcp.supabase.com/mcp?project_ref=XXX --header \"Authorization: Bearer sbp_xxx\"");
42
46
  console.error("");
47
+ console.error("OAuth (Notion, PostHog, Supabase): run without --header; CLI will prompt for local OAuth.");
43
48
  console.error("Also installs local ./scripts/<skill-name>.sh for integrations.");
44
49
  process.exit(1);
45
50
  }
@@ -83,9 +88,35 @@ async function updateOpenClawConfig(skillName) {
83
88
  config.skills = skills;
84
89
  await writeFile(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + "\n", "utf8");
85
90
  }
91
+ async function saveTokenFile(skillName, data) {
92
+ await mkdir(MCPTOSKILL_TOKENS_DIR, { recursive: true });
93
+ const tokenFilePath = join(MCPTOSKILL_TOKENS_DIR, `${skillName}.json`);
94
+ const now = Math.floor(Date.now() / 1000);
95
+ const tokenData = {
96
+ access_token: data.access_token,
97
+ refresh_token: data.refresh_token,
98
+ expires_at: data.expires_in ? now + data.expires_in : null,
99
+ token_endpoint: data.token_endpoint,
100
+ client_id: data.client_id,
101
+ mcp_oauth: data.mcp_oauth,
102
+ token_encoding: data.token_encoding,
103
+ resource_url: data.resource_url,
104
+ provider: data.provider,
105
+ mcp_url: data.mcp_url,
106
+ };
107
+ if (data.client_secret) {
108
+ tokenData.client_secret = data.client_secret;
109
+ }
110
+ await writeFile(tokenFilePath, JSON.stringify(tokenData, null, 2) + "\n", "utf8");
111
+ await chmod(tokenFilePath, 0o600);
112
+ return tokenFilePath;
113
+ }
86
114
  async function main() {
87
115
  const { url, name, outDir, headers, skillKey } = parseArgs(process.argv);
116
+ let oauthTokenInfo;
117
+ let tokenFilePath;
88
118
  if (skillKey) {
119
+ console.warn("--skill-key is deprecated. Use local OAuth instead (no flag needed).");
89
120
  const controller = new AbortController();
90
121
  const timeout = setTimeout(() => controller.abort(), 5000);
91
122
  try {
@@ -98,6 +129,20 @@ async function main() {
98
129
  }
99
130
  const data = (await res.json());
100
131
  headers["Authorization"] = `Bearer ${data.access_token}`;
132
+ if (data.refresh_token) {
133
+ oauthTokenInfo = {
134
+ access_token: data.access_token,
135
+ refresh_token: data.refresh_token,
136
+ expires_in: data.expires_in,
137
+ token_endpoint: data.token_endpoint ?? "",
138
+ client_id: data.client_id ?? "",
139
+ mcp_oauth: data.mcp_oauth ?? false,
140
+ token_encoding: data.token_encoding ?? "none",
141
+ resource_url: data.resource_url ?? null,
142
+ provider: data.provider,
143
+ mcp_url: data.mcp_url,
144
+ };
145
+ }
101
146
  }
102
147
  catch {
103
148
  console.error("Error: skill key not found — visit mcptoskill.com to reconnect");
@@ -107,42 +152,96 @@ async function main() {
107
152
  clearTimeout(timeout);
108
153
  }
109
154
  }
155
+ let skillNameOverride;
156
+ if (!skillKey && Object.keys(headers).length === 0) {
157
+ const provider = getProviderByMcpUrl(url);
158
+ if (provider) {
159
+ const oauthSkillName = name ?? `${provider.id}-mcp`;
160
+ const oauthData = await runLocalOAuth(provider.id, oauthSkillName, url);
161
+ headers["Authorization"] = `Bearer ${oauthData.access_token}`;
162
+ tokenFilePath = await saveTokenFile(oauthSkillName, oauthData);
163
+ skillNameOverride = oauthSkillName;
164
+ oauthTokenInfo = {
165
+ access_token: oauthData.access_token,
166
+ refresh_token: oauthData.refresh_token ?? "",
167
+ expires_in: oauthData.expires_in,
168
+ token_endpoint: oauthData.token_endpoint ?? "",
169
+ client_id: oauthData.client_id ?? "",
170
+ mcp_oauth: oauthData.mcp_oauth,
171
+ token_encoding: oauthData.token_encoding,
172
+ resource_url: oauthData.resource_url,
173
+ provider: oauthData.provider,
174
+ mcp_url: oauthData.mcp_url,
175
+ tokenFilePath,
176
+ ...(oauthData.client_secret && { client_secret: oauthData.client_secret }),
177
+ };
178
+ console.log(`✓ Token saved: ${tokenFilePath}`);
179
+ }
180
+ }
110
181
  console.log(`Connecting to ${url} ...`);
111
182
  const result = await connectAndDiscover(url, headers);
112
183
  console.log(`Found: ${result.serverInfo.name} v${result.serverInfo.version} — ${result.tools.length} tool(s)`);
113
184
  for (const t of result.tools) {
114
185
  console.log(` • ${t.name}: ${t.description.slice(0, 80)}${t.description.length > 80 ? "…" : ""}`);
115
186
  }
116
- const { skillName, skillMd, shellScript } = generate(result, name);
117
- const skillDir = join(outDir, skillName);
187
+ // Prefer explicit --name; fallback to known-URL mapping (many hosted MCPs return generic names like "MCP TypeScript Server on Vercel")
188
+ const knownNames = {
189
+ "mcp.exa.ai": "exa",
190
+ "exa.ai": "exa",
191
+ };
192
+ const host = (() => {
193
+ try {
194
+ return new URL(url).hostname.toLowerCase();
195
+ }
196
+ catch {
197
+ return "";
198
+ }
199
+ })();
200
+ const slug = result.serverInfo.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
201
+ const skillName = skillNameOverride ?? name ?? (knownNames[host] ?? (host.endsWith(".exa.ai") ? "exa" : slug));
202
+ if (oauthTokenInfo && !tokenFilePath) {
203
+ tokenFilePath = await saveTokenFile(skillName, {
204
+ ...oauthTokenInfo,
205
+ workspace_name: null,
206
+ });
207
+ console.log(`✓ Token saved: ${tokenFilePath}`);
208
+ }
209
+ const { skillName: finalSkillName, skillMd, shellScript } = generate(result, skillName, oauthTokenInfo ? { ...oauthTokenInfo, tokenFilePath: tokenFilePath } : undefined);
210
+ const skillDir = join(outDir, finalSkillName);
118
211
  const scriptsDir = join(skillDir, "scripts");
119
212
  await mkdir(scriptsDir, { recursive: true });
120
213
  const skillMdPath = join(skillDir, "SKILL.md");
121
- const scriptPath = join(scriptsDir, `${skillName}.sh`);
214
+ const scriptPath = join(scriptsDir, `${finalSkillName}.sh`);
122
215
  await writeFile(skillMdPath, skillMd, "utf8");
123
216
  await writeFile(scriptPath, shellScript, "utf8");
124
217
  await chmod(scriptPath, 0o755);
125
218
  const localScriptsDir = join(process.cwd(), "scripts");
126
219
  await mkdir(localScriptsDir, { recursive: true });
127
- const localScriptPath = join(localScriptsDir, `${skillName}.sh`);
220
+ const localScriptPath = join(localScriptsDir, `${finalSkillName}.sh`);
128
221
  await copyFile(scriptPath, localScriptPath);
129
222
  await chmod(localScriptPath, 0o755);
130
223
  console.log(`✓ Copied to local workspace: ${localScriptPath}`);
131
224
  const isOpenClawInstall = resolve(outDir) === resolve(OPENCLAW_SKILLS_DIR);
132
225
  if (isOpenClawInstall) {
133
- await updateOpenClawConfig(skillName);
226
+ await updateOpenClawConfig(finalSkillName);
134
227
  console.log("");
135
- console.log(`✓ Skill installed: ${skillName}`);
228
+ console.log(`✓ Skill installed: ${finalSkillName}`);
136
229
  console.log(` ${skillDir}/`);
230
+ if (oauthTokenInfo) {
231
+ console.log(` Token auto-refresh enabled (${oauthTokenInfo.provider})`);
232
+ }
137
233
  console.log("");
138
234
  console.log("Restart OpenClaw (or wait for auto-reload), then try:");
139
235
  console.log(` "use ${result.serverInfo.name} to ${result.tools[0]?.name?.replace(/-/g, " ") ?? "run a tool"}"`);
140
236
  }
141
237
  else {
142
238
  console.log("");
143
- console.log(`Generated skill: ${skillName}`);
239
+ console.log(`Generated skill: ${finalSkillName}`);
144
240
  console.log(` ${skillMdPath}`);
145
241
  console.log(` ${scriptPath}`);
242
+ if (oauthTokenInfo) {
243
+ console.log(` Token auto-refresh enabled (${oauthTokenInfo.provider})`);
244
+ }
146
245
  console.log("");
147
246
  console.log("To install in OpenClaw:");
148
247
  console.log(` cp -r ${skillDir} ${OPENCLAW_SKILLS_DIR}/`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface SkillKeyResponse {
2
+ access_token: string;
3
+ refresh_token: string | null;
4
+ expires_in: number | null;
5
+ token_endpoint: string | null;
6
+ client_id: string | null;
7
+ client_secret?: string;
8
+ mcp_url: string;
9
+ provider: string;
10
+ mcp_oauth: boolean;
11
+ token_encoding: "basic" | "none";
12
+ resource_url: string | null;
13
+ workspace_name: string | null;
14
+ }
15
+ export declare function runLocalOAuth(providerId: string, skillName: string, mcpUrl: string): Promise<SkillKeyResponse>;
16
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AA8FD,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CA8L3B"}
package/dist/oauth.js ADDED
@@ -0,0 +1,240 @@
1
+ import { mkdir, writeFile, readFile, unlink } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { createInterface } from "node:readline";
5
+ import { getProvider } from "./providers.js";
6
+ const REDIRECT_URI = "http://localhost:3000/callback";
7
+ const STATE_TTL_MS = 10 * 60 * 1000; // 10 minutes
8
+ const OAUTH_STATE_PATH = join(homedir(), ".openclaw", "mcptoskill", "oauth-state.json");
9
+ function base64UrlEncode(buf) {
10
+ return Buffer.from(buf)
11
+ .toString("base64")
12
+ .replace(/\+/g, "-")
13
+ .replace(/\//g, "_")
14
+ .replace(/=/g, "");
15
+ }
16
+ function generateCodeVerifier() {
17
+ const bytes = new Uint8Array(32);
18
+ globalThis.crypto.getRandomValues(bytes);
19
+ return base64UrlEncode(bytes);
20
+ }
21
+ async function generateCodeChallenge(verifier) {
22
+ const enc = new TextEncoder();
23
+ const hash = await globalThis.crypto.subtle.digest("SHA-256", enc.encode(verifier));
24
+ return base64UrlEncode(new Uint8Array(hash));
25
+ }
26
+ async function registerMcpClient(registrationEndpoint, redirectUri) {
27
+ const res = await fetch(registrationEndpoint, {
28
+ method: "POST",
29
+ headers: {
30
+ "Content-Type": "application/json",
31
+ Accept: "application/json",
32
+ },
33
+ body: JSON.stringify({
34
+ client_name: "mcptoskill",
35
+ client_uri: "https://mcptoskill.com",
36
+ redirect_uris: [redirectUri],
37
+ grant_types: ["authorization_code", "refresh_token"],
38
+ response_types: ["code"],
39
+ token_endpoint_auth_method: "none",
40
+ }),
41
+ });
42
+ if (!res.ok) {
43
+ const body = await res.text();
44
+ throw new Error(`Client registration failed: ${res.status} ${body}`);
45
+ }
46
+ const data = (await res.json());
47
+ return data;
48
+ }
49
+ async function loadState() {
50
+ try {
51
+ const raw = await readFile(OAUTH_STATE_PATH, "utf8");
52
+ const state = JSON.parse(raw);
53
+ const age = Date.now() - state.created_at;
54
+ if (age > STATE_TTL_MS) {
55
+ await unlink(OAUTH_STATE_PATH).catch(() => { });
56
+ return null;
57
+ }
58
+ return state;
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ async function saveState(state) {
65
+ await mkdir(join(homedir(), ".openclaw", "mcptoskill"), { recursive: true });
66
+ await writeFile(OAUTH_STATE_PATH, JSON.stringify(state, null, 2) + "\n", "utf8");
67
+ }
68
+ async function deleteState() {
69
+ await unlink(OAUTH_STATE_PATH).catch(() => { });
70
+ }
71
+ function promptForUrl() {
72
+ return new Promise((resolve) => {
73
+ const rl = createInterface({ input: process.stdin });
74
+ rl.question("", (answer) => {
75
+ rl.close();
76
+ resolve(answer.trim());
77
+ });
78
+ });
79
+ }
80
+ export async function runLocalOAuth(providerId, skillName, mcpUrl) {
81
+ const provider = getProvider(providerId);
82
+ if (!provider) {
83
+ throw new Error(`Unknown provider: ${providerId}`);
84
+ }
85
+ const state = globalThis.crypto.randomUUID();
86
+ const codeVerifier = generateCodeVerifier();
87
+ const codeChallenge = await generateCodeChallenge(codeVerifier);
88
+ let authUrl;
89
+ let tokenEndpoint;
90
+ let clientId;
91
+ let clientSecret;
92
+ if (provider.mcpOAuth && provider.discoveryUrl) {
93
+ const metaRes = await fetch(provider.discoveryUrl);
94
+ if (!metaRes.ok) {
95
+ const body = await metaRes.text();
96
+ throw new Error(`OAuth discovery failed: ${metaRes.status} for ${provider.discoveryUrl} - ${body.slice(0, 200)}`);
97
+ }
98
+ const meta = (await metaRes.json());
99
+ if (!meta.registration_endpoint) {
100
+ throw new Error("OAuth discovery missing registration_endpoint");
101
+ }
102
+ const client = await registerMcpClient(meta.registration_endpoint, REDIRECT_URI);
103
+ clientId = client.client_id;
104
+ clientSecret = client.client_secret;
105
+ tokenEndpoint = meta.token_endpoint;
106
+ const params = new URLSearchParams({
107
+ response_type: "code",
108
+ client_id: clientId,
109
+ redirect_uri: REDIRECT_URI,
110
+ state,
111
+ code_challenge: codeChallenge,
112
+ code_challenge_method: "S256",
113
+ });
114
+ if (provider.resourceUrl) {
115
+ params.set("resource", provider.resourceUrl);
116
+ }
117
+ authUrl = meta.authorization_endpoint + "?" + params.toString();
118
+ await saveState({
119
+ state,
120
+ code_verifier: codeVerifier,
121
+ provider: providerId,
122
+ client_id: clientId,
123
+ client_secret: clientSecret,
124
+ token_endpoint: tokenEndpoint,
125
+ resource_url: provider.resourceUrl,
126
+ created_at: Date.now(),
127
+ });
128
+ }
129
+ else {
130
+ clientId = process.env[provider.clientIdEnv] ?? "";
131
+ clientSecret = process.env[provider.clientSecretEnv] ?? "";
132
+ tokenEndpoint = provider.tokenUrl;
133
+ const params = new URLSearchParams({
134
+ client_id: clientId,
135
+ redirect_uri: REDIRECT_URI,
136
+ response_type: "code",
137
+ state,
138
+ code_challenge: codeChallenge,
139
+ code_challenge_method: "S256",
140
+ });
141
+ if (provider.scopes.length > 0) {
142
+ params.set("scope", provider.scopes.join(" "));
143
+ }
144
+ authUrl = provider.authUrl + "?" + params.toString();
145
+ await saveState({
146
+ state,
147
+ code_verifier: codeVerifier,
148
+ provider: providerId,
149
+ client_secret: clientSecret,
150
+ created_at: Date.now(),
151
+ });
152
+ }
153
+ console.log("");
154
+ console.log("Open this URL in your browser:");
155
+ console.log(authUrl);
156
+ console.log("");
157
+ console.log("After completing OAuth, copy the URL from your browser's address bar and paste it here:");
158
+ const pasted = await promptForUrl();
159
+ if (!pasted) {
160
+ await deleteState();
161
+ throw new Error("No URL pasted. OAuth cancelled.");
162
+ }
163
+ let parsedUrl;
164
+ try {
165
+ parsedUrl = new URL(pasted);
166
+ }
167
+ catch {
168
+ await deleteState();
169
+ throw new Error("Invalid URL pasted. Please paste the full redirect URL.");
170
+ }
171
+ const code = parsedUrl.searchParams.get("code");
172
+ const returnedState = parsedUrl.searchParams.get("state");
173
+ if (!code || !returnedState) {
174
+ await deleteState();
175
+ throw new Error("URL missing code or state. Please paste the full redirect URL from your browser.");
176
+ }
177
+ const storedState = await loadState();
178
+ if (!storedState || storedState.state !== returnedState) {
179
+ await deleteState();
180
+ throw new Error("Invalid or expired state. Please run the command again and complete OAuth within 10 minutes.");
181
+ }
182
+ const tokenUrl = storedState.token_endpoint ?? tokenEndpoint;
183
+ const headers = {
184
+ "Content-Type": "application/x-www-form-urlencoded",
185
+ };
186
+ const tokenBody = new URLSearchParams({
187
+ grant_type: "authorization_code",
188
+ code,
189
+ redirect_uri: REDIRECT_URI,
190
+ client_id: storedState.client_id ?? clientId,
191
+ code_verifier: storedState.code_verifier,
192
+ });
193
+ if (storedState.resource_url) {
194
+ tokenBody.set("resource", storedState.resource_url);
195
+ }
196
+ if (storedState.client_secret) {
197
+ headers["Authorization"] =
198
+ "Basic " + Buffer.from(`${clientId}:${storedState.client_secret}`).toString("base64");
199
+ }
200
+ const tokenRes = await fetch(tokenUrl, {
201
+ method: "POST",
202
+ headers,
203
+ body: tokenBody.toString(),
204
+ });
205
+ await deleteState();
206
+ if (!tokenRes.ok) {
207
+ const errBody = await tokenRes.text();
208
+ throw new Error(`Token exchange failed: ${tokenRes.status} ${errBody.slice(0, 300)}`);
209
+ }
210
+ const tokenData = (await tokenRes.json());
211
+ const access_token = tokenData[provider.tokenField];
212
+ if (!access_token || typeof access_token !== "string") {
213
+ throw new Error("Token exchange: missing access_token in response");
214
+ }
215
+ const refresh_token = typeof tokenData.refresh_token === "string" ? tokenData.refresh_token : null;
216
+ const expires_in = typeof tokenData.expires_in === "number" ? tokenData.expires_in : null;
217
+ let workspace_name = null;
218
+ if (provider.workspaceNameField) {
219
+ const val = tokenData[provider.workspaceNameField];
220
+ workspace_name = typeof val === "string" ? val : null;
221
+ }
222
+ const result = {
223
+ access_token,
224
+ refresh_token,
225
+ expires_in,
226
+ token_endpoint: tokenUrl,
227
+ client_id: clientId,
228
+ mcp_url: provider.mcpUrl,
229
+ provider: providerId,
230
+ mcp_oauth: !!provider.mcpOAuth,
231
+ token_encoding: provider.tokenEncoding,
232
+ resource_url: provider.resourceUrl ?? null,
233
+ workspace_name,
234
+ };
235
+ if (clientSecret) {
236
+ result.client_secret = clientSecret;
237
+ }
238
+ return result;
239
+ }
240
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface Provider {
2
+ id: string;
3
+ name: string;
4
+ authUrl: string;
5
+ tokenUrl: string;
6
+ scopes: string[];
7
+ mcpUrl: string;
8
+ clientIdEnv: string;
9
+ clientSecretEnv: string;
10
+ tokenField: string;
11
+ workspaceNameField: string | null;
12
+ tokenEncoding: "basic" | "none";
13
+ /** Use MCP server's own OAuth (PKCE + dynamic registration) instead of provider API OAuth */
14
+ mcpOAuth?: boolean;
15
+ /** OIDC/OAuth discovery URL for mcpOAuth providers */
16
+ discoveryUrl?: string;
17
+ /** RFC 8707 resource URL for audience-bound tokens */
18
+ resourceUrl?: string;
19
+ /** Use PKCE for standard OAuth (required by api.supabase.com) */
20
+ requiresPkce?: boolean;
21
+ }
22
+ export declare const PROVIDERS: Provider[];
23
+ export declare function getProvider(id: string): Provider | undefined;
24
+ export declare function getProviderByMcpUrl(url: string): Provider | undefined;
25
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EA+C/B,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAWrE"}
@@ -0,0 +1,65 @@
1
+ export const PROVIDERS = [
2
+ {
3
+ id: "notion",
4
+ name: "Notion",
5
+ authUrl: "https://mcp.notion.com/authorize",
6
+ tokenUrl: "https://mcp.notion.com/token",
7
+ scopes: [],
8
+ mcpUrl: "https://mcp.notion.com/mcp",
9
+ clientIdEnv: "",
10
+ clientSecretEnv: "",
11
+ tokenField: "access_token",
12
+ workspaceNameField: "workspace_name",
13
+ tokenEncoding: "none",
14
+ mcpOAuth: true,
15
+ discoveryUrl: "https://mcp.notion.com/.well-known/oauth-authorization-server",
16
+ },
17
+ {
18
+ id: "supabase",
19
+ name: "Supabase",
20
+ authUrl: "https://api.supabase.com/v1/oauth/authorize",
21
+ tokenUrl: "https://api.supabase.com/v1/oauth/token",
22
+ scopes: [],
23
+ mcpUrl: "https://mcp.supabase.com/mcp",
24
+ clientIdEnv: "",
25
+ clientSecretEnv: "",
26
+ tokenField: "access_token",
27
+ workspaceNameField: null,
28
+ tokenEncoding: "basic",
29
+ mcpOAuth: true,
30
+ discoveryUrl: "https://api.supabase.com/.well-known/oauth-authorization-server",
31
+ },
32
+ {
33
+ id: "posthog",
34
+ name: "PostHog",
35
+ authUrl: "https://us.posthog.com/oauth/authorize/",
36
+ tokenUrl: "https://us.posthog.com/oauth/token/",
37
+ scopes: [],
38
+ mcpUrl: "https://mcp.posthog.com/mcp",
39
+ clientIdEnv: "",
40
+ clientSecretEnv: "",
41
+ tokenField: "access_token",
42
+ workspaceNameField: null,
43
+ tokenEncoding: "none",
44
+ mcpOAuth: true,
45
+ discoveryUrl: "https://us.posthog.com/.well-known/oauth-authorization-server",
46
+ resourceUrl: "https://mcp.posthog.com",
47
+ },
48
+ ];
49
+ export function getProvider(id) {
50
+ return PROVIDERS.find((p) => p.id === id);
51
+ }
52
+ export function getProviderByMcpUrl(url) {
53
+ try {
54
+ const parsed = new URL(url);
55
+ const urlBase = parsed.origin + parsed.pathname;
56
+ return PROVIDERS.find((p) => {
57
+ const providerBase = new URL(p.mcpUrl).origin + new URL(p.mcpUrl).pathname;
58
+ return urlBase === providerBase;
59
+ });
60
+ }
61
+ catch {
62
+ return undefined;
63
+ }
64
+ }
65
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EAAE,8BAA8B;QACxC,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,4BAA4B;QACpC,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,cAAc;QAC1B,kBAAkB,EAAE,gBAAgB;QACpC,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,+DAA+D;KAC9E;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,6CAA6C;QACtD,QAAQ,EAAE,yCAAyC;QACnD,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,8BAA8B;QACtC,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,cAAc;QAC1B,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,iEAAiE;KAChF;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,yCAAyC;QAClD,QAAQ,EAAE,qCAAqC;QAC/C,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,6BAA6B;QACrC,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,cAAc;QAC1B,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,+DAA+D;QAC7E,WAAW,EAAE,yBAAyB;KACvC;CACF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YAC3E,OAAO,OAAO,KAAK,YAAY,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filiksyos/mcptoskill",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Turn any MCP server into an OpenClaw skill",
5
5
  "type": "module",
6
6
  "bin": {