Stele provides shared, persistent project memory for AI coding agents, storing linked decisions, lessons, risks, and tasks in a knowledge graph. Agents can search project context, coordinate task ownership, track handoffs, and maintain up-to-date knowledge across sessions and coding tools.
Encrypted at rest, isolated from the model
Resolved from an AES-256-GCM vault at the moment of the call and attached to the request — the model never sees the secrets.
Try asking
One-call semantic + full-text recall over the graph — a ranked bundle of the decisions, tasks, risks, and documents most relevant to a question or topic. The default way to load context before acting; reach for `search` only for an exact-term or document-scoped lookup.
Find nodes or documents by the words they contain. Nothing here matches by meaning, so use `recall` for a natural-language question. method "keyword" (default): ranked full-text search over active nodes; terms are AND-combined, and a multi-word query that matches nothing is retried once as an OR of its words. It returns cards, not bodies (default limit 5). method "exact": the matching line per node for a literal substring, or a POSIX regex with regex:true, across every status including done and archived (default limit 50). scope "documents": a line search of document bodies, a literal substring or, with regex:true, a JavaScript regex; it ignores method and type, and limit caps the number of documents unless max_docs is set. Every hit carries id, title, and url; limit is at most 50, with no paging. Read a full body with `fetch`.
Fetch one node in full by its shareable id (TASK-N/KNOW-N/COMP-N/DOC-N/DIAG-N/EPIC-N/NODE-N), with its edges — this is how you read a full body (recall/search return summaries). Pass version to fetch a historical snapshot instead of the current one.
List tasks, most-recently-updated first, filterable by status, component, assignee, and kind — the roadmap/board view of work. It returns task cards without bodies unless include_body is true; read one task in full with `fetch`. In clients that display apps, the result also renders as a task board for the user, so summarize it rather than repeating every task.
List a collection: what = nodes | components | topics | documents | diagrams | objectives | workspaces | comments | node_versions | projects, with per-what filters. what:"projects" is the project-less bootstrap (discover your slugs). Most collections page with limit/offset; a few return everything up to limit with no further paging.
Look at what surrounds one node or the whole project: its connections, its history, and the project's state. Read-only. Use `fetch` for a node's own content, `search` to find nodes by their words, and `recall` to gather context for a question; use `inspect` when you need more than the node itself. Actions: context: a scored neighborhood of decisions, risks and tasks connected to a node, query or topic; read it before changing something it touches. provenance: the cited chain of why a node exists and what it superseded; check it before relying on or overriding a decision. briefing: the project's working rules, root components and suggested first calls; call it once at the start of a session. claim_history: who claimed and released a task, and when; check it before force-claiming a task that looks abandoned. workspace: one workspace overlay's details. stats: project totals, overdue commitments, likely-abandoned tasks and recent activity, in one call. loop: verify a task's protected check paths against local Git state; local only, and it fails closed. rag_status: what automatic topic recall is focused on now; local only.
Manage projects. action = create (bootstrap a new project and its root component, owned by you). This is the first thing to call when you have no project yet; discover existing ones with list what:"projects". New projects are private unless you pass visibility:"public"; plans allow a limited number of private projects and unlimited public ones.
Task lifecycle. action = create | claim | complete | release | reopen | force_release | loop_finalize. Claim before you start and complete when done — these route through the atomic claim path that records accountability; never flip a task's status by hand. loop_finalize keeps correctness, independent review, and intent/scope verdicts separate. Cancelling a task and force-claiming one live in the `destructive` tool.
Capture or curate knowledge. action = create (file a typed fact — decision, lesson, risk, …) | review (mark a node re-verified against current reality). create files one fact under a component; it requires a lifecycle choice (expires_on_task, expires_at, due_at — pass null to skip each), and durable decisions and architecture usually skip all three. Merging duplicate knowledge lives in the `destructive` tool.
Edit a node or its structure. action = update (edit fields/body) | move (re-file under a component or workspace) | link (add a typed edge between two nodes). Removing an edge (unlink) lives in the `destructive` tool.
Shape the roadmap. action = create | add_milestone | attach (task → milestone) | move (task → objective) | detach | reorder | set_target | achieve. Retiring an objective lives in the `destructive` tool.
Manage a workspace overlay. action = create | update. Hosted MCP is stateless, so checkout-local activate/deactivate actions are not exposed; promoting or archiving a workspace lives in the `destructive` tool.
Discuss on a node. action = add | update | resolve (mark a thread settled) | delete (soft tombstone; replies are preserved). Replies are one level deep: reply to a top-level comment only. Read a node's comments with list(what="comments").
Create long-form artifacts. action = create (a document — a plan, spec, or imported file) | create_diagram (a d2 diagram node). For create, pass the body inline or a repo-relative file_path for the server to read. file_path works only on a local connection; over a hosted connection pass the body inline. Recall and search surface a document by title only; read its body with `fetch`.
The project's Timeline: automatic events captured on graph writes and task lifecycle actions, plus one-line custom entries. action = list (read it, newest first, keyset-paginated — not offset-based) | log (append a one-line custom entry). A logged entry is a short journal line, never reasoning or decisions — link the graph nodes that hold those instead. Logging can be turned off for a project; when it is, the call still succeeds but writes nothing.
Housekeeping: change how the project is organized. It never edits a node's content; use `node`, `knowledge` or `task` for that. Actions: add_component: create a durable area of ownership that knowledge and tasks attach to; list the existing components first to avoid a duplicate. rename_topic: rename a topic tag on every node that carries it, for typos and casing. feedback: report how well the memory helped this conversation: a 0–10 score, one strength, one hindrance, one improvement. Automatic topic recall runs only where the memory runs locally, so it has no actions here; call `recall` with your question whenever you need context from the graph.
Operations that require extra caution or confirmation. dedupe_knowledge is a read-only candidate scan; the remaining actions are consequential. Action names carry their resource because this tool spans resources. action = cancel_task | force_claim_task | dedupe_knowledge | dedupe_pair | unlink | restore_node_version | retire_objective | merge_workspace | cherry_pick_workspace | archive_workspace | archive_component | merge_topics | run_loop_attempt | doctor. run_loop_attempt executes the exact declared shell command supplied in the approval arguments with a scrubbed environment when trusted local repository execution is available; hosted MCP fails closed.
Open the Stele app for the user: browse their projects, open tasks, recent activity, and search. Use it when the user wants to see or browse their project, not to answer a question.
Open the Stele project board beside this conversation, so the user can watch tasks while you work on them.
Show one Stele node (a task, knowledge entry, or document) to the user as a card in the conversation: its title, status, body, links, and provenance. Use it when the user wants to see a node. To read a node yourself, use fetch.
One endpoint, the same key, whichever client you use.
~/Library/Application Support/Claude/claude_desktop_config.json (Mac) · %APPDATA%\Claude\claude_desktop_config.json (Windows)
Replace API_KEY with your own key.
Already have an "mcpServers" section in your config? Just add the server entry inside it.
Discovery, routing, credentials, tool scoping and execution logs all happen at the gateway→connections stay ACTIVE with no work from you
Stele MCP runs through a gateway that holds the credentials, scopes the access and records every call.
Managed auth, hosted MCP servers, and every Gmail tool your agent needs.
Free to start.