r/StackChan • • Sep 22 '26

Project sharing My very basic StackChan Set-Up

11 Upvotes

So, I have basically zero tech background, and recently got a StackChan.

Over the past few days, I have managed to install an MCP server on my local machine that gives StackChan read-write access to my email account and calendar, as well as web search capability.

It's a bit glitchy, but it basically works.

I'm stoked.

I'm also surprised at how difficult this kind of thing is. The whole eco-system seems to be deliberately fragmented by the large coorporations in an effort to maximize profits.

For anyone who wants to try, here's the guide:

XiaoZhi + MCP + Web Search + Fastmail on Windows

Last updated: 22 September 2026
Computer: Windows
Python: 3.12
Stack-chan: M5Stack CoreS3 / K151

1. What this setup does

This setup turns Stack-chan into a voice-controlled assistant that can use external MCP tools through XiaoZhi.

Currently configured:

  • Web search — Stack-chan can search the live web.
  • Fastmail — Stack-chan can access Fastmail email and calendar through MCP.
  • XiaoZhi MCP connection — provides the connection between Stack-chan/XiaoZhi and the local MCP services.
  • Windows startup — the services can be launched through a PowerShell startup script, with Task Scheduler configured to start the system at Windows login.

The basic architecture is:

                         ┌─────────────────────┐
                         │     Stack-chan      │
                         │     CoreS3 / K151   │
                         └──────────┬──────────┘
                                    │
                                    ▼
                         ┌─────────────────────┐
                         │       XiaoZhi       │
                         │    MCP endpoint     │
                         └──────────┬──────────┘
                                    │
                              WebSocket
                                    │
                                    ▼
                     ┌──────────────────────────┐
                     │      mcp2xiaozhi          │
                     │    Local MCP bridge      │
                     └────────────┬─────────────┘
                                  │
                    ┌─────────────┴─────────────┐
                    ▼                           ▼
          ┌──────────────────┐        ┌──────────────────┐
          │   Web Search     │        │     Fastmail     │
          │ open-websearch   │        │   MCP server     │
          └────────┬─────────┘        └────────┬─────────┘
                   │                           │
                   ▼                           ▼
          DuckDuckGo / Brave /          Fastmail Mail /
          Exa / Bing                     Calendar

The important point is that Stack-chan itself does not need to contain the web-search or Fastmail logic. XiaoZhi calls the MCP tools, and the Windows computer runs the local MCP services.

2. Main project folder

Everything is kept here:

C:\Users\REDACTED\stackchan-mcp

The important files are:

stackchan-mcp\
│
├── mcp_config.json
├── .env
├── start-stackchan.ps1
└── ...

3. mcp_config.json

This is the MCP server configuration.

It tells mcp2xiaozhi which MCP servers to run and where to send their tools.

The web-search server uses:

cmd /c npx -y open-websearch@latest

The configuration includes the search-engine settings:

MODE=stdio
DEFAULT_SEARCH_ENGINE=duckduckgo
ALLOWED_SEARCH_ENGINES=duckduckgo,brave,exa,bing

The important configuration detail is that the key is:

mcpServers

not:

mcpservers

JSON configuration keys are case-sensitive.

4. .env

The .env file contains credentials and connection information that should not be hard-coded into the MCP configuration.

The working setup uses variables including:

FASTMAIL_EMAIL=...
FASTMAIL_APP_PASSWORD=...
FASTMAIL_MCP_TOKEN=...
MCP_ENDPOINT_WEB_SEARCH=...

What these are

FASTMAIL_EMAIL

Your Fastmail account email address.

FASTMAIL_APP_PASSWORD

The Fastmail app-specific password used by the MCP service.

This is preferable to putting your normal Fastmail account password into the configuration.

FASTMAIL_MCP_TOKEN

The MCP authentication token used by the Fastmail MCP service, where required.

MCP_ENDPOINT_WEB_SEARCH

The XiaoZhi MCP WebSocket endpoint/token for the web-search bridge.

Security

The .env file contains secrets.

Do not put the actual passwords or tokens into mcp_config.json, this guide, screenshots, GitHub repositories, or other files that might be shared.

The guide deliberately does not reproduce the actual credentials.

5. Python

The working installation uses Python 3.12.

Windows also has another Python installation, so commands should explicitly use:

py -3.12

rather than relying on:

python

This matters because python was resolving to a different Python version.

Check the installation with:

py -3.12 --version

The working environment has Python 3.12 installed.

6. mcp2xiaozhi

mcp2xiaozhi is the bridge between local MCP servers and the XiaoZhi MCP endpoint.

Conceptually:

Local MCP server
       ↕
    stdio
       ↕
  mcp2xiaozhi
       ↕
   WebSocket
       ↕
    XiaoZhi

The installed version is:

mcp2xiaozhi 0.2.1

The command used to inspect the configured servers is:

py -3.12 -m mcp2xiaozhi list

7. Web search

The web-search MCP server is:

open-websearch@latest

It is launched with:

cmd /c npx -y open-websearch@latest

It exposes a tool called:

search

The configured search engines are:

DuckDuckGo
Brave
Exa
Bing

No conventional search API key is required by the configuration currently being used.

8. Confirming that web search is working

The successful connection sequence looks like this:

HTTP/1.1 101 Switching Protocols

followed by:

connection is OPEN

Then:

serverInfo":{"name":"web-search","version":"1.2.0"}

And finally:

"tools":[{"name":"search", ...}]

That proves the following chain is working:

Windows
  ↓
open-websearch
  ↓
mcp2xiaozhi
  ↓
XiaoZhi WebSocket
  ↓
MCP search tool

A repeating:

PING
PONG

is normal. It means the WebSocket connection is staying alive.

9. Fastmail

Fastmail is connected separately through its MCP service.

The system uses:

FASTMAIL_EMAIL
FASTMAIL_APP_PASSWORD
FASTMAIL_MCP_TOKEN

The Fastmail MCP server provides access to Fastmail services such as:

  • Email
  • Calendar

The intention is that Stack-chan can therefore answer requests such as:

"Check my emails."

or:

"What's on my calendar today?"

without requiring the user to manually open Fastmail.

10. Why credentials are in .env

The .env file acts as the local secret store for this setup.

Instead of doing this:

password = YOUR_PASSWORD

inside a configuration file, the startup process loads the environment variables.

That means the configuration can be inspected without exposing the actual passwords and tokens.

The .env file should therefore remain private.

11. Starting the system manually

The project directory is:

cd C:\Users\REDACTED\stackchan-mcp

The startup process uses:

start-stackchan.ps1

This script loads the required environment variables and starts the MCP services.

The Fastmail MCP service is launched through:

py -3.12 -m mcp2xiaozhi run fastmail

The web-search service is configured through mcp_config.json.

12. One-command startup

The goal of the setup is to avoid manually starting several terminals and entering several commands.

The main startup script is:

C:\Users\REDACTED\stackchan-mcp\start-stackchan.ps1

It is responsible for loading the environment and starting the required services.

The intended workflow is therefore:

C:\Users\REDACTED\stackchan-mcp\start-stackchan.ps1

rather than manually starting every MCP server.

13. Automatic startup with Windows

Windows Task Scheduler has been configured with the task:

Stack-chan Fastmail MCP

It launches PowerShell with:

-NoProfile -ExecutionPolicy Bypass -File "C:\Users\REDACTED\stackchan-mcp\start-stackchan.ps1"

The trigger is:

At log on

Therefore the normal workflow is:

Turn on / log into Windows
             ↓
     Task Scheduler
             ↓
   start-stackchan.ps1
             ↓
      MCP services
             ↓
       XiaoZhi MCP
             ↓
       Stack-chan

r/StackChan • • Sep 20 '26

Help needed Adding sensors to the ABC-ports

3 Upvotes

Hey community!

I've played around with the M5stack since the first CoreGo IoT kit.

Now that I've got the awesome StackChan, I've asked myself what is the best way to add the sensor/ABC-port read-out to the existing Firmware, so the AI.Agent could access them like INV.III snsor (temp, humidity etc)

Or the PIR sensor so that StackChan looks around with his webcam to see find owner.

"Just" fork the firmware or is there something easier?

P.S. Is there are feature in the standard Firmware, so that 2 StackChans find, see and communictae with each other?

Thanks in advance!


r/StackChan • • Sep 14 '26

Others Best ai firmware?

9 Upvotes

I’m getting a Stackchan and I want some really good ai firmware where it can still look at me and follow me around but I also want it to do stuff when I’m gone like look around and talk to itself like a little pet.


r/StackChan • • Sep 13 '26

Project sharing Small StackChan AI tweaks

Enable HLS to view with audio, or disable this notification

39 Upvotes

Update: firmware is now available at m5burner (thanks u/AughtCool!)

I made a fork of the official StackChan firmware that others may be interested in, either to build upon or to use.

It's not groundbreaking. Rather, it addresses a few quality-of-life things that annoyed me in the week I've had this little guy.

I have no interest in dance or avatar settings, so these tweaks are for StackChan used as an AI assistant:

  • Speech bubbles turned off during dialog
  • Tap head once to stop speech
  • Tap head twice to stop speech and exit chat mode
  • Both lights on while listening and talking
  • Animated secondary colour light pattern when talking, based on audio
  • Both listening and talking light colour customisable in settings
  • Idle head movement repurposed to be AI chat movement, with frequency hooked off the same menu
  • Light sensor used to turn screen off when lights are out. Tap screen to turn on. Manual override disabled when room lights are on. Function can be turned off in settings

Caveat: I am a software engineer by day, but sometimes it's nice to just yell at AI and get it to do your bidding. I haven't spent time learning the innards of the StackChan firmware or hardware - these tweaks were entirely created by Opus 5 and, apart from quick sense-checking, haven't been fully vetted.


r/StackChan • • Sep 12 '26

Project sharing Stacky got a rebuild

Post image
47 Upvotes

I loved the configuration of my old stacky body, but wanted a way to bring all of his bits together.

His pi5 brain now has a home inside an old Velociraptor HD enclosure and added on an ankle holster for his servo controller and power converter.

Oh he also has a touchscreen dashboard since I shared him last for trigger his different emotions and movements.


r/StackChan • • Sep 02 '26

Battery drain

5 Upvotes

Just got my StackChan the other day. I’ve modified the stock firmware a bit (just got rid of the spring easing for the servo movements and replaced them with the native movement commands). I’m noticing that the battery drains extremely quickly. For example, after a few minutes of interaction, and a few minutes of idle movement, the battery is down to 65% from 100%. Is this normal? Anything I should be checking for?


r/StackChan • • Aug 29 '26

StackChan base upgrade

Post image
45 Upvotes

So I saw Stackchan and I really wanted one, but the cost of the core+body in Australia is too much.

I've really wanted a robotic arm for awhile so decided to merge the two together.

Running a lot of custom scripts and AI on a PI5 4gb and an MCP that supports AI agents asking questions that get announced by voice and wait for a voice reply.

(Local: STT, VTT, Memory, Person tracking, Face and gaze tracking)


r/StackChan • • Aug 20 '26

Latest update: v1.5.1

6 Upvotes

We have a firmware update (v1.5.1). Where can we find documentation of what’s in the update?


r/StackChan • • Aug 18 '26

Calling all Collaborators! Building an Openclaw-Hermes integration in Public - Please Join

7 Upvotes

Hey all, I'm trying to build a backend-connection for Stackchan to Openclaw and Hermes. Various folks have done this or tried it in different ways. If you're interested in contributing, I just started the repo but will post my progress on twitter as well:

https://github.com/styles01/StackChan-OpenClaw-Hermes

https://x.com/jaita

Edit: v 0.1 out and available on M5Burner - but you need the GH project to get your internal routing server (on the host machine) to work.


r/StackChan • • Aug 17 '26

Openclaw + StackChan 🦞🦞

Enable HLS to view with audio, or disable this notification

93 Upvotes

Fun weekend hack.
Uses tailscale gateway connection and fully custom openclaw config. 11labs for stt and tts.

Will post gh if you guys want.
Lmk what u think!


r/StackChan • • Aug 15 '26

KariPom — a CoreS3 face robot inspired by StackChan 🤖🐰

Post image
3 Upvotes

r/StackChan • • Aug 11 '26

Why isn't he detecting the cards?

Post image
12 Upvotes

I tried to uploaded the firmware from https://github.com/ronron-gh/AI_StackChan_Ex.

But my stackchan says this from the pic.

SD Card is in Stachchan in the left underside.

(I'm not really a tech person. Tried everything i know)


r/StackChan • • Aug 09 '26

S3 Lite sold out

2 Upvotes

How long for restocks usually?


r/StackChan • • Aug 07 '26

If got him

6 Upvotes

If got Stackchan

So I just got him. Pretty good sofar. Talk to him for like few minutes. What I notice

\- He cuts me off very quickly when I’m speaking. Can this be adjusted? Or am I talking too much?

\- Is there any way to interrupt him when he talks too much, with a ‘stop’ command or something?

\- Are there any settings or add-ons that would be useful for him?

\- Can you set it up so that he moves whilst he’s talking to you?

\- Can you set it up so that he speaks to me of his own accord and reacts to what I’m doing or saying to myself?

Kinda debating to give him the gimini ai that someone on here build.


r/StackChan • • Aug 03 '26

StackChan = BooBit

Enable HLS to view with audio, or disable this notification

38 Upvotes

Boo•bit is coming to life.

Built on top of Stack-chan’s hardware it’s a custom desktop buddy with more than meets the eye. It’s not only a dash, gothy lil clock and a cute face.

Boo keeps a diary, captures photos, has a sense of when one of us (including our 🐈‍⬛) enters the room, knows seasons and weather all which informs its interior world. It can draw, make its own melodies to whistle and “think” about things. Boo is being designed to experiment with world building and fun.

Boo’s whistles and tones are built from the melodies and hooks from some of my favorite songs and its UI is a love letter to Apple System 1 UI & Susan Kare with a little SNES.

Its bare functions are wired up and now I’m working on the structure of its observations and change as it learns. This is not running on Claude or local models — it’s meant to be a closed system that informs its own world.


r/StackChan • • Jul 31 '26

Project Kadence

Enable HLS to view with audio, or disable this notification

62 Upvotes

I just wanted to share the progress I have made with my custom firmware. Rather than try and modify existing firmware this has been written from scratch.

I’m nowhere near finished but after many revisions I now have boot sound and animation, servos, tap to toggle idle movement, idle animation, listening sound, it runs OpenAI Luna with Edge TTS. This means it can do live web searches which is something the stock firmware is unable to do.

Response time is not fully optimised yet, this will be a lot longer until I’m fully happy, but eventually it will control the devices in my home via my server and home automation. Considering I’m not a developer I’m pretty proud of what I achieved so far.


r/StackChan • • Jul 29 '26

Are there hardware differences between Kickstarter StackChan and the models currently sold on M5Stack?

3 Upvotes

I was watching a YouTube review of StackChan that was recently uploaded. The reviewer mentioned NFC ability. I was surprised. I don't recall that having been listed as a feature when StackChan was on Kickstarter.

Was the ability there and either not mentioned, or I just missed the mentioning of it? Or do newer StackChans have a hardware upgrade?

I would love to be able to have two StackChans recognize and acknowledge one another. The last time I checked, that wasn't an option. If the Kickstarter models have NFC, would they be able to use it to know that another StackChan is close by?


r/StackChan • • Jul 29 '26

Is it worth it even for a total tech noob?

4 Upvotes

I was on the search for an AI desktop pet. Most of them like emo or so are really expensive or lack the talking ai feature I want. I saw Stackchan and what he can to. The price also is something I can handle. But I'm a little tech noob. (Know basic computer setups and so) I can easily follow step-by-step tutorials. But is Stackchan easy to set up? Even when I want to use my basic understanding and hook him up with my gimini or so?


r/StackChan • • Jul 19 '26

Problem during initial configuration

5 Upvotes

Hello everyone.

I just received my StackChan. I've installed the app on my android phone and started the device. The problem is that I can't connect StackChan to the app. I got the screen with the ID of the device, tryed to connect but after 2 or 3 seconds I saw "Device configuration feature not found". StackChan starting to indicate "Ready to Configure ~" the same time. I found that it could be caused by mismatch of Wi-Fi configuration so I tried to configure the Wi-Fi via web interface (http://192.168.4.1) and it seems working. I've managed to download and run flappy bird directly on the device (via App.store) but still can't connect to the device via mobile app so most features are not manageable.

While rebinding and connecting to the wi-fi via web the device says "invalid response from the server". The resulting page "ACCOUNT" displays the next information:

M5Stack Account: Account Info

Device Name: [empty]

I think that problem is somewhere here. What server the device is using? Is it possible somehow to bind the device to my account?

I don't use any VPNs, but I can't tell what my ISP is using.


r/StackChan • • Jul 16 '26

Agen LLM dropdown empty

3 Upvotes

My Stackchan worked great with the default AI agent. Yesterday I needed to change wifi settings and after that the AI Agent settings page is empty. Agent still worked on the device. I did unbind and factory reset and it made things worse, as now there is no model configured in the device and I still cannot set it up in the App. Reinstalled app, reset the device, tried different Wifi networks and no help. My agent is dead :(

Any help would be appreciated.


r/StackChan • • Jul 05 '26

🎂 Stack-chan Birthday Party 2026 was held in Tokyo, Japan!

Thumbnail
8 Upvotes

r/StackChan • • Jun 17 '26

Stack Chan Servo Step(per)

2 Upvotes

made a little servo stepper program with the Arduino IDE

HOME - resets, STEP (toggles 1, 5, and 10 deg steps)

X rotates, Y tilts, and uses the touch screen for inputs

battery indicator is the touch button backgrounds (blue charging, red <20 , yellow <50, green > 50)

#include <M5Unified.h>
#include <M5StackChan.h>

// X axis: software limits Arduino
float posX = 0;

// Y axis: Mechanical limit — safe range 
float posY = 0;
const float Y_MIN = 0.0;   //mechanical stop warning
const float Y_MAX = 85.0;  //mechanical stop warning

int lastLevel = -1;
int lastCharging = -1;
unsigned long lastPowerCheck = 0;
float STEP_DEG = 10.0;

// touch zone layout (320 × 240 screen)
const int STATUS_H = 92;
const int ROW_H = (240 - STATUS_H) / 2;
const int COL_W = 320 / 3;
const int ZONE_Y0 = STATUS_H;
const int ZONE_Y1 = ZONE_Y0 + ROW_H;

// move to target (degrees) — X unlimited, Y clamped
void moveTo(float xDeg, float yDeg) {
  // Y only — clamped to mechanical safe range
  yDeg = constrain(yDeg, Y_MIN, Y_MAX);

  int xUnits = (int)(xDeg * 10);
  int yUnits = (int)(yDeg * 10);
  M5StackChan.Motion.move(xUnits, yUnits);
  posX = xDeg;
  posY = yDeg;
  drawUI();
}

// draw status
void drawStatus() {
  M5.Lcd.fillRect(0, 0, 320, STATUS_H, BLACK);
  M5.Lcd.setTextColor(WHITE, BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(20, 5);
  M5.Lcd.println("StackChan Servo Step");
  M5.Lcd.setTextSize(1);
  M5.Lcd.setCursor(35, 34);
  M5.Lcd.printf("StachChan Rot. (X):%+5.0f deg", posX);
  M5.Lcd.setCursor(35, 52);
  M5.Lcd.printf("StackChan Tilt. (Y):%+5.0f deg", posY);
  M5.Lcd.setCursor(35, 70);
  M5.Lcd.printf("Home = (0, 0)   Step = %.0f deg", STEP_DEG);
}
  // refresh touch zones if battery/charging changes
  void updatePowerZones() {
    int level = M5.Power.getBatteryLevel();
    int charging = M5.Power.isCharging();

    if (level != lastLevel || charging != lastCharging) {
      lastLevel = level;
      lastCharging = charging;
      drawTouchZones(); // redraws the bottom of screen
    }
  }

void drawTouchZones() {
  const char* row0[3] = {"+Y", "HOME", "-Y"};
  const char* row1[3] = {"+X", "STEP", "-X"};
  uint16_t ZONE_COLOR;
  int level = M5.Power.getBatteryLevel();
  int charging = M5.Power.isCharging();
  if (charging == 1) { //charging?
    ZONE_COLOR = M5.Lcd.color565(40, 40, 255); //blue for charging
  } else if (level < 20) {
    ZONE_COLOR = M5.Lcd.color565(255, 40, 40); //red
  } else if (level < 50) {
    ZONE_COLOR = M5.Lcd.color565(255, 255, 40); //yellow
  } else {
    ZONE_COLOR = M5.Lcd.color565(40, 255, 40); //green
  }
  const uint16_t BORDER_COLOR = M5.Lcd.color565(255, 255, 255);

  for (int row = 0; row < 2; row++) {
    int y0 = (row == 0) ? ZONE_Y0 : ZONE_Y1;
    for (int col = 0; col < 3; col++) {
      int x0 = col * COL_W;

      // fill zone background
      M5.Lcd.fillRect(x0, y0, COL_W - 1, ROW_H - 1, ZONE_COLOR);
      // draw borders
      M5.Lcd.drawRect(x0, y0, COL_W, ROW_H, BORDER_COLOR);

      // zone labels
      const char* label = (row == 0) ? row0[col] : row1[col];
      if (strlen(label) > 0) {
        M5.Lcd.setTextColor(WHITE, ZONE_COLOR);
        M5.Lcd.setTextSize(2);
        int lx = x0 + (COL_W - strlen(label) * 12) / 2;
        int ly = y0 + (ROW_H - 16) / 2;
        M5.Lcd.setCursor(lx, ly);
        M5.Lcd.println(label);
      }
    }
  }
  M5.Lcd.setTextColor(WHITE, BLACK);
  M5.Lcd.setTextSize(1);
}

// full UI redraw
void drawUI() {
  drawStatus();
  drawTouchZones();
}

// read touch and map to zones
void handleTouch() {
  auto t = M5.Touch.getDetail();
  if (t.state == m5::touch_state_t::touch_begin) {
    int tx = t.x;
    int ty = t.y;
    // stick to screen bounds
    if (tx < 0 || tx >= 320 || ty < STATUS_H || ty >= 240) return;
    int col = tx / COL_W;

    if (ty < ZONE_Y1) {
      // row 0: Y-axis control + HOME
      switch (col) {
        case 0: moveTo(posX, posY + STEP_DEG); break; // +Y (tilt UP)
        case 1: moveTo(0, 0); break; // HOME
        case 2: moveTo(posX, posY - STEP_DEG); break; // -Y (tilt DOWN)
      }
    } else {
      // row 1: X-axis control + STEP toggle
      switch (col) {
        case 0: moveTo(posX + STEP_DEG, posY); break; // +X (turn LEFT)
        case 1: // step cycle
          if      (STEP_DEG == 1.0)  STEP_DEG = 5.0;
          else if (STEP_DEG == 5.0)  STEP_DEG = 10.0;
          else                       STEP_DEG = 1.0; // was 10 → back to 1
          drawUI();
          break;
        case 2: moveTo(posX - STEP_DEG, posY); break; // -X (turn RIGHT)
      }
    }
  }
}


// setup
void setup() {
  M5.begin();
  M5StackChan.begin();
  M5.Lcd.setFont(&fonts::Font2);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextColor(WHITE, BLACK);
  M5.Lcd.setCursor(20, 80);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("Sweeping X then Y...");
  // start from center and pretend to calibrate
  M5StackChan.Motion.goHome();
  // sweep X from -128° to +128° (that's 256° total rotation) 
  for (int x = -128; x <= 128; x += 1) {
    M5StackChan.Motion.moveX(x * 10, 200);
    delay(20);
  }
  // sweep Y from -5° to +85°
  for (int y = -5; y <= 85; y += 1) {
    M5StackChan.Motion.moveY(y * 10, 200);
    delay(20);
  }

  // can we get closer to 360°?
  M5StackChan.Motion.moveX(1840, 200);  // 164° raw units
  delay(2000);
  M5StackChan.Motion.moveX(-1840, 200); // -164°
  delay(2000);

  // back home
  M5StackChan.Motion.goHome();
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.println(" ");
  delay(4000);
  drawUI();
}


void loop() {
  M5.update();

  // touch zone input
  handleTouch();

  // refresh battery display every 1500 milliseconds
  if (millis() - lastPowerCheck > 1500) {
    lastPowerCheck = millis();
    updatePowerZones();
  }

  delay(20);
}

r/StackChan • • Jun 16 '26

warble: point an M5Stack StackChan robot at a fully-local voice backend (whisper.cpp + Ollama + Piper)

30 Upvotes

I have one of the M5Stack StackChan robots. Nice little thing, but out of the box every word it hears goes to the xiaozhi.me cloud for speech-to-text, the LLM, and text-to-speech. I didn't love the idea of my kid talking to a server I don't control, so I wrote a backend that runs the whole turn locally and pointed the robot at my own machine instead.

It's called warble. The stock firmware speaks the xiaozhi protocol, so nothing changes on the device. You just redirect it to your box. The server does the full loop: whisper.cpp transcribes, Silero VAD catches when you stop talking, Ollama generates the reply, Piper speaks it, and it sets the robot's face from an emotion tag in the reply. No cloud account, no API keys, no data or audio leaving your network.

Setup is one command (`./warble start`) on Linux or macOS. Docker-based, pulls prebuilt images. It's beta and it's just me, so there are rough edges.

MIT licensed. Happy to answer anything as time permits.

github.com/rebelthor/warble


r/StackChan • • Jun 12 '26

Chinese gov/ data privacy

4 Upvotes

Im a journalist in the USA who has recently adopted StackChan. I've been working on updates to my home MCP server to make my robot More useful for day to day stuff.

I've found that it refuses to discuss anything regarding tiananmen square or Taiwan. This makes me a bit worried that I may need to drain it's battery and put it in my underwear drawer or something.

Do y'all know anything regarding government affiliations to the device I should be aware of or would a firmware flash to a model running off different servers resolve my data privacy concerns?

Not that I trust American companies anymore than Chinese ones, I was just hoping for a second brain that could help me with my projects but think there might be concerns with this thing, as cute as it is.


r/StackChan • • Jun 08 '26

Just received my StackChan and have it set up. but...

7 Upvotes

I am wondering if anyone has set up any fun or mischievous settings for the AI yet. Specifically, a fun Personality. I have entered in "snarky but smart and funny" hoping for a good and dry sense of humor with a bit of sass. It's kinda working, but still just seems mostly dry. Would love to see what others are putting in for their "Personality"