Ainote

io.github.seunghan91由 GitHub 帳號 seunghan91 發布v1.3.2更新於 Oct 25, 2026

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

已驗證Streamable HTTP可網頁執行效率與工作流檔案與儲存知識與記憶

概覽

AI 產生的概覽

Ainote 讓助理存取個人知識工作區:筆記、任務、開發文件、專案、儲存庫、同步、交接記錄與助理記憶。

可以做什麼
搜尋、讀取與列出筆記/論文、開發文件、任務及任務分類,並以 get 或 search 讀取助理記憶。建立與更新任務、開發文件、專案與假設,並軟刪除任務和開發文件。提交證據以請求人工判斷,列出自己的判斷及其阻塞狀態。讀取與寫入知識圖譜節點,並軟刪除圖譜節點。操作儲存庫與同步:列出、拉取、比較、合併、推送單一或批次 Markdown 檔案,以及刪除儲存庫檔案。管理環境同步的裝置、漂移與交易,並推送、拉取或輪換用戶端加密的密鑰。儲存與讀取工作階段交接記錄,並取得 MCP 用戶端設定說明。
適用情境
適合讓助理在既有的 Ainote 工作區內工作:尋找自己的筆記、追蹤任務與開發文件、維護專案假設與判斷、在多台機器間同步 Markdown 儲存庫,或透過交接記錄和記憶在工作階段之間延續脈絡。
執行需求
可作為遠端端點執行,也可作為本機 npm 套件透過 stdio 執行。必須驗證:64 字元 MCP 密鑰,透過 AINOTE_API_KEY 環境變數或 Authorization 標頭提供。密鑰可透過該套件的註冊指令、註冊工具或網頁應用程式設定取得。建立儲存庫需先完成 GitHub App 安裝流程。
安裝前請注意
此密鑰是機密憑證,應避免出現在日誌和共用設定中。許多工具會寫入、推送、刪除或輪換資料:任務和開發文件為軟刪除(有限期間內可復原),受保護路徑的儲存庫刪除除非提供 base_sha 或 force 否則不可逆,密鑰輪換會軟刪除舊節點。密鑰工具只處理用戶端加密後的密文,但接收方必須包含推送裝置自身的公鑰。判斷結論不能由助理設定,只能由人工決定。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Ainote,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.seunghan91%2Fainote/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

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

README

該儲存庫沒有 README。

工具

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.

輸入參數id必填

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.

輸入參數limitoffsetsearchsort_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).

輸入參數idstatus

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.

輸入參數idnameintentstatussuccess_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.

輸入參數idbmc_blockstatementproject_id必填criticalityevidence_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).

輸入參數kind必填summary必填evidencerisk_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.

輸入參數kindlimitdecisionrisk_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).

輸入參數idtitlecategory

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.

無需輸入參數。

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.

輸入參數name必填slugdescription

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).

輸入參數pathlimitpathssinceactioncursorcontentcontent_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).

輸入參數path必填forcecontentbase_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"`.

輸入參數items必填device_ididempotency_key必填supports_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.

輸入參數path必填forcebase_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.

輸入參數path必填summaryverdict必填chunk_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).

輸入參數datetimetopic必填contentproject必填device_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.

輸入參數node_id必填device_id必填client_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.

輸入參數kind必填alias必填device_id必填client_hlcrecipients必填ciphertext_b64必填

env_sync.secret_pull

Pull encrypted secret

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

輸入參數aliasnode_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.

輸入參數node_id必填device_id必填client_hlcnew_recipients必填new_ciphertext_b64必填

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.

輸入參數device_idoperations必填

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).

輸入參數forcetxn_id必填device_idinclude_descendants

tasks_read

Read tasks

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

輸入參數limitaction必填offsetsearchstatusoverduesort_bylocationdue_todaysort_ordercategory_iddue_date_end另有 7 個

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.

輸入參數idnotesaction必填contentdue_datedue_timelocationis_all_daystart_datecategory_idrepeat_ruletravel_time另有 7 個

dev_docs_read

Read dev docs

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

輸入參數idtitleaction必填searchcategorycontent_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.

輸入參數idmodetitleaction必填contentcategorylocal_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.

輸入參數pathlimitpathssinceaction必填cursorbase_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.

輸入參數nameaction必填target_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)

輸入參數oplimitaction必填cursordevice_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.

輸入參數osaliasaction必填device_idage_pubkeyclient_hlccapabilitiessecret_sharesinstalled_hooksenrollment_tokeninstalled_skillstarget_device_id另有 4 個

graph_read

Read knowledge graph

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

輸入參數aliaslimitaction必填cursornode_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.

輸入參數aliasaction必填node_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.

輸入參數datetagstimelimitsincetopicaction必填statusprojecttask_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.

輸入參數idhopmodepathlimitqueryaction必填sourcesources

版本歷史

1
  1. v1.3.2最新Sep 16, 2026

評分

已滿足適用檢查項的 75%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分

    請宣告包含 README 的 GitHub 儲存庫,或在 OAuth 受保護資源後設資料中提供 resource_documentation。

  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。