tela
tela is a self-hostable, markdown-native team wiki designed for both humans and AI agents, offering full read/write access via a built-in MCP server at /api/mcp.
Page Management
Create, read, update, patch (section-level), move, and delete wiki pages with rich markdown blocks (tables, diagrams, code, math, callouts, etc.)
Fetch lightweight page content and view backlinks, revision history, and epistemic trust signals (freshness, corroboration, disputes)
Space Management
List, create, update, and delete spaces; browse page trees hierarchically within a space
Search & Discovery
Full-text search — keyword-ranked search over titles and bodies (always available)
Semantic research — answer questions by meaning using vector retrieval, with cited excerpts, sources, and disagreement flags
Related pages — find semantically similar pages for "see also" discovery
Suggest links — recommend existing pages to link to from draft text
Find overlaps — detect near-duplicate pages for wiki hygiene
Spreadsheets & Slide Decks
Create and edit sheet pages (Defter format) with structural edits (insert/delete rows/columns, set formulas, styles, freeze panes)
Create and edit deck (presentation) pages with tahta layouts; lint for errors, preview as images, and AI-generate or process slide images
Access authoring guides for both formats
File Attachments
Upload files inline (base64, ≤5 MB) or via signed PUT URL for large files; list, embed, and delete attachments
Collaboration & Sharing
Add comments anchored to specific text passages
Create public share links (optionally password-protected or time-limited), list active links, and revoke them
AI Documentation (Atlas)
Generate and maintain wiki pages from code repositories; audit documentation coverage, list projects, trigger runs, and poll run status for gaps and metrics
Admin & Feedback
Surface knowledge gaps (most-asked unanswered questions) and submit feedback about tela itself
The wiki that writes itself — from the code you already ship.
Home · Pricing · Compare · MCP for agents · Docs
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.
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/mcpis 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.bodyis canonical markdown forever (no block table). Sync over WebDAV, export to zip/PDF, and run the whole stack with onemake up.
Related MCP server: basic-memory
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 upThe 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:
After the first deploy, enable pgvector on the managed database once —
CREATE EXTENSION IF NOT EXISTS vector;— then point the backend'sTELA_PUBLIC_BASE_URLat 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 surfaceIf :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 restartConfiguration
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
Variable | Description |
| Public origin of the instance (e.g. |
| Secret signing share-link password cookies. Generate with |
| Secret signing personal access tokens (PATs). Generate with |
| Password for the bundled Postgres. No default — must be set. |
Postgres
Variable | Description |
| Postgres role for the bundled DB. Default |
| Postgres database name. Default |
| Full DSN — only set when running outside the bundled stack (external/managed Postgres). Format |
Bootstrap admin (optional)
Variable | Description |
| Bootstrap admin username (first boot only). |
| Bootstrap admin password. Unset → use the |
| Optional; 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.
Variable | Description |
| SMTP relay host (e.g. |
|
|
|
|
| SMTP username. |
| SMTP password or API key. |
| From identity, e.g. |
Custom domains & TLS (optional)
Variable | Description |
| Canonical host Caddy binds for direct-TLS mode (e.g. |
| Shared 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).
Variable | Description |
| Embedder endpoint for semantic chunk search (e.g. |
| Embedding model. Must be 1024-d; default |
| Advisory embedding dimension (the column is fixed at |
| Bearer token for a managed/authenticated embed endpoint. |
| Query-side instruction prefix for asymmetric retrieval. Unset → sensible default. |
| Optional cross-encoder reranker |
| Reranker model name and token. |
| Log "ask your docs" questions to surface knowledge gaps (admin-only). |
| OpenAI-compatible chat base including |
| Chat model name (e.g. |
| Bearer token for a managed/authenticated LLM endpoint. |
| Completion length cap. Default 1024; |
| Epistemic trust pass (corroborate/contradict scoring). On when LLM+embedder are set; |
| Cap on concurrent Atlas doc-gen runs. Default 1. |
| Per-run client concurrency gate. Default 6. |
| Where Atlas unpacks working files. Default: OS temp dir. |
| OpenAI-compatible Images endpoint for the MCP |
Auth: MCP OAuth & federated sign-in (optional)
Variable | Description |
| WorkOS AuthKit issuer to enable Claude.ai/ChatGPT "Connect" OAuth on |
| The MCP endpoint's public URL (OAuth audience). Defaults to |
| Server-side WorkOS secret for the Standalone login bridge. |
| Google OIDC sign-in. Dark until both are set. |
| Microsoft OIDC sign-in. Dark until both are set. |
| GitHub OAuth2 sign-in. Dark until both are set. |
Billing (optional, ships dark)
Variable | Description |
| Polar organization access token. Unset → checkout/portal 503; plans stay operator-assigned. |
| Polar webhook signing secret (verbatim). |
|
|
| Maps plan keys to Polar product UUIDs, e.g. |
Services, sync & ops (optional)
Variable | Description |
| PDF render engine. Default |
| Internal origin Gotenberg's Chromium loads the reader from. Default |
| Slidev deck render sidecar. Default |
| WebDAV sync surface ( |
| Allow root-level |
| Mass-delete guard tuning. |
| Per-file upload cap for space files. |
| Backend listen address. Default |
|
|
| PAT audit-log retention in days. |
| Activity-feed GC window. Default 180. |
| Any value skips seeding the welcome space on first boot. |
| Build metadata surfaced by |
The split/deploy topology adds image-ref and Umami-analytics vars (
TELA_BACKEND_IMAGE,TELA_FRONTEND_IMAGE,UMAMI_APP_SECRET,UMAMI_DB_PASSWORD, …). Seedeploy/.env.exampleanddocs/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 originFor 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
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/mcpCursor (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 — install Tela from the plugin directory and sign in. Nothing to paste, no Developer Mode. (The directory plugin talks to the hosted service; for a self-hosted instance add a custom connector with your own URL, as below.)
Claude.ai / self-hosted ChatGPT (OAuth connector) — add a custom connector and paste the URL; complete the sign-in:
https://telawiki.com/api/mcpClaude 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:
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:

Architecture
Backend — Go (module
github.com/zcag/tela/backend, entrycmd/tela). Hand-writtendatabase/sqlover thepgx/v5stdlib driver — no ORM, no sqlc. Embedded, forward-only SQL migrations run automatically on boot.Database — PostgreSQL 17 with the
pgvectorextension (pgvector/pgvector:pg17). FTS lives inpages.search_tsv(rankedts_rank_cd); semantic chunks live inpage_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 astela-mcpon 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(ordocker 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 indocs/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.sqlmigration (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) andnpm run buildinfrontend/before sending a change. SeeCLAUDE.mdanddocs/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.
Available Tools
41 toolsadd_commentAdd commentAInspect
Attach a root (non-reply) comment to a page, anchored to a specific passage by a {prefix, exact, suffix} text triplet so it stays pinned to the right spot as the page changes (editor+). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | comment text (1-10000 chars) | |
| anchor | Yes | text-quote anchor locating the comment in the body | |
| page_id | Yes | page to comment on | |
| idempotency_key | No | optional client-generated key; a retry with the same key returns the original result instead of posting a duplicate comment (safe retries after a dropped connection) |
Output Schema
| Name | Required | Description |
|---|---|---|
| comment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that comments are root (non-reply) and anchored by a text triplet to stay pinned. It explains idempotency behavior: retries return original comment. Annotations are consistent (readOnlyHint=false, destructiveHint=false). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first covers the action, anchoring, and idempotency; second provides usage guidance. Every sentence adds unique value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested anchor object, optional idempotency key, output schema exists), the description covers anchoring mechanics, idempotency, and usage context. Output is covered by output schema, so no gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the anchor triplet purpose and idempotency key behavior, going beyond schema descriptions. It also notes the comment is a root comment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool attaches a root (non-reply) comment to a page with a specific anchoring mechanism. It explicitly distinguishes itself from the sibling tool 'submit_feedback', leaving no ambiguity about its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines: use for feedback on page content, and redirects users to 'submit_feedback' for reporting problems with tela itself. It also explains when to use the idempotency_key for retries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atlas_list_projectsList atlas projectsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so the description adds value by detailing the scope (personal plus org projects) and the can_manage flag indicating permission to trigger runs. No contradictions. Slight deduction for not mentioning any rate limits or pagination (but output schema likely covers that).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states purpose and scope; second adds detail and use case. Perfectly front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple list tool with zero parameters and an output schema. It covers what the tool returns, who can see what, and a key use case. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters and schema coverage is 100%, so the description has no burden to add parameter info. Baseline 4 for zero parameters applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List the atlas doc-generation projects you can see', which is a specific verb+resource+scope. It enumerates the fields returned (owner, output space, schedule, source count, latest-run summary, can_manage) and a clear use case (find project_id for atlas_run, read coverage health). This distinguishes it from siblings like atlas_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Start here to find a project_id for atlas_run, or to read coverage health at a glance', providing clear when-to-use guidance. It doesn't explicitly state when not to use, but the context is sufficient given the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atlas_runRun atlas generationAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | id of the atlas project to generate docs for (from atlas_list_projects) |
Output Schema
| Name | Required | Description |
|---|---|---|
| run_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: fetches sources, spends LLM budget, rewrites generated subtree, creates output space on first run, returns run_ids and 503 error. Adds value beyond annotations which only indicate non-destructive and non-read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with purpose, and every sentence adds value—no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given presence of output schema, description sufficiently covers return values (run_ids) and error conditions (503 ai_unavailable), along with permissions and side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers project_id with description, and the description reinforces where to obtain it ('from atlas_list_projects'), aiding in parameter selection and reducing ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it triggers a full doc-generation run for all sources in an atlas project. Specific verb 'trigger', resource 'atlas project', and differentiates from sibling tools like atlas_run_status and atlas_list_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states management-level access requirement (project owner/org admin), mentions spending LLM budget, and explains the 503 error condition. Lacks explicit when-not-to-use guidance but provides strong context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atlas_run_statusGet atlas run statusARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | id of the run to read (from atlas_run) |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, so the agent knows it is a safe read operation. The description adds behavioral context by detailing the return values (status, stage, coverage, stats) and their semantics, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 50 words) and front-loaded with the purpose. Each sentence adds value: purpose, return details, and usage guidance. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the output including status, stage, coverage metrics (must_rate, surface_rate, gap_count, gap list), and stats (files, surface, chunks, pages). It also provides usage context. With an output schema present, the description covers all necessary details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter (run_id) with 100% description coverage, so the schema already explains it. The description mentions 'run_id (view+)', which might hint at required permissions, but does not add significant meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads an atlas run's status and coverage by run_id, specifying the verb ('read') and resource ('atlas run status'). It distinguishes from the sibling 'atlas_run' which starts the run, and details the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'Use to follow a run started by atlas_run to completion and judge whether the docs are complete.' This provides clear context and implies not to use it before starting a run, with 'atlas_run' as the complementary tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_attachment_uploadConfirm a direct uploadAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes | the upload_id from request_attachment_upload |
Output Schema
| Name | Required | Description |
|---|---|---|
| attachment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, providing safety info. The description adds context about return value and workflow but doesn't elaborate on auth beyond 'Editor+' or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey key information: action, output, prerequisite, permission, and next steps. No excess or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with output schema, the description covers workflow, permission, and integration hints. Minor gap: no mention of error if upload_id is invalid or PUT incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for upload_id linking it to request_attachment_upload. The description doesn't add further parameter details, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the serve URL and markdown for a confirmed upload, distinguishing it from the sibling request_attachment_upload which initiates the upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the prerequisite of using request_attachment_upload and PUTting bytes before calling this tool, and advises subsequent use of update_page/patch_page. However, it does not contrast with alternatives like upload_attachment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageCreate pageAInspect
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. 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 --- 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | markdown body | |
| props | No | optional page properties (frontmatter); free-form keys, reserved keys like id/title/slug/created are ignored | |
| title | Yes | page title | |
| space_id | Yes | id of the space to create the page in | |
| parent_id | No | optional parent page id | |
| idempotency_key | No | optional client-generated key; a retry with the same key returns the original result instead of creating a duplicate page (safe retries after a dropped connection) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false) with no destruction (destructiveHint=false). The description adds significant behavioral context: backlinks are indexed for tela:// links and wikilinks, tela renders a rich block palette beyond plain markdown, and special content types (decks, sheets) require different body format and properties. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, then details. It is somewhat lengthy due to rich block palette enumeration and special case instructions, but every sentence earns its place. Minor conciseness improvements could be made, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, special content types, backlink indexing) and existence of an output schema, the description is thorough. It explains the body format, links, rich blocks, deck/sheet conventions, and directs to additional guides. No gaps are apparent for the agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds substantial meaning: body is markdown with special link types, and for decks/sheets the body format and props must be set differently; props have reserved keys; idempotency_key enables safe retries. These details greatly enhance understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a page in a space (editor+).' It clearly distinguishes from sibling tools like update_page, patch_page, delete_page, and from deck/sheet authoring guides. The verb 'create' with resource 'page' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: when to use this tool (to create a page), and when not (for presentations/decks or spreadsheets, directing to deck_authoring_guide and sheet_authoring_guide). It also instructs to prefer rich blocks and read the authoring guide for syntax. This is exemplary usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spaceCreate spaceAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | space name (1-200 chars) | |
| slug | No | optional url slug; derived from name when omitted | |
| org_id | No | optional org id to own the space (caller must be a member); omit for a personal space | |
| idempotency_key | No | optional client-generated key; a retry with the same key returns the original result instead of creating a duplicate space (safe retries after a dropped connection) |
Output Schema
| Name | Required | Description |
|---|---|---|
| space | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly=false and destructiveHint=false, indicating a write operation that is not destructive. The description adds the caller becoming owner, which is beyond annotations. However, it does not mention any other side effects or authorization requirements, so it is not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose. No unnecessary words. Every sentence adds value: purpose, ownership, slug behavior, and usage compared to siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values. It covers creation behavior, ownership, and clearly distinguishes from related tools. Given the tool's complexity and schema richness, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds context about slug derivation ('slug is derived from name when omitted'), which reinforces the schema but provides minimal extra value. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a space' with a specific verb and resource. It distinguishes itself from siblings by mentioning create_page (adds page inside existing space) and update_space (renames), ensuring no confusion with other space-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides usage context: 'Use to start a new top-level container of pages' and lists alternatives (create_page for adding pages, update_space for renaming). This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deck_authoring_guideDeck authoring guideARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | Optional capability module id (e.g. branding, imagery) to fetch instead of the core guide. |
Output Schema
| Name | Required | Description |
|---|---|---|
| guide | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. Description adds that it returns markdown, lists content types, and describes module usage, providing behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff. Front-loaded with core purpose, followed by usage guidance and module explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one optional parameter, annotations, output schema), the description covers purpose, usage, and parameter behavior fully. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description reinforces the parameter's purpose and adds usage context ('when one applies, call again with module="<id>"'), enhancing meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Return the full tela deck authoring guide as markdown' specifying the resource and action, and distinguishes from siblings by advising 'Read this FIRST' when creating or editing a deck.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to read this first when creating or editing a deck, avoiding guesswork. Also explains how to use the module parameter for extra guidance. Does not explicitly state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_attachmentDelete attachmentADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | attachment id (from list_attachments) | |
| page_id | Yes | the page the file is attached to |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds the key behavioral detail that it is a soft-delete, and confirms no impact on page body, providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. First sentence covers main purpose and prerequisites; second clarifies limitations and alternatives. No fluff, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with 2 parameters and output schema, the description covers purpose, usage, behavioral traits, and schema references adequately. No gaps given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The tool description does not add extra parameter details beyond what is already in the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Detach a file from a page by attachment id', specifying the action, resource, and identifier. It also distinguishes from editing the page body, differentiating it from sibling tools like update_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('editor+; ids come from list_attachments') and when not to use ('It does NOT edit the page body'), with clear alternatives ('remove any inline embed separately with update_page/patch_page').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageDelete pageADestructiveInspect
Delete a page (editor+). Backlinks from other pages are preserved with the last-known title.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | page id to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds valuable behavioral context: backlinks are preserved with the last-known title. This goes beyond what annotations provide, though it omits details like deletion permanence or side effects on other entities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no filler. The action is front-loaded in the first sentence, and the second sentence provides a key behavioral note. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, output schema exists), the description covers the core action and an important side effect (backlink preservation). It does not address potential error states or data consequences, but it is reasonably complete for the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter `id` is clearly documented in the schema as 'page id to delete'. The description does not add any additional parameter semantics, so it meets the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a page (editor+)', with a specific verb and resource. It distinguishes from sibling tools like create_page, update_page, and delete_space by specifying the target (page) and required permission level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates use for deleting pages with editor+ permissions. It does not explicitly state when not to use or provide alternatives, but the context of sibling tools and the clear action makes the usage fairly obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_spaceDelete spaceADestructiveInspect
Delete a space AND all its pages, comments, revisions and share links. Owner only. Irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | space id to delete (cascades) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already confirm destructiveHint=true, but the description adds important context: cascading deletion of all associated content, ownership requirement, and irreversibility. These details enhance agent understanding beyond the annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences) and front-loaded with the core action. Every word adds value—'Delete a space AND all its pages, comments, revisions and share links. Owner only. Irreversible.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. It adequately covers scope, prerequisites, and irreversibility. The context of sibling tools (e.g., delete_page, update_space) is addressed indirectly by specifying the full cascade.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, with 'space id to delete (cascades)' in the schema. The tool description does not add additional meaning to the parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('delete'), the resource ('space'), and the cascading effect on pages, comments, revisions, and share links. It distinguishes itself from sibling tools like delete_page or delete_attachment by specifying the full scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Owner only' and 'Irreversible', providing clear guidance on when to use (only if owner) and the consequence. It does not mention alternatives like archiving, but for a destructive operation this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_sheetEdit sheet (structured)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | a single SheetOp object with a 'kind' field. Provide this OR ops. | |
| ops | No | an ordered batch of SheetOps applied atomically (all-or-nothing; the sheet is only rewritten if every op succeeds). Provide this OR op. | |
| page_id | Yes | the sheet page id to edit (a page with sheet=true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state non-read-only. The description adds critical behavioral details: operations are atomic, errors are fixable, returns updated sheet with computed formulas, and warns against manual editing to avoid grid corruption. This far exceeds the annotation burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, starting with purpose and preference. Every sentence adds value, though it is slightly verbose for a single tool. Could be tightened by removing redundant 'Pass one op (or a batch...)', but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple op kinds, batch, atomicity, output schema), the description is remarkably complete. It covers all key aspects: permission, behavior, error handling, output, and points to additional reference. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, yet description adds substantial meaning: explains 'op' structure with examples per kind, 'ops' batch with atomicity, and clarifies 'page_id'. Provides context that schema alone cannot, like 'A1 ref' and optional 'sheet' per op.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'edit' and resource 'sheet', differentiates from 'update_page' by explicitly preferring this tool for sheets, and specifies 'STRUCTURED edit' with 'editor+' permission. It leaves no ambiguity about what the tool does and its unique value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises 'Prefer this over update_page for sheets', implying when to use (sheets) and when not (non-sheet pages). It also directs to 'sheet_authoring_guide' for full details, providing clear guidance on alternatives and additional resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch documentARead-onlyInspect
Fetch a tela page's full text by id — the fixed-shape ChatGPT Deep Research companion to search (the id comes from a search result). Read-only. Prefer get_page for normal use (same body plus richer metadata and trust signals); reach for fetch only when the Deep Research search/fetch contract requires it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | page id, as returned by search results |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that the tool is read-only and returns 'full text', which aligns with annotations. It does not contradict, but could mention more about the response shape or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loaded with purpose, and includes essential usage guidance without unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, output schema exists), the description covers purpose, alternative use cases, and context. It is complete for the agent to decide when to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the parameter 'id' is already well-described in the schema as 'page id, as returned by search results'. The description adds no further semantic details, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('tela page's full text by id'), and distinguishes itself from sibling tool 'get_page' by noting it is a 'fixed-shape' companion to 'search'. It clearly states what the tool does and how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Prefer get_page for normal use... reach for fetch only when the Deep Research search/fetch contract requires it.' It also specifies that the id comes from a search result, setting clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_overlapsFind overlapping pagesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max pairs (default 50) | |
| space_id | No | optional space id to restrict to overlaps within one space | |
| threshold | No | min chunk-level cosine similarity 0..1 to count as a duplicate (default 0.92) |
Output Schema
| Name | Required | Description |
|---|---|---|
| overlaps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false. Description adds transparency by specifying return of page pairs and chunk-level similarity mechanism, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loads the verb and resource, with no extraneous words. Every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. Description addresses purpose, optional parameters, and defaults, sufficient for a read-only list tool with clear annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaning by explaining 'limit' as max pairs, 'space_id' as optional restriction, and 'threshold' as minimum cosine similarity with default 0.92, enhancing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds near-duplicate page pairs that share a near-identical passage, with a specific wiki hygiene goal. It distinguishes from siblings like 'related_pages' by focusing on merge/redirect candidates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes optional parameters for restricting to a space and setting threshold, implying usage for duplicate detection. Does not explicitly state when not to use, but the context of wiki hygiene and 'near-duplicate' pairs provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_deck_imageGenerate deck imageAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | id of the deck page to attach the generated image to | |
| name | No | optional attachment filename (default deck-image-<n>.png) | |
| seed | No | optional seed for reproducibility | |
| size | No | WxH, default 1280x720 (16:9 — the cover/bg/bleed slot aspect) | |
| model | No | optional model override (else the endpoint default) | |
| steps | No | sampling steps; ~10 for hero/cover, ~4 for incidental texture (more ≈ linearly slower). Omit for the model default | |
| prompt | Yes | the image prompt — rich and specific (scene, light, texture, on-variant colours). For FLUX models append 'no text, no letters, no words' or it invents garbled type; OMIT that only when you deliberately want legible in-image text |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| note | Yes | |
| markdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, etc.), the description adds critical behaviors: attaches to deck page, requires editor+, returns URL and snippet, may be unavailable (503), generation time varies, and advises against regeneration. Model-specific advice (FLUX) further enhances transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with main action and returns. While somewhat lengthy, every sentence adds value. Could be slightly trimmed but remains efficient for the information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: action, requirements, usage rules, error conditions, timing, and return format. With an output schema existing, the description still provides ample context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaningful guidance: rich prompts with FLUX append note, steps number suggestions, size default with aspect ratio. This elevates understanding beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'generate' and the resource 'image from a prompt attached to a deck page'. It distinguishes from siblings like 'treat_deck_image' by focusing on generation with prompt, and provides context on usage (atmosphere/concept/focal only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use ('atmosphere/concept/focal only'), when not to use ('most slides need NO image'), and directs to the imagery module for guidance. Also mentions potential unavailability and timing, aiding agent decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet pageARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | numeric page id | |
| format | No | 'full' (default) returns the markdown body; 'map' returns just the heading outline (section levels + paths) and no body — cheap to read, and each path is a target for patch_page; 'values' — for a SHEET page (sheet=true), returns the computed spreadsheet as self-describing prose (formulas materialized to their numbers, styling stripped) so you read the answers, not the raw =formulas (no effect on non-sheet pages) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the epistemic block with detailed fields (freshness, provenance, corroboration) and their implications. Exceeds what annotations provide (readOnlyHint, no destructive/ openWorld). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with purpose, and each sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers all necessary context: what is returned, parameter modes, and how to use the epistemic block. Adequately handles tool complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value by explaining each format option: 'full' returns markdown body, 'map' returns heading outline (cheap, targets for patch_page), 'values' returns computed spreadsheet for sheet pages. This clarifies usage beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full markdown body + metadata for a numeric page id', specifying the resource and verb. It distinguishes from siblings by focusing on retrieval of content and trust signals, not modification or listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on how to interpret the epistemic block ('prefer fresh, corroborated, human-reviewed pages'), which helps in acting on the output. Implicitly indicates when to use the tool (when full content and trust signals are needed) vs alternatives like format='map' for cheap outlines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spaceGet spaceARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | space id |
Output Schema
| Name | Required | Description |
|---|---|---|
| space | Yes | |
| owner_org | No | |
| page_count | Yes | |
| member_count | Yes | |
| owner_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the 'Read-only' tag is redundant but helpful. The description adds value by specifying the exact returned fields (id, name, slug) beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no wasted words. Purpose is front-loaded, and usage guidance is concise. Perfect for quick agent comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple tool with one parameter, an output schema (not shown), and clear annotations, the description covers purpose, usage, and alternatives completely. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of 'id' as 'space id'. The description does not add extra semantic meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fetch', the resource 'one space's metadata', and the specific fields ('id, name, slug'). It distinguishes itself from siblings by saying 'use when you already hold a space_id and just need its name/slug', contrasting with list_spaces and list_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when you already hold a space_id and just need its name/slug') and when not to (for discovery or listing pages), with direct alternatives: list_spaces and list_pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_gapsKnowledge gapsARead-onlyInspect
The most-asked "ask your docs" questions the corpus could NOT answer — a content roadmap. Instance-admin only (exposes users' questions). Optional since_days window.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max gaps (default 50) | |
| since_days | No | only count asks in the last N days (0 = all time) |
Output Schema
| Name | Required | Description |
|---|---|---|
| gaps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. The description adds that it exposes users' questions and is admin-only, which are behavioral traits beyond annotations (privacy/access).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines the tool's purpose, second adds access constraint and optional parameter. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has an output schema, no required params, simple behavior. Description fully covers what the tool does, its access restrictions, and the optional time window. Complete for this use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters (limit and since_days). The description only mentions 'Optional since_days window' which doesn't add new meaning beyond the schema. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns 'the most-asked ask your docs questions the corpus could NOT answer — a content roadmap.' This is a specific verb+resource, and the purpose is distinct from sibling tools like list_pages or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Instance-admin only (exposes users' questions)' and 'Optional since_days window,' providing clear context and parameter guidance. No explicit alternatives or when-not-to-use, but adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_deckLint slide deckARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | id of the deck page to validate |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| hint | No | |
| errors | Yes | |
| issues | Yes | |
| warnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so description adds value by stating it returns structured issues per slide, which provides context beyond the safety profile. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with clear purpose. First sentence defines action, second gives usage timing and output, third references sibling. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple tool: explains what it does, when to use, what output to expect (structured issues), and where to find more info (deck_authoring_guide). Output schema presumably covers return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear description for the single parameter 'id'. Description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Validate', resource 'deck page's slides', and scope 'against the tahta theme contract' including specific checks (unknown layouts, missing required fields, type/format mistakes). Distinguishes from siblings like deck_authoring_guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Run after authoring/editing a deck to catch problems before presenting.' Also provides exclusion and alternative: 'For the full list of valid layouts ... call deck_authoring_guide.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsList attachmentsARead-onlyInspect
List the files attached to a page (uploads AND rclone-synced files): name, mime, byte size, a stable serve URL, an absolute download_url, and a ready-to-embed markdown snippet. embedded tells you the page body already references the file.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | page whose attachments to list |
Output Schema
| Name | Required | Description |
|---|---|---|
| attachments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds key behavioral details: lists both upload and rclone-synced files, provides specific fields including 'embedded' flag indicating if file is referenced in page body.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose, with no redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description still lists return fields. Single required parameter, annotations present, and description covers purpose and behavioral context fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description does not add extra meaning beyond the schema's 'page whose attachments to list'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies verb 'List', resource 'attachments of a page', and lists returned fields (name, mime, size, URLs, markdown snippet). Distinguishes between upload and rclone-synced files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for listing page attachments, but no explicit guidance on when to use vs alternatives (e.g., upload_attachment) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backlinksList backlinksARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | page whose incoming links to list |
Output Schema
| Name | Required | Description |
|---|---|---|
| backlinks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. Description adds that it lists only [[wikilink]] and tela:// page links, which is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, second sentence adds usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, annotations, and output schema, the description is complete. It covers purpose, usage context, and an alternative, fulfilling the agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for page_id. The description restates the parameter meaning but does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists incoming references (backlinks) to a page via explicit wikilinks or tela:// URLs. It uses a specific verb 'list' and resource 'backlinks' and distinguishes from sibling 'related_pages'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: before editing/deleting a page to see dependencies or to walk the link graph. Also provides an alternative: for semantically similar pages not linking, use related_pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList pagesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | id of the space to list pages in | |
| parent_id | No | optional parent page id; omit for top-level pages |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=true; the description adds that the listing is 'flat' and per-space, but does not mention pagination or ordering. This is adequate but could be more specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey the core purpose, safety, and alternative tools. Front-loaded with the main action and read-only nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description sufficiently covers the tool's usage scenarios, relationships with siblings, and parameter guidance for a simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds the crucial detail that parent_id returns 'direct children' rather than all descendants, which is not explicit in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing pages in a space, and distinguishes it from sibling tools by specifying that 'search' is for keyword search and 'get_page' is for reading page body.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use the parent_id parameter and when to omit it, and provides guidance on using alternative tools for different needs (search for keywords, get_page for body).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList spacesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| spaces | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying the returned fields (id, name, slug) and confirming read-only nature. No additional behavioral traits are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main action. Every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 0 parameters and an output schema present, the description fully explains what the tool does, what it returns (fields), and when to use it. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters, and schema coverage is 100%. The description does not need to add parameter info. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List every space the API key can access' with specific verb and resource. It distinguishes from siblings by noting 'for a single space you already know, use get_space instead'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to start here to discover a space_id for other tools when you don't have one, and advises using get_space for a known single space. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_pageMove pageAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | page to move | |
| position | No | new 0-based position among siblings (omit to keep) | |
| space_id | No | relocate to this space (omit to keep) | |
| make_root | No | detach to top-level (mutually exclusive with parent_id) | |
| parent_id | No | new parent page id (omit to keep; mutually exclusive with make_root) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: permission requirements and parameter mutual exclusivity (make_root vs parent_id). Annotations already indicate idempotent and non-destructive, and the description does not contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: operations, permissions, constraints. No redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, the description covers all necessary aspects: actions, constraints, and permissions. No critical gaps for an idempotent, non-destructive move operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by grouping parameters by operation and clarifying constraint ('mutually exclusive with parent_id'). This reduces ambiguity about which parameters to combine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (move a page) and specifies the four operations (reparent, detach, reorder, relocate). It distinguishes this tool from sibling tools like update_page and patch_page by focusing on structural movement rather than property updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit permission requirements ('Editor+ in both source and target space') and mandatory parameter condition ('Provide at least one of...'). No explicit comparison with alternatives, but the constraints are sufficiently clear for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_pagePatch page sectionAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | page id to patch | |
| target | Yes | the section to edit, by its heading path from get_page format:"map" (e.g. 'Setup' or 'Deploy > Production'); the bare heading text also resolves | |
| content | No | markdown to insert; omit for delete | |
| operation | Yes | append (add to the end of the section's body), prepend (add right under the heading), replace (swap the section's body, heading kept), or delete (remove the heading and its body) | |
| idempotency_key | No | optional client-generated key; a retry with the same key returns the original result instead of re-applying the patch |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by stating 'never touches the rest of the document' and 'snapshots a revision like any edit.' Since annotations declare readOnlyHint=false and destructiveHint=false, the description adds valuable context about safety and revision behavior without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are dense with information: first sentence states purpose and comparison, second provides workflow step and safety reassurance. No unnecessary words, front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers all needed context: when to use, prerequisites, behavioral traits, and parameter details. It is fully adequate for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning: it explains how 'target' works (heading path from get_page map), describes operations (append, prepend, replace, delete), and clarifies content usage ('markdown to insert; omit for delete'). This enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Surgically edit ONE section of a page instead of rewriting the whole body.' The verb 'surgically edit' and resource 'page section' are specific, and it distinguishes from sibling tool 'update_page' by emphasizing that it only edits one section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'First call get_page format:"map" to see the section paths,' and it compares to update_page: 'cheaper and safer than update_page on a long page — it never touches the rest of the document.' This tells the agent when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_deckPreview slide deckARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | id of the deck page to render and preview | |
| slides | No | optional 1-based frame numbers to preview; omit for the first few |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds valuable behavioral context: 'Renders are cached', which is not in annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, parameter usage, and caching behavior. Every sentence adds value and is front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description covers purpose, parameter usage, and caching. It could be improved by describing the return format (e.g., list of image URLs), but is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have clear descriptions in the schema. The description repeats the slides parameter guidance but adds no new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Render a deck page to slide images and return them'. It distinguishes from sibling tools like 'generate_deck_image' by emphasizing visual preview ('so you can SEE how the deck looks') and advising not to author blind.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use to see how the deck looks before authoring. It gives parameter guidance ('Pass slides to preview specific 1-based frames; omit for the first few') but does not explicitly mention when not to use or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_chunkRead chunkARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| chunk_id | Yes | chunk id from a research result |
Output Schema
| Name | Required | Description |
|---|---|---|
| chunk | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. Description adds context about returning section text and file chunk details (file_name, parent page_id, download_url), which is valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description adequately covers what the tool does, granularity, and special behavior for file chunks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of chunk_id. Description adds context that the ID comes from a research result, but doesn't add formatting or constraints beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches one chunk's full section text by chunk_id from a research source, specifying page or file chunk (read-only). It distinguishes from get_page for whole page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Middle granularity — use it to expand a single cited section; for the whole page use get_page.' Also describes file chunk citations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_attachment_uploadRequest a direct upload URLAInspect
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 place it with update_page/patch_page. Editor+. Only works on hosts that can make an outbound HTTP PUT; otherwise use upload_attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| mime | No | optional content-type hint; for images the server still trusts magic bytes | |
| name | Yes | file name including extension, e.g. deck.pdf or photo.png | |
| page_id | Yes | page to attach the file to |
Output Schema
| Name | Required | Description |
|---|---|---|
| upload | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it explains the purpose of the signed URL (direct upload), the required outbound HTTP PUT capability, and the follow-up actions (reading response or calling confirm_attachment_upload). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with each sentence serving a purpose: purpose, flow, conditions, and alternatives. It is front-loaded with the key action and provides structured guidance without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated) and the tool's complexity (multi-step flow), the description covers all necessary context: usage conditions, step-by-step flow, prerequisites, and alternatives. It is complete and actionable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that 'mime' is an optional content-type hint and that the server trusts magic bytes for images, and that 'name' should include the extension. This nuance improves parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets a short-lived signed PUT URL for uploading files, distinguishing it from upload_attachment by avoiding context bloat and handling large files. It specifies the resource (PUT URL) and verb (request/get), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (files over 5 MB or to avoid context bloat) and when not to (if host cannot make outbound HTTP PUT, then use upload_attachment). It also provides a clear flow of steps to follow after obtaining the URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchResearch the wikiARead-onlyInspect
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 a download_url for file sources), disagreements (conflicts to surface, [n]-keyed), and low_confidence. 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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | optional retrieval depth override (default service-defined) | |
| question | Yes | the question to answer, or topic to gather context on | |
| space_id | No | optional space id to restrict retrieval to |
Output Schema
| Name | Required | Description |
|---|---|---|
| context | Yes | |
| sources | Yes | |
| disagreements | No | |
| low_confidence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it returns context, sources, disagreements, and low_confidence signals; it pulls from pages and attached files; it assembles answer-ready grounding in one call. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose, followed by return values and alternatives. It is efficient but slightly longer than necessary; however, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, output schema, many siblings), the description is complete. It explains return types, prerequisites, and error conditions, and references alternatives. The output schema exists, so full return structure details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The baseline is 3. The tool description does not add additional parameter-level detail beyond what the schema already provides, so the score remains at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Answer a question — or gather everything relevant on a topic — from the wiki by MEANING.' It uses a specific verb+resource combination and explicitly distinguishes from sibling tools like search (exact-name/term lookup), read_chunk, and get_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use alternatives: 'To read one section deeper use read_chunk ... or get_page. For exact-name/term lookup use search.' It also notes a prerequisite (requires configured embedder) and mentions the error code 503 if missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max results (default 25) | |
| query | Yes | search terms | |
| space_id | No | optional space id to restrict results to |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by noting it works without an embedder (always available) and that space_id narrows results. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines core functionality, second gives usage guidance and alternative. Very concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple schema, output schema exists, and annotations cover safety, the description fully addresses purpose, usage, and behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so description adds little beyond confirming defaults and indicating space_id is optional. Baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states keyword full-text search over title+body with ranking and snippet highlighting, distinguishing it from siblings by noting it works without an embedder and contrasting with 'research' for semantic queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('find a page you can name or that contains an exact term') and when not to ('use research instead for meaning'), providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sheet_authoring_guideSheet authoring guideARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| guide | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying the returned content (markdown guide). It does not contradict annotations and provides sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states what it returns, second states when to use it. No fluff, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists), the description is fully complete. It explains what, when, and why, with no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params, schema coverage 100%). The description correctly adds no parameter info, as none are needed. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the full sheet authoring guide as markdown, listing specific content (Defter text format, coordinates, formulas, syntax). It also gives a usage instruction: read this first when creating/editing a sheet. This distinguishes it from action-oriented siblings like edit_sheet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Read this FIRST when creating or editing a sheet' and advises against guessing. This tells the agent exactly when to use this tool and provides context for sequence of operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_feedbackSubmit feedbackAInspect
Submit free-text feedback about tela / tela-mcp itself (friction, bugs, missing capabilities). NOT for page content — use add_comment for that.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | feedback body (1-8000 chars) | |
| kind | No | optional type: idea | bug | other | |
| subject | Yes | short subject (1-200 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| feedback | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutation (readOnlyHint=false) but not destructive. The description adds the scope constraint but does not disclose additional behaviors such as confirmation, rate limits, or side effects beyond the basic submission action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The purpose and exclusions are front-loaded, making it easy for an agent to quickly understand scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and full parameter descriptions, the description covers the essential context: what to submit and what not, with no missing information for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to detail parameters. It does not add any extra semantics beyond what the schema already provides for subject, body, and kind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits free-text feedback about the tool itself, distinguishing it from page content feedback. It explicitly names a sibling tool (add_comment) for the alternative use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (feedback about tela/tela-mcp) and when not to use (page content), with a direct reference to add_comment as the appropriate alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_linksSuggest linksARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | draft text to find link targets for | |
| limit | No | max suggestions (default 10) | |
| space_id | No | optional space id to restrict suggestions to |
Output Schema
| Name | Required | Description |
|---|---|---|
| suggestions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to reiterate safety. It adds value by stating the embedder dependency and the semantic similarity approach, but does not disclose performance characteristics or rate limits. With annotations covering the core behavioral profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, efficiently front-loading purpose and usage. Every sentence adds value: first defines what and how, second gives when and a prerequisite. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (not shown but mentioned in context signals), the description does not need to detail return format. Parameters are fully documented in the schema, and the description covers usage context and dependencies. The tool is simple and well-defined, leaving no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all three parameters. The description adds minimal additional meaning beyond calling the input 'draft text' and the output 'existing pages'. Since the schema already does the heavy lifting, no extra credit is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: given draft text, return existing pages to link to via semantic similarity. It distinguishes itself from search or list tools by specifying 'semantic similarity' and authoring context. The verb 'suggest' and resource 'links' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool while authoring to avoid orphan pages, which gives clear usage context. It also notes the prerequisite of a configured embedder. However, it does not explicitly contrast with sibling tools like 'search' or 'related_pages', which could offer comparable functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
treat_deck_imageTreat deck imageAInspect
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").
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | id of the deck page the source image is attached to (the treated result is attached here too) | |
| mode | No | duotone (palette-lock to the variant, default) or none (crop+grain only, keep the image raw) | |
| scrim | No | optional contrast scrim: left or bottom (for text over the image); omit for none | |
| variant | No | tahta variant to treat for; omit to use the deck's own variant | |
| attachment_id | Yes | id of an existing attachment ON THIS PAGE to treat (upload the source first with upload_attachment) |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| note | Yes | |
| variant | Yes | |
| markdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds critical context: it modifies the image and saves a new attachment, returns a snippet, and warns against duotone on real-colour subjects. This goes beyond annotations, but annotations already establish mutability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single dense paragraph, efficient but packed with information. Could be slightly more structured (e.g., bullet points), but it front-loads the main action and follows with guidelines. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, prerequisite step, output snippet), the description covers all essential aspects: prerequisites, process, output format, and reference to the imagery module. The presence of an output schema reduces the need to detail return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters. Description clarifies relationships (e.g., variant defaults to deck's own) and adds context for mode, scrim, and the required upload step. It enhances the schema without repeating it verbatim.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transforms an image into 'tahta-grade' by cropping to 16:9, applying duotone, grain, and optional scrim. It distinguishes itself from siblings like generate_deck_image and upload_attachment by its specific role as a fallback treat step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'FALLBACK for off-palette or reused images' and when not: 'prefer rich on-palette images raw'. Provides prerequisite: upload with upload_attachment first. Names alternatives: use mode=none for real-colour subjects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageUpdate pageAIdempotentInspect
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. 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 --- 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | page id to patch | |
| body | No | new markdown body (omit to leave unchanged) | |
| props | No | replace the whole properties bag (omit to leave unchanged); reserved keys are ignored | |
| title | No | new title (omit to leave unchanged) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds valuable context: body changes trigger automatic revision snapshots, reserved keys are ignored, and the rich block palette availability. This goes beyond annotations to inform the agent of side effects and capabilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, but it becomes verbose with extensive lists of block types and detailed instructions for decks and sheets. Some of this detail could be delegated to the referenced authoring guides, making the description more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (not shown but noted), the description covers key aspects: authentication (editor+), side effects (snapshots), content capabilities, and special use cases. Minor gaps exist, such as error handling or rate limits, but overall it provides sufficient context for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining the 'body' parameter's special formatting options (tela blocks, decks, sheets) and the 'props' parameter's reserved key behavior. This enriches understanding beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool patches a page's title and/or body, with specific verb ('Patch') and resource ('page'). It distinguishes from creating a new page (different scope) and includes editor requirement, making purpose unambiguous. The context of slide decks and spreadsheets further clarifies use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool vs creating content types (slide decks, spreadsheets) with explicit instructions to set appropriate page properties. However, it does not directly compare to sibling tools like 'create_page' or 'patch_page' (if different), leaving some ambiguity about when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_spaceUpdate spaceAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | space id to patch | |
| name | No | new name (omit to leave unchanged) | |
| slug | No | new slug (omit to leave unchanged) |
Output Schema
| Name | Required | Description |
|---|---|---|
| space | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes idempotency and permission level (editor+), and clarifies that slug change does not break existing links. All behavioral traits beyond annotations are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no unnecessary words. Front-loads key action and idempotency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, no enums, output schema present), description covers all necessary aspects: action, parameters, side effects, alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. Description merely rephrases the schema's info about omitting fields; adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it patches a space's name and/or slug, with correct verb and resource. Explicitly distinguishes from sibling tools (create_space, get_space, delete_space).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use each sibling tool (create, read, delete) and explains behavior of slug change (URL updates, links resolve).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_attachmentUpload attachmentAInspect
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). 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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | file name including extension, e.g. report.pdf or chart.png (drives the displayed name + type detection) | |
| page_id | Yes | page to attach the file to | |
| data_base64 | Yes | the file bytes, base64-encoded; a leading data:<mime>;base64,… URL prefix is also accepted |
Output Schema
| Name | Required | Description |
|---|---|---|
| attachment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses that the payload is inline base64 and rides through context, capping at 5 MB. Also states the return values (serve URL and markdown snippet) and how attachments render (images inline, other files as download card). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no redundancy. The first sentence captures the core action and return, the second explains the workflow, the third gives the size constraint, and the fourth provides alternatives. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are documented. The description covers the input, size limitation, integration step (update_page), and alternatives. For a file upload tool with moderate complexity, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters. The description adds value by explaining that 'name' drives the displayed name and type detection, and that 'data_base64' accepts a data URL prefix. It also ties the 5 MB limit to the payload parameter, which is critical for agent decision-making.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Upload a file (base64) and attach it to a page'. It specifies the supported file types (image, PDF, dataset) and distinguishes from siblings like request_attachment_upload for larger files. The verb 'upload' combined with the resource 'attachment' and page context leaves no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use this tool (small files up to 5 MB) and when to use alternatives (larger files use request_attachment_upload or editor drag-drop). Also explains the follow-up step: call update_page or patch_page to place the attachment in the body. No confusion about prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, with no overlapping functionality. Even closely related tools like fetch/get_page and update_page/patch_page are well-differentiated by their descriptions and use cases.
All tool names follow a consistent lowercase snake_case pattern, predominantly verb_noun (e.g., create_page, list_spaces, delete_attachment). The few noun-phrase names (e.g., knowledge_gaps, deck_authoring_guide) are also consistent in style and follow the same convention.
At 41 tools, the server is on the high end but still justifiable given its wide scope covering wiki operations, deck authoring, spreadsheet editing, and doc-generation. The count is borderline heavy but not extreme, as each tool serves a specific niche.
The tool surface covers core wiki CRUD operations, comments, attachments, sharing, searches, and semantic features. Minor gaps exist: no page revision history, no atlas project creation/deletion, and no comment reply functionality. Overall, the server is fairly complete for its domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted markdown project wikis your team's AI assistants read, search, and update over MCP.
Governed, auditable knowledge your team curates for its AI assistants, self-hostable
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Self-hostable shared brain for you and your AI agents — docs, flows, meetings, decisions, rationale
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceThis is a connector to allow Claude Desktop (or any MCP client) to read and search any directory containing Markdown notes (such as an Obsidian vault).1,4441,352AGPL 3.0
- AlicenseBqualityAmaintenanceBasic Memory is a knowledge management system that allows you to build a persistent semantic graph from conversations with AI assistants. All knowledge is stored in standard Markdown files on your computer, giving you full control and ownership of your data. Integrates directly with Obsidan.md173,846AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnd-to-end agent-managed company brain. Humans and any MCP agent co-author living docs (Markdown + extensions), 40+ visual diagrams (Mermaid, BPMN, D2, PlantUML, ELK, Excalidraw), plans, and a self-learning Knowledge Graph. 163 tools across 16 categories. Auth: OAuth 2.1 or API key. Lean, secure, affordable — from individuals to enterprise.MIT
- AlicenseNot gradedqualityDmaintenanceA token-optimized MCP server for Notion that reduces context window usage by 73% while preserving full functionality, enabling AI assistants to interact with Notion efficiently.151MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zcag/tela'
If you have feedback or need assistance with the MCP directory API, please join our Discord server