Sign In

@conorbronsdon/substack-mcp

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@conorbronsdon/substack-mcp - npm Package Compare versions

Comparing version
0.2.0
to
0.2.1
+1
-1
dist/api/client.js

@@ -19,3 +19,3 @@ import { SubstackAPIError, AuthenticationError } from "../utils/errors.js";

"Content-Type": "application/json",
"User-Agent": "substack-mcp/0.2.0",
"User-Agent": "substack-mcp/0.2.1",
...(options.headers || {}),

@@ -22,0 +22,0 @@ };

@@ -5,23 +5,17 @@ #!/usr/bin/env node

import { createServer } from "./server.js";
function getRequiredEnv(name) {
const value = process.env[name];
if (!value) {
console.error(`Missing required environment variable: ${name}`);
console.error("");
console.error("Required environment variables:");
console.error(" SUBSTACK_PUBLICATION_URL — e.g., https://yourblog.substack.com");
console.error(" SUBSTACK_SESSION_TOKEN — connect.sid cookie from browser DevTools");
console.error(" SUBSTACK_USER_ID — your numeric Substack user ID");
console.error("");
console.error("See README.md for setup instructions.");
process.exit(1);
async function main() {
const publicationUrl = process.env.SUBSTACK_PUBLICATION_URL || "";
const sessionToken = process.env.SUBSTACK_SESSION_TOKEN || "";
const userId = process.env.SUBSTACK_USER_ID || "0";
const missingVars = [
!process.env.SUBSTACK_PUBLICATION_URL && "SUBSTACK_PUBLICATION_URL",
!process.env.SUBSTACK_SESSION_TOKEN && "SUBSTACK_SESSION_TOKEN",
!process.env.SUBSTACK_USER_ID && "SUBSTACK_USER_ID",
].filter(Boolean);
if (missingVars.length > 0) {
console.error(`Warning: Missing environment variables: ${missingVars.join(", ")}`);
console.error("Tools will error until all variables are configured. See README.md for setup.");
}
return value;
}
async function main() {
const publicationUrl = getRequiredEnv("SUBSTACK_PUBLICATION_URL");
const sessionToken = getRequiredEnv("SUBSTACK_SESSION_TOKEN");
const userId = getRequiredEnv("SUBSTACK_USER_ID");
const client = new SubstackClient(publicationUrl, sessionToken, userId);
// Validate auth on startup
// Validate auth on startup (warn but don't block — allows inspection without credentials)
try {

@@ -32,5 +26,4 @@ const user = await client.validateAuth();

catch (err) {
console.error("Authentication failed. Check your SUBSTACK_SESSION_TOKEN.");
console.error("Warning: Authentication failed. Tools will error until a valid session token is provided.");
console.error(err instanceof Error ? err.message : String(err));
process.exit(1);
}

@@ -37,0 +30,0 @@ const server = createServer(client);

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,cAAc,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAExE,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC;IAEnD,MAAM,WAAW,GAAG;QAClB,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,0BAA0B;QACnE,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,wBAAwB;QAC/D,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,kBAAkB;KACpD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAExE,0FAA0F;IAC1F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC3G,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}

@@ -7,3 +7,3 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

name: "substack-mcp",
version: "0.2.0",
version: "0.2.1",
});

@@ -10,0 +10,0 @@ // --- Read tools ---

{
"name": "@conorbronsdon/substack-mcp",
"version": "0.2.0",
"version": "0.2.1",
"description": "MCP server for Substack — read posts, manage drafts. No publish or delete by design.",

@@ -5,0 +5,0 @@ "type": "module",

@@ -10,3 +10,3 @@ {

},
"version": "0.2.0",
"version": "0.2.1",
"packages": [

@@ -16,3 +16,3 @@ {

"identifier": "@conorbronsdon/substack-mcp",
"version": "0.2.0",
"version": "0.2.1",
"runtimeHint": "npx",

@@ -19,0 +19,0 @@ "transport": {