MCP server reference
The server speaks JSON-RPC 2.0 over HTTP and offers 55 tools. This page is generated from the running tool registry.
Connecting
One endpoint, one header. The server implements initialize, tools/list, tools/call and ping.
POST https://nibvine.com/mcp
Authorization: Bearer nbv_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
Clients that prefer discovery can read /.well-known/nibvine-ai.json, which lists this endpoint, the protocol version and every tool name.
Scopes
Each tool declares the scopes it needs. A token missing one gets a clear refusal rather than partial data. Grant the narrowest set that lets the client do its job.
| Scope | Allows |
|---|---|
mcp:connect | Connect via MCP |
projects:read | Read projects |
projects:write | Write/update project metadata with preview/commit |
notes:read | Read notes |
notes:write | Write notes with preview/commit |
tasks:read | Read tasks |
tasks:write | Write tasks with preview/commit |
changes:read | Read project changes |
ideas:read | Read ideas |
ideas:write | Write ideas with preview/commit |
comments:read | Read comments and AI chat threads |
comments:write | Write comments with preview/commit |
quicknotes:read | Read quick notes |
quicknotes:write | Create quick notes with preview/commit |
members:read | Read project members and invite links |
members:write | Manage members and invite links with preview/commit |
analyses:read | Read stored AI analyses |
A token can also be pinned to a single project. When it is, every tool on this page silently filters to that project — there is no way to read around it.
How writes work
No tool changes your data in a single call. Every mutation is a preview followed by a commit.
-
Preview
A preview_ tool records what would change and returns an action id. Nothing has been written.
-
Expiry
Previews are short-lived. An abandoned plan cannot be committed hours later by a stale session.
-
Commit
commit_write_action applies the change in one transaction, writes it to the project history marked as an external change, and notifies any integrations you configured.
Read tools
Safe to call at any time. These never modify anything.
list_projects
List all projects you have access to. Returns id, title, category, priority, and note/task/idea counts. Use this to discover project IDs before calling other tools.
mcp:connectprojects:read
get_project
Read full project metadata: vision, goal, description, tech_stack, target_audience, success_metrics, constraints, completion_percentage. Use this when you need to inspect or update specific project fields. For AI-optimized context with notes and tasks, use get_context_pack instead.
-
project_idinteger required
Project ID, from list_projects
mcp:connectprojects:read
get_project_context
Read project metadata + 5 latest notes + 5 latest changes in one call. Lightweight alternative to get_context_pack when you don't need profile-based ranking. Prefer get_context_pack(profile=...) for curated, role-specific context.
-
project_idinteger required
Project ID, from list_projects
mcp:connectprojects:readnotes:readchanges:read
get_context_pack
Get AI-optimized context pack with notes and tasks ranked by relevance to a role profile. Profiles: 'coding' (architecture, APIs, bugs), 'founder' (vision, priorities, market), 'product' (UX, roadmap, feedback), 'marketing' (positioning, messaging), 'fundraising' (traction, metrics), 'support' (recent issues). Returns structured data + pre-rendered exports (markdown, llm_document, compact_summary).
-
project_idinteger required
Project ID, from list_projects -
profilestring
Role profile to rank notes/tasks by relevance -
notes_limitinteger
How many notes to include (default 6) -
tasks_limitinteger
How many tasks to include (default 6) -
changes_limitinteger
How many changes to include (default 6)
mcp:connectprojects:read
get_note
Read a single note's full content by note_id. Use when you need the complete text of a specific note. To browse notes hierarchically, use get_note_tree. To search by keyword, use search_notes.
-
note_idinteger required
Note ID, from get_note_tree or search_notes
mcp:connectnotes:read
search_notes
Full-text search across note titles and content. Returns matching notes with snippets. Use get_note_tree for hierarchical browsing instead, or get_context_pack for curated AI context.
-
querystring required
Search keyword to match in titles and content -
project_idinteger
Optional: limit search to one project -
limitinteger
Maximum items to return (default 10)
mcp:connectnotes:read
get_note_tree
Get hierarchical note tree (parent-child structure) for a project. Shows note titles, types, tags, and nesting. Use this to understand how notes are organized or to find parent_note_id for creating child notes. Use search_notes to find notes by keyword instead.
-
project_idinteger required
Project ID, from list_projects -
max_depthinteger
How deep to traverse the tree (default 5)
mcp:connectnotes:read
get_recent_changes
Read project change log: who changed what, when, and from which source (user, AI, system). Use this to see recent activity and audit trail.
-
project_idinteger required
Project ID, from list_projects -
limitinteger
Maximum items to return (default 10)
mcp:connectchanges:read
get_changes_since
Get all changes to a project since a timestamp. Returns change log entries, modified notes, modified tasks, and counts. Use this for incremental sync: pass the last_synced_at from .nibvine.json to see what changed remotely.
-
project_idinteger required
Project ID, from list_projects -
sincestring required
ISO 8601 timestamp, e.g. 2026-04-01T12:00:00Z
mcp:connectchanges:read
get_sync_status
Compare local sync state with remote to detect drift. Pass local_context_version and local_updated_at from .nibvine.json. Returns whether sync is needed, how many versions behind, active project members, and task/note counts. Use this before syncing to decide what to do.
-
project_idinteger required
Project ID, from list_projects -
local_context_versioninteger
context_version from .nibvine.json (0 if first sync) -
local_updated_atstring
updated_at from .nibvine.json (empty if first sync)
mcp:connectprojects:read
list_tasks
List project tasks, optionally filtered by status. Returns title, description, status, priority, due_date. Use get_task(task_id) to read a single task in detail.
-
project_idinteger required
Project ID, from list_projects -
statusstring
Filter by status (omit to list all) -
limitinteger
Maximum tasks to return (default 20)
mcp:connecttasks:read
get_task
Read a single task's full details by task_id. Use list_tasks(project_id) first to find task IDs.
-
task_idinteger required
Task ID, from list_tasks
mcp:connecttasks:read
get_claude_instructions
START HERE: Get complete workflow guide for this Nibvine project. Returns current project state, available tools, data types, best practices, and step-by-step instructions. Call this first in every new session.
-
project_idinteger required
Project ID, from list_projects
mcp:connectprojects:read
get_public_settings
Read the public sharing settings for a project: is_public toggle, which content is shared (notes, tasks, ideas, analyses), published note branches, and the public URL. Use before updating sharing settings.
-
project_idinteger required
Project ID, from list_projects
mcp:connectprojects:read
update_public_settings
Update public sharing settings for a project. Toggle is_public to enable/disable the public page. Choose what to share: notes, tasks, ideas, analyses. Set published_note_ids to select which root-level note branches appear on the public page. Set regenerate_token=true to invalidate old share links. Changes apply immediately (no preview/commit needed).
-
project_idinteger required
Project ID, from list_projects -
is_publicboolean
Enable or disable the public share page -
share_notesboolean
Show published note branches on public page -
share_tasksboolean
Show tasks on public page -
share_ideasboolean
Show ideas on public page -
share_analysesboolean
Show AI analyses on public page -
published_note_idsarray
IDs of root-level notes to publish. Use get_note_tree to find IDs. -
regenerate_tokenboolean
Generate a new public URL token (invalidates old links)
mcp:connectprojects:write
list_notes_by_tag
List notes in a project that contain a given tag. Returns note summaries.
-
project_idinteger required
Project ID, from list_projects -
tagstring required
Tag to filter by (case-insensitive substring match)
mcp:connectnotes:read
batch_tag_notes
Add or remove tags from multiple notes at once. Provide note_ids and at least one of add_tags or remove_tags.
-
note_idsarray required
List of note IDs to update -
add_tagsarray
Tags to add -
remove_tagsarray
Tags to remove
mcp:connectnotes:write
list_ideas
List a project's ideas (the lightweight idea inbox that sits next to notes and tasks). Optionally filter by implementation state or a text query. Use get_idea(idea_id) for the full body.
-
project_idinteger required
Project to read ideas from -
is_implementedboolean
Filter: true = only implemented ideas, false = only open ideas -
querystring
Optional keyword matched against idea title and content -
limitinteger
Maximum ideas to return (default 20)
mcp:connectideas:read
get_idea
Read a single idea in full by idea_id. Call list_ideas(project_id) first to discover idea IDs.
-
idea_idinteger required
ID returned by list_ideas
mcp:connectideas:read
list_comments
List the project's unified comment stream (human messages, AI assistant replies, and system events), newest first. Filter by note_id to read one note's discussion, by role, or set root_only=true to skip replies.
-
project_idinteger required
Project whose comments to read -
note_idinteger
Only comments attached to this note -
rolestring
Only comments written with this role -
root_onlyboolean
true = only thread starters, skipping replies -
limitinteger
Maximum comments to return (default 20)
mcp:connectcomments:read
get_comment_thread
Read one full comment thread: walks up to the root comment and returns it with all nested replies. Pass any comment_id in the thread.
-
comment_idinteger required
Any comment in the thread (from list_comments)
mcp:connectcomments:read
list_quick_notes
List your quick notes — free-form captures waiting for AI placement in the note tree (draft, analyzing, ready_for_review, confirmed, saved, cancelled). Project-scoped tokens only ever see quick notes tied to their project.
-
project_idinteger
Only quick notes suggested or confirmed for this project -
statusstring
Filter by pipeline stage -
limitinteger
Maximum quick notes to return (default 20)
mcp:connectquicknotes:read
get_quick_note
Read one quick note with its full AI placement analysis: general summary, branch analysis, detailed analysis, placement strategy, and confidence score.
-
quick_note_idinteger required
ID returned by list_quick_notes
mcp:connectquicknotes:read
list_project_members
List everyone with access to a project: the owner plus each membership, with username, role, active flag, and join date. Use before removing a member or issuing an invite link.
-
project_idinteger required
Project whose members to list
mcp:connectmembers:read
list_invite_links
List the project's one-time invite links with their tokens, paths, and consumption state. Owner-only. Use preview_create_invite_link to mint a new one.
-
project_idinteger required
Project whose invite links to list
mcp:connectmembers:read
list_tags
List every tag used on a project's notes with how many notes carry it, ordered by frequency. Use this to discover the project's tag vocabulary before tagging or calling list_notes_by_tag.
-
project_idinteger required
Project whose note tags to aggregate
mcp:connectnotes:read
get_note_path
Get the breadcrumb from the project root down to a note: every ancestor in order plus a human-readable 'A / B / C' string. Use it to explain where a note lives before moving or updating it.
-
note_idinteger required
Note to trace back to the root
mcp:connectnotes:read
get_note_children
List the direct children of a note in sibling order, with each child's own children count. Cheaper than get_note_tree when you only need to walk one level at a time.
-
note_idinteger required
Parent note whose direct children to list
mcp:connectnotes:read
list_ai_analyses
List stored AI analyses for a project (presentation, audience, strategy) with token usage and cost. Set include_content=true to get the full analysis body and prompt instead of a 500-character preview.
-
project_idinteger required
Project whose analyses to list -
typestring
Filter by analysis type -
include_contentboolean
Return the full analysis body and prompt (default false) -
limitinteger
Maximum analyses to return (default 10)
mcp:connectanalyses:read
get_project_stats
Get counts and health metrics for a project in one call: notes by type/relation/depth, tasks by status and priority, ideas, comments, analyses, members, change count, and last activity timestamps. Use it to report progress without pulling content.
-
project_idinteger required
Project to summarize
mcp:connectprojects:read
export_project
Export the whole project as one JSON document: metadata, flat notes, the note tree, tasks, ideas, comments, AI analyses, public settings, and change log. Sections your token cannot read are skipped and named in omitted_sections. Use for backups, migrations, or loading everything into another tool.
-
project_idinteger required
Project to export -
include_changesboolean
Include the change log section (default true) -
changes_limitinteger
How many change-log entries to include (default 50)
mcp:connectprojects:read
whoami
Report the identity behind this connection: the Nibvine user, whether the credential is a scoped external token or a user token, its scopes, its project binding (if any), the accessible project IDs, and exactly which tools your scopes allow or block. Call this when a tool fails with a scope error.
mcp:connect
Write previews
Each of these stages a change and returns an action id to commit.
preview_create_project
Preview creating a new Nibvine project. Returns a write_action_id — review the preview, then call commit_write_action to execute. Preview expires in 30 minutes.
-
titlestring required
Project name (required) -
descriptionstring
Short description of what the project is -
goalstring
What the project aims to achieve -
visionstring
Long-term direction and spirit of the project -
unique_taskstring
What makes this project different -
target_audiencestring
Who the project is for -
success_metricsstring
How success will be measured -
tech_stackarray
Technologies, e.g. ['Python', 'Django', 'React'] -
constraintsstring
Budget, timeline, or resource limits -
categorystring
Project category (default 'web') -
prioritystring
Project priority (default 'medium')
mcp:connectprojects:write
preview_update_project
Preview updating project metadata. Pass only the fields you want to change. Returns a write_action_id — review, then commit. Preview expires in 30 minutes. Call get_project first to see current values.
-
project_idinteger required
Project ID, from list_projects -
titlestring
New project name -
descriptionstring
New description -
goalstring
New goal -
visionstring
New long-term vision -
unique_taskstring
What makes this project different -
target_audiencestring
Who the project is for -
success_metricsstring
How success is measured -
tech_stackarray
Technologies, e.g. ['Python', 'Django', 'React'] -
constraintsstring
Budget, timeline, or resource limits -
categorystring
Project category -
prioritystring
Project priority -
completion_percentageinteger
Progress estimate from 0 to 100 -
is_draftboolean
Keep the project in draft state -
is_archivedboolean
Archive or unarchive the project -
formatted_ideastring
Full idea write-up for copying between chats -
ai_contextobject
Structured JSON context stored for the LLM -
insightsarray
Accumulated insights about the project -
suggested_goalsarray
AI-suggested goals -
suggested_tasksarray
AI-suggested tasks
mcp:connectprojects:write
preview_create_note
Preview creating a new note. Set parent_note_id to nest under an existing note (use get_note_tree to find IDs). Returns write_action_id — review, then commit. Preview expires in 30 minutes.
-
project_idinteger required
Project ID, from list_projects -
parent_note_idinteger
ID of parent note to nest under (omit for root-level) -
titlestring
Note title (defaults to the first 80 characters of content) -
contentstring required
Note body — required, markdown supported -
typestring
Block type, default 'text' -
relation_typestring
branch=major topic, dependency=depends on parent, reference=reference material, what_if=hypothesis, related=general -
tagsarray
Tags for cross-cutting search, e.g. ['api', 'urgent']
mcp:connectnotes:write
preview_update_note
Preview updating an existing note. Pass only the fields you want to change. Call get_note(note_id) first to see current content. Returns write_action_id — review, then commit. Preview expires in 30 minutes.
-
note_idinteger required
Note to update, from get_note_tree or search_notes -
project_idinteger
Optional: the note's project, inferred when omitted -
titlestring
New title -
contentstring
New body — replaces the current content -
typestring
New block type -
relation_typestring
New relation to the parent note -
tagsarray
Replacement tag list (replaces all existing tags)
mcp:connectnotes:write
preview_create_task
Preview creating a new task. Returns write_action_id — review, then commit. Preview expires in 30 minutes.
-
project_idinteger required
Project ID, from list_projects -
titlestring required
Task title (required) -
descriptionstring
What the task involves -
prioritystring
Task priority, default 'medium' -
statusstring
Default: todo -
is_completedboolean
Must agree with status ('done' means completed) -
due_datestring
YYYY-MM-DD format
mcp:connecttasks:write
preview_update_task
Preview updating an existing task. Pass only changed fields. Call get_task(task_id) or list_tasks(project_id) to find task IDs. Returns write_action_id — review, then commit. Preview expires in 30 minutes.
-
project_idinteger
Optional: the task's project, inferred when omitted -
task_idinteger required
Task to update, from list_tasks -
titlestring
New title -
descriptionstring
New description -
prioritystring
New priority -
statusstring
New status; setting 'done' also marks the task completed -
is_completedboolean
Must agree with status ('done' means completed) -
due_datestring
YYYY-MM-DD format
mcp:connecttasks:write
preview_delete_note
Preview deleting a note. By default cascades (deletes children too). Set cascade=false to reparent children to the deleted note's parent. Returns write_action_id — review, then commit.
-
note_idinteger required
Note to delete, from get_note_tree or search_notes -
cascadeboolean
Delete children too (default true). False = reparent children to the deleted note's parent.
mcp:connectnotes:write
preview_delete_task
Preview deleting a task. Returns a write_action_id — review the preview, then call commit_write_action. Deletion is permanent; prefer preview_update_task(status='done') to close work you want to keep. Preview expires in 30 minutes.
-
task_idinteger required
Task to delete (from list_tasks) -
project_idinteger
Optional: the task's project, inferred when omitted
mcp:connecttasks:write
preview_delete_project
Preview deleting an entire project with all of its notes, tasks, ideas, comments, analyses, and history. Owner-only and irreversible: confirm_title must exactly match the project's current title. Returns a write_action_id — review the counts in the preview, then call commit_write_action.
-
project_idinteger required
Project to delete -
confirm_titlestring required
Must equal the project's exact title, as a typo-guard
mcp:connectprojects:write
preview_move_note
Preview re-parenting a note (with its whole subtree) and/or repositioning it among its siblings. Pass new_parent_note_id=null to move it to the project root; omit it to keep the current parent and only change position. position is the zero-based index among the target siblings; omit to append last. Depth and order of every descendant are recomputed on commit.
-
note_idinteger required
Note to move -
new_parent_note_id['integer', 'null']
New parent note ID, or null for the project root. Omit to keep the current parent. -
positioninteger
Zero-based index among the target siblings (omit to append) -
project_idinteger
Optional: the note's project, inferred when omitted
mcp:connectnotes:write
preview_reorder_notes
Preview reordering a sibling group. note_ids is the new front-to-back order and must contain direct children of parent_note_id (omit parent_note_id to reorder the project's root notes). Siblings you leave out keep their relative order after the listed ones. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project that owns the notes -
parent_note_id['integer', 'null']
Parent whose children are being reordered; omit or null for root notes -
note_idsarray required
Note IDs in their new order, first to last
mcp:connectnotes:write
preview_create_idea
Preview adding an idea to a project's idea list. Ideas are flat, lightweight sparks — use notes for structured knowledge and tasks for work items. Returns a write_action_id — review, then commit. Preview expires in 30 minutes.
-
project_idinteger required
Project to add the idea to -
titlestring
Short label (defaults to the first 80 characters of content) -
contentstring required
The idea itself -
is_implementedboolean
Mark as already implemented (default false)
mcp:connectideas:write
preview_update_idea
Preview updating an idea. Pass only the fields you want to change — typically is_implemented=true once the idea ships. Returns a write_action_id — review, then commit.
-
idea_idinteger required
Idea to update (from list_ideas) -
project_idinteger
Optional: the idea's project, inferred when omitted -
titlestring
New title -
contentstring
New content -
is_implementedboolean
New implementation state
mcp:connectideas:write
preview_delete_idea
Preview deleting an idea permanently. Returns a write_action_id — review, then commit. Consider preview_update_idea(is_implemented=true) instead when the idea was simply completed.
-
idea_idinteger required
Idea to delete (from list_ideas) -
project_idinteger
Optional: the idea's project, inferred when omitted
mcp:connectideas:write
preview_create_comment
Preview posting a comment into the project's chat stream. Attach it to a note with note_id, or reply inside a thread with parent_comment_id. role defaults to 'assistant' — the correct role for messages an AI agent writes; use 'user' only when relaying something the human said. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project to comment on -
contentstring required
Comment body (markdown is rendered in the web UI) -
rolestring
Author role, default 'assistant' -
note_idinteger
Attach the comment to this note instead of the project as a whole -
parent_comment_idinteger
Reply inside this thread (from list_comments / get_comment_thread) -
metadataobject
Optional JSON metadata stored alongside the comment
mcp:connectcomments:write
preview_create_quick_note
Preview capturing a quick note — free-form text parked for later placement in the note tree, exactly like the web quick-capture box. Optionally suggest a parent note. Use this when you have a thought worth keeping but no clear home yet; use preview_create_note when you know where it belongs. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project the quick note belongs to -
contentstring required
Raw captured text -
statusstring
Pipeline stage to start in (default 'draft') -
suggested_parent_note_idinteger
Note this capture probably belongs under
mcp:connectquicknotes:write
preview_import_notes
Preview importing a whole note subtree in one call. notes is a nested array where each node may carry its own children array, so a full branch (parents and descendants) is created by a single commit. Attach it under parent_note_id or omit that for new root branches. Limits: 200 notes and 10 levels per import. Returns a write_action_id whose preview contains the outline — review, then commit.
-
project_idinteger required
Project to import into -
parent_note_id['integer', 'null']
Existing note to hang the imported tree under; omit or null for root-level branches -
notesarray required
Top-level nodes to create, in order
mcp:connectnotes:write
preview_batch_create_notes
Preview creating up to 100 notes in one write action. Each entry is flat and may name an existing parent_note_id; parents created in the same batch are NOT addressable — use preview_import_notes for a new hierarchy. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project to create the notes in -
notesarray required
Notes to create, in order
mcp:connectnotes:write
preview_create_invite_link
Preview minting a new one-time invite link that lets another person join the project as a member. Owner-only. The committed result contains the token and the shareable URL. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project to invite someone to
mcp:connectmembers:write
preview_remove_member
Preview revoking a member's access to a project by deactivating their membership. Owner-only; the owner cannot be removed. Identify the member by username or user_id from list_project_members. Returns a write_action_id — review, then commit.
-
project_idinteger required
Project to remove the member from -
usernamestring
Member's username (from list_project_members) -
user_idinteger
Member's user ID, as an alternative to username
mcp:connectmembers:write
Commit and control
list_write_actions
List write actions created with this token — by default the pending previews that are still waiting for commit_write_action. Pass status='all' to include committed, expired, and canceled ones. Use it to recover a write_action_id you lost.
-
project_idinteger
Only actions targeting this project -
statusstring
Status filter (default 'preview') -
limitinteger
Maximum actions to return (default 20)
mcp:connect
cancel_write_action
Discard a pending write action so it can never be committed. Use it when the preview is wrong or the user declines. Already-committed actions cannot be canceled; expired previews simply become uncommittable on their own.
-
write_action_idstring required
UUID returned by any preview_* tool
mcp:connect
commit_write_action
Execute a previously previewed write action. Call this after reviewing the preview from any preview_* tool. The write_action_id comes from the preview response. Previews expire after 30 minutes — if expired, create a new preview.
-
write_action_idstring required
UUID returned by any preview_* tool
mcp:connect