- Brand
- tela
- Category
- Productivity
- Primary Subcategory
- Enterprise Knowledge Search & AI Context Layer
Integration details
Description
tela is a markdown-native team wiki where AI agents are first-class participants. Connect ChatGPT to your team's knowledge base to read, write, and maintain docs at scale. • Semantic search ("research") — answer questions by meaning, returning assembled grounding from full page bodies with flagged source disagreements • Keyword search — ranked, snippet-highlighted full-text lookup • Authoring — create, update, and surgically patch pages; move, delete, share with public links • Knowledge health — surface near-duplicate pages, identify unanswered questions, suggest links • Atlas — auto-generate technical docs from git repos and Jira; trigger re-ingestion, poll coverage • Presentations — author, lint, and preview Slidev slide decks stored as wiki pages. Connect by signing in with your tela account. Self-host via docker compose (AGPL) or use telawiki.com.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Enterprise Knowledge Search & AI Context Layer
- Secondary Subcategories
- None listed
- Brand
- tela
- Access
- Account required
- First tracked
- 2026-08-17
- Tool count
- 49
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Get alerts for Tela
Get updates when Tela’s Discoverability Score or category rank changes.
Competing in ChatGPT Enterprise Knowledge Search & AI Context Layer
View Category49 tools agents can invoke
Comment on a page (editor+). Omit parent_id for a ROOT comment: it needs an `anchor`, a {prefix, exact, suffix} text triplet that pins it to a passage so it survives edits to the page. Pass parent_id to REPLY inside an existing thread (no anchor; replying to a reply is rejected) — that is how you answer a person's comment, rather than posting a second root beside theirs. ANCHOR TEXT IS THE PAGE'S PLAIN TEXT, NOT ITS MARKDOWN: inline markers are stripped (`**ship it**` is anchored as `ship it`), blocks are joined by single newlines, and prefix/suffix hold at most 32 characters of surrounding context. Quote the passage as a reader sees it, not as get_page returns it. Pass idempotency_key to make retries safe (a repeat returns the original comment instead of posting a duplicate). Use for feedback ON page content; to report problems with tela itself use submit_feedback.
add_comment
After the bytes have been PUT to a request_attachment_upload URL, return the stored file's serve URL + ready-to-embed `markdown` (for hosts that couldn't read the PUT response). Editor+. Then place the snippet with update_page/patch_page.
confirm_attachment_upload
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=<style>) and write the body as slides separated by `---` using the tahta layouts; call the deck_authoring_guide tool (or read the tela://deck-authoring-guide resource) for the layouts, fields, components, and variants. When asked for a spreadsheet, a table of data with formulas/totals, a budget, a tracker, or any grid that computes — not a prose doc — set the page property sheet=true and write the body as Defter markdown (compact GFM tables + an optional ```defter-style block); call the sheet_authoring_guide tool (or read the tela://sheet-authoring-guide resource) for the format, formulas, and styling.
create_page
Create a space; the caller becomes its owner (write scope). `slug` is derived from `name` when omitted. Use to start a new top-level container of pages; to add a page inside an existing space use create_page, and to rename a space use update_space.
create_space
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="<id>" to fetch that extra guidance.
deck_authoring_guide
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_attachment
Delete a page (editor+). Backlinks from other pages are preserved with the last-known title.
delete_page
Delete a space AND all its pages, comments, revisions and share links. Owner only. Irreversible.
delete_space
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 `op` (or a batch via `ops`, applied atomically). Each op is `{kind, ...}` where kind is one of: setCells {cells:[{ref:"B2",text:"=A2*1.2"}]} — write literals/formulas by A1 ref; insertRows/deleteRows {at:<1-based row>, count?}; insertCols/deleteCols {at:<col letter or 1-based index>, count?}; setStyle {target:"A1:C1"|"B"|"2", attrs:{...}} — bold/align/fill/number-format a range/col/row; setFreeze {rows?, cols?} — freeze N header rows / M leading cols (0 clears); addSheet {name, after?}; renameSheet {sheet, name}; deleteSheet {sheet}. Ops that target a specific tab take an optional `sheet` (name or 0-based index; defaults to the first). A bad ref/range/sheet is rejected with a fixable error. Call sheet_authoring_guide for the full op reference, cell/style syntax, and formula functions. Returns the updated sheet with formulas computed.
edit_sheet
Fetch a tela page's full text by id (the id comes from a search result) — the fixed-shape companion to `search`. Read-only. Prefer get_page for normal use (same body plus richer metadata and trust signals); reach for `fetch` only when the host requires the fixed search/fetch contract.
fetch
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.
find_overlaps
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  snippet; reference it by path (don't regenerate on re-render). Read the imagery module first (deck_authoring_guide module="imagery"): most slides need NO image — use it for atmosphere/concept/focal only, reuse ONE background, write rich on-palette prompts, and prefer images raw. May be unavailable (503) if the instance hasn't configured image generation or AI is paused; generation can take from ~20s to a few minutes depending on the model.
generate_deck_image
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.
atlas_run_status
Full markdown body + metadata for a numeric page id. Includes an `epistemic` block — trust signals computed from the wiki's own state: freshness (age, stale, review_overdue), provenance (human / agent / sync), and corroboration vs. dispute against same-space pages. Weigh it: prefer fresh, corroborated, human-reviewed pages; treat a stale or disputed page as lower-confidence and check its listed disputes before relying on it.
get_page
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 `revision_id` from list_page_revisions. Works for trashed pages. For the page as it is now use get_page.
get_page_revision
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.
get_space
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.
import_guide
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.
knowledge_gaps
Check a page for places where the READER renders something different from what the markdown says — an unknown `:::block` or `[!CALLOUT]` that silently unwraps, raw HTML the reader drops, a collapsible whose blank lines are missing so its body vanishes, a `[[wikilink]]` that matches no page, a broken link or attachment, a ragged table, a table so wide the page column shows only part of it. These are invisible when you re-read your own source, which is why re-reading it is not a substitute for calling this. Run it after writing or editing a page.
lint_page
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_deck
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: `download_url` for the bytes, `share_url` to give a person, plus `parent_page_id`/`parent_title` (absent = the space root). Filter with parent_page_id: a page id for that page's files, "root" for the root only. Read-only; any space role. Capped at 500 files (`truncated` says so).
list_space_files
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); `can_manage` says whether you may trigger runs. Start here to find a project_id for atlas_run, or to read coverage health at a glance.
atlas_list_projects
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 `share_url` (give THIS to a person — it opens a page that previews the file and unfurls as a card in chat, where download_url just downloads), and a ready-to-embed `markdown` snippet. `embedded` tells you the page body already references the file.
list_attachments
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_backlinks
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). `status` is open (default), resolved, or all. TO POLL FOR WHAT HUMANS WROTE: keep the `cursor` this returns and pass it back as `since` next time — you then get only threads with new or edited activity, including threads someone replied to, and each comes back with its full context. Anchors are the page's PLAIN TEXT, not its markdown (inline markers stripped, blocks joined by single newlines), so match anchor_exact loosely against a get_page body rather than searching for it verbatim. Answer a thread with add_comment(parent_id=…) and close it with update_comment(resolved=true).
list_comments
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 `page` (with `deleted_at` set when the page is in the trash, and `current_revision_id`) and `revisions` (metadata only: id, created_at, author, source, byte_size, `is_current`). Works for trashed pages too, so you can recover what a removed page said. Page back with `cursor` = `next_cursor`. Read one revision's full text with get_page_revision.
list_page_revisions
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 `search`, and to read a page's body use get_page.
list_pages
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_shares
List every space the API key can access (id, name, slug). Read-only. Start here to discover a `space_id` for list_pages / search / create_page when you don't already have one; for a single space you already know, use get_space instead.
list_spaces
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.
move_page
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.
patch_page
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. `format`: "text" (default), "image" for a screenshot, "both". For a deck page, call preview_deck instead.
preview_page
Render a deck page to slide images and return them, so you can SEE how the deck looks (don't author blind). Pass `slides` to preview specific 1-based frames; omit for the first few. Renders are cached.
preview_deck
Fetch one chunk's full section text by chunk_id (from a `research` source), for a page OR a file chunk (read-only). Middle granularity — use it to expand a single cited section; for the whole page use get_page. A file chunk cites its file (file_name + parent page_id + download_url for the bytes + share_url, the previewable link to show a person).
read_chunk
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).
related_pages
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 `put_url` over HTTP → then either read that PUT response or call confirm_attachment_upload to get the embed snippet (and `share_url`, the link for a person), and place it with update_page/patch_page. Editor+. Only works on hosts that can make an outbound HTTP PUT; otherwise use upload_attachment.
request_attachment_upload
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 `context` (a numbered [n] excerpt block to ground your answer), `sources` (the cited hits aligned to [n], each with page_id/chunk_id for drill-in and, for file sources, a download_url for the bytes plus a share_url to show the person), `disagreements` (conflicts to surface, [n]-keyed), `low_confidence`, and `considered`/`truncated`. `truncated: true` means retrieval found MORE relevant sources than it returned (`considered` says how many) — the corpus did not run out, the per-call cap did; re-ask with a bigger `limit` before concluding anything is missing. YOU write the answer from `context` and cite sources by their [n]. To read one section deeper use `read_chunk` (chunk_id from a source) or `get_page` (full page). For exact-name/term lookup use `search`. Requires a configured embedder (503 otherwise).
research
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.
revoke_share
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
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 `research` instead.
search
Mint a public share link for a page — a URL anyone can open with NO tela login (editor+). Returns the absolute `url` plus the link's `id` and `token`. Options: include_descendants shares the whole subtree (not just this page); password gates it behind a passphrase; expires_at (UTC 'YYYY-MM-DD HH:MM:SS') auto-expires it. Each call mints a NEW link — use list_shares to see existing ones and revoke_share to disable one. This shares a single page tree; to publish a WHOLE space, use the space's visibility setting instead.
share_page
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.
sheet_authoring_guide
Submit free-text feedback about tela / tela-mcp itself (friction, bugs, missing capabilities). NOT for page content — use add_comment for that.
submit_feedback
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.
suggest_links
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  snippet for a bg:/image: slot. This is the tahta-imagine treat step — a FALLBACK for off-palette or reused images; prefer rich on-palette images raw, and never duotone (mode=duotone) a real-colour focal subject — use mode=none for those. See the imagery capability module (deck_authoring_guide module="imagery").
treat_deck_image
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_comment
Patch a page's title and/or body (editor+). A body change auto-snapshots a revision. 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=<style>) and write the body as slides separated by `---` using the tahta layouts; call the deck_authoring_guide tool (or read the tela://deck-authoring-guide resource) for the layouts, fields, components, and variants. When asked for a spreadsheet, a table of data with formulas/totals, a budget, a tracker, or any grid that computes — not a prose doc — set the page property sheet=true and write the body as Defter markdown (compact GFM tables + an optional ```defter-style block); call the sheet_authoring_guide tool (or read the tela://sheet-authoring-guide resource) for the format, formulas, and styling.
update_page
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.
update_space
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 `markdown` snippet; then call update_page or patch_page to place it in the body (images render inline as , other files as a download card). It also returns `share_url` — the link to give a PERSON who asks for the file, since it previews it and unfurls as a card, unlike the raw download_url. The payload is inline base64 and rides through the model's context, so it is capped at 5 MB — keep it to small files (screenshots, charts, short PDFs). For larger files use request_attachment_upload (a direct PUT URL, bytes off-context), or the tela editor (drag-drop).
upload_attachment
Tela ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Tela's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Tela alternatives on ChatGPT?
As of 2026-10-05, Tela competes with Algolia Productivity, Analytics Brain, Archiveye, Atlan, BitsWeave, BuildBetter.ai, Circuitry, Context Link and 41 more in ChatGPT Enterprise Knowledge Search & AI Context Layer, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.