T

Tela

zcag
🧠 Knowledge & Memory
0 Views
0 Installs

🏎️ 🏠 ☁️ - Self-hostable, markdown-native team wiki with a built-in MCP server: agents search, read, and write your wiki pages (ranked Postgres full-text + semantic search, backlink traversal). Plus Atlas, which auto-generates a cited, coverage-checked wiki from your git repos and Jira. Go + Postgres. npx tela-mcp

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "zcag-tela": {
      "command": "npx",
      "args": [
        "-y",
        "zcag-tela"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

tela

The wiki that writes itself β€” from the code you already ship.

Sign up free Β  Tour the site Β  Self-host it

Home Β· Pricing Β· Compare Β· MCP for agents Β· Docs

License: AGPL-3.0 GitHub stars Latest release Docker npm tela-mcp

tela is a self-hostable, markdown-native team wiki built for a world where agents are first-class authors and readers. It pairs a Go + PostgreSQL backend with a React 19 / Milkdown editor, live Yjs collaboration, ranked full-text and semantic search, and a built-in Model Context Protocol (MCP) server β€” so the same knowledge base your team edits in the browser is one your agents can search, read, and write directly. Atlas, its documentation engine, turns the artifacts you already produce into maintained wiki pages. Your content stays canonical markdown forever β€” pages.body is markdown, there is no proprietary block store.

πŸ‘‰ Start at telawiki.com β€” the marketing site walks through what tela does (with pricing, a comparison, and the agent/MCP story), and the hosted instance has a free tier: no install, no card.

tela β€” a page in the Operations space: spaces and a nested page tree in the sidebar, with stat tiles, a callout, and a Mermaid diagram rendered from plain markdown

Why tela

  • Atlas auto-doc-gen β€” point Atlas at your sources and it drafts and maintains real wiki pages, so docs track what you ship instead of rotting.
  • Built-in MCP server β€” /api/mcp is part of the backend, not a bolt-on. Claude, Cursor, and other agents search, read, and author pages with scoped, per-tool write permissions.
  • Semantic + full-text search β€” ranked PostgreSQL FTS works out of the box; add an embedder for pgvector-backed semantic retrieval and grounded "ask your docs" answers.
  • Live collaboration β€” real-time multi-cursor editing over Yjs in a Milkdown editor, with comments, backlinks, and revision history.
  • Teams that run themselves β€” users create orgs and invite teammates by email, no admin ticket. Flip a space to public and it becomes a login-free blog surface with per-author home pages.
  • Self-host & own your markdown β€” pages.body is canonical markdown forever (no block table). Sync over WebDAV, export to zip/PDF, and run the whole stack with one make up.

Quickstart

You need Docker (with Compose) and make. The bundled stack builds every image via Compose, so no host Node or Go toolchain is required.

git clone https://github.com/zcag/tela.git
cd tela

# 1. Write deploy/.env from the example with strong generated secrets
#    (fills TELA_API_KEY_SECRET, TELA_SHARE_SECRET, TELA_PG_PASSWORD via openssl rand)
make setup

# 2. Edit deploy/.env β€” set TELA_PUBLIC_BASE_URL, and optionally
#    TELA_ADMIN_* and TELA_SMTP_* (see Configuration below)

# 3. Build and start the full stack
make up

The stack comes up behind Caddy on http://localhost:8780. On first boot tela runs its embedded migrations automatically and lands you on the /setup wizard to create the first admin β€” unless you set TELA_ADMIN_PASSWORD in deploy/.env, which bootstraps the admin non-interactively.

One-click cloud deploy

Prefer managed hosting over running Compose? Deploy the published multi-arch images straight to a platform:

Deploy to Render Β  Deploy to DigitalOcean

After the first deploy, enable pgvector on the managed database once β€” CREATE EXTENSION IF NOT EXISTS vector; β€” then point the backend's TELA_PUBLIC_BASE_URL at your app's public URL. Or skip ops entirely with the free cloud tier.

Common targets:

make up         # build + start the stack on :8780 (auto-stamps git version/commit)
make down       # stop the stack
make logs       # tail logs from all services
make backup     # dump Postgres to ./backups/tela-<timestamp>.sql
make restore FILE=backups/tela-....sql
make clean FORCE=1   # stop and DELETE all volumes (destroys data)

make up is the same thing as running Compose directly β€” under the hood it's docker compose -f deploy/docker-compose.yml up -d --build (plus a forced proxy recreate so a changed Caddyfile re-mounts). The three load-bearing secrets must be set and stable across deploys: rotating TELA_SHARE_SECRET invalidates outstanding share cookies, and rotating TELA_API_KEY_SECRET invalidates every existing personal access token (PAT).

For full setup, TLS, backups, and upgrades see docs/self-hosting.md and the operations runbook docs/operations.md.

Local development

make dev        # backend (:8080) + frontend (:5173, proxies /api β†’ :8080); boots a local dev Postgres
make be-dev     # backend only (go run; boots the dev Postgres on :55433)
make fe-dev     # frontend only (vite)
make test       # backend tests against a throwaway Postgres
make storybook  # component dev surface

If :8080 is taken on your box, run make dev DEV_BE_PORT=18080 so the backend and the vite /api proxy stay consistent.

Optional: semantic search out of the box

The bundled Compose stack ships an optional Ollama embedder behind a profile. Full-text search always works; this only lights up the semantic half:

docker compose -f deploy/docker-compose.yml --profile embed up -d
docker compose -f deploy/docker-compose.yml exec ollama ollama pull qwen3-embedding:0.6b
# then set TELA_RAG_EMBED_URL=http://ollama:11434 in deploy/.env and restart

Configuration

All configuration is environment-driven via deploy/.env (copy from deploy/.env.example). In the bundled Compose stack TELA_DATABASE_URL is auto-constructed from the TELA_PG_* vars β€” you only set it explicitly when running the backend against an external Postgres.

Required

VariableDescription
TELA_PUBLIC_BASE_URLPublic origin of the instance (e.g. https://wiki.example.com). Used in emails, share links, and OAuth audiences.
TELA_SHARE_SECRETSecret signing share-link password cookies. Generate with openssl rand -hex 32; never rotate (invalidates outstanding share cookies).
TELA_API_KEY_SECRETSecret signing personal access tokens (PATs). Generate with openssl rand -hex 32; never rotate (invalidates every existing PAT).
TELA_PG_PASSWORDPassword for the bundled Postgres. No default β€” must be set.

Postgres

VariableDescription
TELA_PG_USERPostgres role for the bundled DB. Default tela.
TELA_PG_DBPostgres database name. Default tela.
TELA_DATABASE_URLFull DSN β€” only set when running outside the bundled stack (external/managed Postgres). Format postgres://USER:PASS@HOST:5432/DB?sslmode=disable.

Bootstrap admin (optional)

VariableDescription
TELA_ADMIN_USERNAMEBootstrap admin username (first boot only).
TELA_ADMIN_PASSWORDBootstrap admin password. Unset β†’ use the /setup web wizard instead.
TELA_ADMIN_EMAILOptional; pre-confirms the admin's email so it's exempt from the confirmation gate. Setting it later backfills the existing admin.

Email (transactional + notifications)

With TELA_SMTP_HOST unset, tela logs confirmation/reset/notification links to stdout instead of sending (fine for dev / first boot). Works with any SMTP relay.

VariableDescription
TELA_SMTP_HOSTSMTP relay host (e.g. smtp.resend.com).
TELA_SMTP_PORT587 starttls (default) or 465 ssl.
TELA_SMTP_TLSstarttls | ssl | none.
TELA_SMTP_USERNAMESMTP username.
TELA_SMTP_PASSWORDSMTP password or API key.
TELA_SMTP_FROMFrom identity, e.g. tela <tela@example.com>.

Custom domains & TLS (optional)

VariableDescription
TELA_SITE_ADDRESSCanonical host Caddy binds for direct-TLS mode (e.g. telawiki.com). Empty β†’ :80 (terminator/CF mode), which disables org custom domains.
TELA_CUSTOM_DOMAIN_TARGETShared CNAME target shown to org admins adding a hostname. Defaults to the canonical host.

AI: semantic retrieval, ask-your-docs, Atlas (all optional, ship dark)

These features ship dark β€” unset means the relevant endpoints return 503 and nothing is computed. Point them at your own Ollama / OpenAI-compatible endpoints, the bundled --profile embed Ollama, or tela cloud's managed endpoints (authenticated with a telawiki.com PAT).

VariableDescription
TELA_RAG_EMBED_URLEmbedder endpoint for semantic chunk search (e.g. http://ollama:11434). Unset β†’ /api/rag/* 503.
TELA_RAG_EMBED_MODELEmbedding model. Must be 1024-d; default qwen3-embedding:0.6b.
TELA_RAG_EMBED_DIMAdvisory embedding dimension (the column is fixed at vector(1024)).
TELA_RAG_EMBED_TOKENBearer token for a managed/authenticated embed endpoint.
TELA_RAG_QUERY_INSTRUCTQuery-side instruction prefix for asymmetric retrieval. Unset β†’ sensible default.
TELA_RAG_RERANK_URLOptional cross-encoder reranker /rerank endpoint (Cohere/Jina/TEI-compatible).
TELA_RAG_RERANK_MODEL / TELA_RAG_RERANK_TOKENReranker model name and token.
TELA_RAG_LOG_ASKSLog "ask your docs" questions to surface knowledge gaps (admin-only). 0 disables.
TELA_LLM_URLOpenAI-compatible chat base including /v1 for grounded answers (/api/rag/ask). Unset β†’ 503.
TELA_LLM_MODELChat model name (e.g. qwen2.5:7b).
TELA_LLM_TOKENBearer token for a managed/authenticated LLM endpoint.
TELA_LLM_MAX_TOKENSCompletion length cap. Default 1024; 0/-1 disables the cap.
TELA_AGREEMENTEpistemic trust pass (corroborate/contradict scoring). On when LLM+embedder are set; 0 disables.
TELA_ATLAS_MAX_CONCURRENT_RUNSCap on concurrent Atlas doc-gen runs. Default 1.
ATLAS_LLM_CONCURRENCYPer-run client concurrency gate. Default 6.
TELA_ATLAS_WORKDIRWhere Atlas unpacks working files. Default: OS temp dir.
TELA_IMAGE_GEN_URL / TELA_IMAGE_GEN_MODEL / TELA_IMAGE_GEN_KEYOpenAI-compatible Images endpoint for the MCP generate_deck_image tool. Unset β†’ 503.

Auth: MCP OAuth & federated sign-in (optional)

VariableDescription
TELA_WORKOS_ISSUERWorkOS AuthKit issuer to enable Claude.ai/ChatGPT "Connect" OAuth on /api/mcp. Unset β†’ MCP stays PAT-only.
TELA_MCP_RESOURCEThe MCP endpoint's public URL (OAuth audience). Defaults to {TELA_PUBLIC_BASE_URL}/api/mcp.
WORKOS_API_KEYServer-side WorkOS secret for the Standalone login bridge.
TELA_SSO_GOOGLE_CLIENT_ID / _SECRETGoogle OIDC sign-in. Dark until both are set.
TELA_SSO_MICROSOFT_CLIENT_ID / _SECRETMicrosoft OIDC sign-in. Dark until both are set.
TELA_SSO_GITHUB_CLIENT_ID / _SECRETGitHub OAuth2 sign-in. Dark until both are set.

Billing (optional, ships dark)

VariableDescription
TELA_POLAR_TOKENPolar organization access token. Unset β†’ checkout/portal 503; plans stay operator-assigned.
TELA_POLAR_WEBHOOK_SECRETPolar webhook signing secret (verbatim).
TELA_POLAR_BASE_URLhttps://api.polar.sh or https://sandbox-api.polar.sh.
TELA_POLAR_PRODUCTSMaps plan keys to Polar product UUIDs, e.g. personal_plus:<uuid>,org_team:<uuid>.

Services, sync & ops (optional)

VariableDescription
TELA_GOTENBERG_URLPDF render engine. Default http://gotenberg:3000.
TELA_PDF_RENDER_BASE_URLInternal origin Gotenberg's Chromium loads the reader from. Default http://proxy.
TELA_DECK_URLSlidev deck render sidecar. Default http://deck:3344.
TELA_WEBDAV_ENABLEDWebDAV sync surface (/dav/). Default on; 0/false disables.
TELA_WEBDAV_CREATE_SPACESAllow root-level MKCOL to mint spaces. Default on (any write-scoped PAT can create spaces via WebDAV).
TELA_WEBDAV_DELETE_FLOOR / TELA_WEBDAV_DELETE_FRACTIONMass-delete guard tuning.
TELA_WEBDAV_FILE_MAX_BYTESPer-file upload cap for space files.
TELA_ADDRBackend listen address. Default :8080.
TELA_LOG_FORMATjson for structured logs. Default text.
TELA_API_KEY_AUDIT_DAYSPAT audit-log retention in days.
TELA_EVENTS_RETENTION_DAYSActivity-feed GC window. Default 180.
TELA_DISABLE_WELCOME_SEEDAny value skips seeding the welcome space on first boot.
TELA_VERSION / TELA_COMMITBuild metadata surfaced by GET /api/version (auto-stamped by make).

The split/deploy topology adds image-ref and Umami-analytics vars (TELA_BACKEND_IMAGE, TELA_FRONTEND_IMAGE, UMAMI_APP_SECRET, UMAMI_DB_PASSWORD, …). See deploy/.env.example and docs/deploy.md.

Connect your agents (MCP)

tela's MCP server is built into the backend at /api/mcp β€” it self-authenticates with a personal access token (PAT) as a bearer header. Modern hosts speak HTTP transport directly:

https://telawiki.com/api/mcp            # tela cloud
https://your-host.example.com/api/mcp   # your self-hosted origin

For hosts that can't speak HTTP transport (or want a stdio bridge), the tela-mcp npm package is a thin stdio↔HTTP proxy to the same endpoint β€” no second tool implementation to drift. Add it to your MCP client config (e.g. Claude Desktop / Cursor):

{
  "mcpServers": {
    "tela": {
      "command": "npx",
      "args": ["-y", "tela-mcp"],
      "env": {
        "TELA_BASE_URL": "https://telawiki.com",
        "TELA_API_KEY": "tela_pat_xxxxxxxx"
      }
    }
  }
}

Point TELA_BASE_URL at your own origin to use a self-hosted instance. Generate a PAT in Settings β†’ API tokens; per-tool write permission is enforced server-side. The proxy requires Node β‰₯ 20. See mcp/README.md for the full tool catalog and troubleshooting.

One-click install

Add to Cursor Add to VS Code

Both buttons add the HTTP endpoint; auth is handled by OAuth on first use, so no token goes in the link.

Per-client setup

HTTP-transport hosts connect to the endpoint directly and sign in via OAuth. stdio-only hosts use the tela-mcp proxy with a PAT (TELA_BASE_URL + TELA_API_KEY).

Claude Code (CLI, HTTP):

claude mcp add --transport http tela https://telawiki.com/api/mcp

Cursor (HTTP) β€” use the button above, or add to ~/.cursor/mcp.json:

{ "mcpServers": { "tela": { "url": "https://telawiki.com/api/mcp" } } }

VS Code (HTTP) β€” use the button above, or:

code --add-mcp '{"name":"tela","type":"http","url":"https://telawiki.com/api/mcp"}'

ChatGPT / Claude.ai (OAuth connector) β€” add a custom connector and paste the URL; complete the sign-in:

https://telawiki.com/api/mcp

Claude Desktop (stdio proxy) β€” claude_desktop_config.json:

{
  "mcpServers": {
    "tela": {
      "command": "npx",
      "args": ["-y", "tela-mcp"],
      "env": { "TELA_BASE_URL": "https://telawiki.com", "TELA_API_KEY": "tela_pat_xxxxxxxx" }
    }
  }
}

Windsurf (stdio proxy) β€” ~/.codeium/windsurf/mcp_config.json, same mcpServers shape as Claude Desktop above.

Codex (stdio proxy) β€” ~/.codex/config.toml:

[mcp_servers.tela]
command = "npx"
args = ["-y", "tela-mcp"]
env = { TELA_BASE_URL = "https://telawiki.com", TELA_API_KEY = "tela_pat_xxxxxxxx" }

A machine-discovery manifest is published at /.well-known/mcp.json.

Screenshots

Ranked full-text search across every space you can read, with the matching line in context:

tela β€” search: ranked results for β€œshipment” across the Operations, Engineering, and Product spaces, each with its breadcrumb and the matched term highlighted in context

Atlas documents a repo and then audits its own coverage β€” 6/6 must-cover surfaces documented, 42 citations, and the exact file:line gaps it hasn't covered:

Atlas coverage audit: 13/19 surface covered, 6/6 must-cover documented, 42 citations with 0 unresolved, and a list of undocumented exports with their file:line locations

Architecture

  • Backend β€” Go (module github.com/zcag/tela/backend, entry cmd/tela). Hand-written database/sql over the pgx/v5 stdlib driver β€” no ORM, no sqlc. Embedded, forward-only SQL migrations run automatically on boot.
  • Database β€” PostgreSQL 17 with the pgvector extension (pgvector/pgvector:pg17). FTS lives in pages.search_tsv (ranked ts_rank_cd); semantic chunks live in page_chunks.embedding vector(1024).
  • Frontend β€” React 19 + Vite + TypeScript + Tailwind v4 + Radix + a Milkdown (@milkdown/kit) editor, with TanStack Query/Router, Orama, cmdk, and Storybook. Owned, token-driven UI components only.
  • Live collaboration β€” Yjs + y-prosemirror over a custom WebSocket transport, scoped tightly to src/lib/collab/* and the collab branch of the editor; it rebases onto the canonical markdown on save.
  • Built-in MCP β€” the tool/resource surface lives in the Go backend (internal/api/mcp*.go) and calls the same core functions the REST routes do, so there is one implementation. mcp/ is a dumb stdio↔HTTP pipe published as tela-mcp on npm.
  • Atlas β€” the documentation engine that drafts and maintains wiki pages from your sources, sharing the configured LLM endpoint.
  • Render sidecars β€” Gotenberg for HTMLβ†’PDF export; a Slidev deck sidecar for presentation pages.
  • Edge β€” Caddy serves the SPA, the API, the marketing landing at the apex, and (in direct-TLS mode) on-demand certificates for org custom domains.

Deeper internals, ops, and gotchas live in docs/ β€” start with docs/architecture.md, and docs/decisions.md for the rationale (PostgreSQL, custom collab transport, MCP-as-thin-client).

Self-host vs cloud

  • Self-host β€” run the whole stack with make up (or docker compose). You own the data, the markdown, and the Postgres volume; AI features are bring-your-own-endpoint (or the bundled Ollama profile). The split/registry deploy topology for shared-edge boxes is in docs/deploy.md.
  • Cloud β€” a managed instance is hosted at telawiki.com with a free tier, plus optional managed semantic search and ask-your-docs so you don't have to run an embedder or LLM yourself.

Both run the same code from this repository.

Contributing

  • Commit format: type(scope): summary (e.g. feat(backend): hybrid chunk search). Concise messages, no co-author trailer.
  • No issue/task tracker β€” please don't open GitHub issues or reference #NNN. Discuss via pull requests.
  • Backend changes use hand-written SQL and a new forward-only NNNN_name.sql migration (never edit an applied one). Frontend changes use owned Radix/token-based primitives β€” no hardcoded hex/px, no third-party component kits.
  • Run make test (backend) and npm run build in frontend/ before sending a change. See CLAUDE.md and docs/ for the full conventions.

Security

Please report security issues privately to tela@telawiki.com. Do not open a public issue or PR for a vulnerability. Note that a missing or rotated TELA_API_KEY_SECRET / TELA_SHARE_SECRET leads to forgeable tokens β€” keep them set and stable.

License

tela is open core. Copyright Β© tela contributors. The Community core β€” the whole product β€” is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0): self-host, modify, and redistribute under its terms (run a modified version as a network service and you must offer your users the corresponding source). The tela-mcp npm package is published under AGPL-3.0-only. For a commercial license without AGPL obligations (e.g. to embed or offer tela as a closed service), contact the maintainer.

The Enterprise Edition (backend/internal/ee/, source-available, not AGPL) adds the company-of-record layer (SSO, audit, SCIM, governance) and requires a license key for production use β€” see backend/internal/ee/LICENSE.md. Full structure in docs/licensing.md.

"tela", the tela name, and the tela logo are trademarks and are not licensed under the AGPL β€” see TRADEMARK.md. You may run and fork the code, but you may not use the tela branding for a redistributed or hosted version without permission.

Related MCP Servers

S
Server Memory
Verified

πŸ“‡ 🏠 - Knowledge graph-based persistent memory system for maintaining context

🧠 Knowledge & Memory2 views
M
Mcp Summarizer

πŸ“• ☁️ - AI Summarization MCP Server, Support for multiple content types: Plain text, Web pages, PDF documents, EPUB books, HTML content

🧠 Knowledge & Memory0 views
C
Claude Engram

🐍 🏠 - Persistent memory and session intelligence for Claude Code. Auto-tracks mistakes, decisions, and context via hooks. Mines session history for patterns and cross-session search. Loop detection, pre-edit warnings, context compaction survival. Runs locally with Ollama.

🧠 Knowledge & Memory0 views
A
A2cr

🐍 ☁️ 🏠 🍎 πŸͺŸ 🐧 - MCP server for AI-agent handoffs. Saves client-encrypted WorkBaton checkpoints and WorkStash notes so Codex, Claude Code, Roo Code, and other MCP clients can resume work without passing full chat history.

🧠 Knowledge & Memory0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it β†’
β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.