Rootr MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ROOTR_API_KEY | Yes | Rootr API key | |
| ROOTR_BASE_URL | No | https://rootr.io/api/v1 | |
| ROOTR_WORKSPACE | Yes | Workspace id |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| 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 |
| 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 |
| 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. |
| rootr_update_rowA | Merge-patch ONE row of a Rootr (루터) DATABASE by rowId (get rowIds from rootr_read_database). |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ( |
| 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: |
| 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 |
| 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: |
| 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: |
| rootr_reorder_presentation_slidesA | Reorder a Rootr (루터) PRESENTATION's slides. |
| 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 |
| 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 |
| rootr_read_spreadsheetA | Read a Rootr (루터) SPREADSHEET node — its sheets, each with a sparse |
| rootr_update_spreadsheetA | Merge-patch a Rootr (루터) SPREADSHEET: update config/icon, or REPLACE THE WHOLE sheets array (if you pass |
| 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 |
| 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 |
| 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 |
| 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 |
| rootr_update_formA | Merge-patch a Rootr (루터) FORM: if you pass |
| rootr_list_form_responsesA | List all responses submitted to a Rootr (루터) FORM, most recent first. Each response has |
| 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). |
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/gwmage/rootr-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server