Mmcp.market

CollHub MCP server

by collhub.com·com.collhub/collhub·v1.0.0

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

C68/100grade C
What users say
No reviews yet
Be the first
Safety scan
C68/100

full report

Adoption
New

Little public usage data yet

Reviews

Write one

Nobody has reviewed CollHub yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

CollHub tools (72, 20 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • add_bookmark

    Bookmark a document or a section for the user (their private pointer \u2014 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 \u2014 section bookmarks keep resolving after the document is edited. Bookmarking the same target twice errors.

  • add_comment
  • apply_project
  • create_collectionwrite action

    Create a new collection. Collections group related documents with custom metadata schemas. Set is_hierarchical=true when the user asks for a "hierarchical collection" or "collection with folders".

  • create_data_sourcewrite action

    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_documentwrite action
  • create_folderwrite action

    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_labelwrite action

    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 \u2014 for mutually exclusive children (kind.*), create the

  • create_projectwrite action

    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 \u2014 patched with the summary/objective/context/scope/success_criteria seeds \u2014 becomes the content, and the anchor documents (AGENTS.md, REFERENCES.md) are seeded as published children; references fills REFERENCES.md and links e

  • create_relationshipwrite action

    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 \u2014 see the guide's "Relationships and cross-references"; reserve it for the semantic types a link cannot encode (implementation, derivation, addressing, \u2026), created even when a link sits

  • delete_commentwrite action

    Delete a comment from a document.

  • delete_recordswrite action

    Delete records from a data source matching the given filters.

  • delete_relationshipwrite action

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

  • edit_document
  • find

    BM25 keyword search in one collection \u2014 exact terms, ranked by lexical relevance (search_documents for semantic queries). The top results carry their best passages with content and enclosing-section context (breadcrumb, span, durable uri); every result reports `matches`, its total matching passages. Passage ranges are half-open code points; passage_source says which extraction the evidence co

  • find_similar

    Documents in the same collection that resemble a given one, most similar first \u2014 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

  • 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 \u2014 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 \u2014 status_object (the current workflow step) is null unless included. The batch form serv

  • get_document_passages
  • get_document_toc
  • 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 co

  • get_project_graph
  • get_workflow

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

  • insert_recordswrite action

    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 \u2014 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 locat

  • list_data_sources

    List available data sources. Returns source names and schemas.

  • list_document_types

    List available document types that can be created \u2014 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 \u2014 what the body must and must not contain: FOLLOW them when you create or edit a document of that type.

  • 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 \u2014 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

  • 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" \u2014 routing is per call, so parallel sessions never interfere.

  • list_labels

    List labels \u2014 the complete list, never a page \u2014 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 \u2014 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 pr

  • list_next_steps

    The valid transitions from a document's current workflow step \u2014 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 \u2014 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 \u2014 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

  • list_project_templates

    The project templates create_project can scaffold from \u2014 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). 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 \u2014 the complete list, never a page. Call this before create_relationship to discover valid types and their directional labels.

  • list_relationships

    A document's relationships, outgoing and incoming, with the related document and the directional label. Link-derived edges carry origin "xref" (no origin = made by hand) and SECTION granularity: from_section (the section holding the link) and to_section (the one addressed), each {id, document_id, heading, uri} \u2014 `gone` when the body still cites a removed section, `unknown` when its tree was u

  • list_thread_messages

    Messages in a thread, chronological: role, content, attachments, tool calls. Paged \u2014 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 \u2014 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 \u2014 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

  • login

    Log in to the instance in the browser \u2014 only when the user asks. Plain: resumes the stored session, opens a browser only when there is none. `switch_user`: 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 t

  • logout

    Sign out of the instance \u2014 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.

  • mark_headings
  • move_document

    Move a document to another folder, project or collection: parent_id for a container (folder or project root \u2014 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

  • query_data_source

    Query rows from a data source. Supports PostgREST-style filters, column selection, ordering, and limits.

  • read_document
  • read_documents
  • 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.

  • remove_bookmarkwrite action

    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 \xA7refs using the same scheme so they stop drifting. By default only headings ALREADY carrying a number are re-sequenced \u2014 the title and preamble headings ("## Related") stay clean. Do NOT use it to ADD numbers to a clean document: numbering is m

  • replace_in_document

    Bulk regex find/replace across a document \u2014 the sed/awk-style tool. Each rule: `pattern` (JS regex) + `replacement` with $1/$<name> captures and COMPUTED `…` values, where a capture resolves to its NUMERIC value (pattern "\xA7(?<n>\\d+)" + replacement "\xA7…" shifts every section number by 3 in ONE rule); an optional `where` guard (boolean, same language) skips matches. Rules apply in one cas

  • resolve_comment

    Toggle the resolved status of a comment.

  • search_documents

    Hybrid semantic + full-text search in one collection; collection_id=0 lists/filters across ALL collections (system fields only, no query). Structured filters need field names from list_metadata_fields; cursor pages. Each query hit reports WHERE it matched: by default the distinct sections holding its matches (breadcrumb + durable #s{id}, usable as read_document section_id) plus a matches count; de

  • send_messagewrite action
  • set_document_status
  • 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 \u2014 there is no other refresh.

  • update_labelwrite action

    Patch a label: rename, recolour, rewrite the description, or change its behaviour \u2014 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 \u2014 the path is rebuilt, so any

  • update_labelswrite action

    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_metadatawrite action

    Set metadata field values on a document \u2014 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.

  • update_recordswrite action

    Update records in a data source matching the given filters.

  • upload_documentwrite action

    Upload a local file as a new document. Reads the file as binary, auto-detects the document type from the file extension (include it in the name), creates the document, writes content, commits, and unlocks in one step. Use this for importing files (markdown, PDF, images, etc.) into a collection.

  • 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_documentwrite action

    Write markdown to an existing document: the whole content, or from a code-point position onward \u2014 `from` REPLACES everything from that position to the end (to append, pass the document's length). Locks if needed, commits, leaves the document locked. Generated PDF types write to the draft stream. For a change inside existing content prefer edit_document. Every mention of another document in th

  • write_streamwrite action

Public scan report

scanner v0.1.9 · 2026-09-21 · same rubric, same numbers if you re-run it

1 low
  • Code scan2 source files scanned25/25
  • Live reliabilityno gateway calls yet and no remote to proben/a
  • Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenanceno repository listed3/15
  • Maintainer identityverified namespace with website, no repo4/10

Findings (1)

  • lowNo source repository listedmaint.no-repo
Overall 68/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

Install directly

Runs npx -y @collhub/mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add collhub -- npx -y @collhub/mcp
Add to Cursor

CollHub: common questions

Is CollHub MCP server safe?
With care: it is graded C, so read the findings first (68/100). Read the CollHub safety report
How do I install CollHub?
It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
Does CollHub need an API key?
No secret keys are declared. It reads 1 setting from the environment.
Is CollHub maintained?
The latest release is v1.0.0.

More from collhub.com