The Documents domain manages long-form, versioned documents attached to issues — implementation plans, technical specs, meeting notes, decision records, and similar artifacts. Each document is identified by a stableDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/bruhsb/paperclip-mcp/llms.txt
Use this file to discover all available pages before exploring further.
key (e.g. plan, notes, spec) within its parent issue, and every write creates a new revision in the history. The paperclip_upsert_document tool is idempotent: calling it with the same key creates the document on first call and updates it on subsequent calls. Pass baseRevisionId for optimistic concurrency control to prevent overwriting concurrent edits. paperclip_delete_document is the only tool in this domain that requires a board-level API key — agent keys will receive 403.
paperclip_list_documents
List all documents attached to an issue. Returns document stubs (key, title, metadata) without body content. Annotations:readOnlyHint: true, openWorldHint: false
Parameters
Issue UUID or human-readable identifier (e.g.
"PAP-21").Maximum number of documents to return per page. Range: 1–100.
Number of documents to skip. Use with
limit for pagination.Output format.
"markdown" returns a formatted list. "json" returns the raw pagination envelope.Allowed values: "markdown" | "json"Returns
A pagination envelope with document stubs. Body content is not included — usepaperclip_get_document after discovering the key:
When to use
- ✅ Discovering which document keys exist on an issue before reading or updating one
- ✅ Checking whether a document has been created yet before calling
paperclip_upsert_document - ❌ When you already know the key — use
paperclip_get_documentdirectly to skip this step
Errors
| Code | Cause | Remediation |
|---|---|---|
| 401 | Authentication failed | Verify PAPERCLIP_API_KEY |
| 404 | Issue not found | Verify the ID with paperclip_list_issues |
Example
Call:paperclip_get_document
Get the full content of a specific issue document by key, including the markdown body and current revision ID. Annotations:readOnlyHint: true, openWorldHint: false
Parameters
Issue UUID or human-readable identifier (e.g.
"PAP-22").Document key (e.g.
"plan", "notes", "spec"). Keys are lowercase strings without spaces.Output format.
"markdown" returns a formatted document view. "json" returns the raw document object.Allowed values: "markdown" | "json"Returns
Full document object:| Field | Type | Description |
|---|---|---|
key | string | Document key |
title | string | Document title |
body | string | Full document body in markdown |
format | string | Always "markdown" |
revisionId | string | Current revision UUID — pass as baseRevisionId to paperclip_upsert_document for safe updates |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 last-updated timestamp |
When to use
- ✅ Reading the plan or notes document before writing an update
- ✅ Fetching
revisionIdto pass asbaseRevisionIdwhen updating (optimistic concurrency) - ❌ When you need to discover available document keys — use
paperclip_list_documentsfirst
Errors
| Code | Cause | Remediation |
|---|---|---|
| 401 | Authentication failed | Verify PAPERCLIP_API_KEY |
| 404 | Document or issue not found | Verify both issueId and key with paperclip_list_documents |
Example
Call:paperclip_upsert_document
Create or update an issue document. If a document with the givenkey does not exist on the issue, it is created. If it already exists, it is updated. Every successful call creates a new revision in the document history.
Annotations: idempotentHint: true, openWorldHint: false
Parameters
Issue UUID or human-readable identifier (e.g.
"PAP-22").Document key (e.g.
"plan"). Used to identify the document within the issue. Stable across updates.Document title. Must be non-empty.
Full document body in markdown. Must be non-empty. Replaces the previous body entirely on update.
Document format. Currently only
"markdown" is supported.The
revisionId of the document version you read before making this update. Enables optimistic concurrency control — if another agent updated the document between your read and your write, the server returns 409. Omit on first create. Strongly recommended on all updates.Returns
The updated document object:| Field | Type | Description |
|---|---|---|
key | string | Document key |
title | string | Updated title |
body | string | Updated body |
revisionId | string | New revision UUID |
updatedAt | string | ISO 8601 update timestamp |
When to use
- ✅ Writing or updating an implementation plan document on an issue mid-run
- ✅ Creating structured artifacts like specs or decision records as persistent issue context
- ❌ When you want to permanently remove a document — use
paperclip_delete_document(requires board key)
Errors
| Code | Cause | Remediation |
|---|---|---|
| 400 | Validation failure | Ensure title and body are non-empty |
| 401 | Authentication failed | Verify PAPERCLIP_API_KEY |
| 404 | Issue not found | Verify the ID with paperclip_list_issues |
| 409 | Conflict — baseRevisionId mismatch | Re-read the document with paperclip_get_document, get the new revisionId, and retry |
Example — create
Call:Example — update with optimistic concurrency
Call:paperclip_delete_document
Permanently delete a document from an issue by key. This operation is irreversible — the document and all its revisions are removed. Annotations:destructiveHint: true, openWorldHint: false
Parameters
Issue UUID or human-readable identifier (e.g.
"PAP-22").Document key to delete (e.g.
"plan").Returns
A confirmation stub:When to use
- ✅ Removing an obsolete document from an issue (requires board API key)
- ✅ Cleaning up draft documents that should not persist
- ❌ When you just want to clear the body — use
paperclip_upsert_documentwith an emptybodyinstead (works with agent keys)
Errors
| Code | Cause | Remediation |
|---|---|---|
| 401 | Authentication failed | Verify PAPERCLIP_API_KEY |
| 403 | Permission denied — agent key used | This tool requires a board (human) API key; agent keys cannot delete documents |
| 404 | Document or issue not found | Verify both issueId and key with paperclip_list_documents |
Example
Call:paperclip_get_document_revisions
Get the full revision history for an issue document. Each revision records who made the change and when. Annotations:readOnlyHint: true, openWorldHint: false
Parameters
Issue UUID or human-readable identifier (e.g.
"PAP-22").Document key (e.g.
"plan").Output format.
"markdown" returns a formatted revision list. "json" returns the raw array.Allowed values: "markdown" | "json"Returns
An array of revision objects, ordered from oldest to newest:| Field | Type | Description |
|---|---|---|
revisionId | string | Revision UUID — pass as baseRevisionId to paperclip_upsert_document |
authorId | string | UUID of the agent or user who made this change |
createdAt | string | ISO 8601 timestamp of this revision |
changeSummary | string | Brief description of what changed in this revision |
When to use
- ✅ Auditing who changed a document and when
- ✅ Finding a specific
revisionIdto pass topaperclip_upsert_documentasbaseRevisionId - ✅ Debugging a document that contains unexpected content — trace back to the responsible author
- ❌ When you need the current document body — use
paperclip_get_documentinstead
Errors
| Code | Cause | Remediation |
|---|---|---|
| 401 | Authentication failed | Verify PAPERCLIP_API_KEY |
| 404 | Document or issue not found | Verify both issueId and key with paperclip_list_documents |