{"name":"innernet","title":"innernet","version":"1.2.0","description":"AI-managed versioned context — the living memory layer your AI tools read from and write to.","apps":"MCP Apps (SEP-1865) — interactive views render inline in Claude, ChatGPT, and other compliant hosts.","icons":[{"src":"https://innernet.live/brand/mark-color.svg","mimeType":"image/svg+xml","sizes":["any"]},{"src":"https://innernet.live/brand/mark-512.png","mimeType":"image/png","sizes":["512x512"]}],"mcp_version":"2025-11-25","mcp_versions_supported":["2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"endpoint":"https://innernet.live/api/mcp","auth":{"method":"oauth2.1","how":"Add this URL to your MCP client; it opens a browser sign-in automatically on first use. No API key to copy.","protected_resource_metadata":"https://innernet.live/.well-known/oauth-protected-resource","authorization_server_metadata":"https://innernet.live/.well-known/oauth-authorization-server","api_key_fallback":"Authorization: Bearer <api_key> from https://innernet.live/account (CLI/scripts only)"},"agent_instructions":"If a user asks you to connect/install innernet, add this URL to their MCP client and let the OAuth browser sign-in run. Do NOT ask the user to paste an API key into the chat.","docs":{"install_guide":"https://innernet.live/docs/connect","getting_started":"https://innernet.live/docs/getting-started","llms_txt":"https://innernet.live/llms.txt"},"tools":[{"name":"innernet_list_projects","description":"List all your innernet context maps. Returns slug, name, type, tagline, and last-updated date for each project. Call this first to see what context maps exist."},{"name":"innernet_load_project","description":"Load a full context map by slug — all dimensions (full markdown), all nodes, recent commits, the project's capture_protocol, and a disclosure-gated slice of the user's Personal Memory. Use this when the conversation involves a project innernet tracks — its product, strategy, roadmap, branding, marketing, memory architecture, technical design, or previous decisions — before answering, so the answer builds on live context instead of assumptions. On a LARGE project, prefer innernet_context (pass the user's ask) — it returns only the relevant slice instead of the whole map."},{"name":"innernet_context","description":"The single retrieval door for a project — the one to prefer, especially on large maps. Pass the project slug and `intent` (the user's ask, verbatim) and innernet compiles a budgeted, tiered package instead of dumping the whole map: SPINE (identity + core + recent activity, always), FOCUS (full text of the sections that match the ask), PERIPHERY (a one-line summary of everything else + how to expand it), and retrieval_advice (innernet-recommended next reads). This is how innernet decides what you need rather than making you hunt for it. Expand any PERIPHERY ref with innernet_get_dimension."},{"name":"innernet_save_context","description":"Save project context to innernet. Creates a new project or updates an existing one. MERGES, never wipes: dimensions and nodes are upserted by key — entries you do not include are left untouched, and new keys are created. Updating an existing dimension replaces THAT dimension's body, so include its existing content plus your additions (load the project first). Each \"dimension\" is a named markdown document; each \"node\" is a structured entity (person, project, concept, decision, …). This is the primary way to persist knowledge from any AI session without any CLI or file setup."},{"name":"innernet_capture","description":"Capture a note, decision, insight, or piece of code mid-conversation. PREFERRED behaviour: omit project_slug and let the Concierge auto-route — it triages the content against your projects + Personal Memory and writes to whichever fits (project, self, both, or discards if it's noise). Only pass project_slug when you want to force a target."},{"name":"innernet_get_dimension","description":"Read the full markdown content of a single dimension from a project. Use when you only need one specific section rather than loading the entire project."},{"name":"innernet_get_capture_protocol","description":"Read the per-project capture protocol — the markdown instructions describing what kinds of context to save and how, for this project. Each project may have its own tailored protocol; if none is set, a sensible default for the project type is returned. Read this after innernet_load_project to align how you compact and save context."},{"name":"innernet_set_capture_protocol","description":"Replace the capture protocol for a project — the markdown instructions describing what to save and how. Use when the user asks you to update the protocol or when you and the user agree on a refined approach to capturing context for this project. Owner-only."},{"name":"innernet_list_branches","description":"List a project's branches with their status and fork-from commits."},{"name":"innernet_branch_new","description":"Fork a Context Map at its current head into a new branch. The branch gets its own overlay copy of all dimensions and nodes. Use when exploring a divergent direction without committing to it."},{"name":"innernet_branch_diff","description":"Show which dimensions and nodes differ between a branch and trunk. Returns added / modified / removed sets."},{"name":"innernet_branch_park","description":"Archive a branch without merging (status \"parked\"; overlay preserved for later revival). Pass park:false to revive a parked branch."},{"name":"innernet_branch_merge","description":"Fold a branch back into trunk: applies branch dimensions and nodes to trunk, marks branch merged, records a commit. MVP semantic: branch wins on conflicts."},{"name":"search","description":"Search for relevant context maps or projects by keyword (required for ChatGPT Deep Research)"},{"name":"fetch","description":"Fetch the full content of a context map by its ID (slug) (required for ChatGPT Deep Research)"},{"name":"innernet_handoff_read","description":"Read the project's handoff channel — the live \"where I left off\" stream. Call this at the start of a session and whenever the user asks to sync/resume, then SURFACE its contents back to the user in chat so they can pick up exactly where they left off. Pass history=true to also get the trail of previous handoffs (every write is kept — the stream is trackable, never destroyed)."},{"name":"innernet_handoff_write","description":"Replace the project's handoff channel document — the scratch \"where I left off\" stream (distinct from repo_state / project status). Keep the stable template header; rewrite the body with the current session's working context: what shipped, what is next, gotchas. Every write is also kept in the handoff history (readable via innernet_handoff_read history=true and on the dashboard), so nothing is ever lost."},{"name":"innernet_self_capture","description":"Capture something you learned about the USER themselves to their cross-project Personal Memory (the Self Map) — NOT to a project. Use for who they are: how they talk (voice), what they like/dislike (preferences), how/when they work (behavior, use_times), tools they swear by (tools), people in their life (relationships, kin), habits, hobbies, interests, influences, what haunts or inspires them, body/health (somatic), the words they use (lexicon). The Internet Agent triages and privacy-classifies on consolidation. Crosses every session, project, and tool."},{"name":"innernet_self_status","description":"Read a summary of the user's Personal Memory — total facts, pending captures, open questions, and breakdowns by dimension and disclosure class. Call this to understand what innernet already knows about the user before asking them anything."},{"name":"innernet_self_facts","description":"Read the user's Personal Memory facts, disclosure-filtered for the calling context. Returns atomic facts about the user (statement, dimension, confidence). Private facts are never returned over MCP. Use to personalise behaviour: tone, tools, working hours, preferences."},{"name":"innernet_self_sync","description":"Run the Internet Agent over the pending Personal Memory capture queue: triage each candidate, distil confident atomic facts, and route low-confidence ones to elicitations. Returns how many were consolidated. Ambient — safe to call at the end of a session."},{"name":"innernet_triage","description":"Hand a raw memory to the Internet Agent and let it decide where it belongs: personal memory, project memory, both, or discard — with disclosure class, value, and any cross-pollination bridge. Use when you are unsure whether something is about the user or about the project; the agent applies the Laws of Ambient Innernet and routes it."},{"name":"innernet_task_list","description":"List a project's structured task list — ordered by sequence then priority, grouped implicitly by status (Not started / In progress / Done). Adaptive columns (e.g. research_stage, env) appear in each task's `attributes`. Use this to see what's planned, in flight, and done for a project before adding or completing work."},{"name":"innernet_task_create","description":"Add a task to a project's list. Title is required; priority/status/description optional. Put adaptive fields (anything beyond the core columns — e.g. {\"research_stage\":\"gathering\"} or {\"env\":\"prod\"}) in `attributes`; the agent declares new columns on the project's task schema as needed. New tasks land at the end of the sequence."},{"name":"innernet_task_update","description":"Update a task by id — patch its status, priority, title, description, or adaptive attributes. Only the fields you pass change; attributes are merged. Use to move a task to \"In progress\" or revise its details."},{"name":"innernet_task_complete","description":"Mark a task Done. Use when work the task describes has shipped/finished — the rendered roadmap re-projects so the task moves to the Done group with no numbering gaps."},{"name":"innernet_task_reorder","description":"Set the sequence of a project's tasks to an explicit id order. Pass the task ids in the order you want them; sequence numbers are reassigned with gaps so future inserts don't churn neighbours."},{"name":"innernet_ambient","description":"Pause or resume innernet's ambient session behaviour (auto-maintaining a live artifact and syncing context as the session goes). Call with {on:false} to pause for this session, {on:true} to resume. Omit `on` to just read the current ambient state and recognised intention."},{"name":"innernet_artifact_start","description":"Begin a live artifact for a project — a single document innernet maintains and re-organizes as findings stream in during a research or build session. Use at the start of sustained research/analysis so subsequent findings fold into one coherent document."},{"name":"innernet_artifact_append","description":"Add a raw finding to the active artifact (fast). innernet folds it into the document and restructures the whole thing in the background once a few fragments accumulate. Append liberally — one finding per call is fine."},{"name":"innernet_artifact_status","description":"Report the active artifact for a project (title, summary, fragment/consolidation counts), or that there is none."},{"name":"innernet_artifact_stop","description":"Finalize an artifact — run a last fold and mark it done. Use when the research/build session producing it has concluded."},{"name":"innernet_artifact_list","description":"List a project's artifacts (live and done) with titles, summaries, and counts."},{"name":"innernet_artifact_read","description":"Read an artifact document in full. Defaults to the active artifact; pass artifact_id for a specific one."}]}