MCP App Store
by KeenEthics

Overview

Atlas Red is a workspace for structured mind maps. A map is a tree of topics, and every topic in a map shares the same author-defined fields — plain text, or typed ones like a select with its own options, a number or a date — so a map behaves like a small database you can see. Connect your account and you can create maps, read a single topic's neighbourhood without pulling in the whole map, add and reorganise topics, fill in typed fields, link topics across branches, and import or export maps as Markdown, OPML, YAML and other formats. Every change is saved to your account, and anything you do here can be undone — from this conversation or later in the app. The maps persist and stay yours: the same map opens in the Atlas Red web app on any device, on a visual canvas where you can rearrange it, colour it by one of its fields, attach images and share a read-only link.

Tools

add_node

ChatGPT
Add ONE child topic under an existing parent topic, optionally with notes, style and a pinned x/y position. Adding more than one? Use add_subtree — it takes flat siblings as readily as nested ones, in one call and one undo step.

add_subtree

ChatGPT
Bulk-insert topics under an existing one: several flat siblings, a whole nested subtree, or both — nesting is optional, so this is also the right tool for adding two plain topics side by side, in place of two add_node calls. Each topic takes a title and optional fields/notes/style/x/y, imageFrom to copy an existing topic's image, and children to go deeper. One call, one undo step. Max 500 topics, 20 levels.

create_map

ChatGPT
Create a new map with a root topic of the same title. Blank by default (titles only, no per-topic fields) — pass fieldSchema to give every node a set of writing fields, or templateId to start from a built-in template (list_templates): its fields AND its starter branches. Pass both to keep the template's branches while defining the fields yourself. Returns the map's url — give it to the user — and its first-level topics with ids.

delete_map

ChatGPT
Permanently delete a map and all its topics, links, images and share links. Irreversible.

delete_node

ChatGPT
Delete a topic and its entire subtree, including any cross-links touching it and any topic images in it. The root topic cannot be deleted.

export_map

ChatGPT
Export a map. json (default) is the canonical versioned document (schema v2, same as the web UI export); the others are the same text renditions the web export offers. Fidelity — json: lossless — the full document: notes, fields, cross-links, styles, positions, images; md: structure + notes + fields (as "Label: value" lines); txt: structure (titles) only; TSV import columns become fields; opml: structure + notes + fields (in the _note attribute); xmindmark: structure + cross-links (XMind relationship markers); notes and fields are dropped. Node image binaries are NOT embedded over MCP (multi-MB base64 blobs break tool results) — download the JSON export from the web UI for a document with images. The interactive web-page (html) and OpenDeck (deck) renditions are web/REST only.

extract_subtree

ChatGPT
Extract a topic's branch into a brand-new map. The topic itself stays behind in the source map as a stub — keeping its id, fields, notes and cross-links to topics outside the branch — and gains a link to the new map (linkMapId on update_node manages such links directly). Its descendants move: they become the new map's content, images and kept sources included, and cross-links entirely inside the branch move with them; cross-links from the branch to outside topics are removed. One undo step in the source map restores the branch; undo never deletes the new map. The root topic cannot be extracted (that is what duplicating the map is for), nor can a topic without children.

get_context

ChatGPT
The context around ONE topic instead of the whole map — use this, not get_map, whenever you are working on a single topic. Returns the map's field schema, the ancestor path from the root (what tells "Scale" under Pricing apart from "Scale" under Infrastructure), the topic itself in full, its siblings and direct children as titles (what already exists next door and below, so you do not propose a duplicate), and any cross-linked topics with their own paths and link ids. Name the topic by id or by title — an exact title wins, then a title that STARTS with what you gave, then a substring. A name that still fits several topics is answered, not refused: you get { candidates: [{id, title, path}], hint } in place of the context, so call again with the id you meant. The topic's style comes back whole because update_node REPLACES style — send it back with your change or you will drop its colour. Typically 20-50x smaller than get_map. Call get_map only for genuinely map-wide work: restructuring, dedupe across branches, or finding contradictions. The result's addChildren.parentId is the id to pass to add_subtree/add_node to add topics UNDER this one.

get_image

ChatGPT
Read the image attached to a topic. Small images come back as an MCP image content block (your client decodes it — no base64 in your context); larger ones return a one-time download URL to fetch with curl. Pass as:"url" if you want the file on disk regardless of size, or as:"inline" to force the content block.

get_map

ChatGPT
Fetch a full map: title, field schema, every topic (flat list; parentId links form the tree, root has parentId null; topics carry x/y, notes, style and image metadata when set) and the map's cross-links. This is the WHOLE map and it grows without bound — a 129-topic map is about 185,000 characters. For anything about a single topic call get_context instead; for an overview of a large map, export_map with format "txt" is the outline at 3% of the size.

import_map

ChatGPT
Import a document as a brand-new map. format json (default): document is a previously exported map document — schema v2 (with optional per-topic x/y, notes, style, image and map-level links) or v1 (a v2 document with no optionals). format md/txt/opml/yaml/mm/xmindmark: document is the raw text in that format (md: heading = map title, bullets = topics, continuation lines = notes; txt: tab/space-indented outline, titles only; opml: text/_note attributes; yaml: {title, fields, children} structure; mm: FreeMind/Freeplane XML; xmindmark: first line = central topic, "- " bullets = topics, trailing [n]/[^n](label) relationship markers = cross-links) — same conversion as the web import and POST /maps/import?format=. Fidelity — json: lossless — the full document: notes, fields, cross-links, styles, positions, images; md: structure + notes + fields (as "Label: value" lines); txt: structure (titles) only; TSV import columns become fields; opml: structure + notes + fields (in the _note attribute); yaml: structure + fields ({title, fields, children}); mm: structure + notes + cross-links (FreeMind/Freeplane XML; import only); xmindmark: structure + cross-links (XMind relationship markers); notes and fields are dropped. Returns the new map's url — give it to the user — and its first-level topics with ids.

list_maps

ChatGPT
List all of the user's mind maps with ids, titles, urls, topic counts and timestamps.

list_templates

ChatGPT
List the built-in map templates. Each has fields (the per-topic writing fields it sets up — a plain label, or a typed { label, type, options } entry: select with coloured options, number, date), may declare colorField (the "Style by" lens a map created from it opens with) and may have starter branches — top-level nodes, with their colour and emoji, created with the map. Pass a template id to create_map to start from it, or to update_schema to move an existing map onto its fields.

redo

ChatGPT
Redo the most recently undone change to a map.

remove_image

ChatGPT
Remove the image attached to a topic. Idempotent: returns removed:false when the topic has no image. Undoable like other edits.

rename_map

ChatGPT
Change a map title.

replace_subtree

ChatGPT
Swap everything under a topic for a new subtree, atomically — ONE undo step. Optionally rewrite the topic itself (title/notes/fields), and fold other topics into it (absorbIds: their subtrees are removed in the same step). This is the structural half of the app's AI restructure commands: you write the new subtree yourself from what get_map already gave you, so no model is called and no credits are spent. Every replaced topic gets a new id, so cross-links whose endpoints were inside the replaced branch are dropped. The topic named by nodeId keeps its id, its position, its image and its inbound links. Max 500 topics, 20 levels.

reply_feedback

ChatGPT
Add a follow-up to feedback this account already sent — answer a question from the Atlas Red team, add details, or report the outcome of a test — so it lands on that ticket instead of opening a new one. The ticket number (ATLAS-123) is in the reply email and in the send_feedback result. Not for map content.

send_feedback

ChatGPT
Send feedback about Atlas Red itself — a bug report, an idea, or anything else — to the people building it. The submission lands in the same triage queue as the in-app Feedback panel; replies and status changes appear there (and by email for the big moments). Returns the ticket number (ATLAS-123) — to add to it later, use reply_feedback rather than sending it again. Not for map content.

set_image

ChatGPT
Attach (or replace) an image on a topic. Returns a one-time upload URL — POST the raw file bytes to it (e.g. with curl). Never try to pass image bytes through a tool call: base64 costs ~1 token per character, so even a small photo stalls for minutes. Replaces any existing image; undoable like other edits.

set_map_settings

ChatGPT
Set a map's layout, its card-text field, its colour-by field and/or whether it is favourited. Layout, cardField and colorField apply on devices that have not opened the map yet — a device that already picked keeps its own choice. Pass only what you want to change.

undo

ChatGPT
Undo the most recent change to a map (shared 50-step history across web UI and MCP).

update_node

ChatGPT
Update a topic: title, field values, parent (re-parent), sort order (reorder among siblings), notes, style, pinned x/y position and/or linked map. Fields are merged key-by-key, keyed by the fieldSchema key (not its label); pass an empty string to clear one. A name that is no field of the map is refused, and so is a select value outside ITS OWN options (get_context or get_map returns them; matched ignoring case). Pass notes: "" to clear notes, style: null to clear the style, x/y: null to unpin, linkMapId: null to unlink the map.

update_schema

ChatGPT
Replace a map's field schema — the author-defined per-topic fields shared by every topic. Full replacement (max 20 fields); pass [] for a map with no per-topic fields. Without mapping, values stored under keys that leave the schema are kept but no longer shown. With mapping, every topic's data is migrated (undoable as one step): each {from, to} entry appends the old field's content to the new field — several entries may target the same field to merge them sequentially in array order — and old-schema fields without an entry keep their value when their key survives, or are dropped otherwise. Give either fieldSchema or templateId to move the map onto a built-in template's fields. The map's "Style by" lens is deliberately NOT changed here (nor applied from a template) — after typing a field as select, activate it with set_map_settings {colorField}.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

27

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily