Ainote

io.github.seunghan91Published by GitHub account seunghan91v1.3.2Updated Oct 25, 2026

Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.

Overview

AI-generated overview

Ainote gives an assistant access to a personal knowledge workspace: notes, tasks, dev docs, projects, vaults, sync, handoffs and agent memory.

What you can do
Search, read and list notes/papers, dev docs, tasks and task categories, and read agent memory by get or search. Create and update tasks, dev docs, projects and assumptions, and soft-delete tasks and dev docs. Submit evidence for human judgment and list your own judgments and their blocking status. Read and write knowledge-graph nodes, and soft-delete graph nodes. Work with vaults and sync: list, pull, diff, merge, push single or batched markdown files, and delete vault files. Manage env-sync devices, drift, transactions, and push, pull or rotate client-encrypted secrets. Save and read session handoffs, and fetch setup instructions for MCP clients.
When to use it
Useful when you want an assistant to work inside an existing Ainote workspace: finding your own notes, tracking tasks and dev docs, keeping project assumptions and judgments, syncing markdown vaults across machines, or carrying context between sessions via handoffs and memory.
Requirements
Runs as a remote endpoint or as a local npm package over stdio. Authentication is required: a 64-character MCP key supplied as the AINOTE_API_KEY environment variable or an Authorization header. A key can be issued via the package's signup command, the signup tool, or the web app settings. Vault creation needs a completed GitHub App install.
Before you install
The key is a secret credential; keep it out of logs and shared configs. Many tools write, push, delete or rotate data: tasks and dev docs are soft-deleted (recoverable for a limited window), vault deletes are permanent for protected paths unless a base_sha or force flag is given, and secret rotation soft-deletes the old node. Secret tools handle client-encrypted ciphertext only, but recipients must include the pushing device's own key. Judgment decisions cannot be set by the assistant; only a 人.

Installation

In SourceWeft

  1. Open Ainote in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.seunghan91%2Fainote/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "ainote": {
      "type": "http",
      "url": "https://api.ainote.dev/api/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

This repository has no README.

Tools

34

delete_task

Delete task

Soft-delete a task by ID. Destructive but reversible within 30 days (TaskCleanupJob purges trash daily at 2am KST). Returns 404 if the task does not exist or is not owned by the authenticated user.

Parametersidrequired

list_papers

Search notes

List notes/papers from AI Note. Supports keyword search across title and content, category filtering, pagination, and sorting. Returns id/title/content_preview/category_id/created_at. Use this when the user asks 'find my note about X', 'what did I write on Y', or wants to search their knowledge base.

Parameterslimitoffsetsearchsort_bysort_ordercategory_idsource_typepaper_category_id

project_read

Read projects

List the authenticated user's projects (L2 intent layer), or fetch one by id. Each entry includes riskiest_assumption — the single highest-priority unverified assumption (or, if all are verified, the highest-criticality one).

Parametersidstatus

project_write

Create or update project

Create or update a project (L2 intent layer). Omit `id` to create, pass it to update. There is no delete tool — use status: 'archived' to retire a project.

Parametersidnameintentstatussuccess_criteria

assumption_write

Create or update assumption

Create or update an assumption under a project (L2 intent layer). Omit `id` to create, pass it to update. There is no delete tool. 🔴 `verdict` is REJECTED with an error if passed — verdict is confirmed only through a human judgment decision (see judgment_submit). This tool can only shape the assumption itself: what is being assumed, how critical it is, and what evidence would settle it.

Parametersidbmc_blockstatementproject_idrequiredcriticalityevidence_condition

judgment_submit

Request human judgment

Request a human judgment (L3 layer) by attaching evidence — approval, evidence, or verdict. This is the ONLY door an agent has into the judgment queue. 🔴 `decision` is REJECTED with an error if passed — judgments are always created with decision='pending'. Only a human decides them (from the /command queue). Use judgment_list afterwards to check whether this judgment has since been decided. risk_tier controls urgency: 1=destructive (blocks execution until decided), 2=reversible (may auto-proceed after a wait window), 3=informational (auto-expires after 24h).

Parameterskindrequiredsummaryrequiredevidencerisk_tierproject_idsubject_idsubject_type

judgment_list

List judgments

List the authenticated user's own judgments (L3 layer) — use this to check your own blocking status (risk_tier 1 pending = execution blocked). Default order matches the /command queue: risk_tier ascending, then arrival order.

Parameterskindlimitdecisionrisk_tierproject_idsubject_idsubject_type

delete_dev_doc

Delete dev doc

Soft-delete a dev document by title or UUID. Reversible from trash. Pass `category` when multiple docs share the same title across subcategories (memory/claude/cursor/env/docs).

Parametersidtitlecategory

get_setup_guide

Get setup guide

Get instructions for setting up AI Note MCP in Claude Desktop, Cursor, or other MCP clients. No authentication required.

Takes no parameters.

vault_create

Create vault on GitHub

Create a new private vault as a GitHub repository under the user's account. Requires the user to have completed the GitHub App install flow first.

Parametersnamerequiredslugdescription

vault_sync

Sync vault files

Wrapper around vault file sync. action=list|pull|push to work against the primary vault. list/pull are paginated — narrow with `path`/`since` and follow `next_cursor` instead of pulling the whole vault. To fetch specific files, pull with `paths` (up to 100 exact paths, one call). For push: WAF-bypass via `content_b64` or `content: '__B64__:...'` prefix (mirrors sync_push).

Parameterspathlimitpathssinceactioncursorcontentcontent_b64

sync_push

Push file to vault

Push a markdown file into the primary vault. Optional CAS via base_sha to detect concurrent multi-PC writes (Layer 3 of multi-PC sync plan). WAF-bypass tip: large bodies (~10KB+) that get false-positive blocked at Cloudflare can be sent via `content_b64` (base64-encoded) OR `content` prefixed with `__B64__:` instead. When the push CREATES a new .md file, the response may carry `dedup_candidates` — existing memory files that look similar (keyword + title similarity, no LLM). It is an advisory, not a rejection: YOU decide to merge into one of them (re-push that path), drop this write as a duplicate (skip), or keep it as a new memory (store).

Parameterspathrequiredforcecontentbase_shadevice_idcontent_b64supports_supersededresolves_conflict_id

sync_push_batch

Push files to vault (batch)

Push MANY files into the primary vault in ONE call. Use this instead of looping sync_push whenever you have more than a couple of changed paths — the cost of sync_push is round trips, not bytes. Per-item semantics are identical to sync_push (Layer 3 base_sha CAS, superseded contract, content_b64 WAF fallback). Partial success is normal and returns HTTP 200: read `results[]` and match entries by `path`, NOT by position. A conflict result always carries `remote_sha` + `conflict_reason` so you can go straight to sync_merge. Request-level failures (duplicate paths in one batch, idempotency key reused with a different payload, >200 items, >4MB) return 4xx and apply NOTHING. Each item MUST carry `content_sha` (SHA1 hex of the decoded body, same algorithm as git_sha) — it powers both the integrity check and the retry-safe `skipped_identical` result. Newly created .md items may carry `dedup_candidates` (same merge/skip/store advisory as sync_push); a batch creating more than 10 new files skips the check entirely and reports `dedup_skipped: "bulk"`.

Parametersitemsrequireddevice_ididempotency_keyrequiredsupports_superseded

sync_delete

Delete file from vault

Delete a file from the primary vault. Optional CAS via base_sha to detect concurrent multi-PC writes. Protected paths (global/memory/, global/skills/, global/planning/, global/intent/, global/claude-config/, handoffs/) require base_sha or explicit force:true (audited). Idempotent: deleting a non-existent path returns success with deleted:false.

Parameterspathrequiredforcebase_shadevice_id

sync_audit_layer5

Record sync review result

Record the result of a client-side Layer 5 codex review (sync.py merge gate) as a vault_events row. Body of the review is NOT stored — only an HMAC digest of the summary so operators can correlate without exposing review content. Opt-in: server skips writes (still returns success) unless ENV['AINOTE_LAYER5_AUDIT']='on' AND a versioned HMAC secret is configured. Used by the sync.py SessionStart hook + merge command to surface 'why was this blocked?' across multi-PC sessions.

Parameterspathrequiredsummaryverdictrequiredchunk_countduration_ms

handoff_save

Save session handoff

Save a session handoff note for cross-device / cross-session continuation. Stored at handoffs/{project}-{topic}-{YYYY-MM-DD}.txt in the user's primary vault. Use the optional `time` param (HHMM, KST) to disambiguate multiple handoffs saved on the same day — it is appended to the topic slug (e.g. topic='phase-d', time='1555' → handoffs/{project}-phase-d-1555-{date}.txt).

Parametersdatetimetopicrequiredcontentprojectrequireddevice_idcontent_b64

graph_soft_delete

Delete graph entity

Soft-delete an env_sync graph node (sets deleted_at; .live scope hides it from reads). Idempotent — re-deleting a deleted node is a no-op success.

Parametersnode_idrequireddevice_idrequiredclient_hlc

env_sync.secret_push

Push encrypted secret

Push a new client-encrypted secret. Ciphertext only — server never sees plaintext. Recipients must include the pushing device's own pubkey.

Parameterskindrequiredaliasrequireddevice_idrequiredclient_hlcrecipientsrequiredciphertext_b64required

env_sync.secret_pull

Pull encrypted secret

Pull an encrypted secret blob. Response is ciphertext_b64 only — server never sees and never returns plaintext.

Parametersaliasnode_iddevice_id

env_sync.secret_rotate

Rotate encrypted secret

Rotate a secret: soft-delete the old node, create a new live node with the same alias and the new ciphertext+recipients. 7-day grace before hard delete of old ciphertext bytes.

Parametersnode_idrequireddevice_idrequiredclient_hlcnew_recipientsrequirednew_ciphertext_b64required

env_sync_txn_push

Apply env sync changes

Ingest a batched envelope of client-recorded env_sync mutations. HLC-skew gated, partial-success on conflict.

Parametersdevice_idoperationsrequired

env_sync_txn_rollback

Roll back env sync change

Inverse-apply a prior env_sync transaction. Safety gates: ownership, idempotency, descendant-conflict (force opt-out).

Parametersforcetxn_idrequireddevice_idinclude_descendants

tasks_read

Read tasks

Read tasks and task categories. action: tasks | categories (consolidated surface — same handlers as the legacy tools)

Parameterslimitactionrequiredoffsetsearchstatusoverduesort_bylocationdue_todaysort_ordercategory_iddue_date_end+7 more

task_write

Create or update task

Create or update a task. action: create | update. Deletion is a separate tool (delete_task). (consolidated surface — same handlers as the legacy tools) Required per action — create: content | update: id.

Parametersidnotesactionrequiredcontentdue_datedue_timelocationis_all_daystart_datecategory_idrepeat_ruletravel_time+7 more

dev_docs_read

Read dev docs

Read dev docs. action: get | list | categories | pull (consolidated surface — same handlers as the legacy tools)

Parametersidtitleactionrequiredsearchcategorycontent_typeinclude_versions

dev_doc_write

Create or update dev doc

Create or update a dev doc. action: create | update. Deletion is a separate tool (delete_dev_doc). (consolidated surface — same handlers as the legacy tools) Required per action — create: title, content | update: content.

Parametersidmodetitleactionrequiredcontentcategorylocal_pathmemory_typecontent_type

sync_read

Read vault sync state

Read-only vault sync operations. action: list | pull | diff | merge | conflicts. Writes (push/delete) are separate tools — they carry CAS semantics. (consolidated surface — same handlers as the legacy tools) Required per action — diff: path | merge: path, base_text, local_text.

Parameterspathlimitpathssinceactionrequiredcursorbase_shabase_textdevice_idlocal_text

vault_read

Read vault info

Read vault metadata. action: list | clone | status (consolidated surface — same handlers as the legacy tools) Required per action — clone: name.

Parametersnameactionrequiredtarget_pathinclude_commit_sha

env_sync_read

Read env sync state

Read env-sync state. action: devices | drift | status | txn_pull. Secret reads are a separate tool (env_sync.secret_pull). (consolidated surface — same handlers as the legacy tools)

Parametersoplimitactionrequiredcursordevice_idsince_hlcinclude_stale

env_sync_write

Enroll device or request share

Non-destructive env-sync writes. action: enroll | request_share | heartbeat. Secret push/rotate are separate tools. (consolidated surface — same handlers as the legacy tools) Required per action — enroll: alias, age_pubkey, enrollment_token | request_share: target_device_id, secret_shares, device_id | heartbeat: device_id, installed_skills_hash, installed_hooks_hash.

Parametersosaliasactionrequireddevice_idage_pubkeyclient_hlccapabilitiessecret_sharesinstalled_hooksenrollment_tokeninstalled_skillstarget_device_id+4 more

graph_read

Read knowledge graph

Read knowledge-graph nodes. action: get | list (consolidated surface — same handlers as the legacy tools)

Parametersaliaslimitactionrequiredcursornode_iddevice_idnode_typeupdated_since_hlc

graph_write

Add or update graph entity

Add or update a graph entity. action: add | update. Deletion is a separate tool (graph_soft_delete). (consolidated surface — same handlers as the legacy tools) Required per action — add: node_type, alias, payload, device_id | update: node_id, device_id, field_updates.

Parametersaliasactionrequirednode_idpayloaddevice_idnode_typeclient_hlcfield_updates

handoff_read

Read session handoffs

Read session handoffs. action: get | list (consolidated surface — same handlers as the legacy tools) Required per action — get: project, topic.

Parametersdatetagstimelimitsincetopicactionrequiredstatusprojecttask_typehas_blockers

memory_read

Read agent memory

Read agent memory. action: get | search (consolidated surface — same handlers as the legacy tools) Required per action — get: source | search: query.

Parametersidhopmodepathlimitqueryactionrequiredsourcesources

Version history

1
  1. v1.3.2LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.