Skip to main content
AllMCPs
BrowseBestCategoriesStackCompareToolsGuidesBlog
Log in Submit MCP

Stay in the loop

Get new MCP servers and top picks in your inbox.

AllMCPs

The open directory for discovering and installing Model Context Protocol servers.

AllMCPs on GitHub (opens in a new tab)
Launched onTiny Startupstinystartups.com
Explore
  • Browse servers
  • Best MCP servers
  • Categories
  • MCP clients
  • Agent prompts
  • Stack Builder
  • Compare servers
  • Random discovery New
  • Submit a server
  • Pricing & Boost Boost
Learn
  • Guides hub
  • What is MCP?
  • Install guide
  • Build an MCP server
  • Deploy an MCP server
  • Security guide
  • Troubleshooting
  • MCP for SEO & AEO
  • Protocol versioning
  • Transports: stdio vs HTTP
  • State of MCP (stats)
  • Blog & updates
Tools
  • All developer tools
  • Config generator
  • Config validator
  • Config auditor
  • MCP playground
  • Token calculator
  • OpenAPI β†’ MCP
  • Badge generator
For agents
  • REST API docs
  • Trust & traffic Live
  • Remote MCP server SSE β†— (opens in a new tab)
  • llms.txt β†— (opens in a new tab)
  • Catalog JSON β†— (opens in a new tab)
Company
  • About
  • Advertise Sponsor
  • Contact
  • GitHub β†— (opens in a new tab)
  • Terms
  • Privacy
AllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistLaunched on Tiny StartupsFeatured on ShowMeBestAIFeatured on ShowMeBestAIFind us on LaunchZoneFind us on LaunchZoneAllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistLaunched on Tiny StartupsFeatured on ShowMeBestAIFeatured on ShowMeBestAIFind us on LaunchZoneFind us on LaunchZone
Β© 2026 Jackalope Digital LLC. All rights reserved.
  1. Home
  2. πŸ’¬ Communication
  3. Elaan JavaScript SDKs
Elaan JavaScript SDKs logo
Health: ActiveRecent health check succeeded.Last checked 9/22/2026, 9:31:18 AM

Elaan JavaScript SDKs

User RatingsBe the first to rate and review this MCP server! Enrichment pendingWe haven’t run our AI enrichment pass on this listing yet, so the overview, use cases, and FAQ below may be sparse or missing. We work through the catalog over time β€” check back soon.
View RepositoryVisit Website

Create Elaan notification types, templates and brands, trigger sends, and debug delivery.

Quick Install

Automated & IDE Setup

Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β€” or use 1-click editor setup below.

One-click editor setup isn’t available for this listing yet β€” we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.

Manual Client & Custom JSON ConfigExpand JSON β–Ύ
No confirmed setup config for this listing yet. We only publish a config block when the install details come from the project itself β€” its README, its docs, or a verified owner. We haven’t found those for Elaan JavaScript SDKs, and we’d rather show nothing than a guess you’d paste into your client. Follow the project’s own setup instructions for the current steps.
Install Directory Badge Claim listing AlternativesπŸ’¬ More in Communication

Documentation Overview

Elaan JavaScript SDKs

Client SDKs for Elaan β€” drop-in notification inbox, preferences, and push-token management for your users' frontends.

This is the JavaScript/TypeScript family. Swift and Kotlin/Android live in their own repos (elaan-swift, elaan-kotlin).

Packages

PackageWhat it isRegistry
@elaanio/coreFramework-agnostic foundation β€” API client, types, observable inbox/preferences stores, and a realtime-transport interface. No UI, no framework.npm
@elaanio/react-coreReact bindings only (no DOM) β€” ElaanProvider + hooks (useNotifications, useUnreadCount, usePreferences, usePush, useBrowserPush) over the core stores. Shared by web and native.npm
@elaanio/reactReact (web) components β€” notification bell, feed, and preferences UI, plus real-time updates over SSE-on-fetch.npm
@elaanio/react-nativeReact Native components over the same hooks; realtime over SSE (react-native-sse) with polling fallback.npm
@elaanio/vueVue 3 components + composables β€” bell, feed, and preferences, with fetch-SSE realtime.npm
@elaanio/svelteSvelte stores (headless) β€” reactive inbox, unread count, and preferences; bring your own markup.npm
@elaanio/elementsFramework-agnostic Web Components β€” <elaan-bell> / <elaan-feed> / <elaan-preferences>. Drop into any page or framework.npm

How they fit together

Code
@elaanio/core                  vanilla TS: client Β· stores Β· realtime transport
   β”œβ”€ @elaanio/react-core           React provider + hooks (framework, no DOM)
   β”‚    β”œβ”€ @elaanio/react                web components + fetch-SSE realtime
   β”‚    └─ @elaanio/react-native         RN components (SSE via react-native-sse)
   β”œβ”€ @elaanio/vue                  Vue 3 components + composables
   β”œβ”€ @elaanio/svelte               Svelte stores (headless)
   └─ @elaanio/elements             Web Components (works anywhere)

The non-visual logic lives once in @elaanio/core; each framework package is a thin adapter over the core client + observable stores (React goes through the shared @elaanio/react-core hooks; Vue and Svelte bind the stores to their own reactivity). Adding another framework means a new binding over @elaanio/core, not a reimplementation of the client or stores.

Authentication (all packages)

The SDK never sees your API key. Your backend mints a short-lived contact token for the signed-in user (POST /v1/contacts/tokens with your service key, by external_id) and returns it to the client. You pass the SDK a tokenProvider callback that fetches a fresh token from your own endpoint; it refreshes automatically on expiry. See @elaanio/react for the full token flow.

Quick start β€” React (web)

server.ts
import { ElaanProvider, NotificationBell, Preferences } from "@elaanio/react";
import "@elaanio/react/styles.css";

async function tokenProvider() {
  const res = await fetch("/api/elaan-token"); // your endpoint
  const { token, contact_id } = await res.json();
  return { token, contactId: contact_id };
}

export function App() {
  return (
    <ElaanProvider apiBase="https://api.elaan.io/v1" tokenProvider={tokenProvider}>
      <NotificationBell />
      <Preferences />
    </ElaanProvider>
  );
}

Quick start β€” React Native

Same provider and hooks; the components render with React Native primitives (View/FlatList/Switch/Modal) instead of DOM, and there's no stylesheet to import. Realtime works over SSE via react-native-sse (RN can't stream fetch, but its XHR-based EventSource can send the auth header), wired into the RN provider by default and falling back to polling when the deployment has realtime off. Pass realtime={null} for polling only.

server.ts
import {
  ElaanProvider,
  NotificationBell,
  NotificationFeed,
  Preferences,
} from "@elaanio/react-native";

async function tokenProvider() {
  const res = await fetch("https://yourapp.com/api/elaan-token", {
    headers: { Authorization: `Bearer ${yourSessionToken}` },
  });
  const { token, contact_id } = await res.json();
  return { token, contactId: contact_id };
}

export default function App() {
  return (
    <ElaanProvider apiBase="https://api.elaan.io/v1" tokenProvider={tokenProvider}>
      {/* A bell + badge that opens the inbox in a modal card */}
      <NotificationBell />

      {/* …or the inbox inline as a full screen */}
      <NotificationFeed emptyText="Nothing here yet." />

      {/* per-type Γ— channel preference switches */}
      <Preferences />
    </ElaanProvider>
  );
}

Registering a device token (Expo / FCM)

server.ts
import { usePush } from "@elaanio/react-native";

function useRegisterPush(expoToken: string) {
  const { register } = usePush();
  useEffect(() => {
    // provider: "expo" | "fcm" | "apns" | "onesignal"
    register(expoToken, "expo", "ios");
  }, [expoToken]);
}

Browser push (the web_push channel)

A separate channel from mobile push, not a provider under it β€” a contact's opt-out is keyed by (type, channel), so "no browser nags, keep my phone alerts" has to be expressible.

There is no token to hand in here, only a handshake to perform, so useBrowserPush does the whole thing: permission, service worker registration, subscribe(), and converting the subscription's two keys into what the API stores.

server.ts
import { useBrowserPush } from "@elaanio/react";
import type { BrowserPushResult } from "@elaanio/react";

function PushToggle() {
  const push = useBrowserPush({ serviceWorkerUrl: "/sw.js" });
  const [note, setNote] = useState<string | null>(null);
  if (!push.supported) return null;

  // Handle the result, and catch: the hook rethrows genuine faults after setting
  // `push.error`, so passing `push.subscribe` straight to onClick turns one into an
  // unhandled rejection.
  const onClick = async () => {
    try {
      if (push.subscribed) {
        setNote((await push.unsubscribe()) ? null : "Nothing to turn off.");
      } else {
        setNote(explain(await push.subscribe()));
      }
    } catch {
      setNote(push.error?.message ?? "Something went wrong.");
    }
  };

  return (
    <>
      <button onClick={onClick} disabled={push.busy || push.permission === "denied"}>
        {push.subscribed ? "Turn off" : "Turn on"} browser notifications
      </button>
      {note && <p>{note}</p>}
    </>
  );
}

function explain(result: BrowserPushResult): string | null {
  if (result.ok) return null;
  switch (result.reason) {
    case "denied":
      return "Notifications are blocked for this site. Change it in site settings β€” the browser won't ask again.";
    case "dismissed":
      return "No problem β€” you can turn these on any time.";
    case "not-configured":
      return "Browser notifications aren't set up for this account yet.";
    case "unsupported":
      return "This browser can't do notifications.";
  }
}

subscribe() resolves to a result rather than throwing, because the failures are states to render: unsupported, denied, dismissed, not-configured. denied is the one to handle deliberately β€” the browser will not prompt again, so the only way forward is site settings.

Your service worker must show the notification. If it doesn't, the browser substitutes its own "site has been updated in the background" notice:

server.ts
// sw.js β€” bundle this; a classic service worker can't `import`.
import { handlePush, handleNotificationClick } from "@elaanio/core/service-worker";

self.addEventListener("push", handlePush);
self.addEventListener("notificationclick", handleNotificationClick);

The account needs a VAPID keypair (Push Transport in the console). Without one subscribe() returns not-configured β€” the SDK checks before it prompts, so a one-shot permission isn't spent on an account that can't send.

It also needs a browser push template for each notification type you send, but the SDK cannot check that and does not claim to: subscribing succeeds and the sends then fail server-side with "no resolvable template". If notifications never arrive for a browser that reports itself subscribed, that is the first thing to check β€” the delivery log in the console names it directly.

A runnable version of all of this is in examples/web-push-demo.

Theming & styling

Web (@elaanio/react) ships a stylesheet driven entirely by CSS variables, so you theme it without touching component internals. Import the stylesheet once, then override the variables on :root (or any ancestor of the components):

css
:root {
  --elaan-accent: #7c3aed;   /* brand color: badges, links, active states */
  --elaan-accent-ink: #fff;  /* text/icon on top of the accent */
  --elaan-bg: #ffffff;
  --elaan-bg-hover: #f4f6f9;
  --elaan-text: #1a1d23;
  --elaan-muted: #6b7280;
  --elaan-border: #e5e7eb;
  --elaan-danger: #ef4444;
  --elaan-radius: 10px;
  --elaan-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.3);
  --elaan-z: 1000;           /* popover stacking order */
  /* --elaan-font is unset by default, so the components inherit your
     app's type stack. Name a stack here to pin one instead. */
}

Every component also takes className and any other DOM attribute, applied to its root element, so you can scope the variables to a subtree instead of :root:

tsx
<NotificationBell className={styles.scope} />

Dark mode follows the OS by default and can be driven by your app instead: a dark class or data-theme="dark" on any ancestor switches the palette, so a manual theme toggle (the Tailwind and shadcn default) works without you redeclaring the variables. Override the variables inside your own media query or under your own selector to customize either palette.

Read the full README β†’View source on GitHub β†’

Related MCP Servers

View all in Communication View all alternatives
  • Line Bot MCP Server logoLine Bot MCP Server
    Verified

    MCP Server for Integrating LINE Official Account

    πŸ’¬ Communication8 views
    Compare vs Line Bot MCP Server β†’
  • Slack MCP Server logoSlack MCP Server

    The most powerful MCP server for Slack Workspaces.

    πŸ’¬ Communication1 views
    Compare vs Slack MCP Server β†’
  • Google Workspace logoGoogle Workspace

    Give AI agents access to Gmail, Calendar, Drive, and more β€” multi-account, manifest-driven

    πŸ’¬ Communication1 views
    Compare vs Google Workspace β†’
  • Emailmd logoEmailmd

    Write and preview emails from your assistant. Renders markdown into email-safe HTML that holds up in Outlook and Gmail, lints drafts for deliverability problems, and returns a live preview link. Hosted with no API key, or run it locally with npx emailmd mcp.

    πŸ’¬ Communication2 views
    Compare vs Emailmd β†’

Reviews

No reviews yet β€” be the first to share how this listing worked for you.

Frequently Asked Questions about Elaan JavaScript SDKs

We don't have a confirmed install command for Elaan JavaScript SDKs yet, so we don't publish a generated one β€” a guessed package name would point at the wrong package or none at all. Follow the project's own README or setup instructions (https://github.com/ThingsIDoForLove/elaan-js) for the current steps.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewElaan JavaScript SDKs AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/mcp-186?style=directory)](https://allmcps.com/mcp/mcp-186)
HTML Embed
<a href="https://allmcps.com/mcp/mcp-186"><img src="https://allmcps.com/api/badge/mcp-186?style=directory" alt="Elaan JavaScript SDKs on AllMCPs" /></a>

Technical Specs & Signals

CategoryπŸ’¬Communication
More technical detailsExpand β–Ύ
Last updatedAug 15, 2026
6/10 checks healthy over the last 45d
Views0
Unique ViewsTotal visits recorded for this listing page on AllMCPs.
Installs0
Installs & Copy ActionsTotal times users copied install commands or configuration snippets for this server.
GitHub stars0
GitHub Star CountTotal stargazers on GitHub representing community popularity (0 stars).
Last commit1mo ago
Last Repository CommitThe most recent commit or push recorded for this server's GitHub repository.Last commit on Aug 15, 2026
31Quality signal: Emerging Β· 31/100How this signal is calculated β–Ύ
Server availabilityNot measured

Not scored for repo-hosted servers β€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership10/20
Documentation & tools11/30
Adoption & activity2/15
Community engagement0/10

A guidance signal from public completeness & health data β€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to unlock edit access and the Official badge β€” proof is checked automatically, then reviewed by our team.

Free dofollow backlink: add your website and place the AllMCPs badge on it β€” no claim needed. We detect it automatically and keep it verified as long as the badge stays live.

Claim & get free dofollow

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.

Explore more

More in πŸ’¬ Communication β†’Best MCP servers for Slack & Communication β†’Alternatives to Elaan JavaScript SDKs β†’Install in Claude DesktopInstall in CursorInstall in VS CodeSetup guides for all 13 MCP clients