substack-article-mcp 0.5.1 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAkGD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgB7B;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CA0B9B;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,EAAE,CAAC,CAE5B;AAID,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAiB1D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,31 +1,35 @@
1
1
  import { load } from "cheerio";
2
- import { getCookieHeaders, loadAuth } from "./auth.js";
3
- /**
4
- * Resolve which subdomain to use. Priority:
5
- * 1. Explicit subdomain passed per-request (e.g. "platformer" to read someone else's newsletter)
6
- * 2. SUBSTACK_SUBDOMAIN env var
7
- * 3. Subdomain stored during login (your own newsletter)
8
- */
2
+ import { getCookieHeaders, getAuthGuidance, isAuthenticated, loadAuth } from "./auth.js";
3
+ const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36";
9
4
  function resolveBaseUrl(subdomain) {
10
5
  const resolved = subdomain ||
11
6
  process.env["SUBSTACK_SUBDOMAIN"] ||
12
7
  loadAuth()?.subdomain;
13
8
  if (!resolved) {
14
- throw new Error("No subdomain specified. Either pass a subdomain parameter, or run `substack-article-mcp login` to set a default.");
9
+ throw new Error("No subdomain specified. Pass a subdomain parameter, set the SUBSTACK_SUBDOMAIN env var, or log in to set a default.");
15
10
  }
16
11
  return `https://${resolved}.substack.com`;
17
12
  }
13
+ /**
14
+ * Make an authenticated (or unauthenticated) GET request to a Substack API endpoint.
15
+ * Works without cookies for public content; includes cookies when available.
16
+ */
18
17
  async function apiGet(endpoint, subdomain) {
19
18
  const url = `${resolveBaseUrl(subdomain)}${endpoint}`;
20
- const headers = getCookieHeaders();
21
- const res = await fetch(url, {
22
- headers: {
23
- ...headers,
24
- Accept: "application/json",
25
- },
26
- });
19
+ const cookies = getCookieHeaders();
20
+ const headers = {
21
+ Accept: "application/json",
22
+ "User-Agent": USER_AGENT,
23
+ };
24
+ if (cookies) {
25
+ headers["Cookie"] = cookies["Cookie"];
26
+ }
27
+ const res = await fetch(url, { headers });
27
28
  if (res.status === 401 || res.status === 403) {
28
- throw new Error("Authentication failed. Your cookie may have expired. Run `substack-article-mcp login` to re-authenticate.");
29
+ if (!isAuthenticated()) {
30
+ throw new Error(`This content requires authentication. ${getAuthGuidance()}`);
31
+ }
32
+ throw new Error(`Authentication failed (cookie may have expired). ${getAuthGuidance()}`);
29
33
  }
30
34
  if (!res.ok) {
31
35
  const text = await res.text();
@@ -33,16 +37,17 @@ async function apiGet(endpoint, subdomain) {
33
37
  }
34
38
  return res.json();
35
39
  }
36
- /** Fetch article HTML page with auth and extract post body (fallback when API returns truncated paid content). */
37
40
  async function fetchArticleBodyFromPage(slug, subdomain) {
38
41
  const baseUrl = resolveBaseUrl(subdomain);
39
- const headers = getCookieHeaders();
40
- const res = await fetch(`${baseUrl}/p/${slug}`, {
41
- headers: {
42
- ...headers,
43
- Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
44
- },
45
- });
42
+ const cookies = getCookieHeaders();
43
+ const headers = {
44
+ Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
45
+ "User-Agent": USER_AGENT,
46
+ };
47
+ if (cookies) {
48
+ headers["Cookie"] = cookies["Cookie"];
49
+ }
50
+ const res = await fetch(`${baseUrl}/p/${slug}`, { headers });
46
51
  if (!res.ok)
47
52
  return "";
48
53
  const html = await res.text();
@@ -96,8 +101,43 @@ export async function listArticles(options) {
96
101
  const data = (await apiGet(`/api/v1/archive?${params}`, subdomain));
97
102
  return data.map(normalizePost);
98
103
  }
104
+ function isNumericId(slugOrId) {
105
+ return /^\d+$/.test(slugOrId);
106
+ }
107
+ async function fetchPostById(id) {
108
+ const cookies = getCookieHeaders();
109
+ const headers = {
110
+ Accept: "application/json",
111
+ "User-Agent": USER_AGENT,
112
+ };
113
+ if (cookies) {
114
+ headers["Cookie"] = cookies["Cookie"];
115
+ }
116
+ const res = await fetch(`https://substack.com/api/v1/posts/by-id/${id}`, { headers });
117
+ if (res.status === 401 || res.status === 403) {
118
+ throw new Error(`Authentication failed. ${getAuthGuidance()}`);
119
+ }
120
+ if (!res.ok) {
121
+ const text = await res.text();
122
+ throw new Error(`Substack API error ${res.status}: ${text}`);
123
+ }
124
+ const json = (await res.json());
125
+ const post = json["post"];
126
+ const pub = json["publication"];
127
+ return { post, subdomain: pub?.["subdomain"] };
128
+ }
99
129
  export async function getArticle(slugOrId, subdomain) {
100
- const raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
130
+ let raw;
131
+ let resolvedSubdomain = subdomain;
132
+ if (isNumericId(slugOrId)) {
133
+ const result = await fetchPostById(slugOrId);
134
+ raw = result.post;
135
+ if (!resolvedSubdomain)
136
+ resolvedSubdomain = result.subdomain;
137
+ }
138
+ else {
139
+ raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
140
+ }
101
141
  let bodyHtml = raw["body_html"] || "";
102
142
  const truncatedBodyText = raw["truncated_body_text"];
103
143
  const wordCount = raw["wordcount"];
@@ -107,9 +147,16 @@ export async function getArticle(slugOrId, subdomain) {
107
147
  (truncatedBodyText != null && truncatedBodyText.length > 0) ||
108
148
  (wordCount != null && wordCount > 200 && bodyHtml.length < wordCount * 5);
109
149
  if (isPaid && likelyTruncated) {
110
- const fromPage = await fetchArticleBodyFromPage(slug, subdomain);
111
- if (fromPage.length > bodyHtml.length)
112
- bodyHtml = fromPage;
150
+ if (isAuthenticated()) {
151
+ const fromPage = await fetchArticleBodyFromPage(slug, resolvedSubdomain);
152
+ if (fromPage.length > bodyHtml.length)
153
+ bodyHtml = fromPage;
154
+ }
155
+ if (!bodyHtml || bodyHtml.length < 200) {
156
+ bodyHtml = (bodyHtml || "") +
157
+ "\n\n<!-- This is a paid article. The content above may be truncated. " +
158
+ "Log in with a Substack account that has an active subscription to access the full article. -->";
159
+ }
113
160
  }
114
161
  return {
115
162
  ...normalizePost(raw),
@@ -132,25 +179,187 @@ function normalizeComment(raw) {
132
179
  children: Array.isArray(childrenRaw) ? childrenRaw.map(normalizeComment) : [],
133
180
  };
134
181
  }
135
- /**
136
- * Fetch full comment tree for an article.
137
- * The slug is resolved to a post ID first via the article detail endpoint.
138
- */
139
182
  export async function getComments(slugOrId, subdomain) {
140
- // Resolve slug → post ID
141
- const raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
142
- const postId = raw["id"];
143
- if (!postId)
144
- throw new Error(`Could not resolve post ID for "${slugOrId}"`);
183
+ let postId;
184
+ let resolvedSubdomain = subdomain;
185
+ if (isNumericId(slugOrId)) {
186
+ postId = Number(slugOrId);
187
+ if (!resolvedSubdomain) {
188
+ const result = await fetchPostById(slugOrId);
189
+ resolvedSubdomain = result.subdomain;
190
+ }
191
+ }
192
+ else {
193
+ const raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
194
+ postId = raw["id"];
195
+ if (!postId)
196
+ throw new Error(`Could not resolve post ID for "${slugOrId}"`);
197
+ }
145
198
  const params = new URLSearchParams({
146
199
  all_comments: "true",
147
200
  sort: "best_first",
148
201
  });
149
- const data = (await apiGet(`/api/v1/post/${postId}/comments?${params}`, subdomain));
202
+ const data = (await apiGet(`/api/v1/post/${postId}/comments?${params}`, resolvedSubdomain));
150
203
  const commentsRaw = (data["comments"] ?? []);
151
204
  return {
152
205
  postId,
153
206
  comments: commentsRaw.map(normalizeComment),
154
207
  };
155
208
  }
209
+ export async function listSubscriptions() {
210
+ if (!isAuthenticated()) {
211
+ throw new Error(`Listing subscriptions requires authentication. ${getAuthGuidance()}`);
212
+ }
213
+ const cookies = getCookieHeaders();
214
+ const headers = { ...cookies, Accept: "application/json" };
215
+ const res = await fetch("https://substack.com/api/v1/subscriptions?limit=500", { headers });
216
+ if (res.status === 401 || res.status === 403) {
217
+ throw new Error(`Authentication failed (cookie may have expired). ${getAuthGuidance()}`);
218
+ }
219
+ if (!res.ok)
220
+ throw new Error(`Substack API error ${res.status}`);
221
+ const json = (await res.json());
222
+ const subs = (json["subscriptions"] || []);
223
+ const pubs = (json["publications"] || []);
224
+ const pubMap = new Map();
225
+ for (const pub of pubs) {
226
+ pubMap.set(pub["id"], pub);
227
+ }
228
+ return subs
229
+ .map((sub) => {
230
+ const pubId = sub["publication_id"];
231
+ const pub = pubMap.get(pubId);
232
+ if (!pub)
233
+ return null;
234
+ const hasPaid = !!(sub["first_payment_at"]);
235
+ const isComp = sub["type"] === "comp";
236
+ const plan = hasPaid ? "paid" : isComp ? "comp" : "free";
237
+ return {
238
+ publicationId: pubId,
239
+ name: pub["name"] || "",
240
+ subdomain: pub["subdomain"] || "",
241
+ url: pub["base_url"] || `https://${pub["subdomain"]}.substack.com`,
242
+ authorName: pub["author_name"] || "",
243
+ plan,
244
+ isFavorite: sub["is_favorite"] || false,
245
+ createdAt: sub["created_at"] || "",
246
+ };
247
+ })
248
+ .filter((s) => s !== null && s.subdomain !== "");
249
+ }
250
+ export async function getInbox(pages = 1) {
251
+ if (!isAuthenticated()) {
252
+ throw new Error(`Accessing your inbox requires authentication. ${getAuthGuidance()}`);
253
+ }
254
+ const cookies = getCookieHeaders();
255
+ const headers = { ...cookies, Accept: "application/json" };
256
+ const allItems = [];
257
+ let cursor = null;
258
+ for (let page = 0; page < pages; page++) {
259
+ const params = new URLSearchParams({
260
+ inboxType: "inbox",
261
+ surface: "inbox_all",
262
+ limit: "20",
263
+ });
264
+ if (cursor)
265
+ params.set("cursor", cursor);
266
+ const res = await fetch(`https://substack.com/api/v1/inbox/top?${params}`, { headers });
267
+ if (res.status === 401 || res.status === 403) {
268
+ throw new Error(`Authentication failed (cookie may have expired). ${getAuthGuidance()}`);
269
+ }
270
+ if (!res.ok)
271
+ throw new Error(`Substack API error ${res.status}`);
272
+ const json = (await res.json());
273
+ const postItems = (json["post_items"] || json["posts"] || []);
274
+ const pubMap = new Map();
275
+ const pubs = (json["publications"] || []);
276
+ for (const pub of pubs) {
277
+ pubMap.set(pub["id"], pub);
278
+ }
279
+ for (const item of postItems) {
280
+ const post = (item["post"] || item);
281
+ const pubId = post["publication_id"];
282
+ let pub = post["publishedBylines"]
283
+ ? undefined
284
+ : post["publication"];
285
+ if (!pub)
286
+ pub = pubMap.get(pubId);
287
+ const bylines = (post["publishedBylines"] || []);
288
+ allItems.push({
289
+ id: post["id"],
290
+ title: post["title"] || "",
291
+ slug: post["slug"] || "",
292
+ subtitle: post["subtitle"] || "",
293
+ publishedAt: post["post_date"] || "",
294
+ canonicalUrl: post["canonical_url"] || "",
295
+ audience: post["audience"] || "everyone",
296
+ publicationName: pub?.["name"] || "",
297
+ publicationSubdomain: pub?.["subdomain"] || "",
298
+ authorName: bylines[0]?.["name"] || pub?.["author_name"] || "",
299
+ likes: post["reaction_count"] || 0,
300
+ comments: post["comment_count"] || 0,
301
+ restacks: post["restacks"] || 0,
302
+ wordCount: post["wordcount"],
303
+ });
304
+ }
305
+ const nextCursor = json["cursor"];
306
+ if (!nextCursor || postItems.length === 0)
307
+ break;
308
+ cursor = nextCursor;
309
+ }
310
+ allItems.sort((a, b) => {
311
+ const dateA = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
312
+ const dateB = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
313
+ return dateB - dateA;
314
+ });
315
+ return allItems;
316
+ }
317
+ export async function getReaderFeed(limit = 20) {
318
+ if (!isAuthenticated()) {
319
+ throw new Error(`Accessing your reader feed requires authentication. ${getAuthGuidance()}`);
320
+ }
321
+ const apiLimit = Math.min(limit, 20);
322
+ const cookies = getCookieHeaders();
323
+ const headers = { ...cookies, Accept: "application/json" };
324
+ const res = await fetch(`https://substack.com/api/v1/reader/posts?limit=${apiLimit}`, { headers });
325
+ if (res.status === 401 || res.status === 403) {
326
+ throw new Error(`Authentication failed (cookie may have expired). ${getAuthGuidance()}`);
327
+ }
328
+ if (!res.ok)
329
+ throw new Error(`Substack API error ${res.status}`);
330
+ const json = (await res.json());
331
+ const posts = (json["posts"] || []);
332
+ const pubs = (json["publications"] || []);
333
+ const pubMap = new Map();
334
+ for (const pub of pubs) {
335
+ pubMap.set(pub["id"], pub);
336
+ }
337
+ const items = posts.map((post) => {
338
+ const pubId = post["publication_id"];
339
+ const pub = pubMap.get(pubId);
340
+ const bylines = (post["publishedBylines"] || []);
341
+ return {
342
+ id: post["id"],
343
+ title: post["title"] || "",
344
+ slug: post["slug"] || "",
345
+ subtitle: post["subtitle"] || "",
346
+ publishedAt: post["post_date"] || "",
347
+ canonicalUrl: post["canonical_url"] || "",
348
+ audience: post["audience"] || "everyone",
349
+ publicationName: pub?.["name"] || "",
350
+ publicationSubdomain: pub?.["subdomain"] || "",
351
+ authorName: bylines[0]?.["name"] || "",
352
+ likes: post["reaction_count"] || 0,
353
+ comments: post["comment_count"] || 0,
354
+ restacks: post["restacks"] || 0,
355
+ wordCount: post["wordcount"],
356
+ };
357
+ });
358
+ items.sort((a, b) => {
359
+ const dateA = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
360
+ const dateB = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
361
+ return dateB - dateA;
362
+ });
363
+ return items;
364
+ }
156
365
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,76 @@
1
1
  #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ function getVersion() {
6
+ try {
7
+ const dir = dirname(fileURLToPath(import.meta.url));
8
+ const pkgPath = join(dir, "..", "package.json");
9
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
10
+ return pkg.version;
11
+ }
12
+ catch {
13
+ return "0.7.0";
14
+ }
15
+ }
2
16
  const args = process.argv.slice(2);
3
17
  const command = args[0];
4
18
  async function main() {
19
+ // ─── install ────────────────────────────────────────────────
20
+ if (command === "install") {
21
+ const flag = args[1];
22
+ if (flag === "--cursor") {
23
+ console.log("Step 1/2: Logging in to Substack...\n");
24
+ const { runLogin } = await import("./auth.js");
25
+ await runLogin();
26
+ console.log("\nStep 2/2: Adding MCP to Cursor...\n");
27
+ const { addToConfig } = await import("./setup.js");
28
+ const { path, updated } = addToConfig("cursor");
29
+ if (updated) {
30
+ console.log(` Added to ${path}`);
31
+ }
32
+ else {
33
+ console.log(` Already configured in ${path}`);
34
+ }
35
+ console.log("\n✅ Done! Restart Cursor to start using the Substack MCP.");
36
+ return;
37
+ }
38
+ if (flag === "--claude-code") {
39
+ console.log("Step 1/2: Logging in to Substack...\n");
40
+ const { runLogin } = await import("./auth.js");
41
+ await runLogin();
42
+ console.log("\nStep 2/2: Adding MCP to Claude Code...\n");
43
+ const { addToClaudeCode } = await import("./setup.js");
44
+ const { success, output } = addToClaudeCode();
45
+ console.log(` ${output}`);
46
+ if (success) {
47
+ console.log("\n✅ Done! The Substack MCP is now available in Claude Code.");
48
+ }
49
+ else {
50
+ console.log('\n⚠️ Could not add automatically. Run this manually:');
51
+ console.log(" claude mcp add -s user substack -- npx -y substack-article-mcp");
52
+ }
53
+ return;
54
+ }
55
+ // No flag or unknown flag — show install help
56
+ console.log(`
57
+ substack-article-mcp install — One-step setup
58
+
59
+ Choose your AI client:
60
+
61
+ npx -y substack-article-mcp install --cursor
62
+ Log in + add MCP to Cursor (restart Cursor afterward)
63
+
64
+ npx -y substack-article-mcp install --claude-code
65
+ Log in + add MCP to Claude Code
66
+
67
+ Claude Desktop:
68
+ Install the .mcpb extension from quickviralnotes.com/mcp-setup
69
+ Or download from the GitHub releases page.
70
+ `);
71
+ return;
72
+ }
73
+ // ─── login ──────────────────────────────────────────────────
5
74
  if (command === "login") {
6
75
  const flag = args[1];
7
76
  if (flag === "--check" || flag === "--status") {
@@ -9,20 +78,21 @@ async function main() {
9
78
  const status = await checkAuthStatus();
10
79
  if (status.authenticated) {
11
80
  console.log("✅ Authenticated");
81
+ console.log(` Source: ${status.authSource || "unknown"}`);
12
82
  console.log(` Cookie age: ${status.cookieAge}`);
13
83
  console.log(` Subdomain: ${status.subdomain || process.env["SUBSTACK_SUBDOMAIN"] || "(not set)"}`);
14
84
  }
15
85
  else {
16
86
  console.log("❌ Not authenticated");
17
- console.log(' Run "substack-article-mcp login" to connect your account.');
87
+ console.log(' Run "npx -y substack-article-mcp login" to connect your account.');
18
88
  }
19
89
  return;
20
90
  }
21
91
  if (flag === "--manual") {
22
92
  const cookieArg = args[2];
23
93
  if (!cookieArg) {
24
- console.error("Usage: substack-article-mcp login --manual <substack.sid value OR full Cookie header>");
25
- console.error("\nTo get your cookie:\n1. Open your Substack in Chrome (e.g. buildtolaunch.substack.com)\n2. DevTools (F12) → Application → Cookies → select substack.com\n3. Copy either the value of 'substack.sid' or the full Cookie header (so we can use substack.lli for paid articles)");
94
+ console.error("Usage: npx -y substack-article-mcp login --manual <cookie>");
95
+ console.error('\nTo get your cookie:\n1. Open Substack in Chrome\n2. DevTools (F12) → Application → Cookies → substack.com\n3. Copy either:\n - The value of "substack.sid"\n - OR the full Cookie header: "substack.sid=...; substack.lli=..."');
26
96
  process.exit(1);
27
97
  }
28
98
  const { runManualLogin } = await import("./auth.js");
@@ -33,47 +103,49 @@ async function main() {
33
103
  await runLogin();
34
104
  return;
35
105
  }
106
+ // ─── help / version ─────────────────────────────────────────
36
107
  if (command === "--help" || command === "-h") {
37
108
  printHelp();
38
109
  return;
39
110
  }
40
111
  if (command === "--version" || command === "-v") {
41
- console.log("substack-article-mcp v0.5.1");
112
+ console.log(`substack-article-mcp v${getVersion()}`);
42
113
  return;
43
114
  }
44
- // Default: start MCP server
115
+ // ─── Default: start MCP server ──────────────────────────────
45
116
  const { startServer } = await import("./server.js");
46
117
  await startServer();
47
118
  }
48
119
  function printHelp() {
120
+ const v = getVersion();
49
121
  console.log(`
50
- substack-article-mcp — Substack MCP Server (v0.5.1)
51
-
52
- SETUP (run once in your terminal)
53
- npx -y substack-article-mcp login
122
+ substack-article-mcp — Substack MCP Server (v${v})
54
123
 
55
- This opens a Chrome window where you enter your email and password.
56
- Your main Chrome stays open — this is a separate, dedicated window.
57
- After you log in, it closes automatically and saves your session.
124
+ INSTALL (one-step setup for your AI client)
125
+ npx -y substack-article-mcp install --cursor Cursor
126
+ npx -y substack-article-mcp install --claude-code Claude Code
127
+ Claude Desktop: install the .mcpb extension
58
128
 
59
- Alternative (no window): paste cookies from DevTools
60
- npx -y substack-article-mcp login --manual 'substack.sid=...; substack.lli=...'
129
+ LOGIN (refresh credentials only, no client changes)
130
+ npx -y substack-article-mcp login Chrome login flow
131
+ npx -y substack-article-mcp login --manual <cookie> Paste cookie directly
132
+ npx -y substack-article-mcp login --check Check auth status
61
133
 
62
- OTHER COMMANDS
63
- npx -y substack-article-mcp login --check Check if you're authenticated
64
- npx -y substack-article-mcp --help Show this help
134
+ OTHER
135
+ npx -y substack-article-mcp --version
136
+ npx -y substack-article-mcp --help
65
137
 
66
- ⚠️ Do NOT run "npx -y substack-article-mcp" with no arguments.
67
- That starts the MCP stdio server your terminal will look stuck.
68
- Cursor/Claude/Claude Code start the server automatically.
138
+ NOTE: Public articles work without logging in.
139
+ Log in to access paid articles, subscriptions, feed, and inbox.
69
140
 
70
- MCP TOOLS (available inside your AI app after setup)
141
+ MCP TOOLS (available inside your AI app)
71
142
  substack_auth_status list_articles get_article search_articles
143
+ get_comments list_subscriptions get_feed
144
+ get_inbox
72
145
  `);
73
146
  }
74
147
  main().catch((error) => {
75
148
  console.error("Fatal error:", error);
76
149
  process.exit(1);
77
150
  });
78
- export {};
79
151
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;YAEvC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CACT,iBAAiB,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,WAAW,EAAE,CACxF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;gBACvG,OAAO,CAAC,KAAK,CACX,gRAAgR,CACjR,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7C,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA0TA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAghBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD"}