io.github.seunghan91/ainote
io.github.seunghan91/ainote · v1.3.2 · MCP 2025-03-26
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Reachability
reachable
checked 2026-07-14 03:46 UTC
Registry status active
Tools pinned 51
b56246bad121
Tools last changed
unchanged since first capture 2026-07-14
Provenance
Registry namespace io.github.seunghan91
(GitHub-account verified by the official registry)
Repository
github.com/seunghan91/ainote
Website
https://docs.ainote.dev
Remote endpoints
https://api.ainote.dev/api/mcp (streamable-http)
Observed changes
| When (UTC) | Event | Detail |
|---|---|---|
| 2026-07-14 03:46 | first capture | 51 tools pinned |
Pinned tool definitions (51)
| Tool | Description |
|---|---|
| list_tasks | List all tasks from AI Note with advanced filtering, date ranges, location search, and sorting |
| create_task | Create a new task in AI Note. Supports full task creation with dates, times, location, notes, and notifications. |
| update_task | Update an existing task. All fields are optional except id. |
| 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. |
| list_categories | List all task categories for the authenticated user. Returns id/name/color/icon/task_count tuples. Read-only — use create_task with category_id to assign tasks to a category. |
| list_papers | 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',... |
| list_dev_docs | List dev documents under the dev/ category hierarchy. Filter by subcategory (claude, cursor, windsurf, copilot, docs, etc.), search by title, or filter by content type. |
| get_dev_doc | Get a single dev document by title or id. Returns full content. |
| create_dev_doc | Save a document to AI Note cloud for multi-device sync and persistent storage. PRIMARY USE CASES: - Memory files: ~/.claude/projects/.../memory/MEMORY.md (AI context that survives device switches) - AI config files: CLAUDE.md,... |
| update_dev_doc | Update an existing dev document. Supports replace (default), append, or prepend modes. Optionally update the local_path for sync. |
| pull_dev_docs | Restore all synced files to this device. Fetches every dev doc that has a local_path set and writes the content to that path on disk. WHEN TO USE: - First time setup on a new machine (desktop, laptop, etc.) - After reinstalling macOS... |
| 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). |
| list_dev_categories | List all subcategories under dev/ (memory, claude, cursor, env, docs, mcp, custom...) with document counts. Use to discover which categories exist before calling list_dev_docs with a category filter. |
| signup_and_get_key | Create a new AI Note account and get an MCP API key. No authentication required. Use this if you don't have an account yet. |
| login_and_get_key | Log in to an existing AI Note account and return an MCP API key. No prior authentication required. SIDE EFFECT: if the user has no MCP key yet, this call creates one (write to user.mcp_keys), so it is NOT idempotent and must be gated... |
| get_setup_guide | Get instructions for setting up AI Note MCP in Claude Desktop, Cursor, or other MCP clients. No authentication required. |
| vault_list | List the authenticated user's GitHub-backed vaults. Each entry includes slug, github_repo_full_name, sync status, indexed file count, and is_primary flag. Read-only. Pair with vault_clone to get the git clone URL or vault_sync to... |
| vault_create | 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. |
| vault_clone | Return the GitHub HTTPS clone URL for an existing vault. Authentication is via the user's normal GitHub credentials (PAT or gh CLI). |
| vault_connect_status | Check whether the user has installed the ainote GitHub App. If connected, returns account_login + installation_id. If not, returns an install_url to surface to the user. Read-only; talks to GitHub API. |
| vault_sync | Wrapper around vault file sync. action=list|pull|push to work against the primary vault. For push: WAF-bypass via `content_b64` or `content: '__B64__:...'` prefix (mirrors sync_push). |
| sync_push | 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... |
| sync_pull | Legacy alias for pulling files from the primary vault. |
| sync_list | Legacy alias for listing files in the primary vault. |
| sync_delete | 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/claude-config/, handoffs/) require base_sha or explicit... |
| sync_merge | Compute a stateless 3-way merge for a vault file. Server runs `git merge-file --diff3 --stdout` over (base_text, local_text, current remote from file_indices) and returns the merged text plus the exact remote_sha it merged against. NO... |
| sync_diff | Return the unified diff (and raw remote text) of a vault file. Useful for surfacing what `sync_merge` would conflict on, or for the client to render a `git diff` view before pushing. NO database mutation. Server has no history —... |
| sync_pending_conflicts | List unresolved vault_conflicts rows for the authenticated user's primary vault. Used by clients (e.g. SessionStart hook) to surface conflicts that need merge attention. Returns up to `limit` rows ordered by most recent first. |
| sync_audit_layer5 | 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.... |
| handoff_save | 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... |
| handoff_list | List session handoff notes saved in the primary vault under handoffs/, most-recent first. v2 frontmatter fields (status / has_blockers / tags / task_type) can be filtered server-side and are exposed in each entry without fetching the... |
| handoff_get | Retrieve a session handoff by project + topic. If date is omitted, returns the most recent matching handoff. Pass `time` (HHMM, KST) to fetch a specific same-day save when multiple exist. Read-only: handoffs older than 7 days are not... |
| memory_search | Search your memory (dev docs / papers + vault markdown files) and get ranked snippets with IDs. COST PRINCIPLE: search returns snippets only; call memory_get for full content. MODES: - keyword (default): hybrid keyword + semantic... |
| memory_get | Fetch the full content of ONE memory item found via memory_search. source='paper' requires `id`; source='vault_file' accepts `id` or `path`. Only the authenticated user's own items are accessible. Returns { found: false } when the item... |
| graph_get_node | Read a live env_sync graph node and its per-field LWW state. Lookup by node_id OR (alias + node_type). |
| graph_list_nodes | List live env_sync graph nodes for the calling user with optional node_type and HLC-since filters. |
| graph_add_entity | Create a new env_sync graph node (skill/hook/mcp_server/secret/setting_fragment). Same-alias collisions open a conflict bucket — no silent overwrite. |
| graph_update_entity | Per-field LWW update for an env_sync graph node. Identity-immutable field mismatches open a conflict bucket (no partial writes). |
| graph_soft_delete | 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. |
| env_sync.device_enroll | Complete device enrollment by exchanging a one-shot enrollment_token for a registered device row with the device's age public key. |
| env_sync.device_list | List enrolled devices for the calling user. Each entry includes age pubkey, capabilities, last_sync_at. |
| env_sync.device_request_secret_share | Share existing secrets with a newly enrolled device by uploading re-encrypted ciphertexts. Plaintext never transits. |
| env_sync.secret_push | Push a new client-encrypted secret. Ciphertext only — server never sees plaintext. Recipients must include the pushing device's own pubkey. |
| env_sync.secret_pull | Pull an encrypted secret blob. Response is ciphertext_b64 only — server never sees and never returns plaintext. |
| env_sync.secret_rotate | 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. |
| env_sync_txn_push | Ingest a batched envelope of client-recorded env_sync mutations. HLC-skew gated, partial-success on conflict. |
| env_sync_txn_pull | Paginated read of env_sync transaction log, HLC-ordered. Read-only; filterable by since_hlc + op. |
| env_sync_txn_rollback | Inverse-apply a prior env_sync transaction. Safety gates: ownership, idempotency, descendant-conflict (force opt-out). |
| env_sync.heartbeat_ping | Device heartbeat ping. Updates last_sync_at + capabilities, triggers fast-path drift recheck if installed-set hashes changed. |
| env_sync.drift_status | Cross-device drift report. Lists skills present on one device but missing on another, with dwell time. |
| env_sync.sync_status | User-level vault health snapshot: node counts, pending conflicts, last transaction, device liveness. |
Status badge
[](https://toolpin.dev/servers/io.github.seunghan91/ainote)
Maintain this server? Add the badge to your README — it links your users to this live status page.