Skip to main content
Crashbytes logoCrashbytes
HomeArticlesByte Sized ExamplesOpen SourceServicesAboutContact
Browse Articles
HomeArticlesByte Sized ExamplesOpen SourceServicesAboutContact
Network
Theme
Browse Articles
Crashbytes logoCrashbytes

Expert insights on web development, technology trends, and programming best practices. Learn from real-world experiences and cutting-edge techniques that help you build better software.

Follow Us

Our Sites

  • ๐Ÿ”ฎ Predictions
  • ๐Ÿ“ฐ Breaking News
  • ๐ŸŽจ AI Art
  • ๐Ÿ“– Short Stories
  • View All โ†’
  • Products โ†’

Sitemap

  • Home
  • All Articles
  • Open Source
  • Services
  • About Us
  • Contact
  • Donate Compute

Popular Topics

  • Serverless
  • Cloud Architecture
  • DevOps
  • Kubernetes
  • Platform Engineering

Resources

  • Privacy Policy
  • Terms of Service
  • Sitemap
  • RSS Feed
  • PGP Key

Stay Updated

Get the latest articles, tutorials, and insights delivered to your inbox. Join our community of developers and never miss an update.

ยฉ 2021-2026 Crashbytesยฎ by Blackhole Software, LLC. All rights reserved.
| Reg. U.S. Pat. & Tm. Off.

Made for the developer community

  1. Home
  2. /
  3. Articles
  4. /
  5. We Published a Pusher Channels MCP Server to the Official Registry โ€” Here's What We Learned
AI EngineeringApril 1, 20267 min readโ€ข By Michael Eakins

We Published a Pusher Channels MCP Server to the Official Registry โ€” Here's What We Learned

How we built an MCP server that gives AI agents real-time messaging superpowers through Pusher Channels, published it to npm and the official MCP Registry, and what the process actually looks like in 2026

We Published a Pusher Channels MCP Server to the Official Registry โ€” Here's What We Learned

Quick Takeaways

What you'll learn in this article

7 min read
Intermediate
  • 1

    Push live progress updates to a web UI while performing a long-running task

  • 2

    Trigger deploy notifications to a team dashboard when a CI/CD pipeline completes

  • 3

    Send alerts to connected clients when it detects anomalies in monitored data

  • 4

    Coordinate with other agents through pub/sub channels โ€” agent A publishes a result, agent B picks it up

  • 5

    Implement human-in-the-loop workflows by checking presence channels to see if a human is online before escalating

Keep reading for detailed implementation, code examples, and real-world results

Most MCP servers give AI agents the ability to read things โ€” query a database, search files, fetch API data. But what if your agent could push real-time messages to live dashboards, trigger notifications to connected users, or coordinate with other agents through pub/sub channels?

That's exactly what we built. The Pusher Channels MCP Server gives any MCP-compatible AI client (Claude Desktop, Claude Code, Cursor, Windsurf) the ability to interact with Pusher Channels โ€” the real-time messaging platform used by over 200,000 developers.

And as of today, it's live on the official MCP Registry.

Why Real-Time Matters for AI Agents

The current MCP ecosystem is heavily skewed toward read operations. Agents query databases, search codebases, fetch web content. That's powerful, but it treats the agent as a passive observer.

Real-time messaging flips that model. An AI agent with Pusher access can:

  • Push live progress updates to a web UI while performing a long-running task
  • Trigger deploy notifications to a team dashboard when a CI/CD pipeline completes
  • Send alerts to connected clients when it detects anomalies in monitored data
  • Coordinate with other agents through pub/sub channels โ€” agent A publishes a result, agent B picks it up
  • Implement human-in-the-loop workflows by checking presence channels to see if a human is online before escalating

This makes the agent an active participant in live systems, not just a tool that answers questions.

Advertisement

What the Server Does

The server exposes 7 tools that map to the Pusher Channels REST API:

ToolWhat It Does
trigger_eventSend an event to one or more channels
trigger_batch_eventsSend up to 10 events in a single API call
list_channelsList all active channels with optional prefix filtering
get_channel_infoGet subscription count, user count, and occupancy status
get_presence_usersList users connected to a presence channel
authorize_channelGenerate auth tokens for private/presence channels
terminate_user_connectionsDisconnect a user from all channels (moderation)

Each tool uses Zod schemas for input validation, returns human-readable text responses, and handles errors gracefully โ€” if Pusher's API is down, you get a clear error message instead of a crash.

The Tech Stack

The server is built with:

  • TypeScript with ES2022 target and Node16 module resolution
  • @modelcontextprotocol/sdk (^1.12.0) โ€” the official MCP SDK using the modern McpServer + server.tool() pattern
  • pusher (^5.2.0) โ€” the official Pusher Node.js SDK
  • zod (^3.24.0) โ€” runtime input validation with .describe() annotations that flow through to the MCP tool schema

The architecture follows a clean separation: each tool lives in its own file under src/tools/, a singleton factory in pusher-client.ts handles credential validation, and index.ts wires everything together with the stdio transport.

Publishing to the MCP Registry in 2026

If you've been following the MCP ecosystem, you might think publishing means submitting a PR to the modelcontextprotocol/servers repo. That's no longer the case. As of late 2025, the repo explicitly says:

We are no longer accepting PRs to add server links to the README. Please publish your server to the MCP Server Registry instead.

They even have a GitHub Actions workflow that auto-flags README-only PRs. The official path is now the MCP Registry.

How the Registry Works

The MCP Registry is a metaregistry โ€” it stores metadata about your server, not the actual code. Your package lives on npm (or PyPI, Docker Hub, etc.), and the registry points to it.

The publishing flow has three steps:

Step 1: Publish your package to npm

Your package.json needs an mcpName field that matches your registry namespace:

{
  "name": "@crashbytes/pusher-mcp-server",
  "mcpName": "io.github.CrashBytes/pusher-mcp-server"
}

Then publish normally:

npm publish --access public

Step 2: Create a server.json metadata file

This describes your server for the registry โ€” name, description, environment variables, transport type:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.CrashBytes/pusher-mcp-server",
  "title": "Pusher Channels",
  "description": "Trigger events, query channels, and manage realtime messaging on Pusher Channels.",
  "repository": {
    "url": "https://github.com/CrashBytes/pusher-mcp-server",
    "source": "github"
  },
  "version": "1.0.3",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@crashbytes/pusher-mcp-server",
      "version": "1.0.3",
      "runtime": "node",
      "transport": { "type": "stdio" },
      "environmentVariables": [
        { "name": "PUSHER_APP_ID", "isRequired": true, "isSecret": false },
        { "name": "PUSHER_KEY", "isRequired": true, "isSecret": false },
        { "name": "PUSHER_SECRET", "isRequired": true, "isSecret": true },
        { "name": "PUSHER_CLUSTER", "isRequired": true, "isSecret": false }
      ]
    }
  ]
}

Step 3: Authenticate and publish with mcp-publisher

Install the CLI (available via Homebrew), authenticate with GitHub, and publish:

brew install mcp-publisher
mcp-publisher login github
mcp-publisher publish

The login github command uses a device flow โ€” you get a code to enter at github.com/login/device. The registry validates that your GitHub identity matches the io.github.<username>/ namespace in your server name.

Gotchas We Hit

The namespace is case-sensitive. Our GitHub org is CrashBytes (capital C and B). We initially used io.github.crashbytes/ in our server.json. The registry rejected it with a 403:

You have permission to publish: io.github.CrashBytes/*. Attempting to publish: io.github.crashbytes/pusher-mcp-server

The fix was simple โ€” match the exact casing of the GitHub org.

The mcpName in package.json must match the registry name. When we published v1.0.1 to npm with the lowercase mcpName, then tried to publish to the registry with the corrected casing, we got:

NPM package ownership validation failed. Expected mcpName 'io.github.CrashBytes/pusher-mcp-server', got 'io.github.crashbytes/pusher-mcp-server'

We had to bump to 1.0.3 and republish to npm with the corrected mcpName before the registry would accept it.

Auth tokens expire quickly. Between mcp-publisher login and mcp-publisher publish, if you take too long (fixing issues, bumping versions), the JWT expires. Just run login github again โ€” it's fast.

You cannot overwrite npm versions. npm's immutability means every fix requires a version bump. We went through 1.0.0 โ†’ 1.0.1 โ†’ 1.0.2 โ†’ 1.0.3 during the publishing process. Plan your versions accordingly, or get everything right locally before your first publish.

Advertisement

Testing the Server

We didn't just publish and hope for the best. The server has a comprehensive test suite with 52 tests across 9 test files, built with Vitest:

  • Unit tests for all 7 tools โ€” mock the Pusher client, test success paths, error handling, edge cases
  • Pusher client tests โ€” env var validation, singleton behavior, missing credential detection
  • MCP protocol integration tests โ€” use the SDK's InMemoryTransport to connect a real McpServer and Client, call tools through the actual MCP protocol

The integration tests verify real workflows like "list presence users, then terminate a bad actor" and "authorize a channel, then trigger an event excluding the authorized socket."

We also tested all tools against the live Pusher API to confirm they work end-to-end.

How to Use It

Add this to your Claude Desktop config (claude_desktop_config.json) or Claude Code settings:

{
  "mcpServers": {
    "pusher": {
      "command": "npx",
      "args": ["-y", "@crashbytes/pusher-mcp-server"],
      "env": {
        "PUSHER_APP_ID": "your-app-id",
        "PUSHER_KEY": "your-key",
        "PUSHER_SECRET": "your-secret",
        "PUSHER_CLUSTER": "us2"
      }
    }
  }
}

You'll need a free Pusher account to get your credentials. The free tier includes 200,000 messages per day โ€” more than enough for development and small-scale production use.

Once configured, you can ask Claude things like:

  • "Send a notification event to the alerts channel with a warning about high CPU usage"
  • "List all active channels and show me their subscription counts"
  • "Check if anyone is connected to the presence-support channel"
  • "Generate an auth token for private-user-42"

What's Next

The full source code is available at CrashBytes/pusher-mcp-server and in our Byte Sized Examples monorepo. The companion tutorial walks through building it step by step: Building a Pusher Channels MCP Server.

If you're thinking about building your own MCP server for a service that doesn't have one yet, the registry makes it straightforward to share your work with the community. The ecosystem is growing fast โ€” over 500 official integrations and 900 community servers โ€” but there are still plenty of gaps to fill.

Real-time messaging was one of them. Now it's covered.


Links:

  • npm: @crashbytes/pusher-mcp-server
  • MCP Registry listing
  • GitHub: CrashBytes/pusher-mcp-server
  • Tutorial: Building a Pusher Channels MCP Server
  • Byte Sized Examples repo
Advertisement

Was this article helpful?

Your feedback helps us improve our content and create more valuable resources

We appreciate honest feedback - it helps us serve you better

Work with us

This analysis is what we do for clients

CrashBytes consults on enterprise AI strategy and implementation, builds custom web and mobile software, and places senior engineers on corp-to-corp engagements.

See Services

Enjoyed this? Get the next one.

Join developers getting CrashBytes articles, tutorials, and predictions in their inbox. No spam, unsubscribe anytime.

Related Topics

MCPPusherReal-TimeAI AgentsTypeScriptOpen Sourcenpm
Back to Articles
โ† PreviousThe Economics of AI โ€” When the Math Doesn't WorkNext โ†’How AI Will Replace Customs Brokers and Trade Compliance Officers on the Anniversary of Liberation Day

From across the CrashBytes network

More than the blog โ€” predictions, news, fiction, and AI art.

PredictionCustom AI Chips Reach Commodity Status by Q4 2027: Cloud Provider Competition Drives Democratization
NewsWeek In Review July 19-25, 2026 - The Week The Money Moved To The Metering Layer
Short StoryThe Answer Key
AI ArtThe Room That Remembers

Continue Your Learning Journey

Explore more articles related to AI Engineering and expand your knowledge.

๐Ÿ“„Tutorial

Instrument an MCP Tool-Use Agent with OpenTelemetry Tracing in TypeScript

A hands-on TypeScript tutorial for making an autonomous, tool-using AI agent observable. You build a small, dependency-light agent loop and wrap it in OpenTelemetry traces โ€” a root span per invocation, child spans for every model call and every MCP tool call, using the gen_ai.* and MCP semantic conventions โ€” then prove the span tree with deterministic, in-memory tests. Runs offline with zero API keys.

24 min readRead more
๐Ÿ“„Tutorial

Build a Verifiable Agent-Commit Provenance Trail in TypeScript

A hands-on TypeScript tutorial for proving which agent, model, prompt, and supervisor produced a code changeset โ€” and detecting any later tampering. You build canonical changeset hashing, ed25519-signed attestations, and an append-only chained ledger you can verify offline, with zero runtime dependencies and zero API keys.

26 min readRead more
๐Ÿ“„Tutorial

Migrating Your Coding Agent from GPT-5 to DeepSeek V4: A TypeScript Tutorial

A practical, end-to-end migration guide for engineers running production coding agents on GPT-5 who want to evaluate or move to DeepSeek V4 โ€” the open-source frontier model that landed Friday claiming the strongest agentic coding scores in the open ecosystem. Covers API differences, tool-calling adaptation, streaming, the agent loop, evaluation, and the real cost math.

25 min readRead more
๐Ÿ“„Technology

The Quiet Protocol Now Carrying the Autonomous Agent Economy โ€” MCP at 97 Million Installs and What It Changes

Model Context Protocol crossed 97 million installs in March 2026 and has become the load-bearing infrastructure for enterprise agent deployment. It is the USB-C of agentic AI, and nothing in the autonomous coworker transition works without it.

26 min readRead more