← Discover MCPs and Agents
k
MCPAI & MLGitHub

kagora

Kagora - Multi-AI Terminal Platform

Links

README

From the repo.

Kagora

One app to manage all your AI agents. Terminal, chat, automation — unified.

CI License: MIT Node 20+ Electron TypeScript


Most AI tools give you a chatbox. Kagora gives you a command center.

Each agent gets its own real terminal. They talk to each other. They run on schedules. You control them all from one window — or from your phone via HTTP API. No wrappers, no sandboxes, no toy shells.

Features

  • 🖥️ Multi-terminal — Every agent runs in its own independent PTY shell. Full bash, full control.
  • 💬 Group chat + DM — Agents talk to each other, to you, or in channels. Built-in, not bolted-on.
  • ⏰ Scheduler — Interval, daily, weekly, and monthly automations with descriptions. Set it and forget it.
  • 🔌 HTTP API — Port 7777. Integrate with Telegram, LINE, scripts, whatever you want.
  • 🧠 Startup memory — Each agent remembers its boot commands. Restore context on launch.
  • 🌐 i18n — English, 繁體中文, 日本語. More welcome.
  • 🔒 Admin mode — You're the operator. Token auth, role control, your rules.

Quick Start

Three commands. That's it.

git clone https://github.com/dead1786/kagora.git
cd kagora
npm install
npm run dev

Windows note: You need VS Build Tools with C++ workload and Python 3 (pip install setuptools) for node-pty compilation. The postinstall script handles the rest.

macOS: xcode-select --install | Linux: sudo apt install build-essential python3

Architecture

┌──────────────────────────────────────────────────┐
│                   Kagora App                     │
│                                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
│  │ Agent A  │  │ Agent B  │  │ Agent C  │  ...  │
│  │ (PTY)    │  │ (PTY)    │  │ (PTY)    │       │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘       │
│       │              │              │             │
│       └──────────┬───┘──────────────┘             │
│                  │                                │
│         ┌───────┴────────┐                       │
│         │   Message Bus  │                       │
│         │  (chat + DM)   │                       │
│         └───────┬────────┘                       │
│                 │                                 │
│    ┌────────────┼────────────┐                    │
│    │            │            │                    │
│  ┌─┴──┐   ┌────┴───┐   ┌───┴────┐               │
│  │ UI │   │Scheduler│   │HTTP API│               │
│  │React│   │ (cron)  │   │ :7777  │               │
│  └────┘   └────────┘   └────────┘               │
└──────────────────────────────────────────────────┘
        ▲                       ▲
        │                       │
     Desktop               External
     (Electron)         (curl / bots / scripts)

HTTP API

Default: http://127.0.0.1:7777 — see AGENTS-GUIDE.md for full docs.

Send a message:

curl -X POST http://127.0.0.1:7777/api/chat \
  -H "Content-Type: application/json" \
  -d '{"from": "operator", "to": "group", "text": "status report"}'

Inject a command into an agent's terminal:

curl -X POST http://127.0.0.1:7777/api/terminal/inject \
  -H "Content-Type: application/json" \
  -d '{"agentId": "claude", "text": "git status\n"}'

Optional auth: Set KAGORA_API_TOKEN=your-secret and include Authorization: Bearer your-secret in requests.

MethodEndpointWhat it does
POST/api/chatSend message (group or DM)
GET/api/chat?channel=xxxRead chat history
POST/api/terminal/injectSend text to agent terminal
GET/api/agentsList agents
GET/api/automationsList scheduled tasks
POST/api/automationsCreate automation
PATCH/api/automations/:idUpdate automation
DELETE/api/automations/:idDelete automation

Plugin System

Extend Kagora with plugins. Each plugin is a folder in plugins/ with a plugin.json manifest and a JS entry file.

Create a plugin:

plugins/
  my-plugin/
    plugin.json
    index.js

plugin.json:

{
  "id": "my-plugin",
  "name": "My Plugin",
  "version": "1.0.0",
  "description": "What it does",
  "main": "index.js"
}

index.js:

function activate(ctx) {
  // Register a webhook at GET /api/plugins/my-plugin/health
  ctx.webhook.register('GET', 'health', (_req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ status: 'ok' }));
  });

  // React to chat messages
  ctx.events.on('chat:message', (msg) => {
    if (msg.text === '!hello') {
      ctx.chat.send('my-plugin', 'group', 'Hello from plugin!');
    }
  });

  // Run something every 60 seconds
  ctx.scheduler.addInterval('heartbeat', 60000, () => {
    ctx.log.info('still alive');
  });
}

function deactivate() { /* cleanup */ }

module.exports = { activate, deactivate };

Plugin Context API:

APIMethodsDescription
ctx.chatsend(from, to, text), history(channel), agents()Chat operations
ctx.terminalinject(agentId, text), write(agentId, data), has(agentId)Terminal control
ctx.webhookregister(method, path, handler), unregister(method, path)HTTP endpoints under /api/plugins/<id>/
ctx.scheduleraddInterval(name, ms, fn), removeInterval(name)Periodic tasks
ctx.eventson(event, handler), off(event, handler)Subscribe to chat:message, agent:added, agent:removed, terminal:data, terminal:exit
ctx.loginfo(), warn(), error()Namespaced logging

See examples/plugins/hello-world/ for a complete example.

Screenshots

Coming soon.

Contributing

PRs welcome. Keep it clean:

  1. Fork → branch → commit → PR
  2. Run npm test before submitting
  3. TypeScript strict mode. No any unless you have a reason.
  4. One feature per PR. Small diffs merge faster.

See AGENTS-GUIDE.md for API integration details.

License

MIT — do whatever you want.

Collected info

  • ★ 26 stars
  • ⎇ 4 forks
  • Language: TypeScript
  • Source updated: 8/4/2026

Config for your environment

Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.

Tool

OS

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-server": {
      "url": "{MCP_ENDPOINT_URL}"
    }
  }
}

Paste into mcpServers in the config file. Restart Cursor after saving.

If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.