tela
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TELA_API_KEY | Yes | Personal access token for authentication (generated in Settings → API tokens). | |
| TELA_BASE_URL | Yes | Public origin of the tela instance (e.g. https://telawiki.com). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| add_commentA | Comment on a page (editor+). Omit parent_id for a ROOT comment: it needs an |
| atlas_list_projectsA | List the atlas doc-generation projects you can see (your personal ones plus those of every org you belong to). Each project carries its owner, output space, schedule, source count, and latest-run summary (status + last must-cover rate); |
| atlas_runA | Trigger a FULL doc-generation run for every source in an atlas project (project_id from atlas_list_projects): re-ingest the sources, regenerate the cited pages, and re-audit coverage. Management-level (project owner / org admin) — a run fetches the sources, spends LLM budget, and rewrites the generated subtree (creating the output space on the first run). Returns run_ids (one per source); poll each with atlas_run_status. Returns 503 ai_unavailable when the instance has no embedder/LLM configured. |
| atlas_run_statusA | Read an atlas run's status and coverage by run_id (view+). Returns the run's status + current stage and, once auditing has run, coverage (must_rate = the headline fraction of must-cover surface documented, surface_rate, gap_count + the gap list of undocumented surface items) and stats (files / surface / chunks / pages). Use to follow a run started by atlas_run to completion and judge whether the docs are complete. |
| confirm_attachment_uploadA | After the bytes have been PUT to a request_attachment_upload URL, return the stored file's serve URL + ready-to-embed |
| create_pageA | Create a page in a space (editor+). Body is markdown; tela://page/{id} links and [[Page Title]] wikilinks (resolved by title within the space) are indexed as backlinks. tela renders a rich block palette beyond plain markdown — to-do list, pull quote, callout, collapsible, tabs, kanban board, stat grid, timeline, calendar, poll, chart, embed, mermaid diagram, image, file attachment, code block, equation, inline math, table, highlight, wikilink, footnote. Prefer these over walls of text; read the tela://authoring-guide resource (or this server's instructions) for exact syntax. After writing, call lint_page — the reader silently drops raw HTML and unwraps unrecognized blocks, which you cannot see from the markdown. When asked for a presentation, slides, a slide deck, or a talk (any phrasing) — not a prose doc — set the page property deck=true (and optionally variant=) and write the body as slides separated by |
| create_spaceA | Create a space; the caller becomes its owner (write scope). |
| deck_authoring_guideA | Return the full tela deck authoring guide as markdown — every tahta layout with its required/optional fields, the components, and the style variants. Read this FIRST when creating or editing a deck (a deck=true page) so you don't guess at layouts/fields. The guide lists optional capability modules (e.g. branding, imagery); when one applies, call again with module="" to fetch that extra guidance. |
| delete_attachmentA | Detach a file from a page by attachment id (editor+; ids come from list_attachments). Soft-delete. It does NOT edit the page body, so remove any inline embed separately with update_page/patch_page. |
| delete_pageA | Delete a page (editor+). Backlinks from other pages are preserved with the last-known title. |
| delete_spaceA | Delete a space AND all its pages, comments, revisions and share links. Owner only. Irreversible. |
| edit_sheetA | Make a STRUCTURED edit to a sheet (a sheet=true page), editor+. Prefer this over update_page for sheets: you pass a typed operation and tela rewrites the Defter markdown correctly — inserting a row shifts every formula below it, deleting a column re-references the rest, so you never corrupt the grid by hand-editing text. Pass one |
| fetchA | Fetch a tela page's full text by id (the id comes from a search result) — the fixed-shape companion to |
| find_overlapsA | Near-duplicate page PAIRS that share a near-identical passage (real merge/redirect candidates) for wiki hygiene. Optional space_id restricts to one space; threshold (0..1, default 0.92) is the minimum chunk-level similarity to count as a duplicate. |
| generate_deck_imageA | Generate an image from a prompt and attach it to a deck page (editor+), ready for a bg:/image: slot. Returns the serve URL + a |
| get_pageA | Full markdown body + metadata for a numeric page id. Includes an |
| get_page_revisionA | One historical revision of a page: its title, full markdown body and properties as they were at that point (read-only, editor+ on its space). Take |
| get_spaceA | Fetch one space's metadata (id, name, slug) by id. Read-only. Use when you already hold a space_id and just need its name/slug; to discover spaces use list_spaces, to list its pages use list_pages. |
| import_guideA | Return the guide for BULK-importing an existing folder of documents (Word docs, spreadsheets, PDFs, notes) into a space as a page tree — rather than hand-creating pages one at a time. Read this FIRST for any 'import', 'migrate my docs', 'bring in this folder', or 'load these files' request. Covers converting Office files locally (docx → pages, spreadsheets → live sheets), attaching PDFs/images, and the import endpoint's dry-run → confirm → commit contract. |
| invite_to_spaceA | Give a person access to a space by EMAIL ADDRESS — space owner only, write scope. Two outcomes, and the response tells you which happened: if a tela account already uses that address they are added right away and returns |
| knowledge_gapsA | The most-asked "ask your docs" questions the corpus could NOT answer — a content roadmap: write these pages next. Covers your own asks plus asks in spaces you're a member of. Optional space_id and since_days window. |
| lint_deckA | Validate a deck page's slides against the tahta theme contract — unknown layouts, missing required fields, type/format mistakes. Run after authoring/editing a deck to catch problems before presenting. Returns structured issues per slide. For the full list of valid layouts and each layout's fields, call deck_authoring_guide. |
| lint_pageA | Check a page for places where the READER renders something different from what the markdown says — an unknown |
| list_attachmentsB | List the files attached to a page (uploads AND rclone-synced files): name, mime, byte size, a stable serve URL, an absolute download_url (fetch the bytes), a |
| list_backlinksA | List the pages that link TO the given page via [[wikilink]] / tela://page/{id} — its incoming references (read-only). Use to see what depends on a page before you edit or delete it, or to walk the explicit link graph; for semantically similar pages that don't link it, use related_pages. |
| list_commentsA | Read comments (editor+). Pass page_id for one page's full threads (each root with its replies), or space_id for an inbox of threads across a whole space (roots only, each with reply_count and page_title — drill into the page for the replies). |
| list_page_revisionsA | A page's revision history, newest first (read-only, editor+ on its space). A revision is snapshotted on every title/body change, by a person, an agent, sync or Atlas. Returns |
| list_pagesA | Flat page listing in a space (read-only). Pass parent_id for the direct children of one page; omit for top-level pages. Use to browse a space's structure or find a page_id; to find pages by keyword use |
| list_sharesA | List a page's public share links (editor+): id, token, absolute url, has_password, include_descendants, expires_at, revoked_at. Active links only by default; pass include_revoked to also see revoked ones. Tokens are bearer secrets, so this needs a write-scoped key. |
| list_space_filesA | List every file stored in a space, including the ones parented to the space ROOT rather than to a page — those are invisible to list_attachments (which is per-page), so this is the only way to discover a file that was synced or imported beside the page tree. Each entry carries the same links: |
| list_spacesA | List every space the API key can access (id, name, slug). Read-only. Start here to discover a |
| move_pageA | Move a page: reparent (parent_id), detach to top-level (make_root), reorder (position), and/or relocate to another space (space_id). Editor+ in both source and target space. Provide at least one of space_id / parent_id / make_root / position. |
| patch_pageA | Surgically edit ONE section of a page instead of rewriting the whole body (editor+). First call get_page format:"map" to see the section paths, then patch the target. Cheaper and safer than update_page on a long page — it never touches the rest of the document. Snapshots a revision like any edit. |
| preview_deckA | Render a deck page to slide images and return them, so you can SEE how the deck looks (don't author blind). Pass |
| preview_pageA | Render a page and read it back as the reader actually shows it — the same render the PDF export uses, so callouts, tables, math, mermaid and diagrams are all resolved. Use it to check that what you wrote is what appears (text you can diff against your intent), and after any edit whose result you can't be sure of from the markdown alone. |
| read_chunkA | Fetch one chunk's full section text by chunk_id (from a |
| related_pagesA | Pages semantically related to a given page ("see also"), ranked by similarity — discovery beyond explicit links (read-only). Use for topically similar pages; for pages that explicitly link this one, use list_backlinks. Works without a live embedder (uses stored vectors). |
| request_attachment_uploadA | Get a short-lived signed PUT URL to upload a file WITHOUT sending its bytes through the model context — for files over upload_attachment's 5 MB inline cap, or to avoid context bloat. Flow: call this → the host PUTs the raw bytes to the returned |
| researchA | Answer a question — or gather everything relevant on a topic — from the wiki by MEANING. One call assembles answer-ready grounding: the full bodies of the pages that matter (not isolated fragments), pulled from pages AND attached files (PDFs, docs), plus any flagged disagreements among the sources and a low_confidence signal. Returns |
| revoke_shareA | Disable a public share link by its share id (editor+; ids come from list_shares). The link stops working immediately. Idempotent — revoking an already-revoked link is a no-op. |
| searchA | Keyword (full-text) lookup over title + body, ranked + snippet-highlighted. Use to find a page you can name or that contains an exact term/identifier/error string. Works WITHOUT an embedder (always available). Optional space_id narrows to one space. To answer a question or gather material on a topic by meaning, use |
| share_pageA | Mint a public share link for a page — a URL anyone can open with NO tela login (editor+). Returns the absolute |
| sheet_authoring_guideA | Return the full tela spreadsheet (sheet) authoring guide as markdown — the Defter text format, coordinates, the formula functions, and the ```defter-style styling/format/chart syntax. Read this FIRST when creating or editing a sheet (a sheet=true page) so you write valid, well-formatted Defter markdown instead of guessing. |
| submit_feedbackA | Submit free-text feedback about tela / tela-mcp itself (friction, bugs, missing capabilities). NOT for page content — use add_comment for that. |
| suggest_linksA | Given draft text (a page you're writing), return existing pages it should link to, by semantic similarity. Use while authoring to wire a new page into the knowledge base instead of leaving it an orphan. Requires a configured embedder. |
| treat_deck_imageA | Make an image tahta-grade for a deck's variant (editor+): crop to 16:9, apply a scheme-aware duotone (palette-lock), grain, and an optional contrast scrim. Upload the source with upload_attachment first, then pass its attachment_id; the treated JPEG is saved as a new attachment and returned with a ready-to-place |
| update_commentA | Edit or resolve an existing comment (editor+); pass exactly one of body / resolved. {resolved: true} closes a thread once you have acted on it, {resolved: false} reopens one — idempotent, so re-resolving an already-resolved comment succeeds instead of erroring. Resolve applies to ROOT comments only. {body: ...} rewrites the text and is author-only: it works on comments this key wrote, and is refused on a person's comment. To answer someone rather than close them out, use add_comment with parent_id. |
| update_pageA | Patch a page's title, body, props and/or draft status (editor+). A body change auto-snapshots a revision. Pass base_version (from get_page) to refuse the write if someone edited the page since you read it. tela renders a rich block palette beyond plain markdown — to-do list, pull quote, callout, collapsible, tabs, kanban board, stat grid, timeline, calendar, poll, chart, embed, mermaid diagram, image, file attachment, code block, equation, inline math, table, highlight, wikilink, footnote. Prefer these over walls of text; read the tela://authoring-guide resource (or this server's instructions) for exact syntax. After writing, call lint_page — the reader silently drops raw HTML and unwraps unrecognized blocks, which you cannot see from the markdown. When asked for a presentation, slides, a slide deck, or a talk (any phrasing) — not a prose doc — set the page property deck=true (and optionally variant=) and write the body as slides separated by |
| update_spaceA | Patch a space's name and/or slug (editor+); idempotent — pass only the field(s) you want to change. Changing the slug updates the space's URL path (existing page ids and links still resolve). To create a space use create_space, to read it use get_space, to remove it use delete_space. |
| upload_attachmentA | Upload a file (base64) and attach it to a page (editor+) — an image, PDF, dataset, etc. Returns the serve URL plus a ready-to-paste |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| authoring-guide | How to write rich tela pages: callouts, tabs, kanban, embeds, diagrams, math, footnotes, and more — exact syntax with a worked example. |
| deck-authoring-guide | How to make a presentation, slides, or a slide deck in tela: the tahta layouts (cover/stats/chart/compare/timeline/…), their fields with examples, components, and the visual variants. Read this for any 'presentation', 'slides', 'deck', or 'talk' request. |
| import-guide | How to bulk-import an existing folder of documents into tela: converting Word docs to pages and spreadsheets to live sheets locally, attaching PDFs/images, and the import endpoint's dry-run → confirm → commit contract. Read this for any 'import', 'migrate my docs', or 'bring in this folder' request. |
| sheet-authoring-guide | How to make a spreadsheet in tela: the Defter text format (compact GFM tables + a ```defter-style block), coordinates, formulas, number formats, styling, and charts. Read this for any 'spreadsheet', 'budget', 'tracker', or 'table with formulas' request. |
| tela widget | |
| tela widget | |
| tela widget | |
| tela widget |
TDQS
Scored across 50 tools
The server has many overlapping retrieval and authoring tools (search/fetch/research/get_page/read_chunk; preview/lint page vs deck), but the descriptions explicitly differentiate each with cross-references and preferred-tool guidance. A few boundaries remain thin, such as fetch vs get_page compatibility aliasing and the multi-step attachment upload flow, so not every tool is instantly separable.
Nearly all names are snake_case and many follow a verb_noun pattern (list_pages, create_space, delete_attachment), with a consistent atlas_ prefix for the doc-generation subgroup. The main deviations are noun-phrase guide/utility tools (deck_authoring_guide, knowledge_gaps, fetch), so the convention is readable but not perfectly uniform.
At 50 tools, the surface is far beyond the typical 3-15 well-scoped range and is an extreme mismatch for a single MCP server, even accounting for the broad wiki/deck/sheet/Atlas scope. Several areas could be consolidated, such as the three-step attachment upload flow, separate guide fetches, and fetch/get_page overlap.
The surface covers page/space/comment/attachment/share/revision lifecycles plus authoring guides, lint/preview, decks, sheets, research, and Atlas doc generation, which is very broad. A few lifecycle gaps remain, such as no delete_comment, no restore-page operation, and limited attachment metadata editing, so it is not quite a dead-end-free surface.