Skip to main content
Glama
gwmage

Rootr MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ROOTR_API_KEYYesRootr API key
ROOTR_BASE_URLNohttps://rootr.io/api/v1
ROOTR_WORKSPACEYesWorkspace id

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
rootr_listA

List documents and folders in the connected Rootr (루터) workspace, optionally filtered to a path prefix. Use this first to discover what exists before reading or writing.

rootr_readA

Read the full markdown content of a Rootr (루터) document by path (starting with "/") or by node id. Read a document before editing or appending to it so you know its current structure.

rootr_appendA

Append content to a Rootr document, optionally under a given heading. This is a conflict-free, additive operation — it never overwrites existing content, so PREFER this over rootr_write whenever you just need to add new information (log entries, notes, findings) to an existing document.

rootr_editA

Replace an exact snippet of text ("find") with new text ("replace") inside a Rootr document. Fails with a clear error if the snippet is missing or ambiguous (not unique), so read the document first to copy the exact text to find. Good for precise, targeted edits; use rootr_append instead when you are only adding new content.

rootr_writeA

Replace the ENTIRE content of a Rootr document, or create a new document at a path if it does not exist. This is DESTRUCTIVE — it discards whatever is currently there. Read the document first and pass its etag as ifMatch to avoid clobbering concurrent changes. Prefer rootr_append or rootr_edit for incremental changes.

rootr_searchA

Full-text search across the connected Rootr (루터) workspace. Use this to find relevant documents before reading or editing them.

rootr_comment_documentA

Add a comment to a Rootr (루터) document (optionally anchored to a block, or as a reply via parentId). Comments carry a user identity, so this requires an ACCOUNT key (PAT) — a workspace-scoped key (including remote-connector tokens) gets a 403; fall back to rootr_append in that case.

rootr_list_document_commentsA

List the comment threads on a Rootr (루터) document, optionally filtered to one block. Works with any key.

rootr_publish_documentA

Publish a Rootr (루터) document at a public read-only URL (rootr.io/p/{slug}) — outsiders can read it and propose git-style edit suggestions the owner can merge. Publishing is an owner-level action: it needs MANAGE permission, which workspace-scoped keys (including remote-connector tokens) do not carry — use an ACCOUNT key (PAT) of the owner, or ask the user to publish from the share dialog. Returns the slug/URL. Check rootr_document_public_status first; unpublish via rootr_set_document_public.

rootr_set_document_publicA

Update a published Rootr (루터) document's public settings — e.g. {"isPublic": false} to unpublish. Owner-level action (MANAGE): works with an account key (PAT), not with workspace-scoped/connector tokens.

rootr_document_public_statusA

Whether a Rootr (루터) document is published, and at which public slug/URL.

rootr_duplicate_nodeA

Deep-copy a Rootr (루터) node — a document or a whole folder tree — next to the original, or into another workspace the user can access (targetWorkspaceId). Returns the new root node.

rootr_workspacesA

List the Rootr (루터) workspaces the current API key can see. Works with either key type: with an account key (PAT) this lists all workspaces you belong to; a workspace key only sees the workspace it's scoped to. Use this to find a workspace id before calling other workspace-scoped tools.

rootr_scaffold_planA

Step 1 of scaffolding, ALWAYS call this first. Given a natural-language intent (e.g. "SRE 온콜 위키" or "sales CRM for a 5-person team"), Rootr's consultant returns a questionPolicy (ask the user MIN 3, up to 10 clarifying questions — this is not optional), the dimensions to cover, domain frameworks, and the buildingBlocks menu (DATABASE/DOCUMENT/SPREADSHEET/WHITEBOARD/FORM/ISSUE_TRACKER/FOLDER). You must then GENERATE your own questions from those frameworks, ask the user, and only design the tree AFTER their answers — every answer must visibly shape the result. Never build straight from a one-line intent. No workspace needed; create with rootr_create_workspace or rootr_scaffold_apply afterwards.

rootr_create_workspaceA

Create an entirely new Rootr (루터) workspace pre-populated with the given document tree. REQUIRES an account key (PAT) with the workspaces:create scope — a workspace-scoped key cannot do this. PRECONDITION: call rootr_scaffold_plan first and ask the user its 3-10 clarifying questions; design the tree from their answers. Build a real tool, not a pile of thin markdown files: mix DATABASE (board/timeline views, seed rows), SPREADSHEET (formulas), FORM, ISSUE_TRACKER and rich multi-section DOCUMENTs where they fit, and set an emoji icon on folders/databases/key documents. The tree shape follows the scaffold schema in llms.txt (max 200 nodes). AFTER creating: if your runtime can receive HTTP callbacks, offer the user to register a webhook on the new tree (rootr_create_webhook with scopeNodeId) so changes flow back to you — skip your own actorId to avoid self-triggering.

rootr_scaffold_applyA

Create the given document tree inside an existing Rootr (루터) workspace, optionally rooted under an existing path. Works with a workspace key (docs:write scope). PRECONDITION: call rootr_scaffold_plan first and ask the user its 3-10 clarifying questions; design the tree from their answers (same quality bar as rootr_create_workspace — real building blocks with icons/views/seed content, not thin markdown). AFTER creating: if your runtime can receive HTTP callbacks, offer a webhook on the new subtree (rootr_create_webhook with scopeNodeId) so changes flow back to you — skip your own actorId.

rootr_create_log_storeA

Create a new typed LOG store (a structured, queryable table-like node) in a Rootr (루터) workspace. Each field has a name/type; type is one of string|int|float|bool|datetime|json|enum|level|relation. Relation fields additionally need target (a node id to relate to) and optional many/relation flags. Use rootr_add_log_entries afterward to insert rows, and rootr_query_log_entries / rootr_log_stats to read them back.

rootr_update_log_fieldsA

Update the field schema of an existing LOG store. WARNING: this REPLACES THE ENTIRE FIELD SET — you must resend every field you want to keep, not just the ones you are changing/adding. Read the LOG store first (e.g. via rootr_read or a get-log call) to see its current fields before calling this.

rootr_add_log_entriesA

Append one or more entries (rows) to a LOG store. Each entry may carry ts, source, level, message, data (shaped per the store's field schema). This is additive — existing entries are untouched.

rootr_query_log_entriesA

Query/filter entries from a LOG store by time range, source, level, and/or anomaly flag. Use this to inspect recent activity or find anomalous entries before asking rootr_ask for root-cause analysis.

rootr_log_statsA

Compute aggregate statistics over a LOG store's entries, grouped by hour/day/source/level, with a metric of count/avg/max/min/sum (avg/max/min/sum require a numeric field). Useful for trend/volume questions without pulling raw entries.

rootr_askA

Ask a natural-language question against a Rootr (루터) workspace's knowledge graph (GraphRAG). Good for root-cause-analysis style questions ("why did X happen", "what changed before Y") that need to reason across linked documents and LOG anomalies rather than a single document. Requires the ask scope. Returns the answer text plus citations pointing at the source documents/quotes it drew from.

rootr_create_issue_trackerA

Create a new GitHub-style issue tracker document in a Rootr (루터) workspace. Returns the tracker with its id, plus its default labels/types — use rootr_create_issue afterward to add issues to it.

rootr_list_issuesA

List issues in a Rootr (루터) issue tracker, optionally filtered by state (OPEN/CLOSED/ALL), label id, type id, or a text query. Use rootr_get_issue for full details of one issue.

rootr_create_issueA

Create a new issue in a Rootr (루터) issue tracker. labels is an array of label ids, type is a type id (both from the tracker's custom type/label definitions — see rootr_read on the tracker or its metadata). parentIssueId nests this issue under another issue (sub-issue).

rootr_get_issueA

Fetch full details of a single Rootr (루터) issue by id.

rootr_update_issueA

Update arbitrary fields of a Rootr (루터) issue. To close an issue, set state to "CLOSED" and stateReason to one of completed | not_planned | duplicate.

rootr_comment_issueA

Add a comment to a Rootr (루터) issue within its tracker. Comments carry a user identity, so this requires an ACCOUNT key (PAT) as ROOTR_API_KEY — a workspace key gets a 403.

rootr_read_databaseA

Read a Rootr (루터) DATABASE node — its schema (properties with ids/types and select options) plus all rows (each with its rowId and values). ALWAYS call this before rootr_add_row / rootr_update_row so you know the exact property ids/names and, for board/kanban views, which select column holds the status. Only works on DATABASE nodes.

rootr_list_rowsA

List the rows of a Rootr (루터) DATABASE (id + values + position), without the schema. Use rootr_read_database instead when you also need the property/column definitions.

rootr_add_rowA

Append a row to a Rootr (루터) DATABASE. values maps property NAME (or id) → value. Value shapes by type: title/text/url/select/person → string; number → number; multi_select → string[]; checkbox → boolean; date → { start: "YYYY-MM-DD", end? }. A select value is the OPTION NAME. Call rootr_read_database first to learn the columns. Optionally set position to insert at an index.

rootr_update_rowA

Merge-patch ONE row of a Rootr (루터) DATABASE by rowId (get rowIds from rootr_read_database). values maps property NAME (or id) → new value; only the passed keys change, null clears a key, omitted keys are left unchanged. To MOVE a kanban card to another column, set its select/status property to the new option name. Optionally set position to reorder the row.

rootr_delete_rowA

Delete ONE row of a Rootr (루터) DATABASE by rowId (its linked page, if any, is moved to the trash). Verify the row via rootr_read_database first — do not guess rowIds.

rootr_list_webhooksA

List webhooks configured on a Rootr (루터) workspace. Secrets are not re-shown here (they only appear once, at creation time).

rootr_create_webhookA

Create a webhook on a Rootr (루터) workspace. Valid events: document.created, document.updated, document.moved, document.deleted, comment.created, extraction.completed, extraction.failed, log.anomaly.rca, scaffold.applied. Optionally scope it to a subtree (scopeNodeId, inherited by descendants) and/or a tag filter (filterTags). debounceSeconds coalesces bursts of events (server enforces a fixed trailing debounce with a cap). IMPORTANT: the response secret is shown ONLY ONCE, in this call's result — copy it now, it will not be shown again. LOOP GUARD: deliveries carry the actor as data.actorId ("apikey:" for API writes) — a consumer MUST skip deliveries caused by its own key before reacting, or an agent that writes on notification will trigger itself forever.

rootr_delete_webhookA

Delete a webhook from a Rootr (루터) workspace. This cannot be undone.

rootr_document_versionsA

List saved versions of a Rootr (루터) document, most recent first. Useful for seeing what changed and when, or to recover an older revision.

rootr_delete_nodeA

Delete a Rootr (루터) document or folder by moving it to the trash — this is recoverable, not a permanent delete. Use rootr_read/rootr_list first to confirm you have the right target.

rootr_crm_createA

Create a new CRM node in a Rootr (루터) workspace — companies, contacts, multi-pipeline deals (kanban), activities and tasks all live inside it. Optionally seed custom pipelines (name + ordered stages, each with an optional win probability/color) and/or custom company/contact/deal fields; sane defaults are used if omitted. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_getA

Fetch a Rootr (루터) CRM node: its pipelines (with stages), custom field definitions, config, entity counts, and your access level. Call this before rootr_crm_update or before creating deals so you know the exact pipeline/stage ids. Set includeSummary to also merge in rootr_crm_get's stage-value/forecast/win-rate summary in one call. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_updateA

Merge-patch a Rootr (루터) CRM node's pipelines, custom field definitions, config, or icon. Passing pipelines REPLACES the whole pipelines array — call rootr_crm_get first and resend any stages/pipelines you want to keep. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_list_companiesA

List/search companies in a Rootr (루터) CRM, optionally filtered by free-text query, owner, or tag, and sorted/paginated. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_upsert_companyA

Create a new company (omit companyId), update an existing one (pass companyId + the fields to change), or delete one (pass companyId and delete: true). custom holds values for the CRM's custom field definitions (see rootr_crm_get). Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_get_companyA

Fetch full detail of ONE Rootr (루터) CRM company: the company plus its contacts, deals, activities, and tasks. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_list_contactsA

List/search contacts in a Rootr (루터) CRM, filterable by free-text query, company, lifecycle stage (lead|mql|sql|opportunity|customer|evangelist), lead status (new|attempting|connected|open_deal|unqualified), owner, or tag. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_upsert_contactA

Create a new contact (omit contactId), update an existing one (pass contactId + fields to change), or delete one (pass contactId and delete: true). Setting email auto-links the contact to a matching company by domain, and leadScore is computed server-side automatically — do not try to set it yourself. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_get_contactA

Fetch full detail of ONE Rootr (루터) CRM contact by id. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_list_dealsB

List/search deals (kanban cards) in a Rootr (루터) CRM, filterable by query, pipeline, stage, status (open|won|lost|all), owner, company, contact, or tag. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_upsert_dealA

Create a new deal (omit dealId; defaults to the CRM's first pipeline if pipelineId is omitted), update an existing one (pass dealId + fields to change — set status to "won" or "lost" to close it, with wonLostReason, or "open" to reopen), or delete one (pass dealId and delete: true). To MOVE a deal between kanban stages, prefer rootr_crm_move_deal instead of patching stageId here. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_get_dealB

Fetch full detail of ONE Rootr (루터) CRM deal by id. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_move_dealA

Move a Rootr (루터) CRM deal to a different pipeline stage (kanban column), optionally into a different pipeline and/or a specific card position. Call rootr_crm_get first to learn the target stageId/pipelineId. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_log_activityA

Log an activity (note|call|email|meeting) on a Rootr (루터) CRM's timeline, attached to a contact, company, and/or deal. Use this to record outreach/history that shows up on the contact/company/deal detail view. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_list_activitiesB

List logged activities in a Rootr (루터) CRM, filterable by contact, company, deal, or activity type. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_upsert_taskA

Create a new follow-up task (omit taskId) or update an existing one (pass taskId + fields to change, e.g. set status to "done" to complete it) in a Rootr (루터) CRM, optionally attached to a contact, company, and/or deal. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_list_tasksA

List follow-up tasks in a Rootr (루터) CRM, filterable by status (open|done|all), assignee, due bucket (overdue|today|upcoming), contact, company, or deal. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_crm_importA

Bulk-import rows into a Rootr (루터) CRM as companies, contacts, or deals in one call (entity picks which, rows is an array of plain field objects matching that entity's create shape, e.g. the same fields as rootr_crm_upsert_company/_contact/_deal). Use this for migrating a spreadsheet/CSV of leads or accounts instead of calling the upsert tools one row at a time. Part of a Rootr (루터) CRM node: a full sales CRM (companies, contacts with lifecycle stages + auto lead-scoring, multi-pipeline deals/kanban, activity timeline, follow-up tasks), auto-linked into the knowledge graph.

rootr_create_presentationA

Create a new PRESENTATION node (a slide deck) in a Rootr (루터) workspace, optionally seeded with an initial theme and slides. Authoring guide: give each slide ONE assertion-style title (a claim, e.g. "Latency dropped 40% after the cache fix" — not a topic label like "Latency"), plus blocks[] (bullet-like {id, heading?, body?, icon?} items) and, where useful, a diagram ({type:"mermaid", code}) or images. Canvas is 16:9 (1280x720). Meaning must live in TEXT — title/blocks[].heading/blocks[].body/notes are what auto-connects into the knowledge graph; diagrams/code/html and the image pixels themselves are visual-only and are NOT indexed, so never put facts ONLY in a diagram or picture. Images: image is the single primary/background image (cover, section, full-bleed); images[] holds additional inserted images placed on the slide. Each image is {id?, src?, alt?, placement?, prompt?, x?, y?, w?, h?}. Set src to an uploaded file URL (upload via POST /v1/attachments/upload, then use /api/v1/attachments/{id}/raw), an https URL, or a data: URI — you cannot upload the file bytes through these MCP tools, only reference the resulting URL. To get a REAL image, call rootr_generate_image with an English prompt (say "no text"), then put the returned url into the slide image's src; rootr_remove_image_background cuts out an image's background. placement is a layout hint ("full"|"right"|"top"|...); x/y/w/h give freeform PPT-style placement in 1280x720 canvas coords. ALWAYS add an alt caption to every image — alt text is part of the graph text spine, so a captioned image connects into the knowledge graph while an uncaptioned one does not. Use kind to mark each slide's role: "cover" (deck title slide), "section" (chapter divider), "content" (body slide, the default), "closing" (last slide / call to action). Page numbers: "content" and "section" slides automatically show a page number that follows the slide order (it re-numbers itself when slides are reordered), so you do NOT set it yourself. "cover"/"closing" have none by design.

rootr_read_presentationA

Read a Rootr (루터) PRESENTATION node — its theme and full slides array. Read this before rootr_update_presentation / rootr_append_presentation_slides / rootr_reorder_presentation_slides so you know the current slide ids and content.

rootr_update_presentationA

Merge-patch a Rootr (루터) PRESENTATION: update theme and/or config, or REPLACE THE WHOLE slides array (if you pass slides, it replaces every existing slide — call rootr_read_presentation first and resend slides you want to keep, or use rootr_append_presentation_slides / rootr_update_presentation_slide instead for incremental changes). Authoring guide: give each slide ONE assertion-style title (a claim, e.g. "Latency dropped 40% after the cache fix" — not a topic label like "Latency"), plus blocks[] (bullet-like {id, heading?, body?, icon?} items) and, where useful, a diagram ({type:"mermaid", code}) or images. Canvas is 16:9 (1280x720). Meaning must live in TEXT — title/blocks[].heading/blocks[].body/notes are what auto-connects into the knowledge graph; diagrams/code/html and the image pixels themselves are visual-only and are NOT indexed, so never put facts ONLY in a diagram or picture. Images: image is the single primary/background image (cover, section, full-bleed); images[] holds additional inserted images placed on the slide. Each image is {id?, src?, alt?, placement?, prompt?, x?, y?, w?, h?}. Set src to an uploaded file URL (upload via POST /v1/attachments/upload, then use /api/v1/attachments/{id}/raw), an https URL, or a data: URI — you cannot upload the file bytes through these MCP tools, only reference the resulting URL. To get a REAL image, call rootr_generate_image with an English prompt (say "no text"), then put the returned url into the slide image's src; rootr_remove_image_background cuts out an image's background. placement is a layout hint ("full"|"right"|"top"|...); x/y/w/h give freeform PPT-style placement in 1280x720 canvas coords. ALWAYS add an alt caption to every image — alt text is part of the graph text spine, so a captioned image connects into the knowledge graph while an uncaptioned one does not. Use kind to mark each slide's role: "cover" (deck title slide), "section" (chapter divider), "content" (body slide, the default), "closing" (last slide / call to action). Page numbers: "content" and "section" slides automatically show a page number that follows the slide order (it re-numbers itself when slides are reordered), so you do NOT set it yourself. "cover"/"closing" have none by design.

rootr_append_presentation_slidesA

Append one or more slides to the END of a Rootr (루터) PRESENTATION, without touching existing slides. PREFER this over rootr_update_presentation when you are only adding new slides. Authoring guide: give each slide ONE assertion-style title (a claim, e.g. "Latency dropped 40% after the cache fix" — not a topic label like "Latency"), plus blocks[] (bullet-like {id, heading?, body?, icon?} items) and, where useful, a diagram ({type:"mermaid", code}) or images. Canvas is 16:9 (1280x720). Meaning must live in TEXT — title/blocks[].heading/blocks[].body/notes are what auto-connects into the knowledge graph; diagrams/code/html and the image pixels themselves are visual-only and are NOT indexed, so never put facts ONLY in a diagram or picture. Images: image is the single primary/background image (cover, section, full-bleed); images[] holds additional inserted images placed on the slide. Each image is {id?, src?, alt?, placement?, prompt?, x?, y?, w?, h?}. Set src to an uploaded file URL (upload via POST /v1/attachments/upload, then use /api/v1/attachments/{id}/raw), an https URL, or a data: URI — you cannot upload the file bytes through these MCP tools, only reference the resulting URL. To get a REAL image, call rootr_generate_image with an English prompt (say "no text"), then put the returned url into the slide image's src; rootr_remove_image_background cuts out an image's background. placement is a layout hint ("full"|"right"|"top"|...); x/y/w/h give freeform PPT-style placement in 1280x720 canvas coords. ALWAYS add an alt caption to every image — alt text is part of the graph text spine, so a captioned image connects into the knowledge graph while an uncaptioned one does not. Use kind to mark each slide's role: "cover" (deck title slide), "section" (chapter divider), "content" (body slide, the default), "closing" (last slide / call to action). Page numbers: "content" and "section" slides automatically show a page number that follows the slide order (it re-numbers itself when slides are reordered), so you do NOT set it yourself. "cover"/"closing" have none by design.

rootr_update_presentation_slideA

Merge-patch a single slide by slideId, without touching the rest of the deck. Good for a precise, targeted edit (e.g. rewrite one slide's title/blocks); use rootr_append_presentation_slides instead when you are only adding new slides. Call rootr_read_presentation first to get the exact slideId. Authoring guide: give each slide ONE assertion-style title (a claim, e.g. "Latency dropped 40% after the cache fix" — not a topic label like "Latency"), plus blocks[] (bullet-like {id, heading?, body?, icon?} items) and, where useful, a diagram ({type:"mermaid", code}) or images. Canvas is 16:9 (1280x720). Meaning must live in TEXT — title/blocks[].heading/blocks[].body/notes are what auto-connects into the knowledge graph; diagrams/code/html and the image pixels themselves are visual-only and are NOT indexed, so never put facts ONLY in a diagram or picture. Images: image is the single primary/background image (cover, section, full-bleed); images[] holds additional inserted images placed on the slide. Each image is {id?, src?, alt?, placement?, prompt?, x?, y?, w?, h?}. Set src to an uploaded file URL (upload via POST /v1/attachments/upload, then use /api/v1/attachments/{id}/raw), an https URL, or a data: URI — you cannot upload the file bytes through these MCP tools, only reference the resulting URL. To get a REAL image, call rootr_generate_image with an English prompt (say "no text"), then put the returned url into the slide image's src; rootr_remove_image_background cuts out an image's background. placement is a layout hint ("full"|"right"|"top"|...); x/y/w/h give freeform PPT-style placement in 1280x720 canvas coords. ALWAYS add an alt caption to every image — alt text is part of the graph text spine, so a captioned image connects into the knowledge graph while an uncaptioned one does not. Use kind to mark each slide's role: "cover" (deck title slide), "section" (chapter divider), "content" (body slide, the default), "closing" (last slide / call to action). Page numbers: "content" and "section" slides automatically show a page number that follows the slide order (it re-numbers itself when slides are reordered), so you do NOT set it yourself. "cover"/"closing" have none by design.

rootr_reorder_presentation_slidesA

Reorder a Rootr (루터) PRESENTATION's slides. order must be the FULL list of the deck's slide ids, in the new desired order — call rootr_read_presentation first to get the current ids.

rootr_generate_imageA

Generate an image from a text prompt with AI (Gemini) and store it as a workspace attachment. Use this when building a Rootr (루터) presentation so slides get real, on-brand visuals instead of empty image placeholders — generate the image, then put the returned url into a slide image's src via rootr_update_presentation_slide (image or images[]). Returns { id, url, filename, mimeType, size }. Prompt tips: describe a clean, flat, presentation-ready illustration; specify colors to match the deck theme; and say "no text" — baked-in text is not indexed and often renders wrong (put the meaning in the slide title/blocks instead, and always give the image an alt caption). Consumes AI credits.

rootr_remove_image_backgroundA

Remove the background of an existing Rootr (루터) workspace attachment (e.g. a generated or uploaded image) and store the result as a new transparent PNG. Pass the source attachment id; returns { id, url, ... } for the cut-out image, which you can then place on a slide. Useful for product shots / logos / subjects that should sit on the slide without a boxed background.

rootr_create_spreadsheetA

Create a new SPREADSHEET node (a grid with formulas) in a Rootr (루터) workspace. Use SPREADSHEET when content needs calculation (budgets, models, estimates) — for plain tracked lists use DATABASE instead. Defaults to a single empty "Sheet1" if no data is given. Cells are addressed A1-style ("A1", "B12", ...) in a sparse map: { "A1": { v: 42 }, "B1": { f: "=A1*2" } }. Set a cell to null to clear it. Read the sheet first (rootr_read_spreadsheet) so you know current dimensions and existing content before patching — patchCells only touches the keys you send, everything else is untouched.

rootr_read_spreadsheetA

Read a Rootr (루터) SPREADSHEET node — its sheets, each with a sparse cells map and dimensions. Call this before rootr_update_spreadsheet / rootr_patch_spreadsheet_cells so you know the current sheetIds and cell contents.

rootr_update_spreadsheetA

Merge-patch a Rootr (루터) SPREADSHEET: update config/icon, or REPLACE THE WHOLE sheets array (if you pass sheets, it replaces every existing sheet — call rootr_read_spreadsheet first and resend sheets you want to keep, or prefer rootr_create_sheet / rootr_patch_spreadsheet_cells for incremental changes).

rootr_create_sheetA

Add a new empty sheet (tab) to an existing Rootr (루터) SPREADSHEET, without touching other sheets.

rootr_update_sheetA

Merge-patch a single sheet's name/dimensions/row-col sizing by sheetId, without touching its cells. Call rootr_read_spreadsheet first to get the exact sheetId.

rootr_delete_sheetA

Delete one sheet (tab) from a Rootr (루터) SPREADSHEET by sheetId. Not recoverable — read first to confirm.

rootr_patch_spreadsheet_cellsA

Sparse-patch cells of ONE sheet in a Rootr (루터) SPREADSHEET, without touching the rest of the sheet. PREFER this over rootr_update_spreadsheet when you are only filling in / editing cell values or formulas. Cells are addressed A1-style ("A1", "B12", ...) in a sparse map: { "A1": { v: 42 }, "B1": { f: "=A1*2" } }. Set a cell to null to clear it. Read the sheet first (rootr_read_spreadsheet) so you know current dimensions and existing content before patching — patchCells only touches the keys you send, everything else is untouched.

rootr_create_whiteboardA

Create a new WHITEBOARD node (a freeform visual canvas) in a Rootr (루터) workspace, optionally seeded with an initial scene. Use WHITEBOARD for flow diagrams, brainstorming, journey maps — not for anything that needs typed/trackable rows (use DATABASE) or calculation (use SPREADSHEET). Authoring guide: a scene is { shapes: [{id,type,x,y,w,h,text?,style?}], edges: [{id,from,to,label?}] } — shapes are the nodes of a lightweight diagram (flow diagrams, brainstorming, journey maps), edges connect them by id. Meaning must live in shape/edge TEXT (text/label) — that is what gets indexed into the knowledge graph; x/y/w/h and style are visual-only layout. Read the board first (rootr_read_whiteboard) before updating so you know the existing shape ids edges refer to.

rootr_read_whiteboardA

Read a Rootr (루터) WHITEBOARD node — its full scene (shapes[] and edges[]). Call this before rootr_update_whiteboard so you know the current shape/edge ids and content.

rootr_update_whiteboardA

Merge-patch a Rootr (루터) WHITEBOARD: update config/icon, or REPLACE THE WHOLE scene (if you pass scene, it replaces every existing shape/edge — call rootr_read_whiteboard first and resend the shapes/edges you want to keep so you don't lose existing content). Authoring guide: a scene is { shapes: [{id,type,x,y,w,h,text?,style?}], edges: [{id,from,to,label?}] } — shapes are the nodes of a lightweight diagram (flow diagrams, brainstorming, journey maps), edges connect them by id. Meaning must live in shape/edge TEXT (text/label) — that is what gets indexed into the knowledge graph; x/y/w/h and style are visual-only layout. Read the board first (rootr_read_whiteboard) before updating so you know the existing shape ids edges refer to.

rootr_create_formA

Create a new FORM node (fillable intake) in a Rootr (루터) workspace, optionally seeded with field definitions. Use FORM for surveys/request queues collected from people outside the tree — set targetDatabaseId to also mirror each response into a DATABASE's rows. Fields are typed inputs shown to respondents: text | textarea | number | select | multi_select | checkbox | date; select/multi_select need options ({name,color}[]). Read the form first (rootr_read_form) before updating so you keep each field's id stable — response values are keyed by field id, so renaming/dropping an id orphans past responses' answers for that field.

rootr_read_formA

Read a Rootr (루터) FORM node — its field definitions, targetDatabaseId, and config. Call this before rootr_update_form so you keep existing field ids stable, or before rootr_list_form_responses to know which field ids the response values are keyed by.

rootr_update_formA

Merge-patch a Rootr (루터) FORM: if you pass fields, it REPLACES the whole fields array — call rootr_read_form first and resend fields you want to keep (with their existing ids) so past responses stay attributable. Pass targetDatabaseId: null to unlink the mirrored DATABASE. Fields are typed inputs shown to respondents: text | textarea | number | select | multi_select | checkbox | date; select/multi_select need options ({name,color}[]). Read the form first (rootr_read_form) before updating so you keep each field's id stable — response values are keyed by field id, so renaming/dropping an id orphans past responses' answers for that field.

rootr_list_form_responsesA

List all responses submitted to a Rootr (루터) FORM, most recent first. Each response has values keyed by field id — call rootr_read_form first to map ids to field names. This is what lets an AI analyze responses collected from a form.

rootr_submit_form_responseA

Submit one response to a Rootr (루터) FORM on behalf of the caller (authenticated submission, not the public/anonymous share-link flow). values is keyed by field id — call rootr_read_form first to get the exact field ids and types.

rootr_create_form_share_linkA

Issue a new public share link/token for a Rootr (루터) FORM so people outside the workspace can submit responses (via the /f/{token} page). The form's public-submit mode itself is controlled separately via rootr_update_form's config.publicSubmit ("off" | "login" | "anon").

rootr_list_form_share_linksA

List existing public share links/tokens issued for a Rootr (루터) FORM.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/gwmage/rootr-cli'

If you have feedback or need assistance with the MCP directory API, please join our Discord server