---
status: current
platform: robot.wtf
---

> Extracted from the original wikibot.io design. AWS-specific content archived at [[Archive/AWS_Design/Platform_Overview]].

See also: [[Design/Data_Model]], [[Design/Auth]], [[Design/VPS_Architecture]], [[Design/Operations]].

---

# Platform Overview: robot.wtf

## Overview

A multi-tenant platform that lets users create and manage private research wikis — each backed by its own Git repo and exposed via its own MCP endpoint. Based on the Otterwiki + semantic search + MCP stack built for the Third Gulf War project.

The platform is a freemium service:

- **Free tier**: 1 wiki, 1 author, full read/write/MCP access, semantic search included
- **Premium tier**: Multiple wikis (up to 12), multiple authors (up to 25 per wiki), external Git sync

## Context

### Why this exists

Setting up a research wiki with MCP integration currently requires: forking Otterwiki, writing API and semantic search plugins, deploying an MCP server, configuring reverse proxy + TLS + auth, and wiring it all together. This took weeks of work. The resulting system is useful enough that it should be productized — but the per-instance infrastructure cost and setup complexity make it impractical to self-host for casual use. The platform absorbs that setup complexity.

### Key users

- **Researcher** — creates wikis, writes/reads notes via MCP from Claude.ai or Claude Code, browses via web UI
- **Admin** — manages user accounts, monitors usage, handles billing tier changes

## Multi-Tenancy Model

Each user owns zero or more wikis. Each wiki has its own:

- Git bare repo (filesystem)
- FAISS vector index (filesystem)
- ACL entries (database)

Isolation is at the filesystem path level: `{data_dir}/{user}/{wiki}/`.

## Routing

```
{user}.robot.wtf/{wiki}/mcp     → MCP handler (Streamable HTTP)
{user}.robot.wtf/{wiki}/api/*   → REST API handler
{user}.robot.wtf/{wiki}/        → Otterwiki Flask app (web UI)
{user}.robot.wtf/{wiki}.git/*   → Git smart HTTP (dulwich)
robot.wtf/auth/*                → OAuth / ATProto auth flows
robot.wtf/admin/*               → Management API
robot.wtf/                      → Landing page
```

Auth token validation on all routes except `/auth/*` and public wikis.

## Application Logic

Request handling follows this sequence:

1. Resolve user + wiki from hostname + path
2. Check ACL (database lookup)
3. Access git repo on disk
4. Route to handler:
   - **MCP**: FastMCP Streamable HTTP handler
   - **API**: REST endpoints (otterwiki-api)
   - **Web**: Otterwiki Flask app
   - **Git**: Smart HTTP protocol (dulwich)
5. On write: persist repo, queue reindex

## Semantic Search

- **Model**: all-MiniLM-L6-v2 (runs locally, no external API calls)
- **Index**: FAISS, one index per wiki, stored alongside the git repo
- **Reindex**: triggered on write (async)
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9