diff --git a/keyserver/src/responders/farcaster-webhook-responders.js b/keyserver/src/responders/farcaster-webhook-responders.js
--- a/keyserver/src/responders/farcaster-webhook-responders.js
+++ b/keyserver/src/responders/farcaster-webhook-responders.js
@@ -5,6 +5,7 @@
 import invariant from 'invariant';
 
 import bots from 'lib/facts/bots.js';
+import { inviteLinkURL } from 'lib/facts/links.js';
 import { extractKeyserverIDFromID } from 'lib/keyserver-conn/keyserver-call-utils.js';
 import { createSidebarThreadName } from 'lib/shared/sidebar-utils.js';
 import { type NeynarWebhookCastCreatedEvent } from 'lib/types/farcaster-types.js';
@@ -211,6 +212,7 @@
     return;
   }
 
+  const neynarConfigPromise = getNeynarConfig();
   const taggerUserIDPromise = getVerifiedUserIDForFID(
     eventTaggerFID.toString(),
   );
@@ -290,13 +292,32 @@
   }
 
   const inviteLinkName = Math.random().toString(36).slice(-9);
-  const inviteLink = await createOrUpdatePublicLink(commbotViewer, {
-    name: inviteLinkName,
-    communityID: channelCommunityID,
-    threadID: sidebarThreadResponse.newThreadID,
-  });
 
-  console.log(inviteLink);
+  const [inviteLink, neynarConfig] = await Promise.all([
+    createOrUpdatePublicLink(commbotViewer, {
+      name: inviteLinkName,
+      communityID: channelCommunityID,
+      threadID: sidebarThreadResponse.newThreadID,
+    }),
+    neynarConfigPromise,
+  ]);
+
+  const introText = 'I created a thread on Comm. Join the conversation here:';
+  const replyText = `${introText} ${inviteLinkURL(inviteLink.name)}`;
+
+  if (!neynarConfig?.signerUUID) {
+    throw new ServerError('missing_signer_uuid');
+  }
+
+  const postCastResponse = await neynarClient?.postCast(
+    neynarConfig.signerUUID,
+    castHash,
+    replyText,
+  );
+
+  if (!postCastResponse?.success) {
+    throw new ServerError('post_cast_failed');
+  }
 }
 
 export { taggedCommFarcasterResponder, taggedCommFarcasterInputValidator };