🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

feedhook-mcp

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

feedhook-mcp - npm Package Compare versions

Comparing version
0.2.0
to
0.3.0
+1
-1
package.json
{
"name": "feedhook-mcp",
"version": "0.2.0",
"version": "0.3.0",
"mcpName": "io.github.patwalls/feedhook-mcp",

@@ -5,0 +5,0 @@ "description": "MCP server for Feedhook — turn a YouTube channel into a webhook: an HTTP callback the moment a new video is published. Agents can create accounts, subscribe channels, and check delivery logs.",

+10
-11

@@ -20,8 +20,4 @@ #!/usr/bin/env node

const server = new Server({ name: "feedhook", version: "0.2.0" }, { capabilities: { tools: {} } });
const server = new Server({ name: "feedhook", version: "0.3.0" }, { capabilities: { tools: {} } });
const CHANNEL_HINT =
"The channel id is the 24-char 'UC…' id — it's in the channel page URL for /channel/UC… pages, " +
"or in the page source of any youtube.com/@handle page (search for \"channelId\").";
const TOOLS = [

@@ -51,10 +47,13 @@ {

"every new video. The response includes a per-subscription `secret` (shown once) for verifying the " +
"X-Feedhook-Signature header (sha256 HMAC of the raw body). " + CHANNEL_HINT,
"X-Feedhook-Signature header (sha256 HMAC of the raw body).",
inputSchema: {
type: "object",
properties: {
channelId: { type: "string", description: "YouTube channel id (UC…, 24 chars)." },
channel: {
type: "string",
description: "The channel as an @handle (e.g. '@mkbhd'), a youtube.com channel URL, or a raw UC… id — resolved server-side.",
},
callbackUrl: { type: "string", description: "The http(s) URL that will receive the webhook POSTs." },
},
required: ["channelId", "callbackUrl"],
required: ["channel", "callbackUrl"],
},

@@ -139,6 +138,6 @@ },

if (name === "create_subscription") {
const channelId = String(args?.channelId || "").trim();
const channel = String(args?.channel || args?.channelId || "").trim();
const callbackUrl = String(args?.callbackUrl || "").trim();
if (!channelId || !callbackUrl) throw new Error("`channelId` and `callbackUrl` are required");
return ok(await api("POST", "/subscriptions", { channelId, callbackUrl }));
if (!channel || !callbackUrl) throw new Error("`channel` and `callbackUrl` are required");
return ok(await api("POST", "/subscriptions", { channel, callbackUrl }));
}

@@ -145,0 +144,0 @@ if (name === "list_subscriptions") return ok(await api("GET", "/subscriptions"));