# mssgs: full site content

> Generated from https://mss.gs, one markdown document with all key pages. Curated overview: https://mss.gs/llms.txt

---
title: "mssgs - Where your group lives. Group chat for friends."
description: "A group chat for your friends, your clan, your study crew. Your own server, your own rules."
canonical: https://mss.gs/en
language: en
---

# Where your group lives.

A group chat for your friends, your clan, your study crew. Your own server, your own rules.

A little place for every group. Tap one to try it on.

## Calm. Completely yours.

No noise, no clutter, no strangers. Just your group.

### Your server, your rules

Channels, roles, who gets in. Set it up once and it feels like your place.

### DMs off by default

No strangers sliding in. Someone new sends a request first, and you accept or decline.

### Voice, when you want it

Hop into a channel for game night or the drive up. On your phone or desktop.

### Quiet by design

Nothing here is trying to keep you scrolling. Your messages are yours.

### Find each other, live

Share your live location with exactly the people you pick. See your group on the map and find each other faster.

### Ghost Mode

Flip the ghost on and messages vanish once you've both read them. Nothing to scroll back to.

### Chats that lock

Give any conversation its own passcode and open it with Touch ID. For your eyes only.

### Photo channels

A channel that works like a shared photo library. Every trip photo in one grid, instead of somewhere up in the chat.

And that's just the start

## Game night, built in

Challenge your group to a quick round without leaving the chat. Invites drop right into the conversation, and anyone can tap in.

Live demo. Go on, hit join.

Nine games, free with every server. Spectate live, call a rematch, or scan the QR to keep playing from your phone.

## Build on mssgs

Webhooks, triggers and a REST API, plus a built-in MCP server so AI assistants like Claude can read and act in your chats.

## No one reading along.

What your group says in your server stays in your server. That's the whole point of having a place of your own.

## Get your group together

One link invites your whole group, on phone or desktop.

Free to start, no credit card. Full details on the [pricing page](https://mss.gs/en/faq).


---

---
title: "Features - mssgs | Everything you're used to from Slack, Teams or Discord"
description: "Switching from Slack, Teams or Discord? mssgs has all the features you're used to, plus unique functions like shared ownership, custom bots, AI assistants (MCP) and community moderation."
canonical: https://mss.gs/en/features
language: en
---

# Everything you're used to from Slack

mssgs gives your group channels, DMs, voice calls, eight built-in games, file sharing, custom bots, webhooks and smart search. Work accounts add workflow automations.

## What makes mssgs unique

Features you won't find in Slack, Teams or Discord

### Access policy for your whole group

Restrict who can join your group. Only people with an email address on your domain? Invite-only? You have full control, without managing invite codes.

- Domain restriction (@company.com)

- From invite-only to public

- No invite code hassle

- Handy for work groups too

### User Groups

### User groups for your whole group

No more hassle with per-channel permissions. Create groups, assign rights, and manage everything centrally. Add someone to "Developers" and they automatically get access to all relevant channels.

- Permissions for the whole group

- Automatic channel access

- Easier than Discord roles

### Owners

### Shared ownership

Add multiple owners to your group. The primary owner cannot be removed, but other owners have the same rights. Perfect when you run the group together.

- Multiple owners possible

- Primary owner protected

- Not possible in Discord/Slack

#### Deploy completed

Build #1847 deployed to production

### Custom triggers with webhooks

Type /command in any channel and automatically trigger a webhook. No bot needed, no code: just set it up visually and it's available across your whole group.

- Available across the whole group

- No bot or code needed

- Visual webhook configuration

- Not possible in Discord/Slack

#### Incoming DM request

emma wants to start a conversation with you.

### DM Requests off by default

No unwanted DMs or spam. By default, others cannot message you. Anyone new sends a DM request first, and you accept or decline it.

- Privacy on by default

- You approve every new chat

- No spam or unwanted DMs

- Not possible in Discord/Slack

### Community Moderation

In communities, we don't decide what is and isn't allowed: the community does. Volunteer moderators vote independently on reports. Work accounts manage their own moderation.

- Democratic decisions

- No corporate censorship

- Transparent process

- Only in communities

### Ghost messages

Toggle the ghost icon and your messages disappear from everyone's chat right after they're read. No traces in the history, blurred when the window loses focus.

- Auto-delete after viewing

- Marked clearly with START / END markers

- Blurred when the window is unfocused

### Voice recording in any chat

Tap the mic in any channel or DM. Preview your recording, redo it if you flubbed it, or send it instantly. Built right into the chat: no third-party tools needed.

- Live waveform while recording

- Preview before sending

- Cancel, restart or pause anytime

### Share your location with friends

See where your friends are on a live map. Discover who's nearby, what they're up to and meet up faster. You decide who can see you and for how long.

- Per-friend privacy

- Auto-expires after the time you pick

- Activity status (walking, cycling, on the train...)

Met you in the noise. Stayed for the quiet.

### See what your friends are up to

A blue ring around an avatar means a new story is waiting. Tap to watch: friends only, no algorithm, no strangers.

- Friends-only, no public stories

- Auto-expires after 24 hours

- Blue ring while unviewed

### Create stories with filters

Snap a photo, swipe through filters, drop in text or stickers and post. Designed for mobile, with the same friends-only privacy as the rest of mssgs.

- Filters, text and stickers

- Auto-expires in 24 hours

- iOS and Android

### One-view photos

Send a photo that can only be seen once. After it's opened it's gone: for everyone, on every device. No screenshots, no second look.

- Disappears after first view

- Sender sees when (and on which device) it opened

- Works in any DM

#### Set Reminder

### Reminders on any message

Right-click a message and set a reminder. mssgs nudges you when the time comes, even if you're offline. Perfect for follow-ups you don't want to forget.

- Presets from 1 hour to 1 week

- Custom times

- Works across all your devices

### Follow channels with push notifications

Right-click any channel and enable push notifications to get alerts on every new message, even when mssgs isn't open. No more missing important updates.

- Per-channel control

- Works on desktop and mobile

- Disable just as easily

### Always know what's happening

Each DM shows what's new at a glance: Sent, Opened, Viewed. Streaks count up when you and a friend stay in touch every day.

- Sent / Opened / Viewed status

- Daily streak counter with a fire badge

- No more guessing if they saw it

### Photo filters for your city

Anyone can design a photo filter and pin it to a spot: a festival, a campus, your neighborhood. Community moderators approve it, and everyone there can shoot with it.

- Pin it to any spot with a 1-10 km radius

- Community-reviewed before it goes live

- Use filters wherever you are

### A whiteboard in every chat

Open the whiteboard, sketch your idea with brushes, colors and undo, and send it straight into the conversation as an image.

- Colors, brush sizes and an eraser

- Undo when it goes wrong

- Friends see you're drawing while you draw

### Jump anywhere with ⌘K

One shortcut opens the quick switcher. Type a few letters and jump to any server, channel or DM. Your hands never leave the keyboard.

- Searches servers, channels and DMs at once

- Ctrl+K on Windows, ⌘K on Mac

- Ctrl/⌘ 1-9 hops between servers

### Lock a chat behind your fingerprint

Give any DM its own passcode. Open it with Touch ID and it stays out of sight for anyone who borrows your screen.

- A separate passcode per conversation

- Touch ID unlock on Mac

- The code lives in your device keychain, not on our servers

### A photo library, as a channel

Flip a channel into a photo channel and every shot lands in a date-grouped grid: a shared camera roll for your group.

- Grouped by date, like your camera roll

- Everyone can add photos

- Full-screen viewer built in

## All features

Everything you expect from a modern group chat. Read more about encryption and hosting on the [security page](https://mss.gs/en/security).

#### Unlimited channels

Create as many channels as you want. Public, private, or per project. Organize your group the way you want.

#### Voice & video calls

Jump directly into a call from any channel, with camera and screen sharing. No external tools needed.

#### Built-in games

Nine games right in the chat, from Four in a Row to Memory. [See all games](https://mss.gs/en/games).

#### Custom bots

Build bots that work for you. Daily standups, polls, reminders.

#### Search everything

Find any message, file, or link in milliseconds. Filters for channels, people, and dates. Search through the complete history.

#### Permission management

Determine who can see and do what. Admin roles and channel permissions.

#### Smart notifications

Mentions, keywords, and custom alerts. Set when you want to be disturbed and when not.

#### Reminders

Set reminders for yourself or your group.

#### Replies & quotes

Reply to any message or quote it to keep the context.

#### File sharing

Share files up to 100MB. Preview directly in the chat.

#### Emoji reactions

React quickly with emojis. Custom emojis possible.

#### Mobile apps

Native apps for iOS and Android.

#### Desktop apps

Mac, Windows and Linux.

## Works with your favorite tools

Integrate with the tools you already use. [See all integrations](https://mss.gs/en/integrations).

#### GitHub

Commits, PRs, and issues directly in your channel

#### Unifi

Network alerts in your chat

#### Webhooks

Connect any tool with webhooks

#### REST API

Build custom integrations

#### AI assistants (MCP)

Connect Claude or other AI tools via the built-in [MCP server](https://mss.gs/en/docs/mcp). You choose which channels they see.

#### Hardware

Control local devices like Philips Hue and Daikin air conditioners from the app

#### Build your own integrations

Our REST API gives you full control. Build bots, integrations, or complete apps on top of mssgs.

## Frequently asked questions

**What features does mssgs have?**

Channels, voice calls, built-in games, file sharing, custom bots, webhooks and smart search. Work accounts also get workflow automations. See the [features page](https://mss.gs/en/features) for the full overview.

**Which games are included?**

Nine games you play right in the chat, including Four in a Row, Battleship, Checkers and Memory. See them all on the [games page](https://mss.gs/en/games).

**Does mssgs have video calls?**

Yes. Calls support voice, camera and screen sharing, in channels and DMs.

**Can I share files?**

Yes, you can share files in chats.

**Does mssgs have an API?**

Yes, there is a REST API for custom integrations and bots.

**What integrations are available?**

Native integrations with GitHub and Unifi. Plus webhooks for anything you want to build yourself. Details on the [integrations page](https://mss.gs/en/integrations).

**Does mssgs work offline?**

No, mssgs requires an internet connection.

**Is there a mobile app?**

Yes, there are native apps for iPhone and Android.

## Explore all features


---

---
title: "Security - mssgs | E2E Encryption, EU Hosting & GDPR Compliant"
description: "Security without compromise. End-to-end encryption, 100% EU hosting, GDPR compliant. Your data is safe with mssgs."
canonical: https://mss.gs/en/security
language: en
---

# Security without compromise

mssgs stores all data on servers in the EU (Netherlands/Germany), encrypts private chats end-to-end and encrypts all data with AES-256 at rest and TLS in transit. Two-factor authentication is available and mssgs is fully GDPR compliant.

Built with privacy and security as a foundation, not as an afterthought

### Data Encryption

End-to-end encrypted private chats

AES-256 for all stored data

### EU Hosting

Servers in the Netherlands and Germany

Your data never leaves Europe

### Access Control

2FA for all accounts

Granular permission management

## Data Encryption

Your messages are secure, from sender to recipient

#### In Transit

TLS 1.3 for all connections

#### At Rest

AES-256 encryption for stored data

#### Private Chats

End-to-end encrypted (Signal protocol)

#### Key Management

Keys are never stored in plaintext

**We cannot read your private messages** - and we don't want to. Private conversations are encrypted from sender to recipient.

## Infrastructure

100% European servers, no US cloud providers

#### Datacenters

The Netherlands (Dutch hosting provider)

#### Uptime SLA

99.5% guaranteed

#### Backups

Daily, encrypted, 30-day retention

#### DDoS Protection

Enterprise-grade protection

**No American cloud providers** - No AWS US, no Azure US. No CLOUD Act risks, no hassle with data transfers.

## Authentication & Access

Multiple layers of protection for your account

#### 2FA

TOTP (Google Authenticator) or SMS

#### Sessions

Automatic timeout, device management

#### Passwords

Minimum 12 characters, bcrypt hashing

#### Additional security measures

- Brute force protection with rate limiting

- Suspicious login detection

- Manage active sessions from your account

- Login notifications via email

## Compliance

GDPR not as a checkbox, but as a design principle

#### Data Processing Agreement

Directly available for business customers

#### Right to be Forgotten

Complete data deletion upon request

#### Data Portability

Export all your data in standard formats

#### Transparency

Full insight into processed data

## Operational Security

How we handle security internally

- **Employees:** Background checked and screened

- **Access to customer data:** Only with explicit permission for support

- **Logging:** Comprehensive audit logs of all access

- **Monitoring:** 24/7 security monitoring

- **Incident Response:** Documented procedure, notification within 72 hours

## Vulnerability Management

Continuously improving our security

#### Security Audits

Regular external audits

#### Penetration Testing

Annual pentests by third parties

#### Update Policy

Critical patches within 24 hours

#### Responsible Disclosure

security@mss.gs

## Frequently asked questions about security

**Can you read my messages?**

No. Private chats are end-to-end encrypted. Even we cannot read these messages. Channel messages are stored encrypted, but not E2E - this is needed for features like search.

**Where exactly is my data stored?**

In the Netherlands, with a Dutch hosting provider. We do not use American cloud providers like AWS or Azure.

**What happens in case of a data breach?**

We have an incident response procedure. In case of a data breach, affected customers and the Data Protection Authority are notified within 72 hours, in accordance with GDPR.

**Do you have a data processing agreement?**

Yes, a standard data processing agreement is available for all business customers. Contact us at privacy@mss.gs for a copy.

**Do you perform penetration tests?**

Yes, we have annual external penetration tests performed by certified security companies. Additionally, we conduct continuous internal security reviews.

**How do I report a security issue?**

Through our responsible disclosure: security@mss.gs. We take all reports seriously and respond within 48 hours.

**Is mssgs GDPR compliant?**

Yes, fully. We can also sign a data processing agreement if you need one.

**Is my data sold?**

No, never. We make money from the product, not from your data.

**Is there 2FA?**

Yes, two-factor authentication is available for all accounts.

## Want to know more about our security?

Contact our security team for specific questions. The full details are in our [privacy policy](https://mss.gs/en/company/privacy).


---

---
title: "FAQ - Frequently Asked Questions | mssgs"
description: "Answers to frequently asked questions about mssgs. Features, games, privacy, security, and more. Find what you are looking for quickly."
canonical: https://mss.gs/en/faq
language: en
---

# Frequently Asked Questions

Everything you want to know about mssgs

## General

**What is mssgs?**

mssgs is a group chat app for you and your friends. Channels, DMs, voice and built-in games, with your data in the EU.

**Who is behind mssgs?**

mssgs is built by RUAL, a Dutch software company from Brummen with 15+ years of experience in software. More on the [about page](https://mss.gs/en/about).

**Is mssgs a startup?**

No. mssgs is a product of an existing, profitable company. We are bootstrapped - no VC money, no growth-at-all-costs mentality.

**Does mssgs work on my device?**

mssgs has native apps for iPhone, Android, Mac and Windows. All downloads are on the [downloads page](https://mss.gs/en/downloads).

**Can I use mssgs for work too?**

Yes. mssgs is made for friend groups and communities, but you can also choose a work account when signing up. See also the [use cases](https://mss.gs/en/use-cases).

## Features & Technical

**What features does mssgs have?**

Channels, voice calls, built-in games, file sharing, custom bots, webhooks and smart search. Work accounts also get workflow automations. See the [features page](https://mss.gs/en/features) for the full overview.

**Which games are included?**

Nine games you play right in the chat, including Four in a Row, Battleship, Checkers and Memory. See them all on the [games page](https://mss.gs/en/games).

**Does mssgs have video calls?**

Yes. Calls support voice, camera and screen sharing, in channels and DMs.

**Can I share files?**

Yes, you can share files in chats.

**Does mssgs have an API?**

Yes, there is a REST API for custom integrations and bots.

**What integrations are available?**

Native integrations with GitHub and Unifi. Plus webhooks for anything you want to build yourself. Details on the [integrations page](https://mss.gs/en/integrations).

**Does mssgs work offline?**

No, mssgs requires an internet connection.

**Is there a mobile app?**

Yes, there are native apps for iPhone and Android.

## Privacy & Security

**Where is my data stored?**

100% on servers in the EU (Netherlands/Germany). Your data never leaves Europe.

**Is mssgs GDPR compliant?**

Yes, fully. We can also sign a data processing agreement if you need one.

**Can you read my messages?**

No. Private chats are end-to-end encrypted. We have no access to the content.

**Is my data sold?**

No, never. We make money from the product, not from your data.

**What about encryption?**

Private chats: end-to-end encrypted. All data: AES-256 encrypted at rest, TLS in transit. More details on the [security page](https://mss.gs/en/security).

**What if there is a data breach?**

We will inform you within 72 hours in accordance with GDPR. We have incident response procedures and regular security audits.

**Is there 2FA?**

Yes, two-factor authentication is available for all accounts.

## Pricing

**How much does mssgs cost?**

mssgs is free to start. No credit card needed.

**Is there an account for teams and businesses?**

Yes. When creating an account you choose between a group account and a work account.

## Account & Support

**How do I create an account?**

Go to mss.gs and click on 'Create account'. You can start immediately.

**How do I get support?**

Email us at support@mss.gs. We usually respond within 24 hours.

**Can I export my data?**

Yes, you can export all your data at any time. Full data portability.

**How do I cancel?**

Email us at support@mss.gs and we will take care of it.

**What happens to my data when I stop?**

You get 30 days to export your data. After that, everything is permanently deleted.

## Question not answered?

Get in touch and we will help you out.


---

---
title: "Downloads - mssgs | Download for iOS, Android, Mac, Windows & Linux"
description: "Download mssgs for all your devices. Available for iOS, Android, macOS, Windows and Linux. Sync seamlessly across all your devices."
canonical: https://mss.gs/en/downloads
language: en
---

# Download mssgs

Available on all your devices. Install the app and get started.

[See the latest release notes](https://mss.gs/en/releases)

### iPhone

Download for iPhone and iPad from the App Store.

### Android

Download for Android from the Google Play Store.

### Mac

Native app for macOS. Optimized for Apple Silicon.

### Windows

Desktop app for Windows 10 and later.

### Linux

Desktop app for Ubuntu, Fedora and other distributions.

### Browser

Use mssgs directly in your browser. No installation required.

### Seamless synchronization

Your messages, channels and files are automatically synchronized across all your devices. Start a conversation on your phone and continue on your laptop.

## Ready to get started?


---

---
title: "Games - mssgs | Game night, built in"
description: "Play Four in a Row, Battleship, Checkers, Memory and more, right inside your group chat. Free with every server."
canonical: https://mss.gs/en/games
language: en
---

# Game night, built in

Challenge your group to a quick round without leaving the chat. Invites drop right into the conversation, and anyone can tap in.

### Drop an invite

Pick a game in any chat. The invite lands in the conversation, with a room code on the card.

### Anyone taps in

Your group joins straight from the message. No setup, no extra apps.

### Play right there

The board opens in mssgs, on your phone or desktop.

## Pick your game

### Four in a Row

Drop discs and connect four before your friend does.

### Battleship

Call your shots and sink the fleet.

### Checkers

The classic, captures and kings included.

### Word Guesser

Guess the word before the others do.

### Snake

The classic, but against your friends.

### Snake Capture

Claim territory and cut your rivals off.

### Polymono

The long game. Friendships will be tested.

### Tegostrat

Capture the flag; enemy ranks stay hidden until battle.

### Memory New

Flip two cards, keep the pairs you remember.

Free with every server. More on the way. See also [all features](https://mss.gs/en/features) and [game nights](https://mss.gs/en/use-cases).

## Memory

Matching pairs on a shuffled grid, 4x4 up to 8x8. Turn over two cards: a pair is yours and you go again, a miss flips back and hands the turn over. Most pairs when the board empties wins.

## Get your group together

One link invites your whole group, on phone or desktop.


---

---
title: "Use Cases - mssgs | Group chat for friends, gamers & clubs"
description: "mssgs for your group. Friend groups, game nights, study groups, clubs and communities - discover what mssgs can do for you."
canonical: https://mss.gs/en/use-cases
language: en
---

# mssgs for your group

Friends, gamers, study groups or your whole club - mssgs adapts

### Friend groups

One place for your whole friend group. Make plans, share photos, send memes and hang out in voice.

- Channels for every topic

- Voice calls without extra tools

- Games right in the chat

### Game nights

Voice on, squad in, night planned. And in between you challenge each other to a match right in the chat.

- Built-in games like Memory and Four in a Row

- Channels per game or per squad

- Voice calls while you play

### Study groups

Notes, deadlines and practice questions in one place. Everyone can find everything back.

- Share files in the chat

- Everything stays searchable

- Apps for iPhone, Android, Mac and Windows

### Clubs & societies

From football team to book club. Keep everyone in the loop without endless group texts.

- Channels per team or committee

- Invite new members easily

- No ads, no tracking

### Family

Birthdays, holidays and the everyday stuff. Private, without your data being sold on.

- DMs and group channels

- Encrypted DMs

- Data 100% in the EU

### Communities & Creators

Build your own community without depending on Big Tech. Your group, your rules.

- Your own place for your community

- No ads, no tracking

- You are the owner, not Discord

### Didn't find what you were looking for?

Using mssgs for work is possible too: pick a work account when signing up. Coming from [Discord](https://mss.gs/en/mssgs-vs-discord), [Slack](https://mss.gs/en/mssgs-vs-slack) or [Teams](https://mss.gs/en/mssgs-vs-teams)? Check the comparisons. Or get in touch, we are happy to think along.

## Ready to start?


---

---
title: "Integrations - mssgs | Bots, AI (MCP), Webhooks & GitHub"
description: "Connect mssgs with the tools you already use. Build custom bots, connect AI assistants like Claude over MCP, and wire up GitHub, Unifi, webhooks and the REST API."
canonical: https://mss.gs/en/integrations
language: en
---

# Integrations

Connect mssgs with the tools you already use

## Ready to use

### GitHub

Get notifications of commits, pull requests, issues, and releases directly in your mssgs channels.

- Push notifications

- PR reviews and comments

- Issue updates

- Release alerts

### Unifi

Receive network alerts directly in your mssgs channel. Stay informed about your infrastructure.

- Device alerts

- Connection events

- Network status

## Build your own integration

Everything you need to connect mssgs with your own tools

### Webhooks

Send data to mssgs from any tool that supports webhooks. Receive events from mssgs in your own systems.

- Incoming webhooks (post to channel)

- Outgoing webhooks (trigger on messages)

- Custom payload formatting

### REST API

Full API for custom integrations. Send messages, manage channels, query users and more.

- Messages, Channels, Users endpoints

- Authentication via Bearer tokens

- Callback URLs for live message updates

### Custom Bots

Build bots that respond to messages, mentions, or slash commands. Automate tasks within your workspace.

- Respond to mentions

- Slash commands (coming soon)

- Interactive messages

### Missing an integration?

Let us know which integrations you need. We listen to our users.

## Try the integrations yourself


---

---
title: "About us - mssgs | Built by RUAL"
description: "mssgs is built by RUAL, a Dutch software company with 15+ years of experience in software. Learn more about the team behind mssgs."
canonical: https://mss.gs/en/about
language: en
---

# Built by RUAL

The Dutch software company behind mssgs

## Why we built mssgs

For years, we used Discord for our internal communication. It worked fine at first. But Discord kept getting worse: ads in the app, clunky redesigns, and more and more noise.

On top of that, all our data was stored in the US, without real control over privacy. As a European company, that felt increasingly uncomfortable. We looked for alternatives, but everything was either too expensive, too limited, or also American.

So we built it ourselves. mssgs is what we were missing: a place for your group that just works, with your data in Europe, without ads. What started as our own chat is now a group chat app for everyone: friends, families, [communities](https://mss.gs/en/creators), and yes, teams too.

## About RUAL

RUAL is a Dutch software company from Brummen, specializing in no-code platforms and custom business software. Since 2009, we've been helping companies automate their processes, from small startups to large enterprises.

mssgs is our newest product. Built with the same philosophy as all our software: powerful and simple. No venture capital, no growth-at-all-costs. Just a good product.

## What we stand for

### Privacy first

Your data is yours. We don't read your messages, don't sell anything to third parties, and keep everything on servers in the EU. No American jurisdiction, no gray areas. Read more on the [security page](https://mss.gs/en/security).

### Long-term thinking

We build software that lasts for years. No quick fixes, no half-working features to hit a release date. If something is in mssgs, it works.

## The team

A small team of developers, designers, and support staff in Brummen. We build software we're proud of ourselves, and that we use every day.

## Try mssgs


---

---
title: "mssgs vs Slack - The European Slack alternative"
description: "mssgs vs Slack comparison. Same features, your data in the EU. Slack alternative Europe."
canonical: https://mss.gs/en/mssgs-vs-slack
language: en
---

# mssgs vs Slack

Same features. Your data in the EU.

## Full comparison

mssgs is a European alternative to Slack: the same core features (channels, DMs, voice calls and integrations), with all data hosted 100% in the EU (Netherlands/Germany). Below is the full feature-by-feature comparison.

|  | Slack | mssgs |
| --- | --- | --- |
| **Company** |  |  |
| Company | American (Salesforce) | Dutch (EU) |
| Data location | United States | 100% Netherlands |
| **Privacy & security** |  |  |
| End-to-end encryption (DM) | No | Yes |
| AI analysis of messages | Yes (training data) | None |
| DM spam protection | DMs always open | DM requests off by default |
| Bulk delete messages | No | Yes |
| **Unique features** |  |  |
| Webhooks | Per channel only | Global + per channel |
| Custom triggers (/command → webhook) | No | Yes |
| Multiple owners per group | No | Yes |
| User groups | Per channel only | Built-in |
| Email domain restriction | No | Built-in |
| Self-hosting possible | No | On request |
| **Standard features** |  |  |
| Channels | Yes | Yes |
| Voice calls | Yes | Yes |
| Bots & integrations | Yes | Yes |
| Mobile app performance | Medium | Fast |
| Desktop app performance | Medium | Fast |

## Why people switch

### Data in Europe

Your data stays in Dutch data centers. No CLOUD Act risks, no transfer problems.

### No vendor lock-in

Dutch company, direct support. No dependency on Big Tech.

### Personal support

Support from people who understand your situation. No ticket carousel.

### Everything you're used to from Slack

- Channels, DMs, replies & quotes

- Mentions and reactions

- File sharing

- Search through everything

- Mobile apps

- Desktop apps

### Plus a few extras

- EU data residency

- E2E encryption for DMs

- Custom triggers

- Multiple owners per group

- No vendor lock-in

## Switching is easy

Get started in three steps

#### Create a mssgs account

Free to start, no credit card needed. Set up your first channels.

#### Invite your people

Send invitations via email or share an invite link.

#### Bring your history

Optional: export your Slack data and get in touch, we will help you make the switch.

Need help? We're happy to assist with the migration. [Contact us](https://mss.gs/en/contact). More questions? See the [full FAQ](https://mss.gs/en/faq).

## Frequently asked questions

**Can I import my Slack data?**

Export your Slack workspace and get in touch, we will help you make the switch.

**How long does switching take?**

Most teams are fully switched within a day. The basic setup takes 15 minutes, then it's just a matter of inviting your team.

**What if my group is used to Slack?**

mssgs works almost identically to Slack. Channels, DMs, replies & quotes, mentions, reactions - everything works as expected. The learning curve is minimal.

**Is mssgs a good Slack alternative for European companies?**

Yes. mssgs offers the same core features as Slack (channels, DMs, voice calls and integrations), with all data hosted 100% in the EU (Netherlands/Germany). It is GDPR-compliant and a data processing agreement is available.

**How much does mssgs cost compared to Slack?**

mssgs is free to start, no credit card needed. When creating an account you choose between a group account and a work account.

**Where is mssgs data stored?**

100% on servers in the EU (Netherlands/Germany). Private chats are end-to-end encrypted and all data is AES-256 encrypted at rest.

### Also check out

## Ready for a better alternative?


---

---
title: "mssgs vs Discord - Privacy-first alternative"
description: "mssgs vs Discord comparison: EU data, no AI analysis, community moderation, and built-in bots with AI assistants (MCP). The privacy-first Discord alternative for communities."
canonical: https://mss.gs/en/mssgs-vs-discord
language: en
---

# mssgs vs Discord

Your data, your rules, your privacy. Without Big Tech.

## Full comparison

mssgs is a privacy-friendly alternative to Discord: channels, voice calls and eight built-in games, with all data hosted 100% in the EU (Netherlands/Germany) and end-to-end encryption for private chats. Below is the full feature-by-feature comparison.

|  | Discord | mssgs |
| --- | --- | --- |
| **Company & data** |  |  |
| Company | American | Dutch (EU) |
| Data location | United States | 100% Netherlands |
| Advertisements | Nitro pop-ups | None |
| **Privacy & security** |  |  |
| End-to-end encryption (DM) | No | Yes |
| AI analysis of messages | Yes | None |
| DM spam protection | DMs always open | DM requests off by default |
| Bulk delete messages | Only per message | Yes |
| Self-hosting possible | No | On request |
| **Moderation & control** |  |  |
| Moderation | By Discord employees | By the community |
| Multiple owners per group | No | Yes |
| User groups | Only roles per channel | Permissions for your whole group |
| Email domain restriction | No | Restrict access to your own domain |
| **Bots, webhooks & AI** |  |  |
| Bots | Separate bot app + your own hosting | Built in, no hosting or bot account |
| AI assistants (MCP) | No | Claude & others, 127 tools |
| Webhooks | Only per channel | Global + per channel |
| Custom triggers (/command → webhook) | No | No code needed |
| **Standard features** |  |  |
| Channels and categories | Yes | Yes |
| Voice calls | Yes | Yes |
| Bots & integrations | Yes | Yes |
| Mobile app performance | Medium | Fast |
| Desktop app performance | High | Fast |

## Bots & AI assistants

Everything you build with Discord bots, without the separate bot account or hosting, plus an AI layer Discord doesn't have.

### Bots that are built in

Post rich cards, run interactive buttons and automate your community with [bot messages](https://mss.gs/en/docs/bots), [webhooks and triggers](https://mss.gs/en/docs). No third-party bot to invite, no server to keep running.

### AI-native, via MCP

mssgs ships a built-in [MCP server](https://mss.gs/en/docs/mcp) so Claude and other AI tools can read and act in your chat: 127 permissioned tools. Discord has no equivalent.

### Private by design

You pick exactly which channels a bot or AI assistant can see, and it runs locally on your own machine. Your community's data never leaves your control.

## Why communities switch

### Your data, your rules

Discord reads and analyzes your messages. With mssgs, your data stays yours. No AI training, no advertising profiles.

### Data in Europe

Your community data stays in Dutch data centers. No CLOUD Act, no American jurisdiction.

### Community moderation

Not Discord, but the community decides what is and isn't allowed. Democratic moderation by volunteers.

### No pop-ups and ads

No Nitro pop-ups, no server boost hassle. Just a clean interface without distractions.

### Everything you're used to from Discord

- Channels and categories

- Voice channels

- Roles and permissions

- Bots and integrations

- Mobile and desktop apps

- Reactions and emojis

### Plus a few extra things

- E2E encryption for DMs

- DM requests (no spam)

- Multiple owners per group

- Community moderation

- No ads or pop-ups

- EU data location

## Switching is easy

Get started in three steps

#### Create an mssgs account

Free to start. No credit card needed.

#### Set up your group

Create channels and categories. Configure roles and permissions.

#### Invite your community

Share an invite link in your Discord server and help your members switch.

Need help? We're happy to assist with the migration. [Contact us](https://mss.gs/en/contact). More questions? See the [full FAQ](https://mss.gs/en/faq).

## Frequently asked questions

**Why would I use mssgs when Discord is free?**

With Discord, you pay with your data and privacy. Your messages are analyzed, you constantly see Nitro pop-ups, and an American company has control over your community. With mssgs, you have control.

**Can I migrate my Discord community?**

Yes, you can manually recreate your channel structure. There is no automatic import from Discord, but most communities have switched within a day.

**What is community moderation?**

With mssgs communities, volunteer moderators from the community vote on reports. Not a company, but the community decides what is acceptable.

**Is mssgs a good Discord alternative?**

Yes, for groups that want more privacy. mssgs has channels, voice calls and eight built-in games, with all data hosted in the EU, DM requests off by default, and end-to-end encryption for private chats.

**Does mssgs have games like Discord?**

Yes. Nine games you play directly in the chat, including Four in a Row, Battleship, Checkers and Memory.

**Is mssgs free like Discord?**

mssgs is free to start, no credit card needed. When creating an account you choose between a group account and a work account.

### Also compare

## Ready for real privacy?


---

---
title: "mssgs vs Microsoft Teams - Faster and simpler"
description: "mssgs vs Teams comparison. Faster and simpler than Teams. 100% EU data, no Microsoft lock-in. Teams alternative Netherlands."
canonical: https://mss.gs/en/mssgs-vs-teams
language: en
---

# mssgs vs Microsoft Teams

Faster, simpler, and without the Microsoft overhead.

## Full comparison

mssgs is a chat-first alternative to Microsoft Teams: fast channels, DMs and voice calls without the meeting-first workflow, with all data hosted 100% in the EU (Netherlands/Germany). Below is the full feature-by-feature comparison.

|  | Teams | mssgs |
| --- | --- | --- |
| **Company** |  |  |
| Company | American (Microsoft) | Dutch (EU) |
| Data location | US/EU mix | 100% Netherlands |
| **Privacy & security** |  |  |
| End-to-end encryption (DM) | No | Yes |
| AI analysis of messages | Yes (Copilot) | None |
| DM spam protection | DMs always open | DM requests off by default |
| Bulk delete messages | No | Yes |
| **Unique features** |  |  |
| Webhooks | Per channel only | Global + per channel |
| Custom triggers (/command → webhook) | No | Yes |
| Multiple owners per group | No | Yes |
| User groups | Via Azure AD | Built-in |
| Email domain restriction | Via Azure AD | Built-in |
| Self-hosting available | No | On request |
| **Standard features** |  |  |
| Channels | Yes | Yes |
| Voice calls | Yes | Yes |
| Bots & integrations | Yes | Yes |
| Mobile app performance | Slow | Fast |
| Desktop app performance | Slow | Fast |

## Why people are switching

### Faster, much faster

Teams is known for its slow performance. mssgs starts in seconds and stays responsive, even on older hardware.

### 100% EU data

Teams mixes data between the US and EU. With mssgs, everything stays in the Netherlands. No ambiguity, no compliance risks.

### No Microsoft lock-in

No Azure AD required, no Office 365 subscription. mssgs works standalone, without the Microsoft ecosystem dependency.

### No AI in your messages

Microsoft analyzes your messages for Copilot. With mssgs, your data stays yours - no AI training, no analysis.

### Everything you're used to from Teams

- Channels and teams

- Voice calls

- File sharing

- Chat and DMs

- Mobile and desktop apps

- Bots and webhooks

### Plus a few extras

- Much better performance

- 100% EU data location

- E2E encryption for DMs

- No Azure AD required

- Custom triggers

## Switching is easy

Get started in three steps

#### Create a mssgs account

Free to start, no credit card needed. Set up your first channels.

#### Set up integrations

Optional: connect GitHub, webhooks or your own bots.

#### Invite your people

Send invitations and let everyone experience the speed.

Need help? We're happy to assist with the migration. [Contact us](https://mss.gs/en/contact). More questions? See the [full FAQ](https://mss.gs/en/faq).

## Frequently asked questions

**Does mssgs work with Microsoft 365?**

mssgs works standalone alongside Microsoft 365: you don't need an Office 365 subscription or Azure AD. Share OneDrive/SharePoint links in chat, or connect your own tooling via webhooks.

**How does the performance compare?**

mssgs is significantly faster than Teams. The app starts in seconds, messages appear instantly, and the interface stays responsive - even with large groups.

**What about SharePoint and OneDrive integration?**

mssgs has its own file sharing, but you can share links to SharePoint and OneDrive. For deeper integration, you can use webhooks.

**Is mssgs a good Microsoft Teams alternative?**

For chat-first teams, yes. mssgs focuses on fast chat, voice calls and integrations instead of a meeting-first workflow. Work accounts include workflow automations, with all data hosted in the EU.

**Where is mssgs data stored?**

100% on servers in the EU (Netherlands/Germany). Private chats are end-to-end encrypted and all data is AES-256 encrypted at rest.

### Also see

## Ready for a better alternative?


---

---
title: "Developer docs - mssgs | Bots, agents, MCP, Game SDK & webhooks"
description: "Everything you can build on mssgs: bot messages, AI agents in a channel, the built-in MCP server, the Game SDK, webhooks and triggers, and the release notes."
canonical: https://mss.gs/en/docs
language: en
---

# Build on mssgs

Bots, AI agents, MCP, games and webhooks. Everything below is built into mssgs itself: no separate bot account to register, nothing to host.


---

---
title: "Webhook docs - mssgs | Incoming webhooks, triggers & actions"
description: "mssgs API documentation. Build integrations and bots with webhooks, custom triggers and the REST API. Including examples, error codes and interactive actions."
canonical: https://mss.gs/en/docs/webhooks
language: en
---

# Webhooks & Integrations

Build bots, automations and integrations with mssgs webhooks and triggers

#### Bot Messages

Rich embed cards, interactive buttons and live-updating messages for bots.

#### Agent support

AI agents that work in a channel, running on a computer somebody offered.

#### Release notes

New features and fixes in every mssgs release.

## Getting Started

With mssgs webhooks you can send messages to channels and build interactive bots that respond to commands.

#### Create a webhook

Go to Server Settings > Integrations and create a new webhook or trigger.

#### Copy the URL

Copy the webhook URL or trigger GUID for your integration.

#### Start building

Send JSON payloads to the webhook URL to post messages.

#### Two ways to integrate

**Incoming Webhooks**: Send messages to mssgs from external tools (CI/CD, monitoring, etc.) **Webhook Triggers**: Build interactive bots that respond to commands and button clicks.

## Incoming Webhooks

Send messages to a channel via a webhook URL. Perfect for CI/CD notifications, monitoring alerts, and other automations.

### Request structure

Send a POST request with your message payload as JSON body to the webhook URL. Generate the URL in the app under **Manage Server → Webhooks**; the URL itself authenticates the request, so you don't send a token in the body.

If the webhook has a **Webhook Secret** set, also send a signature of the raw request body in the X-Mssgs-Signature header, in the form sha256=<hex> . An unsigned request then gets 401 with {"error": "INVALID_SIGNATURE"} .

```json
{
  "content": "Hello from my integration!",
  "color": "green",
  "title": "My Bot"
}
```

### Simple Format

The simplest way to send a message.

```json
{
  "content": "Server backup completed at 03:00 UTC",
  "color": "green",
  "title": "Backup Bot"
}
```

| Field | Type | Description |
| --- | --- | --- |
| content | string | Message text required |
| color | string | blue , green , orange , red , yellow , purple |
| title | string | Title above the message |
| title_url | string | Makes the title a clickable link |
| sub_title | string | Smaller text below the title |
| avatar_url | string | Avatar image URL |

### Full Format (message_container)

For more control over the message, use the full message_container object.

```json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Order Update",
    "description": "Your order #12345 has been shipped!",
    "title_url": "https://example.com/orders/12345",
    "sub_title": "Estimated delivery: Tomorrow",
    "bot_name": "Order Bot",
    "fields": [
      { "field": "Status", "value": "Shipped" },
      { "field": "Tracking", "value": "ABC123456" }
    ]
  },
  "actions": [...]
}
```

| Field | Type | Description |
| --- | --- | --- |
| type | string | embed_message (default) or system_message |
| color | string | Accent color of the message |
| title | string | Title of the message |
| description | string | Main text required |
| title_url | string | Link behind the title |
| sub_title | string | Subtitle text |
| bot_name | string | Custom bot name |
| avatar_url | string | Avatar image |
| fields | array | Key-value fields |

### Fields

Add structured key-value data to your message.

```json
{
  "fields": [
    { "field": "Status", "value": "Completed" },
    { "field": "Duration", "value": "2m 34s" },
    { "field": "Environment", "value": "Production" }
  ]
}
```

### Attachments

Post real files with a webhook message: a log dump, a report, a capture. They render like the attachments on any other message, as downloadable file rows or as inline media for images, video and audio.

An attachment-only message is valid. Send attachments without content and without message_container , and the card is just the file.

```json
{
  "message_container": {
    "type": "embed_message",
    "color": "orange",
    "title": "Log dump: ios",
    "description": "DMs stopped arriving after switching networks"
  },
  "attachments": [
    {
      "name": "mssgs-logs-20260803-141205.log",
      "content_base64": "MjAyNi0wOC0wMyAxNDoxMjowNSBbV1NdIGNvbm5lY3RlZAo=",
      "mime_type": "text/plain"
    }
  ]
}
```

#### Attachment fields

| Field | Type | Description |
| --- | --- | --- |
| name | string | File name, and the name it downloads as. Reduced to its base name; a path or a ../ prefix is stripped, not honoured required |
| content_base64 | string | The file's bytes as base64 (raw, or a data: URI). Uploaded into the channel server-side and delivered as a hosted file; the base64 itself is never stored on the message |
| mime_type | string | Content type of content_base64 . Wins over the type inside a data: URI. Defaults to text/plain |
| url | string | An mssgs-hosted file you already uploaded: a path ( /static/... ) or an absolute https://mss.gs/... URL, which is normalized down to its path |

Send exactly one of content_base64 or url per entry. Sending both is an error, sending neither is an error.

#### Limits

| Limit | Value |
| --- | --- |
| Attachments per message | **5** |
| Size per attachment (decoded) | **8 MB** |
| File name length | 200 characters |

The 8 MB cap is per file after base64 decoding. Base64 expands by 4/3, so a full-size attachment is about 10.7 MB of JSON. The request cap is 16 MB, so one maximal attachment fits and two do not.

#### Why url only accepts mssgs hosts

A webhook URL is a bearer credential that often gets pasted into third-party dashboards. A leaked one must not become a way to render arbitrary remote content, or to make every client in the channel issue a request to a host the sender picked. If your bytes live on another host, send them as content_base64 and mssgs hosts them for you.

Accepted: /static/... , https://mss.gs/... , https://www.mss.gs/... . Anything else returns INVALID_ATTACHMENT_URL .

#### Check the response body, not the HTTP status

The public webhook route answers 200 OK even when your payload was rejected; the error only exists in the body. Treat a JSON body containing error as a failure regardless of status code. See [Errors](#errors) for the codes and the statuses that are returned honestly.

#### A failed upload is silent

Validation happens up front, but the upload itself happens later. If that upload fails, that attachment is dropped and the rest of the message still posts, with no error returned. This is intentional: losing the file beats losing the report. If a file is critical, verify it landed instead of assuming a non-error response means it did. If every attachment fails to upload, the attachments key is removed from the message entirely.

#### Attachment only

```json
{
  "attachments": [
    { "name": "nightly-report.csv", "url": "/static/mu/ab12/nightly-report.csv" }
  ]
}
```

```bash
curl -sS -X POST "$MSSGS_WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d '{"attachments":[{"name":"report.csv","content_base64":"'"$(base64 < report.csv | tr -d '\n')"'","mime_type":"text/csv"}]}'
```

```javascript
async function postWebhookAttachment (webhookUrl, name, bytes, mimeType) {
  const res = await fetch(webhookUrl, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      attachments: [{
        name,
        content_base64: Buffer.from(bytes).toString('base64'),
        mime_type: mimeType
      }]
    })
  });

  // The public webhook route answers 200 even when the payload was rejected;
  // the error only exists in the body. Check both.
  const body = await res.json().catch(() => null);
  if (!res.ok || (body && body.error)) {
    throw new Error(`webhook rejected: ${body?.error ?? res.status}`);
  }
  return body;
}
```

#### Good to know

**Attachments count as content.** A message with attachments and nothing else passes the content check, so you don't need filler text. ** allow_images: false does not block attachments.** That per-webhook option strips pictures out of the card itself ( image_url , image_base64 , the images gallery). It does not touch attachments , so a webhook with images disabled can still post a .png as a file attachment, which clients render inline like any other image attachment. There is currently no per-webhook switch for attachments; the only control is the webhook URL itself. **A hosted attachment is stored as {name, url, guid} ** on the message. The content_base64 you sent is never persisted.

## Build your embed

Edit the fields or the JSON payload. Both stay in sync. Watch the message render exactly as it will in a channel. This is the real webhook body; copy it when it looks right.

## Webhook Triggers

Webhook triggers let you connect external services to your server. When a user types a matching command (e.g. /help ) or clicks an action button, the backend POSTs to your webhook URL. Your webhook responds with JSON to post a message back to the channel.

#### User types a command

A user sends a message starting with your trigger's prefix, e.g. /help

#### mssgs calls your webhook

The backend sends a POST request to your configured webhook URL with the message data.

#### You respond with JSON

Your server returns a JSON response with the message content, embeds and actions.

#### Message appears in channel

mssgs displays the response as a message in the channel.

### Request Your Webhook Receives

When a user sends a message that starts with your trigger's trigger_match prefix:

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "/help how do I create a channel?",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"]
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

#### Request via Action Button

When triggered via a trigger:{guid} action button, the content is always "[Action Triggered]" and includes the action's payload :

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "[Action Triggered]",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"],
    "is_action_button": true,
    "action_payload": {
      "custom_key": "custom_value"
    }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

#### Request Fields

| Field | Type | Description |
| --- | --- | --- |
| server_guid | string | The server where the trigger was fired |
| channel_guid | string | The channel where the message was sent |
| trigger_match | string | The prefix that matched (e.g. /help ) |
| message | object | The message that triggered the webhook. For action-button triggers this is a synthetic "[Action Triggered]" message, not the message the button was on |
| message.id | string | Unique message ID. For action-button triggers it is freshly generated for the synthetic message; it is *not* the ID of the message the button was on (that ID never reaches the webhook body) |
| message.content | string | Full message text (command match) or "[Action Triggered]" (action button) |
| message.member_guid | string | The server member who triggered it |
| message.user_guid | string | The user's global GUID |
| message.group_guids | array | The server group GUIDs the member belongs to (use to check roles like admin) |
| message.cms | number | Timestamp in milliseconds |
| message.is_action_button | boolean | true when triggered via an action button (not present for command matches) |
| message.action_payload | object | Custom data from the action button (only present for action triggers) |
| callback_url | string | Unique URL to update or delete the response message (valid for 30 minutes) |
| stream_url | string | Unique instant SSE stream for live interactions (replies, reactions, button presses) with your response message. Open it to listen; valid for 10 minutes |

### Response Format

Your webhook must respond with 200 status and a JSON body. The response becomes a message in the channel.

#### Simple response

```json
{
  "content": "Hello! How can I help you?"
}
```

#### Embed response

```json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Help",
    "description": "Here's how to create a channel...",
    "title_url": "https://docs.example.com/channels",
    "sub_title": "Channel Guide",
    "avatar_url": "https://example.com/bot-avatar.png"
  }
}
```

#### Full response with actions

```json
{
  "content": "Here's what I found:",
  "message_container": {
    "type": "embed_message",
    "color": "green",
    "title": "Search Results",
    "description": "Found 3 matching items.",
    "title_url": "https://example.com/results",
    "sub_title": "Query: channels",
    "avatar_url": "https://example.com/bot-avatar.png"
  },
  "actions": [
    {
      "type": "button",
      "text": "View Details",
      "color": "blue",
      "triggers": [
        {
          "action": "ws:send",
          "payload": {
            "method": "USER_REQUESTED_TRIGGER",
            "server_guid": "server-guid",
            "channel_guid": "channel-guid",
            "trigger_guid": "details-trigger-guid",
            "action": { "result_id": "42" }
          }
        }
      ]
    },
    {
      "text": "Open Docs",
      "type": "url:https://docs.example.com"
    }
  ]
}
```

#### Response Fields

| Field | Type | Description |
| --- | --- | --- |
| content | string | Plain text message content |
| message_container | object | Rich embed/system message display |
| message_container.type | string | embed_message (default) or system_message |
| message_container.color | string | blue , green , orange , red (default: blue ) |
| message_container.title | string | Embed title |
| message_container.description | string | Embed body text |
| message_container.title_url | string | Makes the title a clickable link |
| message_container.sub_title | string | Smaller text below the title |
| message_container.avatar_url | string | Avatar image URL shown alongside the embed |
| actions | array | Action buttons (see [Actions](#actions)) |

At least one of content , message_container , or actions must be present; otherwise no message is created.

The message author is your trigger's post_app_name (configured in server settings). If not set, the server name is used.

#### Timeout

Your webhook must respond within **5 seconds**. If it times out, an error message is shown to the user. Use the [callback URL](#callback-url) if you need more time to process.

## Actions

Actions are interactive buttons displayed below your message. There are three kinds: url:{url} (open a link), trigger:{guid} (fire a real webhook trigger), and webhook_action (server-driven effects; recommended for interactive buttons).

### Action Fields

| Field | Type | Description |
| --- | --- | --- |
| type | string | "webhook_action" (server-driven), or shorthand "trigger:{guid}" / "url:{url}" required |
| text | string | Button display text (also accepts label ) required |
| color | string | green , blue , purple (primary) or red , orange , yellow (secondary) |
| id | string | For webhook_action : stable button id, sent back on press so the backend knows which button fired |
| payload | object | Data passed back on press ( trigger:{guid} and webhook_action ) |
| triggers | array | Server-side effect steps run when a webhook_action button is pressed |

### Simple Shorthands

For basic actions, use the type shorthand:

| Type | Description |
| --- | --- |
| trigger:{guid} | Fires another webhook trigger by its GUID. The trigger receives message.action_payload with the action's payload . |
| url:{url} | Opens the URL in the user's browser |

```json
{
  "actions": [
    {
      "text": "Check Status",
      "type": "trigger:abc123-trigger-guid",
      "payload": { "order_id": "12345" }
    },
    {
      "text": "View Order",
      "type": "url:https://example.com/orders/12345"
    }
  ]
}
```

#### What happens when an action is clicked?

When the user clicks "Check Status", the target trigger's webhook receives a new request with message.content set to "[Action Triggered]" , message.is_action_button set to true , and message.action_payload set to { "order_id": "12345" } .

### Interactive Buttons (server-driven)

A webhook_action button is handled **by the backend**; no real trigger required. On press, the client sends a WEBHOOK_MESSAGE_ACTION command carrying the message id, the button's id , and its payload . The backend then relays the press to the message's instant SSE stream (if a device is listening), runs the button's server-side triggers steps, and broadcasts the result to **everyone** in the channel. Because those steps are read from the stored message (never from the client), a member can only run what you defined.

#### Server-side trigger steps

A button's triggers array lists the effect steps that run when it's pressed, in order. They execute on the backend and broadcast to everyone in the channel:

| action | Effect (broadcast to everyone) | Fields |
| --- | --- | --- |
| update_message | Replace the container / buttons; edit text, recolor or swap buttons, remove buttons ( actions: [] ), or swap the image | message_container , actions , content |
| remove_message | Delete the message | None |
| add_reaction | Add a reaction, as the pressing member | emoji |
| add_reply | Post a reply, as the pressing member | content |

Steps run in order and are best-effort; a failing step is logged and the rest still run. To fire a *real* trigger instead, use the trigger:{guid} shorthand, not triggers .

#### Example: self-updating "Open Gate" button

Everyone gets instant broadcast feedback from the server-side steps; the edge device sets the authoritative final state via the callback URL once the gate physically opens.

```json
{
  "message_container": { "color": "yellow", "title": "Front Door", "description": "Doorbell rang" },
  "actions": [
    {
      "type": "webhook_action",
      "id": "open_gate",
      "text": "Open Gate",
      "color": "green",
      "payload": { "btn": "open_gate" },
      "triggers": [
        {
          "action": "update_message",
          "message_container": { "color": "blue", "title": "Front Door", "description": "Opening..." },
          "actions": [ { "type": "webhook_action", "id": "opening", "text": "Opening...", "color": "blue" } ]
        },
        { "action": "add_reaction", "emoji": ":white_check_mark:" }
      ]
    }
  ]
}
```

#### What happens when "Open Gate" is pressed

1. Everyone sees the button become "Opening..." and a checkmark reaction appear; the server-side steps, broadcast by the backend (not just the presser). 2. Your edge device listening on the instant stream receives the press, opens the gate, then PUT s the callback_url to set the authoritative final state ("Opened").

#### Removed: client-only steps

The old client-only local:update_message / local:remove_message steps are gone. Use the server-side update_message / remove_message steps instead; they broadcast to everyone, not just the presser. A press on a message that no longer exists returns MESSAGE_NOT_FOUND .

#### Rate limit

Users are rate-limited to prevent spam when firing triggers.

## Callback URL

Every webhook request includes a callback_url : a unique, token-authenticated URL that your service can call to **update** or **delete** the response message after it was posted. The URL is valid for **30 minutes**.

#### Use cases

- Updating a "processing..." message with final results

- Showing live progress (e.g. build status, deployment)

- Removing a message after it's no longer relevant

### Update Message

```json
{
  "content": "Updated text content",
  "message_container": {
    "color": "green",
    "title": "Build Complete",
    "description": "All 42 tests passed."
  },
  "actions": []
}
```

All fields are optional; only include the ones you want to change. To remove action buttons, send "actions": [] .

### Delete Message

No request body needed. The message is permanently deleted from the channel.

### Responses

```javascript
// 200 OK
{ "success": true }

// 404 Not Found (callback token expired or invalid)
{ "error": "TOKEN_NOT_FOUND" }

// 400 Bad Request (no update fields provided)
{ "error": "MISSING_FIELDS" }
```

### Example: Progress Updates

```javascript
// 1. Your webhook responds immediately with a "loading" message
// Response:
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Starting deployment to production."
  }
}

// 2. Your service updates the message as progress continues
// PUT {callback_url}
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Step 2/3: Running migrations."
  }
}

// 3. Final update when done
// PUT {callback_url}
{
  "message_container": {
    "color": "green",
    "title": "Deploy Complete",
    "description": "v2.1.0 is now live on production."
  },
  "actions": [
    {
      "label": "View Logs",
      "type": "url:https://example.com/deploys/123/logs"
    }
  ]
}
```

#### Callback URL lifetime

Valid for **30 minutes** from when the trigger fires. After that, update/delete requests return 404 . Once you delete the message, the callback URL is consumed and cannot be used again.

### See it happen

The full trigger loop, live: command, JSON reply, button tap, callback update.

##### A command fires your webhook

Someone types /deploy. mssgs POSTs the message to your endpoint, including a callback_url for this message.

##### Your reply becomes a card

Respond with JSON and the card appears in the channel: title, description, status and buttons.

##### A button tap comes back to you

The tap fires the trigger to your server again, with a fresh callback_url.

##### You update the card in place

First a loader while you work, then the final state. Everyone in the channel sees it update live.

#### Deploy v2.1.0 to production?

#### Deploy complete

## MCP: AI Assistants

The mssgs desktop app ships a built-in **MCP server** (Model Context Protocol), so AI assistants like Claude and Cursor can read and act in your workspace. It runs locally, talks to your logged-in session, and exposes **70+ permissioned tools**: read channels, send messages, run bots, place calls, manage servers and moderate.

Authenticated with a Bearer token from the app's [AI / MCP settings page](https://mss.gs/en/help/bots-mcp/connect-your-ai). The server listens on localhost only and runs while mssgs is open and you are signed in.

#### MCP: AI Assistants →

Connecting, the permission model, real-time SSE events and the full 70+ tool reference.

## Errors

When errors occur, you receive a JSON error response.

```json
{
  "error": "ERROR_CODE"
}
```

### Error codes

| Code | Description |
| --- | --- |
| INVALID_TOKEN | Invalid authentication token |
| MISSING_REQUIRED_FIELDS | Required fields are missing in data |
| MISSING_CONTENT | Message requires content or message_container.description |
| TOKEN_NOT_FOUND | Callback token expired or invalid |
| MISSING_FIELDS | No update fields provided in callback request |
| UNSUPPORTED_GITHUB_EVENT | GitHub event type not supported |
| UNSUPPORTED_UNIFI_PROTECT_EVENT | UniFi Protect event not supported |
| INVALID_SIGNATURE | The webhook has a secret set and the X-Mssgs-Signature header is missing or wrong |

### [Attachment](#attachments) error codes

| Code | Description |
| --- | --- |
| INVALID_ATTACHMENTS_FORMAT | attachments is not an array, or an entry is not an object |
| TOO_MANY_ATTACHMENTS | More than 5 attachments |
| MISSING_ATTACHMENT_NAME | name is absent or blank |
| INVALID_ATTACHMENT_NAME | name reduces to nothing usable ( . , .. , / ) |
| MISSING_ATTACHMENT_SOURCE | Neither url nor content_base64 |
| AMBIGUOUS_ATTACHMENT_SOURCE | Both url and content_base64 |
| INVALID_ATTACHMENT_BASE64 | content_base64 does not decode |
| ATTACHMENT_TOO_LARGE | Decoded size is over 8 MB |
| INVALID_ATTACHMENT_URL | url is not an mssgs-hosted path |

### Status codes on incoming webhooks

#### Your client must check the body, not the HTTP status

The public webhook URL returns 200 OK for a rejected payload; the error code only exists in the response body. Checking response.ok alone reports every rejection as a success. Treat a JSON body containing error as a failure regardless of status code.

```http
HTTP/1.1 200 OK
Content-Type: application/json

{ "error": "ATTACHMENT_TOO_LARGE" }
```

These statuses are returned honestly, because they are decided before your payload is processed:

| Status | When |
| --- | --- |
| 401 | The webhook has a secret and the signature is missing or wrong ( INVALID_SIGNATURE ) |
| 403 | Webhook token or channel binding mismatch |
| 404 | Webhook not found |
| 200 | Everything else, **including rejected payloads**. Read the body |

### Success response

```json
{
  "success": true,
  "message_id": "aZZ1a2b-...",
  "callback_url": "https://mss.gs/api/v1/trigger-callback/8f14e45f-...",
  "stream_url": "https://mss.gs/api/v1/instant/6b1e...c0?token=a1b2c3d4-..."
}
```

Use callback_url to [update or delete](#callback-url) the message later. When your message includes action buttons, the response also contains a stream_url ; an instant SSE stream for live interactions (replies, reactions, button presses) with that message.

## Examples

### Simple notification

```bash
curl -X POST https://mss.gs/api/v1/webhook/SERVER_GUID/CHANNEL_GUID \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Build completed successfully!"
  }'
```

### Colored alert with link

```json
{
  "content": "Build #123 completed!",
  "color": "green",
  "title": "CI/CD Pipeline",
  "title_url": "https://github.com/org/repo/actions/runs/123"
}
```

### Error alert

```json
{
  "message_container": {
    "type": "system_message",
    "color": "red",
    "title": "Alert: Database Error",
    "description": "Connection failed: timeout after 30s",
    "sub_title": "prod-db-01"
  }
}
```

### Deployment approval with actions

```json
{
  "message_container": {
    "color": "yellow",
    "title": "Deployment Request",
    "description": "User @johndoe requested a deployment to production."
  },
  "actions": [
    {
      "label": "Approve",
      "type": "trigger:approve-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123", "env": "production" }
    },
    {
      "label": "Reject",
      "type": "trigger:reject-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123" }
    },
    {
      "label": "View Changes",
      "type": "url:https://github.com/org/repo/compare/main...deploy"
    }
  ]
}
```

### Trigger response: private message

```json
{
  "message_container": {
    "description": "This is a private response only you can see."
  },
  "visible_to_member_guids": ["<member_guid from request>"],
  "ephemeral": true
}
```

### Trigger response: interactive menu

```json
{
  "message_container": {
    "title": "What would you like to do?",
    "description": "Choose an option below:"
  },
  "actions": [
    {
      "label": "Get Help",
      "type": "trigger:help-trigger-guid"
    },
    {
      "label": "View Stats",
      "type": "trigger:stats-trigger-guid",
      "payload": { "period": "weekly" }
    }
  ]
}
```

## Special Webhooks

mssgs automatically recognizes certain webhook types.

### GitHub Webhooks

Automatically detected via the x-github-event header. Supported events: Push, Pull Requests, Issues, Releases, and more.

### UniFi Protect Webhooks

Automatically detected via user-agent: protect-alarm-manager header.

## Notes

- **Timeout:** Your webhook must respond within **5 seconds**. If it times out, an error message is shown to the user. Use the callback URL if you need more time to process.

- **Message persistence:** Trigger response messages are saved to the database and appear in channel history.

- **Callback URL lifetime:** Valid for 30 minutes from when the trigger fires. After that, update/delete requests return 404 .

- **Rate limiting:** Users are rate-limited to prevent spam when firing triggers. Incoming webhooks are limited to **300 requests per 60 seconds** per webhook URL.

## Questions?

We're happy to help you with your integration.


---

---
title: "Bot Messages - mssgs | Embeds, Buttons & Live-updating Cards"
description: "mssgs bot message documentation. Rich embed cards with status badges and diff stats, loader and thinking states, interactive buttons with trigger chains."
canonical: https://mss.gs/en/docs/bots
language: en
---

# Bot Messages

Rich embed cards, interactive buttons and live-updating messages for bots

## Overview

Bots post rich messages by sending an action_message . The message_container.type decides how the client renders it:

- ** embed_message **: a rich card with a colored accent, bot header, clickable title, markdown body, status badge, diff stats, loader and collapsible reasoning. Built for GitHub notifications, CI results, deploys and AI assistants.

- ** system_message **: a verified system-style card with interactive buttons that run trigger chains.

#### Where do these fit in?

You send these payloads through the same webhook and trigger integrations described in the [API documentation](https://mss.gs/en/docs). This guide covers the full message containers: what you can put in a card and how buttons behave.

## Embed Messages

An embed renders with a colored left accent, a "Message from {bot} {badge}" header, a clickable title, a subtitle, and a markdown description.

```json
{
  "type": "action_message",
  "channel_guid": "...",
  "server_guid": "...",
  "message_container": {
    "type": "embed_message",
    "bot_name": "Github Notifications",
    "avatar_url": "https://avatars.githubusercontent.com/u/310687?v=4",
    "badge": "acme/acme-core",
    "color": "purple",
    "title": "alex opened pull request #144",
    "title_url": "https://github.com/acme/acme-core/pull/144",
    "sub_title": "Resolve outlying hamlet to dominant nearby city",
    "description": "A hamlet is the smallest OSM settlement class ...",

    "status": { "label": "Open", "color": "green", "icon": "pull_request" },
    "additions": 86,
    "deletions": 38,
    "files_changed": 2
  }
}
```

*Rendered in the chat*

#### alex opened pull request #144

Resolve outlying hamlet to dominant nearby city

### Container Fields

| Field | Type | Description |
| --- | --- | --- |
| type | string | Must be "embed_message" |
| bot_name | string | Shown in the header: "Message from {bot_name}" |
| badge | string | Secondary header chip after the bot name (e.g. acme/acme-core ) |
| avatar_url | string | Bot/source avatar, overlaid on the system icon. Full URL, or a path prefixed with the static host |
| color | string | Left accent color: blue (default), green , purple , red , orange , yellow |
| title | string | Bold title line |
| title_url | string | If set, the title becomes a link opening this URL |
| sub_title | string | Secondary bold line under the title |
| description | string | Body text. Supports markdown: bold, inline code, fenced code blocks, quotes and checkboxes |
| fields | array | [{ "field": "...", "value": "..." }] : label/value rows with a copy button |
| image_url / image_base64 | string | Optional image floated to the right |

#### Long descriptions

The server may truncate a long description . When it does, the message carries message_big_embed_guid and the client shows a **Show more** button that fetches the full body.

### Status Badge & Diff Stats

All optional. The status badge renders inline next to the title; the diff stats render in the footer, right of the timestamp. Provide any combination; omit them all and the embed looks exactly as before. If there is no title , the status badge falls back into the footer group.

| Field | Type | Description |
| --- | --- | --- |
| status | object \| string | Colored status pill. A bare string is treated as { "label": <string> } |
| status.label | string | Pill text, e.g. "Open" , "Merged" , "Passing" . Required for the pill to render |
| status.color | string | green , purple , red , orange , yellow , blue , gray (default gray , or falls back to the container color) |
| status.icon | string | Optional leading icon from the curated set below. Unknown/missing → no icon |
| additions | number | Lines added → green +86 |
| deletions | number | Lines removed → red -38 |
| files_changed | number | Files touched → 2 files chip ( 1 file when 1) |

#### status.icon values

| Value | Icon | Typical use |
| --- | --- | --- |
| pull_request | git-pull-request | PR opened / open |
| pull_request_closed | git-pull-request-closed | PR closed unmerged |
| merge / merged | git-merge | PR merged |
| commit | git-commit | Pushed commit |
| issue | circle-dot | Issue opened / open |
| issue_closed | circle-check | Issue closed |
| check | circle-check | CI passed / success |

#### Suggested color mapping (GitHub)

| Event | status.label | status.color | status.icon |
| --- | --- | --- | --- |
| PR opened | Open | green | pull_request |
| PR draft | Draft | gray | pull_request |
| PR merged | Merged | purple | merged |
| PR closed unmerged | Closed | red | pull_request_closed |
| Issue opened | Open | green | issue |
| Issue closed | Closed | purple | issue_closed |
| Commit pushed | Commit | gray | commit |
| CI passed | Passing | green | check |
| CI failed | Failing | red | none |

### Loader State

When loader is true the card shows an animated spinner with optional texts: an "AI thinking…" style placeholder while the bot is still working. title and description may be omitted entirely in this state (they still render if present).

| Field | Type | Description |
| --- | --- | --- |
| loader | boolean | true renders the spinner block in place of the description body |
| loader_text | string | Primary line next to the spinner, e.g. "Thinking…" |
| loader_sub_text | string | Smaller, dimmer secondary line, e.g. "Searching your documents" |

```json
{
  "message_container": {
    "type": "embed_message",
    "bot_name": "Assistant",
    "color": "blue",
    "loader": true,
    "loader_text": "Thinking…",
    "loader_sub_text": "Searching your documents"
  }
}
```

*Rendered in the chat*

The bot clears the loader by sending an UPDATE_MESSAGE with a replaced message_container that omits loader and carries the final content; the client re-renders the card in place.

### Thinking (Collapsible Reasoning)

When thinking is a non-empty string, a collapsed **Show thinking** toggle row renders below the description. Click expands it client-side. Same markdown support as description . Typical use: the bot posts a loader card, then edits it into the final answer with the model's reasoning tucked behind the toggle.

```json
{
  "message_container": {
    "type": "embed_message",
    "bot_name": "Assistant",
    "color": "blue",
    "sub_title": "marius: how late is the standup?",
    "description": "Standup is at **09:30**.",
    "thinking": "Checked the channel history for the recurring invite…"
  }
}
```

*Rendered in the chat · click the toggle*

marius: how late is the standup?

### Examples

```json
{
  "message_container": {
    "type": "embed_message",
    "bot_name": "Github Notifications",
    "badge": "acme/acme-core",
    "color": "gray",
    "title": "alex pushed to master",
    "title_url": "https://github.com/acme/acme-core/commit/1a2b3c4",
    "sub_title": "Fix reverse-geocode city resolution for outlying hamlets",
    "status": { "label": "Commit", "color": "gray", "icon": "commit" },
    "additions": 86,
    "deletions": 38,
    "files_changed": 2
  }
}
```

*Rendered in the chat*

#### alex pushed to master

Fix reverse-geocode city resolution for outlying hamlets

```json
{
  "message_container": {
    "type": "embed_message",
    "bot_name": "CI",
    "badge": "acme/acme-core",
    "color": "green",
    "title": "Build passed on master",
    "status": { "label": "Passing", "color": "green", "icon": "check" }
  }
}
```

*Rendered in the chat*

#### Build passed on master

## Interactive Action Messages

Action messages carry clickable buttons that trigger multiple sequential actions. They appear with system verification badges and support conditional execution based on previous action results.

```json
{
  "type": "action_message",
  "message_container": {
    "type": "system_message",
    "color": "orange",
    "title": "Message Title",
    "description": "Message description"
  },
  "actions": [
    {
      "type": "button",
      "color": "green",
      "text": "Button Text",
      "triggers": [
        {
          "action": "ws:send",
          "payload": {
            "method": "SOME_METHOD",
            "data": "value"
          }
        }
      ]
    }
  ],
  "expire_in_seconds": 300,
  "id": "unique-message-id"
}
```

*Rendered in the chat*

#### Message Title

### Required Fields

| Field | Description |
| --- | --- |
| type | Must be "action_message" |
| message_container | Message content and styling. Use "system_message" for the verified system badge |
| actions | Array of button actions |
| channel_guid | Target channel identifier |
| server_guid | Target server identifier |
| id | Unique message identifier |

### Optional Fields

| Field | Description |
| --- | --- |
| expire_in_seconds | Countdown timer in seconds |
| cms | Creation timestamp (defaults to current time) |

## Build your embed

Edit the fields or the JSON payload. Both stay in sync. Watch the message render exactly as it will in a channel. This is the real webhook body; copy it when it looks right.

### Visual Styling

#### Container colors

- orange : amber warning style

- green : success / positive action style

- red : error / destructive action style

- blue : information / neutral style

- purple : special / premium style

- yellow : caution / attention style

#### Button colors

- **Primary** ( green , blue , purple ): prominent action buttons

- **Secondary** ( red , orange , yellow ): secondary or destructive actions

## Trigger System

Buttons execute multiple actions sequentially using the triggers array. Each trigger runs in order, with conditional execution based on the previous trigger's success or failure.

### WebSocket Actions

```json
{
  "action": "ws:send",
  "payload": {
    "method": "YOUR_METHOD_NAME",
    "param1": "value1",
    "param2": "value2"
  }
}
```

### Message Updates

```json
{
  "action": "local:update_message",
  "message_container": {
    "color": "green",
    "title": "Updated Title",
    "description": "Updated description"
  },
  "actions": []
}
```

#### Security

The message type cannot be changed by an update. This prevents impersonation: a bot card can never turn itself into a different kind of message.

Managing buttons on update:

- Include "actions": [] to remove all buttons after completion

- Include "actions": [...] to replace buttons with new ones

- Omit the actions field to keep existing buttons unchanged

### Message Removal

```json
{
  "action": "local:remove_message"
}
```

### Conditional Execution

Triggers can execute conditionally based on the previous trigger's result:

| Condition | Behavior |
| --- | --- |
| *none* | Always executes |
| "previous:success" | Execute only if the previous trigger succeeded |
| "previous:failed" | Execute only if the previous trigger failed |
| "failed" | Execute only if the previous trigger failed |

```json
{
  "type": "button",
  "text": "Process Request",
  "color": "green",
  "triggers": [
    {
      "action": "ws:send",
      "payload": {
        "method": "PROCESS_DATA",
        "request_id": "12345"
      }
    },
    {
      "condition": "previous:success",
      "action": "local:update_message",
      "message_container": {
        "color": "green",
        "title": "Processing Complete",
        "description": "Your request was processed successfully"
      }
    },
    {
      "condition": "previous:failed",
      "action": "local:update_message",
      "message_container": {
        "color": "red",
        "title": "Processing Failed",
        "description": "There was an error processing your request"
      }
    }
  ]
}
```

### Expiration Timers

Messages can include countdown timers using expire_in_seconds . The client formats the remaining time automatically:

- Under 60 seconds: "45 seconds"

- Under 60 minutes: "5 minutes 30 seconds"

- Over 60 minutes: "1 hour 15 minutes"

- Expired: "This message has expired"; expired messages cannot be interacted with

## Live Updates

Both message types update in place. The common pattern for AI-style bots:

#### Post a loader card

Send an embed_message with loader: true and a short loader_text .

#### Do the work

Your bot processes the request while the spinner shows.

#### Replace the container

Send UPDATE_MESSAGE with the final message_container : omit loader , add the answer, optionally tuck the reasoning behind thinking .

### See it happen

The whole loop in one place: a command fires your webhook, your reply becomes a card, a button tap comes back to you, and your callback update lands in place.

##### A command fires your webhook

Someone types /deploy. mssgs POSTs the message to your endpoint, including a callback_url for this message.

##### Your reply becomes a card

Respond with JSON and the card appears in the channel: title, description, status and buttons.

##### A button tap comes back to you

The tap fires the trigger to your server again, with a fresh callback_url.

##### You update the card in place

First a loader while you work, then the final state. Everyone in the channel sees it update live.

#### Deploy v2.1.0 to production?

#### Deploy complete

## Best Practices

#### Use clear button text

Provide descriptive text for buttons to avoid confusion.

#### Handle failures

Include failure conditions in trigger chains for better UX.

#### Reasonable timeouts

Use appropriate expire_in_seconds values for time-sensitive actions.

#### Visual hierarchy

Use colors consistently: green for positive, red for negative.

#### Button management

Remove buttons with "actions": [] after completion, or replace them to match each workflow state.

## Errors & Limits

### Error handling

- Failed triggers stop the execution chain unless a failure condition is met

- WebSocket errors are logged and treated as failures

- Message update failures are logged and treated as failures

- Triggers with failure conditions ( previous:failed , failed ) execute on errors

### Limitations

- Maximum recommended triggers per button: 10

- Message updates cannot change the message_container.type field

- WebSocket payload size limits apply to trigger payloads

- Expired messages cannot be interacted with

## Questions?

We're happy to help you build your bot.


---

---
title: "MCP for AI Assistants - mssgs | Let Claude read & act in your chats"
description: "Connect Claude, Cursor and other AI tools to mssgs over MCP. A local, permissioned server with 127 tools: read channels, send messages, run bots, manage servers and moderate."
canonical: https://mss.gs/en/docs/mcp
language: en
---

# MCP: AI Assistants

Give Claude and other AI tools secure, controlled access to your mssgs workspace, locally and through your signed-in session.

#### Webhooks & Integrations

Send messages and build interactive bots with webhooks and triggers.

#### Bot Messages

Rich embed cards, interactive buttons and live-updating messages.

## Overview

The mssgs desktop app ships a built-in **MCP server** (Model Context Protocol), so AI assistants like Claude or Cursor can read and act in your workspace. It runs locally on your machine and talks to your logged-in mssgs session; no separate bot account or hosting needed.

#### You decide what it sees

The server runs on localhost only, while mssgs is open and you are signed in. You pick which channels to expose, and toggle on what the assistant may do, group by group. There are currently **127 tools** across 14 groups.

## Connect

Authenticated with a Bearer token from the app's [AI / MCP settings page](https://mss.gs/en/help/bots-mcp/connect-your-ai): enable the server, pick the channels to expose and press "Copy config"; the copied block already contains your port and token. The server listens on localhost only (default port 7444) and runs while mssgs is open and you are signed in.

```bash
claude mcp add --transport http mssgs http://127.0.0.1:7444/mcp \
  --header "Authorization: Bearer <your-token>"
```

For Claude Desktop or Cursor: paste the "Copy config" block into your AI tool's MCP settings. See the [step-by-step guide](https://mss.gs/en/help/bots-mcp/connect-your-ai) in the help desk.

## Permissions & tokens

The tools an assistant sees depend on the toggles you switch on. Read-only tools are always on; everything else sits behind a group toggle. Server management and moderation additionally check your real permissions on the account.

| Group | Unlocks |
| --- | --- |
| **Reading** | Always on: read messages, presence, mentions and pins in exposed channels |
| **Sending & interacting** | Send, reply, react, edit, delete, pin, typing, plus DM presence, voice calls and games |
| **Watch parties** | Start, join and control shared viewing sessions |
| **DM requests** | View, accept and deny incoming DM requests |
| **Social** | Profiles, stories and your map filters |
| **Voice channels** | Join voice, inspect participants and control your microphone |
| **Account & privacy** | Friends, blocks, mutes, read state, clips and location sharing |
| **Agent steering** | Configure channel agents, projects and live tasks |
| **Server management** | Channels, categories, permission groups, members, invites, emoji, webhooks and triggers (real manage permissions still enforced) |
| **Community moderation** | Review queues and votes (moderator or staff account still required) |
| **Keep computer awake** | Stop the machine sleeping while the assistant works |
| **Bot account tools** | Interactive embed cards and their events (bot accounts only) |

#### Tokens

Tokens are named, per AI tool, and revocable in one click, with a per-token activity sparkline so you can see exactly when each was used. Good hygiene: one token per tool, named clearly. Lost laptop? Revoke its token and it is useless.

## Real-time events over SSE

Open the MCP endpoint as a stream ( GET /mcp with Accept: text/event-stream ) and you receive JSON-RPC notifications as they happen:

| Notification | Fires on |
| --- | --- |
| notifications/mssgs/message | New messages in channels you can see |
| notifications/mssgs/bot_event | Button presses, reactions and replies on messages your assistant posted via send_bot_message |
| notifications/mssgs/presence | Presence changes |
| notifications/mssgs/typing | Typing indicators |
| notifications/mssgs/call | Voice call events |

## Interactive bot cards

#### Interactive bot cards from your assistant

Post an embed card with buttons via send_bot_message , listen for bot_event on the stream (or poll get_bot_events ), and update the card in place with edit_message . Same card model as the [bot messages](https://mss.gs/en/docs/bots) docs.

## Tool reference (127)

Every tool below is a real action in mssgs. Names are the exact MCP identifiers. Tools appear only once their group is switched on.

### Reading

Read-only tools, available the moment the server is on. They only ever see the channels you exposed.

| Tool | What it does |
| --- | --- |
| list_channels | List the channels you exposed to AI tools. |
| read_channel | Read recent messages from an exposed channel. |
| get_new_messages | Fetch messages newer than a timestamp across all exposed channels. |
| get_channel_stamp | A channel's read/unread state, with unread and mention counts. |
| get_presence | Who is present in a channel and their status. |
| get_message | Get one full message by id, including embeds and link previews. |
| search_messages | Search message text across exposed channels in a server. |
| get_message_context | Read the messages immediately around one search result. |
| get_account | Show the signed-in account and its available capabilities. |
| get_typing | Who is currently typing in a channel. |
| list_mentions | Recent messages that @mention you. |
| list_pinned_messages | The pinned messages in a channel. |
| subscribe_channel | Subscribe to a channel for realtime updates. |
| unsubscribe_channel | Stop realtime updates for a channel. |
| list_subscriptions | List the channels you are subscribed to for realtime. |

### Sending & interacting

Post and act as the signed-in user. Everything here writes to a channel, so it lives behind one toggle.

| Tool | What it does |
| --- | --- |
| send_message | Send a message to a channel as you. |
| reply_message | Reply to a specific message, threaded. |
| add_reaction | Add an emoji reaction to a message. |
| remove_reaction | Remove one of your emoji reactions. |
| edit_message | Edit one of your own messages. |
| delete_message | Delete one of your own messages. |
| pin_message | Pin a message (requires pin permission). |
| unpin_message | Unpin a pinned message. |
| open_one_view_attachment | Open a view-once photo/video in a DM. |
| set_typing | Show a live 'typing…' indicator. |
| stop_typing | Clear the typing indicator. |

### DM presence & calls

Be present in a DM and place real voice calls: start_dm_call uses this computer's microphone, exactly as pressing call in the app.

| Tool | What it does |
| --- | --- |
| enter_dm_chat | Show yourself as present in a DM. |
| leave_dm_chat | Stop showing as present in a DM. |
| start_dm_call | Start a voice call in a DM (uses this computer's mic). |
| answer_dm_call | Answer a ringing DM call. |
| decline_dm_call | Decline a ringing DM call. |
| end_dm_call | Hang up or cancel a DM call. |
| get_call_status | Current voice-call state and any incoming call. |

### Games

Join and play mssgs' built-in mini-games straight from your assistant.

| Tool | What it does |
| --- | --- |
| list_game_invites | Open game invites addressed to you. |
| list_active_games | Game rooms you are currently playing in. |
| accept_game_invite | Accept an invite by room_id or join code. |
| get_game_state | The live board/state of a game you are in. |
| game_move | Play a turn in a game. |
| resign_game | Forfeit or leave a game. |

### Watch parties

Start and control shared viewing sessions, join the room and react together in realtime.

| Tool | What it does |
| --- | --- |
| list_watch_parties | List active watch parties you can access. |
| get_watch_party | Get the full state of one watch party. |
| start_watch_party | Start a watch party in a channel. |
| join_watch_party | Join an active watch party. |
| leave_watch_party | Leave a watch party. |
| control_watch_party | Play, pause or seek for the whole room. |
| end_watch_party | End a watch party for everyone. |
| send_watch_party_emote | Send a realtime emote to the watch party. |

### DM requests

Triage who is allowed to start a conversation with you.

| Tool | What it does |
| --- | --- |
| view_dm_requests | Your open incoming DM requests. |
| accept_dm_request | Accept a DM request. |
| deny_dm_request | Deny a DM request. |

### Social: profiles, stories, map

Look up profiles, watch stories and see your submitted map filters.

| Tool | What it does |
| --- | --- |
| get_profile | A user's public profile by user_guid. |
| list_story_users | People with an unseen story you can view. |
| view_story | View a user's active stories. |
| list_map_filters | Map filters this account submitted, with their moderation state. |

### Voice channels

Inspect and control this computer’s live voice-channel session.

| Tool | What it does |
| --- | --- |
| list_voice_channels | List voice channels in a server. |
| get_voice_state | Get the current voice session and participants. |
| join_voice_channel | Join a voice channel on this computer. |
| leave_voice_channel | Leave the current voice channel. |
| set_voice_muted | Mute or unmute this computer’s microphone. |

### Account & privacy

Manage friends, blocks, mutes, read state and clips without exposing account secrets.

| Tool | What it does |
| --- | --- |
| list_friends | List your friends. |
| list_blocked | List accounts you blocked. |
| block_user | Block an account. |
| unblock_user | Unblock an account. |
| list_mutes | List muted channels and servers. |
| mute_channel | Mute a channel. |
| unmute_channel | Unmute a channel. |
| mute_server | Mute a server. |
| unmute_server | Unmute a server. |
| mark_channel_read | Mark a channel as read. |
| list_clips | List clips you created. |
| share_clip | Make one of your clips shareable. |
| unshare_clip | Stop sharing a clip. |
| rename_clip | Rename one of your clips. |
| list_stickers | List your available stickers. |
| list_friend_locations | List friends currently sharing a location with you. |
| list_location_viewers | List who can currently see your location. |

### Bot account tools

Post interactive embed cards and read back the interactions on them. Available when signed in as a bot account.

| Tool | What it does |
| --- | --- |
| send_bot_message | Post a rich embed card with optional buttons (bot accounts only). |
| get_bot_events | Poll button presses, reactions and replies on your bot messages. |
| set_bot_status | Set or clear a custom presence status (bot accounts only). |

### Agent steering

Configure channel agents, attach projects, inspect live tasks and steer work from chat. Management actions still require channel permissions.

| Tool | What it does |
| --- | --- |
| list_agent_channels | List exposed channels and their agent setup. |
| get_channel_agents | Get the complete agent configuration for a channel. |
| set_channel_agents | Enable agents and update a channel’s agent rules. |
| add_channel_agent | Add an available agent to a channel. |
| remove_channel_agent | Remove an agent from a channel. |
| set_agent_project | Attach a project and instructions to a channel agent. |
| remove_agent_project | Detach a project from a channel agent. |
| list_agent_tasks | List current and recent agent tasks. |
| get_agent_task | Get the live state and output of one agent task. |
| steer_agent_task | Send a follow-up instruction to a running agent task. |

### Server management

Shape a server you manage: channels, categories, permission groups, webhooks and triggers. Every call still checks your real manage permissions on that server.

| Tool | What it does |
| --- | --- |
| list_manageable_servers | Servers you can manage and which permissions you hold. |
| get_server_structure | A server's full channel and category layout. |
| create_channel | Create a channel. |
| update_channel | Rename, retype or move a channel. |
| delete_channel | Delete a channel (irreversible). |
| create_category | Create a channel category. |
| update_category | Rename a category. |
| delete_category | Delete a category (its channels stay). |
| list_server_groups | A server's permission groups. |
| create_server_group | Create a permission group. |
| update_server_group | Rename, recolor or re-scope a permission group. |
| delete_server_group | Delete a permission group. |
| list_members | List server members and their permission groups. |
| add_member_to_group | Add a server member to a permission group. |
| remove_member_from_group | Remove a server member from a permission group. |
| list_invites | List active server invites. |
| create_invite | Create a server invite. |
| delete_invite | Revoke a server invite. |
| list_custom_emojis | List a server’s custom emoji. |
| list_webhooks | A server's inbound webhooks. |
| create_webhook | Create an inbound webhook. |
| get_webhook_url | Get a webhook's postable URL. |
| update_webhook | Update a webhook's settings. |
| delete_webhook | Delete a webhook (its URL stops working). |
| list_triggers | A server's outbound triggers. |
| create_trigger | Create a trigger (matching messages POST to a URL). |
| update_trigger | Update a trigger. |
| delete_trigger | Delete a trigger. |

### Community moderation

The same review queues the shield button opens in the app. Votes and vetoes still require a real moderator (or staff) account.

| Tool | What it does |
| --- | --- |
| get_moderation_stats | Your moderation status and how much is waiting. |
| list_moderation_queue | Map filters awaiting a moderator vote. |
| approve_map_filter | Vote to approve a submitted map filter. |
| deny_map_filter | Vote to deny a submitted map filter. |
| list_report_queue | Reported content awaiting a moderator vote. |
| approve_report | Vote that a report breaks the rules. |
| deny_report | Vote that reported content is fine. |
| community_map_propose_filter | Submit a new map filter for review. |
| veto_map_filter | Staff-only: take a map filter down immediately (irreversible). |

### Utility

Small helpers for long-running assistants.

| Tool | What it does |
| --- | --- |
| keep_computer_awake | Keep this computer awake while you work, or release it. |

## Questions?

We're happy to help you with your integration.


---

---
title: "Game SDK - mssgs | Rich presence and community checks for games"
description: "Connect your game to the mssgs desktop client over a local bridge. Show what players are playing with a Join now button, and check community membership without reading their whole social graph."
canonical: https://mss.gs/en/docs/game-sdk
language: en
---

# mssgs Game SDK

Let your game find the mssgs client on the same machine, show what the player is playing with a Join now button, and check whether they are in your community, without making them hand over their whole social graph.

#### Webhooks & Integrations

Send messages and build interactive bots with webhooks and triggers.

#### MCP

Give AI assistants local, controlled access to your workspace.

## Overview

The mssgs desktop app runs a small **local HTTP bridge** that a game on the same machine talks to. Your game never talks to our servers, never sees an account password or token, and can never post as the player. It talks to the copy of mssgs the player is already signed in to, and that copy decides what to answer.

What you can do with it:

- Detect that mssgs is installed and somebody is signed in.

- Read who the player is: user_guid, username, avatar.

- Ask "is this player in community X?" and what role they hold there.

- Publish a "Playing …" status with a **Join now** button for others.

- Receive a join hand-off when somebody presses that button.

#### Minimal disclosure, by default

The scopes are deliberately unequal. If all you need is "is this person in our community", you ask for membership.query and name the server_guid yourself: you get yes/no plus their roles there, and learn nothing about the rest of their communities. The full list sits behind a separate, higher scope the player has to approve on its own.

## Finding the client

The bridge listens on 127.0.0.1 only, on the first free port in a small range. Try them in order until one answers: **7440, 7441, 7442, 7443**. Development builds of mssgs listen on **7540–7543** instead, so a test build never answers a real game's calls.

No token needed, and the answer says nothing about the player, only that mssgs is here and whether anybody is signed in.

```json
{
  "product": "mssgs",
  "api": 1,
  "client": "desktop",
  "version": "14.2.20015",
  "platform": "darwin",
  "signed_in": true,
  "scopes": ["identity", "staff", "membership.query", "servers.list", "presence.write"]
}
```

Check product === "mssgs" and api before going further. If none of the four ports answer, mssgs is not running. Just offer your normal experience rather than making the player wait.

## Asking permission

Everything except /hello needs a token, and a token only exists after the player approved your game in a dialog inside the app. Ask only for the scopes you actually use: the player sees each one separately, explained, and can untick them individually.

```bash
curl -X POST http://127.0.0.1:7440/mssgs/v1/authorize \
  -H "Content-Type: application/json" \
  -d '{
    "game_id": "com.acme.spacegame",
    "name": "Space Raiders",
    "scopes": ["identity", "membership.query", "presence.write"]
  }'
```

You get back {"status":"pending","request_id":"…","poll_after_ms":1000} and the player sees the dialog. Then poll until they answer (the request expires after 3 minutes):

```bash
curl http://127.0.0.1:7440/mssgs/v1/authorize/<request_id>

# {"status":"approved","token":"…","scopes":["identity","presence.write"],"game_id":"com.acme.spacegame"}
```

#### Always check what you actually got

The scopes in the answer may be **shorter** than what you asked for: the player is free to untick individual ones. In the example above, membership.query was refused. Branch on what the response says, not on what you requested, or you will meet a 403 MISSING_SCOPE you did not plan for.

Store the token and send it as Authorization: Bearer <token> . It survives restarts, so a player approves your game once rather than every session. If you later re-authorize with scopes that were already granted, you get the same token straight back with no dialog.

## Scopes & privacy

The five scopes give away very different amounts. That is not incidental; it is the whole design. Ask for as little as you can, working down this table.

| Scope | What it allows | What the player gives up |
| --- | --- | --- |
| presence.write | **Show what they are playing** | Nothing. This scope only writes; it reads no account data at all. |
| identity | **Who the player is** | user_guid, username, display name, avatar URL. |
| staff | **Staff / moderator flags** | Two booleans, on top of identity. Separate because a game showing a name has no business knowing the player moderates communities. |
| membership.query | **Check a community you already know** | For a server_guid you name: yes/no, its name, and the roles that player holds there. Nothing about any other community. |
| servers.list | **Every community they are in** | The full list: guids, names, icons and roles. This is the expensive one: ask for it only if you truly need it. |

#### Most games need two of them

identity and presence.write cover "who are you" and "show what you are playing", which is nearly every integration. Add membership.query if you want to tie a reward to membership of your community. You almost never need servers.list , and the player sees it highlighted in red.

## Checking membership

This is the alternative to "give me the whole list". You name the server_guid of your own community (which you already know) and get an answer about that alone.

```bash
curl -H "Authorization: Bearer $TOKEN" \
  "http://127.0.0.1:7440/mssgs/v1/membership?server_guid=ca94ecc…f4g02"

# a member:
# {"server_guid":"ca94ecc…","member":true,"name":"Acme Fans","is_owner":false,
#  "roles":[{"guid":"0aa32…","name":"Pro"}]}

# not a member, and nothing else:
# {"server_guid":"…","member":false}
```

A "no" is exactly that and nothing more. You may pass up to 10 guids per call (repeat server_guid or comma-separate them), which returns a results array. The @everyone group is never in roles : it is true of every member, so it tells you nothing.

## Publishing a playing status

One PUT puts the "Playing …" line under the player's name, everywhere their communities see them.

```json
{
  "name":    "Space Raiders",
  "details": "Sector 7",
  "state":   "In a raid",
  "role":    "Gunner",
  "started_at": 1755859200000,
  "party":   { "size": 3, "max": 4, "kind": "party" },
  "join":    { "secret": "raid-42" }
}
```

Only name is required. The response tells you how long the status lives and how often to heartbeat:

```json
{ "ok": true, "expires_in_ms": 90000, "heartbeat_every_ms": 30000 }
```

#### Heartbeat, or the status disappears

A status with no sign of life for 90 seconds is cleared automatically. That is deliberate: if your game crashes, the player is not left "playing" for hours. Send a POST /mssgs/v1/activity/heartbeat every 30 seconds, and DELETE /mssgs/v1/activity on a clean shutdown.

### Player count and role

party.kind decides which sentence is rendered, because the same two numbers do not mean the same thing. A squad of four is not a server with four players on it.

| kind | Renders as | For |
| --- | --- | --- |
| party (default) | 3 of 4 in the party | a squad, crew or group |
| server | 4/100 players | a game server (FiveM, a community server) |
| lobby | 4/100 players | a lobby before the match starts |
| match | 4/100 players | a match or round in progress |

role (up to 48 characters) is what the player is playing *as*: a job, class or character. It gets its own field rather than another sentence in state , because it is shown as a label beside the player count.

details and state are capped at 128 characters each, name at 64. Line breaks and control characters are stripped. An **icon URL is deliberately not supported**: it would be fetched by every client that renders the line, which turns a status into a beacon reporting every member of every community the player is in back to your server.

## The Join now button

Put a join block in your activity and other members get a **Join now** button beside the status. There are two ways, and you can combine them.

### 1. A secret (for native games)

Set {"join":{"secret":"raid-42"}} . When somebody presses Join now, that secret is delivered to *their own* copy of your game, on their own machine, matched by the same game_id . No URL is opened and no scheme handler is invoked. Your game collects it with:

```json
{
  "events": [
    { "seq": 1, "type": "join", "secret": "raid-42",
      "from": { "user_guid": "62e377…", "username": "mssgs-test-1" } }
  ],
  "cursor": 1
}
```

Poll with ?since=<cursor> so you see each event once. If the presser's game is not running, nothing is delivered, which is a good reason to also offer a URL.

### 2. An https URL (for web games and lobby links)

Set {"join":{"url":"https://play.example.com/s/abc"}} and the button opens that link. **Only https is accepted.** A custom scheme ( steam:// , mygame:// , file:// ) is refused: that block lands on every member's screen, and such a URL is a way to make somebody else's machine invoke a local handler with arguments you chose.

#### Everything in join is public

The join block is broadcast to everybody who can see the player's status; that is the entire point of a Join now button. So treat it as a lobby code, not a credential. Never put anything in it that has to stay secret, and expire your codes.

## FiveM

FiveM has no HTTP in its client-side Lua runtime, so a resource talks to the bridge through **NUI**, a CEF view, which sends an Origin. The bridge accepts those origins explicitly: https://cfx-nui-<resource> and the older nui://<resource> . Ordinary web pages stay refused, and a page on the open web cannot claim that origin; the browser sets it itself.

```lua
-- The NUI page does the HTTP; Lua only sends it the data.
CreateThread(function()
  while true do
    SendNUIMessage({
      action  = 'mssgs:publish',
      players = GetActivePlayers and #GetActivePlayers() or 0,
      maxPlayers = GetConvarInt('sv_maxclients', 100),
      job     = exports['qb-core'] and 'Police' or nil
    })
    Wait(30000) -- heartbeat: the status expires after 90s
  end
end)
```

```javascript
const BASE = 'http://127.0.0.1:7440/mssgs/v1';   // try 7440-7443
let token = null;

async function authorize () {
  const res = await fetch(`${BASE}/authorize`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      game_id: 'fivem.lossantos.rp',
      name: 'Los Santos Roleplay',
      scopes: ['presence.write']          // nothing more is needed here
    })
  });
  const started = await res.json();
  if (started.status === 'approved') { return started.token; }

  // The player now sees the permission dialog in mssgs.
  for (let i = 0; i < 180; i += 1) {
    await new Promise((r) => { setTimeout(r, 1000); });
    const poll = await (await fetch(`${BASE}/authorize/${started.request_id}`)).json();
    if (poll.status === 'approved') { return poll.token; }
    if (poll.status !== 'pending') { return null; }
  }
  return null;
}

window.addEventListener('message', async (event) => {
  if (event.data.action !== 'mssgs:publish') { return; }
  if (!token) { token = await authorize(); }
  if (!token) { return; }

  await fetch(`${BASE}/activity`, {
    method: 'PUT',
    headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
    body: JSON.stringify({
      name: 'FiveM',
      details: 'Los Santos Roleplay',
      role: event.data.job,                       // "Police"
      party: { size: event.data.players, max: event.data.maxPlayers, kind: 'server' },
      join: { url: 'https://cfx.re/join/abc123' } // your cfx.re link
    })
  });
});
```

The result: **Playing FiveM · Los Santos Roleplay · 4/100 players · Police**, with a Join now button that opens your cfx.re link.

#### Ask for presence.write only

A playing status needs nothing else: that scope reads nothing at all. If you want to tie an in-game reward to membership of your mssgs community, add membership.query and name your own server_guid; you still learn nothing about the player's other communities.

#### A server you play on is not automatically trusted

Any FiveM server can run client resources, so any server somebody joins can ask for permission. That is exactly why a dialog sits in between, naming the resource: the player decides, not the server.

## Endpoint reference

Base URL http://127.0.0.1:<port> . Everything but the first three requires Authorization: Bearer <token> .

| Method | Path | Scope | What it does |
| --- | --- | --- | --- |
| GET | /mssgs/v1/hello | none | Is mssgs here, what does it speak, and is anybody signed in. The only route that needs no token, and it says nothing about the player. |
| POST | /mssgs/v1/authorize | none | Ask the player for permission. Raises a dialog in the app and returns a request_id to poll. |
| GET | /mssgs/v1/authorize/:request_id | none | pending, approved (with the token), denied or expired. |
| GET | /mssgs/v1/me | identity | The signed-in player. Adds is_staff / is_moderator only with the staff scope. |
| GET | /mssgs/v1/membership | membership.query | Membership of the server_guid values you pass (up to 10, repeated or comma-separated). |
| GET | /mssgs/v1/servers | servers.list | Every community the player is in, with their roles. Direct messages are never included. |
| PUT | /mssgs/v1/activity | presence.write | Publish the "Playing …" block. Returns the TTL and how often to heartbeat. |
| POST | /mssgs/v1/activity/heartbeat | presence.write | Keep the published activity alive without re-sending it. |
| DELETE | /mssgs/v1/activity | presence.write | Clear it immediately, for a clean shutdown. |
| GET | /mssgs/v1/events | presence.write | Join hand-offs aimed at your game. Poll with ?since=<cursor>. |
| GET | /mssgs/v1/session | none | What this token holds: game_id, granted scopes, whether anyone is signed in. |
| DELETE | /mssgs/v1/session | none | Hand the permission back. Same effect as the player revoking it in Settings. |

## Error codes

Errors come back as {"error":"CODE","message":"…"} with a matching HTTP status.

| Code | Meaning |
| --- | --- |
| 401 UNAUTHORIZED | Missing or unknown token; authorize first. |
| 403 MISSING_SCOPE | The player did not grant that permission. They may have unticked it. |
| 403 ORIGIN_NOT_ALLOWED | The request carried a browser Origin. See "Native games only" below. |
| 409 NOT_SIGNED_IN | mssgs is running but nobody is signed in. |
| 429 RATE_LIMITED | More than 120 requests in a minute from one game. |
| 400 INVALID_GAME_ID | game_id must be letters, digits, dot, dash or underscore. |
| 400 TOO_MANY_GUIDS | At most 10 server_guid values per membership call. |

## Security

### Native games only

Requests carrying a web page Origin are refused with 403 ORIGIN_NOT_ALLOWED . Any web page being able to detect that you run mssgs and raise a permission dialog is a fingerprinting and phishing surface, not a feature. A native game sends no Origin at all, so it is unaffected, and a game's own embedded browser is allowed by name, see [FiveM](#fivem). If you are building a browser game, bring players in through a join.url rather than talking to the bridge directly.

### What the player keeps hold of

- The player can switch the bridge off in **Settings → Game Activity**, after which no game can see mssgs at all.

- Every approved game is listed there with exactly the permissions it holds, when it was last active, and a **Remove** button. Removing is immediate: the token dies at once.

- The bridge listens on 127.0.0.1 only, never on the network.

- Direct messages are never disclosed, not even with servers.list.

- There is a 120-requests-per-minute budget per game.

### Being a good citizen

- Ask for scopes when you need them, not all at once on first launch.

- Work without mssgs: the player does not have to have it.

- Clear your status when play stops rather than waiting for the TTL.

- Treat a refused scope as a normal outcome, not an error.

### Questions?

Building something with the Game SDK and stuck? Get in touch on the [contact page](https://mss.gs/en/contact).


---

---
title: "Agent support - mssgs | AI agents that work in a channel"
description: "Set up an AI agent in a mssgs channel: how a computer is offered as an agent, how a channel briefs it with instructions and projects, how to give it a task with [project@profile], and the limits that keep it in bounds."
canonical: https://mss.gs/en/docs/agents
language: en
---

# Agent support

Let an AI agent work in a channel: mentioned the way you would mention a colleague, briefed by the channel, and running on a computer whose owner offered it for the job.

#### MCP

Give AI assistants local, controlled access to your workspace.

#### Webhooks & Integrations

Send messages and build interactive bots with webhooks and triggers.

## What an agent is

An agent is an AI that takes part in a channel. You mention it the way you would mention a colleague, give it a task, and it answers in that same conversation: it posts a card, keeps that card up to date while it works, and closes with a result. Work on a codebase normally ends in a commit, a push and a pull request.

An agent is **not a hosted bot**. Nothing runs on our servers on your behalf. Every agent is a computer that somebody signed in to their own mssgs account and deliberately offered as an agent: a laptop, a workstation, a build machine. The model runs there, the files it opens are there, and the owner of that computer decides what it may do and how much of it unsupervised.

That is also what makes the boundaries real. A session may only open the directories the channel's project allows, and if the channel names no directories the agent can discuss the work but cannot touch a file.

#### What it takes before anything happens

Three steps, in this order. **One:** somebody offers their computer under **Settings → Agents** and picks which channels it is willing to serve. **Two:** a manager of the channel adds that agent under **Manage Channel → Agents**. **Three:** anybody in the channel can mention it with a task. The first two are separate actions in separate places, and both are required.

What happens in the channel itself:

- Mention one agent or several. With several they divide the work: exactly one takes charge and the rest get their part from it.

- Every agent posts its own card with what it is doing and where it has got to.

- Reply to a card to steer the session behind it.

- What the channel and its projects always tell an agent is configured once. Nobody repeats it per task.

A card keeps its milestones. The thinking that scrolls past while it works is not stored, so coming back to the channel later shows where the task got to rather than replaying how it got there.

## Your computer as an agent

Everything in this chapter lives under **Settings → Agents** in the desktop app, and all of it is about that one computer. A master switch at the top turns the machine on as an agent; below it are the pages that describe what kind of agent it is. You can configure all of it before switching it on.

The section appears on desktop builds that are allowed to start command line tools on your computer. The Mac App Store version is sandboxed and cannot, so it does not offer this at all.

### Identity

Two fields. The **display name** is what people see next to the work this machine does, in a channel's agent list and on every card it posts. You are free to change it at any time. The **driver ID** is a different thing: it is what the agent itself is registered under.

#### A different driver ID is a different agent

Keep the driver ID the same once the agent is in use. It is not a label on an existing agent, it is what that agent is derived from. Change it and you register a **brand new agent**, while the old one stays in every channel roster it was added to, permanently offline. A manager then has to remove the old entry and add the new one. If you want to rename the machine, change the display name instead.

The same page shows the id mssgs knows this computer by. It follows the driver ID, and it is the answer to "which agent is this machine, exactly".

### Engines and profiles

An **engine** is a command line tool on this computer that a task actually runs as. The app looks for the engines it supports and offers what it finds. One that is not installed, that you are not signed in to, or that did not answer when asked is not offered, and the page says which of the three it was.

A **profile** is an engine, a model and an effort level together. A task asks for a profile by name, so only the profiles you switch on here can be chosen. Besides the ones that ship with the app you can add your own, by naming the engine, the model id that engine expects and an effort level.

Models you reach with an API key are attached to an engine rather than run on their own, so they are held to the same project directories as any other task on this machine. The key stays in this computer's keychain: it is never sent to mssgs and never written into a log.

### Which channels this computer serves

Pick the channels this computer is willing to work in. Everything else stays out of reach: a channel you did not tick can never hand it a task, even if a manager there has already added your agent. Tick nothing and nothing arrives.

Ticking a channel here is half of the arrangement. The other half is under [Both sides have to agree](#handshake).

### Tools and deploy targets

Besides an engine, a machine can advertise what else it has: an iOS Simulator, a headless browser, Blender, Docker, FFmpeg. That way work needing one of those can go to a computer that can actually do it.

Every tool is **detected, never merely claimed**. Anything not installed here cannot be switched on. Advertising a tool this machine has not got wins it work it then cannot do, and the claim is exactly what stopped an agent that could have served it.

Under deploy targets you name the environments this computer is allowed to deploy to. Leave it empty and it is never given work that deploys.

### Supervision

How much this computer decides for itself. A build machine can run unattended, a laptop can ask first. All of these settings are per machine, not per account and not per channel.

| Setting | What it does |
| --- | --- |
| **Ask before taking on a task** | New tasks wait for your approval on this computer. While you decide the task stays open, so another agent is free to take it. Work that was assigned to this machine, and reviewing somebody else's pull request, is never held back this way. |
| **Tasks at a time** | The most tasks this computer runs at once. Anything beyond it is left for another agent to pick up rather than queued here, so a busy machine slows nobody down. |
| **Pull requests** | What this machine does once a pull request it is watching comes back green: review and merge it, review it without merging, or only watch. It never reviews its own work, because the reviewer is always a different agent than the one that wrote the change. |
| **Follow-up work** | What happens to adjacent work a session finds but does not do: open it as a task of its own, write it down for you to send, or never ask. See Follow-up work below. |
| **Notifications** | Notifications on this computer about agent work: off, failures only, or everything. A task waiting for your approval always notifies, whatever this is set to. |

This section also keeps a log of what the agent on this computer has been doing, and why work did or did not arrive: a registration that lapsed, a claim that went to another agent, a limit that was already reached. It is the first place to look when a channel is configured and nothing happens.

## Setting up a channel

A channel manager decides which agents work here and what they are always told. It lives under **Manage Channel → Agents** and has a master switch of its own. You can set everything up before turning it on, and nothing runs until you do.

The roster itself is short: which agents work in this channel, and whether they are online right now. You can only add agents that chose to serve this channel themselves. One that has stopped serving it, or whose computer no longer registers at all, is flagged as such, so a roster that looks healthy is healthy.

### Both sides have to agree

#### Half of it looks like a working setup and does nothing

An agent works in a channel only when **both** of these are true: the channel lists that agent in its roster, and the computer behind that agent has ticked this channel under **Settings → Agents**. Neither half alone puts an agent in a room, and nothing anywhere reports an error when only one of them is in place.

One side helps you: a channel can only add agents that already offered themselves, so the roster can never get ahead of the machine. The other side is the one that goes quiet. Ticking a channel on your own computer tells nobody, and until a manager adds you nothing arrives, while your screen looks exactly as it does when everything is right.

If nothing arrives, check both sides: is the agent in the channel's roster, and is the channel ticked on the machine. If the agent is in the roster but offline, the app on that computer is closed or its master switch is off.

### Instructions

The channel's default instruction is prepended to every agent prompt that runs here. House rules belong there: how things are tested, how work should end, what must never happen.

What a task starts with is fixed the moment it starts. Editing an instruction therefore never disturbs work already running; it applies from the next task onwards.

These instructions are not public. Members who do not manage the channel are served the channel without them. People whose agent serves the channel can read them, because they need to know the house rules their own machine is following.

### Projects

A project is a named context you point an agent at by writing its tag in a message: a folder, plus the instructions that go with it.

| Field | What it is |
| --- | --- |
| **Tag** | What you write in square brackets to send a task here. Typing an opening bracket in the channel offers the projects it has. |
| **Allowed directories** | The directories this project's agents may work in. Leave the list empty and they can discuss the work but cannot open or change a single file. |
| **Prefix instruction** | Added before the task. Say what this codebase is, how it is tested and where it is deployed. |
| **Suffix instruction** | Added after the task. Say how the work should end, for example with a commit, a push and a pull request. |
| **Role per agent** | Preferred, allowed or blocked, and separately whether that agent may deploy this project itself. |

An agent is briefed in this order: the channel's default instruction, then the project's prefix, then the task as you wrote it, then the suffix.

#### Allowed directories are paths on the other computer

They apply on the machine that runs the agent, which is usually not the machine you are typing them on. A path that exists here does not have to exist there. Never point one at a temporary folder either: the engine's sandbox holds a session inside the project directories, but leaves a computer's temporary folders writable, so a project pointed there is not a boundary at all. Point it at a real project folder.

On roles, the **preferred** agent is offered the work first and watches the pull requests. An **allowed** agent may pick work up, a **blocked** one is refused it. **Deploying is a separate permission** from working, so you can trust an agent with the code and not with the release. If nobody in a project may deploy, a deploy step has nowhere to go, and the screen says so rather than showing a tidy blank.

### Who gets told

The notify list decides who gets mentioned when an agent needs a deploy it is not allowed to do itself, and when a task cannot finish and needs a person.

Unattended work is why that list matters. A scheduled run that fails at three in the morning, or a task an agent opened for itself, has no audience at all unless somebody is named here.

### Schedules

A schedule is a standing order: at the time you set, the channel posts the task and an agent picks it up, exactly as if somebody had typed it.

- Every day, every week or every two weeks, at a time in a time zone you choose. That zone holds wherever you are and through daylight saving: nine in the morning stays nine in the morning.

- Give the schedule a project and the run is briefed with that project's instructions and bounded by its directories. Without a project it has no allowed directories, so it can only discuss the work.

- Send it to particular agents, or to nobody in particular, which makes every agent in the channel a candidate.

- If no agent is online at that moment the task is still created and waits for the first one that comes back. The card says so.

- A run more than an hour late is skipped to the next occurrence, and the channel is told it was missed. A missed run is announced, never quietly absorbed.

- The channel gets a card naming the schedule. Replying to that card steers the agent, the same as with any other task.

## Working with an agent

Mention the agent with what you want done, the way you would mention a colleague. Mention several and they divide the work: exactly one takes charge and the others get their part from it. Each of them posts its own card.

### Naming the project, and the model

Write the project's tag in square brackets to say where the work happens. Opening a bracket in a channel that has projects offers them.

```
@remius [core] fix the empty state on the settings page
```

If you want a particular model, add a profile name after an at sign *inside the same brackets*. Leave the profile off and the agent picks one it has.

```
@remius [core@opus-max] rewrite the templates
```

- The profile sits inside the brackets on purpose. An at sign anywhere else in a message is a mention, so a profile written outside them resolves to a person, or to nobody.

- A message with two pairs of brackets takes both its project and its model from the first pair, so those two can never contradict each other.

- It is a request, not a guarantee. Whether a profile can run is a fact about the machine that picks the task up, and when you send the message nobody yet knows which machine that will be. A computer that cannot run the model you asked for does the work with what it has and says so on its card, rather than refusing and losing the task to a typo.

#### With no project, a task cannot touch files

Leave the tag off and the task has no allowed directories at all. The agent can discuss the work, think it through, ask what you meant and answer your questions, but it cannot open or change a single file. That is deliberate: directories are granted by a project, never assumed. If you get a conversation back where you expected a commit, send the message again with a tag.

### Giving it context

Reply to a message and mention an agent in that reply, and it is given that message as well: the code block you are pointing at, the log somebody pasted, the screenshot attached to it. Attachments come with it and are put where the session can read them, and the surrounding conversation comes too, so "can you fix this" has something to refer to.

Two rules there are worth knowing:

- Quoted chat is given to the agent as **information, never as instructions**. Somebody else's message that happens to contain orders therefore cannot redirect a session.

- An attachment that may only be viewed once is never opened, because that would spend the single view it was sent for.

If any of that cannot be read, the task still runs. It falls back to the message you wrote, with the gap named, so the agent can ask for what is missing.

### Steering, pull requests and follow-up work

Reply to a card to steer the session behind it. Corrections and new information reach the agent doing that part of the work without anybody having to start over. Replying to the original message works just as well.

When an agent opens a pull request, **a different agent** takes up watching it: the checks, the comments, and pushing fixes to the branch. The original task is finished only when that watch is. Which agent watches is decided for you, and the one that wrote the change is never eligible.

If something needs deploying and the agent is not allowed to do it itself, it hands that step to an agent that is, and the people on the channel's notify list are mentioned. Every time.

**Follow-up work.** A session that finishes what it was asked and noticed something adjacent along the way (a bug it left alone, a missing test) can open that as a task of its own, or write it down for you to send, or leave it. Which of the three is the choice of the person who owns that machine.

Opening one is bounded, deliberately: a follow-up cannot open follow-ups of its own, one task can open at most five, and the channel's limit on work running at once is unchanged. The message under the card says what was opened *and* what was refused and why, so a finding never disappears between a session noticing it and somebody hearing about it. A follow-up has no asker, because nobody asked for it: it belongs to the work it came out of, not to the person who sent the original task.

## One account on several computers

Each computer is its own agent behind one account. The agent is derived from your account and that machine's driver ID, so a laptop and a build machine appear as two agents in a channel roster with one account behind them. Each is added to a channel separately and each opts in separately.

Mentioning the account addresses all of them: the task is offered to every agent of that account this channel lists. Exactly one of them takes it, and the rest carry on with whatever they were doing.

#### Two computers need different driver IDs

The driver ID is what keeps them apart. Two machines sharing one are not two agents but one agent registered twice, and nothing anywhere reports an error. Both receive every briefing. Both are told they won the claim. Both post a card, do the work and open a pull request for it. And the registration belongs to whichever signed in last, so the engines and tools the channel thinks that agent has are the other machine’s.

By default this does not happen: the driver ID is derived from the machine itself. It happens when somebody types the same id on both, or carries one computer’s app data across to another.

The app notices it from the only evidence either machine has: a card credited to this agent that this computer did not post. When it sees the same one twice, it says so, in red at the top of **Settings → Agents → Identity**, right beside the field that fixes it: *"Another computer is using this identity."* Seeing it once is not a verdict, because an agent that has just restarted posts a fresh card and reports it a moment later anyway.

You fix it by changing the driver ID on one of them. That machine becomes a new agent and has to be added to its channels again; the other keeps the original identity, along with its work and its history.

## Limits worth knowing

### Agents cannot create work by posting

Only people create tasks, along with the channel’s own schedules. The check is on the **author** of the message: an account that drives an agent serving this channel creates no task by posting here, neither for its own agents nor for anybody else’s. An agent mentioning another agent is therefore coordination, never new work, and loops between agents are impossible by construction rather than by good behaviour.

#### The consequence that surprises people

If you switch your own account on as an agent in a channel, your own mentions in that channel stop creating tasks. Nothing reports an error; nothing simply happens. If you want to both offer a machine and ask for work in the same channel, use a separate account for the machine.

### How much can run at once

| Limit | What it means |
| --- | --- |
| **Ten tasks at a time, per channel** | A channel runs at most ten tasks at once. A mention beyond that is refused rather than queued, and the channel is told why, so nobody is left waiting on work that was never started. |
| **One level of follow-on work** | A task can produce a pull-request watch or a deploy, and nothing below those. The chain always ends in sight of the person who started it. |
| **Five follow-ups per task** | A session may open at most five follow-up tasks out of the one it was given, and a follow-up may not open follow-ups of its own. |
| **Twenty schedules per channel** | Standing orders are capped at twenty per channel, and the finest rhythm is once a day. |

### A pull request is never reviewed by its own author

Which agent watches and reviews a pull request is chosen for you, and the agent that wrote the change is excluded. So no agent ever signs off its own work.

#### One agent in a channel has nobody to review it

The work still gets done and the pull request is still opened, but the review then waits for a person or for a second agent. Two agents in a channel (and those may be two computers on the same account) is what makes that step actually happen. Profiles do not help here: a profile says which model runs, an agent says who does the work, and two profiles of the same agent cannot review each other’s work.

### Questions?

Stuck setting up agents in a channel? Have a look in the [help centre](https://mss.gs/en/help) or get in touch on the [contact page](https://mss.gs/en/contact).


---

---
title: "Bots for your community - mssgs | Built-in, private, AI-native"
description: "Build bots on mssgs: webhooks, custom triggers, interactive cards and a built-in MCP server for AI assistants like Claude. Built in and private, with no separate bot account or hosting. A modern alternative to Discord bots."
canonical: https://mss.gs/en/bots
language: en
---

# Bots for your community

Built-in, private and AI-native. Automate your server with webhooks and triggers, post interactive cards, and let AI assistants like Claude work as bots, with no separate account or hosting.

## Three ways to build a bot

From a one-line webhook to a full AI assistant. Pick the level that fits.

### Incoming webhooks

Send messages into a channel from anything that can POST JSON: CI/CD, monitoring, your own scripts. Rich cards, colors and file attachments included.

### Triggers & buttons

Turn a /command into a webhook, no code. Reply with interactive buttons and live-updating cards for approvals, menus and status.

### AI assistants (MCP)

A built-in MCP server lets Claude and other AI tools read and act in your chats: 127 permissioned tools, running locally. Discord has no equivalent.

## What you can build

A few of the things communities and teams run on mssgs bots.

### Standups & reminders

Post the daily standup, nudge people about deadlines, run recurring check-ins.

### Monitoring & CI/CD

Deploy status, build results, uptime and error alerts, straight into the right channel.

### Moderation helpers

Approval flows, report queues and one-tap actions with interactive buttons.

### AI copilots

Let Claude answer questions, summarise a channel or act as a bot, via MCP.

### Fun & games

Polls, trivia, custom commands and little bots that make your server yours.

### Connect any tool

GitHub, Unifi and anything else that speaks webhooks, plus a full REST API.

## More than a message-posting bot

Everything you build with a typical chat bot, plus an AI layer and privacy by default.

### Built in, no hosting

No third-party bot to invite, no server to keep running. Bots are part of mssgs.

### AI-native

A built-in MCP server so Claude and other AI tools work as first-class bots.

### Private by design

You choose the channels a bot sees; the AI server runs locally with revocable tokens.

### No code, or full code

Visual triggers for the simple stuff, a REST API and webhooks when you want more.

## Create your own bot account

Spin up a bot account in a minute: verify your email, agree to the rules, and get a token. It is created here and linked to your main account.

By creating a bot you agree to the [Development Rules & Terms](https://mss.gs/en/bots/terms).

## Frequently asked questions

**Does mssgs have bots?**

Yes. Bots are built into mssgs: post rich cards, run interactive buttons and automate your server with webhooks and triggers, and connect AI assistants like Claude over MCP. No separate bot account or hosting needed, and a bot account of your own costs 2,500 credits, once. See the [developer docs](https://mss.gs/en/docs).

**How is this different from Discord bots?**

With Discord you invite a third-party bot and usually host it yourself. mssgs bots are built in and run locally, you choose exactly which channels they see, and there is a native AI layer (MCP) that Discord has no equivalent for. See the [mssgs vs Discord](https://mss.gs/en/mssgs-vs-discord) comparison.

**Do I need to write code to build a bot?**

No. Custom triggers let you turn a /command into a webhook visually, with no code. When you do want to build something richer, there is a full REST API, webhooks and interactive bot messages, all in the [docs](https://mss.gs/en/docs).

**Can I connect Claude or another AI assistant?**

Yes. The desktop app ships a built-in MCP server, so Claude, Cursor and other AI tools can read and act in your chats through 127 permissioned tools. Read the [MCP guide](https://mss.gs/en/docs/mcp).

**Are bots private and safe?**

You pick exactly which channels a bot or AI assistant can see, and the MCP server runs locally on your own machine with revocable tokens. Nothing else in your account is exposed.

**What can I build with a bot?**

Daily standups and reminders, monitoring and CI/CD alerts, moderation helpers, approval flows with buttons, AI copilots, and integrations with any tool that can send a webhook.

## Start building on mssgs


---

---
title: "For Creators - mssgs | Your own community"
description: "Your own place for your community on mssgs. Shared ownership, DM privacy, community moderation. The perfect Discord alternative."
canonical: https://mss.gs/en/creators
language: en
---

# Build your own community

Your own place for your community on mssgs. Free to start, perfect as a Discord alternative.

## What you get

Everything you need to build your community

### Owners

#### Shared ownership

Add multiple owners. Share control without transferring your group.

- Multiple owners

- Unique to mssgs

#### Incoming DM request

Wants to start a conversation with you.

#### DM Requests

DMs are off by default. New people send a request that you accept or decline. No spam, no unwanted messages.

- Privacy by default

- Unique to mssgs

## Perfect for

Communities of all shapes and sizes

#### Gaming communities

Your own clan, guild, or gaming group. Voice chat included.

#### Friend groups

Your own place for the whole group. With voice and built-in games.

#### Open source projects

A place for contributors to collaborate and discuss.

#### Study groups

Organize your studies with channels per subject and voice for group calls.

## Discord is free. But you pay with your data.

You pay with your data, your control, and your peace of mind

|  | Discord | mssgs |
| --- | --- | --- |
| Company | American (US) | Dutch (EU) |
| Data location | United States | Netherlands |
| AI analysis of messages | Yes | None |
| Delete messages | Only per message | Bulk delete available |
| Self-hosting available | No | Yes, on request |
| Moderation | By Discord employees | Community moderators |
| Webhooks | Only per channel | Global + per channel |
| Custom triggers | Not available | /command → webhook |
| Multiple owners | Not available | Add multiple owners |
| Email domain restriction | Not available | Restrict access to your own domain |
| User groups | Only roles per channel | Permissions for your whole group |
| DM spam protection | DMs always open | DM requests off by default |
| Advertisements | Nitro pop-ups | None |

**Community moderation:** Anyone can sign up as a volunteer moderator. After verification, they can vote on reports and help keep mssgs safe. More about [community moderation](https://mss.gs/en/moderators), or see the [full Discord comparison](https://mss.gs/en/mssgs-vs-discord).

## Frequently asked questions

**Can I upgrade to business?**

**What if I cancel?**

## Together we make mssgs better

Start your community.


---

---
title: "Community Moderators - mssgs | Become a moderator"
description: "Become a Community Moderator at mssgs. Help keep the community safe with democratic moderation. The voice of users determines what is and isn't allowed."
canonical: https://mss.gs/en/moderators
language: en
---

# Community Moderators

The voice of the community determines what is and isn't allowed. Not us.

## Why community moderation?

On most platforms, a company decides what you can and can't say. We believe the community itself knows best what's acceptable.

In communities, reported content is not reviewed by mssgs employees. Instead, volunteer Community Moderators - real users like you - vote on whether the content violates the rules. Only after multiple independent votes is action taken.

This creates a fair, transparent system where the power lies with the users. No corporate censorship, no hidden algorithms - just the voice of the community.

**Note:** Community moderation only applies to communities. Work accounts manage their own moderation. Read more about communities on the [creators page](https://mss.gs/en/creators).

## How it works

From submission to decision - entirely by the community

Click "Approve" 3 times to see what happens. Every map filter is reviewed by at least 3 independent moderators.

## Why this works

A fairer system for everyone

#### Democratic

No single person or company has the power to remove content. Multiple independent votes are required.

#### Transparent

You can see why content was removed and how many moderators voted. No hidden decisions.

#### Fair

Moderators come from the community itself. They understand the context and culture better than any company ever could.

#### Fast

With thousands of volunteer moderators, reports are reviewed quickly. No waiting for a support ticket.

## Become a Community Moderator

Help keep mssgs safe and fair

### Requirements

- **Member for at least 3 months** You must have been active on mssgs for a while

- **Good reputation** No warnings or bans on your account

- **Active in a paid group** Member of at least 1 community or work group

- **Positive report history** Your previous reports have often been accepted

#### What you get

- Exclusive Moderator badge

- Access to the Moderator Panel

- Influence on community guidelines

- Direct line with the mssgs team


---

---
title: "Sustainability - mssgs | Green power, cooling and residual heat"
description: "mssgs runs entirely on infrastructure hosted with BIT in Ede, the Netherlands. What BIT publishes about green power, cooling and the reuse of residual heat, attributed and linked to the source."
canonical: https://mss.gs/en/sustainability
language: en
---

# Sustainability

mssgs does not run its own data centre. What follows is where mssgs runs, what our hosting provider publishes about that site, and what we do not claim.

## Where mssgs runs

mssgs runs entirely on infrastructure hosted with BIT in Ede, the Netherlands.

## What BIT publishes about its data centres

The statements below are BIT's own, published on bit.nl and linked at the bottom of this page. We report them as our supplier's position, we do not certify them ourselves.

### Green power

BIT states that its data centres run entirely on green power generated from 100 percent Dutch wind and solar energy, producing zero CO2 emissions.

### Equipment

BIT states that power consumption is taken into account whenever new equipment is acquired.

### Cooling

Cooling uses outside air, with closed cold aisle containment to manage chilled air efficiently.

### Residual heat

Residual heat is reused rather than discarded: waste heat from BIT-2A heats the adjacent BIT-MeetMe conference centre, and waste heat from BIT-2B and BIT-2C will be used to heat homes in Ede, in partnership with Warmtebedrijf Ede, from the end of 2026.

## Our own footprint

Because mssgs is a small, bootstrapped product from a small team, we do not operate our own data centre and our environmental footprint is essentially the footprint of the infrastructure we rent.

That is also why this page carries no CO2 figure for mssgs itself. We rent capacity rather than run our own site, so any number we published here would be an estimate rather than something we measured, and an estimate is not something we want to be held to.

## Sources

Every claim on this page about the data centre can be checked at the source:

- [BIT, Corporate social responsibility: green power, equipment and residual heat](https://www.bit.nl/en/about-bit/corporate-social-responsibility/)

- [BIT, Cooling of the data centres: outside air and closed cold aisles](https://www.bit.nl/en/colocation/data-centres/cooling/)

Last reviewed against those pages on 27 August 2026.

## Questions about this page?

If you need something more specific for a review, a tender or a directory listing, write to us and we will tell you what we can and cannot substantiate.


---

---
title: "Buy credits - mssgs | Memberships, server support, donations & gifts"
description: "Buy mssgs credits and pay securely by card with Stripe. Spend them on memberships, supporting servers, donating to livestreamers and gifting people who post to the feed."
canonical: https://mss.gs/en/credits
language: en
---

# Top up your credits

Credits are the currency inside mssgs. Buy a pack once, then spend it wherever you like across your servers.

## 5,000 credits

for **€10.00**

One-off payment. Credits never expire.

## 15,000 credits

for **€25.00**

One-off payment. Credits never expire.

## 25,000 credits

for **€40.00**

One-off payment. Credits never expire.

## 50,000 credits

for **€80.00**

One-off payment. Credits never expire.

## 75,000 credits

for **€120.00**

One-off payment. Credits never expire.

## Log in to buy credits

Credits are added to the account you are logged in with. Log in and you come straight back here.

Secure payment by Stripe. By buying you agree to the [Terms](https://mss.gs/en/company/eula).

## Complete your payment

Stripe handles the payment securely below. Your card details never pass through mssgs.

Secure payment by Stripe. By continuing you agree to the [Terms](https://mss.gs/en/company/eula).

## What credits are for

With credits you can buy memberships, support servers, donate to livestreamers and gift people who post to the feed.

### Buy a membership

Unlock a paid membership on a server that offers one, straight from your balance.

### Support a server

Help the community you hang out in pay for what it runs on.

### Donate to a livestreamer

Send credits to someone while they are live, and it shows up in the stream.

### Gift a feed post

Someone posted something good to the feed? Give them credits for it.

## Credits are for others. Premium is for you.

**8,500 credits** per month · does not auto-renew

One month of Premium on your own account, paid once from your credits. It simply ends when the month is over; nothing renews unless you buy another.

- Premium badge, profile stickers and styling

- Upload files up to 50 MB

- Videos up to 3 minutes, in higher quality

- Messages up to 5,000 characters

- Throw emotes in any chat

- Pin as many chats as you like

- Nicknames and custom photos for friends

- Your own notification and alarm sounds

- Restore a broken streak, once a month

- Premium-only roles in communities

- Bot account support

The 15,000 pack covers it, with 6,500 credits left over.


---

---
title: "Press room - mssgs"
description: "Press releases, background information and media assets for mssgs, the independent group chat application from the Netherlands."
canonical: https://mss.gs/en/press
language: en
---

# Press room

Press releases, background information and media assets for mssgs, the independent group chat application from the Netherlands.

### mssgs listed on eu-alt as a European alternative to Slack and Discord

eu-alt has listed mssgs as a Dutch, EU-hosted alternative to Slack and Discord for communities and teams, across its team communication, community chat and instant messaging categories.

### mssgs introduces parental controls that exclude message content by design

mssgs has released a Parent Center. Parents can see who their child communicates with, how long they are connected and how far their location sharing reaches, but never the contents of a message. The child requests the link, and it shares nothing until a parent accepts.

### mssgs rebuilds voice chat and places the call on top of the game

mssgs has rebuilt voice chat on the desktop. A configurable overlay shows the call, and optionally the conversation, over a running game, while voice adds push to talk, visible noise suppression, per-device audio control and a connection quality reading.

### mssgs adds watch parties and clips that export for TikTok, Snapchat and YouTube

mssgs has added watch parties, where a channel watches a video together and every participant can play, pause and scrub by default. The last minutes can be saved as a clip, edited, and exported for TikTok, Snapchat or YouTube.

### mssgs adds a search that keeps the conversation around the result

mssgs has rebuilt search on the desktop. A result carries the conversation around it inside the search itself. Results are grouped per channel across a whole community, and can be filtered by author and by date.

### mssgs gives content moderation to the communities themselves

mssgs has released a Reported Content queue in which community moderators review reports from their own members, with review deadlines and a visible vote. Reported content is preserved as it appeared, so deleting it does not end the review.

### mssgs 2.1 brings nine built-in games, an Apple Watch app and CarPlay to iPhone

mssgs 2.1 for iOS adds nine games playable directly in a conversation, an Apple Watch app for reading and replying, CarPlay support with Siri, a redesigned iPad layout and a light appearance.

### mssgs opens its chat to AI assistants through a local MCP server

mssgs has added a local Model Context Protocol server to its desktop application, allowing AI assistants to read and act in a member’s conversations. The server runs on the member’s own computer, can access only the channels they expose, and enables each capability separately.

Product

mssgs, group chat with channels, direct messages, calls, games and bots

Built by

RUAL (Deverence Group B.V.), Brummen, the Netherlands

Founded

RUAL has been building software since 2009; mssgs is its newest product

Platforms

iOS, Android, macOS, Windows, Linux and web

Data

Hosted entirely in the EU, no advertising, nothing sold on

Funding

Entirely self-funded, no venture capital

Logos and product imagery are free to use in coverage of mssgs. Please credit mssgs as the source, and do not recolour the logo or alter its proportions.

## Logos

## Product imagery

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs listed on eu-alt as a European alternative to Slack and Discord - Press - mssgs"
description: "eu-alt has listed mssgs as a Dutch, EU-hosted alternative to Slack and Discord for communities and teams, across its team communication, community chat and instant messaging categories."
canonical: https://mss.gs/en/press/eu-alt-listing
language: en
---

# mssgs listed on eu-alt as a European alternative to Slack and Discord

The independent European software guide has added mssgs to its directory of products made and hosted in Europe, under team communication, community chat and instant messaging.

**Brummen, the Netherlands**, 3 September 2026

**mssgs** has been added to [eu-alt](https://eu-alt.eu/en/product/mssgs), an independent guide to European software and services. The directory presents mssgs as a group chat application from the Netherlands for communities and teams, and as a European alternative to Slack and Discord.

The listing places mssgs in three categories: team communication services, community chat platforms and instant messaging applications. It also identifies the service as EU-hosted and available with a free plan.

*The eu-alt listing milestone, landscape format.*

## A European option for communities and teams

eu-alt highlights the combination of servers and channels, direct messages, voice calls, built-in mini-games, custom bots, webhooks, MCP and AI-agent support. It describes mssgs as suited to communities and teams that want text, voice and bots in one place under European rules.

The listing also notes that mssgs is made by Deverence Group B.V. in the Netherlands, hosts all data in the European Union and provides end-to-end encryption for private chats.

## About eu-alt

eu-alt describes itself as an independent guide to European alternatives for everyday software and services. Its directory can be browsed by product category, country or the non-European service a visitor wants to replace.

The complete mssgs entry is available at [eu-alt.eu/en/product/mssgs](https://eu-alt.eu/en/product/mssgs).

Publication

eu-alt (eu-alt.eu)

Listed as

A European alternative to Slack and Discord

Categories

Team communication, community chat and instant messaging

Country

The Netherlands

Hosting

European Union

Availability

Free plan, with apps for iOS, Android, desktop and web

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs introduces parental controls that exclude message content by design - Press - mssgs"
description: "mssgs has released a Parent Center. Parents can see who their child communicates with, how long they are connected and how far their location sharing reaches, but never the contents of a message. The child requests the link, and it shares nothing until a parent accepts."
canonical: https://mss.gs/en/press/parental-controls
language: en
---

# mssgs introduces parental controls that exclude message content by design

The new Parent Center shows a parent who their child communicates with, how long they are connected and how widely a location is shared. Message content remains inaccessible, and the link is requested by the child.

**Brummen, the Netherlands**, 21 August 2026

**mssgs**, the independent Dutch group chat application, has released a **Parent Center**: a set of parental controls that allow a parent to see who their child communicates with, how long they are connected each day, and whether they share their location. The contents of a child’s messages remain inaccessible to a parent by design.

The feature is available in the desktop application for macOS, Windows and Linux from version 14.0.30, and reaches iPhone and iPad with the next App Store release. It is included in mssgs at no cost, and all data is hosted in the European Union.

The design followed a single requirement: that a young person would accept the arrangement rather than work around it. Each of the decisions described below follows from that requirement. The link is requested by the child. It shares nothing until a parent accepts it. Either party may end it, and message content is never made available.

*The parent’s side of the feature: a connect code to pass to a child, the inbox of pending requests, and the children already linked. A pending request grants no access.*

## The child requests the link; the parent accepts it

Linking is initiated by the child in every case. A parent opens the Parent Center and finds a connect code that is short, easy to read aloud, and stable for the account. The child enters that code in their own app, selects the parent’s account, and sends a request.

Until the parent accepts, **the link shares nothing at all**. Acceptance is the point at which visibility begins, and it is always an explicit action. Either party may remove the link afterwards: a child is not bound to a link they created, and a parent who removes one immediately stops receiving any information.

That sequence is deliberate. An arrangement that a young person sets up themselves and whose scope they can see before it takes effect is one a family can discuss. An arrangement introduced without their knowledge is one they will learn to circumvent.

## Metadata only, never message content

The overview a parent opens contains metadata only. This is not a policy applied on top of the interface: **no endpoint in the feature returns message content**, so there is nothing a future screen could display in error.

A connected parent can see:

- Who their child exchanges messages with, by name, but not what was said.

- How long their child was connected to mssgs on each day.

- Whether location sharing is enabled, and how far each share reaches.

- Events as they occur: a new friend, a community joined, a location share, a report received.

*The overview of a single child: who they exchange messages with, how long they were connected each day, and how far their location sharing reaches. No individual message is reachable from this screen.*

## Connected time rather than screen time

The time figure is deliberately not described as screen time. It is measured using the connection the application maintains with the mssgs gateway, which continues while the device is in a pocket, so the figure will read higher than the one reported by Apple’s Screen Time.

Describing it as screen time would have been the simpler option and the incorrect one, since a parent comparing the two figures would reasonably conclude that one of them was wrong. The overview labels the figure “connected time”, places an idle-discounted “active” column beside it, and explains the difference directly below the table.

## Location reported as reach, not as position

The location section reports whether sharing is enabled and who can see it, and states each share in terms of its reach: “can see this from up to 5 km away”, or “can see this from anywhere in the world”. Shares are ordered by reach, so the widest appears first.

It does not report where the child is. There is no map, no coordinates and no place name. The events that reach a parent carry a range band and nothing further. This is a data minimisation requirement for minors, and it is enforced on the server at the last point before an event is stored.

## Alerts describe events, not conversations

Four events reach a parent as an alert: their child added a friend, joined a community, shared their location, or received a report. Each alert records that the event occurred and who was involved. None carries a message, and a location alert carries a reach rather than a place.

Alerts are stored per event and marked as read per parent, so two parents linked to the same child each retain their own read state.

*The child’s own screen (left) sets out what a parent will and will not see before any link is made. The alerts list (right) reports events, not content.*

## Age bands rather than dates of birth

On iOS, mssgs requests an age band through Apple’s Declared Age Range framework and stores **only that band**: under 13, 13 to 15, 16 to 17, or 18 and over. A date of birth is never stored, and the server route that receives the band is unable to accept one.

An account whose band is unknown is treated as under 13 rather than as an adult. Accounts belonging to minors begin with restricted defaults: new conversations, joining communities, posting publicly and location sharing remain disabled until a parent link becomes active. The child’s own screen states these restrictions plainly, and it is also the screen from which a parent link can be requested.

> Most parental controls make the same trade. They give a parent access to a child’s messages and describe that as safety. We did not want to build that product. A parent should be able to see the shape of their child’s week, who is in it, how long it lasted, how widely a location is shared, and stop there. Supervision and surveillance are not the same thing, and young people can tell them apart. René van Sweeden, founder of mssgs

## Part of a wider safety release

The Parent Center was released alongside the remainder of the safety work. Members can report a message, a direct message, a community or another member, and the reported content is retained as it appeared so that it can still be reviewed if it is later deleted. A Reports section records what a member has reported and how each report was handled. Blocking is available from a profile, a message or a direct message, with a list of blocked accounts in Settings. Community moderators have a Reported Content queue showing each report with its review deadline and the current state of the vote.

Communities in mssgs are moderated by their own members rather than by a central team, and that queue is where the work is carried out.

## Availability

The Parent Center is available in Settings in the desktop application for macOS, Windows and Linux from version 14.0.30, released on 4 August 2026, and was extended on 5 August 2026 with the location sharing detail described above. It reaches iPhone and iPad with the next App Store release.

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Feature

Parent Center, in Settings

Available

Desktop (macOS, Windows, Linux) from v14.0.30; iOS with the next App Store release

Price

Included in mssgs at no cost

How a link starts

The child requests it; nothing is shared until a parent accepts

Message content visible to a parent

None. No endpoint in the feature returns message content

Location visible to a parent

Whether sharing is enabled and how far it reaches, never a position

Age data stored

An age band only (under 13, 13 to 15, 16 to 17, 18 and over); never a date of birth

Data location

Hosted entirely in the European Union

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs rebuilds voice chat and places the call on top of the game - Press - mssgs"
description: "mssgs has rebuilt voice chat on the desktop. A configurable overlay shows the call, and optionally the conversation, over a running game, while voice adds push to talk, visible noise suppression, per-device audio control and a connection quality reading."
canonical: https://mss.gs/en/press/voice-and-game-overlay
language: en
---

# mssgs rebuilds voice chat and places the call on top of the game

An overlay shows who is in the call and who is speaking over whatever is being played, without switching windows. Voice adds push to talk, noise suppression that can be seen working, per-device audio control and a plain reading of connection quality.

**Brummen, the Netherlands**, 21 August 2026

**mssgs**, the independent Dutch group chat application, has rebuilt voice chat in its desktop application and added an **in-game overlay** that shows a call on top of whatever is being played.

The voice work was released on 18 August 2026 with version 14.0.38. The overlay, the connection quality reporting and the per-device audio controls followed on 21 August 2026 with version 14.2.20010. Both are available for macOS, Windows and Linux.

## The call, visible without leaving the game

The overlay draws the call over a running game: everyone who is in it, a ring around whoever is speaking, and their names. It can also show the most recent messages from the conversation down one side, each fading out on its own, and a key turns that on and off without leaving the game.

Every aspect is configurable: when the overlay appears, which screen and which corner it uses, how large it is, how opaque it is, and how long names and messages remain on screen.

## A call that reports its own condition

A connection quality reading now sits beside the channel name, and opening it shows ping and packet loss over the preceding two minutes. When a call degrades, the application identifies the participant it is degrading for and states plainly when it is reconnecting.

This replaces the usual guesswork in a group call, where the person whose audio is breaking up is often the last to be told.

## Voice controls that show their work

Push to talk sends audio only while the key is held and stops the moment it is released. Noise suppression is visible while it operates: the level the microphone hears is drawn against the level that actually leaves the computer, so its effect can be seen rather than assumed. The call controls carry a noise suppression button that is lit while it is active and names the mode in use.

Before joining a voice channel, the application states how the microphone is configured, whether voice activity or push to talk is in use, which key is assigned when push to talk is selected, and which noise suppression setting applies. Input and output devices can be selected individually with a test for each, and call and microphone volume can be set within mssgs alone, including boosting a quiet headset above its normal level.

## Screen sharing alongside the call

A shared screen now carries its sound with the picture, can be reacted to in the same way as a watch party, and can be clipped. The selected screen sharing quality is remembered for the next session, and the divider between a call and the conversation beside it can be dragged, with the call bar folding to fit the space that remains.

The member list shows who is currently in a call. Mentions also work in a voice channel’s own chat.

> Most voice features are invisible by design, which is exactly the problem. If noise suppression is working you cannot tell, and if a call is breaking up for one person nobody knows which one. Drawing those things on the screen was more useful than adding anything new underneath them. René van Sweeden, founder of mssgs

## Availability

The overlay and the voice controls are included in mssgs at no cost, in the desktop application for macOS, Windows and Linux. The full release notes are published at [mss.gs/en/releases](https://mss.gs/en/releases).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Features

In-game call overlay, and a rebuilt voice stack

Available

Desktop (macOS, Windows, Linux); voice from v14.0.38, 18 August 2026; overlay and device controls from v14.2.20010, 21 August 2026

Overlay

Participants, a ring around whoever is speaking, and optionally the latest messages

Configuration

When it appears, which screen and corner, its size, its opacity, and how long names and messages remain

Connection quality

A reading beside the channel name, with ping and packet loss over the last two minutes

Price

Included in mssgs at no cost

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs adds watch parties and clips that export for TikTok, Snapchat and YouTube - Press - mssgs"
description: "mssgs has added watch parties, where a channel watches a video together and every participant can play, pause and scrub by default. The last minutes can be saved as a clip, edited, and exported for TikTok, Snapchat or YouTube."
canonical: https://mss.gs/en/press/watch-parties-clips
language: en
---

# mssgs adds watch parties and clips that export for TikTok, Snapchat and YouTube

A channel can now play a video for everyone at once, with playback shared rather than reserved for the host. The last minutes of a party can be saved as a clip, edited, and exported in the full-screen format each platform uses.

**Brummen, the Netherlands**, 19 August 2026

**mssgs**, the independent Dutch group chat application, has added **watch parties** and **clips**. A channel can play a video for everyone present at once, and the last minutes of that session can be saved as a clip, edited, and posted without interrupting what is playing.

Watch parties arrived in the desktop application for macOS, Windows and Linux on 15 August 2026 with version 14.0.36. Export of a clip in the formats used by TikTok, Snapchat and YouTube followed on 19 August 2026 with version 14.1.20003.

## Playback is shared, not reserved for the host

In a mssgs watch party, every participant can play, pause and scrub by default. The person who started the session holds no special control unless the channel decides otherwise, which reflects how a group of friends actually watches something together.

The channel shows who is currently watching. A party can be given a name when it starts, and the video can be moved into a window of its own carrying the picture, the controls, the viewers and the reactions. A party can also be handed to another device on the same account without the member giving up their place in it.

A time written in the channel becomes a moment that can be clicked, jumping the video to that point. A moment posted for a different video offers to switch the party over to it, or to start one if nothing is playing. When a party ends, the channel receives a recap of everything that was saved from it.

## Clips belong to the account, not to one computer

The last minutes of a party can be saved as a clip, trimmed and posted to the channel while the party continues. Clips are attached to the member’s account rather than to the machine that made them, and appear in a Clips tab on their profile regardless of which device recorded them.

A clip can be renamed, given a share link, or have its sharing withdrawn again at any time. A clip is a sequence of pieces rather than a single take, so it can be trimmed, cut in the middle, have a moment repeated, or be joined with pieces from other clips.

## Export in the format each platform uses

A clip can be exported for TikTok, a Snapchat story or YouTube in that platform’s full-screen format, rather than as a small strip in the middle of the display. Any clip a member owns can be re-edited and exported again, including one recorded on their phone or one the current computer no longer holds a copy of.

The mssgs mark is rendered into the picture rather than added as an overlay in the player, so it remains present after a clip has been downloaded, edited elsewhere or reposted.

> Watching something together is one of the oldest reasons to be in a group at all, and most implementations of it hand the remote control to one person. Sharing playback by default, and letting anyone keep the good part afterwards, is closer to what actually happens in a room. René van Sweeden, founder of mssgs

## Availability

Watch parties and clips are included in mssgs at no cost, in the desktop application for macOS, Windows and Linux. The full release notes are published at [mss.gs/en/releases](https://mss.gs/en/releases).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Features

Watch parties and clips

Available

Desktop (macOS, Windows, Linux) from v14.0.36, 15 August 2026; clip export from v14.1.20003, 19 August 2026

Playback control

Every participant can play, pause and scrub by default, not only the host

Clip ownership

Clips belong to the account rather than to one computer

Attribution

The mssgs mark is rendered into the picture, so it survives download and reposting

Price

Included in mssgs at no cost

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs adds a search that keeps the conversation around the result - Press - mssgs"
description: "mssgs has rebuilt search on the desktop. A result carries the conversation around it inside the search itself. Results are grouped per channel across a whole community, and can be filtered by author and by date."
canonical: https://mss.gs/en/press/search-in-context
language: en
---

# mssgs adds a search that keeps the conversation around the result

A search result now carries the exchange it came from, inside the search itself, so looking something up no longer moves a member out of the channel they were reading. Results cover a whole community and can be narrowed by channel, by author and by date.

**Brummen, the Netherlands**, 18 August 2026

**mssgs**, the independent Dutch group chat application, has rebuilt search in its desktop application. A result now carries the conversation around it, shown inside the search rather than by jumping to the channel, so looking something up no longer makes a member lose their place in what they were reading.

The first part shipped on 10 August 2026 with version 14.0.34, and the surrounding conversation and per-channel grouping followed on 18 August 2026 with version 14.0.37. Both are available for macOS, Windows and Linux.

## A result that explains itself

A single matching line is often not enough to tell whether it is the line that was wanted. Each result therefore shows the messages around it, with the author and time of each, without the application navigating anywhere.

Visiting the channel remains available through an explicit button on the result. Going there is a decision the member makes rather than something that happens to them as a side effect of searching.

## The whole community, then narrowed

Search covers an entire community by default. A panel lists the channels that contain matches and how many each holds, so a query can be narrowed to one channel once it is clear where the answer lives, and results are grouped per channel rather than presented as one flat list.

A search bar also opens directly beneath the channel header for searching the conversation in view. Matches are highlighted in place and arrow keys move between them, and several searches can run alongside one another, each with its own count, while the arrows walk the combined set in chronological order.

## Filters for the two things people actually remember

Results can be narrowed by who wrote them, with a count for each person and a removable chip for every name selected, and by date, either a single day or a period chosen from a calendar sheet on which either end can be corrected without starting the query again.

These are the two details a member is most likely to recall about a message they cannot find: roughly who said it, and roughly when.

> Search in a chat application usually works by taking you somewhere else, and then you have lost the conversation you were in and often the reason you searched. Bringing the surrounding messages to the result instead, and making the jump a button rather than a consequence, was the whole point of the rewrite. René van Sweeden, founder of mssgs

## Availability

Search is included in mssgs at no cost, in the desktop application for macOS, Windows and Linux. The full release notes are published at [mss.gs/en/releases](https://mss.gs/en/releases).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Feature

Search, in the desktop application

Available

Desktop (macOS, Windows, Linux) from v14.0.34, 10 August 2026; extended in v14.0.37, 18 August 2026

Scope

A whole community by default, narrowable to a single channel

Context

The surrounding conversation is shown inside the result

Filters

By author, with a count per person, and by a single day or a period

Price

Included in mssgs at no cost

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs gives content moderation to the communities themselves - Press - mssgs"
description: "mssgs has released a Reported Content queue in which community moderators review reports from their own members, with review deadlines and a visible vote. Reported content is preserved as it appeared, so deleting it does not end the review."
canonical: https://mss.gs/en/press/community-moderation
language: en
---

# mssgs gives content moderation to the communities themselves

Reported messages are reviewed by the members of the community they were posted in, working from a shared queue with review deadlines and a visible vote. The reported content is preserved as it appeared, so a deletion cannot end the review.

**Brummen, the Netherlands**, 4 August 2026

**mssgs**, the independent Dutch group chat application, has released a **Reported Content queue** that places moderation decisions with the members of the community concerned rather than with a central team. Moderators work from a shared queue in which each report carries a review deadline and the current state of the vote.

The queue is available in Moderator Tools in the desktop application for macOS, Windows and Linux from version 14.0.30, released on 4 August 2026.

## Reports are reviewed by the community they came from

A member can report a message, a direct message, a community or another member. The report is routed to the moderators of the community in which the content appeared, who see the item, its review deadline and how their colleagues have voted so far.

Communities on mssgs already govern themselves in other respects, including shared ownership and permissions set per role or per member. Moderation follows the same principle: the people who set a community’s standards are the people who apply them.

## The evidence outlives the deletion

When content is reported, it is stored as it appeared at that moment. Deleting a message after it has been reported therefore does not end the review, which removes the most obvious way to escape one.

A reporter may attach up to ten surrounding messages, so a moderator sees the exchange the reported message belonged to rather than a single line taken out of it. That addition shipped on 5 August 2026 with version 14.0.31.

## What the reporter and the reported party can see

A Reports section in Settings records what a member has reported and how each report was handled, alongside any reports made about their own content. A report is no longer something that disappears once it is sent.

Blocking is available from a profile, a message or a direct message, and every blocked account is listed in Settings so it can be reviewed or reversed later.

> A central moderation team scales badly and takes too long to understand a community. The members of a group already know what is normal in it and what is not, so the decision belongs to them. Our part is to make sure they see the whole exchange, that the evidence survives a deletion, and that the vote is in the open. René van Sweeden, founder of mssgs

## Availability

The Reported Content queue is included in mssgs at no cost and appears in Moderator Tools for members holding the relevant permissions. Background on the moderator role is published at [mss.gs/en/moderators](https://mss.gs/en/moderators).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Feature

Reported Content queue, in Moderator Tools

Available

Desktop (macOS, Windows, Linux) from v14.0.30, released 4 August 2026

Who reviews

Moderators drawn from the community the content was posted in

What can be reported

A message, a direct message, a community or a member

Evidence

The reported content is stored as it appeared and remains reviewable after deletion

Context

A report may carry up to ten surrounding messages, added by the reporter

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs 2.1 brings nine built-in games, an Apple Watch app and CarPlay to iPhone - Press - mssgs"
description: "mssgs 2.1 for iOS adds nine games playable directly in a conversation, an Apple Watch app for reading and replying, CarPlay support with Siri, a redesigned iPad layout and a light appearance."
canonical: https://mss.gs/en/press/games-watch-carplay
language: en
---

# mssgs 2.1 brings nine built-in games, an Apple Watch app and CarPlay to iPhone

The largest iOS release to date adds nine games playable inside a conversation, a wrist app for reading and replying, CarPlay support with Siri, and a three-column iPad layout.

**Brummen, the Netherlands**, 31 July 2026

**mssgs**, the independent Dutch group chat application, has released **version 2.1 for iOS**, its largest update for iPhone and iPad to date. The release adds nine games that are played inside a conversation, an Apple Watch application, CarPlay support, and a redesigned layout for iPad.

The update is available on the App Store and is free of charge, as the rest of mssgs is. All data continues to be hosted in the European Union.

## Nine games, played in the conversation itself

Games in mssgs are not a separate application or an embedded web page. A game is started in a conversation, and the board is part of the thread the players are already in. Version 2.1 makes the full set available on iOS: Four in a Row, Battleship, Checkers, Snake, Snake Capture, Tegostrat, Polymono, Word Guesser and Memory.

Each game supports lobbies, invite codes, joining by QR code, spectating, rematches and in-game emotes, so a match can be arranged and replayed without leaving the conversation.

## On the wrist and in the car

The new Apple Watch application shows conversations, allows a reply to be sent from the watch, and displays friends who are sharing their location on a map.

CarPlay support brings conversations, friends, calls and voice memos to the vehicle display, with Siri available for sending and reading messages. A separate Siri Shortcut shares a location together with a preset message.

## A layout that suits the device

The iPad layout has been rebuilt to show communities, channels and the open conversation side by side, rather than as a scaled iPhone view.

The release also introduces a light appearance, with the option to follow the system setting, and a Tools tab containing a stopwatch, a timer and a calculator.

## Photos, communities and everyday use

The photo and video editor now stacks several filters at once and adds a Cinematic look, GIF stickers and location filters on video posts. Conversations can be given individual backgrounds, a whole album can be saved to the photo library in a single action, and an important message can be kept at the top of a conversation for a few hours.

For communities, the release adds an information header, a quick start for owners, invitation and joining by QR code, an overview of bans, and channel access set per role or per member. PDF and other file attachments open in a built-in viewer.

> A group chat is where a lot of people spend their evenings, so it should be able to do more than carry text. Putting the games in the conversation rather than beside it, and putting the conversation on a watch and in a car, are the same idea from two directions. René van Sweeden, founder of mssgs

## Availability

mssgs 2.1 for iOS is available on the App Store for iPhone and iPad, with the Apple Watch application included. The full release notes for every platform are published at [mss.gs/en/releases](https://mss.gs/en/releases).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Release

mssgs 2.1 for iOS, released 31 July 2026

Games

Nine, playable inside a conversation, with lobbies, invite codes, QR joining, spectating and rematches

Apple Watch

Read and reply to conversations, and see friends on the map

CarPlay

Conversations, friends, calls and voice memos, with Siri for sending and reading messages

iPad

Communities, channels and conversation side by side

Price

Free, with no advertising

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "mssgs opens its chat to AI assistants through a local MCP server - Press - mssgs"
description: "mssgs has added a local Model Context Protocol server to its desktop application, allowing AI assistants to read and act in a member’s conversations. The server runs on the member’s own computer, can access only the channels they expose, and enables each capability separately."
canonical: https://mss.gs/en/press/ai-assistants-mcp
language: en
---

# mssgs opens its chat to AI assistants through a local MCP server

The desktop application now ships a Model Context Protocol server that runs on the member’s own computer. Assistants such as Claude and Cursor can access only the channels a member has chosen to expose, and each capability is enabled separately.

**Brummen, the Netherlands**, 29 June 2026

**mssgs**, the independent Dutch group chat application, has added a **local Model Context Protocol (MCP) server** to its desktop application. AI assistants that support the protocol, including Claude and Cursor, can read and act in a member’s conversations without mssgs sending those conversations anywhere.

The integration is available in the desktop application for macOS, Windows and Linux from version 13.3.2, released on 29 June 2026, and is listed under Integrations in Settings.

## The server runs on the member’s own computer

The MCP server is part of the desktop application rather than a hosted service. An assistant connects to it on the local machine, which means the account that the assistant acts as is the member’s own, already signed in, and no additional credential is issued to a third party.

Nothing is exposed by default. A member selects the channels and conversations an assistant may see, and the server can access those and nothing else. Channels that have not been selected are not visible to the integration at all.

## Every capability is enabled separately

Reading and writing are not a single switch. Sending messages, managing a community, handling direct-message requests, viewing profiles and stories, taking part in voice channels and reviewing the moderation queue are each a separate toggle in Settings, and the tools an assistant can see change as those toggles change.

Capabilities added since the first release include:

- Real-time delivery of new messages and presence, without polling.

- Rich embed cards with action buttons, and the button presses, reactions and replies they produce.

- File attachments by local path or inline data, not only already-hosted links.

- Voice channels and direct-message calls, including answering and declining.

- Community management: permission groups, invites, channels and categories.

- Search across a member’s messages, and the community moderation queue.

## Built for bots as well as assistants

The same interface serves bot accounts. A bot posts embed cards with action buttons and receives the resulting events, so a long-running task can show progress and then be updated in place rather than posting a second message.

Alongside MCP, mssgs offers incoming webhooks, slash-command triggers that call a webhook, and a REST API. Documentation for all of them is published at [mss.gs/en/docs](https://mss.gs/en/docs).

> An assistant that can read your team’s chat is a serious amount of access, and we did not want to grant it by uploading anything. Running the server on the member’s own machine, over channels they picked themselves, with a separate switch for every action, keeps the decision where it belongs. René van Sweeden, founder of mssgs

## Availability

The MCP integration is included in mssgs at no cost and is configured under Integrations in the desktop application’s settings. Setup instructions for each supported assistant are published at [mss.gs/en/docs/mcp](https://mss.gs/en/docs/mcp).

mssgs is free to use, carries no advertising, and hosts all data in the European Union. Downloads for every platform are available at [mss.gs/en/downloads](https://mss.gs/en/downloads).

Feature

Local Model Context Protocol server, in the desktop application

Available

macOS, Windows and Linux from version 13.3.2, released 29 June 2026

Where it runs

On the member’s own computer; no mssgs data is sent to a third-party service to enable it

Scope

Only the channels and conversations a member has explicitly exposed

Permissions

Every write capability is a separate opt-in toggle in Settings

Documentation

mss.gs/en/docs/mcp

mssgs is a group chat app for friends, communities and teams: channels, direct messages, voice and video calls, built-in games, bots and AI integrations over MCP. It is free to use and available on iOS, Android, macOS, Windows, Linux and the web.

mssgs is built by RUAL (Deverence Group B.V.) in Brummen, a Dutch software company that has been making business software and no-code platforms since 2009. All data is hosted in the EU, there are no ads, and nothing is sold on. mssgs is entirely self-funded.

Sami Bouchagratan Press & communications, mssgs (RUAL) [sami@mss.gs](mailto:sami@mss.gs) Deverence Group B.V. (RUAL), Brummen, the Netherlands

[Press kit](https://mss.gs/en/press#press-kit)

[Back to the press room](https://mss.gs/en/press)

## Sami Bouchagratan

Press & communications, mssgs (RUAL) Brummen, the Netherlands

For questions, interview requests or additional imagery, we normally reply within one working day.


---

---
title: "Help Desk - mssgs"
description: "Answers to everything about mssgs, from your first message to your own bot."
canonical: https://mss.gs/en/help
language: en
---

# How can we help?

Answers to everything about mssgs, from your first message to your own bot.

### Getting Started

New to mssgs? Start here - install the app, create your account and send your first message in minutes.

### Messaging

Direct messages, group chats, communities, media and formatting - everything about conversations.

### Games

Nine mini-games built into your chats - how to start, join and win them.

### Tools

Reminders, ghost mode, voice memos and more - small utilities that make chatting smoother.

### Bots & MCP

Connect AI assistants to your chats and build bots - from first token to full automation.

### Account & Settings

Your profile, your privacy and your notifications - set up mssgs the way you like it.

### Troubleshooting

Fixes for the common hiccups - and how to reach a human when you need one.

### API & MCP

Webhooks, slash-command triggers and the local MCP server for AI assistants.

### Building bots

Embed cards, action buttons and rendered previews - everything for your own bot.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Getting Started - Help Desk - mssgs"
description: "New to mssgs? Start here - install the app, create your account and send your first message in minutes."
canonical: https://mss.gs/en/help/getting-started
language: en
---

# Getting Started

New to mssgs? Start here - install the app, create your account and send your first message in minutes.

## What is mssgs?

mssgs is a messaging app with built-in mini-games, handy tools and AI bot support - for iOS, Android and desktop.

## Download & Install

Get mssgs on iPhone, Android, macOS, Windows or Linux - installed and synced in a few minutes.

## Creating Your Account

Sign up with just an email address - with a password, or completely passwordless via an emailed code.

## Quick Start Guide

From fresh install to your first message, first friend and first game - in five minutes.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "What is mssgs? - Help Desk - mssgs"
description: "mssgs is a messaging app with built-in mini-games, handy tools and AI bot support - for iOS, Android and desktop."
canonical: https://mss.gs/en/help/getting-started/what-is-mssgs
language: en
---

# What is mssgs?

mssgs is a messaging app with built-in mini-games, handy tools and AI bot support - for iOS, Android and desktop.

**mssgs is a messaging app with built-in mini-games, handy tools and full AI bot support.** You chat one-on-one or in communities - and without ever leaving the conversation you can start a game, set a reminder, or let a bot do the boring work.

### Messaging

Direct messages, group chats and full communities with channels. Voice memos, GIFs, replies, reactions, markdown - everything you expect, plus voice & video calls.

### Mini-games

Nine games built right into chat: Battleship, Four in a Row, Checkers, Snake, Snake Capture, Polymono, Word Guesser, Tegostrat and Memory. Challenge a friend and play between messages.

### Tools

Message reminders, ghost mode, one-time-view photos, voice memos, a whiteboard, streaks and more - small utilities that make chatting smoother.

### Bots & MCP

Bots are first-class citizens on mssgs. The desktop app has a built-in MCP server, so AI assistants like Claude can read, reply and even play games with you.

## Where does mssgs run?

Everywhere you do. Your chats stay in sync across all your devices:

- **iOS** - iPhone app on the App Store

- **Android** - on Google Play

- **macOS, Windows & Linux** - the desktop app (with the built-in MCP server)

See [Download & Install](https://mss.gs/en/help/getting-started/download-install) for links to every platform.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Download & Install - Help Desk - mssgs"
description: "Get mssgs on iPhone, Android, macOS, Windows or Linux - installed and synced in a few minutes."
canonical: https://mss.gs/en/help/getting-started/download-install
language: en
---

# Download & Install

Get mssgs on iPhone, Android, macOS, Windows or Linux - installed and synced in a few minutes.

mssgs is available on five platforms, all linked from one page: [mss.gs/en/downloads](https://mss.gs/en/downloads). Pick your platform below.

## iPhone & iPad (iOS)

## Android

## Desktop (macOS, Windows, Linux)

The desktop app includes everything mobile has - plus the [built-in MCP server](https://mss.gs/en/help/bots-mcp/what-is-mcp) for AI tools.

| Platform | What you get | Notes |
| --- | --- | --- |
| macOS | .dmg installer | Apple Silicon (arm64). Drag mssgs to Applications. |
| Windows | .exe installer or portable build | One-click installer; the portable version runs without installing. |
| Linux | .AppImage | Make executable and run - no install needed. |

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Creating Your Account - Help Desk - mssgs"
description: "Sign up with just an email address - with a password, or completely passwordless via an emailed code."
canonical: https://mss.gs/en/help/getting-started/create-account
language: en
---

# Creating Your Account

Sign up with just an email address - with a password, or completely passwordless via an emailed code.

All you need is an email address. You can register in the app or on the [signup page](https://mss.gs/en/signup).

## Register in the app

## Sign in without a password

Forgot your password - or just prefer not to use one? Choose **email code** on the sign-in screen. We email you a one-time code; entering it signs you in. No password reset needed.

## Secure your account with 2FA

Once you are in, turn on two-factor authentication:

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Quick Start Guide - Help Desk - mssgs"
description: "From fresh install to your first message, first friend and first game - in five minutes."
canonical: https://mss.gs/en/help/getting-started/quick-start
language: en
---

# Quick Start Guide

From fresh install to your first message, first friend and first game - in five minutes.

Five minutes from now you will be chatting - and probably playing. Here is the fastest route.

## 1. Add your first friend

Friends find you by username. Share yours, or add someone directly:

- Search their username in the app and send a **DM request**. They accept it before you can chat - that keeps spam out.

- Or scan their personal **mssgs QR code** with your camera to add them instantly.

## 2. Send your first message

Open the conversation and type away. Long-press (or right-click) any message for the good stuff: reply, react with an emoji, set a reminder, or pin it.

## 3. Play your first game

## 4. Join or create a community

Communities (servers) are group spaces with their own channels. Browse public communities, open an invite link from a friend, or create your own - it takes under a minute and you can invite people straight away.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Messaging - Help Desk - mssgs"
description: "Direct messages, group chats, communities, media and formatting - everything about conversations."
canonical: https://mss.gs/en/help/messaging
language: en
---

# Messaging

Direct messages, group chats, communities, media and formatting - everything about conversations.

## Sending Messages

Type, send, reply, react and pin - plus read receipts that show exactly what happened to your message.

## Group Chats & Communities

From a quick group DM to a full community with channels, roles and permissions.

## Media Sharing

Photos, videos, files, GIFs and voice memos - up to 25 MB free, with galleries and previews built in.

## Message Formatting

Markdown for bold, italic, code and quotes - plus emoji, custom emoji and shortcodes.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Sending Messages - Help Desk - mssgs"
description: "Type, send, reply, react and pin - plus read receipts that show exactly what happened to your message."
canonical: https://mss.gs/en/help/messaging/sending-messages
language: en
---

# Sending Messages

Type, send, reply, react and pin - plus read receipts that show exactly what happened to your message.

Open any conversation and type in the input bar at the bottom - hit Enter to send ( Shift + Enter for a new line on desktop). That's the basics. The good stuff is one press away.

## Do more with a message

Long-press (mobile) or right-click (desktop) any message to:

- **Reply** - quote it in a threaded reply

- **React** - drop an emoji reaction on it

- **Pin** - keep it at the top of the conversation for everyone

- **Set a reminder** - get notified about it later (see [Message Reminders](https://mss.gs/en/help/tools/reminders))

- **Edit or delete** - fix typos or take it back (your own messages)

## Know when you're read

mssgs shows Snapchat-style delivery states in direct messages: **Sent**, **Opened** and **Viewed** - so you never have to ask "did you see this?". In group conversations, use the **Read by** option to see exactly who has read a message.

## Mentions and typing

Type @ followed by a name to mention someone - they get a notification even if the conversation is muted. You can see when the other person is typing, and in DMs you even see live indicators when they're drawing on the whiteboard.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Group Chats & Communities - Help Desk - mssgs"
description: "From a quick group DM to a full community with channels, roles and permissions."
canonical: https://mss.gs/en/help/messaging/group-chats
language: en
---

# Group Chats & Communities

From a quick group DM to a full community with channels, roles and permissions.

There are two ways to chat with multiple people, depending on how serious the group is.

## Group DMs - quick and casual

Start a group direct message from your DM list by adding multiple friends. Perfect for weekend plans. You can rename the group anytime, and everyone can see who's in it.

## Communities - the full structure

For clubs, teams, friend groups and anything that lasts, create a **community** (server). Communities have their own channels:

- **Text channels** - organized topics, unlimited channels

- **Voice channels** - drop-in talk rooms with camera and screen sharing

- **Photo channels** - a shared camera roll

- **Suggestions channels** - members post ideas, everyone votes them up or down

As the owner you manage **roles and permissions** (who can post where, who can moderate), create **invite links** (optionally restricted to a specific email domain - great for companies), and even share ownership with co-owners. Public communities can be discovered in the server browser.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Media Sharing - Help Desk - mssgs"
description: "Photos, videos, files, GIFs and voice memos - up to 25 MB free, with galleries and previews built in."
canonical: https://mss.gs/en/help/messaging/media-sharing
language: en
---

# Media Sharing

Photos, videos, files, GIFs and voice memos - up to 25 MB free, with galleries and previews built in.

Tap the **+** or attachment button in any chat to share media. mssgs handles the rest: multiple photos become a swipeable gallery, links expand into rich previews, and videos play inline.

## What you can send

| Type | How | Notes |
| --- | --- | --- |
| Photos & videos | Attachment picker or camera | Multi-select becomes a gallery |
| Files | Attachment picker | 25 MB free - larger with Premium |
| GIFs | GIF picker in the input bar | Search and send in two taps |
| Voice memos | Hold the mic button | See [Voice Memos](https://mss.gs/en/help/tools/voice-memos) |
| Location | Attachment picker → location | Live or a pinned spot on the map |

## One-time view

Sending something sensitive? Mark a photo or video as **one-time view**: the recipient can open it once, and then it's gone. See [Ghost Mode & One-Time View](https://mss.gs/en/help/tools/ghost-mode-one-time-view).

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Message Formatting - Help Desk - mssgs"
description: "Markdown for bold, italic, code and quotes - plus emoji, custom emoji and shortcodes."
canonical: https://mss.gs/en/help/messaging/message-formatting
language: en
---

# Message Formatting

Markdown for bold, italic, code and quotes - plus emoji, custom emoji and shortcodes.

mssgs speaks markdown. Type it naturally and it renders beautifully - including full syntax highlighting for code.

## Markdown cheat sheet

| You type | You get |
| --- | --- |
| **bold** | **bold** |
| *italic* | *italic* |
| ~~strike~~ | strike |
| `inline code` | inline code |
| ```js … ``` | code block with syntax highlighting |
| > quote | quote block |

## Emoji everywhere

- **Emoji picker** - full searchable picker in the input bar

- **Custom emoji** - every community can upload its own

- **Shortcodes** - type :fire: and it becomes the emoji, image shortcodes included

- **Reactions** - long-press any message to react with emoji

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Games - Help Desk - mssgs"
description: "Nine mini-games built into your chats - how to start, join and win them."
canonical: https://mss.gs/en/help/games
language: en
---

# Games

Nine mini-games built into your chats - how to start, join and win them.

## Playing Games: Lobbies, Invites & Spectating

Start a game from any chat, let friends join with a card, code or QR, and never miss your turn.

## Battleship - How to Play

Hide your fleet, call your shots, sink theirs first. Two players, 60 seconds per turn.

## Four in a Row - How to Play

Drop chips, connect four before your friend does. Two players, 45 seconds per turn.

## Checkers - How to Play

Authentic draughts with forced captures and flying kings, on 8×8 or 10×10.

## Snake - How to Play

Real-time multiplayer snake. Your trail is permanent, any crash is fatal - last snake alive wins.

## Snake Capture - How to Play

Draw trails, enclose ground and steal territory. Biggest turf at the buzzer wins.

## Polymono - How to Play

Buy streets, build houses, bankrupt your friends - compact enough for a chat break.

## Word Guesser - How to Play

One secret 5-letter word, everyone racing to crack it first in 15-second turns.

## Tegostrat - How to Play

A full 10×10 battlefield with hidden ranks. Capture the flag to win.

## Memory - How to Play

Matching pairs on a shuffled grid. A pair keeps your turn, a miss shows everyone where the cards are.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Playing Games: Lobbies, Invites & Spectating - Help Desk - mssgs"
description: "Start a game from any chat, let friends join with a card, code or QR, and never miss your turn."
canonical: https://mss.gs/en/help/games/playing-games
language: en
---

# Playing Games: Lobbies, Invites & Spectating

Start a game from any chat, let friends join with a card, code or QR, and never miss your turn.

Every conversation in mssgs has games built in. No downloads, no separate apps - the whole lobby happens inside your chat.

## Start a game

## Other ways to join

- **Room code** - every lobby has a 6-character code (like K7PQ2M ) you can share anywhere

- **QR code** - scan it with a phone camera to join from another device

- **Link** - the mssgs:// join link drops you straight into the room

## While you play

- **Floating game bar** - follows you through the app with "Your turn" reminders and one tap back into the action; run up to 5 games at once

- **Spectating** - public games can be watched live; a Watch button appears in the chat header

- **Turn timers** - per-turn countdowns keep things moving

- **Result cards** - the final board posts to the chat when the game ends, with a one-tap **rematch**

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Battleship - How to Play - Help Desk - mssgs"
description: "Hide your fleet, call your shots, sink theirs first. Two players, 60 seconds per turn."
canonical: https://mss.gs/en/help/games/battleship
language: en
---

# Battleship - How to Play

Hide your fleet, call your shots, sink theirs first. Two players, 60 seconds per turn.

The classic fleet game on a 10×10 grid. Place, fire, sink - a hit means you shoot again.

## Rules

2 players · turn-based · 10×10 grid. [Full rules & interactive demo](https://mss.gs/en/games/battleship)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Four in a Row - How to Play - Help Desk - mssgs"
description: "Drop chips, connect four before your friend does. Two players, 45 seconds per turn."
canonical: https://mss.gs/en/help/games/four-in-a-row
language: en
---

# Four in a Row - How to Play

Drop chips, connect four before your friend does. Two players, 45 seconds per turn.

The timeless connect-four duel on an 8×8 board. Every chip falls to the lowest free spot, so every drop matters.

## Rules

2 players · turn-based · 8×8 board. [Full rules & interactive demo](https://mss.gs/en/games/four-in-a-row)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Checkers - How to Play - Help Desk - mssgs"
description: "Authentic draughts with forced captures and flying kings, on 8×8 or 10×10."
canonical: https://mss.gs/en/help/games/checkers
language: en
---

# Checkers - How to Play

Authentic draughts with forced captures and flying kings, on 8×8 or 10×10.

Real draughts rules - no shortcuts. Capturing is mandatory, chain jumps are allowed, and crowned pieces fly across the board.

## Rules

2 players · turn-based · 8×8 or 10×10 board. [Full rules & interactive demo](https://mss.gs/en/games/checkers)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Snake - How to Play - Help Desk - mssgs"
description: "Real-time multiplayer snake. Your trail is permanent, any crash is fatal - last snake alive wins."
canonical: https://mss.gs/en/help/games/snake
language: en
---

# Snake - How to Play

Real-time multiplayer snake. Your trail is permanent, any crash is fatal - last snake alive wins.

Snake as a real-time battle for up to four players. Every trail stays on the board forever - including yours.

## Rules

2-4 players · real-time · speed and arena size options. [Full rules & interactive demo](https://mss.gs/en/games/snake)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Snake Capture - How to Play - Help Desk - mssgs"
description: "Draw trails, enclose ground and steal territory. Biggest turf at the buzzer wins."
canonical: https://mss.gs/en/help/games/snake-capture
language: en
---

# Snake Capture - How to Play

Draw trails, enclose ground and steal territory. Biggest turf at the buzzer wins.

A territory-grabbing twist on Snake. Greed is rewarded - but your trail is your weak spot.

## Rules

2-4 players · real-time · round clock. [Full rules & interactive demo](https://mss.gs/en/games/snake-capture)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Polymono - How to Play - Help Desk - mssgs"
description: "Buy streets, build houses, bankrupt your friends - compact enough for a chat break."
canonical: https://mss.gs/en/help/games/polymono
language: en
---

# Polymono - How to Play

Buy streets, build houses, bankrupt your friends - compact enough for a chat break.

The property-trading classic on a compact board, with your avatars as tokens and in-game chat & emotes.

## Rules

2-4 players · turn-based · 16, 24 or 32-tile board. [Full rules & interactive demo](https://mss.gs/en/games/polymono)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Word Guesser - How to Play - Help Desk - mssgs"
description: "One secret 5-letter word, everyone racing to crack it first in 15-second turns."
canonical: https://mss.gs/en/help/games/word-guesser
language: en
---

# Word Guesser - How to Play

One secret 5-letter word, everyone racing to crack it first in 15-second turns.

A shared-board word duel. Everyone guesses the same word in rapid turns - green letters earn bonus guesses.

## Rules

2-4 players · turn-based · English & Dutch word lists, difficulty and round options. [Full rules & interactive demo](https://mss.gs/en/games/word-guesser)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Tegostrat - How to Play - Help Desk - mssgs"
description: "A full 10×10 battlefield with hidden ranks. Capture the flag to win."
canonical: https://mss.gs/en/help/games/tegostrat
language: en
---

# Tegostrat - How to Play

A full 10×10 battlefield with hidden ranks. Capture the flag to win.

The classic battle of wits on a full 10×10 field with the two lakes. Your army plays in green - the enemy's ranks stay hidden until a fight reveals them.

## Rules

2 players · turn-based · hidden information. [Full rules & interactive demo](https://mss.gs/en/games/tegostrat)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Memory - How to Play - Help Desk - mssgs"
description: "Matching pairs on a shuffled grid. A pair keeps your turn, a miss shows everyone where the cards are."
canonical: https://mss.gs/en/help/games/memory
language: en
---

# Memory - How to Play

Matching pairs on a shuffled grid. A pair keeps your turn, a miss shows everyone where the cards are.

The classic matching-pairs game for two. Every flip is public, so a miss is a gift to your opponent.

## Rules

2 players · turn-based · 4×4 (8 pairs), 6×6 (18) or 8×8 (32) board. [Full rules & interactive demo](https://mss.gs/en/games/memory)

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Tools - Help Desk - mssgs"
description: "Reminders, ghost mode, voice memos and more - small utilities that make chatting smoother."
canonical: https://mss.gs/en/help/tools
language: en
---

# Tools

Reminders, ghost mode, voice memos and more - small utilities that make chatting smoother.

## Tools Overview

A quick tour of the built-in tools hiding in every conversation.

## Message Reminders

Never forget to reply: attach a reminder to any message and mssgs pings you when it’s due.

## Ghost Mode & One-Time View

Conversations that leave no trace: messages that clear themselves, and media that opens exactly once.

## Voice Memos

Hold the mic, talk, release to send. Voice messages with a proper player.

## Slash Commands

Type / for quick commands and fun emoticons - plus powerful bot triggers in communities.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Tools Overview - Help Desk - mssgs"
description: "A quick tour of the built-in tools hiding in every conversation."
canonical: https://mss.gs/en/help/tools/tools-overview
language: en
---

# Tools Overview

A quick tour of the built-in tools hiding in every conversation.

Beyond plain messaging, every mssgs conversation packs a set of built-in tools. Here's the tour - each has its own guide.

### [Message Reminders](https://mss.gs/en/help/tools/reminders)

Attach a reminder to any message and get notified when it matters.

### [Ghost Mode & One-Time View](https://mss.gs/en/help/tools/ghost-mode-one-time-view)

Messages that clean themselves up, and photos that can only be opened once.

### [Voice Memos](https://mss.gs/en/help/tools/voice-memos)

Hold, talk, send. Sometimes typing is too slow.

### [Slash Commands](https://mss.gs/en/help/tools/slash-commands)

Quick commands like /shrug - plus bot triggers in communities.

## And there's more

- **Whiteboard** - sketch together right inside a DM

- **Streaks** - keep a daily chat streak alive with friends (lost it? you get one restore per month)

- **Chat locks** - protect sensitive conversations with a PIN code (see [Privacy Settings](https://mss.gs/en/help/account/privacy-settings))

- **Suggestions channels** - community channels where members vote ideas up or down

- **Live location** - share where you are on the map, for an hour or until you stop it

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Message Reminders - Help Desk - mssgs"
description: "Never forget to reply: attach a reminder to any message and mssgs pings you when it’s due."
canonical: https://mss.gs/en/help/tools/reminders
language: en
---

# Message Reminders

Never forget to reply: attach a reminder to any message and mssgs pings you when it’s due.

Some messages you can't handle right now - but you will forget them later. Reminders fix that.

## Set a reminder

When the reminder comes due, mssgs sends you a notification that takes you straight back to that exact message.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Ghost Mode & One-Time View - Help Desk - mssgs"
description: "Conversations that leave no trace: messages that clear themselves, and media that opens exactly once."
canonical: https://mss.gs/en/help/tools/ghost-mode-one-time-view
language: en
---

# Ghost Mode & One-Time View

Conversations that leave no trace: messages that clear themselves, and media that opens exactly once.

Not every conversation needs to live forever. mssgs has two privacy tools for that.

## Ghost mode

When ghost mode is on for a DM, **messages disappear after everyone has read them and left the chat**. Come back later and the slate is clean - nothing left behind. Toggle it per conversation from the chat bar: for one message, for this session, or until you turn it off. Both sides can see when it's active.

## One-time view

Sending a photo or video that's meant for one look only?

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Voice Memos - Help Desk - mssgs"
description: "Hold the mic, talk, release to send. Voice messages with a proper player."
canonical: https://mss.gs/en/help/tools/voice-memos
language: en
---

# Voice Memos

Hold the mic, talk, release to send. Voice messages with a proper player.

Sometimes it's faster to say it than type it. Voice memos are built into every chat.

## Record and send

Voice memos arrive with a proper inline player, so the other side can pause and scrub. On desktop, received audio even gets a floating music-player bar.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Slash Commands - Help Desk - mssgs"
description: "Type / for quick commands and fun emoticons - plus powerful bot triggers in communities."
canonical: https://mss.gs/en/help/tools/slash-commands
language: en
---

# Slash Commands

Type / for quick commands and fun emoticons - plus powerful bot triggers in communities.

Two kinds of slash commands live in mssgs. On desktop, typing / in the input bar opens the quick-commands picker with the fun classics below. And in communities and bot DMs, / brings up triggers: custom commands that call a webhook.

## Quick commands (fun, desktop)

| Command | Result |
| --- | --- |
| /shrug | ¯\_(ツ)_/¯ |
| /tableflip | (╯°□°）╯︵ ┻━┻ |
| /unflip | ┬─┬ ノ( ゜-゜ノ) |
| /lenny | ( ͡° ͜ʖ ͡°) |

## Triggers (powerful)

Communities can define their own slash commands - **triggers** - that call a webhook and post the result: think /standup , /deploy or /weather . Bot accounts can ship triggers too, which makes them available in your DM with that bot. Building triggers is covered in the [webhook documentation](https://mss.gs/en/docs/webhooks).

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Bots & MCP - Help Desk - mssgs"
description: "Connect AI assistants to your chats and build bots - from first token to full automation."
canonical: https://mss.gs/en/help/bots-mcp
language: en
---

# Bots & MCP

Connect AI assistants to your chats and build bots - from first token to full automation.

## What is the mssgs MCP?

A secure, local bridge that lets AI assistants like Claude read, reply and even play games in your chats.

## Connect Your AI (Claude, Cursor & more)

Three steps from zero to an AI assistant that works inside your chats - no coding required.

## Creating a Bot

Bots are first-class users on mssgs - build one with webhooks and slash-command triggers.

## Bot Cards & Buttons

Rich embed cards with colors, fields and images - plus buttons members can actually press.

## MCP Security & Privacy

Off by default, read-only first, local-only, revocable - exactly how AI access to your chats stays safe.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "What is the mssgs MCP? - Help Desk - mssgs"
description: "A secure, local bridge that lets AI assistants like Claude read, reply and even play games in your chats."
canonical: https://mss.gs/en/help/bots-mcp/what-is-mcp
language: en
---

# What is the mssgs MCP?

A secure, local bridge that lets AI assistants like Claude read, reply and even play games in your chats.

**MCP (Model Context Protocol) is an open standard that lets AI tools talk to apps.** The mssgs desktop app has a complete MCP server built in - switch it on, and AI assistants like Claude or Cursor get a secure, controlled window into your chats.

## What that means in practice

Once connected, your AI assistant can actually *do* things in mssgs - around 40 capabilities, including:

### Read & summarize

"Summarize #general in three bullets" - it reads channels, DMs, mentions and pinned messages.

### Write & reply

Send messages, reply, react, edit and pin - only if you explicitly allow writing.

### Play games

It can accept game invites, read the board and make real moves. Yes, really.

### Calls & presence

Start or answer DM voice calls, show typing, and get live updates as they happen.

## Where does it run?

Entirely on **your computer**. The MCP server lives inside the desktop app at 127.0.0.1 (loopback - unreachable from the internet) and only runs while the app is open and you're signed in. Your chats don't go anywhere new; the AI talks to your machine, your machine talks to mssgs.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Connect Your AI (Claude, Cursor & more) - Help Desk - mssgs"
description: "Three steps from zero to an AI assistant that works inside your chats - no coding required."
canonical: https://mss.gs/en/help/bots-mcp/connect-your-ai
language: en
---

# Connect Your AI (Claude, Cursor & more)

Three steps from zero to an AI assistant that works inside your chats - no coding required.

You need the mssgs **desktop app** (macOS, Windows or Linux) and an AI tool that speaks MCP - Claude Desktop and Cursor are the usual picks.

## Step 1 - Enable MCP access

## Step 2 - Create a token

Create a named token ("Claude laptop", for example). The token is the key your AI uses - you can see its activity and revoke it anytime.

## Step 3 - Hand the config to your AI tool

Click **Copy config** and paste the ready-made block into your AI tool's MCP settings (Claude Desktop or Cursor). Prefer the terminal?

```
claude mcp add --transport http mssgs http://127.0.0.1:7444/mcp \
  --header "Authorization: Bearer <your-token>"
```

Full protocol details live in the [MCP section of the API docs](https://mss.gs/en/docs#mcp).

## Try it

Ask your assistant: *"What channels can you see?"* - then *"Summarize the last 50 messages in #general"*, or start a [game](https://mss.gs/en/help/games/playing-games) and invite it to play.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Creating a Bot - Help Desk - mssgs"
description: "Bots are first-class users on mssgs - build one with webhooks and slash-command triggers."
canonical: https://mss.gs/en/help/bots-mcp/creating-a-bot
language: en
---

# Creating a Bot

Bots are first-class users on mssgs - build one with webhooks and slash-command triggers.

On mssgs, bots aren't hacks or workarounds - they're **first-class users** with a BOT label, their own profile and custom status. Your community members can mention them, DM them and use their commands.

## The building blocks

- **Incoming webhooks** - a URL your service posts to, and the message lands in a channel. Perfect for alerts (CI results, monitoring, tickets).

- **Slash-command triggers** - members type /yourcommand , mssgs calls your webhook, your response posts back. Interactive bots without any framework.

- **Action buttons** - buttons on bot messages that fire triggers or webhook actions when pressed (see [Bot Cards & Buttons](https://mss.gs/en/help/bots-mcp/bot-cards-buttons)).

## Your first bot in five minutes

Full request/response formats, examples and error codes live in the [API documentation](https://mss.gs/en/docs), with rendered card previews in the [bot guide](https://mss.gs/en/docs/bots). And if you want AI-driven behavior without building anything, the [MCP route](https://mss.gs/en/help/bots-mcp/what-is-mcp) might be all you need.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Bot Cards & Buttons - Help Desk - mssgs"
description: "Rich embed cards with colors, fields and images - plus buttons members can actually press."
canonical: https://mss.gs/en/help/bots-mcp/bot-cards-buttons
language: en
---

# Bot Cards & Buttons

Rich embed cards with colors, fields and images - plus buttons members can actually press.

Bot messages don't have to be plain text. mssgs bots post **embed cards** - structured, good-looking messages - and **action buttons** that make them interactive.

## Embed cards

An embed can have:

- a **colored sidebar** (blue, green, red, yellow, purple, orange)

- title (optionally linked), subtitle and markdown description

- **fields** - key/value rows for structured data

- **images** - a hero image or a gallery

- a **status pill**, badge, or diff stats (+n / −n / files) for code-y notifications

- a **loader state** - "AI is thinking…" that you edit in place when the result arrives

Think GitHub pull-request notifications, deploy status, support tickets - glanceable instead of walls of text.

## Action buttons

Buttons sit under the card and do something when pressed:

- trigger: - run one of your slash-command triggers (chain them for multi-step flows)

- url: - open a link

- webhook_action - call your service and update the message in place ("Approve", "Retry", "Resolve")

The button press, reactions and replies come back to your service as events. Full specs with rendered card previews: [the bot documentation](https://mss.gs/en/docs/bots).

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "MCP Security & Privacy - Help Desk - mssgs"
description: "Off by default, read-only first, local-only, revocable - exactly how AI access to your chats stays safe."
canonical: https://mss.gs/en/help/bots-mcp/mcp-security
language: en
---

# MCP Security & Privacy

Off by default, read-only first, local-only, revocable - exactly how AI access to your chats stays safe.

Giving an AI access to your chats sounds scary. It shouldn't be - the mssgs MCP was designed so you stay in control at every step.

## The six guarantees

### Off by default

Nothing runs until you explicitly switch on AI / MCP access in Settings → Integrations.

### Read-only first

Sending messages is a separate switch. Until you flip it, the AI can only look.

### Local only

The server binds to 127.0.0.1 - unreachable from the network or internet - with protection against DNS-rebinding tricks.

### Granular permissions

Per-channel picker, separate toggles for sending, DM requests, all-DM access, profile & story access and keep-computer-awake.

### Revocable tokens

Tokens are named, per-tool, and revocable in one click - with a per-token activity sparkline so you can see exactly when each was used.

### Only while you're there

The server runs only while the desktop app is open and you're signed in. Close the app, access ends.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Account & Settings - Help Desk - mssgs"
description: "Your profile, your privacy and your notifications - set up mssgs the way you like it."
canonical: https://mss.gs/en/help/account
language: en
---

# Account & Settings

Your profile, your privacy and your notifications - set up mssgs the way you like it.

## Profile Management

Avatar, bio, username, badges and your public profile page at mss.gs/@you.

## Privacy Settings

End-to-end encryption, DM requests, chat locks and location privacy - your controls, explained.

## Notifications

Fine-grained alerts: per-conversation mutes, per-channel control, and smart routing between devices.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Profile Management - Help Desk - mssgs"
description: "Avatar, bio, username, badges and your public profile page at mss.gs/@you."
canonical: https://mss.gs/en/help/account/profile-management
language: en
---

# Profile Management

Avatar, bio, username, badges and your public profile page at mss.gs/@you.

Your profile is how people recognize you. Find it under **Settings → Profile** (or tap your own avatar anywhere).

## What you can set

- **Avatar** - upload a photo; a built-in editor crops it right

- **Display name & styling** - the name people see, with optional styling

- **Bio** - a few lines about you

- **Username** - unique, how friends find you, and the address of your public profile: mss.gs/@username

## Badges

Some profiles carry badges: **Verified**, **Staff**, **Moderator**, **Premium** and **BOT**. They appear next to the name everywhere in the app and on the public profile page - so you can always tell who (or what) you're talking to.

## Your public page

Every user gets a public page at mss.gs/@username with your avatar, bio, badges and - if you post them - your public stories. Handy to share with people who don't have mssgs yet.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Privacy Settings - Help Desk - mssgs"
description: "End-to-end encryption, DM requests, chat locks and location privacy - your controls, explained."
canonical: https://mss.gs/en/help/account/privacy-settings
language: en
---

# Privacy Settings

End-to-end encryption, DM requests, chat locks and location privacy - your controls, explained.

mssgs is built privacy-first: EU hosting, GDPR compliance and end-to-end encrypted private chats by default. These are the knobs you control yourself.

## Who can reach you

- **DM requests** - new people land in a request queue first; you accept or deny. Spam never reaches your inbox.

- **Ghost mode** - per-DM switch that makes messages disappear after everyone's read them and left the chat (see [Ghost Mode](https://mss.gs/en/help/tools/ghost-mode-one-time-view)).

## Locks on your chats

- **Chat locks** - protect any conversation with a 4-digit PIN; it re-locks automatically after a few minutes idle

- **Biometric unlock** - open locked chats with Face ID / Touch ID where your device supports it

- **Memories** - your private photo vault, also behind Face ID or a code

## Location privacy

Sharing your live location is always your choice per conversation. With Premium you get two extra tools: **freeze** your location on a spot (it stays there until you unfreeze) or go **ghost** on the map entirely.

## Account security

Enable two-factor authentication under **Settings → Security** (authenticator app, SMS or email) and review your signed-in devices under **Settings → Devices** - sign out anything you don't recognize with one tap.

## Your data

- **No AI training** - your message content is never used to train AI models.

- **Full export, anytime** - download all your data whenever you like. If you cancel, you get 30 days to export before everything is permanently deleted.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Notifications - Help Desk - mssgs"
description: "Fine-grained alerts: per-conversation mutes, per-channel control, and smart routing between devices."
canonical: https://mss.gs/en/help/account/notifications
language: en
---

# Notifications

Fine-grained alerts: per-conversation mutes, per-channel control, and smart routing between devices.

Notifications should work for you, not against you. mssgs lets you tune them per conversation and per device.

## The controls

- **Per-DM mute** - silence one conversation without leaving it

- **Per-server mute** - quiet a whole community; mentions still get through

- **Per-channel settings** - choose which channels may push and which stay silent

- **Mentions** - @you always breaks through mutes (that's the point)

## Between devices

Signed in on desktop and phone? The **desktop inactivity timeout** routes notifications to your phone when your computer has been idle for a while - so alerts land where you actually are. On macOS, unread counts show as a Dock badge.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Troubleshooting - Help Desk - mssgs"
description: "Fixes for the common hiccups - and how to reach a human when you need one."
canonical: https://mss.gs/en/help/troubleshooting
language: en
---

# Troubleshooting

Fixes for the common hiccups - and how to reach a human when you need one.

## Common Issues

Login codes, notifications, updates, games and MCP connections - the usual suspects, solved.

## Contact Support

How to reach the mssgs team - and what to include so we can help you fast.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Common Issues - Help Desk - mssgs"
description: "Login codes, notifications, updates, games and MCP connections - the usual suspects, solved."
canonical: https://mss.gs/en/help/troubleshooting/common-issues
language: en
---

# Common Issues

Login codes, notifications, updates, games and MCP connections - the usual suspects, solved.

## I never received my login code

- Check your **spam/junk folder** - the code email sometimes lands there.

- Wait a full minute and request a new code; only the **latest** code is valid.

- Double-check the email address for typos.

## I'm not getting notifications

- Check the **system notification permission** for mssgs (iOS/Android Settings → Notifications; macOS System Settings → Notifications).

- Check whether the conversation or server is **muted** in mssgs itself - see [Notifications](https://mss.gs/en/help/account/notifications).

- On desktop: if the inactivity timeout is routing alerts to your phone, they'll arrive there instead.

## The desktop app won't update

Updates install on restart. Quit mssgs completely (tray icon → Quit) and reopen it. Still stuck? Download the latest installer from [mss.gs/downloads](https://mss.gs/en/downloads) and install over the existing copy - your chats and settings are untouched.

## A game invite doesn't work

- Make sure everyone is on a **recent version** of mssgs - game rooms need matching versions.

- Ask the host for the **6-character room code** or QR and join manually from the game menu.

- Room full? Games seat 2 to 4 players depending on the title - see [Playing games](https://mss.gs/en/help/games/playing-games).

## My AI tool can't reach the MCP server

- The MCP server only runs while the **desktop app is open and you're signed in**.

- Confirm **AI / MCP access** is on in Settings → Integrations, and your **token** hasn't been revoked.

- If the port changed (it walks forward when busy), copy the config again from the Integrations tab.

## Messages won't send

- Check your connection - mssgs reconnects automatically when you're back.

- Large attachment? The free limit is 25 MB.

- Check [status.mss.gs](https://status.mss.gs) - if something is wrong on our side, it's listed there.

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.


---

---
title: "Contact Support - Help Desk - mssgs"
description: "How to reach the mssgs team - and what to include so we can help you fast."
canonical: https://mss.gs/en/help/troubleshooting/contact-support
language: en
---

# Contact Support

How to reach the mssgs team - and what to include so we can help you fast.

Can't find the answer here? A human reads every message.

## Reach us

- **Contact form** - [mss.gs/contact](https://mss.gs/en/contact), the fastest route

- **Email** - [support@mss.gs](mailto:support@mss.gs)

- **In the app** - Settings → send feedback, logs attached if you choose

We usually reply within **24 hours**, in Dutch or English - your pick.

## Help us help you

Include these and we'll get to the answer in one reply:

- Your **username** (never your password - we will never ask for it)

- The **platform and version** (iOS / Android / desktop, found in Settings → About)

- What you **expected** and what **actually happened**

- A screenshot or screen recording, if you can

## Was this article helpful?

Didn’t find what you were looking for? We’re happy to help.

## Still need help?

Our support team usually replies within 24 hours.
