Skip to main content
Glama

The first MCP server for Viber. Connect any MCP-compatible client -- Claude Desktop, Claude Code, Cursor, Windsurf, and others -- to the Viber Bot REST API and control your Viber bot through natural language.

Viber has over 1 billion registered users, particularly strong in Ukraine, Eastern Europe, Greece, and Southeast Asia. This server gives AI assistants full access to the bot API: send messages, media, files, broadcast to groups, manage webhooks, and query user data.

How it works

┌──────────────────────┐         stdio           ┌──────────────────────┐
│                      │  ◄───────────────────►  │                      │
│   MCP Client         │    JSON-RPC over        │   viber-mcp          │
│                      │    stdin/stdout         │                      │
│   - Claude Desktop   │                         │   13 tools           │
│   - Claude Code      │                         │   Zod validation     │──── HTTPS ───►  Viber API
│   - Cursor           │                         │   Error handling     │                 chatapi.viber.com
│   - Any MCP client   │                         │   Typed responses    │
│                      │                         │                      │
└──────────────────────┘                         └──────────────────────┘

Related MCP server: mcp-connect

Quick start

Try it instantly -- no install required:

VIBER_AUTH_TOKEN=your-token npx @serhii.zghama/viber-mcp

Or install globally:

npm install -g @serhii.zghama/viber-mcp

Setup

Claude Desktop

Add to your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "viber": {
      "command": "npx",
      "args": ["-y", "@serhii.zghama/viber-mcp"],
      "env": {
        "VIBER_AUTH_TOKEN": "your-bot-token-here",
        "VIBER_SENDER_NAME": "MyBot"
      }
    }
  }
}

Windows note: Replace "command": "npx" with "command": "cmd" and "args" with ["/c", "npx", "-y", "@serhii.zghama/viber-mcp"].

Restart Claude Desktop. The Viber tools will appear in the tools menu.

Claude Code

claude mcp add viber-mcp -e VIBER_AUTH_TOKEN=your-bot-token-here -- npx -y @serhii.zghama/viber-mcp

Cursor

Open Settings > MCP Servers, click + Add, and paste:

{
  "viber": {
    "command": "npx",
    "args": ["-y", "@serhii.zghama/viber-mcp"],
    "env": {
      "VIBER_AUTH_TOKEN": "your-bot-token-here"
    }
  }
}

VS Code (Copilot)

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "viber": {
      "command": "npx",
      "args": ["-y", "@serhii.zghama/viber-mcp"],
      "env": {
        "VIBER_AUTH_TOKEN": "your-bot-token-here"
      }
    }
  }
}

Tools

13 tools covering the full Viber Bot API surface:

Messaging

Tool

Description

Key parameters

send_message

Send a text message

receiver, text (up to 7000 chars)

send_picture

Send an image with optional caption

receiver, media (URL), text (caption)

send_video

Send a video

receiver, media (URL), size (bytes)

send_file

Send a file attachment

receiver, media (URL), size, file_name

send_url

Send a clickable link

receiver, media (URL, max 2000 chars)

send_location

Send GPS coordinates

receiver, latitude, longitude

send_contact

Send a contact card

receiver, name, phone_number

broadcast_message

Broadcast to up to 300 users

receivers (array), text

Account & Users

Tool

Description

Key parameters

get_account_info

Get bot profile and subscriber count

none

get_user_details

Fetch user profile (rate-limited: 2/12h per user)

id

get_online

Check online status of up to 100 users

ids (array)

Webhooks

Tool

Description

Key parameters

set_webhook

Register a webhook URL

url, event_types (optional)

remove_webhook

Disable the current webhook

none

All tools validate inputs with Zod schemas before calling the Viber API. On errors, tools return human-readable messages with isError: true so the AI can decide how to proceed.

Full schema details and examples in docs/API_REFERENCE.md.

Configuration

Environment variables, read once at startup:

Variable

Required

Default

Description

VIBER_AUTH_TOKEN

yes

--

Bot auth token from the Viber Admin Panel

VIBER_SENDER_NAME

no

Bot

Default sender display name (max 28 chars)

VIBER_SENDER_AVATAR

no

--

Default sender avatar URL

VIBER_BASE_URL

no

https://chatapi.viber.com/pa

API base URL override

VIBER_REQUEST_TIMEOUT_MS

no

15000

Per-request timeout in milliseconds

Getting a Viber bot token

  1. Open the Viber Admin Panel

  2. Create a new bot account (or select an existing one)

  3. Copy the token from the bot's settings page

  4. Set it as VIBER_AUTH_TOKEN in your MCP client config

Note: Since February 2024, new Viber bot accounts may require commercial onboarding through Viber partners. Existing bot tokens continue to work.

Development

git clone https://github.com/serhiizghama/viber-mcp.git
cd viber-mcp
pnpm install

Command

Description

pnpm build

Build with tsup (ESM, Node 20+)

pnpm dev

Build with file watching

pnpm typecheck

Run TypeScript strict checks

pnpm test

Run vitest (43 tests)

Project structure

src/
  index.ts           -- Entrypoint: config -> client -> server -> stdio
  config.ts          -- Environment variable parsing
  errors.ts          -- ViberApiError class
  server.ts          -- MCP server builder with tool registration
  viber/
    client.ts        -- Typed HTTP client for the Viber REST API
    types.ts         -- Request/response TypeScript interfaces
  tools/
    send-message.ts  -- One file per tool, Zod schema + handler
    ...              -- 12 more tool files
tests/
  viber-client.test.ts   -- Client unit tests (mocked fetch)
  server.test.ts         -- Integration test (spawns server, queries tools/list)
  tools/*.test.ts        -- Per-tool success + error path tests

Architecture decisions

  • Zero console.log -- stdout is the MCP protocol channel; only console.error for diagnostics

  • Native fetch -- no axios/node-fetch; minimal runtime dependencies

  • No retries -- Viber REST calls are user-driven via MCP; silent retries would hide real problems from the AI

  • Zod validation -- every tool input is validated before reaching the Viber API

  • Tools never throw -- errors are caught and returned as { isError: true } so the AI can handle them gracefully

Roadmap

Future work -- contributions welcome:

  • Rich media / carousels -- send_rich_media tool with carousel layout

  • Keyboards -- interactive button keyboards on messages

  • Webhook receiver -- sibling package for incoming events via HTTP

  • Stickers -- send_sticker tool

  • HTTP transport -- Streamable HTTP for remote MCP deployments

License

MIT © Serhii Zghama

Available Tools

13 tools
broadcast_messageB

Send the same text message to up to 300 Viber users at once

Inputs: receivers (required), text (required), sender_name, sender_avatar.

get_account_infoA

Get the Viber bot account configuration including subscriber count and member list

Inputs: no named parameters.

get_onlineB

Check online status of up to 100 Viber users

Inputs: ids (required).

get_user_detailsA

Fetch profile details of a Viber user

Inputs: id (required).

remove_webhookA

Disable the currently registered webhook

Inputs: no named parameters.

send_contactB

Send a contact card to a Viber user

Inputs: receiver (required), name (required), phone_number (required), sender_name, +1 more.

send_fileC

Send a file attachment to a Viber user

Inputs: receiver (required), media (required), size (required), file_name (required), +2 more.

send_locationB

Send GPS coordinates to a Viber user

Inputs: receiver (required), latitude (required), longitude (required), sender_name, +1 more.

send_messageB

Send a text message to a Viber user

Inputs: receiver (required), text (required), sender_name, sender_avatar, +1 more.

send_pictureA

Send an image with optional caption to a Viber user

Inputs: receiver (required), media (required), text, thumbnail, +2 more.

send_urlB

Send a clickable URL to a Viber user

Inputs: receiver (required), media (required), sender_name, sender_avatar.

send_videoC

Send a video to a Viber user

Inputs: receiver (required), media (required), size (required), duration, +3 more.

set_webhookB

Register a webhook URL for receiving Viber events

Inputs: url (required), event_types, send_name, send_photo.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 13 tools

    Disambiguation5/5

    Each tool serves a unique purpose: broadcasting vs single messaging, distinct media types for sends, separate info queries, and webhook management. No overlap.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern in snake_case, e.g., send_message, get_account_info, set_webhook.

    Tool Count5/5

    With 13 tools, the set is well-scoped for a Viber bot, covering essential operations without excess.

    Completeness4/5

    Covers key bot operations: sends, broadcasts, user info, webhooks. Minor gaps like interactive keyboards exist but not critical.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A dead simple MCP server for exposing your app functions to AI agents like Claude Desktop.
      13 npm
      6
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      MCP server for ManyChat API integration that enables Claude and other AI assistants to manage subscribers, tags, custom fields, flows, and send messages through natural language.
      17
      -
    • A
      license
      A
      quality
      C
      maintenance
      MCP server for VibeKit — build, deploy, and manage hosted apps and chat with each app's persistent server-side AI agent from Claude Desktop, Cursor, or any MCP client. Every app gets its own agent and a live URL; bring your own Claude/OpenAI key or pay-as-you-go.
      36
      26 npm
      1
      MIT