
Ainote
Exposes 26 tools over both MCP JSON-RPC and OpenAPI 3.1, so the same task/note/vault operations work in Claude, Cursor, ChatGPT Custom GPTs, and LangChain without maintaining separate integrations. Gives you list_tasks, create_dev_doc, vault_sync, and handoff_save/get for passing session context between agents or devices with HHMM timestamps. All tools carry four-hint annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to help autonomous agents avoid destructive calls. Backend sits on Render PostgreSQL plus user-owned GitHub repos for Obsidian-compatible markdown vaults. Reach for this when you want agents to manage todos, dev docs, or cross-session handoffs without building your own dual-protocol gateway.
- tools
- 35
- auth
- Secret needed
- transport
- STDIO, HTTP
- env var
- 1
- last updated
- May 14, 2026
Install
From registry metadata$ npx add-mcp https://api.ainote.dev/api/mcp --name ainote --header 'Authorization: Bearer ${API_TOKEN}'Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http ainote https://api.ainote.dev/api/mcp --header 'Authorization: YOUR_AUTHORIZATION'Run in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 35 toolsVerified live against the running server on Nov 6, 2026.
delete_taskSoft-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.1 params
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*stringlist_papersList 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 sear...8 params
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 sear...
category_idstringlimitnumberoffsetnumberpaper_category_idstringsearchstringsort_bystringcreated_at · updated_at · titlesort_orderstringasc · descsource_typestringproject_readList 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).2 params
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).
idstringstatusstringactive · paused · archivedproject_writeCreate 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.5 params
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.
idstringintentstringnamestringstatusstringactive · paused · archivedsuccess_criteriastringassumption_writeCreate 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 ca...6 params
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 ca...
bmc_blockstringkey_partners · key_activities · key_resources · value_propositions · customer_relationships · channelscriticalityinteger1 · 2 · 3evidence_conditionstringidstringproject_id*stringstatementstringjudgment_submitRequest 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 decide...7 params
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 decide...
evidenceobjectkind*stringapproval · evidence · verdictproject_idstringrisk_tierinteger1 · 2 · 3subject_idstringsubject_typestringAssumption · Tasksummary*stringjudgment_listList 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.7 params
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.
decisionstringpending · approved · rejected · deferred · superseded · expiredkindstringapproval · evidence · verdictlimitintegerproject_idstringrisk_tierinteger1 · 2 · 3subject_idstringsubject_typestringAssumption · Taskdelete_dev_docSoft-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).3 params
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).
categorystringidstringtitlestringget_setup_guideGet instructions for setting up AI Note MCP in Claude Desktop, Cursor, or other MCP clients. No authentication required.
Get instructions for setting up AI Note MCP in Claude Desktop, Cursor, or other MCP clients. No authentication required.
No parameters. Call it with no arguments.
vault_createCreate 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.3 params
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.
descriptionstringname*stringslugstringvault_syncWrapper 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 cal...8 params
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 cal...
actionstringlist · pull · pushcontentstringcontent_b64stringcursorstringlimitintegerpathstringpathsarraysincestringsync_pushPush 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 `c...8 params
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 `c...
base_shastringcontentstringcontent_b64stringdevice_idstringforcebooleanpath*stringresolves_conflict_idstringsupports_supersededbooleansync_push_batchPush 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 co...4 params
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 co...
device_idstringidempotency_key*stringitems*arraysupports_supersededbooleansync_changesRead changes from the primary vault in sequence order, including deletions. Start with since_seq=0 for a full listing; then pass next_seq and feed_epoch on each page. Default limit 500, max 1000. On reset_required, discard the cursor and restart from 0 without an epoch. On fee...3 params
Read changes from the primary vault in sequence order, including deletions. Start with since_seq=0 for a full listing; then pass next_seq and feed_epoch on each page. Default limit 500, max 1000. On reset_required, discard the cursor and restart from 0 without an epoch. On fee...
feed_epochstringlimitintegersince_seqintegersync_deleteDelete 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). Idempot...4 params
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). Idempot...
base_shastringdevice_idstringforcebooleanpath*stringsync_audit_layer5Record 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 succ...5 params
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 succ...
chunk_countintegerduration_msintegerpath*stringsummarystringverdict*stringhandoff_saveSave 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 t...7 params
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 t...
contentstringcontent_b64stringdatestringdevice_idstringproject*stringtimestringtopic*stringgraph_soft_deleteSoft-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.3 params
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.
client_hlcstringdevice_id*stringnode_id*stringenv_sync.secret_pushPush a new client-encrypted secret. Ciphertext only — server never sees plaintext. Recipients must include the pushing device's own pubkey.6 params
Push a new client-encrypted secret. Ciphertext only — server never sees plaintext. Recipients must include the pushing device's own pubkey.
alias*stringciphertext_b64*stringclient_hlcstringdevice_id*stringkind*stringapi_key · oauth_token · private_key · passphraserecipients*arrayenv_sync.secret_pullPull an encrypted secret blob. Response is ciphertext_b64 only — server never sees and never returns plaintext.3 params
Pull an encrypted secret blob. Response is ciphertext_b64 only — server never sees and never returns plaintext.
aliasstringdevice_idstringnode_idstringenv_sync.secret_rotateRotate 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.5 params
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.
client_hlcstringdevice_id*stringnew_ciphertext_b64*stringnew_recipients*arraynode_id*stringenv_sync_txn_pushIngest a batched envelope of client-recorded env_sync mutations. HLC-skew gated, partial-success on conflict.2 params
Ingest a batched envelope of client-recorded env_sync mutations. HLC-skew gated, partial-success on conflict.
device_idstringoperations*arrayenv_sync_txn_rollbackInverse-apply a prior env_sync transaction. Safety gates: ownership, idempotency, descendant-conflict (force opt-out).4 params
Inverse-apply a prior env_sync transaction. Safety gates: ownership, idempotency, descendant-conflict (force opt-out).
device_idstringforcebooleaninclude_descendantsbooleantxn_id*stringtasks_readRead tasks and task categories. action: tasks | categories (consolidated surface — same handlers as the legacy tools)19 params
Read tasks and task categories. action: tasks | categories (consolidated surface — same handlers as the legacy tools)
action*stringtasks · categoriescategory_idstringcompleted_date_endstringcompleted_date_startstringcreated_date_endstringcreated_date_startstringdue_date_endstringdue_date_startstringdue_todaybooleanhas_notificationbooleanis_importantbooleanlimitnumberlocationstringoffsetnumberoverduebooleansearchstringsort_bystringdue_date · created_at · completed_at · updated_at · is_importantsort_orderstringasc · descstatusstringpending · completedtask_writeCreate 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.19 params
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.
action*stringcreate · updatecategory_idstringcompleted_atstringcontentstringdue_datestringdue_timestringhas_notificationbooleanidstringis_all_daybooleanis_importantbooleanlocationstringlocation_latnumberlocation_lngnumbernotesstringreminder_timingintegerreminder_timingsarrayrepeat_rulestringstart_datestringtravel_timenumberdev_docs_readRead dev docs. action: get | list | categories | pull (consolidated surface — same handlers as the legacy tools)7 params
Read dev docs. action: get | list | categories | pull (consolidated surface — same handlers as the legacy tools)
action*stringget · list · categories · pullcategorystringcontent_typestringmarkdown · json · yaml · textidstringinclude_versionsbooleansearchstringtitlestringdev_doc_writeCreate 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.9 params
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.
action*stringcreate · updatecategorystringcontentstringcontent_typestringmarkdown · json · yaml · textidstringlocal_pathstringmemory_typestringstate · event · preferencemodestringreplace · append · prependtitlestringsync_readRead-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.10 params
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.
action*stringlist · pull · diff · merge · conflictsbase_shastringbase_textstringcursorstringdevice_idstringlimitintegerlocal_textstringpathstringpathsarraysincestringvault_readRead vault metadata. action: list | clone | status (consolidated surface — same handlers as the legacy tools) Required per action — clone: name.4 params
Read vault metadata. action: list | clone | status (consolidated surface — same handlers as the legacy tools) Required per action — clone: name.
action*stringlist · clone · statusinclude_commit_shabooleannamestringtarget_pathstringenv_sync_readRead 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)7 params
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)
action*stringdevices · drift · status · txn_pullcursorstringdevice_idstringinclude_stalebooleanlimitintegeropstringpush · install · uninstall · reconcile · migrate · rollbacksince_hlcstringenv_sync_writeNon-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, s...16 params
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, s...
action*stringenroll · request_share · heartbeatage_pubkeystringaliasstringcapabilitiesobjectclaude_code_versionstringclient_hlcstringdevice_idstringenrollment_tokenstringinstalled_hooksarrayinstalled_hooks_hashstringinstalled_mcp_servers_hashstringinstalled_skillsarrayinstalled_skills_hashstringosstringsecret_sharesarraytarget_device_idstringgraph_readRead knowledge-graph nodes. action: get | list (consolidated surface — same handlers as the legacy tools)8 params
Read knowledge-graph nodes. action: get | list (consolidated surface — same handlers as the legacy tools)
action*stringget · listaliasstringcursorstringdevice_idstringlimitintegernode_idstringnode_typestringskill · hook · mcp_server · secret · setting_fragmentupdated_since_hlcstringgraph_writeAdd 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.8 params
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.
action*stringadd · updatealiasstringclient_hlcstringdevice_idstringfield_updatesarraynode_idstringnode_typestringskill · hook · mcp_server · secret · setting_fragmentpayloadobjecthandoff_readRead session handoffs. action: get | list (consolidated surface — same handlers as the legacy tools) Required per action — get: project, topic.11 params
Read session handoffs. action: get | list (consolidated surface — same handlers as the legacy tools) Required per action — get: project, topic.
action*stringget · listdatestringhas_blockersbooleanlimitintegerprojectstringsincestringstatusstringtagsarraytask_typestringtimestringtopicstringmemory_readRead agent memory. action: get | search (consolidated surface — same handlers as the legacy tools) Required per action — get: source | search: query.9 params
Read agent memory. action: get | search (consolidated surface — same handlers as the legacy tools) Required per action — get: source | search: query.
action*stringget · searchhopintegeridstringlimitintegermodestringkeyword · latest_statepathstringquerystringsourcestringpaper · vault_filesourcesarraySponsors
Configuration
AINOTE_API_KEY*secret64-character ainote MCP key. Issue one via `npx @ainote/mcp signup` (RFC 8628 device flow), or in a Claude session by calling signup_and_get_key, or at https://app.ainote.dev -> Settings -> MCP keys.
Readme
Details
- Repository
- github.com/seunghan91/ainote
- Website
- docs.ainote.dev
- Category
- AI & LLM Tools
- Package
@ainote/mcp- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active
- Tools verified
- Nov 6, 2026