{"apiVersion":"v1","directorySlug":"karseir-mcp-4e97968a5a","title":"Upstream Error","description":null,"pageUrl":"https://www.mcpbundles.com/skills/karseir-mcp-4e97968a5a","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://karseir.app/mcp","hostedMcpUrl":null,"toolCount":85,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"app.karseir/karseir-mcp-4e97968a5a","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"list_workspaces","description":"List all available AFFiNE workspaces","inputSchema":{"type":"object","properties":{}},"title":"List Workspaces","logicalName":"list_workspaces","displayName":"List Workspaces","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_workspace","description":"Get details of a specific workspace","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"title":"Get Workspace","logicalName":"get_workspace","displayName":"Get Workspace","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_workspace","description":"Create a new workspace with initial document (accessible in UI)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string"},"avatar":{"type":"string"}},"additionalProperties":false},"title":"Create Workspace","logicalName":"create_workspace","displayName":"Create Workspace","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_workspace","description":"Update workspace settings","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"},"public":{"type":"boolean"},"enableAi":{"type":"boolean"}},"additionalProperties":false},"title":"Update Workspace","logicalName":"update_workspace","displayName":"Update Workspace","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_workspace","description":"Delete a workspace permanently","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"title":"Delete Workspace","logicalName":"delete_workspace","displayName":"Delete Workspace","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_docs","description":"List documents in a workspace (GraphQL).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"after":{"type":"string"},"first":{"type":"number"},"offset":{"type":"number"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Documents","logicalName":"list_docs","displayName":"List Documents","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_docs","description":"Fast search for documents by title using workspace metadata. Much faster than exporting each doc. Returns docId, title, and direct URL for each match.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"tag":{"type":"string"},"limit":{"type":"number"},"query":{"type":"string"},"sortBy":{"enum":["relevance","updatedAt"],"type":"string"},"matchMode":{"enum":["substring","prefix","exact"],"type":"string"},"workspaceId":{"type":"string"},"sortDirection":{"enum":["asc","desc"],"type":"string"}},"additionalProperties":false},"title":"Search Documents by Title","logicalName":"search_docs","displayName":"Search Documents by Title","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_doc_by_title","description":"Resolve docs by exact title. Returns ALL matches up to `limit` (callers handle ambiguity). Case-sensitive by default; pass `caseInsensitive: true` to fold case. Reads workspace metadata — fast, no per-doc fetch. Unlike `search_docs` (which is always case-insensitive and capped at limit 20), this tool defaults to case-sensitive matching and returns up to `limit` matches (default 50, max 200). Prefer this over `search_docs` when you know the exact title and want every match. Returns: { query, case","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["title"],"properties":{"limit":{"type":"integer","maximum":200,"exclusiveMinimum":0},"workspaceId":{"type":"string"},"caseInsensitive":{"type":"boolean"}},"additionalProperties":false},"title":"Find Doc by Title","logicalName":"find_doc_by_title","displayName":"Find Doc by Title","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_tags","description":"List all tags in a workspace and the number of docs attached to each tag.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"List Tags","logicalName":"list_tags","displayName":"List Tags","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_docs_by_tag","description":"List documents that contain the requested tag.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tag"],"properties":{"tag":{"type":"string","minLength":1},"ignoreCase":{"type":"boolean"},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"List Documents By Tag","logicalName":"list_docs_by_tag","displayName":"List Documents By Tag","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_tag","description":"Create a workspace-level tag entry for future reuse.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tag"],"properties":{"tag":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Create Tag","logicalName":"create_tag","displayName":"Create Tag","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_tag_to_doc","description":"Add a tag to a document.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","tag"],"properties":{"tag":{"type":"string","minLength":1},"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Add Tag To Document","logicalName":"add_tag_to_doc","displayName":"Add Tag To Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"remove_tag_from_doc","description":"Remove a tag from a document.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","tag"],"properties":{"tag":{"type":"string","minLength":1},"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Remove Tag From Document","logicalName":"remove_tag_from_doc","displayName":"Remove Tag From Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_doc","description":"Get a document by ID (GraphQL metadata).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Get Document","logicalName":"get_doc","displayName":"Get Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_doc","description":"Read document block content via WebSocket snapshot (blocks + plain text). Set includeMarkdown: true to also get the rendered markdown — useful when you need to read content without a separate export_doc_markdown call.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"includeMarkdown":{"type":"boolean"}},"additionalProperties":false},"title":"Read Document Content","logicalName":"read_doc","displayName":"Read Document Content","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_capabilities","description":"Return machine-readable capability flags for this MCP server, including block, database, collaboration, and export support.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get Capabilities","logicalName":"get_capabilities","displayName":"Get Capabilities","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"analyze_doc_fidelity","description":"Inspect a document for markdown export fidelity risk, including unsupported AFFiNE block flavours and risky content paths.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Analyze Document Fidelity","logicalName":"analyze_doc_fidelity","displayName":"Analyze Document Fidelity","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"move_doc","description":"Move a doc in the AFFiNE sidebar by embedding it under a new parent. Optionally removes it from the old parent (fromParentDocId). If fromParentDocId is omitted, the doc is added to the new parent but not removed from the old one.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","toParentDocId"],"properties":{"docId":{"type":"string"},"workspaceId":{"type":"string"},"toParentDocId":{"type":"string"},"fromParentDocId":{"type":"string"}},"additionalProperties":false},"title":"Move Document in Sidebar","logicalName":"move_doc","displayName":"Move Document in Sidebar","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"publish_doc","description":"Publish a doc (make public).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"mode":{"enum":["Page","Edgeless"],"type":"string"},"docId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Publish Document","logicalName":"publish_doc","displayName":"Publish Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"revoke_doc","description":"Revoke a doc's public access.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Revoke Document","logicalName":"revoke_doc","displayName":"Revoke Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_doc","description":"Create a new AFFiNE document with optional content. If parentDocId is provided, the new doc is linked into the sidebar tree immediately. If folderId is provided, the doc is placed inside that folder in the sidebar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"content":{"type":"string"},"folderId":{"type":"string"},"parentDocId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Create Document","logicalName":"create_doc","displayName":"Create Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_semantic_page","description":"Create an AFFiNE-native page with intentional section structure and native block composition.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"pageType":{"enum":["meeting_notes","project_hub","spec_page","wiki_page"],"type":"string"},"sections":{"type":"array","items":{"type":"object","required":["title"],"properties":{"bullets":{"type":"array","items":{"type":"string","minLength":1}},"callouts":{"type":"array","items":{"type":"string","minLength":1}},"paragraphs":{"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"parentDocId":{"type":"string"},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Create Semantic Page","logicalName":"create_semantic_page","displayName":"Create Semantic Page","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"append_semantic_section","description":"Append a semantic section to an existing AFFiNE document by heading title and native block composition.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","sectionTitle"],"properties":{"docId":{"type":"string","minLength":1},"bullets":{"type":"array","items":{"type":"string","minLength":1}},"callouts":{"type":"array","items":{"type":"string","minLength":1}},"paragraphs":{"type":"array","items":{"type":"string","minLength":1}},"workspaceId":{"type":"string","minLength":1},"sectionTitle":{"type":"string","minLength":1},"afterSectionTitle":{"type":"string"}},"additionalProperties":false},"title":"Append Semantic Section","logicalName":"append_semantic_section","displayName":"Append Semantic Section","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"append_block","description":"Append document blocks with canonical types and legacy aliases (supports placement + strict validation).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","type"],"properties":{"x":{"type":"integer"},"y":{"type":"integer"},"url":{"type":"string"},"html":{"type":"string"},"name":{"type":"string"},"rows":{"type":"integer","maximum":20,"minimum":1},"size":{"type":"number"},"text":{"type":"string"},"type":{"type":"string","minLength":1},"docId":{"type":"string","minLength":1},"embed":{"type":"boolean"},"latex":{"type":"string"},"level":{"type":"integer","maximum":6,"minimum":1},"style":{"enum":["bulleted","numbered","todo"],"type":"string"},"width":{"type":"integer","maximum":10000,"minimum":1},"design":{"type":"string"},"height":{"type":"integer","maximum":10000,"minimum":1},"pageId":{"type":"string"},"strict":{"type":"boolean"},"caption":{"type":"string"},"checked":{"type":"boolean"},"columns":{"type":"integer","maximum":20,"minimum":1},"padding":{"type":"integer"},"language":{"type":"string"},"markdown":{"type":"string"},"mimeType":{"type":"string"},"sourceId":{"type":"string"},"viewMode":{"enum":["table","kanban"],"type":"string"},"iframeUrl":{"type":"string"},"placement":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"parentId":{"type":"string"},"afterBlockId":{"type":"string"},"beforeBlockId":{"type":"string"}},"additionalProperties":false},"reference":{"type":"string"},"background":{},"refFlavour":{"type":"string"},"stackAfter":{"type":"object","required":["blockId"],"properties":{"gap":{"type":"integer"},"blockId":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"direction":{"enum":["down","up","right","left"],"type":"string"}},"additionalProperties":false},"workspaceId":{"type":"string","minLength":1},"bookmarkStyle":{"enum":["vertical","horizontal","list","cube","citation"],"type":"string"},"childElementIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"title":"Append Block","logicalName":"append_block","displayName":"Append Block","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"export_doc_markdown","description":"Export AFFiNE document content to markdown.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"includeFrontmatter":{"type":"boolean"}},"additionalProperties":false},"title":"Export Document Markdown","logicalName":"export_doc_markdown","displayName":"Export Document Markdown","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"export_with_fidelity_report","description":"Export document markdown together with a structured fidelity report that highlights markdown loss risk and unsupported AFFiNE-native content.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"includeFrontmatter":{"type":"boolean"}},"additionalProperties":false},"title":"Export With Fidelity Report","logicalName":"export_with_fidelity_report","displayName":"Export With Fidelity Report","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_doc_from_markdown","description":"Create a new AFFiNE document and import markdown content. Use parentDocId to automatically embed the new doc into a parent, making it visible in the sidebar instead of being an orphan.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["markdown"],"properties":{"strict":{"type":"boolean"},"markdown":{"type":"string","minLength":1},"parentDocId":{"type":"string"},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Create Document From Markdown","logicalName":"create_doc_from_markdown","displayName":"Create Document From Markdown","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"append_markdown","description":"Append markdown content to an existing AFFiNE document.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","markdown"],"properties":{"docId":{"type":"string","minLength":1},"strict":{"type":"boolean"},"markdown":{"type":"string","minLength":1},"placement":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"parentId":{"type":"string"},"afterBlockId":{"type":"string"},"beforeBlockId":{"type":"string"}},"additionalProperties":false},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Append Markdown","logicalName":"append_markdown","displayName":"Append Markdown","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"replace_doc_with_markdown","description":"Replace the main note content of a document with markdown content.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","markdown"],"properties":{"docId":{"type":"string","minLength":1},"strict":{"type":"boolean"},"markdown":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Replace Document With Markdown","logicalName":"replace_doc_with_markdown","displayName":"Replace Document With Markdown","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_doc","description":"Delete a document and remove from workspace list","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Delete Document","logicalName":"delete_doc","displayName":"Delete Document","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_workspace_tree","description":"Returns the full document hierarchy as a tree (roots → children → grandchildren). Use depth to limit nesting (default: 3). Note: loads all docs — may be slow on large workspaces.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"depth":{"type":"number"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Workspace Tree","logicalName":"list_workspace_tree","displayName":"List Workspace Tree","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_orphan_docs","description":"Find all documents that have no parent (not linked from any other doc via embed_linked_doc). Useful for workspace hygiene. Note: scans all docs — O(n).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Get Orphan Documents","logicalName":"get_orphan_docs","displayName":"Get Orphan Documents","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_children","description":"List the direct children of a document in the sidebar (embed_linked_doc blocks). Returns docId, title, and URL for each child.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Document Children","logicalName":"list_children","displayName":"List Document Children","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_doc_title","description":"Rename a document — updates both the sidebar title (workspace metadata) and the doc's internal page block title.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","title"],"properties":{"docId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Update Document Title","logicalName":"update_doc_title","displayName":"Update Document Title","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"inspect_template_structure","description":"Inspect a template doc's native structure, tags, and fallback risk before instantiation.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["templateDocId"],"properties":{"workspaceId":{"type":"string","minLength":1},"templateDocId":{"type":"string"}},"additionalProperties":false},"title":"Inspect Template Structure","logicalName":"inspect_template_structure","displayName":"Inspect Template Structure","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"instantiate_template_native","description":"Instantiate a template using native AFFiNE block cloning when supported, falling back to markdown materialization only when necessary.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["templateDocId"],"properties":{"variables":{"type":"object","additionalProperties":{"type":"string"}},"parentDocId":{"type":"string"},"workspaceId":{"type":"string","minLength":1},"preserveTags":{"type":"boolean"},"allowFallback":{"type":"boolean"},"templateDocId":{"type":"string"}},"additionalProperties":false},"title":"Instantiate Template Natively","logicalName":"instantiate_template_native","displayName":"Instantiate Template Natively","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_database_row","description":"Add a row to an AFFiNE database block. Provide cell values mapped by column name or column ID. Title column text is stored on the row paragraph block. Select columns auto-create options by label.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId","cells"],"properties":{"cells":{"type":"object","additionalProperties":{}},"docId":{"type":"string","minLength":1},"linkedDocId":{"type":"string"},"workspaceId":{"type":"string"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Add Database Row","logicalName":"add_database_row","displayName":"Add Database Row","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_database_row","description":"Delete a row from an AFFiNE database block.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId","rowBlockId"],"properties":{"docId":{"type":"string","minLength":1},"rowBlockId":{"type":"string","minLength":1},"workspaceId":{"type":"string"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Delete Database Row","logicalName":"delete_database_row","displayName":"Delete Database Row","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_database_cells","description":"Read row titles and database cell values from an AFFiNE database block.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId"],"properties":{"docId":{"type":"string","minLength":1},"columns":{"type":"array","items":{"type":"string","minLength":1}},"rowBlockIds":{"type":"array","items":{"type":"string","minLength":1}},"workspaceId":{"type":"string"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Read Database Cells","logicalName":"read_database_cells","displayName":"Read Database Cells","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_database_columns","description":"Read schema metadata for an AFFiNE database block, including columns, select options, and view column mappings. Useful for empty databases before any rows exist.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Read Database Columns","logicalName":"read_database_columns","displayName":"Read Database Columns","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_database_row","description":"Batch update multiple cells on an existing AFFiNE database row. Include `title` in the cells map to update the Kanban row title.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId","rowBlockId","cells"],"properties":{"cells":{"type":"object","additionalProperties":{}},"docId":{"type":"string","minLength":1},"rowBlockId":{"type":"string","minLength":1},"linkedDocId":{"type":"string"},"workspaceId":{"type":"string"},"createOption":{"type":"boolean"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Update Database Row","logicalName":"update_database_row","displayName":"Update Database Row","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"compose_database_from_intent","description":"Create a useful AFFiNE database/data-view from declarative intent. Supports task_board and issue_tracker presets with starter schema, kanban view, and optional starter rows.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","intent"],"properties":{"docId":{"type":"string","minLength":1},"intent":{"enum":["task_board","issue_tracker"],"type":"string"},"seedRows":{"type":"array","items":{"type":"object","additionalProperties":{}}},"placement":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"parentId":{"type":"string"},"afterBlockId":{"type":"string"},"beforeBlockId":{"type":"string"}},"additionalProperties":false},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Compose Database From Intent","logicalName":"compose_database_from_intent","displayName":"Compose Database From Intent","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_database_column","description":"Add a column to an existing AFFiNE database block. Supports rich-text, select, multi-select, number, checkbox, link, date types.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","databaseBlockId","name"],"properties":{"name":{"type":"string","minLength":1},"type":{"enum":["rich-text","select","multi-select","number","checkbox","link","date"],"type":"string","default":"rich-text"},"docId":{"type":"string","minLength":1},"width":{"type":"number"},"options":{"type":"array","items":{"type":"string"}},"workspaceId":{"type":"string"},"databaseBlockId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Add Database Column","logicalName":"add_database_column","displayName":"Add Database Column","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_surface_element","description":"Add a shape, connector, text, or group to the AFFiNE edgeless canvas surface. Shapes support rect/ellipse/diamond/triangle with fill, stroke, and text. Connectors draw arrows between shapes (by id) or between absolute points. Use for building diagrams programmatically. Style fields that don't apply to the chosen element type are reported in the response 'ignored' list (mirrors update_surface_element).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","type"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"mode":{"type":"number"},"text":{"type":"string"},"type":{"enum":["shape","connector","text","group"],"type":"string"},"color":{"type":"string"},"docId":{"type":"string","minLength":1},"index":{"type":"string"},"label":{"type":"string"},"width":{"type":"number"},"filled":{"type":"boolean"},"height":{"type":"number"},"radius":{"type":"number"},"stroke":{"type":"string"},"children":{"type":"array","items":{"type":"string"}},"fontSize":{"type":"number"},"sourceId":{"type":"string"},"targetId":{"type":"string"},"fillColor":{"type":"string"},"shapeType":{"enum":["rect","ellipse","diamond","triangle"],"type":"string"},"fontWeight":{"type":"string"},"strokeColor":{"type":"string"},"strokeStyle":{"enum":["solid","dash","none"],"type":"string"},"strokeWidth":{"type":"number"},"workspaceId":{"type":"string"},"sourcePosition":{"type":"array","items":{"type":"number"},"maxItems":2,"minItems":2},"targetPosition":{"type":"array","items":{"type":"number"},"maxItems":2,"minItems":2},"rearEndpointStyle":{"enum":["None","Arrow","Triangle","Circle","Diamond"],"type":"string"},"frontEndpointStyle":{"enum":["None","Arrow","Triangle","Circle","Diamond"],"type":"string"}},"additionalProperties":false},"title":"Add Surface Element","logicalName":"add_surface_element","displayName":"Add Surface Element","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_surface_elements","description":"List all shape/connector/text/group elements on the AFFiNE edgeless canvas surface. Returns raw xywh strings plus parsed {x,y,width,height} bounds, with Y.Text fields serialized to plain strings. Optional filters by element type or id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"type":{"enum":["shape","connector","text","group"],"type":"string"},"docId":{"type":"string","minLength":1},"elementId":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Surface Elements","logicalName":"list_surface_elements","displayName":"List Surface Elements","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_surface_element","description":"Partially update a surface element by id. x/y/width/height merge with the element's current xywh (move without resizing, or vice versa). text/label/title replace their Y.Text wholesale. Fields that don't apply to the element's type are reported in the response 'ignored' list.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","elementId"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"mode":{"type":"number"},"text":{"type":"string"},"color":{"type":"string"},"docId":{"type":"string","minLength":1},"index":{"type":"string"},"label":{"type":"string"},"width":{"type":"number"},"filled":{"type":"boolean"},"height":{"type":"number"},"radius":{"type":"number"},"stroke":{"type":"string"},"children":{"type":"array","items":{"type":"string"}},"fontSize":{"type":"number"},"sourceId":{"type":"string"},"targetId":{"type":"string"},"elementId":{"type":"string","minLength":1},"fillColor":{"type":"string"},"shapeType":{"enum":["rect","ellipse","diamond","triangle"],"type":"string"},"fontWeight":{"type":"string"},"strokeColor":{"type":"string"},"strokeStyle":{"enum":["solid","dash","none"],"type":"string"},"strokeWidth":{"type":"number"},"workspaceId":{"type":"string"},"sourcePosition":{"type":"array","items":{"type":"number"},"maxItems":2,"minItems":2},"targetPosition":{"type":"array","items":{"type":"number"},"maxItems":2,"minItems":2},"rearEndpointStyle":{"enum":["None","Arrow","Triangle","Circle","Diamond"],"type":"string"},"frontEndpointStyle":{"enum":["None","Arrow","Triangle","Circle","Diamond"],"type":"string"}},"additionalProperties":false},"title":"Update Surface Element","logicalName":"update_surface_element","displayName":"Update Surface Element","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_surface_element","description":"Delete a surface element by id. Set pruneConnectors=true to also delete any connectors whose source or target referenced the deleted element.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","elementId"],"properties":{"docId":{"type":"string","minLength":1},"elementId":{"type":"string","minLength":1},"workspaceId":{"type":"string"},"pruneConnectors":{"type":"boolean"}},"additionalProperties":false},"title":"Delete Surface Element","logicalName":"delete_surface_element","displayName":"Delete Surface Element","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_frame_children","description":"Replace a frame block's contents wholesale. Accepts ids of surface elements (shapes/connectors/groups) AND edgeless blocks (notes/frames/edgeless-text) — all go into BlockSuite's prop:childElementIds map, matching what the editor writes when you drag members into a frame. Dragging the frame drags every owned member. Ids that don't resolve come back under 'missing'. By default the frame is resized to fit its new contents (plus padding + title band); set resizeToFit=false to leave xywh untouched.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","blockId","childElementIds"],"properties":{"docId":{"type":"string","minLength":1},"blockId":{"type":"string","minLength":1},"padding":{"type":"integer"},"resizeToFit":{"type":"boolean"},"workspaceId":{"type":"string"},"childElementIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"title":"Update Frame Children","logicalName":"update_frame_children","displayName":"Update Frame Children","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_edgeless_block","description":"Partially update a note/frame/edgeless-text block by id. x/y/width/height merge with current prop:xywh (move without resizing, or vice versa). background replaces prop:background (AFFiNE token or `{light, dark}` hex object). Fields that don't apply to the block's flavour come back under `ignored`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","blockId"],"properties":{"x":{"type":"number"},"y":{"type":"number"},"docId":{"type":"string","minLength":1},"width":{"type":"number"},"height":{"type":"number"},"blockId":{"type":"string","minLength":1},"background":{"anyOf":[{"type":"string"},{"type":"object","properties":{"dark":{"type":"string"},"light":{"type":"string"}},"additionalProperties":false}]},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Update Edgeless Block","logicalName":"update_edgeless_block","displayName":"Update Edgeless Block","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_block","description":"Delete a block by id. Removes descendants and unlinks from the parent's sys:children by default; set deleteChildren=false to keep descendants orphaned (for re-parenting), or pruneConnectors=true to also drop surface connectors referencing any deleted id. Refuses affine:page — use delete_doc for whole docs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId","blockId"],"properties":{"docId":{"type":"string","minLength":1},"blockId":{"type":"string","minLength":1},"workspaceId":{"type":"string"},"deleteChildren":{"type":"boolean"},"pruneConnectors":{"type":"boolean"}},"additionalProperties":false},"title":"Delete Block","logicalName":"delete_block","displayName":"Delete Block","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_edgeless_canvas","description":"Read the full edgeless canvas: all edgeless-positioned blocks (notes, frames, edgeless-text) with their xywh, plus all surface elements (shapes, connectors, text, groups). Includes aggregate bounding box and per-type element counts. Use this when you need to understand canvas layout end-to-end before placing new elements.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Get Edgeless Canvas","logicalName":"get_edgeless_canvas","displayName":"Get Edgeless Canvas","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_comments","description":"List comments of a doc (with replies).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"after":{"type":"string"},"docId":{"type":"string"},"first":{"type":"number"},"offset":{"type":"number"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Comments","logicalName":"list_comments","displayName":"List Comments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_comment","description":"Create a comment on a doc.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["docId"],"properties":{"docId":{"type":"string"},"content":{},"docMode":{"enum":["Page","Edgeless","page","edgeless"],"type":"string"},"docTitle":{"type":"string"},"mentions":{"type":"array","items":{"type":"string"}},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Create Comment","logicalName":"create_comment","displayName":"Create Comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_comment","description":"Update a comment content.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"},"content":{}},"additionalProperties":false},"title":"Update Comment","logicalName":"update_comment","displayName":"Update Comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_comment","description":"Delete a comment by id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"title":"Delete Comment","logicalName":"delete_comment","displayName":"Delete Comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"resolve_comment","description":"Resolve or unresolve a comment.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","resolved"],"properties":{"id":{"type":"string"},"resolved":{"type":"boolean"}},"additionalProperties":false},"title":"Resolve Comment","logicalName":"resolve_comment","displayName":"Resolve Comment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_histories","description":"List doc histories (timestamps) for a doc.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guid"],"properties":{"guid":{"type":"string"},"take":{"type":"number"},"before":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"List Histories","logicalName":"list_histories","displayName":"List Histories","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_collections","description":"List AFFiNE collections stored in the workspace sidebar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"List Collections","logicalName":"list_collections","displayName":"List Collections","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_collection","description":"Get an AFFiNE collection by id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId"],"properties":{"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Get Collection","logicalName":"get_collection","displayName":"Get Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_collection","description":"Create a new AFFiNE collection in the workspace sidebar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","minLength":1},"rules":{"type":"object","required":["filters"],"properties":{"match":{"enum":["all","any"],"type":"string"},"filters":{"type":"array","items":{"type":"object","required":["field","operator","value"],"properties":{"field":{"enum":["title","tag","docId"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"operator":{"enum":["contains","equals","startsWith","in"],"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Create Collection","logicalName":"create_collection","displayName":"Create Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_collection_rules","description":"Replace a collection's rules and rebuild its allow-list from workspace docs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId","rules"],"properties":{"rules":{"type":"object","required":["filters"],"properties":{"match":{"enum":["all","any"],"type":"string"},"filters":{"type":"array","items":{"type":"object","required":["field","operator","value"],"properties":{"field":{"enum":["title","tag","docId"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"operator":{"enum":["contains","equals","startsWith","in"],"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Update Collection Rules","logicalName":"update_collection_rules","displayName":"Update Collection Rules","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_collection","description":"Rename an AFFiNE collection.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId"],"properties":{"name":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Update Collection","logicalName":"update_collection","displayName":"Update Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_collection","description":"Delete an AFFiNE collection from the workspace sidebar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId"],"properties":{"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Delete Collection","logicalName":"delete_collection","displayName":"Delete Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_doc_to_collection","description":"Add a document id to an AFFiNE collection allow-list.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId","docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Add Doc To Collection","logicalName":"add_doc_to_collection","displayName":"Add Doc To Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"remove_doc_from_collection","description":"Remove a document id from an AFFiNE collection allow-list.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collectionId","docId"],"properties":{"docId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1},"collectionId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Remove Doc From Collection","logicalName":"remove_doc_from_collection","displayName":"Remove Doc From Collection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_organize_nodes","description":"Experimental: list AFFiNE sidebar organize nodes from the folders workspace DB.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"List Organize Nodes","logicalName":"list_organize_nodes","displayName":"List Organize Nodes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_folder","description":"Experimental: create an AFFiNE organize folder node.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","minLength":1},"index":{"type":"string"},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Create Folder","logicalName":"create_folder","displayName":"Create Folder","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_workspace_blueprint","description":"Create a simple workspace folder blueprint under the organize tree.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["rootFolderName"],"properties":{"workspaceId":{"type":"string","minLength":1},"rootFolderName":{"type":"string","minLength":1},"childFolderNames":{"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false},"title":"Create Workspace Blueprint","logicalName":"create_workspace_blueprint","displayName":"Create Workspace Blueprint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rename_folder","description":"Experimental: rename an AFFiNE organize folder node.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["folderId","name"],"properties":{"name":{"type":"string","minLength":1},"folderId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Rename Folder","logicalName":"rename_folder","displayName":"Rename Folder","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_folder","description":"Experimental: delete an AFFiNE organize folder and all nested nodes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["folderId"],"properties":{"folderId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Delete Folder","logicalName":"delete_folder","displayName":"Delete Folder","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"move_organize_node","description":"Experimental: move an AFFiNE organize folder or link node.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["nodeId"],"properties":{"index":{"type":"string"},"nodeId":{"type":"string","minLength":1},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Move Organize Node","logicalName":"move_organize_node","displayName":"Move Organize Node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_organize_link","description":"Experimental: add a doc/tag/collection link under an AFFiNE organize folder.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["folderId","type","targetId"],"properties":{"type":{"enum":["doc","tag","collection"],"type":"string"},"index":{"type":"string"},"folderId":{"type":"string","minLength":1},"targetId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Add Organize Link","logicalName":"add_organize_link","displayName":"Add Organize Link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_organize_link","description":"Experimental: delete an AFFiNE organize doc/tag/collection link.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["nodeId"],"properties":{"nodeId":{"type":"string","minLength":1},"workspaceId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Delete Organize Link","logicalName":"delete_organize_link","displayName":"Delete Organize Link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"current_user","description":"Get current signed-in user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Current User","logicalName":"current_user","displayName":"Current User","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_profile","description":"Update current user's profile information.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string"},"avatarUrl":{"type":"string"}},"additionalProperties":false},"title":"Update Profile","logicalName":"update_profile","displayName":"Update Profile","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_settings","description":"Update user settings and preferences.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["settings"],"properties":{"settings":{"type":"object","properties":{"receiveCommentEmail":{"type":"boolean"},"receiveMentionEmail":{"type":"boolean"},"receiveInvitationEmail":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"title":"Update Settings","logicalName":"update_settings","displayName":"Update Settings","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sign_in","description":"Sign in to AFFiNE using email and password; sets session cookies for subsequent calls.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Sign In","logicalName":"sign_in","displayName":"Sign In","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_access_tokens","description":"List personal access tokens (metadata).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"List Access Tokens","logicalName":"list_access_tokens","displayName":"List Access Tokens","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"generate_access_token","description":"Generate a personal access token (returns token).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string"},"expiresAt":{"type":"string"}},"additionalProperties":false},"title":"Generate Access Token","logicalName":"generate_access_token","displayName":"Generate Access Token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"revoke_access_token","description":"Revoke a personal access token by id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"title":"Revoke Access Token","logicalName":"revoke_access_token","displayName":"Revoke Access Token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upload_blob","description":"Upload a file or blob to workspace storage.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["workspaceId","content"],"properties":{"content":{"type":"string"},"filename":{"type":"string"},"contentType":{"type":"string"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Upload Blob","logicalName":"upload_blob","displayName":"Upload Blob","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_blob","description":"Delete a blob/file from workspace storage.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["workspaceId","key"],"properties":{"key":{"type":"string"},"permanently":{"type":"boolean"},"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Delete Blob","logicalName":"delete_blob","displayName":"Delete Blob","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cleanup_blobs","description":"Permanently remove deleted blobs to free up storage.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["workspaceId"],"properties":{"workspaceId":{"type":"string"}},"additionalProperties":false},"title":"Cleanup Deleted Blobs","logicalName":"cleanup_blobs","displayName":"Cleanup Deleted Blobs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_notifications","description":"Get user notifications.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"after":{"type":"string"},"first":{"type":"number"},"offset":{"type":"number"},"unreadOnly":{"type":"boolean"}},"additionalProperties":false},"title":"List Notifications","logicalName":"list_notifications","displayName":"List Notifications","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_all_notifications","description":"Mark all notifications as read.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Mark All Notifications Read","logicalName":"read_all_notifications","displayName":"Mark All Notifications Read","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Upstream-Error&config=eyJ1cmwiOiAiaHR0cHM6Ly9rYXJzZWlyLmFwcC9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Upstream-Error%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fkarseir.app%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Upstream-Error%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fkarseir.app%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Upstream+Error&connectorUrl=https%3A%2F%2Fkarseir.app%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Upstream-Error\" --url \"https://karseir.app/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/karseir-mcp-4e97968a5a","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/karseir-mcp-4e97968a5a/tools/{tool}","mcpServerUrl":"https://karseir.app/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/karseir-mcp-4e97968a5a?live=1"}