Skip to content
Agentmart
Submit a tool

CollHub

Documents, projects, comments, workflows and data sources of your CollHub instance, as tools.

Connector by collhub.comOfficial · Domain verified by the MCP Registry

IndexedLicense unknownLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/collhub-com-collhub

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Documents, projects, comments, workflows and data sources of your CollHub instance, as tools.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
38 read · 29 write · 5 delete · 3 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Tools by what they do 75

Read from the source code; the running server may list different tools.

Read 38 · Look things up without changing anything.

  • convert_document
  • diff_versions
  • find
  • find_similar
  • get_collection
  • get_document_history
  • get_document_info
  • get_document_passages
  • get_document_toc
  • get_plan
  • get_project_brief
  • get_project_graph
Show 26 more tools
  • get_workflow
  • list_bookmarks
  • list_collections
  • list_comments
  • list_data_sources
  • list_document_types
  • list_eligible_workflows
  • list_folder
  • list_instances
  • list_labels
  • list_metadata_fields
  • list_next_steps
  • list_node_kinds
  • list_principals
  • list_project_templates
  • list_projects
  • list_relationship_types
  • list_relationships
  • list_threads
  • list_workflows
  • query_data_source
  • read_document
  • read_documents
  • read_stream
  • search_documents
  • whoami

Write 29 · Create, change, send or run things.

  • add_bookmark
  • add_comment
  • apply_project
  • create_collection
  • create_data_source
  • create_document
  • create_folder
  • create_label
  • create_project
  • create_relationship
  • edit_document
  • insert_records
Show 17 more tools
  • login
  • logout
  • mark_headings
  • move_document
  • rename_document
  • replace_in_document
  • resolve_comment
  • send_message
  • set_document_status
  • unlock_document
  • update_label
  • update_metadata
  • update_plan
  • update_records
  • upload_document
  • write_document
  • write_stream

Delete 5 · Delete, drop, revoke or wipe things.

  • delete_comment
  • delete_records
  • delete_relationship
  • remove_bookmark
  • update_labels

Not yet classified 3 · We could not tell from the name and description.

  • list_thread_messages
  • locate_regex
  • renumber_document

Secrets and settings it asks for

Other settings (environment variables or headers).

  • COLLHUB_URL

Tools (75)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_bookmark

    Bookmark a document or a section for the user (their private pointer — visible in their bookmarks panel). Pass document_id for a whole-document bookmark, or section_id (durable id from get_document_toc or a passage's #s uri) for one section — section bookmarks keep resolving after the document is edited. Bookmarking the same target twice errors.

  • add_comment

    Add a comment — one, or MANY in one call. Modes: (1) whole_document=true — no anchor, pinned at the top, for remarks about the document as a whole; (2) section_id — the section's current span, resolved server-side (a gone section refuses); (3) from/to offsets (from locate_regex); (4) search_text — find and anchor in one call, must match exactly once (search_from narrows). Replies: parent_id and no anchor, to a TOP-LEVEL comment only (two levels deep). BATCH: comments: [{document_id, content, …}] — each item carries its own mode and anchor, items succeed or fail on their own, results come back …

  • apply_project

    Create, revise and re-wire project nodes and edges in one batch — the write counterpart of get_project_graph. CREATING: each node names a kind (the backend resolves doctype + kind label and starts its workflow); edges are the (src, rel, dst) triples the graph shows and may reference nodes created in the same call by `ref`; created nodes are born published. MAINTAINING: nodes_update patches (re-kind, metadata, labels, rename, move, archive), edges_update renames/re-annotates, edges_delete removes — deletions apply before creations, so moving a task between milestones is one call. An edge endpoi…

  • convert_document

    Convert a document into another format, as a NEW document beside it: Word (docx), PowerPoint (pptx), PDF, markdown. The new document lands in the source's collection and folder, named after it with the new extension; the source is untouched — a conversion never retypes a document in place, so "convert this note to Word" means a .docx is born next to the note. Say so when you report the result. `convertible_to` on the source type's entry in list_document_types says which targets it reaches. Markdown is reached only from a Word file and the import loses complex tables and list nesting: run it wh…

  • create_collection

    Create a new collection. Collections group related documents with custom metadata schemas. Private and hierarchical by default: pass is_private=false only for a collection every user should see, is_hierarchical=false only for a flat one.

  • create_data_source

    Create a new data source from JSON data. Columns and types are auto-inferred from the data. An "id" column (uuid, auto-generated) is added automatically. Use this to store structured data for data binding in documents (charts, tables, templates).

  • create_document

    Create a document with content, published and unlocked (unlock:false keeps the lock). `type` (name or id from list_document_types) is REQUIRED for the semantic markdown types (Task, Decision, Note, …), which all share ".md"; with it the name needs no extension, and one present must be accepted by the type. Without type the backend picks the type owning the name's extension (no extension → ".md" → Markdown). The type cannot be changed afterwards. Folders and projects are create_folder / create_project (rejected here). `metadata` sets typed fields, validated against the type's effective schema. …

  • create_folder

    Create a folder inside a hierarchical collection. The collection must have is_hierarchical=true. Use parent_id to nest folders within other folders, or omit to create at the root level.

  • create_label

    Create a label. A dot path creates missing parents as unassignable ("legal.civile"); returns the labels created; errors if the leaf exists (list_labels first). Write a meaningful `description`: it is embedded and used at ingestion to auto-extract the label. EXCLUSIVE AXIS: every attribute lands on the LEAF, never on an auto-created parent — for mutually exclusive children (kind.*), create the parent FIRST with is_assignable:false and max_child_card:1, then the children. update_label repairs an existing group.

  • create_project

    Create a project in a hierarchical collection, scaffolded from a template, in one call. Its own markdown is the BRIEF: unless scaffold=false the template's skeleton — patched with the summary/objective/context/scope/success_criteria seeds — becomes the content, and the anchor documents (AGENTS.md, REFERENCES.md) are seeded as published children; references fills REFERENCES.md and links each source. Templates are the project types (list_project_templates): default "simple" (task-first), "structured" only when dense source material needs grounding first. Scaffolding is best-effort — problems arr…

  • create_relationship

    Create a typed relationship from document_id to dst_document_id (type_id from list_relationship_types; for the inverse direction swap the endpoints). NOT for a plain reference a body link already derives — see the guide's "Relationships and cross-references"; reserve it for the semantic types a link cannot encode (implementation, derivation, addressing, …), created even when a link sits beside the mention. `tracking` (src_rel "tracks") goes FROM a Tracker TO each task it follows and drives the tracker's derived status; prerequisites are `dependency` (dependsOn), which derives no status.

  • delete_comment

    Delete a comment from a document.

  • delete_records

    Delete records from a data source matching the given filters.

  • delete_relationship

    Delete a relationship from a document.

  • diff_versions

    Compare two versions of a document and return a unified diff. Use get_document_history to discover available version numbers. Omit from_version to diff against an empty document (i.e. see everything added in to_version).

Show 60 more tools
  • edit_document

    Replace text in a document, three forms. TEXT form: old_text → new_text, exactly one match required (section_id or search_from narrows the search; replace_all replaces every match). RANGE form (old_text OMITTED): when you already hold an exact span, pass from/to + expect_revision copied from the locate_regex result — never re-type the span as old_text (one mistyped character fails the edit); a stale expect_revision rejects the edit instead of splicing at shifted offsets; from == to inserts. SECTION form (old_text omitted, section_id alone): replaces the WHOLE section, its span resolved live (n…

  • find

    Keyword search in one collection that returns the matching passages with their text: the documents that match, best first, the top ones with their best passages and the enclosing section (breadcrumb, span, durable uri). It matches by keywords only: use search_documents for a question or a topic whose wording may differ from the text. The query reads the text, the name and the short metadata values of a document. A result that matched in its passages reports `matches`, the number of passages the search found for it (at most 10); a result without `matches` matched by its name or short metadata v…

  • find_similar

    Documents in the same collection that resemble a given one, most similar first — takes a document instead of a query, so it reaches near-duplicates, earlier/later versions and same-subject neighbours in other words, which keyword search cannot. The tail is autocut where similarity drops, generously on a single-subject corpus: treat the ORDER as the signal, not list membership. Scores are not comparable across source documents. To group a collection, call per document and read each list on its own: a pair that ranks each other highly (reciprocal rank) is a weak secondary signal at most, not wha…

  • get_collection

    Get full details of a collection including permissions and configuration. Its `instructions`, when set, say how documents there are written and handled: follow them for every document of the collection.

  • get_document_history

    Get the version history of a document.

  • get_document_info

    Get metadata for a document, or for MANY in one call (document_ids, max 200 — one list read, every id answered in the order asked; a missing or unreadable one is an {error} entry, so an absence never needs a second call). Returns label_ids (the raw label id array); use include to request extra fields — status_object (the current workflow step) is null unless included. The batch form serves each document's compact list shape (published version, parent_id, status_id, label_ids, metadata, plus what include adds): where it lives, whether it is open, who holds it. type_instructions, when the single…

  • get_document_passages

    Extracted passages in document order — the only text of a binary (PDF, DOCX, …), a passage index for markdown. offset/limit count PASSAGES; query keeps only the matching passages, still in document order and not ranked (find ranks documents across a collection); page restricts to one source page label (a workbook's sheet position); seq_num reads the exact passage a find result cited. section_id reads ONE SECTION of a binary — a PDF whose embedded outline gave it sections, or a workbook, one section per sheet (get_document_toc reports frame "extracted" and each section's page): the passages ins…

  • get_document_toc

    Document outline: the live section tree — durable section ids (deep-linkable as #s{id}), heading, level, from/to spans, occurrence (> 1 = duplicate heading). No content is read; the ids feed read_document, edit_document, add_comment, add_bookmark, and are the id source for cross-reference links (/documents/{id}#s{section_id} — see the guide's "Relationships and cross-references"). `frame` says what the spans count into: "native" (the markdown) or "extracted" — a PDF whose embedded outline gave it sections, each with its `page` (1-based) and `boundary: "page"` when its heading was not located i…

  • get_plan

    Read an agent plan, or the part of it you hold: the open steps of node's subtree as a tree, with ids. The status of a step that contains steps is computed from them (never a stale stored one); a step handed to another agent shows as one line with its executor and last activity. Read on a step, it starts with the step's brief, your starting context. Then: ready (pending, with every predecessor of it and of the steps containing it done), running, blocked with its question and the update_plan {id, answer} that answers it (or its answer), and finished steps counted — the steps that contain nothing…

  • get_project_brief

    First project intake: the visible markdown brief plus document counters, to size the get_project_graph read. Counts cover every readable document in non-deleted branches (root, containers, hidden anchors, archived, unclassified); Tasks and Trackers are counted separately, by_kind/by_type include both. Returns source/version, truncation and next_offset (code points); possibly_depth_limited means counts may be lower bounds. No bodies, no edges. latest_document_modified_at is NOT a graph-change watermark: never pass it as get_project_graph.since, which wants the newest modified_at already seen fr…

  • get_project_graph

    Read a page of the project graph: the subtree's documents as nodes (kind and lifecycle state resolved) plus typed, directional edges. Default limit 500, max 1000: follow next_after with identical filters until null (edges may target nodes on other pages; truncated stays true on the last page when after > 0). Each node is compact — id, name, kind, state (display label), status (the step name set_document_status takes), group, type_name, parent_id, depth, modified_at, labels, metadata, locker, outgoing edges; empty fields omitted, metadata.snippet only with snippet:true. `fields` keeps only what…

  • get_workflow

    Get the full definition of a workflow: all steps (states), transitions (directed edges between steps) and accepted_types — the document types it applies to, as [{type_id, type_name}]. Use to understand the complete lifecycle graph before transitioning a document.

  • insert_records

    Insert one or more records into an existing data source.

  • list_bookmarks

    The user's private bookmarks on documents and sections. Section bookmarks carry a durable target_uri (collhub://documents/{id}#s{section_id}); section_gone: true = the section was edited away, inaccessible: true = the target is no longer readable.

  • list_collections

    List available collections. Use this first to discover collection IDs before searching or browsing documents.

  • list_comments

    List comments on one document, or on MANY in one call (document_ids, max 200 — every id is answered, so an empty list is a fact; get_project_graph comment_counts says which nodes have any). Filter by source and resolved. Comments routinely correct the document they sit on: read them before acting on a body. Two system-maintained stamps per comment: section_id (the enclosing section) and location_state — "exact": location.from/to sit on the quoted text; "approximate": the anchor was re-homed after edits — treat the offsets as a neighbourhood and re-locate the quote before acting on them.

  • list_data_sources

    List available data sources. Returns source names and schemas.

  • list_document_types

    List available document types that can be created — the complete list, never a page. Call this before create_document to discover valid types. A type's `instructions` (own or inherited from its parent type) say how its documents are written — what the body must and must not contain: FOLLOW them when you create or edit a document of that type. `convertible_to` lists the mime types a document of the type can be turned into with convert_document. A format missing from THIS list is not unavailable: the list holds the types you can author, and DOCX, for one, is a type documents are converted into a…

  • list_eligible_workflows

    List the workflows that can be applied to a document, based on its document type. Returns each workflow with its steps. To put the document into a workflow, call set_document_status with the id of that workflow's is_initial step.

  • list_folder

    List the contents of a folder or project, folders and projects first (an is_folder item can be listed further by its id). For navigating INSIDE a hierarchical collection — a flat collection, or a hierarchical collection's top level, is listed with search_documents(collection_id). depth: 1 (default) immediate children, N levels, 0 the entire subtree; when depth != 1 each item carries parent_id. filters narrow by type_id, name, labels or metadata; limit 0 (default) is unbounded.

  • list_instances

    List the configured CollHub instances. Pass an instance name as the `instance` argument of any tool to target it; omit it to use the default. There is no persistent "current instance" — routing is per call, so parallel sessions never interfere.

  • list_labels

    List labels — the complete list, never a page — to find ids for update_labels or check existence before create_label. Empty fields are left out; the document_deny_* ACL lists only with include_deny.

  • list_metadata_fields

    Metadata fields and their types. Without type_id: the collection-level fields (the filter fields for search_documents). With type_id: the EFFECTIVE schema of that document type in the collection — collection fields merged with the type's own (a Task's assignee, due_date, priority, estimate). When WRITING metadata use each field's `metadata_key`, NOT its display name: type-scoped fields are prefixed (name "assignee" → "type:assignee"); `scope` says which.

  • list_next_steps

    The valid transitions from a document's current workflow step — one hop, each with the step it leads to; pass a returned step_id to set_document_status. Empty when the document is in no workflow or on a terminal step. For the whole lifecycle graph call get_workflow; to reach a step several hops away give set_document_status the destination — it resolves the route.

  • list_node_kinds

    The project ontology: the kinds apply_project accepts (group, description, lifecycle policy), the configured methodologies with their guidance, and contexts. SVG icons only with include_icons.

  • list_principals

    Users and groups — the directory behind principal-typed fields such as a Task's `assignee`, which accept a name on write but store a numeric id. `query` (case-insensitive substring of username, first/last name, email or group name) turns "luca" into the id; `ids` labels ids read back from a document. One id space for both. Only users, teams and dynamic teams can hold an assignment. Capped per kind at `limit` (default 100, max 500): truncated: true + truncated_kinds says a kind has more.

  • list_project_templates

    The project templates create_project can scaffold from — each a brief skeleton + anchor documents, stamping its like-named methodology on the project.

  • list_projects

    List projects across all collections (most recently modified first) as {count, projects}; truncated: true says more than limit match. A project is a special folder that anchors AI project workflows. Take one in with get_project_brief (brief + counts, sizes the graph read) then get_project_graph; list_folder walks its file tree, set_document_status advances its workflow.

  • list_relationship_types

    List available relationship types — the complete list, never a page. Call this before create_relationship to discover valid types and their directional labels.

  • list_relationships

    Description is built at runtime.

  • list_thread_messages

    Messages in a thread, chronological: role, content, attachments, tool calls. Paged — the result is {thread_id, messages, next}, and `next` is the call for the following page whenever one exists (null when the thread ends here); limit 0 returns the whole thread in one call. Never treat a full page as the end of the thread.

  • list_threads

    List AI chat threads. Returns id, name, type, status, and timestamps.

  • list_workflows

    List all workflow definitions with their steps — the complete list, never a page; enough to find a workflow's is_initial step. get_workflow gives the transitions, list_eligible_workflows the workflows applicable to a document.

  • locate_regex

    Regex matches in a document's markdown: from/to (code points), a snippet per match, and content_revision. TO REPLACE A MATCH pass its from/to plus content_revision (as expect_revision) to edit_document with old_text OMITTED — nothing re-typed, a stale range rejected. For targets inside prose, ::: blocks, table cells; for section-level targets get_document_toc already has the heading text and span (fall back to "^#+ .*$" here only when the TOC is empty). Default flags "im" (case-insensitive, ^/$ per line). Generated PDF types are searched in their markdown draft; a binary with no textual draft …

  • login

    Log in to the instance in the browser — only when the user asks. Plain: resumes the stored session, opens a browser only when there is none, and keeps the account this host was logged in as — when the browser is signed in as someone else, the login page asks the user which account to keep. `switch_user`, the only way to change account: opens the browser on the login form (signing the browser out first), so a different account can be entered even when the browser is already signed in; the previous session ends once the new login has landed, so a switch that fails leaves the user logged in as be…

  • logout

    Sign out of the instance — only when the user asks. Ends this host's session on the backend and forgets it here; the user's other sessions and the app stay signed in. The next call to that instance opens a browser login for the same account (another one is refused); `login` with `switch_user` changes account.

  • mark_headings

    Stamp status markers (✅ 🚧 ⬜ ⏸️) on headings addressed by NUMBER ("4.2") or exact TITLE; "" clears one; no marks = read back the heading map. IDEMPOTENT: an existing marker is REPLACED, never stacked — a regex character class cannot recognise these markers (⏸️ is two code points, 🚧 a surrogate pair), which is why replace_in_document silently appends a second one. Markers sit inside the title after any heading number, so renumber_document still parses it. Table rows, fenced code and headings outside `levels` are never touched; an unmatched key is reported, an ambiguous one written nowhere. Use…

  • move_document

    Move a document to another folder, project or collection: parent_id for a container (folder or project root — the document lands inside it), collection_id alone for that collection's root, both for a folder elsewhere. Content, versions, comments, labels, workflow status and relationships travel with it; edges to nodes left behind become cross-project links (visible via list_relationships, in neither graph). This is how a node moves between projects — apply_project cannot pull one in or push one out. Folders and projects cannot move across collections. 423 if checked out by someone else.

  • query_data_source

    Query rows from a data source. Supports PostgREST-style filters, column selection, ordering, and limits. A :::chart / :::table / :::template block binds the same query as a path, `name?select=…&col=op.value&order=…&limit=N`, built from these arguments.

  • read_document

    Read a document's native text: the whole document, a [from, from+length) code-point range, or one section (section_id, resolved server-side to its CURRENT span; a gone section lands on its absorbing/parent section with a warning; a stale stored span is relocated by its heading line, or the whole document is served with a warning — never the stale span). Output is bounded by max_chars: two blocks, the text then one JSON line {stream, version, from, to, total_chars, truncated, next, etag, content_revision, warnings} — when truncated is true call `next` verbatim, never treat a truncated read as t…

  • read_documents

    Read the native text of MANY documents in one call — the batch form of read_document for a bulk intake (every card of a project, a folder of notes): document_ids, at most 200, duplicates collapsed. max_chars (default 20,000, maximum 100,000) bounds EACH document, from its start. One JSON entry per document, in the order asked: {document_id, name, stream, version, content, from, to, total_chars, truncated, next} — when truncated is true, next is the read_document call for the rest of that document: call it verbatim, never treat the head as the whole. version is null for your own unpublished dra…

  • read_stream

    Read a named stream from a document as text. System streams are "draft" (Markdown), "data" (JSON), "style" (CSS: the theme binding and the document's own rules) and "theme" (CSS: the private slot overlay); an application stream carries a typed extension (props.json, notes.md). A stream whose type is not textual errors instead of dumping bytes. The text comes with a JSON line {etag, content_revision}: write_stream over this content names the etag.

  • remove_bookmark

    Remove one of the user's bookmarks (id from list_bookmarks).

  • rename_document

    Rename a document by changing its `name` field. File-named documents keep their extension ("Report Q3.pdf"); typed documents keep plain titles (see the guide's "Creating documents"). Does not change collection, content, or version. To move across collections or folders, use move_document.

  • renumber_document

    Re-sequence a document's already-numbered headings with Word-style multilevel numbers (1, 1.1, 1.1.1) from nesting + position, and remap the inline §refs using the same scheme so they stop drifting. By default only headings ALREADY carrying a number are re-sequenced — the title and preamble headings ("## Related") stay clean. Do NOT use it to ADD numbers to a clean document: numbering is moving to render-time CSS, and baking numbers in fights that (skip_unnumbered:false is a deliberate opt-out). Preview-first (heading map + diff); on commit locks if needed and leaves the document locked.

  • replace_in_document

    Bulk regex find/replace across a document — the sed/awk-style tool. Each rule: `pattern` (JS regex) + `replacement` with $1/$<name> captures and COMPUTED `${expr}` values, where a capture resolves to its NUMERIC value (pattern "§(?<n>\\d+)" + replacement "§${n+3}" shifts every section number by 3 in ONE rule); an optional `where` guard (boolean, same language) skips matches. Rules apply in one cascade-safe left-to-right pass (single_pass). ^ and $ are string-anchored without the "m" flag; case-sensitive without "i". Preview-first (diff + per-rule counts); on commit locks if needed, splices, le…

  • resolve_comment

    Toggle the resolved status of a comment.

  • search_documents

    Finds the documents of one collection that match a query, by keywords and by meaning, and filters them by fields; collection_id=0 lists/filters across ALL collections (system fields only, no query). Use it to learn WHICH documents are relevant; use find to read the matching passages. The query reads the text, the name and the short metadata values of a document. Structured filters need field names from list_metadata_fields; cursor pages. Each query result reports WHERE it matched: by default the distinct sections that hold its matches (breadcrumb + durable #s{id}, usable as read_document secti…

  • send_message

    Send a message to a thread and wait for the turn that answers it (no thread_id = a new "chat" thread). The result names thread_id, message_id, turn_id and the turn's outcome, with the messages of that turn. Past the timeout it is no error: status "running" (its turn goes on) or "waiting" (no turn took it yet) with the ids — read the answer later with list_thread_messages, never send the message again. Edits follow the thread's edit mode: "auto" applies and publishes them; "manual" writes them into the locked draft and withholds the publish for a human to approve — written, not proposed; only a…

  • set_document_status

    Change a document's workflow status — one document, or MANY in one call. (1) ENTER: the is_initial step_id from list_eligible_workflows; (2) TRANSITION: a step_id from list_next_steps; (3) EXIT: step_id=null (from a terminal step only); (4) BATCH: documents: [{document_id, step}] with step an id, a step NAME or label ("completed", "In Review") or null — names where each document must END UP and walks the route (several hops = one call); items succeed or fail on their own and each result reports path, the steps walked. Every result carries effects — what the move did to RELATED documents (a tra…

  • unlock_document

    Unlock a document after editing. Call this when done writing to release the lock. Unlocking PUBLISHES: it mints the new version and re-extracts the section tree, so a stale TOC (spans_fresh: false) is refreshed by this call — there is no other refresh. It publishes only a lock this server took whose draft holds only writes made here: a draft that is a person's (their editor's lock), or that took a write made elsewhere, is refused — the person publishes it. After a refused write here, it publishes once a write lands again.

  • update_label

    Patch a label: rename, recolour, rewrite the description, or change its behaviour — the only way to repair a label after creation (create_label errors on an existing path and puts every attribute on the leaf, so an auto-created parent is fixed only here: e.g. max_child_card:1 to make an existing group exclusive). `name` renames IN PLACE, descendants included — the path is rebuilt, so anything holding the old path by string goes stale (ids do not). Omitted fields are left alone.

  • update_labels

    Add or remove labels on a document. Use list_labels to discover available label IDs. Use get_document_info with include=["labels"] to see current labels.

  • update_metadata

    Set metadata field values on a document — collection fields plus the document type's own (a Task's assignee, due_date, priority; list_metadata_fields with the type_id shows them). Keys are each field's metadata_key; bare type-field names are auto-prefixed to `type:`. Partial merge: only the given fields change; null removes one. `expected` names, for every key you change, the value you read (get_document_info; null if it had none): a key someone changed since is refused with its current value — read it again before deciding.

  • update_plan

    Create or change an agent plan — for agents; people keep projects and tasks. A plan is a todo list that lasts: steps can contain steps, come `after` other steps, and go to another agent with `executor`. Change only the steps under the node you hold. Never give a status to a step that contains steps. Worth it when steps outlive a turn, more than one agent works, or the order matters. Without node and with goal: creates the plan in your personal system/plans/ (first line of the goal = its name) and returns its id; get_plan(id) resumes it from any session. node = the plan, or the step handed to y…

  • update_records

    Update records in a data source matching the given filters.

  • upload_document

    Upload a local file — as a NEW document, or as the next version of an existing one. The bytes go from disk to the server, never through the conversation: use it for any binary or large file. New: collection_id, or parent_id alone — a folder or project in any collection, which the document is created inside (no move needed). name defaults to the file name; keep the extension, it picks the type unless `type` names one. document_id instead writes the file as that document's new content: same id, links and history; name, type and place stay (rename_document, move_document change them). With docume…

  • whoami

    Who the server is logged in as on the instance: `user` (email, name) first, then the session (the host profile it belongs to) and the account (id, privileges, memberships). Answer a "who am I logged in as" question with the email.

  • write_document

    Write markdown to an existing document: the whole content, or from a code-point position onward — `from` REPLACES everything from that position to the end (to append, pass the document's length). Pass the etag your read_document returned: the write lands only on the content you read, and a refusal (412) means it changed since — re-read and redo the change, never resend. Locks if needed, commits, leaves the document locked; the result carries the etag a next write names. Generated PDF types write to the draft stream. For a change inside existing content prefer edit_document. Every mention of an…

  • write_stream

    Write the whole content of a named stream on a document; the write commits by itself. Over an existing stream pass the etag your read_stream returned (a refusal means it changed: re-read, never resend); without etag the write only creates a stream that does not exist yet. Writing "main", or "draft" of a type that generates from Markdown, locks the document if needed and leaves it locked; another stream of an unlocked document is written without a lock. The name declares the type: a system stream ("draft", "data", "style", "theme") or an application stream with a typed extension (props.json, no…

Signals

Weekly downloads
115
Last release
Oct 21, 2026 (7 days ago)
Last package publish
Oct 21, 2026 (7 days ago)

From the package registry.

Details

Registry name
com.collhub/collhub
Version
1.3.0
Auth
No auth
Packages
npm @collhub/mcp
License
License unknown
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

CollHub MCP server. Agent Mart. https://agentmart.dev/connectors/collhub-com-collhub (last updated 2026-10-25)