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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
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