substack-article-mcp 0.5.0 → 0.6.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.
- package/README.md +19 -4
- package/dist/client.d.ts +58 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +220 -8
- package/dist/client.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +173 -4
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# substack-article-mcp
|
|
2
2
|
|
|
3
|
-
MCP server for Substack — access your articles (including paid/premium),
|
|
3
|
+
MCP server for Substack — access your articles (including paid/premium), reader feed, subscriptions, comments, and engagement data from Cursor, Claude Desktop, Claude Code, or any MCP client.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -26,6 +26,8 @@ To get the values: DevTools (F12) → Application → Cookies → substack.com
|
|
|
26
26
|
|
|
27
27
|
### Step 2: Add the MCP to your app (if you didn't during login)
|
|
28
28
|
|
|
29
|
+
**Claude Desktop (one-click):** Download the `.mcpb` file from the [Releases page](https://github.com/jenny-ouyang/substack-article-mcp/releases) and double-click to install.
|
|
30
|
+
|
|
29
31
|
**Cursor** — edit `~/.cursor/mcp.json`:
|
|
30
32
|
|
|
31
33
|
```json
|
|
@@ -39,7 +41,7 @@ To get the values: DevTools (F12) → Application → Cookies → substack.com
|
|
|
39
41
|
}
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
**Claude Desktop** (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`): same format.
|
|
44
|
+
**Claude Desktop** (manual — macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`): same format.
|
|
43
45
|
|
|
44
46
|
**Claude Code:**
|
|
45
47
|
|
|
@@ -54,7 +56,11 @@ Restart Cursor / Claude after changing config.
|
|
|
54
56
|
Ask from chat — the app starts the server automatically:
|
|
55
57
|
|
|
56
58
|
- "List my recent Substack articles"
|
|
57
|
-
- "Get the full content of
|
|
59
|
+
- "Get the full content of article 184929446" *(works with numeric IDs)*
|
|
60
|
+
- "Get the article about AI tools from platformer" *(reads someone else's newsletter)*
|
|
61
|
+
- "Show me the comments on my latest article"
|
|
62
|
+
- "What newsletters do I subscribe to?"
|
|
63
|
+
- "Show me my reader feed — what's new from my subscriptions?"
|
|
58
64
|
- "Search my articles for [keyword]"
|
|
59
65
|
|
|
60
66
|
---
|
|
@@ -78,8 +84,15 @@ Ask from chat — the app starts the server automatically:
|
|
|
78
84
|
|------|-------------|
|
|
79
85
|
| `substack_auth_status` | Check if auth is valid, cookie age, subdomain. |
|
|
80
86
|
| `list_articles` | List published articles (metadata, engagement, paid/free). |
|
|
81
|
-
| `get_article` | Full article as markdown
|
|
87
|
+
| `get_article` | Full article as markdown. Accepts a slug *or* numeric post ID. Includes premium content. |
|
|
82
88
|
| `search_articles` | Search published articles by keyword. |
|
|
89
|
+
| `get_comments` | Full comment tree — every comment, reply, author name, reactions. Accepts slug or ID. |
|
|
90
|
+
| `list_subscriptions` | List all newsletters you subscribe to (paid, comped, and free). |
|
|
91
|
+
| `get_feed` | Your personalized reader feed — recent posts from subscribed newsletters. |
|
|
92
|
+
|
|
93
|
+
All content tools accept an optional `subdomain` parameter. This means you can read articles from **any** Substack newsletter you subscribe to, not just your own. For example, specify `subdomain: "platformer"` to read Platformer articles.
|
|
94
|
+
|
|
95
|
+
`get_article` and `get_comments` also accept numeric post IDs (e.g. `184929446`) in addition to text slugs. When using an ID, the publication is auto-detected — no subdomain needed.
|
|
83
96
|
|
|
84
97
|
---
|
|
85
98
|
|
|
@@ -91,6 +104,8 @@ Ask from chat — the app starts the server automatically:
|
|
|
91
104
|
|
|
92
105
|
**What about my main Chrome?** The `login` command uses a dedicated Chrome profile stored in `~/.substack-article-mcp/chrome-profile/`. This is completely separate from your regular Chrome — it does not touch your tabs, extensions, or browsing data.
|
|
93
106
|
|
|
107
|
+
**Where does this run?** Entirely on your local machine. The MCP server runs as a subprocess of Cursor/Claude, communicating over stdio. No cloud hosting, no intermediary servers — your credentials never leave your computer.
|
|
108
|
+
|
|
94
109
|
---
|
|
95
110
|
|
|
96
111
|
## Requirements
|
package/dist/client.d.ts
CHANGED
|
@@ -46,4 +46,62 @@ export declare function getComments(slugOrId: string, subdomain?: string): Promi
|
|
|
46
46
|
postId: number;
|
|
47
47
|
comments: SubstackComment[];
|
|
48
48
|
}>;
|
|
49
|
+
export interface SubstackSubscription {
|
|
50
|
+
publicationId: number;
|
|
51
|
+
name: string;
|
|
52
|
+
subdomain: string;
|
|
53
|
+
url: string;
|
|
54
|
+
authorName: string;
|
|
55
|
+
plan: "paid" | "comp" | "free";
|
|
56
|
+
isFavorite: boolean;
|
|
57
|
+
createdAt: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* List all newsletters the authenticated user subscribes to.
|
|
61
|
+
* Uses /api/v1/subscriptions which returns subscriptions + publications as sibling arrays.
|
|
62
|
+
*/
|
|
63
|
+
export declare function listSubscriptions(): Promise<SubstackSubscription[]>;
|
|
64
|
+
export interface InboxItem {
|
|
65
|
+
id: number;
|
|
66
|
+
title: string;
|
|
67
|
+
slug: string;
|
|
68
|
+
subtitle: string;
|
|
69
|
+
publishedAt: string;
|
|
70
|
+
canonicalUrl: string;
|
|
71
|
+
audience: string;
|
|
72
|
+
publicationName: string;
|
|
73
|
+
publicationSubdomain: string;
|
|
74
|
+
authorName: string;
|
|
75
|
+
likes: number;
|
|
76
|
+
comments: number;
|
|
77
|
+
restacks: number;
|
|
78
|
+
wordCount?: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Fetch the authenticated user's inbox — chronological list of posts from ALL subscribed newsletters.
|
|
82
|
+
* Unlike getReaderFeed (algorithmic), this returns everything in publish-time order with pagination.
|
|
83
|
+
*
|
|
84
|
+
* @param pages Number of pages to fetch (each page = up to 20 items). Default 1.
|
|
85
|
+
*/
|
|
86
|
+
export declare function getInbox(pages?: number): Promise<InboxItem[]>;
|
|
87
|
+
export interface FeedItem {
|
|
88
|
+
id: number;
|
|
89
|
+
title: string;
|
|
90
|
+
slug: string;
|
|
91
|
+
subtitle: string;
|
|
92
|
+
publishedAt: string;
|
|
93
|
+
canonicalUrl: string;
|
|
94
|
+
audience: string;
|
|
95
|
+
publicationName: string;
|
|
96
|
+
publicationSubdomain: string;
|
|
97
|
+
authorName: string;
|
|
98
|
+
likes: number;
|
|
99
|
+
comments: number;
|
|
100
|
+
restacks: number;
|
|
101
|
+
wordCount?: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Fetch the authenticated user's personalized reader feed — recent posts from subscribed newsletters.
|
|
105
|
+
*/
|
|
106
|
+
export declare function getReaderFeed(limit?: number): Promise<FeedItem[]>;
|
|
49
107
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -96,8 +96,46 @@ export async function listArticles(options) {
|
|
|
96
96
|
const data = (await apiGet(`/api/v1/archive?${params}`, subdomain));
|
|
97
97
|
return data.map(normalizePost);
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Detect whether the input looks like a numeric post ID (e.g. "184929446")
|
|
101
|
+
* rather than a text slug (e.g. "my-article-title").
|
|
102
|
+
*/
|
|
103
|
+
function isNumericId(slugOrId) {
|
|
104
|
+
return /^\d+$/.test(slugOrId);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Fetch a post by its numeric ID using the global by-id endpoint.
|
|
108
|
+
* Returns the post data and the publication subdomain (useful when no subdomain was provided).
|
|
109
|
+
*/
|
|
110
|
+
async function fetchPostById(id) {
|
|
111
|
+
const headers = getCookieHeaders();
|
|
112
|
+
const res = await fetch(`https://substack.com/api/v1/posts/by-id/${id}`, {
|
|
113
|
+
headers: { ...headers, Accept: "application/json" },
|
|
114
|
+
});
|
|
115
|
+
if (res.status === 401 || res.status === 403) {
|
|
116
|
+
throw new Error("Authentication failed. Run `substack-article-mcp login` to re-authenticate.");
|
|
117
|
+
}
|
|
118
|
+
if (!res.ok) {
|
|
119
|
+
const text = await res.text();
|
|
120
|
+
throw new Error(`Substack API error ${res.status}: ${text}`);
|
|
121
|
+
}
|
|
122
|
+
const json = (await res.json());
|
|
123
|
+
const post = json["post"];
|
|
124
|
+
const pub = json["publication"];
|
|
125
|
+
return { post, subdomain: pub?.["subdomain"] };
|
|
126
|
+
}
|
|
99
127
|
export async function getArticle(slugOrId, subdomain) {
|
|
100
|
-
|
|
128
|
+
let raw;
|
|
129
|
+
let resolvedSubdomain = subdomain;
|
|
130
|
+
if (isNumericId(slugOrId)) {
|
|
131
|
+
const result = await fetchPostById(slugOrId);
|
|
132
|
+
raw = result.post;
|
|
133
|
+
if (!resolvedSubdomain)
|
|
134
|
+
resolvedSubdomain = result.subdomain;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
|
|
138
|
+
}
|
|
101
139
|
let bodyHtml = raw["body_html"] || "";
|
|
102
140
|
const truncatedBodyText = raw["truncated_body_text"];
|
|
103
141
|
const wordCount = raw["wordcount"];
|
|
@@ -107,7 +145,7 @@ export async function getArticle(slugOrId, subdomain) {
|
|
|
107
145
|
(truncatedBodyText != null && truncatedBodyText.length > 0) ||
|
|
108
146
|
(wordCount != null && wordCount > 200 && bodyHtml.length < wordCount * 5);
|
|
109
147
|
if (isPaid && likelyTruncated) {
|
|
110
|
-
const fromPage = await fetchArticleBodyFromPage(slug,
|
|
148
|
+
const fromPage = await fetchArticleBodyFromPage(slug, resolvedSubdomain);
|
|
111
149
|
if (fromPage.length > bodyHtml.length)
|
|
112
150
|
bodyHtml = fromPage;
|
|
113
151
|
}
|
|
@@ -137,20 +175,194 @@ function normalizeComment(raw) {
|
|
|
137
175
|
* The slug is resolved to a post ID first via the article detail endpoint.
|
|
138
176
|
*/
|
|
139
177
|
export async function getComments(slugOrId, subdomain) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
178
|
+
let postId;
|
|
179
|
+
let resolvedSubdomain = subdomain;
|
|
180
|
+
if (isNumericId(slugOrId)) {
|
|
181
|
+
postId = Number(slugOrId);
|
|
182
|
+
if (!resolvedSubdomain) {
|
|
183
|
+
const result = await fetchPostById(slugOrId);
|
|
184
|
+
resolvedSubdomain = result.subdomain;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const raw = (await apiGet(`/api/v1/posts/${slugOrId}`, subdomain));
|
|
189
|
+
postId = raw["id"];
|
|
190
|
+
if (!postId)
|
|
191
|
+
throw new Error(`Could not resolve post ID for "${slugOrId}"`);
|
|
192
|
+
}
|
|
145
193
|
const params = new URLSearchParams({
|
|
146
194
|
all_comments: "true",
|
|
147
195
|
sort: "best_first",
|
|
148
196
|
});
|
|
149
|
-
const data = (await apiGet(`/api/v1/post/${postId}/comments?${params}`,
|
|
197
|
+
const data = (await apiGet(`/api/v1/post/${postId}/comments?${params}`, resolvedSubdomain));
|
|
150
198
|
const commentsRaw = (data["comments"] ?? []);
|
|
151
199
|
return {
|
|
152
200
|
postId,
|
|
153
201
|
comments: commentsRaw.map(normalizeComment),
|
|
154
202
|
};
|
|
155
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* List all newsletters the authenticated user subscribes to.
|
|
206
|
+
* Uses /api/v1/subscriptions which returns subscriptions + publications as sibling arrays.
|
|
207
|
+
*/
|
|
208
|
+
export async function listSubscriptions() {
|
|
209
|
+
const headers = { ...getCookieHeaders(), Accept: "application/json" };
|
|
210
|
+
const res = await fetch("https://substack.com/api/v1/subscriptions?limit=500", { headers });
|
|
211
|
+
if (res.status === 401 || res.status === 403) {
|
|
212
|
+
throw new Error("Authentication failed. Run `substack-article-mcp login` to re-authenticate.");
|
|
213
|
+
}
|
|
214
|
+
if (!res.ok)
|
|
215
|
+
throw new Error(`Substack API error ${res.status}`);
|
|
216
|
+
const json = (await res.json());
|
|
217
|
+
const subs = (json["subscriptions"] || []);
|
|
218
|
+
const pubs = (json["publications"] || []);
|
|
219
|
+
const pubMap = new Map();
|
|
220
|
+
for (const pub of pubs) {
|
|
221
|
+
pubMap.set(pub["id"], pub);
|
|
222
|
+
}
|
|
223
|
+
return subs
|
|
224
|
+
.map((sub) => {
|
|
225
|
+
const pubId = sub["publication_id"];
|
|
226
|
+
const pub = pubMap.get(pubId);
|
|
227
|
+
if (!pub)
|
|
228
|
+
return null;
|
|
229
|
+
const hasPaid = !!(sub["first_payment_at"]);
|
|
230
|
+
const isComp = sub["type"] === "comp";
|
|
231
|
+
const plan = hasPaid ? "paid" : isComp ? "comp" : "free";
|
|
232
|
+
return {
|
|
233
|
+
publicationId: pubId,
|
|
234
|
+
name: pub["name"] || "",
|
|
235
|
+
subdomain: pub["subdomain"] || "",
|
|
236
|
+
url: pub["base_url"] || `https://${pub["subdomain"]}.substack.com`,
|
|
237
|
+
authorName: pub["author_name"] || "",
|
|
238
|
+
plan,
|
|
239
|
+
isFavorite: sub["is_favorite"] || false,
|
|
240
|
+
createdAt: sub["created_at"] || "",
|
|
241
|
+
};
|
|
242
|
+
})
|
|
243
|
+
.filter((s) => s !== null && s.subdomain !== "");
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Fetch the authenticated user's inbox — chronological list of posts from ALL subscribed newsletters.
|
|
247
|
+
* Unlike getReaderFeed (algorithmic), this returns everything in publish-time order with pagination.
|
|
248
|
+
*
|
|
249
|
+
* @param pages Number of pages to fetch (each page = up to 20 items). Default 1.
|
|
250
|
+
*/
|
|
251
|
+
export async function getInbox(pages = 1) {
|
|
252
|
+
const headers = { ...getCookieHeaders(), Accept: "application/json" };
|
|
253
|
+
const allItems = [];
|
|
254
|
+
let cursor = null;
|
|
255
|
+
for (let page = 0; page < pages; page++) {
|
|
256
|
+
const params = new URLSearchParams({
|
|
257
|
+
inboxType: "inbox",
|
|
258
|
+
surface: "inbox_all",
|
|
259
|
+
limit: "20",
|
|
260
|
+
});
|
|
261
|
+
if (cursor)
|
|
262
|
+
params.set("cursor", cursor);
|
|
263
|
+
const res = await fetch(`https://substack.com/api/v1/inbox/top?${params}`, { headers });
|
|
264
|
+
if (res.status === 401 || res.status === 403) {
|
|
265
|
+
throw new Error("Authentication failed. Run `substack-article-mcp login` to re-authenticate.");
|
|
266
|
+
}
|
|
267
|
+
if (!res.ok)
|
|
268
|
+
throw new Error(`Substack API error ${res.status}`);
|
|
269
|
+
const json = (await res.json());
|
|
270
|
+
const postItems = (json["post_items"] || json["posts"] || []);
|
|
271
|
+
// Build publication lookup from inline publication objects
|
|
272
|
+
const pubMap = new Map();
|
|
273
|
+
const pubs = (json["publications"] || []);
|
|
274
|
+
for (const pub of pubs) {
|
|
275
|
+
pubMap.set(pub["id"], pub);
|
|
276
|
+
}
|
|
277
|
+
for (const item of postItems) {
|
|
278
|
+
// inbox/top wraps posts in a container — the actual post may be nested under "post"
|
|
279
|
+
const post = (item["post"] || item);
|
|
280
|
+
const pubId = post["publication_id"];
|
|
281
|
+
// Try inline publication first, then the top-level publications array
|
|
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
|
+
// Get next cursor for pagination
|
|
306
|
+
const nextCursor = json["cursor"];
|
|
307
|
+
if (!nextCursor || postItems.length === 0)
|
|
308
|
+
break; // No more pages
|
|
309
|
+
cursor = nextCursor;
|
|
310
|
+
}
|
|
311
|
+
// Sort by publish date, newest first
|
|
312
|
+
allItems.sort((a, b) => {
|
|
313
|
+
const dateA = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
|
|
314
|
+
const dateB = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
|
|
315
|
+
return dateB - dateA;
|
|
316
|
+
});
|
|
317
|
+
return allItems;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Fetch the authenticated user's personalized reader feed — recent posts from subscribed newsletters.
|
|
321
|
+
*/
|
|
322
|
+
export async function getReaderFeed(limit = 20) {
|
|
323
|
+
// Substack caps the reader feed at 20 items per request
|
|
324
|
+
const apiLimit = Math.min(limit, 20);
|
|
325
|
+
const headers = { ...getCookieHeaders(), Accept: "application/json" };
|
|
326
|
+
const res = await fetch(`https://substack.com/api/v1/reader/posts?limit=${apiLimit}`, { headers });
|
|
327
|
+
if (res.status === 401 || res.status === 403) {
|
|
328
|
+
throw new Error("Authentication failed. Run `substack-article-mcp login` to re-authenticate.");
|
|
329
|
+
}
|
|
330
|
+
if (!res.ok)
|
|
331
|
+
throw new Error(`Substack API error ${res.status}`);
|
|
332
|
+
const json = (await res.json());
|
|
333
|
+
const posts = (json["posts"] || []);
|
|
334
|
+
const pubs = (json["publications"] || []);
|
|
335
|
+
const pubMap = new Map();
|
|
336
|
+
for (const pub of pubs) {
|
|
337
|
+
pubMap.set(pub["id"], pub);
|
|
338
|
+
}
|
|
339
|
+
const items = posts.map((post) => {
|
|
340
|
+
const pubId = post["publication_id"];
|
|
341
|
+
const pub = pubMap.get(pubId);
|
|
342
|
+
const bylines = (post["publishedBylines"] || []);
|
|
343
|
+
return {
|
|
344
|
+
id: post["id"],
|
|
345
|
+
title: post["title"] || "",
|
|
346
|
+
slug: post["slug"] || "",
|
|
347
|
+
subtitle: post["subtitle"] || "",
|
|
348
|
+
publishedAt: post["post_date"] || "",
|
|
349
|
+
canonicalUrl: post["canonical_url"] || "",
|
|
350
|
+
audience: post["audience"] || "everyone",
|
|
351
|
+
publicationName: pub?.["name"] || "",
|
|
352
|
+
publicationSubdomain: pub?.["subdomain"] || "",
|
|
353
|
+
authorName: bylines[0]?.["name"] || "",
|
|
354
|
+
likes: post["reaction_count"] || 0,
|
|
355
|
+
comments: post["comment_count"] || 0,
|
|
356
|
+
restacks: post["restacks"] || 0,
|
|
357
|
+
wordCount: post["wordcount"],
|
|
358
|
+
};
|
|
359
|
+
});
|
|
360
|
+
// Sort by publish date, newest first
|
|
361
|
+
items.sort((a, b) => {
|
|
362
|
+
const dateA = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
|
|
363
|
+
const dateB = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
|
|
364
|
+
return dateB - dateA;
|
|
365
|
+
});
|
|
366
|
+
return items;
|
|
367
|
+
}
|
|
156
368
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -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
|
@@ -38,7 +38,7 @@ async function main() {
|
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
if (command === "--version" || command === "-v") {
|
|
41
|
-
console.log("substack-article-mcp v0.
|
|
41
|
+
console.log("substack-article-mcp v0.5.1");
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
// Default: start MCP server
|
|
@@ -47,7 +47,7 @@ async function main() {
|
|
|
47
47
|
}
|
|
48
48
|
function printHelp() {
|
|
49
49
|
console.log(`
|
|
50
|
-
substack-article-mcp — Substack MCP Server (v0.
|
|
50
|
+
substack-article-mcp — Substack MCP Server (v0.5.1)
|
|
51
51
|
|
|
52
52
|
SETUP (run once in your terminal)
|
|
53
53
|
npx -y substack-article-mcp login
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAwgBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD"}
|
package/dist/server.js
CHANGED
|
@@ -2,7 +2,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { checkAuthStatus } from "./auth.js";
|
|
5
|
-
import { listArticles, getArticle, searchArticles, getComments, } from "./client.js";
|
|
5
|
+
import { listArticles, getArticle, searchArticles, getComments, listSubscriptions, getReaderFeed, getInbox, } from "./client.js";
|
|
6
6
|
import { htmlToMarkdown } from "./html-to-md.js";
|
|
7
7
|
function formatArticleList(articles) {
|
|
8
8
|
if (articles.length === 0)
|
|
@@ -96,14 +96,14 @@ server.tool("list_articles", "List published Substack articles with metadata (ti
|
|
|
96
96
|
}
|
|
97
97
|
});
|
|
98
98
|
// ─── Tool: get_article ──────────────────────────────────────────
|
|
99
|
-
server.tool("get_article", "Get full content of a Substack article as markdown.
|
|
99
|
+
server.tool("get_article", "Get full content of a Substack article as markdown. Accepts an article slug (e.g. 'my-article-title') OR a numeric post ID (e.g. '184929446'). When using a numeric ID, subdomain is auto-detected. Authenticated access includes premium/paywalled content if you're a subscriber.", {
|
|
100
100
|
slug: z
|
|
101
101
|
.string()
|
|
102
|
-
.describe("Article slug
|
|
102
|
+
.describe("Article slug (e.g. 'my-article-title') or numeric post ID (e.g. '184929446')"),
|
|
103
103
|
subdomain: z
|
|
104
104
|
.string()
|
|
105
105
|
.optional()
|
|
106
|
-
.describe("Substack subdomain (e.g. 'platformer').
|
|
106
|
+
.describe("Substack subdomain (e.g. 'platformer'). Auto-detected when using numeric IDs. Needed when reading someone else's articles by slug."),
|
|
107
107
|
}, async ({ slug, subdomain }) => {
|
|
108
108
|
try {
|
|
109
109
|
const article = await getArticle(slug, subdomain);
|
|
@@ -250,6 +250,175 @@ server.tool("get_comments", "Get all comments on a Substack article, including f
|
|
|
250
250
|
};
|
|
251
251
|
}
|
|
252
252
|
});
|
|
253
|
+
// ─── Tool: list_subscriptions ────────────────────────────────────
|
|
254
|
+
server.tool("list_subscriptions", "List all Substack newsletters the authenticated user subscribes to. Returns name, subdomain, membership type (free/paid), and URL for each subscription.", {}, async () => {
|
|
255
|
+
try {
|
|
256
|
+
const subs = await listSubscriptions();
|
|
257
|
+
if (subs.length === 0) {
|
|
258
|
+
return {
|
|
259
|
+
content: [{ type: "text", text: "No subscriptions found." }],
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
const paid = subs.filter((s) => s.plan === "paid");
|
|
263
|
+
const comp = subs.filter((s) => s.plan === "comp");
|
|
264
|
+
const free = subs.filter((s) => s.plan === "free");
|
|
265
|
+
let text = `You subscribe to ${subs.length} newsletter${subs.length === 1 ? "" : "s"}`;
|
|
266
|
+
const parts = [];
|
|
267
|
+
if (paid.length > 0)
|
|
268
|
+
parts.push(`${paid.length} paid`);
|
|
269
|
+
if (comp.length > 0)
|
|
270
|
+
parts.push(`${comp.length} comped`);
|
|
271
|
+
parts.push(`${free.length} free`);
|
|
272
|
+
text += ` (${parts.join(", ")}):\n\n`;
|
|
273
|
+
if (paid.length > 0) {
|
|
274
|
+
text += "**Paid subscriptions:**\n";
|
|
275
|
+
text += paid
|
|
276
|
+
.map((s) => `- **${s.name}** (${s.subdomain}) — ${s.url}`)
|
|
277
|
+
.join("\n");
|
|
278
|
+
text += "\n\n";
|
|
279
|
+
}
|
|
280
|
+
if (comp.length > 0) {
|
|
281
|
+
text += "**Comped subscriptions:**\n";
|
|
282
|
+
text += comp
|
|
283
|
+
.map((s) => `- **${s.name}** (${s.subdomain}) — ${s.url}`)
|
|
284
|
+
.join("\n");
|
|
285
|
+
text += "\n\n";
|
|
286
|
+
}
|
|
287
|
+
text += "**Free subscriptions:**\n";
|
|
288
|
+
text += free
|
|
289
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
290
|
+
.map((s) => {
|
|
291
|
+
const fav = s.isFavorite ? " ★" : "";
|
|
292
|
+
return `- ${s.name}${fav} (${s.subdomain})`;
|
|
293
|
+
})
|
|
294
|
+
.join("\n");
|
|
295
|
+
return { content: [{ type: "text", text }] };
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
return {
|
|
299
|
+
content: [
|
|
300
|
+
{
|
|
301
|
+
type: "text",
|
|
302
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
303
|
+
},
|
|
304
|
+
],
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
// ─── Tool: get_feed ─────────────────────────────────────────────
|
|
309
|
+
server.tool("get_feed", "Get the authenticated user's personalized Substack reader feed — recent posts from newsletters they subscribe to. Shows title, author, publication, engagement stats, and slug for fetching full content.", {
|
|
310
|
+
limit: z
|
|
311
|
+
.number()
|
|
312
|
+
.int()
|
|
313
|
+
.min(1)
|
|
314
|
+
.max(20)
|
|
315
|
+
.optional()
|
|
316
|
+
.describe("Number of feed items to return (default 20, max 20). Results are sorted newest first."),
|
|
317
|
+
}, async ({ limit }) => {
|
|
318
|
+
try {
|
|
319
|
+
const feed = await getReaderFeed(limit ?? 20);
|
|
320
|
+
if (feed.length === 0) {
|
|
321
|
+
return {
|
|
322
|
+
content: [{ type: "text", text: "Your reader feed is empty." }],
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const text = feed
|
|
326
|
+
.map((item, i) => {
|
|
327
|
+
const paid = item.audience === "only_paid" ? " [PAID]" : "";
|
|
328
|
+
const date = item.publishedAt
|
|
329
|
+
? new Date(item.publishedAt).toLocaleDateString("en-US", {
|
|
330
|
+
year: "numeric",
|
|
331
|
+
month: "short",
|
|
332
|
+
day: "numeric",
|
|
333
|
+
})
|
|
334
|
+
: "";
|
|
335
|
+
const stats = `${item.likes} likes, ${item.comments} comments`;
|
|
336
|
+
return [
|
|
337
|
+
`${i + 1}. **${item.title}**${paid}`,
|
|
338
|
+
` By ${item.authorName} in **${item.publicationName}** (${item.publicationSubdomain})`,
|
|
339
|
+
` ${date} | ${stats}`,
|
|
340
|
+
` Slug: ${item.slug} | URL: ${item.canonicalUrl}`,
|
|
341
|
+
].join("\n");
|
|
342
|
+
})
|
|
343
|
+
.join("\n\n");
|
|
344
|
+
return {
|
|
345
|
+
content: [
|
|
346
|
+
{
|
|
347
|
+
type: "text",
|
|
348
|
+
text: `Your reader feed (${feed.length} posts):\n\n${text}`,
|
|
349
|
+
},
|
|
350
|
+
],
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
return {
|
|
355
|
+
content: [
|
|
356
|
+
{
|
|
357
|
+
type: "text",
|
|
358
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
// ─── Tool: get_inbox ─────────────────────────────────────────────
|
|
365
|
+
server.tool("get_inbox", "Get the authenticated user's inbox — a chronological list of ALL recent posts from every subscribed newsletter. Unlike get_feed (algorithmic, max 20), this returns posts in publish-time order and supports pagination to fetch more. Use 'pages' to control how far back to look (each page = ~20 posts).", {
|
|
366
|
+
pages: z
|
|
367
|
+
.number()
|
|
368
|
+
.int()
|
|
369
|
+
.min(1)
|
|
370
|
+
.max(10)
|
|
371
|
+
.optional()
|
|
372
|
+
.describe("Number of pages to fetch (each page ~20 posts). Default 1. Use 3-5 for broader coverage."),
|
|
373
|
+
}, async ({ pages }) => {
|
|
374
|
+
try {
|
|
375
|
+
const items = await getInbox(pages ?? 1);
|
|
376
|
+
if (items.length === 0) {
|
|
377
|
+
return {
|
|
378
|
+
content: [{ type: "text", text: "Your inbox is empty." }],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
const text = items
|
|
382
|
+
.map((item, i) => {
|
|
383
|
+
const paid = item.audience === "only_paid" ? " [PAID]" : "";
|
|
384
|
+
const date = item.publishedAt
|
|
385
|
+
? new Date(item.publishedAt).toLocaleDateString("en-US", {
|
|
386
|
+
year: "numeric",
|
|
387
|
+
month: "short",
|
|
388
|
+
day: "numeric",
|
|
389
|
+
hour: "2-digit",
|
|
390
|
+
minute: "2-digit",
|
|
391
|
+
})
|
|
392
|
+
: "";
|
|
393
|
+
const stats = `${item.likes} likes, ${item.comments} comments`;
|
|
394
|
+
return [
|
|
395
|
+
`${i + 1}. **${item.title}**${paid}`,
|
|
396
|
+
` By ${item.authorName} in **${item.publicationName}** (${item.publicationSubdomain})`,
|
|
397
|
+
` ${date} | ${stats}`,
|
|
398
|
+
` Slug: ${item.slug} | URL: ${item.canonicalUrl}`,
|
|
399
|
+
].join("\n");
|
|
400
|
+
})
|
|
401
|
+
.join("\n\n");
|
|
402
|
+
return {
|
|
403
|
+
content: [
|
|
404
|
+
{
|
|
405
|
+
type: "text",
|
|
406
|
+
text: `Inbox (${items.length} posts, ${pages ?? 1} page${(pages ?? 1) > 1 ? "s" : ""}):\n\n${text}`,
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
return {
|
|
413
|
+
content: [
|
|
414
|
+
{
|
|
415
|
+
type: "text",
|
|
416
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
});
|
|
253
422
|
// ─── Start Server ────────────────────────────────────────────────
|
|
254
423
|
export async function startServer() {
|
|
255
424
|
const transport = new StdioServerTransport();
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "substack-article-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "MCP server for Substack — access your articles, notes, and engagement data from Claude, Cursor, or any MCP client. Authenticated access to premium/paywalled content.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|