Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.seunghan91/ainote

REMOTE · API.AINOTE.DEV · 2 COMPONENTS · SCANNED AUG 3

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

+4 this week 64 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability69
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (fair).Partial
  • Context-footprint check failed: tool/resource definitions use about 7421 tokens (~137/item across 54 items; 52 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage91
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 74% of tool parameters carry a description.Partial
Capabilities40
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · api.ainote.dev

# add to Claude Code
claude mcp add --transport http seunghan91-ainote https://api.ainote.dev/api/mcp
# ~/.codex/config.toml
[mcp_servers.seunghan91-ainote]
url = "https://api.ainote.dev/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "seunghan91-ainote": {
      "type": "remote",
      "url": "https://api.ainote.dev/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add seunghan91-ainote --url https://api.ainote.dev/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  seunghan91-ainote:
    url: "https://api.ainote.dev/api/mcp"
// mcp.json
{
  "mcpServers": {
    "seunghan91-ainote": {
      "type": "http",
      "url": "https://api.ainote.dev/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 59

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://api.ainote.dev/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.ainote.dev CN=WE1,O=Google Trust Services,C=US 21 Jul 2026 19 Oct 2026 ECDSA 256 ECDSA-SHA256 1c88ee15526688df0e49aca011eb192b
SANs: api.ainote.dev
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC insecure

Validation of api.ainote.dev. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
ainote.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains
content-security-policy default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'self'; form-action 'self'; img-src 'self' data: blob: https:; font-src 'self' data: https:; style-src 'self' 'unsafe-inline' https:; connect-src 'self' https:; script-src 'self' https: 'nonce-OM35Xnw6SOLy1PT+hZfDSg=='; frame-src 'self' https:; manifest-src 'self'; worker-src 'self' blob:
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.ainote.dev/api/mcp Verified 200
http (plaintext) http://api.ainote.dev/api/mcp HTTPS enforced 301 https://api.ainote.dev/api/mcp
MCP tools — 52 exposed · ~7,367 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
create_dev_doc ~427

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, .cursorrules, .windsurfrules (not in git, local-only) - Local env notes: API keys reference, server credentials (NOT actual secret values) - Project notes: architecture decisions, dev diaries, planning docs MULTI-DEVICE WORKFLOW: Laptop → push: create_dev_doc(title, content, local_path="~/.claude/.../MEMORY.md") Desktop → pull: pull_dev_docs() → automatically writes files to their local paths CATEGORIES (subcategories under dev/): - memory: Claude/AI memory files (~/.claude/projects/.../memory/) - claude: CLAUDE.md files and Claude-specific configs - cursor: .cursorrules files - env: environment notes and config references - docs: general project documentation Set local_path to enable pull_dev_docs auto-sync to this machine.

NameTypeReqDescription
categorystringSubcategory: memory | claude | cursor | env | docs | custom. Default: docs
contentstringyesFull file content (markdown, json, yaml, text)
content_typestringContent type. Auto-detected from title extension if omitted.
local_pathstringAbsolute path on this machine (e.g., ~/.claude/projects/-Users-seunghan/memory/MEMORY.md). Used by pull_dev_docs to restore file on other devices. Supports ~ expansion.
memory_typestringMemory update semantics: 'state' = latest value replaces the past (used by memory_search latest_state mode), 'event' = immutable accumulating log, 'preference' = user preference. Omit for plain docum…
titlestringyesFilename as title (e.g., ainote-memory.md, project-claude.md)

No output schema declared.

No examples provided.

create_task ~406

Create a new task in AI Note. Supports full task creation with dates, times, location, notes, and notifications.

NameTypeReqDescription
category_idstringCategory ID (UUID) to organize the task
contentstringyesTask content (required)
due_datestringDue date in ISO format (e.g., '2026-01-28' or '2026-01-28T15:00:00+09:00')
due_timestringDue time in HH:MM format (e.g., '15:00'). If not provided, task is treated as all-day.
has_notificationbooleanEnable reminder notifications (default: false)
is_all_daybooleanMark as all-day event — suppresses time-of-day rendering.
is_importantbooleanMark task as important (default: false)
locationstringLocation where the task takes place
location_latnumberGPS latitude. Pair with location_lng.
location_lngnumberGPS longitude. Pair with location_lat.
notesstringAdditional notes or details for the task
reminder_timingintegerMinutes before due time to send reminder (e.g., 10 for 10 minutes before). Default: 30. Only used when has_notification is true.
reminder_timingsarrayMultiple reminder offsets in minutes before due time (e.g., [10, 60] fires 10 min and 1 hour before). Overrides reminder_timing if provided.
repeat_rulestringRecurrence rule (e.g., 'daily', 'weekly', 'monthly', 'yearly', or RRULE format)
start_datestringStart date for date range tasks in ISO format (e.g., for multi-day events)
travel_timenumberMinutes of travel time to allow before due_date.

No output schema declared.

No examples provided.

delete_dev_doc ~80

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

NameTypeReqDescription
categorystringSubcategory to disambiguate title
idstringDocument UUID
titlestringDocument title

No output schema declared.

No examples provided.

delete_task ~67

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.

NameTypeReqDescription
idstringyesTask ID to delete

No output schema declared.

No examples provided.

env_sync_txn_pull ~67

Paginated read of env_sync transaction log, HLC-ordered. Read-only; filterable by since_hlc + op.

NameTypeReqDescription
cursorstring
limitinteger
opstring
since_hlcstring

No output schema declared.

No examples provided.

env_sync_txn_push ~43

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

NameTypeReqDescription
operationsarrayyes

No output schema declared.

No examples provided.

env_sync_txn_rollback ~63

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

NameTypeReqDescription
forceboolean
include_descendantsboolean
txn_idstringyes

No output schema declared.

No examples provided.

env_sync.device_enroll ~65

Complete device enrollment by exchanging a one-shot enrollment_token for a registered device row with the device's age public key.

NameTypeReqDescription
age_pubkeystringyes
aliasstringyes
capabilitiesobject
enrollment_tokenstringyes

No output schema declared.

No examples provided.

env_sync.device_list ~40

List enrolled devices for the calling user. Each entry includes age pubkey, capabilities, last_sync_at.

NameTypeReqDescription
include_staleboolean

No output schema declared.

No examples provided.

env_sync.device_request_secret_share ~86

Share existing secrets with a newly enrolled device by uploading re-encrypted ciphertexts. Plaintext never transits.

NameTypeReqDescription
client_hlcstring
device_idstringyesThe existing device performing the re-encryption (must own access to all secret_node_ids).
secret_sharesarrayyes
target_device_idstringyes

No output schema declared.

No examples provided.

env_sync.drift_status ~39

Cross-device drift report. Lists skills present on one device but missing on another, with dwell time.

NameTypeReqDescription
device_idstring

No output schema declared.

No examples provided.

env_sync.heartbeat_ping ~106

Device heartbeat ping. Updates last_sync_at + capabilities, triggers fast-path drift recheck if installed-set hashes changed.

NameTypeReqDescription
claude_code_versionstring
device_idstringyes
installed_hooksarray
installed_hooks_hashstringyes
installed_mcp_servers_hashstring
installed_skillsarray
installed_skills_hashstringyes
osstring

No output schema declared.

No examples provided.

env_sync.secret_pull ~46

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

NameTypeReqDescription
aliasstring
node_idstring

No output schema declared.

No examples provided.

env_sync.secret_push ~86

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

NameTypeReqDescription
aliasstringyes
ciphertext_b64stringyes
client_hlcstring
device_idstringyes
kindstringyes
recipientsarrayyes

No output schema declared.

No examples provided.

env_sync.secret_rotate ~95

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.

NameTypeReqDescription
client_hlcstring
device_idstringyes
new_ciphertext_b64stringyes
new_recipientsarrayyes
node_idstringyes

No output schema declared.

No examples provided.

env_sync.sync_status ~29

User-level vault health snapshot: node counts, pending conflicts, last transaction, device liveness.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_dev_doc ~86

Get a single dev document by title or id. Returns full content.

NameTypeReqDescription
categorystringSubcategory (claude, cursor, etc.) to disambiguate title
idstringDocument UUID
include_versionsbooleanInclude version history (default: false)
titlestringDocument title (e.g., project-a-memory.md)

No output schema declared.

No examples provided.

get_setup_guide ~33

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

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

graph_add_entity ~81

Create a new env_sync graph node (skill/hook/mcp_server/secret/setting_fragment). Same-alias collisions open a conflict bucket — no silent overwrite.

NameTypeReqDescription
aliasstringyes
client_hlcstring
device_idstringyes
node_typestringyes
payloadobjectyes

No output schema declared.

No examples provided.

graph_get_node ~58

Read a live env_sync graph node and its per-field LWW state. Lookup by node_id OR (alias + node_type).

NameTypeReqDescription
aliasstring
node_idstring
node_typestring

No output schema declared.

No examples provided.

graph_list_nodes ~78

List live env_sync graph nodes for the calling user with optional node_type and HLC-since filters.

NameTypeReqDescription
cursorstringOpaque cursor (created_at ISO + id) from previous page's next_cursor
limitinteger
node_typestring
updated_since_hlcstring

No output schema declared.

No examples provided.

graph_soft_delete ~70

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.

NameTypeReqDescription
client_hlcstring
device_idstringyes
node_idstringyes

No output schema declared.

No examples provided.

graph_update_entity ~69

Per-field LWW update for an env_sync graph node. Identity-immutable field mismatches open a conflict bucket (no partial writes).

NameTypeReqDescription
client_hlcstring
device_idstringyes
field_updatesarrayyes
node_idstringyes

No output schema declared.

No examples provided.

handoff_get ~164

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 returned (a daily server-side cleanup job permanently deletes them).

NameTypeReqDescription
datestringOptional YYYY-MM-DD. Omit for latest.
projectstringyesProject slug used at handoff_save time.
timestringOptional HHMM (24h, KST) — same value passed at save time. Required to disambiguate when multiple handoffs share the same project/topic/date.
topicstringyesTopic slug used at handoff_save time.

No output schema declared.

No examples provided.

handoff_list ~286

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 body. Read-only: entries older than 7 days are filtered out of results (a daily server-side cleanup job permanently deletes them).

NameTypeReqDescription
has_blockersbooleanv2 only: filter by frontmatter has_blockers (true/false).
limitintegerMax entries to return (default 50).
projectstringOptional project filter, e.g. 'logi' to list only logi-* handoffs.
sincestringISO8601 timestamp — only entries with updated_at >= since are returned.
statusstringv2 only: filter by frontmatter status (e.g. 'in_progress', 'paused', 'completed', 'blocked'). v1 handoffs without frontmatter are excluded when this filter is set.
tagsarrayv2 only: AND match — entries must contain ALL given tags. Example: ['auth', 'mobile'].
task_typestringv2 only: filter by frontmatter task_type (e.g. 'feature', 'bugfix', 'refactor', 'research', 'ops').

No output schema declared.

No examples provided.

handoff_save ~379

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

NameTypeReqDescription
contentstringyesFull handoff text. Should follow the session-handoff skill template (현재 상태 / 작업 위치 / 수정 파일 / 결정 사항 / 다음 STEP / 알려진 이슈). WAF-bypass tip: prefix the string with '__B64__:' followed by base64-encoded pa…
content_b64stringOptional: base64-encoded handoff text (use INSTEAD of `content`). For WAF-bypass on large bodies. Server decodes before storing.
datestringOptional override date (YYYY-MM-DD). Defaults to today in server timezone.
projectstringyesProject slug, e.g. 'logi', 'ainote', 'krx_ai'. Lowercase, no spaces.
timestringOptional time-of-day suffix in HHMM 24h format (KST), e.g. '1555'. Appended to the topic slug so multiple handoffs on the same day stay distinguishable. Omit for once-per-day saves.
topicstringyesShort topic slug for this handoff, e.g. 'phase-d-port', 'oauth-fix'. Lowercase-hyphen.

No output schema declared.

No examples provided.

list_categories ~42

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_dev_categories ~53

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_dev_docs ~106

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.

NameTypeReqDescription
categorystringSubcategory filter (claude, cursor, windsurf, copilot, docs, etc.). Omit to list all dev docs.
content_typestringFilter by content type
searchstringSearch keyword in document title

No output schema declared.

No examples provided.

list_papers ~217

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.

NameTypeReqDescription
category_idstringFilter by category UUID
limitnumberMaximum number of papers to return (default: 25, max: 200)
offsetnumberNumber to skip for pagination (default: 0)
paper_category_idstringFilter by paper-specific folder UUID
searchstringKeyword to match in paper title or content (case-insensitive partial match)
sort_bystringSort field (default: updated_at)
sort_orderstringSort order (default: desc)
source_typestringFilter by source type (e.g., 'manual', 'youtube', 'url', 'clipboard')

No output schema declared.

No examples provided.

list_tasks ~358

List all tasks from AI Note with advanced filtering, date ranges, location search, and sorting

NameTypeReqDescription
category_idstringFilter by category UUID
completed_date_endstringFilter tasks completed <= this date (ISO 8601 format)
completed_date_startstringFilter tasks completed >= this date (ISO 8601 format)
created_date_endstringFilter tasks created <= this date (ISO 8601 format)
created_date_startstringFilter tasks created >= this date (ISO 8601 format)
due_date_endstringFilter tasks with due_date <= this date (ISO 8601 format)
due_date_startstringFilter tasks with due_date >= this date (ISO 8601 format)
due_todaybooleanFilter tasks due today
has_notificationbooleanFilter by notification enabled status
is_importantbooleanFilter by important tasks only
limitnumberMaximum number of tasks to return (default: 25, max: 500)
locationstringFilter by location (partial match, e.g., '여의도', '서울')
offsetnumberNumber of tasks to skip for pagination (default: 0). Use with limit to fetch additional pages.
overduebooleanFilter overdue incomplete tasks (due_date < today)
searchstringSearch keyword in task content and notes (case-insensitive partial match)
sort_bystringSort field (default: created_at)
sort_orderstringSort order (default: desc)
statusstringFilter by task status

No output schema declared.

No examples provided.

login_and_get_key ~93

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 like other key-creation flows.

NameTypeReqDescription
emailstringyesYour account email address
passwordstringyesYour account password

No output schema declared.

No examples provided.

memory_get ~133

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 does not exist (or belongs to another user).

NameTypeReqDescription
idstringItem ID returned by memory_search
pathstringvault_file only: file path inside the vault (e.g. 'global/MEMORY.md')
sourcestringyesWhich store the item lives in (use the `source` field from memory_search results)

No output schema declared.

No examples provided.

memory_search ~206

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 match across title/path/content - latest_state: most recent memory, preferring entries saved with memory_type='state' (falls back to plain recency when no typed entries exist) Returns { found: false, message: "no memory found" } when nothing matches — treat that as a definitive empty signal and stop searching (do not guess).

NameTypeReqDescription
limitintegerMax results (default 10, max 20)
modestringkeyword (default) or latest_state
querystringyesSearch text (e.g. 'render deploy key', 'ainote jwt'). May be blank only in latest_state mode.
sourcesarrayMemory stores to search. Default: both.

No output schema declared.

No examples provided.

pull_dev_docs ~232

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 or setting up a fresh environment - To restore Claude memory files, CLAUDE.md configs, and other local-only files WHAT IT DOES: 1. Fetches all your dev docs that have local_path set 2. Creates any missing parent directories automatically 3. Writes the file content to each local_path on THIS machine 4. Reports success/failure for each file TYPICAL FILES RESTORED: - ~/.claude/projects/.../memory/MEMORY.md (AI context memory) - ~/projects/*/CLAUDE.md (project-specific AI instructions) - .cursorrules, .windsurfrules (editor AI configs) Run this once after setting up ainote MCP on a new device.

NameTypeReqDescription
categorystringSubcategory filter. Omit to pull all docs with local_path.

No output schema declared.

No examples provided.

signup_and_get_key ~74

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.

NameTypeReqDescription
emailstringyesEmail address for the new account
namestringDisplay name (optional)
passwordstringyesPassword (minimum 6 characters)

No output schema declared.

No examples provided.

sync_audit_layer5 ~214

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.

NameTypeReqDescription
chunk_countintegerOptional: number of diff chunks the client fed to codex.
duration_msintegerOptional: wall-clock time of the codex review on the client.
pathstringyesVault path the review covered.
summarystringFree-form codex output summary. Server HMACs this; raw text is NEVER stored.
verdictstringyesOne of: pass, flag, block, error.

No output schema declared.

No examples provided.

sync_delete ~220

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 force:true (audited). Idempotent: deleting a non-existent path returns success with deleted:false.

NameTypeReqDescription
base_shastringOptional: git_sha the client last observed for this path. When present, server compares with current git_sha and returns -32009 conflict on mismatch (with current content for 3-way diff).
device_idstringOptional: client device identifier for audit log (e.g., from ~/.claude/ainote-sync/device.id).
forcebooleanOptional: when true, skip CAS check even if base_sha is supplied. Use only for intentional overwrites; presence is auditable via warning logs.
pathstringyesRelative file path to delete (e.g., 'global/_waf_probe.md'). No leading slash, no '..'.

No output schema declared.

No examples provided.

sync_diff ~167

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 — base_text must be supplied by the caller if a 3-way view is needed; otherwise this returns remote_text only.

NameTypeReqDescription
base_textstringOptional: client's baseline (last-known remote). When supplied along with local_text, response includes both diffs (base → remote, base → local) so the client can render a 3-way view.
local_textstringOptional: client's current text. When supplied, response includes unified diff (remote → local).
pathstringyesRelative vault path.

No output schema declared.

No examples provided.

sync_list ~41

Legacy alias for listing files in the primary vault.

NameTypeReqDescription
pathstringDirectory to list (e.g., 'global'). Omit to list all files.

No output schema declared.

No examples provided.

sync_merge ~222

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 database mutation — to commit the result, follow up with sync_push(content=merged_text, base_sha=merged_against.remote_sha, resolves_conflict_id=conflict_id).

NameTypeReqDescription
base_shastringOptional: git_sha the client believes is the merge base. When supplied, server verifies (informational; merge still runs).
base_textstringyesCommon ancestor text — what the client had cached when it started editing. Source: client state.json baseline. Required.
device_idstringOptional: client device identifier. Recorded on any vault_conflict row created downstream.
local_textstringyesCurrent local text on the client (post-edit). Required.
pathstringyesRelative vault path (e.g., 'global/MEMORY.md').

No output schema declared.

No examples provided.

sync_pending_conflicts ~90

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.

NameTypeReqDescription
limitintegerOptional: max rows to return (default 50, max 200).
pathstringOptional: filter to a specific path.

No output schema declared.

No examples provided.

sync_pull ~67

Legacy alias for pulling files from the primary vault.

NameTypeReqDescription
pathstringOptional directory filter (e.g., 'global' to pull only global files)
sincestringISO 8601 timestamp. Only return files updated after this time. Omit to get all files.

No output schema declared.

No examples provided.

sync_push ~519

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.

NameTypeReqDescription
base_shastringOptional: git_sha the client last observed for this path. When present, server compares with current git_sha and returns -32009 conflict on mismatch (with current content for 3-way diff). Omit for le…
contentstringFull file content (markdown text). Alternatively prefix with '__B64__:' followed by base64 payload for WAF bypass.
content_b64stringOptional: base64-encoded file content (use INSTEAD of `content`). For WAF-bypass on large bodies. Server decodes before storing. If both supplied, content_b64 wins.
device_idstringOptional: client device identifier (e.g., from ~/.claude/ainote-sync/device.id). Stored on FileIndex so future conflict responses can report which device last wrote the path.
forcebooleanOptional: when true, skip CAS check even if base_sha is supplied. Use only for intentional overwrites; presence is auditable via warning logs.
pathstringyesRelative file path (e.g., 'global/MEMORY.md', 'launchcrew/firebase.md'). No leading slash, no '..'.
resolves_conflict_idstringOptional: UUID of a vault_conflicts row this push resolves. When supplied, server validates ownership/unresolved/path/sha and atomically marks the conflict as resolution=clean inside the same transac…
supports_supersededbooleanOptional capability opt-in. When true AND resolves_conflict_id points at an already-resolved conflict whose (path, remote_sha) matches this push, the server returns a NORMAL 200 with resource_data {s…

No output schema declared.

No examples provided.

sync_push_batch ~372

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.

NameTypeReqDescription
device_idstringOptional batch-level device identifier; per-item device_id overrides it.
idempotency_keystringyesREQUIRED. Opaque client-generated UUID, one per batch ATTEMPT-SET: reuse the same key when retrying the same items after a timeout (the server replays the stored results instead of re-applying), and…
itemsarrayyesUp to 200 push items, 4MB total, one entry per unique path. Duplicate paths reject the whole batch.
supports_supersededbooleanSame capability opt-in as sync_push, applied to every item in the batch.

No output schema declared.

No examples provided.

update_dev_doc ~132

Update an existing dev document. Supports replace (default), append, or prepend modes. Optionally update the local_path for sync.

NameTypeReqDescription
categorystringSubcategory to disambiguate title
contentstringyesNew content
idstringDocument UUID
local_pathstringUpdate the local file path for multi-device sync
memory_typestringSet the memory update semantics (state | event | preference). Pass null/empty to clear.
modestringUpdate mode (default: replace)
titlestringDocument title

No output schema declared.

No examples provided.

update_task ~343

Update an existing task. All fields are optional except id.

NameTypeReqDescription
category_idstringUpdate category ID (or 'null' to remove category)
completed_atstringMark as completed (ISO format) or 'null' to uncomplete
contentstringNew task content
due_datestringUpdate due date in ISO format (or 'null' to clear)
due_timestringUpdate due time in HH:MM format (or 'null' to make all-day)
has_notificationbooleanEnable/disable reminder notifications
idstringyesTask ID (required)
is_all_daybooleanToggle all-day mode.
is_importantbooleanUpdate important status
locationstringUpdate location (or 'null' to clear)
location_latnumberUpdate GPS latitude.
location_lngnumberUpdate GPS longitude.
notesstringUpdate notes (or 'null' to clear)
reminder_timingintegerMinutes before due time to send reminder (e.g., 10 for 10 minutes before). Only used when has_notification is true.
reminder_timingsarrayMultiple reminder offsets in minutes before due time (e.g., [10, 60]). Pass empty array [] to clear.
repeat_rulestringUpdate recurrence rule (or 'null' to make non-recurring)
start_datestringUpdate start date in ISO format (or 'null' to clear)
travel_timenumberUpdate travel-time minutes.

No output schema declared.

No examples provided.

vault_clone ~62

Return the GitHub HTTPS clone URL for an existing vault. Authentication is via the user's normal GitHub credentials (PAT or gh CLI).

NameTypeReqDescription
namestringyesVault name or slug.
target_pathstringPreferred local clone path for the returned instructions.

No output schema declared.

No examples provided.

vault_connect_status ~54

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

vault_create ~74

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.

NameTypeReqDescription
descriptionstringOptional GitHub repo description.
namestringyesVault name. Slug is derived from this value and used as the GitHub repo name.

No output schema declared.

No examples provided.