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 分

    请在仓库或注册中心条目中声明许可证。