Skip to main content
Glama

bbw-chat-mcp

MCP server for bbw-chat.de (Synology Chat). Read channels/messages, find users, send messages and files — from any MCP client (Claude, Hermes, etc.).

Setup

git clone https://github.com/Louis-Lastella/bbw-chat-mcp.git
cd bbw-chat-mcp
cp .env.example .env   # fill in your credentials
uv sync

.env:

BBW_CHAT_HOST=bbw-chat.de
BBW_CHAT_USER=your-username
BBW_CHAT_PASS=your-password

Related MCP server: bluebubbles-mcp

Use with an MCP client

Add to your client's MCP config (e.g. Claude Desktop claude_desktop_config.json, or Hermes config.yaml):

{
  "mcpServers": {
    "bbw-chat": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/bbw-chat-mcp", "server.py"]
    }
  }
}

Restart the client — 6 tools show up: list_channels, find_user, get_recent_posts, dm_channel_for_user, send_message, send_file.

Tools

Tool

What it does

list_channels()

List joined channels/DMs (id, name, type, unread)

find_user(name_query)

Find users by partial username

get_recent_posts(channel_id, limit=20)

Read recent messages in a channel

dm_channel_for_user(user_id)

Get the 1:1 DM channel id for a user

send_message(channel_id, message)

Post a text message

send_file(channel_id, file_path, message="")

Upload a file, optionally with a caption message

Available Tools

6 tools
dm_channel_for_userDm Channel For UserA

Find (or None if none exists yet) the 1:1 DM channel_id for a given user_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It explicitly notes the tool returns None if no DM channel exists, and the verb 'Find' implies a non-mutating read operation, adding valuable behavioral nuance beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the verb and result, includes the None case, and contains no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter lookup tool, this describes the input, the output, and the no-result case. It lacks explicit read-only or error-behavior statements, but the scope is simple enough that nothing critical is missing for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter, user_id, with zero description coverage. The description mentions 'a given user_id,' linking the parameter to its purpose. While it adds no extra formatting or validity constraints, for a simple integer ID this is sufficient to invoke correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific operation: finding the 1:1 DM channel_id for a given user_id. It distinguishes itself from siblings like list_channels and find_user by naming the exact resource (DM channel) and the lookup key (user_id).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you need a user's DM channel_id. It does not explicitly name alternatives or exclusions, but its purpose is unambiguous enough that an agent can infer when to select it over list_channels or find_user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_userFind UserA

Find users by (partial, case-insensitive) username, e.g. 'wilke'.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It reveals key behavior: case-insensitive partial matching and provides a concrete example. It does not discuss edge cases like multiple matches or no results, but for a simple lookup tool this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose and matching semantics. Every element adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter search tool with an output schema, the description covers the essential search behavior and gives an example. It lacks explicit guidance on when to prefer alternatives, but the tool's scope is narrow and clear enough to be actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for the bare string parameter. It does: it explains that name_query is a username and can be a partial, case-insensitive match, supported by the example 'wilke'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: finding users by username, with specific matching behavior (partial, case-insensitive). It is distinct from all sibling tools, which operate on channels, posts, DMs, and messages rather than users.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: use this when you need to find a user by a full or partial username. However, the description does not explicitly state when not to use it or mention any alternative tool for user-related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_postsGet Recent PostsA

Read recent messages/tasks in a channel (use to check for new Ausbilder-Aufgaben).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It does communicate that this is a read-only operation, and the channel scoping is clear. However, it leaves ambiguity about whether messages and tasks are returned together, in what order, or how pagination/limit behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence. The main purpose is stated first, followed by a compact usage note in parentheses. Every word adds value and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple, and the description covers the core action and a use case. However, given the output schema exists, return-value explanation is not required, but the description still leaves the nature of 'messages/tasks' vague and does not explain the limit parameter or ordering behavior. It is minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only hints at channel_id via 'in a channel', and it says nothing about the limit parameter, its default, or how it affects results. This is insufficient for an agent to confidently set parameters without additional inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Read' and the resource 'recent messages/tasks in a channel', which makes the tool's purpose immediately understandable. It does not explicitly distinguish itself from siblings, but the read-focused wording contrasts with write tools like send_message and send_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(use to check for new Ausbilder-Aufgaben)' provides an explicit, practical use case for the tool. It does not mention when to avoid this tool or compare it to alternatives, but the intended context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channelsList ChannelsA

List all joined chat channels/DMs with id, name, type, last_post_at.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It clearly states the scope ('all joined chat channels/DMs') and the output fields, which is useful. However, it does not disclose potential pagination, ordering, authentication requirements, or whether archived channels are included, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is fully front-loaded and contains no filler. Every word contributes to understanding the tool's purpose and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with an output schema available, this description is complete enough. It covers scope, resource type, and returned fields; the output schema covers detailed return value structure. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is empty, so the baseline is 4. The description adds meaning by specifying exactly what the resulting list contains, so no parameter compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a specific resource ('all joined chat channels/DMs'), and the fields returned. This clearly distinguishes the tool from siblings like send_message, find_user, and get_recent_posts, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no mention of prerequisites, and no exclusion conditions. While the purpose implies it is a discovery tool for channel IDs, the description does not explicitly say so.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_fileSend FileB

Upload a file to a channel/DM, optionally followed by a text message.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo
file_pathYes
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic upload action and optional message, and does not mention side effects, permissions, size limits, overwrite behavior, or what happens on failure—important context for a tool that creates remote state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence front-loads the primary action and target, then adds the optional-message behavior. No filler or repetition; every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter file-upload tool with an output schema, the description plus schema names/types is minimally sufficient. However, the absence of annotations, usage alternatives, and parameter detail means an agent would still need to infer some important invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It maps 'file' to file_path, 'channel/DM' to channel_id, and 'text message' to message, giving a basic semantic layer beyond the raw schema. It does not specify the expected format of file_path (e.g., local path vs URL) or the exact meaning of channel_id, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Upload') and resource ('a file to a channel/DM'), which clearly states what the tool does. It implicitly separates send_file from the sibling send_message by centering on file upload, though it doesn't explicitly name any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The core use case is implied: use this when a file needs to be delivered to a channel or DM, with an optional text message. There is no explicit statement about when to prefer send_message or how to handle text-only messages, so the guidance is clear but not fully articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageSend MessageC

Post a text message to a channel/DM.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Post' implies a mutating action, but the description does not disclose permissions, side effects, delivery behavior, idempotency, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Every word contributes to identifying the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with an output schema, but description omits usage guidance and behavioral detail. For a mutating operation with zero annotation coverage, this is too thin to guide correct invocation in ambiguous situations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds basic meaning by indicating channel_id is a channel/DM and message is text, but it does not explain how to resolve channel IDs, message constraints, or formatting rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Post') and resource ('text message') with a clear target ('channel/DM'). It distinguishes itself from the sibling send_file by specifying text messages, though it does not explicitly name that alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus siblings like send_file or dm_channel_for_user. The description implies text-message sending but does not state exclusions, prerequisites, or alternative selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have clearly distinct roles: listing channels, finding users, reading posts, sending messages, and uploading files. There is minor overlap between list_channels and dm_channel_for_user for locating DM channels, and between send_message and send_file's optional text, but the descriptions resolve these well enough.

Naming Consistency4/5

Tool names are lowercase snake_case and mostly follow a verb_noun pattern such as list_channels, find_user, and send_message. The main inconsistency is dm_channel_for_user, which lacks a leading verb and would be clearer as get_dm_channel_for_user, and get_recent_posts uses get instead of list.

Tool Count5/5

Six tools form a compact, well-scoped toolkit for a chat server. Each tool covers a necessary part of the core workflow: discovering channels/users, reading messages, and sending text or files.

Completeness4/5

The set covers the essential chat lifecycle: list channels, find users, read recent posts, send messages, and send files. Minor gaps like creating/joining channels or editing/deleting messages are not critical to the apparent use case and can be worked around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables interaction with Rocket.Chat instances through MCP protocol. Allows users to manage chat operations and integrate with Rocket.Chat servers using natural language commands.
    6
  • A
    license
    A
    quality
    B
    maintenance
    Enables interaction with iMessage through a BlueBubbles server, allowing users to read, search, and send messages directly from MCP clients. It supports comprehensive chat management features including reactions, group chat moderation, message scheduling, and contact lookups.
    33
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Louis-Lastella/bbw-chat-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server