@ainecto/cli 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -21
- package/dist/bin/ainecto.js +244 -170
- package/dist/bin/ainecto.js.map +1 -1
- package/dist/bin/mcp.js +1 -1
- package/package.json +2 -2
package/dist/bin/ainecto.js
CHANGED
|
@@ -623,7 +623,7 @@ function legacyRoleInput(flag, envVars = process.env) {
|
|
|
623
623
|
|
|
624
624
|
// src/core/version.ts
|
|
625
625
|
var UNBUNDLED_VERSION = "dev";
|
|
626
|
-
var CLI_VERSION = true ? "0.
|
|
626
|
+
var CLI_VERSION = true ? "0.9.0" : UNBUNDLED_VERSION;
|
|
627
627
|
var PACKAGE_NAME = "@ainecto/mcp";
|
|
628
628
|
var CLI_USER_AGENT = `${PACKAGE_NAME} ${CLI_VERSION}`;
|
|
629
629
|
function bridgePackageSpec(version = CLI_VERSION) {
|
|
@@ -853,157 +853,166 @@ function redactSecretString(value) {
|
|
|
853
853
|
|
|
854
854
|
// src/core/catalog/generated.prod.ts
|
|
855
855
|
var generatedTools = [
|
|
856
|
-
{ "mcpName": "create_comments", "commandPath": ["comments", "create"], "group": "generic", "description": "Add comments, questions, or replies to a document. Anyone who can read
|
|
857
|
-
{ "mcpName": "create_documents", "commandPath": ["documents", "create"], "group": "document", "description": "Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Documents", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.create)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "folderUuid": { "description": "Optional folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "title": { "description": "Document title", "type": "string" }, "type": { "description": "Document type. Creatable values: erd, markdown, diagram, openapi, html, file.", "enum": ["erd", "markdown", "diagram", "openapi", "html", "file"], "type": "string" }, "typePayload": { "description": 'Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: no JSON payload \u2014 bytes go through request_upload_token(purpose=document.create, scopeJson={projectUuid,folderUuid?,type:"file",title,filename}) then one curl PUT (images\xB7PDF\xB7mp4/webm\xB7audio\xB7text/code\xB7CSV only).', "type": "object" } }, "required": ["projectUuid", "type", "title"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
858
|
-
{ "mcpName": "create_folders", "commandPath": ["folders", "create"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Folders", "items": { "properties": { "name": { "description": "Folder name", "type": "string" }, "parentFolderUuid": { "description": "Parent folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
859
|
-
{ "mcpName": "create_projects", "commandPath": ["projects", "create"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Projects", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Project name", "type": "string" }, "projectKey": { "description": "Unique project key", "type": "string" }, "workspaceUuid": { "description": "Workspace UUID \u2014 null uses user's default workspace", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
860
|
-
{ "mcpName": "create_workspaces", "commandPath": ["workspaces", "create"], "group": "workspace", "description": "", "inputSchema": { "properties": { "items": { "description": "Workspaces", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Workspace name", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
861
|
-
{ "mcpName": "delete_attachments", "commandPath": ["attachments", "delete"], "group": "attachment", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Attachment UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "
|
|
862
|
-
{ "mcpName": "delete_comments", "commandPath": ["comments", "delete"], "group": "generic", "description": "Delete your own comments on a document. Only the author can delete. A resolved question and a top-level comment that still has replies cannot be deleted. Each id is applied on its own; results report each id.", "inputSchema": { "additionalProperties": false, "properties": { "documentUuid": { "description": "Document UUID the comments belong to", "type": "string" }, "ids": { "description": "Comment ids to delete (from mcp__ainecto__list_comments)", "items": { "minimum": 1, "type": "integer" }, "minItems": 1, "type": "array" } }, "required": ["
|
|
863
|
-
{ "mcpName": "delete_documents", "commandPath": ["documents", "delete"], "group": "document", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "
|
|
864
|
-
{ "mcpName": "delete_folders", "commandPath": ["folders", "delete"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "
|
|
865
|
-
{ "mcpName": "delete_projects", "commandPath": ["projects", "delete"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "
|
|
866
|
-
{ "mcpName": "delete_workspaces", "commandPath": ["workspaces", "delete"], "group": "workspace", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "
|
|
856
|
+
{ "mcpName": "create_comments", "commandPath": ["comments", "create"], "group": "generic", "description": "Add comments, questions, or replies to a document or a kanban card (cardUuid). Anyone who can read it may comment and reply. Set parentCommentId to reply to a top-level comment. To mention people, get their userId and displayName from list_mention_candidates, write @<displayName> in the body, and list their userIds in mentionUserIds (clientMutationId is then required). Items are applied in order and each one commits on its own; results report each item (ok, or status and error).", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "items": { "description": "Comments to add, applied in order", "items": { "additionalProperties": false, "properties": { "body": { "description": "Comment text (plain text, 1..10000 characters). To mention someone, include @<displayName> exactly as returned by mcp__ainecto__list_mention_candidates.", "maxLength": 1e4, "minLength": 1, "type": "string" }, "clientMutationId": { "description": "Idempotency key (visible ASCII, at most 128 characters). Required when mentionUserIds is not empty; reuse the same value when retrying the same item so the mention email is not sent twice.", "maxLength": 128, "type": "string" }, "kind": { "description": "COMMENT (default) or QUESTION. A reply (parentCommentId) is always COMMENT. A QUESTION can later be resolved with mcp__ainecto__resolve_comments.", "enum": ["COMMENT", "QUESTION"], "type": "string" }, "mentionUserIds": { "description": "userIds to mention (from mcp__ainecto__list_mention_candidates). Each one's @<displayName> must appear in body; newly mentioned people get a notification email.", "items": { "type": "string" }, "maxItems": 20, "type": "array", "uniqueItems": true }, "parentCommentId": { "description": "Reply to this top-level comment id (from mcp__ainecto__list_comments). Replies are one level deep: replying to a reply is rejected. The thread's original author and earlier repliers get a notification email (except people mentioned in this reply, who get the mention email instead).", "minimum": 1, "type": "integer" } }, "required": ["body"], "type": "object" }, "minItems": 1, "type": "array" }, "mailLanguage": { "description": "Language of the comment notification email (mention or reply). Defaults to en.", "enum": ["en", "ko"], "type": "string" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "05ae6b9016969e09" },
|
|
857
|
+
{ "mcpName": "create_documents", "commandPath": ["documents", "create"], "group": "document", "description": "Create documents. projectUuid comes from list_projects (a workspace UUID is not a project UUID). Set shareEnabled to also turn on each document's public link and get its shareUrl in the same call. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Documents", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.create)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "folderUuid": { "description": "Optional folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "shareEnabled": { "description": "Optional. true turns on the document's public link right after creating it, exactly as enable_shares does (needs the right to manage sharing; types without a public page are refused). The created item then carries shareUrl, the page anyone can open. If sharing is refused, this item is not created.", "type": "boolean" }, "title": { "description": "Document title", "type": "string" }, "type": { "description": "Document type. Creatable values: erd, markdown, diagram, openapi, html, file, kanban.", "enum": ["erd", "markdown", "diagram", "openapi", "html", "file", "kanban"], "type": "string" }, "typePayload": { "description": 'Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: no JSON payload \u2014 bytes go through request_upload_token(purpose=document.create, scopeJson={projectUuid,folderUuid?,type:"file",title,filename}) then one curl PUT (images\xB7PDF\xB7mp4/webm\xB7audio\xB7text/code\xB7CSV only); kanban: no payload \u2014 creates an empty board; add cards with kanban_apply_changes.', "type": "object" } }, "required": ["projectUuid", "type", "title"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "017e1b09ef246ff9" },
|
|
858
|
+
{ "mcpName": "create_folders", "commandPath": ["folders", "create"], "group": "generic", "description": "Create folders in a project, at its top level or under parentFolderUuid (the parent must be in the same project). Folders nest up to 50 levels. Folder names do not have to be unique, even side by side, and every call creates new folders \u2014 check list_folders first so a retry does not make duplicates. Needs edit access to the project (and to the parent folder). Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (folder rows with uuid and app url) and count. Fails with 404, 403, or 409 when the project, its workspace or the parent folder is archived.", "inputSchema": { "properties": { "items": { "description": "Folders", "items": { "properties": { "name": { "description": "Folder name", "type": "string" }, "parentFolderUuid": { "description": "Parent folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "0465182c723f2c9a" },
|
|
859
|
+
{ "mcpName": "create_projects", "commandPath": ["projects", "create"], "group": "generic", "description": "Create new, empty projects. workspaceUuid picks the workspace (you need edit access there); without it the project goes to your first personal workspace, which is created if you have none. projectKey is optional and must be unique within the workspace; project names do not have to be unique. Every call creates new projects, so check list_projects before retrying. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (project rows with uuid) and count. Fails with 403 without edit access, 409 when the workspace is archived, and an error when the projectKey is already used.", "inputSchema": { "properties": { "items": { "description": "Projects", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Project name", "type": "string" }, "projectKey": { "description": "Unique project key", "type": "string" }, "workspaceUuid": { "description": "Workspace UUID \u2014 null uses user's default workspace", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "020ed340ec243bdc" },
|
|
860
|
+
{ "mcpName": "create_workspaces", "commandPath": ["workspaces", "create"], "group": "workspace", "description": "Create new, empty personal workspaces owned by you (there is no limit on how many). Names do not have to be unique and every call creates new ones, so check list_workspaces before retrying. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (workspace rows with uuid) and count.", "inputSchema": { "properties": { "items": { "description": "Workspaces", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Workspace name", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "51d1cb14c1d99f9d" },
|
|
861
|
+
{ "mcpName": "delete_attachments", "commandPath": ["attachments", "delete"], "group": "attachment", "description": "Remove attachments. A removed attachment is hidden (archived) and no longer listed, and no tool brings it back \u2014 confirm with the user first. The file that is a file document's own content cannot be removed here; delete that document instead. Needs edit access to the document (or project) it is attached to. All-or-nothing: if any UUID fails (404 unknown, 403 no edit access, 409 already removed or file-document content), nothing is removed. Sends no email or inbox notification. Returns deleted (UUIDs) and count.", "inputSchema": { "properties": { "uuids": { "description": "Attachment UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "6d88c71830e7e20d" },
|
|
862
|
+
{ "mcpName": "delete_comments", "commandPath": ["comments", "delete"], "group": "generic", "description": "Delete your own comments on a document or a kanban card (cardUuid). Only the author can delete. A resolved question and a top-level comment that still has replies cannot be deleted. Each id is applied on its own; results report each id.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "ids": { "description": "Comment ids to delete (from mcp__ainecto__list_comments)", "items": { "minimum": 1, "type": "integer" }, "minItems": 1, "type": "array" } }, "required": ["ids"], "type": "object" }, "required": ["ids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "082e4b4d9ba97fe0" },
|
|
863
|
+
{ "mcpName": "delete_documents", "commandPath": ["documents", "delete"], "group": "document", "description": "Move documents to the trash (soft delete) \u2014 this is not permanent deletion. A trashed document disappears from lists and its public link stops opening; people it was shared with directly lose that access, and restoring does not give it back. unarchive_documents restores a document and list_trash shows the trash. The server permanently deletes a trashed document once the trash retention period passes (30 days by default), and that cannot be undone. Needs delete rights on each document (editor or above). Confirm with the user before deleting anything they did not name explicitly. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without delete rights, and 409 when the document is already in the trash or its folder, project or workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "02aed6d05f52c25e" },
|
|
864
|
+
{ "mcpName": "delete_folders", "commandPath": ["folders", "delete"], "group": "generic", "description": "Move folders to the trash together with everything under them (subfolders and their documents) \u2014 soft delete, not permanent. People shared with the folder, its subfolders or those documents directly lose that access, and restoring does not give it back. unarchive_folders restores the whole subtree; the server permanently deletes trashed folders and documents once the trash retention period passes (30 days by default). Needs admin or owner rights on the folder. Always confirm with the user first and say how much is inside (list_documents with folderUuid). Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without rights, and 409 when the folder or a parent folder is already archived.", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "80852f7e86a2d964" },
|
|
865
|
+
{ "mcpName": "delete_projects", "commandPath": ["projects", "delete"], "group": "generic", "description": "Archive projects. An archived project disappears from list_projects and nothing inside it can be read or edited; its documents are not moved to the trash and nothing is purged automatically. Archiving also removes every person's direct sharing on the project, its folders and its documents, and restoring does not give it back. Public links of documents inside stop opening while the project is archived. unarchive_projects is the matching restore tool. Needs admin or owner rights on the project. Always confirm with the user first (get_project shows the name and workspace). Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without rights or when it is already archived, and 409 when its workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "32e582d68b72ab38" },
|
|
866
|
+
{ "mcpName": "delete_workspaces", "commandPath": ["workspaces", "delete"], "group": "workspace", "description": "Archive workspaces. An archived workspace disappears from list_workspaces, its projects disappear from list_projects, and nothing inside can be read or changed until it is restored with unarchive_workspaces. Nothing is purged and sharing is kept. Only the workspace owner can do this. Always confirm with the user first \u2014 it hides every project in the workspace for everyone. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID and 403 when you are not the owner or it is already archived.", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "e6ef72eaa0a1808b" },
|
|
867
867
|
{ "mcpName": "diagram_apply_changes", "commandPath": ["tools", "run", "diagram-apply-changes"], "group": "generic", "description": "Required single-call mutation path for diagram node/edge/group create/update/delete changes. Put nodes, edges, and groups in one request and call this once. Do not look for type-specific diagram CUD tools; this tool is the only diagram CUD entry point.", "inputSchema": { "properties": { "description": { "description": "Reason for batch (audit)", "type": "string" }, "diagramUuid": { "description": "Diagram UUID", "type": "string" }, "edges": { "description": "Edge operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "bridgeType": { "description": "Omit (null) for a plain node-to-node edge. Set only when a group is an endpoint: GROUP_TO_GROUP|NODE_TO_GROUP|GROUP_TO_NODE", "enum": ["GROUP_TO_GROUP", "NODE_TO_GROUP", "GROUP_TO_NODE"], "type": "string" }, "fromUuid": { "description": "Source", "type": "string" }, "label": { "description": "Edge label", "type": "string" }, "lineStyle": { "description": "Line style", "type": "string" }, "strokeColor": { "description": "Stroke color", "type": "string" }, "strokeWidth": { "description": "Stroke width", "type": "integer" }, "toUuid": { "description": "Target", "type": "string" }, "uuid": { "description": "Required for update/delete", "type": "string" } }, "required": ["action"], "type": "object" }, "type": "array" }, "groups": { "description": "Group operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "collapsed": { "description": "Collapsed state", "type": "boolean" }, "color": { "description": "Group color", "type": "string" }, "height": { "description": "Explicit height; omit to keep it derived from member nodes", "type": "number" }, "linkMode": { "description": "Link mode", "type": "string" }, "linkedDiagramUuid": { "description": "Linked diagram UUID", "type": "string" }, "name": { "description": "Group name", "type": "string" }, "parentGroupUuid": { "description": "Parent group UUID", "type": "string" }, "sortOrder": { "description": "Sort order", "type": "integer" }, "uuid": { "description": "Required for update/delete", "type": "string" }, "width": { "description": "Explicit width; omit to keep it derived from member nodes", "type": "number" } }, "required": ["action"], "type": "object" }, "type": "array" }, "nodes": { "description": "Node operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "fillColor": { "description": "Fill color", "type": "string" }, "groupUuid": { "description": "Group UUID; empty string clears membership", "type": "string" }, "height": { "description": "Height", "type": "number" }, "shape": { "description": "Node shape (start/end/diamond/cylinder/parallelogram/stadium/hexagon/rect/roundRect/...)", "enum": ["rect", "roundRect", "stadium", "diamond", "decision", "circle", "start", "doubleCircle", "end", "hexagon", "cylinder", "parallelogram"], "type": "string" }, "strokeColor": { "description": "Stroke color", "type": "string" }, "text": { "description": "Node text/label. Supports newlines (\\n) for multi-line display.", "maxLength": 4e3, "type": "string" }, "textColor": { "description": "Text color", "type": "string" }, "type": { "description": "Node type", "type": "string" }, "uuid": { "description": "Required for update/delete; optional for create", "type": "string" }, "width": { "description": "Width", "type": "number" }, "x": { "description": "X", "type": "number" }, "y": { "description": "Y", "type": "number" } }, "required": ["action"], "type": "object" }, "type": "array" } }, "required": ["diagramUuid", "description"], "type": "object" }, "required": ["description", "diagramUuid"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "2c829103f86f4168" },
|
|
868
|
-
{ "mcpName": "diagram_get_edge", "commandPath": ["tools", "run", "diagram-get-edge"], "group": "generic", "description": "", "inputSchema": { "properties": { "edgeUuid": { "description": "Edge UUID", "type": "string" } }, "required": ["edgeUuid"], "type": "object" }, "required": ["edgeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
869
|
-
{ "mcpName": "diagram_get_group", "commandPath": ["tools", "run", "diagram-get-group"], "group": "generic", "description": "", "inputSchema": { "properties": { "groupUuid": { "description": "Group UUID", "type": "string" } }, "required": ["groupUuid"], "type": "object" }, "required": ["groupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
870
|
-
{ "mcpName": "diagram_get_node", "commandPath": ["tools", "run", "diagram-get-node"], "group": "generic", "description": "", "inputSchema": { "properties": { "nodeUuid": { "description": "Node UUID", "type": "string" } }, "required": ["nodeUuid"], "type": "object" }, "required": ["nodeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
871
|
-
{ "mcpName": "diagram_get_pending_llm_requests", "commandPath": ["tools", "run", "diagram-get-pending-llm-requests"], "group": "generic", "description": "", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
872
|
-
{ "mcpName": "diagram_list_edges", "commandPath": ["tools", "run", "diagram-list-edges"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
873
|
-
{ "mcpName": "diagram_list_groups", "commandPath": ["tools", "run", "diagram-list-groups"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
874
|
-
{ "mcpName": "diagram_list_nodes", "commandPath": ["tools", "run", "diagram-list-nodes"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
875
|
-
{ "mcpName": "diagram_submit_llm_result", "commandPath": ["tools", "run", "diagram-submit-llm-result"], "group": "generic", "description": "", "inputSchema": { "properties": { "cachedInputTokens": { "description": "Cached subset of provider total input tokens", "type": "integer" }, "creditsCharged": { "description": "Deprecated; ignored. Credits are calculated server-side from tokens.", "type": "integer" }, "inputTokens": { "description": "Provider total input tokens; Java persists uncached input after one normalization", "type": "integer" }, "outputTokens": { "description": "Output token count", "type": "integer" }, "result": { "description": "LLM result text", "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "result"], "type": "object" }, "required": ["result", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
876
|
-
{ "mcpName": "diagram_update_llm_request_status", "commandPath": ["tools", "run", "diagram-update-llm-request-status"], "group": "generic", "description": "", "inputSchema": { "properties": { "errorMessage": { "description": "Error message (when status=FAILED)", "type": "string" }, "status": { "description": "Target status \u2014 currently only FAILED is mutable from caller side", "enum": ["FAILED"], "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "status"], "type": "object" }, "required": ["status", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
877
|
-
{ "mcpName": "disable_shares", "commandPath": ["tools", "run", "disable-shares"], "group": "generic", "description": "", "inputSchema": { "properties": { "targetType": { "description": "Share target type", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
878
|
-
{ "mcpName": "enable_shares", "commandPath": ["tools", "run", "enable-shares"], "group": "generic", "description": "", "inputSchema": { "properties": { "targetType": { "description": "Share target type. A document gets a shareUrl anyone can open; a project gets a public API path only (there is no public project page); a folder token is stored but nothing public reads it yet.", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
868
|
+
{ "mcpName": "diagram_get_edge", "commandPath": ["tools", "run", "diagram-get-edge"], "group": "generic", "description": "Read one diagram edge by its edge UUID (same fields as diagram_list_edges). Read only; needs read access to the diagram. Fails with 404 for an unknown edge.", "inputSchema": { "properties": { "edgeUuid": { "description": "Edge UUID", "type": "string" } }, "required": ["edgeUuid"], "type": "object" }, "required": ["edgeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "4bb0bb9275b2fb08" },
|
|
869
|
+
{ "mcpName": "diagram_get_group", "commandPath": ["tools", "run", "diagram-get-group"], "group": "generic", "description": "Read one diagram group by its group UUID (same fields as diagram_list_groups). Read only; needs read access to the diagram. Fails with 404 for an unknown group.", "inputSchema": { "properties": { "groupUuid": { "description": "Group UUID", "type": "string" } }, "required": ["groupUuid"], "type": "object" }, "required": ["groupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e43aade91f62acd4" },
|
|
870
|
+
{ "mcpName": "diagram_get_node", "commandPath": ["tools", "run", "diagram-get-node"], "group": "generic", "description": "Read one diagram node by its node UUID (same fields as diagram_list_nodes). Read only; needs read access to the diagram. Fails with 404 for an unknown node.", "inputSchema": { "properties": { "nodeUuid": { "description": "Node UUID", "type": "string" } }, "required": ["nodeUuid"], "type": "object" }, "required": ["nodeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e610b158272290f0" },
|
|
871
|
+
{ "mcpName": "diagram_get_pending_llm_requests", "commandPath": ["tools", "run", "diagram-get-pending-llm-requests"], "group": "generic", "description": "List your own AI requests that are waiting (PENDING) or in progress (PROCESSING), for every service, not only diagrams: uuid, serviceCode, type, status, model and context. Read only \u2014 it does not claim anything; a request becomes PROCESSING only when a worker claims it through AiNecto's AI request API. Returns requests and count.", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "43305e4eee4eedc3" },
|
|
872
|
+
{ "mcpName": "diagram_list_edges", "commandPath": ["tools", "run", "diagram-list-edges"], "group": "generic", "description": "List every edge (connector) of one diagram document: uuid, fromUuid, toUuid, label, bridgeType, strokeColor, lineStyle, strokeWidth and version. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns edges and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "05a4ad6a05240c7d" },
|
|
873
|
+
{ "mcpName": "diagram_list_groups", "commandPath": ["tools", "run", "diagram-list-groups"], "group": "generic", "description": "List every group of one diagram document: uuid, name, color, width, height, parentGroupUuid, collapsed, depth, sortOrder, linkedDiagramUuid, linkMode and version. Nodes point to their group with groupUuid. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns groups and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "6b48ae81e69d19d0" },
|
|
874
|
+
{ "mcpName": "diagram_list_nodes", "commandPath": ["tools", "run", "diagram-list-nodes"], "group": "generic", "description": "List every node of one diagram document: uuid, type, text, shape, x, y, width, height, groupUuid, colors and version. diagram_apply_changes changes them. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns nodes and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "82df9dd409bbd9fd" },
|
|
875
|
+
{ "mcpName": "diagram_submit_llm_result", "commandPath": ["tools", "run", "diagram-submit-llm-result"], "group": "generic", "description": "Complete one of your AI requests that is PROCESSING by storing its result text and token counts; it becomes COMPLETED. This charges AI credits, calculated by the server from the token counts (creditsCharged is ignored). It only stores the result and does not change any diagram by itself. Fails for a request that is not yours, is not PROCESSING, or whose context names a diagram you cannot edit. Returns uuid, status and the recorded token counts.", "inputSchema": { "properties": { "cachedInputTokens": { "description": "Cached subset of provider total input tokens", "type": "integer" }, "creditsCharged": { "description": "Deprecated; ignored. Credits are calculated server-side from tokens.", "type": "integer" }, "inputTokens": { "description": "Provider total input tokens; Java persists uncached input after one normalization", "type": "integer" }, "outputTokens": { "description": "Output token count", "type": "integer" }, "result": { "description": "LLM result text", "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "result"], "type": "object" }, "required": ["result", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "9ee175de7c7b7c4b" },
|
|
876
|
+
{ "mcpName": "diagram_update_llm_request_status", "commandPath": ["tools", "run", "diagram-update-llm-request-status"], "group": "generic", "description": "Mark one of your AI requests FAILED (the only status allowed here), with an optional errorMessage. Works on PENDING or PROCESSING requests and charges no credits; diagram_submit_llm_result completes one instead. Fails for a request that is not yours, is already finished, or whose context names a diagram you cannot edit. Returns uuid, status and errorMessage.", "inputSchema": { "properties": { "errorMessage": { "description": "Error message (when status=FAILED)", "type": "string" }, "status": { "description": "Target status \u2014 currently only FAILED is mutable from caller side", "enum": ["FAILED"], "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "status"], "type": "object" }, "required": ["status", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "4a360af781099e35" },
|
|
877
|
+
{ "mcpName": "disable_shares", "commandPath": ["tools", "run", "disable-shares"], "group": "generic", "description": "Turn public links off. For a document or project the link stops working at once and turning it on again later brings back the same link; for a folder the stored token is deleted. Sharing with specific people is not affected. Needs the same rights as enable_shares (document or project: admin or owner; folder: edit access). Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns disabled (rows) and count.", "inputSchema": { "properties": { "targetType": { "description": "Share target type", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "3339f73817ba8432" },
|
|
878
|
+
{ "mcpName": "enable_shares", "commandPath": ["tools", "run", "enable-shares"], "group": "generic", "description": "Turn on public links: anyone with the link can open it without signing in, so confirm with the user before exposing anything. targetType document returns shareUrl (a public page) and publicApiPath; board documents have no public link (PUBLIC_SHARE_UNSUPPORTED_TYPE); needs admin or owner rights on the document. targetType project returns publicToken and a publicApiPath that reads the project and its documents through the public API \u2014 there is no public project page; needs admin or owner rights. targetType folder only stores a token that nothing public reads yet, so share the documents or the project instead; needs edit access. Re-enabling a document or project reuses its previous link. This does not invite or notify anyone \u2014 giving specific people access is done in the AiNecto app. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns enabled (rows with the link fields) and count.", "inputSchema": { "properties": { "targetType": { "description": "Share target type. A document gets a shareUrl anyone can open; a project gets a public API path only (there is no public project page); a folder token is stored but nothing public reads it yet.", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "972a9386ae31088f" },
|
|
879
879
|
{ "mcpName": "erd_apply_changes", "commandPath": ["erd", "apply-changes"], "group": "erd", "description": 'Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\nOne-call worked example:\n{\n "documentUuid": "erd-doc-uuid",\n "description": "create users/posts ERD",\n "operations": [\n {"op":"create","type":"table","data":{"uuid":"tbl_users","name":"users","display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_users_id","table_uuid":"tbl_users","name":"id","type":"bigint","is_pk":true,"is_not_null":true,"display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_users_email","table_uuid":"tbl_users","name":"email","type":"varchar(255)","is_unique":true,"is_not_null":true,"display_order":2}},\n {"op":"create","type":"table","data":{"uuid":"tbl_posts","name":"posts","display_order":2}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_id","table_uuid":"tbl_posts","name":"id","type":"bigint","is_pk":true,"is_not_null":true,"display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_author_id","table_uuid":"tbl_posts","name":"author_id","type":"bigint","is_not_null":true,"display_order":2}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_status","table_uuid":"tbl_posts","name":"status","type":"post_status","is_not_null":true,"display_order":3}},\n {"op":"create","type":"enum","data":{"uuid":"enum_post_status","name":"post_status"}},\n {"op":"create","type":"enum_value","data":{"uuid":"enum_post_status_draft","enum_uuid":"enum_post_status","value":"draft","display_order":1}},\n {"op":"create","type":"enum_value","data":{"uuid":"enum_post_status_published","enum_uuid":"enum_post_status","value":"published","display_order":2}},\n {"op":"create","type":"ref","data":{"uuid":"ref_posts_author","name":"fk_posts_author","from_table_uuid":"tbl_posts","to_table_uuid":"tbl_users","relationship":">","on_delete":"cascade"}},\n {"op":"create","type":"ref_column","data":{"uuid":"refcol_posts_author","ref_uuid":"ref_posts_author","from_column_uuid":"col_posts_author_id","to_column_uuid":"col_users_id","display_order":1}}\n ]\n}', "inputSchema": { "properties": { "arrangeNewTables": { "description": "Whether to auto-place newly-created tables after the batch; defaults to true", "type": "boolean" }, "description": { "description": "Reason for batch (audit)", "type": "string" }, "documentUuid": { "description": "ERD document UUID", "type": "string" }, "operations": { "description": "Atomic create/update/delete operations", "items": { "description": "One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.", "discriminator": { "propertyName": "type" }, "oneOf": [{ "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["name"], "title": "table data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table", "description": "Must be 'table' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["table_uuid"], "title": "column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "column", "description": "Must be 'column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["table_uuid"], "title": "index data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "index", "description": "Must be 'index' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "index operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["index_uuid", "column_uuid"], "title": "index_column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index_column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "index_column", "description": "Must be 'index_column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "index_column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["from_table_uuid", "to_table_uuid", "relationship"], "title": "ref data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "ref", "description": "Must be 'ref' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "ref operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["ref_uuid", "from_column_uuid", "to_column_uuid"], "title": "ref_column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref_column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "ref_column", "description": "Must be 'ref_column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "ref_column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "enum", "description": "Must be 'enum' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "enum operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "required": ["enum_uuid"], "title": "enum_value data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "title": "enum_value data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "enum_value", "description": "Must be 'enum_value' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "enum_value operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group", "description": "Must be 'table_group' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["group_uuid", "table_name"], "title": "table_group_table data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_table data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group_table", "description": "Must be 'table_group_table' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group_table operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["group_uuid", "note_uuid"], "title": "table_group_note data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_note data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group_note", "description": "Must be 'table_group_note' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group_note operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "filter", "description": "Must be 'filter' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "filter operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "note", "description": "Must be 'note' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "note operation", "type": "object" }], "properties": { "data": { "description": "Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.", "oneOf": [{ "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table data", "type": "object" }, { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "column data", "type": "object" }, { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index data", "type": "object" }, { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index_column data", "type": "object" }, { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref data", "type": "object" }, { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref_column data", "type": "object" }, { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" }, { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "title": "enum_value data", "type": "object" }, { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" }, { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_table data", "type": "object" }, { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_note data", "type": "object" }, { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" }, { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" }], "type": "object" }, "op": { "description": "Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "description": "ERD entity type. This selects the operation.data shape.", "enum": ["table", "column", "index", "index_column", "ref", "ref_column", "enum", "enum_value", "table_group", "table_group_table", "table_group_note", "filter", "note"], "type": "string" }, "uuid": { "description": "Target UUID for update/delete. Do not use this for create; use data.uuid instead.", "type": "string" } }, "required": ["op", "type"], "type": "object" }, "type": "array" } }, "required": ["documentUuid", "description", "operations"], "type": "object" }, "required": ["description", "documentUuid", "operations"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "87f5bcf5a253815a" },
|
|
880
880
|
{ "mcpName": "erd_arrange_tables", "commandPath": ["erd", "arrange-tables"], "group": "erd", "description": "Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "full": { "description": "Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.", "type": "boolean" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "651fd0d54e3635ff" },
|
|
881
|
-
{ "mcpName": "erd_get_enum", "commandPath": ["erd", "get-enum"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "enumUuid": { "description": "Enum UUID", "type": "string" } }, "required": ["documentUuid", "enumUuid"], "type": "object" }, "required": ["documentUuid", "enumUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
882
|
-
{ "mcpName": "erd_get_ref", "commandPath": ["erd", "get-ref"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "refUuid": { "description": "Relationship UUID", "type": "string" } }, "required": ["documentUuid", "refUuid"], "type": "object" }, "required": ["documentUuid", "refUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
881
|
+
{ "mcpName": "erd_get_enum", "commandPath": ["erd", "get-enum"], "group": "erd", "description": "Read one ERD enum with its values (uuid, value, note, displayOrder). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the enum belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "enumUuid": { "description": "Enum UUID", "type": "string" } }, "required": ["documentUuid", "enumUuid"], "type": "object" }, "required": ["documentUuid", "enumUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "ae536a31eb604f3a" },
|
|
882
|
+
{ "mcpName": "erd_get_ref", "commandPath": ["erd", "get-ref"], "group": "erd", "description": "Read one ERD relationship with its column pairs (fromColumnUuid to toColumnUuid, displayOrder). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the relationship belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "refUuid": { "description": "Relationship UUID", "type": "string" } }, "required": ["documentUuid", "refUuid"], "type": "object" }, "required": ["documentUuid", "refUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e71d40552c0df42e" },
|
|
883
883
|
{ "mcpName": "erd_get_table", "commandPath": ["erd", "get-table"], "group": "erd", "description": "Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.", "inputSchema": { "description": "Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.", "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableUuid": { "description": "Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.", "type": "string" } }, "required": ["documentUuid", "tableUuid"], "type": "object" }, "required": ["documentUuid", "tableUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "0dc13648bf3fbf8f" },
|
|
884
|
-
{ "mcpName": "erd_get_table_group", "commandPath": ["erd", "get-table-group"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableGroupUuid": { "description": "Table group UUID", "type": "string" } }, "required": ["documentUuid", "tableGroupUuid"], "type": "object" }, "required": ["documentUuid", "tableGroupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
885
|
-
{ "mcpName": "erd_list_enums", "commandPath": ["erd", "list-enums"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
886
|
-
{ "mcpName": "erd_list_refs", "commandPath": ["erd", "list-refs"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
887
|
-
{ "mcpName": "erd_list_table_groups", "commandPath": ["erd", "list-table-groups"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
888
|
-
{ "mcpName": "erd_list_tables", "commandPath": ["erd", "list-tables"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
889
|
-
{ "mcpName": "get_attachment", "commandPath": ["attachment", "get"], "group": "attachment", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Attachment UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
890
|
-
{ "mcpName": "get_document", "commandPath": ["document", "get"], "group": "document", "description": "Read a document. The body comes back for the types whose create/update take one: markdown \u2192 content; openapi \u2192 content (the spec text) + format/specVersion/pathCount/operationCount; html \u2192 content (the HTML text); file \u2192 file {filename, contentType, sizeBytes, viewerKind} + content for text/CSV (first 64 KB); diagram \u2192 diagramSource/sourceLanguage/edgeStyle/isModule/metadata; erd \u2192 metadata only (read tables/refs via erd_list_*).", "inputSchema": { "properties": { "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
891
|
-
{ "mcpName": "get_my_work_summary", "commandPath": ["my-work-summary", "get"], "group": "generic", "description": `One-call summary of what is waiting for the signed-in user in AiNecto \u2014 call it when the user asks things like "do I have anything to do?", "anything new?", "anything to review?" or "did anyone ask me something?". Returns notifications {unread (not yet read by the person, newest 100 counted; unreadCapped when there are more
|
|
892
|
-
{ "mcpName": "get_project", "commandPath": ["project", "get"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
893
|
-
{ "mcpName": "get_version", "commandPath": ["version", "get"], "group": "generic", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "required": ["documentUuid", "versionNumber"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
894
|
-
{ "mcpName": "get_workspace", "commandPath": ["workspace", "get"], "group": "workspace", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "
|
|
895
|
-
{ "mcpName": "identity_get_self", "commandPath": ["tools", "run", "identity-get-self"], "group": "generic", "description": "Return the authenticated MCP caller identity summary
|
|
896
|
-
{ "mcpName": "
|
|
897
|
-
{ "mcpName": "
|
|
898
|
-
{ "mcpName": "
|
|
899
|
-
{ "mcpName": "
|
|
900
|
-
{ "mcpName": "
|
|
901
|
-
{ "mcpName": "
|
|
902
|
-
{ "mcpName": "
|
|
903
|
-
{ "mcpName": "
|
|
904
|
-
{ "mcpName": "
|
|
905
|
-
{ "mcpName": "
|
|
906
|
-
{ "mcpName": "
|
|
907
|
-
{ "mcpName": "
|
|
908
|
-
{ "mcpName": "
|
|
909
|
-
{ "mcpName": "
|
|
910
|
-
{ "mcpName": "
|
|
911
|
-
{ "mcpName": "
|
|
912
|
-
{ "mcpName": "
|
|
913
|
-
{ "mcpName": "
|
|
914
|
-
{ "mcpName": "
|
|
915
|
-
{ "mcpName": "
|
|
916
|
-
{ "mcpName": "
|
|
917
|
-
{ "mcpName": "
|
|
918
|
-
{ "mcpName": "
|
|
919
|
-
{ "mcpName": "
|
|
920
|
-
{ "mcpName": "
|
|
921
|
-
{ "mcpName": "
|
|
922
|
-
{ "mcpName": "
|
|
923
|
-
{ "mcpName": "
|
|
924
|
-
{ "mcpName": "
|
|
925
|
-
{ "mcpName": "
|
|
926
|
-
{ "mcpName": "
|
|
927
|
-
{ "mcpName": "
|
|
884
|
+
{ "mcpName": "erd_get_table_group", "commandPath": ["erd", "get-table-group"], "group": "erd", "description": "Read one ERD table group: uuid, name, color and noteUuids. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the group belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableGroupUuid": { "description": "Table group UUID", "type": "string" } }, "required": ["documentUuid", "tableGroupUuid"], "type": "object" }, "required": ["documentUuid", "tableGroupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "ed949fa7ca0884b2" },
|
|
885
|
+
{ "mcpName": "erd_list_enums", "commandPath": ["erd", "list-enums"], "group": "erd", "description": "List the enums of one ERD document: uuid, name, schemaName and note. Values are not included \u2014 erd_get_enum reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns enums and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "ea76585e1cca3997" },
|
|
886
|
+
{ "mcpName": "erd_list_refs", "commandPath": ["erd", "list-refs"], "group": "erd", "description": "List the relationships (foreign-key refs) of one ERD document: uuid, name, fromTableUuid, toTableUuid, relationship (>, < or -), onDelete and onUpdate. Column pairs are not included \u2014 erd_get_ref reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns refs and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "2292c8caf4fc5c25" },
|
|
887
|
+
{ "mcpName": "erd_list_table_groups", "commandPath": ["erd", "list-table-groups"], "group": "erd", "description": "List the table groups of one ERD document: uuid, name, color and noteUuids (the notes in the group). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns tableGroups and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "4c910d38ca4bfc82" },
|
|
888
|
+
{ "mcpName": "erd_list_tables", "commandPath": ["erd", "list-tables"], "group": "erd", "description": "List the tables of one ERD document: uuid, name, schemaName, alias, note, headerColor and displayOrder. Columns and indexes are not included \u2014 erd_get_table reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns tables and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e9aed0d47d33c169" },
|
|
889
|
+
{ "mcpName": "get_attachment", "commandPath": ["attachment", "get"], "group": "attachment", "description": "Read one attachment's metadata by UUID: filename, contentType, sizeBytes, parent, uploadedBy, archived. It does not return the file contents or a download link. Needs read access to the whole project. Read only. Fails with 404 for an unknown UUID and 403 without access.", "inputSchema": { "properties": { "uuid": { "description": "Attachment UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "f7ff5a989c9ef3b9" },
|
|
890
|
+
{ "mcpName": "get_document", "commandPath": ["document", "get"], "group": "document", "description": "Read a document. The body comes back for the types whose create/update take one: markdown \u2192 content; openapi \u2192 content (the spec text) + format/specVersion/pathCount/operationCount; html \u2192 content (the HTML text); file \u2192 file {filename, contentType, sizeBytes, viewerKind} + content for text/CSV (first 64 KB); diagram \u2192 diagramSource/sourceLanguage/edgeStyle/isModule/metadata; kanban \u2192 board {viewer, columns: each column's first 20 cards + hasMore} (more cards and card details via kanban_list_cards); erd \u2192 metadata only (read tables/refs via erd_list_*).", "inputSchema": { "properties": { "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "5c8e9d305fc15c1f" },
|
|
891
|
+
{ "mcpName": "get_my_work_summary", "commandPath": ["my-work-summary", "get"], "group": "generic", "description": `One-call summary of what is waiting for the signed-in user in AiNecto \u2014 call it when the user asks things like "do I have anything to do?", "anything new?", "anything to review?" or "did anyone ask me something?". Returns notifications {unread (not yet read by the person \u2014 the same read state as the web bell, so reading on the web lowers it at once; newest 100 counted; unreadCapped when there are more; the same number as the line at the end of tool results), unreadByKind}, mentionsToRead {items the person has not read that mention them, each with target title and url}, and todos {open (stays until the to-do is done or closed; the to-dos on that line), leaseExpired, inProgress, items: questions and requests waiting for the user's agent} and cards {kanban cards assigned to the user on boards they can read now: assignedOpen, pendingAcceptance (assigned but not yet accepted or declined), inProgress, inReview, blocked, items: the first page}. For details use list_notifications, list_agent_todos and kanban_list_cards; to read the document and its comments use get_document with the target uuid. Read-only: nothing is marked read or acknowledged.`, "inputSchema": { "additionalProperties": false, "properties": { "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only items in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only items in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "bcb546e954f81945" },
|
|
892
|
+
{ "mcpName": "get_project", "commandPath": ["project", "get"], "group": "generic", "description": "Read one project by UUID: name, projectKey, description, workspaceId, publicReadable and publicToken, archived and revision. Read only. Fails with 404 for an unknown UUID and 403 when you cannot open the whole project or it is archived.", "inputSchema": { "properties": { "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "f4ec896c20a1f99f" },
|
|
893
|
+
{ "mcpName": "get_version", "commandPath": ["version", "get"], "group": "generic", "description": "Read one saved version of a document, including snapshotJson \u2014 the full saved content in that document type's stored format. Read only; needs read access. Fails with 404 for an unknown version number and with a plan-limit error for a locked version (see list_versions).", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "required": ["documentUuid", "versionNumber"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "d80e338a03804261" },
|
|
894
|
+
{ "mcpName": "get_workspace", "commandPath": ["workspace", "get"], "group": "workspace", "description": "Read one workspace by UUID: name, description, owner, archived and revision. Works for any workspace you can see, including one where you were only given a project. Read only. Fails with 404 for an unknown UUID and 403 when you have no access or the workspace is archived.", "inputSchema": { "properties": { "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "8bc1d78109480495" },
|
|
895
|
+
{ "mcpName": "identity_get_self", "commandPath": ["tools", "run", "identity-get-self"], "group": "generic", "description": "Return the authenticated MCP caller identity summary: userId, display name, and job profile (the user's job title and areas \u2014 personal context only, it never changes what they may do). Never returns email or token claims.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "2298c704e1563bdb" },
|
|
896
|
+
{ "mcpName": "identity_list_job_roles", "commandPath": ["tools", "run", "identity-list-job-roles"], "group": "generic", "description": "List the job roles the signed-in user can pick for their own job profile \u2014 the same list as the account settings screen: roles {code, title, family}, families, areas {code, title}, suggested role codes, customCode (pick it to type a title that is not in the list) and titleMaxLength. Use the codes with identity_update_job_profile. A job profile is personal context only; it never changes what the user may do.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "59a20e90a49eb02d" },
|
|
897
|
+
{ "mcpName": "identity_update_job_profile", "commandPath": ["tools", "run", "identity-update-job-profile"], "group": "generic", "description": "Set the signed-in user's own job profile (job role and areas) \u2014 the same setting as the account settings screen. It only ever changes the caller's own profile. Pick code and areas from identity_list_job_roles; pass null as code to clear it. Returns the saved jobProfile in the same shape as identity_get_self (null when cleared). Invalid values fail with INVALID_JOB_PROFILE and change nothing. A job profile is personal context only; it never changes what the user may do.", "inputSchema": { "additionalProperties": false, "properties": { "areas": { "description": "Area codes from identity_list_job_roles; the first is the primary area. At least one with the custom code, optional for a listed role. Each area once.", "items": { "description": "Area code.", "type": "string" }, "type": "array" }, "code": { "description": "Job role code from identity_list_job_roles, or its customCode to type your own title. null clears the job profile.", "type": ["string", "null"] }, "title": { "description": "The role title in the user's own words \u2014 required with the custom code, ignored for a listed role (its title comes from the list).", "type": "string" } }, "required": ["code"], "type": "object" }, "required": ["code"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "de9d5d59fcddfa45" },
|
|
898
|
+
{ "mcpName": "kanban_apply_changes", "commandPath": ["kanban", "apply-changes"], "group": "kanban", "description": "Create, edit, reorder and link cards on one kanban board in a single atomic call (at most 100 operations; if one fails nothing is applied and the error carries operationIndex and code). Creating and editing cards needs edit access to the board; move with toBoardUuid moves a card to another board of the same project. The assignee may also check acceptance criteria and add result links (DELIVERABLE, REVIEW_RESULT, TEST_EVIDENCE). create also sets assignee, requester, reviewers and watchers in the same call. To change a card's column, reassign it, accept, approve, block, watch and similar, use kanban_card_action. Results list each operation's card uuid, revision, status and sortKey.", "inputSchema": { "additionalProperties": false, "properties": { "boardUuid": { "description": "Kanban board (document) UUID.", "type": "string" }, "mailLanguage": { "description": "Language of the emails these operations may send (review requests to newly named reviewers). Defaults to en.", "enum": ["en", "ko"], "type": "string" }, "operations": { "description": "Operations, applied in order in one transaction. If any fails, none is applied and the error names operationIndex.", "items": { "additionalProperties": false, "properties": { "afterCardUuid": { "description": "Place after this card in the column (create, move).", "type": "string" }, "assigneeUserId": { "description": "create only: assign the new card (userId from list_mention_candidates with the board's documentUuid). Someone other than you gets an assignment to accept. To reassign an existing card use kanban_card_action assign.", "type": "string" }, "beforeCardUuid": { "description": "move: place before this card in the column.", "type": "string" }, "cardType": { "description": "Card type (default TASK).", "enum": ["TASK", "REVIEW", "BUG", "DECISION"], "type": "string" }, "cardUuid": { "description": "Target card (update, move, link, unlink). It must be on this board. From kanban_list_cards \u2014 by cardKeys if you only have the card key, e.g. KAN-15.", "type": "string" }, "clientMutationId": { "description": "create: idempotency key \u2014 retrying with the same value returns the same card instead of creating another.", "type": "string" }, "criteria": { "description": "Acceptance criteria. update replaces the whole list; the assignee may only flip done.", "items": { "additionalProperties": false, "properties": { "done": { "description": "Checked (default false).", "type": "boolean" }, "text": { "description": "What must be true.", "type": "string" } }, "required": ["text"], "type": "object" }, "type": "array" }, "description": { "description": "Markdown description. Keep it short \u2014 link longer text as a document instead. update: null clears it.", "type": ["string", "null"] }, "documentUuid": { "description": "AiNecto document to link (you must be able to read it). Give this or url.", "type": "string" }, "dueAt": { "description": "Due time, ISO-8601 instant such as 2026-10-31T09:00:00Z. update: null clears it.", "type": ["string", "null"] }, "expectedRevision": { "description": "The card revision you last read. If the card changed since, the whole call fails with CARD_CHANGED and the current card. Send it when people may edit the card too.", "minimum": 0, "type": "integer" }, "label": { "description": "Optional label for an external URL.", "type": "string" }, "linkId": { "description": "unlink: the linkId from the card's links.", "minimum": 1, "type": "integer" }, "linkRole": { "description": "Link role. The assignee may add DELIVERABLE, REVIEW_RESULT and TEST_EVIDENCE links; other roles need edit access to the board.", "enum": ["REQUIREMENT", "REFERENCE", "DELIVERABLE", "REVIEW_RESULT", "DECISION", "TEST_EVIDENCE"], "type": "string" }, "links": { "description": "create only: links to attach.", "items": { "additionalProperties": false, "properties": { "documentUuid": { "description": "AiNecto document to link (you must be able to read it). Give this or url.", "type": "string" }, "label": { "description": "Optional label for an external URL.", "type": "string" }, "linkRole": { "description": "Link role. The assignee may add DELIVERABLE, REVIEW_RESULT and TEST_EVIDENCE links; other roles need edit access to the board.", "enum": ["REQUIREMENT", "REFERENCE", "DELIVERABLE", "REVIEW_RESULT", "DECISION", "TEST_EVIDENCE"], "type": "string" }, "url": { "description": "External http(s) URL to link, e.g. a pull request. Give this or documentUuid.", "type": "string" } }, "required": ["linkRole"], "type": "object" }, "type": "array" }, "op": { "description": "create: a new card in To Do (you become its requester unless requesterUserId names someone else). update: change only the fields you send (send null to clear description, dueAt). move: reorder within the card's column, or with toBoardUuid move it to another board of the same project. link / unlink: attach or remove a document or an external URL.", "enum": ["create", "link", "move", "unlink", "update"], "type": "string" }, "priority": { "description": "Priority (default MEDIUM).", "enum": ["LOW", "MEDIUM", "HIGH", "URGENT"], "type": "string" }, "requesterUserId": { "description": "create only: the requester (reporter) instead of you; they are notified. To change it later use kanban_card_action set_requester.", "type": "string" }, "responderIds": { "description": "update only: who should answer while the card is blocked.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "reviewerIds": { "description": "Reviewers (userIds from list_mention_candidates with cardUuid or the board's documentUuid). update replaces the whole list.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "title": { "description": "Card title (required for create).", "type": "string" }, "toBoardUuid": { "description": "move: another kanban board (document UUID) in the same project to move the card to. It keeps its key, column, people, comments, links and to-dos; afterCardUuid / beforeCardUuid then name cards on that board. Needs edit access to both boards, and everyone on the card (requester, assignee, reviewers, watchers, responders) must be able to read the new board.", "type": "string" }, "url": { "description": "External http(s) URL to link, e.g. a pull request. Give this or documentUuid.", "type": "string" }, "watcherIds": { "description": "Watchers who get activity notifications. update replaces the whole list.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "required": ["op"], "type": "object" }, "maxItems": 100, "minItems": 1, "type": "array" } }, "required": ["boardUuid", "operations"], "type": "object" }, "required": ["boardUuid", "operations"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "b0068321e34a0614" },
|
|
899
|
+
{ "mcpName": "kanban_card_action", "commandPath": ["kanban", "card-action"], "group": "kanban", "description": "Do one workflow action on a kanban card, the same as the buttons in the web app. \u2605Before assign (to someone other than the signed-in user), approve or quick_done, show the user what will happen and get their explicit confirmation \u2014 these change other people's work and notify them. Actions: assign / unassign; accept / decline (only the assignee \u2014 accepting closes the assignment to-do); start (To Do \u2192 In Progress; anyone who can edit the board, or the assignee \u2014 not while an assignment is waiting to be accepted); request_review (\u2192 In Review); approve (\u2192 Done) / request_changes (\u2192 In Progress) by the requester or a reviewer; quick_done (To Do \u2192 Done); reopen (Done \u2192 In Progress); block / unblock; archive / unarchive; set_requester; watch / unwatch (yourself). Doing the action is what closes the matching card to-dos \u2014 update_agent_todos cannot complete them. Returns the card after the action (status, assignment state, allowedActions) and reasonCommentId when a reason was saved.", "inputSchema": { "additionalProperties": false, "properties": { "action": { "description": "The action. Which ones you may do now is the card's allowedActions in kanban_list_cards (with cardUuids).", "enum": ["assign", "unassign", "accept", "decline", "start", "request_review", "approve", "request_changes", "quick_done", "reopen", "block", "unblock", "archive", "unarchive", "set_requester", "watch", "unwatch"], "type": "string" }, "assigneeUserId": { "description": "assign: who gets the card \u2014 someone who can read the board (list_mention_candidates with cardUuid). Your own userId assigns it to you and accepts at once.", "type": "string" }, "cardUuid": { "description": "Card UUID (from kanban_list_cards \u2014 by cardKeys if you only have the card key, e.g. KAN-15).", "type": "string" }, "expectedRevision": { "description": "The card revision you last read. If the card changed since, the call fails with CARD_CHANGED and the current card. Send it when people may act on the card too.", "minimum": 0, "type": "integer" }, "mailLanguage": { "description": "Language of the email this action may send (assignment or review request). Defaults to en.", "enum": ["en", "ko"], "type": "string" }, "reason": { "description": "Saved as a comment on the card. Required when the action's allowedActions entry says reasonRequired (e.g. decline, reopen).", "type": "string" }, "requesterUserId": { "description": "set_requester: the new requester.", "type": "string" }, "responderIds": { "description": "block: who should answer (people who can read the board). Omit to keep the card's current responders.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "required": ["cardUuid", "action"], "type": "object" }, "required": ["action", "cardUuid"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "a138310eae3979ae" },
|
|
900
|
+
{ "mcpName": "kanban_list_cards", "commandPath": ["kanban", "list-cards"], "group": "kanban", "description": "Read kanban cards. Three ways: cardUuids (or cardKeys) \u2192 those cards in full, including allowedActions (what you may do now with kanban_card_action) and links; boardUuid \u2192 the board's columns To Do, In Progress, In Review, Done (each with hasMore and nextAfter); none of these \u2192 cards across all boards you can read where you are the assignee (or requester / watcher), most recently updated first. Each card has uuid and key (KAN-15 \u2014 the short id people use in chat; find a card by it with cardKeys, then use its uuid in the write tools), title, status, assignee and assignmentState (PENDING = not yet accepted), blocked, revision and allowedTransitions.", "inputSchema": { "additionalProperties": false, "properties": { "boardUuid": { "description": "Board (document) UUID: list its columns, first page each (or one column with status).", "type": "string" }, "cardKeys": { "description": "Read these cards in full by their key (e.g. KAN-15 \u2014 the short id people use in chat), the same as cardUuids. Use alone.", "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array", "uniqueItems": true }, "cardUuids": { "description": "Read these cards in full (description, people, links, allowedActions). Use alone.", "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array", "uniqueItems": true }, "cursor": { "description": "Next page: nextCursor (without boardUuid) or a column's nextAfter (with boardUuid and status).", "type": "string" }, "includeDone": { "description": "Without boardUuid: also recently completed cards.", "type": "boolean" }, "limit": { "description": "Cards per page (per column with boardUuid). Default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Without boardUuid: only boards in this project.", "type": "string" }, "relation": { "description": "Without boardUuid: cards across boards where you are the assignee (default), the requester or a watcher.", "enum": ["ASSIGNEE", "REQUESTER", "WATCHER"], "type": "string" }, "status": { "description": "With boardUuid: only this column.", "enum": ["TODO", "IN_PROGRESS", "IN_REVIEW", "DONE"], "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e04eb730f4bc5413" },
|
|
901
|
+
{ "mcpName": "list_agent_todos", "commandPath": ["agent-todos", "list"], "group": "generic", "description": "List the to-dos that ask the signed-in user's agent to act now (for example a question that mentions the user). This is the current state, not a feed: a to-do you have not finished comes back on every call until it is completed, dismissed, or closed because the person did it themselves. Each item has todoId, kind, obligation, openedAt, summary, target (title and url), action and state. To work on one, claim it with update_agent_todos and complete it with a one-line note. Actions that affect other people (assigning, approving, inviting) need the user's confirmation first.", "inputSchema": { "additionalProperties": false, "properties": { "after": { "description": "todoId of the last item of the previous page.", "type": "string" }, "kinds": { "description": "Only these kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only to-dos in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "state": { "description": "OPEN (default): to-dos you can take, including ones whose lease expired. MINE: to-dos currently leased (claimed) and not expired.", "items": { "enum": ["OPEN", "MINE"], "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only to-dos in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "5285b988db5b02d0" },
|
|
902
|
+
{ "mcpName": "list_attachments", "commandPath": ["attachments", "list"], "group": "attachment", "description": "List the active attachments in a project, newest first: uuid, filename, contentType, sizeBytes, parentType and parentId, uploadedBy. Metadata only \u2014 no file contents or download link. Removed attachments are not listed. Needs read access to the whole project. Read only. Returns attachments and count.", "inputSchema": { "properties": { "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid"], "type": "object" }, "required": ["projectUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "fbd087e35c18f8b3" },
|
|
903
|
+
{ "mcpName": "list_comments", "commandPath": ["comments", "list"], "group": "generic", "description": "List the active comments on a document or a kanban card (cardUuid), oldest first, including replies (a reply has parentCommentId set; replies are one level deep). Each comment has id, kind (COMMENT or QUESTION), body, author, mentions (userId, label and position in the body), and for questions questionState (UNANSWERED, ANSWERED, RESOLVED) and resolvedAt. Anyone who can read it can list its comments.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "21dbfc4740a62df5" },
|
|
904
|
+
{ "mcpName": "list_documents", "commandPath": ["documents", "list"], "group": "document", "description": "List or search documents you can read, including ones shared with you individually. Without q it lists the documents directly in folderUuid (not its subfolders), otherwise in projectUuid, otherwise every document you can read in every project; only active documents (the trash is list_trash). With q it searches the document search index (mode=search; at most limit hits, default and maximum 50; with total), narrowed by projectUuid and by folderUuid including its subfolders. type filters by document type. Titles can repeat \u2014 compare folder and project and ask the user when several match. Read only. Returns documents, count and mode.", "inputSchema": { "properties": { "folderUuid": { "description": "Optional folder UUID. With q, searches this folder and the folders under it.", "type": "string" }, "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "q": { "description": "Optional full-text query. When provided, results come from the search index instead of folder listing.", "type": "string" }, "type": { "description": "Optional document type filter. Readable values: erd, markdown, diagram, openapi, html, file, kanban.", "enum": ["erd", "markdown", "diagram", "openapi", "html", "file", "kanban"], "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "0688eb9c73eeca85" },
|
|
905
|
+
{ "mcpName": "list_folders", "commandPath": ["folders", "list"], "group": "generic", "description": "List all active folders of one project as a flat list (uuid, id, name, parentFolderId, depth, displayOrder, app url); rebuild the tree from id and parentFolderId. Trashed folders are not included. Folder names can repeat \u2014 tell them apart by parent and ask the user when unsure. Needs read access to the whole project. Read only. Returns folders and count.", "inputSchema": { "properties": { "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid"], "type": "object" }, "required": ["projectUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "b021246818866bac" },
|
|
906
|
+
{ "mcpName": "list_history", "commandPath": ["history", "list"], "group": "generic", "description": "List recent activity (who did what, people and agents) in a workspace, a project, or on one resource, newest first. Give at least one of workspaceUuid, projectUuid, or resourceType with resourceUuid; you need editor access or higher in that scope. This is a list to refresh, not a gap-free feed: to see what is new, read the first page again and skip ids you have already seen; to get each new notification exactly once use list_notifications. Each item has id, kind, at, lastAt, coalesceCount, actor, target (title and url only when you can read it now), changes and summary.", "inputSchema": { "additionalProperties": false, "properties": { "actorType": { "description": "Only people (USER) or only agents (AGENT).", "enum": ["USER", "AGENT"], "type": "string" }, "before": { "description": "nextCursor of the previous page (older items).", "type": "string" }, "kinds": { "description": "Only these kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Activity in this project.", "type": "string" }, "resourceType": { "description": "With resourceUuid: activity on one resource.", "enum": ["DOCUMENT", "PROJECT", "KANBAN_CARD"], "type": "string" }, "resourceUuid": { "description": "UUID of the resource named by resourceType.", "type": "string" }, "workspaceUuid": { "description": "Activity in this workspace.", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "9774a593c634070c" },
|
|
907
|
+
{ "mcpName": "list_mention_candidates", "commandPath": ["mention-candidates", "list"], "group": "generic", "description": "List the people you can mention in comments on a document or a kanban card (cardUuid): userId, displayName and jobTitle (null = not set) \u2014 jobTitle helps tell people with the same name apart. Only people who can read it are listed \u2014 for a card, the people who can read its board, which are also the people a card can be assigned to. To mention someone, write @<displayName> exactly in the comment body and pass their userId in mentionUserIds of create_comments or update_comments. Page with nextCursor while hasMore is true.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "cursor": { "description": "nextCursor from the previous page (same parent and query).", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "limit": { "description": "Page size, 1..50. Defaults to 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "query": { "description": "Name filter, 0..100 characters. Omit or leave empty for the first page of everyone.", "maxLength": 100, "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "c06acebfee9d635a" },
|
|
908
|
+
{ "mcpName": "list_notifications", "commandPath": ["notifications", "list"], "group": "generic", "description": "Read new notifications for the signed-in user, oldest first and without gaps \u2014 for an agent that checks the inbox periodically. The server remembers, per connection and per filter (kinds, workspaceUuids, projectUuids, directOnly), how far you have acknowledged; a new filter starts from now. Each response carries ackToken: pass it as ack in your next call (with the same filter) after you have handled the batch \u2014 if you do not, the next call returns the same batch again (identify duplicates by id and seq; an item that comes back with a higher seq and a larger groupCount is an update of the same entry). Each item has id, seq, kind, at, summary (one line), actor, target (title and url only when you can read it now), action (what the user is asked to do) and humanRead. An item you can no longer read comes back as {id, seq, at, redacted: true}. This tool never marks anything read for the person (use mark_notifications_read when the user asks); open to-dos are in list_agent_todos. Calls closer than 30 seconds apart (except a call that carries ack) return retryAfterSeconds instead of items.", "inputSchema": { "additionalProperties": false, "properties": { "ack": { "description": "The ackToken of the previous response. Send it with the same filter once you have handled (or safely stored) that batch; only then does the saved position move past it. Without it, the same batch is returned again.", "type": "string" }, "cursor": { "description": 'Where to read from. "saved" (default): after what this connection last acknowledged for this same filter. "latest": from now on (moves the saved position to now). "earliest": everything still kept (90 days). Or a nextCursor from a previous response: read after it without using or changing the saved position.', "type": "string" }, "directOnly": { "description": "Only notifications that point at you directly (mentions, questions to you).", "type": "boolean" }, "kinds": { "description": "Only these notification kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only notifications in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only notifications in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "015227aee445b6a7" },
|
|
909
|
+
{ "mcpName": "list_projects", "commandPath": ["projects", "list"], "group": "generic", "description": "Find projects you can open. With no arguments it lists every active project you can open, across all workspaces; workspaceUuid narrows it to one workspace (an unknown UUID gives an empty list). With q it searches the project search index instead (mode=search; at most limit hits, default and maximum 50; with total). Archived projects are never listed. Project names can repeat \u2014 compare workspaceId and ask the user when several match. Read only. Returns projects, count and mode.", "inputSchema": { "properties": { "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "q": { "description": "Optional full-text query", "type": "string" }, "workspaceUuid": { "description": "Optional Workspace UUID", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "4b6c8543d156b77b" },
|
|
910
|
+
{ "mcpName": "list_trash", "commandPath": ["trash", "list"], "group": "generic", "description": "List the documents in the trash across every project you can open as a whole (access through a single shared folder or file does not count): documents deleted with delete_documents or inside a trashed folder. Trashed folders, archived projects and archived workspaces are not listed here. Read only, no paging. Returns trashed (document rows: uuid, title, type, projectId, folderId) and count. unarchive_documents restores one; the server permanently deletes trashed documents once the trash retention period passes (30 days by default).", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "7dcdbf558ec22318" },
|
|
911
|
+
{ "mcpName": "list_versions", "commandPath": ["versions", "list"], "group": "generic", "description": "List a document's saved versions, newest first: versionNumber, versionType, title, changeSummary, createdBy, createdAt and locked. locked=true means the version is outside your plan's history window and cannot be opened or restored. get_version reads one and restore_versions rolls back. Read only; needs read access. Returns versions and count.", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "520d624a2b239d37" },
|
|
912
|
+
{ "mcpName": "list_workspaces", "commandPath": ["workspaces", "list"], "group": "workspace", "description": "List the personal workspaces you own (active ones only). Workspaces that other people or a team share with you are not included \u2014 list_projects shows every project you can open (each row has workspaceId) and get_workspace reads one workspace. Read only. Returns workspaces (uuid, name, description, owner, revision) and count.", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "146a971a0e1986e2" },
|
|
913
|
+
{ "mcpName": "mark_notifications_read", "commandPath": ["tools", "run", "mark-notifications-read"], "group": "generic", "description": "Mark the signed-in user's notifications as read in the AiNecto inbox \u2014 the same read state as the web bell, so the unread badge goes down. Call it only when the user explicitly asks you to mark notifications read; reading or acknowledging notifications (list_notifications ack) does not do this. Pass the id and seq of each item as you received them. Results are per item: {id, ok: true, readAt, alreadyRead?} or {id, ok: false, error} with error one of STALE (the entry was updated after you saw it \u2014 it stays unread; seq is the current one), NOT_FOUND (not your notification, archived, or no such id), INVALID. unread is the user's unread count after the call (the number on the web bell, unreadCapped when above it). Only your own notifications. Retrying is safe. It does not close to-dos and does not acknowledge anything for list_notifications.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "Notifications to mark read; each item is applied and reported on its own.", "items": { "additionalProperties": false, "properties": { "id": { "description": "Notification id from list_notifications or get_my_work_summary (mentionsToRead).", "type": "string" }, "seq": { "description": "The seq of that same item as you received it. If the entry was updated after you saw it (higher seq), it stays unread and you get STALE.", "type": "integer" } }, "required": ["id", "seq"], "type": "object" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "79076cb2c0562ccb" },
|
|
914
|
+
{ "mcpName": "markdown_append_document", "commandPath": ["markdown", "append-document"], "group": "markdown", "description": "Append text to the end of Markdown documents without resending the existing body; separator goes between the old body and the addition. The change is kept in version history (restore_versions can undo it). Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns appended (document rows) and count. Fails with 409 when the document is in the trash or its folder, project or workspace is archived. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Appends", "items": { "properties": { "addition": { "description": "Body addition. \uCD94\uAC00\uD560 \uB0B4\uC6A9\uC774 \uD06C\uBA74 (\uC218\uC2ED KB \uC774\uC0C1) LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` \uB85C uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "separator": { "description": "Separator between existing body and addition", "type": "string" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid", "addition"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "a03ed0662ffcd6e4" },
|
|
915
|
+
{ "mcpName": "markdown_generate_document", "commandPath": ["markdown", "generate-document"], "group": "markdown", "description": "Queue a Markdown generation request (status PENDING) for a separate worker that claims requests through AiNecto's AI request API. This tool does not generate text and does not change the document; to write content yourself use update_documents or markdown_append_document. The queued request keeps only prompt and context, not documentUuid, so put everything the worker needs in context. Needs edit access to the document and an AI credit balance above zero; queuing is rate-limited per user. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns queued (uuid, status, documentUuid) and count.", "inputSchema": { "properties": { "items": { "description": "Generation requests", "items": { "properties": { "context": { "description": "Optional JSON context", "type": "string" }, "documentUuid": { "description": "Target document UUID", "type": "string" }, "prompt": { "description": "Generation prompt", "type": "string" } }, "required": ["documentUuid", "prompt"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "822ac36c10f330d4" },
|
|
916
|
+
{ "mcpName": "move_documents", "commandPath": ["documents", "move"], "group": "document", "description": "Move documents to another folder, to a project's top level (empty newFolderUuid), or into another project \u2014 even in another workspace \u2014 with targetProjectUuid (targetWorkspaceUuid is only a check that must match that project's workspace). Attachments, including those on its comments, go with the document. Sharing inherited from the old folder or project stops applying and is reported in unlinkedInheritedShares; the destination's sharing applies instead. Confirm with the user before moving documents into another project or workspace. Needs edit access to each document and to the destination (and to the source project when leaving it); moving into a different storage quota can be refused. All-or-nothing: if any item fails, nothing moves. Sends no email or inbox notification. Returns moved (document rows), count, unlinkedInheritedShareCount and attachmentsReprojected.", "inputSchema": { "properties": { "clientMutationId": { "description": "Optional mutation identifier for client retry tracing", "maxLength": 128, "minLength": 1, "pattern": "^[\\x21-\\x7E]{1,128}$", "type": "string" }, "items": { "description": "Moves", "items": { "properties": { "newFolderUuid": { "description": "New folder UUID \u2014 null/empty for root", "type": "string" }, "targetProjectUuid": { "description": "Target project UUID \u2014 omit to stay in current project", "type": "string" }, "targetWorkspaceUuid": { "description": "Guard only: must match targetProjectUuid workspace", "type": "string" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "c0ca210155b35be0" },
|
|
917
|
+
{ "mcpName": "move_folders", "commandPath": ["folders", "move"], "group": "generic", "description": "Move folders, with everything under them, under another folder of the same project, or to the project's top level when newParentFolderUuid is empty. Folders cannot move between projects (move_documents can move documents across projects). A folder cannot go under itself or its own subfolder, and the result must stay within 50 levels. Sharing inherited from the old parent folders stops applying and the new parents' sharing applies instead. Needs edit access to the folder and to the new parent. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns moved (folder rows) and count.", "inputSchema": { "properties": { "items": { "description": "Moves", "items": { "properties": { "newParentFolderUuid": { "description": "New parent UUID \u2014 null/empty for root", "type": "string" }, "uuid": { "description": "Folder UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "95ee0d3da59ec301" },
|
|
918
|
+
{ "mcpName": "move_projects", "commandPath": ["projects", "move"], "group": "generic", "description": "Move projects, with all their folders, documents and attachments, into another workspace. This changes who can open them: people with access to the old workspace lose it, people with access to the target workspace gain it, and people given the project itself keep it. Public links stay as they were. Confirm with the user before moving a project into a team workspace. Needs edit access to the project and to the target workspace; moving to the workspace it is already in does nothing. Each item is tried on its own and the call does not stop at a failure: results reports each item as ok, or with status and error (409 when its projectKey is already used in the target workspace; the target's storage quota can also refuse). Sends no email or inbox notification. Returns results, movedCount and failedCount.", "inputSchema": { "properties": { "items": { "description": "Moves", "items": { "properties": { "targetWorkspaceUuid": { "description": "Destination workspace UUID (you need write access there)", "type": "string" }, "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid", "targetWorkspaceUuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "7b5a3ba9ab9e3079" },
|
|
919
|
+
{ "mcpName": "request_upload_token", "commandPath": ["tools", "run", "request-upload-token"], "group": "attachment", "description": "Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.", "inputSchema": { "properties": { "maxBytes": { "description": "\uCD5C\uB300 \uC5C5\uB85C\uB4DC byte (\uC11C\uBC84 \uCE21 \uD55C\uB3C4)", "type": "integer" }, "purpose": { "description": "Token \uC6A9\uB3C4. `mcp.call` \uC740 curl \uB85C /mcp \uD638\uCD9C, `document.create/update/append` \uB294 PUT body \uB85C \uBCF8\uBB38 \uC5C5\uB85C\uB4DC, `attachment.upload` \uB294 \uD30C\uC77C bytes \uC5C5\uB85C\uB4DC. \uCF58\uD150\uCE20\uAC00 \uD06C\uBA74 (\uC218\uC2ED KB \uC774\uC0C1) LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 \uC774 \uB3C4\uAD6C\uB85C 5\uBD84 \uC7AC\uC0AC\uC6A9 \uD1A0\uD070\uC744 \uBC1B\uACE0 curl \uB85C \uBCF4\uB0B4\uB294 \uAC83\uC744 \uAC15\uB825 \uAD8C\uC7A5.", "enum": ["mcp.call", "document.create", "document.update", "document.append", "attachment.upload"], "type": "string" }, "scopeJson": { "description": "\uC120\uD0DD \u2014 JSON scope. document.create \uB294 projectUuid, type, title \uC744 \uD3EC\uD568\uD558\uACE0 creatable type values \uB294 erd, markdown, diagram, openapi, html, file, kanban. document.update/document.append \uB294 documentUuid \uB97C \uD3EC\uD568. type=file \uC740 filename \uB3C4 \uD3EC\uD568(\uD655\uC7A5\uC790\uB85C \uD615\uC2DD \uD310\uC815) \u2014 PUT \uC758 Content-Type \uC740 \uD30C\uC77C MIME, \uBCF8\uBB38\uC740 \uD30C\uC77C \uBC14\uC774\uD2B8. attachment.upload: {documentUuid, filename}; storageKey \uB294 \uC11C\uBC84\uAC00 \uBC1C\uAE09 scope \uC5D0 \uB123\uB294\uB2E4.", "type": "string" }, "ttlSeconds": { "description": "TTL (\uCD08). \uAE30\uBCF8 300 (5\uBD84)", "type": "integer" } }, "required": ["purpose"], "type": "object" }, "required": ["purpose"], "payloadMode": "binary-upload", "destructive": false, "sourceCatalog": "prod", "schemaHash": "867c1e7105f1424b" },
|
|
920
|
+
{ "mcpName": "resolve_comments", "commandPath": ["tools", "run", "resolve-comments"], "group": "generic", "description": "Mark questions on a document or a kanban card (cardUuid) as resolved. Only top-level comments with kind QUESTION can be resolved, and it needs edit access to the document or board (readers can comment but cannot resolve). Resolving cannot be undone. Each id is applied on its own; results report each id.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "ids": { "description": "Question ids to resolve (top-level comments with kind QUESTION)", "items": { "minimum": 1, "type": "integer" }, "minItems": 1, "type": "array" } }, "required": ["ids"], "type": "object" }, "required": ["ids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "d996f083fd9e6acf" },
|
|
921
|
+
{ "mcpName": "restore_versions", "commandPath": ["versions", "restore"], "group": "generic", "description": `Roll documents back to an earlier saved version (version numbers come from list_versions). The current content and title are replaced by that version's snapshot and a new version "Restored from version N" is recorded, so the history keeps everything and the rollback can itself be undone the same way. Tell the user which version you are restoring before calling. Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns restored (the new version rows, each with documentUuid) and count. Fails with 404 for an unknown document or version number, with a plan-limit error for a locked version (locked=true in list_versions), and with 409 when the document is in the trash or its folder, project or workspace is archived.`, "inputSchema": { "properties": { "items": { "description": "Restores", "items": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number to restore", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "1af89081b6bc61cd" },
|
|
922
|
+
{ "mcpName": "search_documents", "commandPath": ["documents", "search"], "group": "document", "description": `Find documents you can read by keywords, people, folder and dates, when you have no link or exact title. Each hit has title, type, uuid, projectName, folderPath ("Parent / Child"), url, updatedAt and lastEditorName \u2014 enough to tell the user which document is which. Map the user's words to filters: "edited today" -> updatedFrom = today's date-time at local midnight with offset; "last week" -> updatedFrom/updatedTo; "Ryan's" or "Ryan changed" -> first get Ryan's userId from list_mention_candidates (or identity_get_self for "me"), then ownerUserId or lastEditorUserId; "in the X folder" -> folderUuid from list_folders. Keep only the topic words in q.`, "inputSchema": { "properties": { "createdFrom": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Created at or after.", "type": "string" }, "createdTo": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Created at or before (a date includes that whole day).", "type": "string" }, "folderUuid": { "description": "Only documents in this folder or any folder under it.", "type": "string" }, "lastEditorUserId": { "description": "Only documents whose latest saved version is by this user.", "type": "string" }, "limit": { "description": "\uACB0\uACFC \uAC1C\uC218 (\uAE30\uBCF8 20, \uCD5C\uB300 50)", "type": "integer" }, "offset": { "description": "\uD398\uC774\uC9C0\uB124\uC774\uC158 offset (\uAE30\uBCF8 0)", "type": "integer" }, "ownerUserId": { "description": "Only documents owned by this user (the creator, unless ownership moved).", "type": "string" }, "projectUuid": { "description": "Only documents in this project.", "type": "string" }, "q": { "description": "Keywords in the title or body. Optional \u2014 omit to list by the filters alone, most recently updated first.", "type": "string" }, "type": { "description": "Optional document type filter. Readable values: erd, markdown, diagram, openapi, html, file, kanban.", "enum": ["erd", "markdown", "diagram", "openapi", "html", "file", "kanban"], "type": "string" }, "updatedFrom": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Last changed at or after.", "type": "string" }, "updatedTo": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Last changed at or before (a date includes that whole day).", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "prod", "schemaHash": "1dd5d57c10b6a2f7" },
|
|
923
|
+
{ "mcpName": "unarchive_documents", "commandPath": ["documents", "unarchive"], "group": "document", "description": "Restore documents from the trash (list_trash shows them) to where they were. A public link that was on opens again; direct sharing removed when the document was trashed does not come back. Needs edit access. A document that is not in the trash is returned unchanged. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (document rows) and count. Fails with 409 when its folder, project or workspace is archived \u2014 restore the folder with unarchive_folders instead \u2014 and is refused when restoring would exceed the storage quota.", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "fadb26ea6649079c" },
|
|
924
|
+
{ "mcpName": "unarchive_folders", "commandPath": ["folders", "unarchive"], "group": "generic", "description": "Restore trashed folders together with their whole subtree. Every trashed subfolder and document under the folder comes back \u2014 including documents that were trashed on their own before the folder was. Direct sharing removed at trash time does not come back. No tool lists trashed folders (list_trash lists documents only), so use the UUID from the earlier delete_folders call. Needs edit access to the folder. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (folder rows) and count. Fails with 409 when a parent folder, the project or the workspace is archived (restore the parent first) and is refused when restoring would exceed the storage quota.", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "b5b618fa100be0f7" },
|
|
925
|
+
{ "mcpName": "unarchive_projects", "commandPath": ["projects", "unarchive"], "group": "generic", "description": "Restore archived projects so they are listed and editable again. Public links of documents inside open again if they were on; sharing removed at archive time does not come back. No tool lists archived projects, so use the UUID from the earlier delete_projects call. Needs edit access to the project, and its workspace must not be archived. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (project rows) and count. Fails with 404 for an unknown UUID, 403 without access, and 409 when the workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "5d5b1029b0759182" },
|
|
926
|
+
{ "mcpName": "unarchive_workspaces", "commandPath": ["workspaces", "unarchive"], "group": "workspace", "description": "Restore archived workspaces so they and their projects are listed and usable again. No tool lists archived workspaces, so use the UUID from the earlier delete_workspaces call. Needs edit access to the workspace. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (workspace rows) and count. Fails with 404 for an unknown UUID and 403 without access.", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "prod", "schemaHash": "6cd85561c70e4bf5" },
|
|
927
|
+
{ "mcpName": "update_agent_todos", "commandPath": ["agent-todos", "update"], "group": "generic", "description": "Claim, renew, complete, release, or dismiss the signed-in user's agent to-dos. Only the session holding the current leaseToken may renew, release, or complete a claimed to-do \u2014 even another session of the same connection gets CLAIMED_BY_OTHER. Results are per item: {todoId, ok: true, state, leaseToken?, claimExpiresAt?} or {todoId, ok: false, error} with error one of CLAIMED_BY_OTHER, LEASE_LOST, ALREADY_DONE, CLOSED_BY_HUMAN, SUPERSEDED, ACCESS_LOST, BUSINESS_ACTION_REQUIRED, NOT_FOUND, INVALID \u2014 on CLOSED_BY_HUMAN or SUPERSEDED stop working on it. BUSINESS_ACTION_REQUIRED: card to-dos (CARD_*) cannot be completed here; doing the card action closes them. Retrying the same complete or dismiss returns ok again. To mark the person's notifications read (only when they ask), use mark_notifications_read.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "To-dos to update; each item is applied and reported on its own.", "items": { "additionalProperties": false, "properties": { "action": { "description": "claim: take it (returns leaseToken, valid 30 minutes). renew: extend your lease. complete: done (with leaseToken if you claimed it; without one only while it is still OPEN). release: give it back. dismiss: not a to-do.", "enum": ["claim", "renew", "complete", "release", "dismiss"], "type": "string" }, "leaseToken": { "description": "Required for renew and release, and for complete or dismiss of a to-do you claimed.", "type": "string" }, "note": { "description": "For complete or dismiss: one line on what you did (at most 500 characters, no document bodies). The person sees it in the inbox.", "maxLength": 500, "type": "string" }, "todoId": { "description": "todoId from list_agent_todos.", "type": "string" } }, "required": ["todoId", "action"], "type": "object" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "f304eb4450675a6d" },
|
|
928
|
+
{ "mcpName": "update_comments", "commandPath": ["comments", "update"], "group": "generic", "description": "Edit your own comments on a document or a kanban card (cardUuid). Only the author can edit, and only while they can still read it. A resolved question and a top-level comment that already has replies are locked. Items are applied in order and each one commits on its own; results report each item.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "items": { "description": "Edits, applied in order", "items": { "additionalProperties": false, "properties": { "body": { "description": "New comment text (replaces the old text).", "maxLength": 1e4, "minLength": 1, "type": "string" }, "clientMutationId": { "description": "Idempotency key (visible ASCII, at most 128 characters). Required when mentionUserIds is not empty; reuse the same value when retrying the same item so the mention email is not sent twice.", "maxLength": 128, "type": "string" }, "id": { "description": "Comment id (from mcp__ainecto__list_comments)", "minimum": 1, "type": "integer" }, "mentionUserIds": { "description": "The complete set of userIds mentioned after the edit; omit to remove all mentions. Each one's @<displayName> must appear in body. Only people who were not mentioned before get a notification email.", "items": { "type": "string" }, "maxItems": 20, "type": "array", "uniqueItems": true } }, "required": ["id", "body"], "type": "object" }, "minItems": 1, "type": "array" }, "mailLanguage": { "description": "Language of the comment notification email (mention or reply). Defaults to en.", "enum": ["en", "ko"], "type": "string" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "a5bc050079e34361" },
|
|
929
|
+
{ "mcpName": "update_documents", "commandPath": ["documents", "update"], "group": "document", "description": "Update documents: the title and/or the whole body. A body you send replaces the current body entirely \u2014 it is not a patch, so read the document first and send the full new text. The document type decides the body field (see body and typePayload): file documents can only be renamed, ERD content changes through erd_apply_changes, diagram nodes and edges through diagram_apply_changes, and board documents are refused. Every body change is kept in version history, so list_versions and restore_versions can undo it. Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns updated (document rows) and count. Fails with 409 when the document is in the trash or its folder, project or workspace is archived. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.update)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "title": { "description": "New title", "type": "string" }, "typePayload": { "description": "Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: {file:{filename,contentType,sizeBytes,viewerKind}} (+content for text/CSV, first 64 KB); kanban: no body \u2014 only the title can be updated; cards are changed with kanban_apply_changes and kanban_card_action.", "type": "object" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "e6526c5177c9542c" },
|
|
930
|
+
{ "mcpName": "update_folders", "commandPath": ["folders", "update"], "group": "generic", "description": "Rename folders (only the name; move_folders moves them). Names do not have to be unique. Needs edit access to the folder. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (folder rows) and count. Fails with 404, 403, or 409 when the folder or a parent folder is archived.", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Folder UUID", "type": "string" } }, "required": ["uuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "af4a8688a8d7f15c" },
|
|
931
|
+
{ "mcpName": "update_projects", "commandPath": ["projects", "update"], "group": "generic", "description": 'Rename projects or change their description (projectKey cannot be changed here). Omitted fields stay as they are, a blank name is ignored, and description "" clears it. Names do not have to be unique. Needs admin or owner rights on the project. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (project rows) and count. Fails with 404 for an unknown UUID and 403 without rights or when the project or its workspace is archived.', "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "6a097e4b164d2d97" },
|
|
932
|
+
{ "mcpName": "update_workspaces", "commandPath": ["workspaces", "update"], "group": "workspace", "description": 'Rename workspaces or change their description. Omitted fields stay as they are, a blank name is ignored, and description "" clears it. Names do not have to be unique. Needs admin or owner rights. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (workspace rows) and count. Fails with 404 for an unknown UUID and 403 without rights or when the workspace is archived.', "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "prod", "schemaHash": "9c6228e9c2859ff5" },
|
|
933
|
+
{ "mcpName": "upload_attachments", "commandPath": ["tools", "run", "upload-attachments"], "group": "attachment", "description": "Register files you have already uploaded as attachments of documents. Steps: (1) request_upload_token with purpose=attachment.upload and {documentUuid, filename}; (2) PUT the file bytes with curl to the returned URL; (3) call this with the storageKey from step 1 \u2014 without step 2 it fails. sizeBytes, when given, must equal the uploaded size. A storageKey registers once (409 after that). Files over the server's attachment size limit or beyond the storage quota are refused, and the server decides the stored content type. File documents cannot take attachments. Needs edit access to the document. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns uploaded (attachment rows) and count.", "inputSchema": { "properties": { "items": { "description": "Attachments to register", "items": { "properties": { "contentType": { "description": "MIME type", "type": "string" }, "documentUuid": { "description": "Parent document UUID", "type": "string" }, "filename": { "description": "Original file name", "type": "string" }, "sizeBytes": { "description": "Size in bytes", "type": "integer" }, "storageKey": { "description": "Storage key returned by request_upload_token purpose=attachment.upload", "type": "string" } }, "required": ["documentUuid", "filename", "storageKey"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "binary-upload", "destructive": false, "sourceCatalog": "prod", "schemaHash": "adf49eddeae4a185" }
|
|
928
934
|
];
|
|
929
935
|
|
|
930
936
|
// src/core/catalog/generated.dev.ts
|
|
931
937
|
var generatedTools2 = [
|
|
932
|
-
{ "mcpName": "create_comments", "commandPath": ["comments", "create"], "group": "generic", "description": "Add comments, questions, or replies to a document or a kanban card (cardUuid). Anyone who can read it may comment and reply. Set parentCommentId to reply to a top-level comment. To mention people, get their userId and displayName from list_mention_candidates, write @<displayName> in the body, and list their userIds in mentionUserIds (clientMutationId is then required). Items are applied in order and each one commits on its own; results report each item (ok, or status and error).", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "items": { "description": "Comments to add, applied in order", "items": { "additionalProperties": false, "properties": { "body": { "description": "Comment text (plain text, 1..10000 characters). To mention someone, include @<displayName> exactly as returned by mcp__ainecto__list_mention_candidates.", "maxLength": 1e4, "minLength": 1, "type": "string" }, "clientMutationId": { "description": "Idempotency key (visible ASCII, at most 128 characters). Required when mentionUserIds is not empty; reuse the same value when retrying the same item so the mention email is not sent twice.", "maxLength": 128, "type": "string" }, "kind": { "description": "
|
|
933
|
-
{ "mcpName": "create_documents", "commandPath": ["documents", "create"], "group": "document", "description": "Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Documents", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.create)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "folderUuid": { "description": "Optional folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "title": { "description": "Document title", "type": "string" }, "type": { "description": "Document type. Creatable values: erd, diagram, markdown, openapi, html, file, kanban.", "enum": ["erd", "diagram", "markdown", "openapi", "html", "file", "kanban"], "type": "string" }, "typePayload": { "description": 'Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: no JSON payload \u2014 bytes go through request_upload_token(purpose=document.create, scopeJson={projectUuid,folderUuid?,type:"file",title,filename}) then one curl PUT (images\xB7PDF\xB7mp4/webm\xB7audio\xB7text/code\xB7CSV only); kanban: no payload \u2014 creates an empty board; add cards with kanban_apply_changes.', "type": "object" } }, "required": ["projectUuid", "type", "title"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
934
|
-
{ "mcpName": "create_folders", "commandPath": ["folders", "create"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Folders", "items": { "properties": { "name": { "description": "Folder name", "type": "string" }, "parentFolderUuid": { "description": "Parent folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
935
|
-
{ "mcpName": "create_projects", "commandPath": ["projects", "create"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Projects", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Project name", "type": "string" }, "projectKey": { "description": "Unique project key", "type": "string" }, "workspaceUuid": { "description": "Workspace UUID \u2014 null uses user's default workspace", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
936
|
-
{ "mcpName": "create_workspaces", "commandPath": ["workspaces", "create"], "group": "workspace", "description": "", "inputSchema": { "properties": { "items": { "description": "Workspaces", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Workspace name", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
937
|
-
{ "mcpName": "delete_attachments", "commandPath": ["attachments", "delete"], "group": "attachment", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Attachment UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
938
|
+
{ "mcpName": "create_comments", "commandPath": ["comments", "create"], "group": "generic", "description": "Add comments, questions, or replies to a document or a kanban card (cardUuid). Anyone who can read it may comment and reply. Set parentCommentId to reply to a top-level comment. To mention people, get their userId and displayName from list_mention_candidates, write @<displayName> in the body, and list their userIds in mentionUserIds (clientMutationId is then required). Items are applied in order and each one commits on its own; results report each item (ok, or status and error).", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "items": { "description": "Comments to add, applied in order", "items": { "additionalProperties": false, "properties": { "body": { "description": "Comment text (plain text, 1..10000 characters). To mention someone, include @<displayName> exactly as returned by mcp__ainecto__list_mention_candidates.", "maxLength": 1e4, "minLength": 1, "type": "string" }, "clientMutationId": { "description": "Idempotency key (visible ASCII, at most 128 characters). Required when mentionUserIds is not empty; reuse the same value when retrying the same item so the mention email is not sent twice.", "maxLength": 128, "type": "string" }, "kind": { "description": "COMMENT (default) or QUESTION. A reply (parentCommentId) is always COMMENT. A QUESTION can later be resolved with mcp__ainecto__resolve_comments.", "enum": ["COMMENT", "QUESTION"], "type": "string" }, "mentionUserIds": { "description": "userIds to mention (from mcp__ainecto__list_mention_candidates). Each one's @<displayName> must appear in body; newly mentioned people get a notification email.", "items": { "type": "string" }, "maxItems": 20, "type": "array", "uniqueItems": true }, "parentCommentId": { "description": "Reply to this top-level comment id (from mcp__ainecto__list_comments). Replies are one level deep: replying to a reply is rejected. The thread's original author and earlier repliers get a notification email (except people mentioned in this reply, who get the mention email instead).", "minimum": 1, "type": "integer" } }, "required": ["body"], "type": "object" }, "minItems": 1, "type": "array" }, "mailLanguage": { "description": "Language of the comment notification email (mention or reply). Defaults to en.", "enum": ["en", "ko"], "type": "string" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "05ae6b9016969e09" },
|
|
939
|
+
{ "mcpName": "create_documents", "commandPath": ["documents", "create"], "group": "document", "description": "Create documents. projectUuid comes from list_projects (a workspace UUID is not a project UUID). Set shareEnabled to also turn on each document's public link and get its shareUrl in the same call. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Documents", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.create)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "folderUuid": { "description": "Optional folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "shareEnabled": { "description": "Optional. true turns on the document's public link right after creating it, exactly as enable_shares does (needs the right to manage sharing; types without a public page are refused). The created item then carries shareUrl, the page anyone can open. If sharing is refused, this item is not created.", "type": "boolean" }, "title": { "description": "Document title", "type": "string" }, "type": { "description": "Document type. Creatable values: erd, diagram, markdown, openapi, html, file, kanban.", "enum": ["erd", "diagram", "markdown", "openapi", "html", "file", "kanban"], "type": "string" }, "typePayload": { "description": 'Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: no JSON payload \u2014 bytes go through request_upload_token(purpose=document.create, scopeJson={projectUuid,folderUuid?,type:"file",title,filename}) then one curl PUT (images\xB7PDF\xB7mp4/webm\xB7audio\xB7text/code\xB7CSV only); kanban: no payload \u2014 creates an empty board; add cards with kanban_apply_changes.', "type": "object" } }, "required": ["projectUuid", "type", "title"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "17f7fbd12ac1287a" },
|
|
940
|
+
{ "mcpName": "create_folders", "commandPath": ["folders", "create"], "group": "generic", "description": "Create folders in a project, at its top level or under parentFolderUuid (the parent must be in the same project). Folders nest up to 50 levels. Folder names do not have to be unique, even side by side, and every call creates new folders \u2014 check list_folders first so a retry does not make duplicates. Needs edit access to the project (and to the parent folder). Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (folder rows with uuid and app url) and count. Fails with 404, 403, or 409 when the project, its workspace or the parent folder is archived.", "inputSchema": { "properties": { "items": { "description": "Folders", "items": { "properties": { "name": { "description": "Folder name", "type": "string" }, "parentFolderUuid": { "description": "Parent folder UUID", "type": "string" }, "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "0465182c723f2c9a" },
|
|
941
|
+
{ "mcpName": "create_projects", "commandPath": ["projects", "create"], "group": "generic", "description": "Create new, empty projects. workspaceUuid picks the workspace (you need edit access there); without it the project goes to your first personal workspace, which is created if you have none. projectKey is optional and must be unique within the workspace; project names do not have to be unique. Every call creates new projects, so check list_projects before retrying. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (project rows with uuid) and count. Fails with 403 without edit access, 409 when the workspace is archived, and an error when the projectKey is already used.", "inputSchema": { "properties": { "items": { "description": "Projects", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Project name", "type": "string" }, "projectKey": { "description": "Unique project key", "type": "string" }, "workspaceUuid": { "description": "Workspace UUID \u2014 null uses user's default workspace", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "020ed340ec243bdc" },
|
|
942
|
+
{ "mcpName": "create_workspaces", "commandPath": ["workspaces", "create"], "group": "workspace", "description": "Create new, empty personal workspaces owned by you (there is no limit on how many). Names do not have to be unique and every call creates new ones, so check list_workspaces before retrying. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns created (workspace rows with uuid) and count.", "inputSchema": { "properties": { "items": { "description": "Workspaces", "items": { "properties": { "description": { "description": "Description", "type": "string" }, "name": { "description": "Workspace name", "type": "string" } }, "required": ["name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "51d1cb14c1d99f9d" },
|
|
943
|
+
{ "mcpName": "delete_attachments", "commandPath": ["attachments", "delete"], "group": "attachment", "description": "Remove attachments. A removed attachment is hidden (archived) and no longer listed, and no tool brings it back \u2014 confirm with the user first. The file that is a file document's own content cannot be removed here; delete that document instead. Needs edit access to the document (or project) it is attached to. All-or-nothing: if any UUID fails (404 unknown, 403 no edit access, 409 already removed or file-document content), nothing is removed. Sends no email or inbox notification. Returns deleted (UUIDs) and count.", "inputSchema": { "properties": { "uuids": { "description": "Attachment UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "6d88c71830e7e20d" },
|
|
938
944
|
{ "mcpName": "delete_comments", "commandPath": ["comments", "delete"], "group": "generic", "description": "Delete your own comments on a document or a kanban card (cardUuid). Only the author can delete. A resolved question and a top-level comment that still has replies cannot be deleted. Each id is applied on its own; results report each id.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "ids": { "description": "Comment ids to delete (from mcp__ainecto__list_comments)", "items": { "minimum": 1, "type": "integer" }, "minItems": 1, "type": "array" } }, "required": ["ids"], "type": "object" }, "required": ["ids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "082e4b4d9ba97fe0" },
|
|
939
|
-
{ "mcpName": "delete_documents", "commandPath": ["documents", "delete"], "group": "document", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
940
|
-
{ "mcpName": "delete_folders", "commandPath": ["folders", "delete"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
941
|
-
{ "mcpName": "delete_projects", "commandPath": ["projects", "delete"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
942
|
-
{ "mcpName": "delete_workspaces", "commandPath": ["workspaces", "delete"], "group": "workspace", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
945
|
+
{ "mcpName": "delete_documents", "commandPath": ["documents", "delete"], "group": "document", "description": "Move documents to the trash (soft delete) \u2014 this is not permanent deletion. A trashed document disappears from lists and its public link stops opening; people it was shared with directly lose that access, and restoring does not give it back. unarchive_documents restores a document and list_trash shows the trash. The server permanently deletes a trashed document once the trash retention period passes (30 days by default), and that cannot be undone. Needs delete rights on each document (editor or above). Confirm with the user before deleting anything they did not name explicitly. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without delete rights, and 409 when the document is already in the trash or its folder, project or workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "02aed6d05f52c25e" },
|
|
946
|
+
{ "mcpName": "delete_folders", "commandPath": ["folders", "delete"], "group": "generic", "description": "Move folders to the trash together with everything under them (subfolders and their documents) \u2014 soft delete, not permanent. People shared with the folder, its subfolders or those documents directly lose that access, and restoring does not give it back. unarchive_folders restores the whole subtree; the server permanently deletes trashed folders and documents once the trash retention period passes (30 days by default). Needs admin or owner rights on the folder. Always confirm with the user first and say how much is inside (list_documents with folderUuid). Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without rights, and 409 when the folder or a parent folder is already archived.", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "80852f7e86a2d964" },
|
|
947
|
+
{ "mcpName": "delete_projects", "commandPath": ["projects", "delete"], "group": "generic", "description": "Archive projects. An archived project disappears from list_projects and nothing inside it can be read or edited; its documents are not moved to the trash and nothing is purged automatically. Archiving also removes every person's direct sharing on the project, its folders and its documents, and restoring does not give it back. Public links of documents inside stop opening while the project is archived. unarchive_projects is the matching restore tool. Needs admin or owner rights on the project. Always confirm with the user first (get_project shows the name and workspace). Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID, 403 without rights or when it is already archived, and 409 when its workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "32e582d68b72ab38" },
|
|
948
|
+
{ "mcpName": "delete_workspaces", "commandPath": ["workspaces", "delete"], "group": "workspace", "description": "Archive workspaces. An archived workspace disappears from list_workspaces, its projects disappear from list_projects, and nothing inside can be read or changed until it is restored with unarchive_workspaces. Nothing is purged and sharing is kept. Only the workspace owner can do this. Always confirm with the user first \u2014 it hides every project in the workspace for everyone. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns deleted (UUIDs) and count. Fails with 404 for an unknown UUID and 403 when you are not the owner or it is already archived.", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "e6ef72eaa0a1808b" },
|
|
943
949
|
{ "mcpName": "diagram_apply_changes", "commandPath": ["tools", "run", "diagram-apply-changes"], "group": "generic", "description": "Required single-call mutation path for diagram node/edge/group create/update/delete changes. Put nodes, edges, and groups in one request and call this once. Do not look for type-specific diagram CUD tools; this tool is the only diagram CUD entry point.", "inputSchema": { "properties": { "description": { "description": "Reason for batch (audit)", "type": "string" }, "diagramUuid": { "description": "Diagram UUID", "type": "string" }, "edges": { "description": "Edge operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "bridgeType": { "description": "Omit (null) for a plain node-to-node edge. Set only when a group is an endpoint: GROUP_TO_GROUP|NODE_TO_GROUP|GROUP_TO_NODE", "enum": ["GROUP_TO_GROUP", "NODE_TO_GROUP", "GROUP_TO_NODE"], "type": "string" }, "fromUuid": { "description": "Source", "type": "string" }, "label": { "description": "Edge label", "type": "string" }, "lineStyle": { "description": "Line style", "type": "string" }, "strokeColor": { "description": "Stroke color", "type": "string" }, "strokeWidth": { "description": "Stroke width", "type": "integer" }, "toUuid": { "description": "Target", "type": "string" }, "uuid": { "description": "Required for update/delete", "type": "string" } }, "required": ["action"], "type": "object" }, "type": "array" }, "groups": { "description": "Group operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "collapsed": { "description": "Collapsed state", "type": "boolean" }, "color": { "description": "Group color", "type": "string" }, "height": { "description": "Explicit height; omit to keep it derived from member nodes", "type": "number" }, "linkMode": { "description": "Link mode", "type": "string" }, "linkedDiagramUuid": { "description": "Linked diagram UUID", "type": "string" }, "name": { "description": "Group name", "type": "string" }, "parentGroupUuid": { "description": "Parent group UUID", "type": "string" }, "sortOrder": { "description": "Sort order", "type": "integer" }, "uuid": { "description": "Required for update/delete", "type": "string" }, "width": { "description": "Explicit width; omit to keep it derived from member nodes", "type": "number" } }, "required": ["action"], "type": "object" }, "type": "array" }, "nodes": { "description": "Node operations", "items": { "properties": { "action": { "description": "Operation kind", "enum": ["create", "update", "delete"], "type": "string" }, "fillColor": { "description": "Fill color", "type": "string" }, "groupUuid": { "description": "Group UUID; empty string clears membership", "type": "string" }, "height": { "description": "Height", "type": "number" }, "shape": { "description": "Node shape (start/end/diamond/cylinder/parallelogram/stadium/hexagon/rect/roundRect/...)", "enum": ["rect", "roundRect", "stadium", "diamond", "decision", "circle", "start", "doubleCircle", "end", "hexagon", "cylinder", "parallelogram"], "type": "string" }, "strokeColor": { "description": "Stroke color", "type": "string" }, "text": { "description": "Node text/label. Supports newlines (\\n) for multi-line display.", "maxLength": 4e3, "type": "string" }, "textColor": { "description": "Text color", "type": "string" }, "type": { "description": "Node type", "type": "string" }, "uuid": { "description": "Required for update/delete; optional for create", "type": "string" }, "width": { "description": "Width", "type": "number" }, "x": { "description": "X", "type": "number" }, "y": { "description": "Y", "type": "number" } }, "required": ["action"], "type": "object" }, "type": "array" } }, "required": ["diagramUuid", "description"], "type": "object" }, "required": ["description", "diagramUuid"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "2c829103f86f4168" },
|
|
944
|
-
{ "mcpName": "diagram_get_edge", "commandPath": ["tools", "run", "diagram-get-edge"], "group": "generic", "description": "", "inputSchema": { "properties": { "edgeUuid": { "description": "Edge UUID", "type": "string" } }, "required": ["edgeUuid"], "type": "object" }, "required": ["edgeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
945
|
-
{ "mcpName": "diagram_get_group", "commandPath": ["tools", "run", "diagram-get-group"], "group": "generic", "description": "", "inputSchema": { "properties": { "groupUuid": { "description": "Group UUID", "type": "string" } }, "required": ["groupUuid"], "type": "object" }, "required": ["groupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
946
|
-
{ "mcpName": "diagram_get_node", "commandPath": ["tools", "run", "diagram-get-node"], "group": "generic", "description": "", "inputSchema": { "properties": { "nodeUuid": { "description": "Node UUID", "type": "string" } }, "required": ["nodeUuid"], "type": "object" }, "required": ["nodeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
947
|
-
{ "mcpName": "diagram_get_pending_llm_requests", "commandPath": ["tools", "run", "diagram-get-pending-llm-requests"], "group": "generic", "description": "", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
948
|
-
{ "mcpName": "diagram_list_edges", "commandPath": ["tools", "run", "diagram-list-edges"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
949
|
-
{ "mcpName": "diagram_list_groups", "commandPath": ["tools", "run", "diagram-list-groups"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
950
|
-
{ "mcpName": "diagram_list_nodes", "commandPath": ["tools", "run", "diagram-list-nodes"], "group": "generic", "description": "", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
951
|
-
{ "mcpName": "diagram_submit_llm_result", "commandPath": ["tools", "run", "diagram-submit-llm-result"], "group": "generic", "description": "", "inputSchema": { "properties": { "cachedInputTokens": { "description": "Cached subset of provider total input tokens", "type": "integer" }, "creditsCharged": { "description": "Deprecated; ignored. Credits are calculated server-side from tokens.", "type": "integer" }, "inputTokens": { "description": "Provider total input tokens; Java persists uncached input after one normalization", "type": "integer" }, "outputTokens": { "description": "Output token count", "type": "integer" }, "result": { "description": "LLM result text", "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "result"], "type": "object" }, "required": ["result", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
952
|
-
{ "mcpName": "diagram_update_llm_request_status", "commandPath": ["tools", "run", "diagram-update-llm-request-status"], "group": "generic", "description": "", "inputSchema": { "properties": { "errorMessage": { "description": "Error message (when status=FAILED)", "type": "string" }, "status": { "description": "Target status \u2014 currently only FAILED is mutable from caller side", "enum": ["FAILED"], "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "status"], "type": "object" }, "required": ["status", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
953
|
-
{ "mcpName": "disable_shares", "commandPath": ["tools", "run", "disable-shares"], "group": "generic", "description": "", "inputSchema": { "properties": { "targetType": { "description": "Share target type", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
954
|
-
{ "mcpName": "enable_shares", "commandPath": ["tools", "run", "enable-shares"], "group": "generic", "description": "", "inputSchema": { "properties": { "targetType": { "description": "Share target type. A document gets a shareUrl anyone can open; a project gets a public API path only (there is no public project page); a folder token is stored but nothing public reads it yet.", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
950
|
+
{ "mcpName": "diagram_get_edge", "commandPath": ["tools", "run", "diagram-get-edge"], "group": "generic", "description": "Read one diagram edge by its edge UUID (same fields as diagram_list_edges). Read only; needs read access to the diagram. Fails with 404 for an unknown edge.", "inputSchema": { "properties": { "edgeUuid": { "description": "Edge UUID", "type": "string" } }, "required": ["edgeUuid"], "type": "object" }, "required": ["edgeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "4bb0bb9275b2fb08" },
|
|
951
|
+
{ "mcpName": "diagram_get_group", "commandPath": ["tools", "run", "diagram-get-group"], "group": "generic", "description": "Read one diagram group by its group UUID (same fields as diagram_list_groups). Read only; needs read access to the diagram. Fails with 404 for an unknown group.", "inputSchema": { "properties": { "groupUuid": { "description": "Group UUID", "type": "string" } }, "required": ["groupUuid"], "type": "object" }, "required": ["groupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e43aade91f62acd4" },
|
|
952
|
+
{ "mcpName": "diagram_get_node", "commandPath": ["tools", "run", "diagram-get-node"], "group": "generic", "description": "Read one diagram node by its node UUID (same fields as diagram_list_nodes). Read only; needs read access to the diagram. Fails with 404 for an unknown node.", "inputSchema": { "properties": { "nodeUuid": { "description": "Node UUID", "type": "string" } }, "required": ["nodeUuid"], "type": "object" }, "required": ["nodeUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e610b158272290f0" },
|
|
953
|
+
{ "mcpName": "diagram_get_pending_llm_requests", "commandPath": ["tools", "run", "diagram-get-pending-llm-requests"], "group": "generic", "description": "List your own AI requests that are waiting (PENDING) or in progress (PROCESSING), for every service, not only diagrams: uuid, serviceCode, type, status, model and context. Read only \u2014 it does not claim anything; a request becomes PROCESSING only when a worker claims it through AiNecto's AI request API. Returns requests and count.", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "43305e4eee4eedc3" },
|
|
954
|
+
{ "mcpName": "diagram_list_edges", "commandPath": ["tools", "run", "diagram-list-edges"], "group": "generic", "description": "List every edge (connector) of one diagram document: uuid, fromUuid, toUuid, label, bridgeType, strokeColor, lineStyle, strokeWidth and version. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns edges and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "05a4ad6a05240c7d" },
|
|
955
|
+
{ "mcpName": "diagram_list_groups", "commandPath": ["tools", "run", "diagram-list-groups"], "group": "generic", "description": "List every group of one diagram document: uuid, name, color, width, height, parentGroupUuid, collapsed, depth, sortOrder, linkedDiagramUuid, linkMode and version. Nodes point to their group with groupUuid. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns groups and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "6b48ae81e69d19d0" },
|
|
956
|
+
{ "mcpName": "diagram_list_nodes", "commandPath": ["tools", "run", "diagram-list-nodes"], "group": "generic", "description": "List every node of one diagram document: uuid, type, text, shape, x, y, width, height, groupUuid, colors and version. diagram_apply_changes changes them. Read only; needs read access to the diagram. Fails when diagramUuid is not a diagram document. Returns nodes and count.", "inputSchema": { "properties": { "diagramUuid": { "description": "Diagram document UUID", "type": "string" } }, "required": ["diagramUuid"], "type": "object" }, "required": ["diagramUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "82df9dd409bbd9fd" },
|
|
957
|
+
{ "mcpName": "diagram_submit_llm_result", "commandPath": ["tools", "run", "diagram-submit-llm-result"], "group": "generic", "description": "Complete one of your AI requests that is PROCESSING by storing its result text and token counts; it becomes COMPLETED. This charges AI credits, calculated by the server from the token counts (creditsCharged is ignored). It only stores the result and does not change any diagram by itself. Fails for a request that is not yours, is not PROCESSING, or whose context names a diagram you cannot edit. Returns uuid, status and the recorded token counts.", "inputSchema": { "properties": { "cachedInputTokens": { "description": "Cached subset of provider total input tokens", "type": "integer" }, "creditsCharged": { "description": "Deprecated; ignored. Credits are calculated server-side from tokens.", "type": "integer" }, "inputTokens": { "description": "Provider total input tokens; Java persists uncached input after one normalization", "type": "integer" }, "outputTokens": { "description": "Output token count", "type": "integer" }, "result": { "description": "LLM result text", "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "result"], "type": "object" }, "required": ["result", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "9ee175de7c7b7c4b" },
|
|
958
|
+
{ "mcpName": "diagram_update_llm_request_status", "commandPath": ["tools", "run", "diagram-update-llm-request-status"], "group": "generic", "description": "Mark one of your AI requests FAILED (the only status allowed here), with an optional errorMessage. Works on PENDING or PROCESSING requests and charges no credits; diagram_submit_llm_result completes one instead. Fails for a request that is not yours, is already finished, or whose context names a diagram you cannot edit. Returns uuid, status and errorMessage.", "inputSchema": { "properties": { "errorMessage": { "description": "Error message (when status=FAILED)", "type": "string" }, "status": { "description": "Target status \u2014 currently only FAILED is mutable from caller side", "enum": ["FAILED"], "type": "string" }, "uuid": { "description": "LLM request UUID", "type": "string" } }, "required": ["uuid", "status"], "type": "object" }, "required": ["status", "uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "4a360af781099e35" },
|
|
959
|
+
{ "mcpName": "disable_shares", "commandPath": ["tools", "run", "disable-shares"], "group": "generic", "description": "Turn public links off. For a document or project the link stops working at once and turning it on again later brings back the same link; for a folder the stored token is deleted. Sharing with specific people is not affected. Needs the same rights as enable_shares (document or project: admin or owner; folder: edit access). Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns disabled (rows) and count.", "inputSchema": { "properties": { "targetType": { "description": "Share target type", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "3339f73817ba8432" },
|
|
960
|
+
{ "mcpName": "enable_shares", "commandPath": ["tools", "run", "enable-shares"], "group": "generic", "description": "Turn on public links: anyone with the link can open it without signing in, so confirm with the user before exposing anything. targetType document returns shareUrl (a public page) and publicApiPath; board documents have no public link (PUBLIC_SHARE_UNSUPPORTED_TYPE); needs admin or owner rights on the document. targetType project returns publicToken and a publicApiPath that reads the project and its documents through the public API \u2014 there is no public project page; needs admin or owner rights. targetType folder only stores a token that nothing public reads yet, so share the documents or the project instead; needs edit access. Re-enabling a document or project reuses its previous link. This does not invite or notify anyone \u2014 giving specific people access is done in the AiNecto app. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns enabled (rows with the link fields) and count.", "inputSchema": { "properties": { "targetType": { "description": "Share target type. A document gets a shareUrl anyone can open; a project gets a public API path only (there is no public project page); a folder token is stored but nothing public reads it yet.", "enum": ["project", "folder", "document"], "type": "string" }, "targetUuids": { "description": "Target UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["targetType", "targetUuids"], "type": "object" }, "required": ["targetType", "targetUuids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "972a9386ae31088f" },
|
|
955
961
|
{ "mcpName": "erd_apply_changes", "commandPath": ["erd", "apply-changes"], "group": "erd", "description": 'Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\nOne-call worked example:\n{\n "documentUuid": "erd-doc-uuid",\n "description": "create users/posts ERD",\n "operations": [\n {"op":"create","type":"table","data":{"uuid":"tbl_users","name":"users","display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_users_id","table_uuid":"tbl_users","name":"id","type":"bigint","is_pk":true,"is_not_null":true,"display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_users_email","table_uuid":"tbl_users","name":"email","type":"varchar(255)","is_unique":true,"is_not_null":true,"display_order":2}},\n {"op":"create","type":"table","data":{"uuid":"tbl_posts","name":"posts","display_order":2}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_id","table_uuid":"tbl_posts","name":"id","type":"bigint","is_pk":true,"is_not_null":true,"display_order":1}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_author_id","table_uuid":"tbl_posts","name":"author_id","type":"bigint","is_not_null":true,"display_order":2}},\n {"op":"create","type":"column","data":{"uuid":"col_posts_status","table_uuid":"tbl_posts","name":"status","type":"post_status","is_not_null":true,"display_order":3}},\n {"op":"create","type":"enum","data":{"uuid":"enum_post_status","name":"post_status"}},\n {"op":"create","type":"enum_value","data":{"uuid":"enum_post_status_draft","enum_uuid":"enum_post_status","value":"draft","display_order":1}},\n {"op":"create","type":"enum_value","data":{"uuid":"enum_post_status_published","enum_uuid":"enum_post_status","value":"published","display_order":2}},\n {"op":"create","type":"ref","data":{"uuid":"ref_posts_author","name":"fk_posts_author","from_table_uuid":"tbl_posts","to_table_uuid":"tbl_users","relationship":">","on_delete":"cascade"}},\n {"op":"create","type":"ref_column","data":{"uuid":"refcol_posts_author","ref_uuid":"ref_posts_author","from_column_uuid":"col_posts_author_id","to_column_uuid":"col_users_id","display_order":1}}\n ]\n}', "inputSchema": { "properties": { "arrangeNewTables": { "description": "Whether to auto-place newly-created tables after the batch; defaults to true", "type": "boolean" }, "description": { "description": "Reason for batch (audit)", "type": "string" }, "documentUuid": { "description": "ERD document UUID", "type": "string" }, "operations": { "description": "Atomic create/update/delete operations", "items": { "description": "One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.", "discriminator": { "propertyName": "type" }, "oneOf": [{ "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["name"], "title": "table data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table", "description": "Must be 'table' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["table_uuid"], "title": "column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "column", "description": "Must be 'column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["table_uuid"], "title": "index data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "index", "description": "Must be 'index' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "index operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["index_uuid", "column_uuid"], "title": "index_column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index_column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "index_column", "description": "Must be 'index_column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "index_column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["from_table_uuid", "to_table_uuid", "relationship"], "title": "ref data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "ref", "description": "Must be 'ref' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "ref operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["ref_uuid", "from_column_uuid", "to_column_uuid"], "title": "ref_column data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref_column data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "ref_column", "description": "Must be 'ref_column' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "ref_column operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "enum", "description": "Must be 'enum' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "enum operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "required": ["enum_uuid"], "title": "enum_value data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "title": "enum_value data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "enum_value", "description": "Must be 'enum_value' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "enum_value operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group", "description": "Must be 'table_group' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["group_uuid", "table_name"], "title": "table_group_table data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_table data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group_table", "description": "Must be 'table_group_table' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group_table operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "required": ["group_uuid", "note_uuid"], "title": "table_group_note data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_note data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "table_group_note", "description": "Must be 'table_group_note' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "table_group_note operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "filter", "description": "Must be 'filter' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "filter operation", "type": "object" }, { "allOf": [{ "if": { "properties": { "op": { "const": "create", "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": { "data": { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" } }, "required": ["data"], "type": "object" } }, { "if": { "properties": { "op": { "enum": ["update", "delete"], "type": "string" } }, "required": ["op"], "type": "object" }, "then": { "properties": {}, "required": ["uuid"], "type": "object" } }], "properties": { "data": { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" }, "op": { "description": "Operation", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "const": "note", "description": "Must be 'note' for this payload.", "type": "string" }, "uuid": { "description": "Target UUID for update/delete.", "type": "string" } }, "required": ["op", "type"], "title": "note operation", "type": "object" }], "properties": { "data": { "description": "Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.", "oneOf": [{ "description": "Payload for operation.type='table'.", "properties": { "alias": { "description": "Display alias.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "header_color": { "description": "Header color.", "type": "string" }, "name": { "description": "Table name. Required for create.", "type": "string" }, "note": { "description": "Table note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table data", "type": "object" }, { "description": "Payload for operation.type='column'.", "properties": { "default_value": { "description": "Default value.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "is_increment": { "description": "Auto-increment flag.", "type": "boolean" }, "is_not_null": { "description": "Not-null flag.", "type": "boolean" }, "is_pk": { "description": "Primary key flag.", "type": "boolean" }, "is_unique": { "description": "Unique flag.", "type": "boolean" }, "name": { "description": "Column name.", "type": "string" }, "note": { "description": "Column note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.", "type": "string" }, "type": { "description": "SQL data type. Use this exact field name; do not send data_type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "column data", "type": "object" }, { "description": "Payload for operation.type='index'.", "properties": { "is_pk": { "description": "Primary key index flag.", "type": "boolean" }, "is_unique": { "description": "Unique index flag.", "type": "boolean" }, "name": { "description": "Index name.", "type": "string" }, "note": { "description": "Index note.", "type": "string" }, "table_uuid": { "description": "Parent table UUID. Required for create.", "type": "string" }, "type": { "description": "Index type.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index data", "type": "object" }, { "description": "Payload for operation.type='index_column'.", "properties": { "column_uuid": { "description": "Column UUID. Required for create.", "type": "string" }, "display_order": { "description": "Display order.", "type": "integer" }, "index_uuid": { "description": "Index UUID. Required for create.", "type": "string" }, "sort_order": { "description": "Sort order, for example ASC or DESC.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "index_column data", "type": "object" }, { "description": "Payload for operation.type='ref'.", "properties": { "from_table_uuid": { "description": "Source table UUID. Required for create.", "type": "string" }, "name": { "description": "Reference name.", "type": "string" }, "on_delete": { "description": "ON DELETE action.", "type": "string" }, "on_update": { "description": "ON UPDATE action.", "type": "string" }, "relationship": { "description": "Required for create. Use short dbdiagram-style relationship symbols.", "enum": [">", "<", "-"], "type": "string" }, "to_table_uuid": { "description": "Target table UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref data", "type": "object" }, { "description": "Payload for operation.type='ref_column'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "from_column_uuid": { "description": "Source column UUID. Required for create.", "type": "string" }, "ref_uuid": { "description": "Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.", "type": "string" }, "to_column_uuid": { "description": "Target column UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "ref_column data", "type": "object" }, { "description": "Payload for operation.type='enum'.", "properties": { "name": { "description": "Enum name.", "type": "string" }, "note": { "description": "Enum note.", "type": "string" }, "schema_name": { "description": "Schema name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "enum data", "type": "object" }, { "description": "Payload for operation.type='enum_value'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "enum_uuid": { "description": "Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.", "type": "string" }, "note": { "description": "Enum value note.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "value": { "description": "Enum value. Inline enum values on enum are not persisted; create enum_value operations.", "type": "string" } }, "title": "enum_value data", "type": "object" }, { "description": "Payload for operation.type='table_group'.", "properties": { "color": { "description": "Group color.", "type": "string" }, "name": { "description": "Table group name.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group data", "type": "object" }, { "description": "Payload for operation.type='table_group_table'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "schema_name": { "description": "Table schema name.", "type": "string" }, "table_name": { "description": "Table name. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_table data", "type": "object" }, { "description": "Payload for operation.type='table_group_note'.", "properties": { "display_order": { "description": "Display order.", "type": "integer" }, "group_uuid": { "description": "Table group UUID. Required for create.", "type": "string" }, "note_uuid": { "description": "Note UUID. Required for create.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "table_group_note data", "type": "object" }, { "description": "Payload for operation.type='filter'.", "properties": { "included_tables": { "description": "JSON string/list of included tables.", "type": "string" }, "is_default": { "description": "Default filter flag.", "type": "boolean" }, "name": { "description": "Filter name.", "type": "string" }, "table_groups": { "description": "JSON string/object of table groups.", "type": "string" }, "table_positions": { "description": "JSON string/object of table positions.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" } }, "title": "filter data", "type": "object" }, { "description": "Payload for operation.type='note'.", "properties": { "color": { "description": "Note color.", "type": "string" }, "content": { "description": "Note content.", "type": "string" }, "height": { "description": "Height.", "type": "integer" }, "icon_name": { "description": "Icon name.", "type": "string" }, "position_x": { "description": "X position.", "type": "integer" }, "position_y": { "description": "Y position.", "type": "integer" }, "title": { "description": "Note title.", "type": "string" }, "uuid": { "description": "Optional on create: client-generated UUID (at most 36 characters, e.g. a standard UUID v4). If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.", "maxLength": 36, "type": "string" }, "width": { "description": "Width.", "type": "integer" } }, "title": "note data", "type": "object" }], "type": "object" }, "op": { "description": "Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.", "enum": ["create", "update", "delete"], "type": "string" }, "type": { "description": "ERD entity type. This selects the operation.data shape.", "enum": ["table", "column", "index", "index_column", "ref", "ref_column", "enum", "enum_value", "table_group", "table_group_table", "table_group_note", "filter", "note"], "type": "string" }, "uuid": { "description": "Target UUID for update/delete. Do not use this for create; use data.uuid instead.", "type": "string" } }, "required": ["op", "type"], "type": "object" }, "type": "array" } }, "required": ["documentUuid", "description", "operations"], "type": "object" }, "required": ["description", "documentUuid", "operations"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "87f5bcf5a253815a" },
|
|
956
962
|
{ "mcpName": "erd_arrange_tables", "commandPath": ["erd", "arrange-tables"], "group": "erd", "description": "Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "full": { "description": "Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.", "type": "boolean" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "651fd0d54e3635ff" },
|
|
957
|
-
{ "mcpName": "erd_get_enum", "commandPath": ["erd", "get-enum"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "enumUuid": { "description": "Enum UUID", "type": "string" } }, "required": ["documentUuid", "enumUuid"], "type": "object" }, "required": ["documentUuid", "enumUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
958
|
-
{ "mcpName": "erd_get_ref", "commandPath": ["erd", "get-ref"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "refUuid": { "description": "Relationship UUID", "type": "string" } }, "required": ["documentUuid", "refUuid"], "type": "object" }, "required": ["documentUuid", "refUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
963
|
+
{ "mcpName": "erd_get_enum", "commandPath": ["erd", "get-enum"], "group": "erd", "description": "Read one ERD enum with its values (uuid, value, note, displayOrder). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the enum belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "enumUuid": { "description": "Enum UUID", "type": "string" } }, "required": ["documentUuid", "enumUuid"], "type": "object" }, "required": ["documentUuid", "enumUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "ae536a31eb604f3a" },
|
|
964
|
+
{ "mcpName": "erd_get_ref", "commandPath": ["erd", "get-ref"], "group": "erd", "description": "Read one ERD relationship with its column pairs (fromColumnUuid to toColumnUuid, displayOrder). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the relationship belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "refUuid": { "description": "Relationship UUID", "type": "string" } }, "required": ["documentUuid", "refUuid"], "type": "object" }, "required": ["documentUuid", "refUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e71d40552c0df42e" },
|
|
959
965
|
{ "mcpName": "erd_get_table", "commandPath": ["erd", "get-table"], "group": "erd", "description": "Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.", "inputSchema": { "description": "Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.", "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableUuid": { "description": "Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.", "type": "string" } }, "required": ["documentUuid", "tableUuid"], "type": "object" }, "required": ["documentUuid", "tableUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "0dc13648bf3fbf8f" },
|
|
960
|
-
{ "mcpName": "erd_get_table_group", "commandPath": ["erd", "get-table-group"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableGroupUuid": { "description": "Table group UUID", "type": "string" } }, "required": ["documentUuid", "tableGroupUuid"], "type": "object" }, "required": ["documentUuid", "tableGroupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
961
|
-
{ "mcpName": "erd_list_enums", "commandPath": ["erd", "list-enums"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
962
|
-
{ "mcpName": "erd_list_refs", "commandPath": ["erd", "list-refs"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
963
|
-
{ "mcpName": "erd_list_table_groups", "commandPath": ["erd", "list-table-groups"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
964
|
-
{ "mcpName": "erd_list_tables", "commandPath": ["erd", "list-tables"], "group": "erd", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
965
|
-
{ "mcpName": "get_attachment", "commandPath": ["attachment", "get"], "group": "attachment", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Attachment UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
966
|
+
{ "mcpName": "erd_get_table_group", "commandPath": ["erd", "get-table-group"], "group": "erd", "description": "Read one ERD table group: uuid, name, color and noteUuids. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document, or when the group belongs to a different ERD document.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" }, "tableGroupUuid": { "description": "Table group UUID", "type": "string" } }, "required": ["documentUuid", "tableGroupUuid"], "type": "object" }, "required": ["documentUuid", "tableGroupUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "ed949fa7ca0884b2" },
|
|
967
|
+
{ "mcpName": "erd_list_enums", "commandPath": ["erd", "list-enums"], "group": "erd", "description": "List the enums of one ERD document: uuid, name, schemaName and note. Values are not included \u2014 erd_get_enum reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns enums and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "ea76585e1cca3997" },
|
|
968
|
+
{ "mcpName": "erd_list_refs", "commandPath": ["erd", "list-refs"], "group": "erd", "description": "List the relationships (foreign-key refs) of one ERD document: uuid, name, fromTableUuid, toTableUuid, relationship (>, < or -), onDelete and onUpdate. Column pairs are not included \u2014 erd_get_ref reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns refs and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "2292c8caf4fc5c25" },
|
|
969
|
+
{ "mcpName": "erd_list_table_groups", "commandPath": ["erd", "list-table-groups"], "group": "erd", "description": "List the table groups of one ERD document: uuid, name, color and noteUuids (the notes in the group). Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns tableGroups and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "4c910d38ca4bfc82" },
|
|
970
|
+
{ "mcpName": "erd_list_tables", "commandPath": ["erd", "list-tables"], "group": "erd", "description": "List the tables of one ERD document: uuid, name, schemaName, alias, note, headerColor and displayOrder. Columns and indexes are not included \u2014 erd_get_table reads them. Read only; needs read access. Fails with 404 for an unknown UUID, 403 without access, and an error when documentUuid is not an ERD document. Returns tables and count.", "inputSchema": { "properties": { "documentUuid": { "description": "ERD document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e9aed0d47d33c169" },
|
|
971
|
+
{ "mcpName": "get_attachment", "commandPath": ["attachment", "get"], "group": "attachment", "description": "Read one attachment's metadata by UUID: filename, contentType, sizeBytes, parent, uploadedBy, archived. It does not return the file contents or a download link. Needs read access to the whole project. Read only. Fails with 404 for an unknown UUID and 403 without access.", "inputSchema": { "properties": { "uuid": { "description": "Attachment UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "f7ff5a989c9ef3b9" },
|
|
966
972
|
{ "mcpName": "get_document", "commandPath": ["document", "get"], "group": "document", "description": "Read a document. The body comes back for the types whose create/update take one: markdown \u2192 content; openapi \u2192 content (the spec text) + format/specVersion/pathCount/operationCount; html \u2192 content (the HTML text); file \u2192 file {filename, contentType, sizeBytes, viewerKind} + content for text/CSV (first 64 KB); diagram \u2192 diagramSource/sourceLanguage/edgeStyle/isModule/metadata; kanban \u2192 board {viewer, columns: each column's first 20 cards + hasMore} (more cards and card details via kanban_list_cards); erd \u2192 metadata only (read tables/refs via erd_list_*).", "inputSchema": { "properties": { "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "5c8e9d305fc15c1f" },
|
|
967
|
-
{ "mcpName": "get_my_work_summary", "commandPath": ["my-work-summary", "get"], "group": "generic", "description": `One-call summary of what is waiting for the signed-in user in AiNecto \u2014 call it when the user asks things like "do I have anything to do?", "anything new?", "anything to review?" or "did anyone ask me something?". Returns notifications {unread (not yet read by the person, newest 100 counted; unreadCapped when there are more
|
|
968
|
-
{ "mcpName": "get_project", "commandPath": ["project", "get"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
969
|
-
{ "mcpName": "get_version", "commandPath": ["version", "get"], "group": "generic", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "required": ["documentUuid", "versionNumber"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
970
|
-
{ "mcpName": "get_workspace", "commandPath": ["workspace", "get"], "group": "workspace", "description": "", "inputSchema": { "properties": { "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
971
|
-
{ "mcpName": "identity_get_self", "commandPath": ["tools", "run", "identity-get-self"], "group": "generic", "description": "Return the authenticated MCP caller identity summary
|
|
972
|
-
{ "mcpName": "
|
|
973
|
-
{ "mcpName": "
|
|
974
|
-
{ "mcpName": "
|
|
975
|
-
{ "mcpName": "
|
|
976
|
-
{ "mcpName": "
|
|
973
|
+
{ "mcpName": "get_my_work_summary", "commandPath": ["my-work-summary", "get"], "group": "generic", "description": `One-call summary of what is waiting for the signed-in user in AiNecto \u2014 call it when the user asks things like "do I have anything to do?", "anything new?", "anything to review?" or "did anyone ask me something?". Returns notifications {unread (not yet read by the person \u2014 the same read state as the web bell, so reading on the web lowers it at once; newest 100 counted; unreadCapped when there are more; the same number as the line at the end of tool results), unreadByKind}, mentionsToRead {items the person has not read that mention them, each with target title and url}, and todos {open (stays until the to-do is done or closed; the to-dos on that line), leaseExpired, inProgress, items: questions and requests waiting for the user's agent} and cards {kanban cards assigned to the user on boards they can read now: assignedOpen, pendingAcceptance (assigned but not yet accepted or declined), inProgress, inReview, blocked, items: the first page}. For details use list_notifications, list_agent_todos and kanban_list_cards; to read the document and its comments use get_document with the target uuid. Read-only: nothing is marked read or acknowledged.`, "inputSchema": { "additionalProperties": false, "properties": { "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only items in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only items in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "bcb546e954f81945" },
|
|
974
|
+
{ "mcpName": "get_project", "commandPath": ["project", "get"], "group": "generic", "description": "Read one project by UUID: name, projectKey, description, workspaceId, publicReadable and publicToken, archived and revision. Read only. Fails with 404 for an unknown UUID and 403 when you cannot open the whole project or it is archived.", "inputSchema": { "properties": { "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "f4ec896c20a1f99f" },
|
|
975
|
+
{ "mcpName": "get_version", "commandPath": ["version", "get"], "group": "generic", "description": "Read one saved version of a document, including snapshotJson \u2014 the full saved content in that document type's stored format. Read only; needs read access. Fails with 404 for an unknown version number and with a plan-limit error for a locked version (see list_versions).", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "required": ["documentUuid", "versionNumber"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "d80e338a03804261" },
|
|
976
|
+
{ "mcpName": "get_workspace", "commandPath": ["workspace", "get"], "group": "workspace", "description": "Read one workspace by UUID: name, description, owner, archived and revision. Works for any workspace you can see, including one where you were only given a project. Read only. Fails with 404 for an unknown UUID and 403 when you have no access or the workspace is archived.", "inputSchema": { "properties": { "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "required": ["uuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "8bc1d78109480495" },
|
|
977
|
+
{ "mcpName": "identity_get_self", "commandPath": ["tools", "run", "identity-get-self"], "group": "generic", "description": "Return the authenticated MCP caller identity summary: userId, display name, and job profile (the user's job title and areas \u2014 personal context only, it never changes what they may do). Never returns email or token claims.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "2298c704e1563bdb" },
|
|
978
|
+
{ "mcpName": "identity_list_job_roles", "commandPath": ["tools", "run", "identity-list-job-roles"], "group": "generic", "description": "List the job roles the signed-in user can pick for their own job profile \u2014 the same list as the account settings screen: roles {code, title, family}, families, areas {code, title}, suggested role codes, customCode (pick it to type a title that is not in the list) and titleMaxLength. Use the codes with identity_update_job_profile. A job profile is personal context only; it never changes what the user may do.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "59a20e90a49eb02d" },
|
|
979
|
+
{ "mcpName": "identity_update_job_profile", "commandPath": ["tools", "run", "identity-update-job-profile"], "group": "generic", "description": "Set the signed-in user's own job profile (job role and areas) \u2014 the same setting as the account settings screen. It only ever changes the caller's own profile. Pick code and areas from identity_list_job_roles; pass null as code to clear it. Returns the saved jobProfile in the same shape as identity_get_self (null when cleared). Invalid values fail with INVALID_JOB_PROFILE and change nothing. A job profile is personal context only; it never changes what the user may do.", "inputSchema": { "additionalProperties": false, "properties": { "areas": { "description": "Area codes from identity_list_job_roles; the first is the primary area. At least one with the custom code, optional for a listed role. Each area once.", "items": { "description": "Area code.", "type": "string" }, "type": "array" }, "code": { "description": "Job role code from identity_list_job_roles, or its customCode to type your own title. null clears the job profile.", "type": ["string", "null"] }, "title": { "description": "The role title in the user's own words \u2014 required with the custom code, ignored for a listed role (its title comes from the list).", "type": "string" } }, "required": ["code"], "type": "object" }, "required": ["code"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "de9d5d59fcddfa45" },
|
|
980
|
+
{ "mcpName": "kanban_apply_changes", "commandPath": ["kanban", "apply-changes"], "group": "kanban", "description": "Create, edit, reorder and link cards on one kanban board in a single atomic call (at most 100 operations; if one fails nothing is applied and the error carries operationIndex and code). Creating and editing cards needs edit access to the board; move with toBoardUuid moves a card to another board of the same project. The assignee may also check acceptance criteria and add result links (DELIVERABLE, REVIEW_RESULT, TEST_EVIDENCE). create also sets assignee, requester, reviewers and watchers in the same call. To change a card's column, reassign it, accept, approve, block, watch and similar, use kanban_card_action. Results list each operation's card uuid, revision, status and sortKey.", "inputSchema": { "additionalProperties": false, "properties": { "boardUuid": { "description": "Kanban board (document) UUID.", "type": "string" }, "mailLanguage": { "description": "Language of the emails these operations may send (review requests to newly named reviewers). Defaults to en.", "enum": ["en", "ko"], "type": "string" }, "operations": { "description": "Operations, applied in order in one transaction. If any fails, none is applied and the error names operationIndex.", "items": { "additionalProperties": false, "properties": { "afterCardUuid": { "description": "Place after this card in the column (create, move).", "type": "string" }, "assigneeUserId": { "description": "create only: assign the new card (userId from list_mention_candidates with the board's documentUuid). Someone other than you gets an assignment to accept. To reassign an existing card use kanban_card_action assign.", "type": "string" }, "beforeCardUuid": { "description": "move: place before this card in the column.", "type": "string" }, "cardType": { "description": "Card type (default TASK).", "enum": ["TASK", "REVIEW", "BUG", "DECISION"], "type": "string" }, "cardUuid": { "description": "Target card (update, move, link, unlink). It must be on this board. From kanban_list_cards \u2014 by cardKeys if you only have the card key, e.g. KAN-15.", "type": "string" }, "clientMutationId": { "description": "create: idempotency key \u2014 retrying with the same value returns the same card instead of creating another.", "type": "string" }, "criteria": { "description": "Acceptance criteria. update replaces the whole list; the assignee may only flip done.", "items": { "additionalProperties": false, "properties": { "done": { "description": "Checked (default false).", "type": "boolean" }, "text": { "description": "What must be true.", "type": "string" } }, "required": ["text"], "type": "object" }, "type": "array" }, "description": { "description": "Markdown description. Keep it short \u2014 link longer text as a document instead. update: null clears it.", "type": ["string", "null"] }, "documentUuid": { "description": "AiNecto document to link (you must be able to read it). Give this or url.", "type": "string" }, "dueAt": { "description": "Due time, ISO-8601 instant such as 2026-10-31T09:00:00Z. update: null clears it.", "type": ["string", "null"] }, "expectedRevision": { "description": "The card revision you last read. If the card changed since, the whole call fails with CARD_CHANGED and the current card. Send it when people may edit the card too.", "minimum": 0, "type": "integer" }, "label": { "description": "Optional label for an external URL.", "type": "string" }, "linkId": { "description": "unlink: the linkId from the card's links.", "minimum": 1, "type": "integer" }, "linkRole": { "description": "Link role. The assignee may add DELIVERABLE, REVIEW_RESULT and TEST_EVIDENCE links; other roles need edit access to the board.", "enum": ["REQUIREMENT", "REFERENCE", "DELIVERABLE", "REVIEW_RESULT", "DECISION", "TEST_EVIDENCE"], "type": "string" }, "links": { "description": "create only: links to attach.", "items": { "additionalProperties": false, "properties": { "documentUuid": { "description": "AiNecto document to link (you must be able to read it). Give this or url.", "type": "string" }, "label": { "description": "Optional label for an external URL.", "type": "string" }, "linkRole": { "description": "Link role. The assignee may add DELIVERABLE, REVIEW_RESULT and TEST_EVIDENCE links; other roles need edit access to the board.", "enum": ["REQUIREMENT", "REFERENCE", "DELIVERABLE", "REVIEW_RESULT", "DECISION", "TEST_EVIDENCE"], "type": "string" }, "url": { "description": "External http(s) URL to link, e.g. a pull request. Give this or documentUuid.", "type": "string" } }, "required": ["linkRole"], "type": "object" }, "type": "array" }, "op": { "description": "create: a new card in To Do (you become its requester unless requesterUserId names someone else). update: change only the fields you send (send null to clear description, dueAt). move: reorder within the card's column, or with toBoardUuid move it to another board of the same project. link / unlink: attach or remove a document or an external URL.", "enum": ["create", "link", "move", "unlink", "update"], "type": "string" }, "priority": { "description": "Priority (default MEDIUM).", "enum": ["LOW", "MEDIUM", "HIGH", "URGENT"], "type": "string" }, "requesterUserId": { "description": "create only: the requester (reporter) instead of you; they are notified. To change it later use kanban_card_action set_requester.", "type": "string" }, "responderIds": { "description": "update only: who should answer while the card is blocked.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "reviewerIds": { "description": "Reviewers (userIds from list_mention_candidates with cardUuid or the board's documentUuid). update replaces the whole list.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "title": { "description": "Card title (required for create).", "type": "string" }, "toBoardUuid": { "description": "move: another kanban board (document UUID) in the same project to move the card to. It keeps its key, column, people, comments, links and to-dos; afterCardUuid / beforeCardUuid then name cards on that board. Needs edit access to both boards, and everyone on the card (requester, assignee, reviewers, watchers, responders) must be able to read the new board.", "type": "string" }, "url": { "description": "External http(s) URL to link, e.g. a pull request. Give this or documentUuid.", "type": "string" }, "watcherIds": { "description": "Watchers who get activity notifications. update replaces the whole list.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "required": ["op"], "type": "object" }, "maxItems": 100, "minItems": 1, "type": "array" } }, "required": ["boardUuid", "operations"], "type": "object" }, "required": ["boardUuid", "operations"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "b0068321e34a0614" },
|
|
981
|
+
{ "mcpName": "kanban_card_action", "commandPath": ["kanban", "card-action"], "group": "kanban", "description": "Do one workflow action on a kanban card, the same as the buttons in the web app. \u2605Before assign (to someone other than the signed-in user), approve or quick_done, show the user what will happen and get their explicit confirmation \u2014 these change other people's work and notify them. Actions: assign / unassign; accept / decline (only the assignee \u2014 accepting closes the assignment to-do); start (To Do \u2192 In Progress; anyone who can edit the board, or the assignee \u2014 not while an assignment is waiting to be accepted); request_review (\u2192 In Review); approve (\u2192 Done) / request_changes (\u2192 In Progress) by the requester or a reviewer; quick_done (To Do \u2192 Done); reopen (Done \u2192 In Progress); block / unblock; archive / unarchive; set_requester; watch / unwatch (yourself). Doing the action is what closes the matching card to-dos \u2014 update_agent_todos cannot complete them. Returns the card after the action (status, assignment state, allowedActions) and reasonCommentId when a reason was saved.", "inputSchema": { "additionalProperties": false, "properties": { "action": { "description": "The action. Which ones you may do now is the card's allowedActions in kanban_list_cards (with cardUuids).", "enum": ["assign", "unassign", "accept", "decline", "start", "request_review", "approve", "request_changes", "quick_done", "reopen", "block", "unblock", "archive", "unarchive", "set_requester", "watch", "unwatch"], "type": "string" }, "assigneeUserId": { "description": "assign: who gets the card \u2014 someone who can read the board (list_mention_candidates with cardUuid). Your own userId assigns it to you and accepts at once.", "type": "string" }, "cardUuid": { "description": "Card UUID (from kanban_list_cards \u2014 by cardKeys if you only have the card key, e.g. KAN-15).", "type": "string" }, "expectedRevision": { "description": "The card revision you last read. If the card changed since, the call fails with CARD_CHANGED and the current card. Send it when people may act on the card too.", "minimum": 0, "type": "integer" }, "mailLanguage": { "description": "Language of the email this action may send (assignment or review request). Defaults to en.", "enum": ["en", "ko"], "type": "string" }, "reason": { "description": "Saved as a comment on the card. Required when the action's allowedActions entry says reasonRequired (e.g. decline, reopen).", "type": "string" }, "requesterUserId": { "description": "set_requester: the new requester.", "type": "string" }, "responderIds": { "description": "block: who should answer (people who can read the board). Omit to keep the card's current responders.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "required": ["cardUuid", "action"], "type": "object" }, "required": ["action", "cardUuid"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "a138310eae3979ae" },
|
|
982
|
+
{ "mcpName": "kanban_list_cards", "commandPath": ["kanban", "list-cards"], "group": "kanban", "description": "Read kanban cards. Three ways: cardUuids (or cardKeys) \u2192 those cards in full, including allowedActions (what you may do now with kanban_card_action) and links; boardUuid \u2192 the board's columns To Do, In Progress, In Review, Done (each with hasMore and nextAfter); none of these \u2192 cards across all boards you can read where you are the assignee (or requester / watcher), most recently updated first. Each card has uuid and key (KAN-15 \u2014 the short id people use in chat; find a card by it with cardKeys, then use its uuid in the write tools), title, status, assignee and assignmentState (PENDING = not yet accepted), blocked, revision and allowedTransitions.", "inputSchema": { "additionalProperties": false, "properties": { "boardUuid": { "description": "Board (document) UUID: list its columns, first page each (or one column with status).", "type": "string" }, "cardKeys": { "description": "Read these cards in full by their key (e.g. KAN-15 \u2014 the short id people use in chat), the same as cardUuids. Use alone.", "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array", "uniqueItems": true }, "cardUuids": { "description": "Read these cards in full (description, people, links, allowedActions). Use alone.", "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array", "uniqueItems": true }, "cursor": { "description": "Next page: nextCursor (without boardUuid) or a column's nextAfter (with boardUuid and status).", "type": "string" }, "includeDone": { "description": "Without boardUuid: also recently completed cards.", "type": "boolean" }, "limit": { "description": "Cards per page (per column with boardUuid). Default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Without boardUuid: only boards in this project.", "type": "string" }, "relation": { "description": "Without boardUuid: cards across boards where you are the assignee (default), the requester or a watcher.", "enum": ["ASSIGNEE", "REQUESTER", "WATCHER"], "type": "string" }, "status": { "description": "With boardUuid: only this column.", "enum": ["TODO", "IN_PROGRESS", "IN_REVIEW", "DONE"], "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e04eb730f4bc5413" },
|
|
983
|
+
{ "mcpName": "list_agent_todos", "commandPath": ["agent-todos", "list"], "group": "generic", "description": "List the to-dos that ask the signed-in user's agent to act now (for example a question that mentions the user). This is the current state, not a feed: a to-do you have not finished comes back on every call until it is completed, dismissed, or closed because the person did it themselves. Each item has todoId, kind, obligation, openedAt, summary, target (title and url), action and state. To work on one, claim it with update_agent_todos and complete it with a one-line note. Actions that affect other people (assigning, approving, inviting) need the user's confirmation first.", "inputSchema": { "additionalProperties": false, "properties": { "after": { "description": "todoId of the last item of the previous page.", "type": "string" }, "kinds": { "description": "Only these kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only to-dos in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "state": { "description": "OPEN (default): to-dos you can take, including ones whose lease expired. MINE: to-dos currently leased (claimed) and not expired.", "items": { "enum": ["OPEN", "MINE"], "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only to-dos in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "5285b988db5b02d0" },
|
|
984
|
+
{ "mcpName": "list_attachments", "commandPath": ["attachments", "list"], "group": "attachment", "description": "List the active attachments in a project, newest first: uuid, filename, contentType, sizeBytes, parentType and parentId, uploadedBy. Metadata only \u2014 no file contents or download link. Removed attachments are not listed. Needs read access to the whole project. Read only. Returns attachments and count.", "inputSchema": { "properties": { "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid"], "type": "object" }, "required": ["projectUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "fbd087e35c18f8b3" },
|
|
977
985
|
{ "mcpName": "list_comments", "commandPath": ["comments", "list"], "group": "generic", "description": "List the active comments on a document or a kanban card (cardUuid), oldest first, including replies (a reply has parentCommentId set; replies are one level deep). Each comment has id, kind (COMMENT or QUESTION), body, author, mentions (userId, label and position in the body), and for questions questionState (UNANSWERED, ANSWERED, RESOLVED) and resolvedAt. Anyone who can read it can list its comments.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "21dbfc4740a62df5" },
|
|
978
|
-
{ "mcpName": "list_documents", "commandPath": ["documents", "list"], "group": "document", "description": "", "inputSchema": { "properties": { "folderUuid": { "description": "Optional folder UUID", "type": "string" }, "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "q": { "description": "Optional full-text query. When provided, results come from the search index instead of folder listing.", "type": "string" }, "type": { "description": "Optional document type filter. Readable values: erd, diagram, markdown, openapi, html, file, kanban.", "enum": ["erd", "diagram", "markdown", "openapi", "html", "file", "kanban"], "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
979
|
-
{ "mcpName": "list_folders", "commandPath": ["folders", "list"], "group": "generic", "description": "", "inputSchema": { "properties": { "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid"], "type": "object" }, "required": ["projectUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
980
|
-
{ "mcpName": "list_history", "commandPath": ["history", "list"], "group": "generic", "description": "List recent activity (who did what, people and agents) in a workspace, a project, or on one resource, newest first. Give at least one of workspaceUuid, projectUuid, or resourceType with resourceUuid; you need editor access or higher in that scope. This is a list to refresh, not a gap-free feed: to see what is new, read the first page again and skip ids you have already seen; to get each new notification exactly once use list_notifications. Each item has id, kind, at, lastAt, coalesceCount, actor, target (title and url only when you can read it now), changes and summary.", "inputSchema": { "additionalProperties": false, "properties": { "actorType": { "description": "Only people (USER) or only agents (AGENT).", "enum": ["USER", "AGENT"], "type": "string" }, "before": { "description": "nextCursor of the previous page (older items).", "type": "string" }, "kinds": { "description": "Only these kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Activity in this project.", "type": "string" }, "resourceType": { "description": "With resourceUuid: activity on one resource.", "enum": ["DOCUMENT", "PROJECT", "KANBAN_CARD"], "type": "string" }, "resourceUuid": { "description": "UUID of the resource named by resourceType.", "type": "string" }, "workspaceUuid": { "description": "Activity in this workspace.", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
981
|
-
{ "mcpName": "list_mention_candidates", "commandPath": ["mention-candidates", "list"], "group": "generic", "description": "List the people you can mention in comments on a document or a kanban card (cardUuid): userId and
|
|
982
|
-
{ "mcpName": "list_notifications", "commandPath": ["notifications", "list"], "group": "generic", "description": "Read new notifications for the signed-in user, oldest first and without gaps \u2014 for an agent that checks the inbox periodically. The server remembers, per connection and per filter (kinds, workspaceUuids, projectUuids, directOnly), how far you have acknowledged; a new filter starts from now. Each response carries ackToken: pass it as ack in your next call (with the same filter) after you have handled the batch \u2014 if you do not, the next call returns the same batch again (identify duplicates by id and seq; an item that comes back with a higher seq and a larger groupCount is an update of the same entry). Each item has id, seq, kind, at, summary (one line), actor, target (title and url only when you can read it now), action (what the user is asked to do) and humanRead. An item you can no longer read comes back as {id, seq, at, redacted: true}. This tool never marks anything read for the person; open to-dos are in list_agent_todos. Calls closer than 30 seconds apart (except a call that carries ack) return retryAfterSeconds instead of items.", "inputSchema": { "additionalProperties": false, "properties": { "ack": { "description": "The ackToken of the previous response. Send it with the same filter once you have handled (or safely stored) that batch; only then does the saved position move past it. Without it, the same batch is returned again.", "type": "string" }, "cursor": { "description": 'Where to read from. "saved" (default): after what this connection last acknowledged for this same filter. "latest": from now on (moves the saved position to now). "earliest": everything still kept (90 days). Or a nextCursor from a previous response: read after it without using or changing the saved position.', "type": "string" }, "directOnly": { "description": "Only notifications that point at you directly (mentions, questions to you).", "type": "boolean" }, "kinds": { "description": "Only these notification kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only notifications in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only notifications in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
983
|
-
{ "mcpName": "list_projects", "commandPath": ["projects", "list"], "group": "generic", "description": "", "inputSchema": { "properties": { "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "q": { "description": "Optional full-text query", "type": "string" }, "workspaceUuid": { "description": "Optional Workspace UUID", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
984
|
-
{ "mcpName": "list_trash", "commandPath": ["trash", "list"], "group": "generic", "description": "", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
985
|
-
{ "mcpName": "list_versions", "commandPath": ["versions", "list"], "group": "generic", "description": "", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
986
|
-
{ "mcpName": "list_workspaces", "commandPath": ["workspaces", "list"], "group": "workspace", "description": "", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
987
|
-
{ "mcpName": "
|
|
988
|
-
{ "mcpName": "
|
|
989
|
-
{ "mcpName": "
|
|
990
|
-
{ "mcpName": "
|
|
991
|
-
{ "mcpName": "
|
|
986
|
+
{ "mcpName": "list_documents", "commandPath": ["documents", "list"], "group": "document", "description": "List or search documents you can read, including ones shared with you individually. Without q it lists the documents directly in folderUuid (not its subfolders), otherwise in projectUuid, otherwise every document you can read in every project; only active documents (the trash is list_trash). With q it searches the document search index (mode=search; at most limit hits, default and maximum 50; with total), narrowed by projectUuid and by folderUuid including its subfolders. type filters by document type. Titles can repeat \u2014 compare folder and project and ask the user when several match. Read only. Returns documents, count and mode.", "inputSchema": { "properties": { "folderUuid": { "description": "Optional folder UUID. With q, searches this folder and the folders under it.", "type": "string" }, "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "projectUuid": { "description": "Project UUID", "type": "string" }, "q": { "description": "Optional full-text query. When provided, results come from the search index instead of folder listing.", "type": "string" }, "type": { "description": "Optional document type filter. Readable values: erd, diagram, markdown, openapi, html, file, kanban.", "enum": ["erd", "diagram", "markdown", "openapi", "html", "file", "kanban"], "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "6f341f76e9ec6b89" },
|
|
987
|
+
{ "mcpName": "list_folders", "commandPath": ["folders", "list"], "group": "generic", "description": "List all active folders of one project as a flat list (uuid, id, name, parentFolderId, depth, displayOrder, app url); rebuild the tree from id and parentFolderId. Trashed folders are not included. Folder names can repeat \u2014 tell them apart by parent and ask the user when unsure. Needs read access to the whole project. Read only. Returns folders and count.", "inputSchema": { "properties": { "projectUuid": { "description": "Project UUID", "type": "string" } }, "required": ["projectUuid"], "type": "object" }, "required": ["projectUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "b021246818866bac" },
|
|
988
|
+
{ "mcpName": "list_history", "commandPath": ["history", "list"], "group": "generic", "description": "List recent activity (who did what, people and agents) in a workspace, a project, or on one resource, newest first. Give at least one of workspaceUuid, projectUuid, or resourceType with resourceUuid; you need editor access or higher in that scope. This is a list to refresh, not a gap-free feed: to see what is new, read the first page again and skip ids you have already seen; to get each new notification exactly once use list_notifications. Each item has id, kind, at, lastAt, coalesceCount, actor, target (title and url only when you can read it now), changes and summary.", "inputSchema": { "additionalProperties": false, "properties": { "actorType": { "description": "Only people (USER) or only agents (AGENT).", "enum": ["USER", "AGENT"], "type": "string" }, "before": { "description": "nextCursor of the previous page (older items).", "type": "string" }, "kinds": { "description": "Only these kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Activity in this project.", "type": "string" }, "resourceType": { "description": "With resourceUuid: activity on one resource.", "enum": ["DOCUMENT", "PROJECT", "KANBAN_CARD"], "type": "string" }, "resourceUuid": { "description": "UUID of the resource named by resourceType.", "type": "string" }, "workspaceUuid": { "description": "Activity in this workspace.", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "9774a593c634070c" },
|
|
989
|
+
{ "mcpName": "list_mention_candidates", "commandPath": ["mention-candidates", "list"], "group": "generic", "description": "List the people you can mention in comments on a document or a kanban card (cardUuid): userId, displayName and jobTitle (null = not set) \u2014 jobTitle helps tell people with the same name apart. Only people who can read it are listed \u2014 for a card, the people who can read its board, which are also the people a card can be assigned to. To mention someone, write @<displayName> exactly in the comment body and pass their userId in mentionUserIds of create_comments or update_comments. Page with nextCursor while hasMore is true.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "cursor": { "description": "nextCursor from the previous page (same parent and query).", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "limit": { "description": "Page size, 1..50. Defaults to 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "query": { "description": "Name filter, 0..100 characters. Omit or leave empty for the first page of everyone.", "maxLength": 100, "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "c06acebfee9d635a" },
|
|
990
|
+
{ "mcpName": "list_notifications", "commandPath": ["notifications", "list"], "group": "generic", "description": "Read new notifications for the signed-in user, oldest first and without gaps \u2014 for an agent that checks the inbox periodically. The server remembers, per connection and per filter (kinds, workspaceUuids, projectUuids, directOnly), how far you have acknowledged; a new filter starts from now. Each response carries ackToken: pass it as ack in your next call (with the same filter) after you have handled the batch \u2014 if you do not, the next call returns the same batch again (identify duplicates by id and seq; an item that comes back with a higher seq and a larger groupCount is an update of the same entry). Each item has id, seq, kind, at, summary (one line), actor, target (title and url only when you can read it now), action (what the user is asked to do) and humanRead. An item you can no longer read comes back as {id, seq, at, redacted: true}. This tool never marks anything read for the person (use mark_notifications_read when the user asks); open to-dos are in list_agent_todos. Calls closer than 30 seconds apart (except a call that carries ack) return retryAfterSeconds instead of items.", "inputSchema": { "additionalProperties": false, "properties": { "ack": { "description": "The ackToken of the previous response. Send it with the same filter once you have handled (or safely stored) that batch; only then does the saved position move past it. Without it, the same batch is returned again.", "type": "string" }, "cursor": { "description": 'Where to read from. "saved" (default): after what this connection last acknowledged for this same filter. "latest": from now on (moves the saved position to now). "earliest": everything still kept (90 days). Or a nextCursor from a previous response: read after it without using or changing the saved position.', "type": "string" }, "directOnly": { "description": "Only notifications that point at you directly (mentions, questions to you).", "type": "boolean" }, "kinds": { "description": "Only these notification kinds.", "items": { "enum": ["COMMENT_MENTIONED", "COMMENT_REPLIED", "QUESTION_ANSWERED", "QUESTION_RESOLVED", "QUESTION_MENTIONED", "CARD_CREATED", "CARD_UPDATED", "CARD_ASSIGNED", "CARD_UNASSIGNED", "CARD_REQUESTER_SET", "CARD_ASSIGNMENT_ACCEPTED", "CARD_ASSIGNMENT_DECLINED", "CARD_STATUS_CHANGED", "CARD_REVIEW_REQUESTED", "CARD_CHANGES_REQUESTED", "CARD_APPROVED", "CARD_QUICK_DONE", "CARD_REOPENED", "CARD_BLOCKED", "CARD_UNBLOCKED", "CARD_ARCHIVED", "CARD_COMMENTED"], "type": "string" }, "type": "array", "uniqueItems": true }, "limit": { "description": "Items per call, default 20.", "maximum": 50, "minimum": 1, "type": "integer" }, "projectUuid": { "description": "Older single-value form of projectUuids.", "type": "string" }, "projectUuids": { "description": "Only notifications in any of these projects. Use it when the user names a project or the project you are working in is clear. With workspaceUuids too, both must match. A workspace or project you cannot see matches nothing.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "workspaceUuids": { "description": "Only notifications in any of these workspaces.", "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "type": "object" }, "required": [], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "015227aee445b6a7" },
|
|
991
|
+
{ "mcpName": "list_projects", "commandPath": ["projects", "list"], "group": "generic", "description": "Find projects you can open. With no arguments it lists every active project you can open, across all workspaces; workspaceUuid narrows it to one workspace (an unknown UUID gives an empty list). With q it searches the project search index instead (mode=search; at most limit hits, default and maximum 50; with total). Archived projects are never listed. Project names can repeat \u2014 compare workspaceId and ask the user when several match. Read only. Returns projects, count and mode.", "inputSchema": { "properties": { "limit": { "description": "Result cap when q is set (default 50)", "type": "integer" }, "q": { "description": "Optional full-text query", "type": "string" }, "workspaceUuid": { "description": "Optional Workspace UUID", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "4b6c8543d156b77b" },
|
|
992
|
+
{ "mcpName": "list_trash", "commandPath": ["trash", "list"], "group": "generic", "description": "List the documents in the trash across every project you can open as a whole (access through a single shared folder or file does not count): documents deleted with delete_documents or inside a trashed folder. Trashed folders, archived projects and archived workspaces are not listed here. Read only, no paging. Returns trashed (document rows: uuid, title, type, projectId, folderId) and count. unarchive_documents restores one; the server permanently deletes trashed documents once the trash retention period passes (30 days by default).", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "7dcdbf558ec22318" },
|
|
993
|
+
{ "mcpName": "list_versions", "commandPath": ["versions", "list"], "group": "generic", "description": "List a document's saved versions, newest first: versionNumber, versionType, title, changeSummary, createdBy, createdAt and locked. locked=true means the version is outside your plan's history window and cannot be opened or restored. get_version reads one and restore_versions rolls back. Read only; needs read access. Returns versions and count.", "inputSchema": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" } }, "required": ["documentUuid"], "type": "object" }, "required": ["documentUuid"], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "520d624a2b239d37" },
|
|
994
|
+
{ "mcpName": "list_workspaces", "commandPath": ["workspaces", "list"], "group": "workspace", "description": "List the personal workspaces you own (active ones only). Workspaces that other people or a team share with you are not included \u2014 list_projects shows every project you can open (each row has workspaceId) and get_workspace reads one workspace. Read only. Returns workspaces (uuid, name, description, owner, revision) and count.", "inputSchema": { "properties": {}, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "146a971a0e1986e2" },
|
|
995
|
+
{ "mcpName": "mark_notifications_read", "commandPath": ["tools", "run", "mark-notifications-read"], "group": "generic", "description": "Mark the signed-in user's notifications as read in the AiNecto inbox \u2014 the same read state as the web bell, so the unread badge goes down. Call it only when the user explicitly asks you to mark notifications read; reading or acknowledging notifications (list_notifications ack) does not do this. Pass the id and seq of each item as you received them. Results are per item: {id, ok: true, readAt, alreadyRead?} or {id, ok: false, error} with error one of STALE (the entry was updated after you saw it \u2014 it stays unread; seq is the current one), NOT_FOUND (not your notification, archived, or no such id), INVALID. unread is the user's unread count after the call (the number on the web bell, unreadCapped when above it). Only your own notifications. Retrying is safe. It does not close to-dos and does not acknowledge anything for list_notifications.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "Notifications to mark read; each item is applied and reported on its own.", "items": { "additionalProperties": false, "properties": { "id": { "description": "Notification id from list_notifications or get_my_work_summary (mentionsToRead).", "type": "string" }, "seq": { "description": "The seq of that same item as you received it. If the entry was updated after you saw it (higher seq), it stays unread and you get STALE.", "type": "integer" } }, "required": ["id", "seq"], "type": "object" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "79076cb2c0562ccb" },
|
|
996
|
+
{ "mcpName": "markdown_append_document", "commandPath": ["markdown", "append-document"], "group": "markdown", "description": "Append text to the end of Markdown documents without resending the existing body; separator goes between the old body and the addition. The change is kept in version history (restore_versions can undo it). Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns appended (document rows) and count. Fails with 409 when the document is in the trash or its folder, project or workspace is archived. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Appends", "items": { "properties": { "addition": { "description": "Body addition. \uCD94\uAC00\uD560 \uB0B4\uC6A9\uC774 \uD06C\uBA74 (\uC218\uC2ED KB \uC774\uC0C1) LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` \uB85C uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "separator": { "description": "Separator between existing body and addition", "type": "string" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid", "addition"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "a03ed0662ffcd6e4" },
|
|
997
|
+
{ "mcpName": "markdown_generate_document", "commandPath": ["markdown", "generate-document"], "group": "markdown", "description": "Queue a Markdown generation request (status PENDING) for a separate worker that claims requests through AiNecto's AI request API. This tool does not generate text and does not change the document; to write content yourself use update_documents or markdown_append_document. The queued request keeps only prompt and context, not documentUuid, so put everything the worker needs in context. Needs edit access to the document and an AI credit balance above zero; queuing is rate-limited per user. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns queued (uuid, status, documentUuid) and count.", "inputSchema": { "properties": { "items": { "description": "Generation requests", "items": { "properties": { "context": { "description": "Optional JSON context", "type": "string" }, "documentUuid": { "description": "Target document UUID", "type": "string" }, "prompt": { "description": "Generation prompt", "type": "string" } }, "required": ["documentUuid", "prompt"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "822ac36c10f330d4" },
|
|
998
|
+
{ "mcpName": "move_documents", "commandPath": ["documents", "move"], "group": "document", "description": "Move documents to another folder, to a project's top level (empty newFolderUuid), or into another project \u2014 even in another workspace \u2014 with targetProjectUuid (targetWorkspaceUuid is only a check that must match that project's workspace). Attachments, including those on its comments, go with the document. Sharing inherited from the old folder or project stops applying and is reported in unlinkedInheritedShares; the destination's sharing applies instead. Confirm with the user before moving documents into another project or workspace. Needs edit access to each document and to the destination (and to the source project when leaving it); moving into a different storage quota can be refused. All-or-nothing: if any item fails, nothing moves. Sends no email or inbox notification. Returns moved (document rows), count, unlinkedInheritedShareCount and attachmentsReprojected.", "inputSchema": { "properties": { "clientMutationId": { "description": "Optional mutation identifier for client retry tracing", "maxLength": 128, "minLength": 1, "pattern": "^[\\x21-\\x7E]{1,128}$", "type": "string" }, "items": { "description": "Moves", "items": { "properties": { "newFolderUuid": { "description": "New folder UUID \u2014 null/empty for root", "type": "string" }, "targetProjectUuid": { "description": "Target project UUID \u2014 omit to stay in current project", "type": "string" }, "targetWorkspaceUuid": { "description": "Guard only: must match targetProjectUuid workspace", "type": "string" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "c0ca210155b35be0" },
|
|
999
|
+
{ "mcpName": "move_folders", "commandPath": ["folders", "move"], "group": "generic", "description": "Move folders, with everything under them, under another folder of the same project, or to the project's top level when newParentFolderUuid is empty. Folders cannot move between projects (move_documents can move documents across projects). A folder cannot go under itself or its own subfolder, and the result must stay within 50 levels. Sharing inherited from the old parent folders stops applying and the new parents' sharing applies instead. Needs edit access to the folder and to the new parent. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns moved (folder rows) and count.", "inputSchema": { "properties": { "items": { "description": "Moves", "items": { "properties": { "newParentFolderUuid": { "description": "New parent UUID \u2014 null/empty for root", "type": "string" }, "uuid": { "description": "Folder UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "95ee0d3da59ec301" },
|
|
1000
|
+
{ "mcpName": "move_projects", "commandPath": ["projects", "move"], "group": "generic", "description": "Move projects, with all their folders, documents and attachments, into another workspace. This changes who can open them: people with access to the old workspace lose it, people with access to the target workspace gain it, and people given the project itself keep it. Public links stay as they were. Confirm with the user before moving a project into a team workspace. Needs edit access to the project and to the target workspace; moving to the workspace it is already in does nothing. Each item is tried on its own and the call does not stop at a failure: results reports each item as ok, or with status and error (409 when its projectKey is already used in the target workspace; the target's storage quota can also refuse). Sends no email or inbox notification. Returns results, movedCount and failedCount.", "inputSchema": { "properties": { "items": { "description": "Moves", "items": { "properties": { "targetWorkspaceUuid": { "description": "Destination workspace UUID (you need write access there)", "type": "string" }, "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid", "targetWorkspaceUuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "7b5a3ba9ab9e3079" },
|
|
992
1001
|
{ "mcpName": "request_upload_token", "commandPath": ["tools", "run", "request-upload-token"], "group": "attachment", "description": "Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.", "inputSchema": { "properties": { "maxBytes": { "description": "\uCD5C\uB300 \uC5C5\uB85C\uB4DC byte (\uC11C\uBC84 \uCE21 \uD55C\uB3C4)", "type": "integer" }, "purpose": { "description": "Token \uC6A9\uB3C4. `mcp.call` \uC740 curl \uB85C /mcp \uD638\uCD9C, `document.create/update/append` \uB294 PUT body \uB85C \uBCF8\uBB38 \uC5C5\uB85C\uB4DC, `attachment.upload` \uB294 \uD30C\uC77C bytes \uC5C5\uB85C\uB4DC. \uCF58\uD150\uCE20\uAC00 \uD06C\uBA74 (\uC218\uC2ED KB \uC774\uC0C1) LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 \uC774 \uB3C4\uAD6C\uB85C 5\uBD84 \uC7AC\uC0AC\uC6A9 \uD1A0\uD070\uC744 \uBC1B\uACE0 curl \uB85C \uBCF4\uB0B4\uB294 \uAC83\uC744 \uAC15\uB825 \uAD8C\uC7A5.", "enum": ["mcp.call", "document.create", "document.update", "document.append", "attachment.upload"], "type": "string" }, "scopeJson": { "description": "\uC120\uD0DD \u2014 JSON scope. document.create \uB294 projectUuid, type, title \uC744 \uD3EC\uD568\uD558\uACE0 creatable type values \uB294 erd, diagram, markdown, openapi, html, file, kanban. document.update/document.append \uB294 documentUuid \uB97C \uD3EC\uD568. type=file \uC740 filename \uB3C4 \uD3EC\uD568(\uD655\uC7A5\uC790\uB85C \uD615\uC2DD \uD310\uC815) \u2014 PUT \uC758 Content-Type \uC740 \uD30C\uC77C MIME, \uBCF8\uBB38\uC740 \uD30C\uC77C \uBC14\uC774\uD2B8. attachment.upload: {documentUuid, filename}; storageKey \uB294 \uC11C\uBC84\uAC00 \uBC1C\uAE09 scope \uC5D0 \uB123\uB294\uB2E4.", "type": "string" }, "ttlSeconds": { "description": "TTL (\uCD08). \uAE30\uBCF8 300 (5\uBD84)", "type": "integer" } }, "required": ["purpose"], "type": "object" }, "required": ["purpose"], "payloadMode": "binary-upload", "destructive": false, "sourceCatalog": "dev", "schemaHash": "99a4b6c77dd2368b" },
|
|
993
1002
|
{ "mcpName": "resolve_comments", "commandPath": ["tools", "run", "resolve-comments"], "group": "generic", "description": "Mark questions on a document or a kanban card (cardUuid) as resolved. Only top-level comments with kind QUESTION can be resolved, and it needs edit access to the document or board (readers can comment but cannot resolve). Resolving cannot be undone. Each id is applied on its own; results report each id.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "ids": { "description": "Question ids to resolve (top-level comments with kind QUESTION)", "items": { "minimum": 1, "type": "integer" }, "minItems": 1, "type": "array" } }, "required": ["ids"], "type": "object" }, "required": ["ids"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "d996f083fd9e6acf" },
|
|
994
|
-
{ "mcpName": "restore_versions", "commandPath": ["versions", "restore"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Restores", "items": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number to restore", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
995
|
-
{ "mcpName": "search_documents", "commandPath": ["documents", "search"], "group": "document", "description": "", "inputSchema": { "properties": { "limit": { "description": "\uACB0\uACFC \uAC1C\uC218 (\uAE30\uBCF8 20, \uCD5C\uB300 50)", "type": "integer" }, "offset": { "description": "\uD398\uC774\uC9C0\uB124\uC774\uC158 offset (\uAE30\uBCF8 0)", "type": "integer" }, "
|
|
996
|
-
{ "mcpName": "unarchive_documents", "commandPath": ["documents", "unarchive"], "group": "document", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
997
|
-
{ "mcpName": "unarchive_folders", "commandPath": ["folders", "unarchive"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
998
|
-
{ "mcpName": "unarchive_projects", "commandPath": ["projects", "unarchive"], "group": "generic", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
999
|
-
{ "mcpName": "unarchive_workspaces", "commandPath": ["workspaces", "unarchive"], "group": "workspace", "description": "", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "
|
|
1000
|
-
{ "mcpName": "update_agent_todos", "commandPath": ["agent-todos", "update"], "group": "generic", "description": "Claim, renew, complete, release, or dismiss the signed-in user's agent to-dos. Only the session holding the current leaseToken may renew, release, or complete a claimed to-do \u2014 even another session of the same connection gets CLAIMED_BY_OTHER. Results are per item: {todoId, ok: true, state, leaseToken?, claimExpiresAt?} or {todoId, ok: false, error} with error one of CLAIMED_BY_OTHER, LEASE_LOST, ALREADY_DONE, CLOSED_BY_HUMAN, SUPERSEDED, ACCESS_LOST, BUSINESS_ACTION_REQUIRED, NOT_FOUND, INVALID \u2014 on CLOSED_BY_HUMAN or SUPERSEDED stop working on it. BUSINESS_ACTION_REQUIRED: card to-dos (CARD_*) cannot be completed here; doing the card action closes them. Retrying the same complete or dismiss returns ok again.
|
|
1003
|
+
{ "mcpName": "restore_versions", "commandPath": ["versions", "restore"], "group": "generic", "description": `Roll documents back to an earlier saved version (version numbers come from list_versions). The current content and title are replaced by that version's snapshot and a new version "Restored from version N" is recorded, so the history keeps everything and the rollback can itself be undone the same way. Tell the user which version you are restoring before calling. Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns restored (the new version rows, each with documentUuid) and count. Fails with 404 for an unknown document or version number, with a plan-limit error for a locked version (locked=true in list_versions), and with 409 when the document is in the trash or its folder, project or workspace is archived.`, "inputSchema": { "properties": { "items": { "description": "Restores", "items": { "properties": { "documentUuid": { "description": "Document UUID", "type": "string" }, "versionNumber": { "description": "Version number to restore", "type": "integer" } }, "required": ["documentUuid", "versionNumber"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "1af89081b6bc61cd" },
|
|
1004
|
+
{ "mcpName": "search_documents", "commandPath": ["documents", "search"], "group": "document", "description": `Find documents you can read by keywords, people, folder and dates, when you have no link or exact title. Each hit has title, type, uuid, projectName, folderPath ("Parent / Child"), url, updatedAt and lastEditorName \u2014 enough to tell the user which document is which. Map the user's words to filters: "edited today" -> updatedFrom = today's date-time at local midnight with offset; "last week" -> updatedFrom/updatedTo; "Ryan's" or "Ryan changed" -> first get Ryan's userId from list_mention_candidates (or identity_get_self for "me"), then ownerUserId or lastEditorUserId; "in the X folder" -> folderUuid from list_folders. Keep only the topic words in q.`, "inputSchema": { "properties": { "createdFrom": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Created at or after.", "type": "string" }, "createdTo": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Created at or before (a date includes that whole day).", "type": "string" }, "folderUuid": { "description": "Only documents in this folder or any folder under it.", "type": "string" }, "lastEditorUserId": { "description": "Only documents whose latest saved version is by this user.", "type": "string" }, "limit": { "description": "\uACB0\uACFC \uAC1C\uC218 (\uAE30\uBCF8 20, \uCD5C\uB300 50)", "type": "integer" }, "offset": { "description": "\uD398\uC774\uC9C0\uB124\uC774\uC158 offset (\uAE30\uBCF8 0)", "type": "integer" }, "ownerUserId": { "description": "Only documents owned by this user (the creator, unless ownership moved).", "type": "string" }, "projectUuid": { "description": "Only documents in this project.", "type": "string" }, "q": { "description": "Keywords in the title or body. Optional \u2014 omit to list by the filters alone, most recently updated first.", "type": "string" }, "type": { "description": "Optional document type filter. Readable values: erd, diagram, markdown, openapi, html, file, kanban.", "enum": ["erd", "diagram", "markdown", "openapi", "html", "file", "kanban"], "type": "string" }, "updatedFrom": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Last changed at or after.", "type": "string" }, "updatedTo": { "description": "ISO-8601: a date-time with offset (2026-10-21T00:00:00+09:00) or a date (2026-10-21 = that UTC day; use the offset form for a local day). Last changed at or before (a date includes that whole day).", "type": "string" } }, "type": "object" }, "required": [], "payloadMode": "flags", "destructive": false, "sourceCatalog": "dev", "schemaHash": "a48651dc16036896" },
|
|
1005
|
+
{ "mcpName": "unarchive_documents", "commandPath": ["documents", "unarchive"], "group": "document", "description": "Restore documents from the trash (list_trash shows them) to where they were. A public link that was on opens again; direct sharing removed when the document was trashed does not come back. Needs edit access. A document that is not in the trash is returned unchanged. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (document rows) and count. Fails with 409 when its folder, project or workspace is archived \u2014 restore the folder with unarchive_folders instead \u2014 and is refused when restoring would exceed the storage quota.", "inputSchema": { "properties": { "uuids": { "description": "Document UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "fadb26ea6649079c" },
|
|
1006
|
+
{ "mcpName": "unarchive_folders", "commandPath": ["folders", "unarchive"], "group": "generic", "description": "Restore trashed folders together with their whole subtree. Every trashed subfolder and document under the folder comes back \u2014 including documents that were trashed on their own before the folder was. Direct sharing removed at trash time does not come back. No tool lists trashed folders (list_trash lists documents only), so use the UUID from the earlier delete_folders call. Needs edit access to the folder. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (folder rows) and count. Fails with 409 when a parent folder, the project or the workspace is archived (restore the parent first) and is refused when restoring would exceed the storage quota.", "inputSchema": { "properties": { "uuids": { "description": "Folder UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "b5b618fa100be0f7" },
|
|
1007
|
+
{ "mcpName": "unarchive_projects", "commandPath": ["projects", "unarchive"], "group": "generic", "description": "Restore archived projects so they are listed and editable again. Public links of documents inside open again if they were on; sharing removed at archive time does not come back. No tool lists archived projects, so use the UUID from the earlier delete_projects call. Needs edit access to the project, and its workspace must not be archived. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (project rows) and count. Fails with 404 for an unknown UUID, 403 without access, and 409 when the workspace is archived.", "inputSchema": { "properties": { "uuids": { "description": "Project UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "5d5b1029b0759182" },
|
|
1008
|
+
{ "mcpName": "unarchive_workspaces", "commandPath": ["workspaces", "unarchive"], "group": "workspace", "description": "Restore archived workspaces so they and their projects are listed and usable again. No tool lists archived workspaces, so use the UUID from the earlier delete_workspaces call. Needs edit access to the workspace. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns unarchived (workspace rows) and count. Fails with 404 for an unknown UUID and 403 without access.", "inputSchema": { "properties": { "uuids": { "description": "Workspace UUIDs", "items": { "type": "string" }, "type": "array" } }, "required": ["uuids"], "type": "object" }, "required": ["uuids"], "payloadMode": "file-json", "destructive": true, "sourceCatalog": "dev", "schemaHash": "6cd85561c70e4bf5" },
|
|
1009
|
+
{ "mcpName": "update_agent_todos", "commandPath": ["agent-todos", "update"], "group": "generic", "description": "Claim, renew, complete, release, or dismiss the signed-in user's agent to-dos. Only the session holding the current leaseToken may renew, release, or complete a claimed to-do \u2014 even another session of the same connection gets CLAIMED_BY_OTHER. Results are per item: {todoId, ok: true, state, leaseToken?, claimExpiresAt?} or {todoId, ok: false, error} with error one of CLAIMED_BY_OTHER, LEASE_LOST, ALREADY_DONE, CLOSED_BY_HUMAN, SUPERSEDED, ACCESS_LOST, BUSINESS_ACTION_REQUIRED, NOT_FOUND, INVALID \u2014 on CLOSED_BY_HUMAN or SUPERSEDED stop working on it. BUSINESS_ACTION_REQUIRED: card to-dos (CARD_*) cannot be completed here; doing the card action closes them. Retrying the same complete or dismiss returns ok again. To mark the person's notifications read (only when they ask), use mark_notifications_read.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "To-dos to update; each item is applied and reported on its own.", "items": { "additionalProperties": false, "properties": { "action": { "description": "claim: take it (returns leaseToken, valid 30 minutes). renew: extend your lease. complete: done (with leaseToken if you claimed it; without one only while it is still OPEN). release: give it back. dismiss: not a to-do.", "enum": ["claim", "renew", "complete", "release", "dismiss"], "type": "string" }, "leaseToken": { "description": "Required for renew and release, and for complete or dismiss of a to-do you claimed.", "type": "string" }, "note": { "description": "For complete or dismiss: one line on what you did (at most 500 characters, no document bodies). The person sees it in the inbox.", "maxLength": 500, "type": "string" }, "todoId": { "description": "todoId from list_agent_todos.", "type": "string" } }, "required": ["todoId", "action"], "type": "object" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "f304eb4450675a6d" },
|
|
1001
1010
|
{ "mcpName": "update_comments", "commandPath": ["comments", "update"], "group": "generic", "description": "Edit your own comments on a document or a kanban card (cardUuid). Only the author can edit, and only while they can still read it. A resolved question and a top-level comment that already has replies are locked. Items are applied in order and each one commits on its own; results report each item.", "inputSchema": { "additionalProperties": false, "properties": { "cardUuid": { "description": "Kanban card UUID the comments belong to (from kanban_list_cards). Anyone who can read the card's board may comment. Give this or documentUuid, not both.", "type": "string" }, "documentUuid": { "description": "Document UUID the comments belong to. Give this or cardUuid, not both.", "type": "string" }, "items": { "description": "Edits, applied in order", "items": { "additionalProperties": false, "properties": { "body": { "description": "New comment text (replaces the old text).", "maxLength": 1e4, "minLength": 1, "type": "string" }, "clientMutationId": { "description": "Idempotency key (visible ASCII, at most 128 characters). Required when mentionUserIds is not empty; reuse the same value when retrying the same item so the mention email is not sent twice.", "maxLength": 128, "type": "string" }, "id": { "description": "Comment id (from mcp__ainecto__list_comments)", "minimum": 1, "type": "integer" }, "mentionUserIds": { "description": "The complete set of userIds mentioned after the edit; omit to remove all mentions. Each one's @<displayName> must appear in body. Only people who were not mentioned before get a notification email.", "items": { "type": "string" }, "maxItems": 20, "type": "array", "uniqueItems": true } }, "required": ["id", "body"], "type": "object" }, "minItems": 1, "type": "array" }, "mailLanguage": { "description": "Language of the comment notification email (mention or reply). Defaults to en.", "enum": ["en", "ko"], "type": "string" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "a5bc050079e34361" },
|
|
1002
|
-
{ "mcpName": "update_documents", "commandPath": ["documents", "update"], "group": "document", "description": "Update documents. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.update)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "title": { "description": "New title", "type": "string" }, "typePayload": { "description": "Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: {file:{filename,contentType,sizeBytes,viewerKind}} (+content for text/CSV, first 64 KB); kanban: no body \u2014 only the title can be updated; cards are changed with kanban_apply_changes and kanban_card_action.", "type": "object" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
1003
|
-
{ "mcpName": "update_folders", "commandPath": ["folders", "update"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Folder UUID", "type": "string" } }, "required": ["uuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
1004
|
-
{ "mcpName": "update_projects", "commandPath": ["projects", "update"], "group": "generic", "description": "", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
1005
|
-
{ "mcpName": "update_workspaces", "commandPath": ["workspaces", "update"], "group": "workspace", "description": "", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
1006
|
-
{ "mcpName": "upload_attachments", "commandPath": ["tools", "run", "upload-attachments"], "group": "attachment", "description": "", "inputSchema": { "properties": { "items": { "description": "Attachments to register", "items": { "properties": { "contentType": { "description": "MIME type", "type": "string" }, "documentUuid": { "description": "Parent document UUID", "type": "string" }, "filename": { "description": "Original file name", "type": "string" }, "sizeBytes": { "description": "Size in bytes", "type": "integer" }, "storageKey": { "description": "Storage key returned by request_upload_token purpose=attachment.upload", "type": "string" } }, "required": ["documentUuid", "filename", "storageKey"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "binary-upload", "destructive": false, "sourceCatalog": "dev", "schemaHash": "
|
|
1011
|
+
{ "mcpName": "update_documents", "commandPath": ["documents", "update"], "group": "document", "description": "Update documents: the title and/or the whole body. A body you send replaces the current body entirely \u2014 it is not a patch, so read the document first and send the full new text. The document type decides the body field (see body and typePayload): file documents can only be renamed, ERD content changes through erd_apply_changes, diagram nodes and edges through diagram_apply_changes, and board documents are refused. Every body change is kept in version history, so list_versions and restore_versions can undo it. Needs edit access. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Returns updated (document rows) and count. Fails with 409 when the document is in the trash or its folder, project or workspace is archived. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "body": { "description": "Deprecated compatibility alias for typePayload.body when document type is markdown. \uBCF8\uBB38\uC774 \uC218\uC2ED KB \uC774\uC0C1\uC73C\uB85C \uD06C\uBA74 LLM \uD1A0\uD070 \uC808\uC57D\uC744 \uC704\uD574 `request_upload_token (purpose=document.update)` \uB97C \uD638\uCD9C\uD574 uploadUrl \uC744 \uBC1B\uACE0 curl \uB85C \uC9C1\uC811 PUT \uC73C\uB85C \uBCF4\uB0BC \uAC83.", "type": "string" }, "title": { "description": "New title", "type": "string" }, "typePayload": { "description": "Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; openapi: {content}; html: {content} (a full HTML page); file: {file:{filename,contentType,sizeBytes,viewerKind}} (+content for text/CSV, first 64 KB); kanban: no body \u2014 only the title can be updated; cards are changed with kanban_apply_changes and kanban_card_action.", "type": "object" }, "uuid": { "description": "Document UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "e6526c5177c9542c" },
|
|
1012
|
+
{ "mcpName": "update_folders", "commandPath": ["folders", "update"], "group": "generic", "description": "Rename folders (only the name; move_folders moves them). Names do not have to be unique. Needs edit access to the folder. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (folder rows) and count. Fails with 404, 403, or 409 when the folder or a parent folder is archived.", "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Folder UUID", "type": "string" } }, "required": ["uuid", "name"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "af4a8688a8d7f15c" },
|
|
1013
|
+
{ "mcpName": "update_projects", "commandPath": ["projects", "update"], "group": "generic", "description": 'Rename projects or change their description (projectKey cannot be changed here). Omitted fields stay as they are, a blank name is ignored, and description "" clears it. Names do not have to be unique. Needs admin or owner rights on the project. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (project rows) and count. Fails with 404 for an unknown UUID and 403 without rights or when the project or its workspace is archived.', "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Project UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "6a097e4b164d2d97" },
|
|
1014
|
+
{ "mcpName": "update_workspaces", "commandPath": ["workspaces", "update"], "group": "workspace", "description": 'Rename workspaces or change their description. Omitted fields stay as they are, a blank name is ignored, and description "" clears it. Names do not have to be unique. Needs admin or owner rights. Targets are UUIDs only; names are never matched and may repeat. Look the UUID up first, and when more than one candidate fits what the user said, ask which one. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns updated (workspace rows) and count. Fails with 404 for an unknown UUID and 403 without rights or when the workspace is archived.', "inputSchema": { "properties": { "items": { "description": "Updates", "items": { "properties": { "description": { "description": "New description", "type": "string" }, "name": { "description": "New name", "type": "string" }, "uuid": { "description": "Workspace UUID", "type": "string" } }, "required": ["uuid"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "file-json", "destructive": false, "sourceCatalog": "dev", "schemaHash": "9c6228e9c2859ff5" },
|
|
1015
|
+
{ "mcpName": "upload_attachments", "commandPath": ["tools", "run", "upload-attachments"], "group": "attachment", "description": "Register files you have already uploaded as attachments of documents. Steps: (1) request_upload_token with purpose=attachment.upload and {documentUuid, filename}; (2) PUT the file bytes with curl to the returned URL; (3) call this with the storageKey from step 1 \u2014 without step 2 it fails. sizeBytes, when given, must equal the uploaded size. A storageKey registers once (409 after that). Files over the server's attachment size limit or beyond the storage quota are refused, and the server decides the stored content type. File documents cannot take attachments. Needs edit access to the document. Items run in order and each one commits on its own: the first failing item ends the call with an error, items before it stay applied (the error does not list them), and later items are not tried \u2014 re-read before retrying. Sends no email or inbox notification. Returns uploaded (attachment rows) and count.", "inputSchema": { "properties": { "items": { "description": "Attachments to register", "items": { "properties": { "contentType": { "description": "MIME type", "type": "string" }, "documentUuid": { "description": "Parent document UUID", "type": "string" }, "filename": { "description": "Original file name", "type": "string" }, "sizeBytes": { "description": "Size in bytes", "type": "integer" }, "storageKey": { "description": "Storage key returned by request_upload_token purpose=attachment.upload", "type": "string" } }, "required": ["documentUuid", "filename", "storageKey"], "type": "object" }, "type": "array" } }, "required": ["items"], "type": "object" }, "required": ["items"], "payloadMode": "binary-upload", "destructive": false, "sourceCatalog": "dev", "schemaHash": "adf49eddeae4a185" }
|
|
1007
1016
|
];
|
|
1008
1017
|
|
|
1009
1018
|
// src/core/catalog/generator.ts
|
|
@@ -2303,6 +2312,31 @@ var AGENT_TARGETS = [
|
|
|
2303
2312
|
{ id: "claude-code", label: "Claude Code", path: ".mcp.json" },
|
|
2304
2313
|
{ id: "cursor", label: "Cursor", path: ".cursor/mcp.json" }
|
|
2305
2314
|
];
|
|
2315
|
+
var REMOTE_SIGN_IN = {
|
|
2316
|
+
"claude-code": `Claude Code \u2014 in a session, run /mcp, pick "${SERVER_NAME}" and sign in`,
|
|
2317
|
+
cursor: `Cursor \u2014 sign in when "${SERVER_NAME}" asks for it in Cursor's MCP settings`,
|
|
2318
|
+
codex: `Codex \u2014 signs in while setup connects it (its sign-in link is printed above); if that did not finish, run \`codex mcp login ${SERVER_NAME}\``
|
|
2319
|
+
};
|
|
2320
|
+
function desiredServerEntry(input) {
|
|
2321
|
+
if (REMOTE_SIGN_IN[input.client] === void 0 || input.local) {
|
|
2322
|
+
return buildServerEntry({ env: input.env, endpoint: input.endpoint, packageSpec: input.packageSpec });
|
|
2323
|
+
}
|
|
2324
|
+
return input.client === "claude-code" ? { type: "http", url: input.endpoint } : { url: input.endpoint };
|
|
2325
|
+
}
|
|
2326
|
+
function isOurEntry(entry, endpoint) {
|
|
2327
|
+
if (isRecord10(entry) && typeof entry.url === "string") {
|
|
2328
|
+
const url = normalizedServerUrl(entry.url);
|
|
2329
|
+
return url !== void 0 && (url === endpoint || isDefaultEndpoint(url));
|
|
2330
|
+
}
|
|
2331
|
+
return isOurBridge(entry);
|
|
2332
|
+
}
|
|
2333
|
+
function normalizedServerUrl(url) {
|
|
2334
|
+
try {
|
|
2335
|
+
return normalizeEndpoint(url);
|
|
2336
|
+
} catch {
|
|
2337
|
+
return void 0;
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2306
2340
|
function buildServerEntry(input = {}) {
|
|
2307
2341
|
const args = ["-y", input.packageSpec ?? bridgePackageSpec()];
|
|
2308
2342
|
if (input.env && input.env !== "prod") {
|
|
@@ -3028,7 +3062,6 @@ function planInit(input) {
|
|
|
3028
3062
|
return { writes: [], deletes: [], notes: [], refusal };
|
|
3029
3063
|
}
|
|
3030
3064
|
const carriedRecord = previous.state === "valid" ? previous.record : emptyRecord();
|
|
3031
|
-
const entry = buildServerEntry({ env: input.env, endpoint: input.endpoint, packageSpec: input.packageSpec });
|
|
3032
3065
|
const writes = [];
|
|
3033
3066
|
const notes = [];
|
|
3034
3067
|
const record = {
|
|
@@ -3051,10 +3084,17 @@ function planInit(input) {
|
|
|
3051
3084
|
for (const target of AGENT_TARGETS) {
|
|
3052
3085
|
const existing = input.files.get(target.path);
|
|
3053
3086
|
const currentEntry = existing === void 0 ? void 0 : readServerEntry(existing);
|
|
3054
|
-
if (!input.mcp && !
|
|
3087
|
+
if (!input.mcp && !isOurEntry(currentEntry, input.endpoint)) {
|
|
3055
3088
|
continue;
|
|
3056
3089
|
}
|
|
3057
3090
|
const prior = priorOf(target.path, ownedJson(currentEntry, currentEntry !== void 0));
|
|
3091
|
+
const entry = desiredServerEntry({
|
|
3092
|
+
client: target.id,
|
|
3093
|
+
env: input.env ?? "prod",
|
|
3094
|
+
endpoint: input.endpoint,
|
|
3095
|
+
local: input.local,
|
|
3096
|
+
packageSpec: input.packageSpec
|
|
3097
|
+
});
|
|
3058
3098
|
const merged = mergeServerEntry(existing, entry);
|
|
3059
3099
|
if (existing === merged.content) {
|
|
3060
3100
|
continue;
|
|
@@ -3625,6 +3665,7 @@ async function executeInitCommand(options) {
|
|
|
3625
3665
|
env: options.env,
|
|
3626
3666
|
endpoint: options.endpoint,
|
|
3627
3667
|
mcp: args.mcp,
|
|
3668
|
+
local: args.local,
|
|
3628
3669
|
cliVersion: options.cliVersion,
|
|
3629
3670
|
files,
|
|
3630
3671
|
documents
|
|
@@ -3645,6 +3686,8 @@ async function executeInitCommand(options) {
|
|
|
3645
3686
|
next: [
|
|
3646
3687
|
`Read ${HARNESS_DOC_PATH} first. Every session sees the same AiNecto tools; your AiNecto permissions decide what they may change.`,
|
|
3647
3688
|
mcpWritten ? "Claude Code and Cursor pick up the repository's MCP config in a new session." : "To connect your coding agents on this machine, run `ainecto setup` once (or re-run init with --mcp to also write this repository's .mcp.json and .cursor/mcp.json).",
|
|
3689
|
+
// 서버 주소를 썼으면 에이전트가 따로 로그인한다 — setup 과 같은 안내 표 하나.
|
|
3690
|
+
...mcpWritten && !args.local ? [`Each agent signs in to AiNecto by itself the first time: ${AGENT_TARGETS.map((target) => REMOTE_SIGN_IN[target.id]).filter(Boolean).join("; ")}.`] : [],
|
|
3648
3691
|
"Undo everything with: ainecto init --undo"
|
|
3649
3692
|
]
|
|
3650
3693
|
},
|
|
@@ -3840,7 +3883,7 @@ async function fileMode(absolutePath) {
|
|
|
3840
3883
|
}
|
|
3841
3884
|
}
|
|
3842
3885
|
function parseInitArgs(argv) {
|
|
3843
|
-
const args = { mcp: false, dryRun: false, undo: false, ignored: [] };
|
|
3886
|
+
const args = { mcp: false, local: false, dryRun: false, undo: false, ignored: [] };
|
|
3844
3887
|
for (let index = 0; index < argv.length; index += 1) {
|
|
3845
3888
|
const arg = argv[index];
|
|
3846
3889
|
if (!arg) {
|
|
@@ -3848,6 +3891,8 @@ function parseInitArgs(argv) {
|
|
|
3848
3891
|
}
|
|
3849
3892
|
if (arg === "--mcp") {
|
|
3850
3893
|
args.mcp = true;
|
|
3894
|
+
} else if (arg === "--local") {
|
|
3895
|
+
args.local = true;
|
|
3851
3896
|
} else if (arg === "--dry-run") {
|
|
3852
3897
|
args.dryRun = true;
|
|
3853
3898
|
} else if (arg === "--undo") {
|
|
@@ -3911,7 +3956,7 @@ import { dirname as dirname5, join as join4 } from "path";
|
|
|
3911
3956
|
import { spawn as spawn2 } from "child_process";
|
|
3912
3957
|
var COMMAND_TIMEOUT_MS = 9e4;
|
|
3913
3958
|
function systemCommandRunner(options) {
|
|
3914
|
-
return (command, args) => new Promise((resolve3) => {
|
|
3959
|
+
return (command, args, run) => new Promise((resolve3) => {
|
|
3915
3960
|
let stdout = "";
|
|
3916
3961
|
let stderr = "";
|
|
3917
3962
|
let settled = false;
|
|
@@ -3934,9 +3979,11 @@ ${command} timed out after ${COMMAND_TIMEOUT_MS / 1e3}s`, missing: false });
|
|
|
3934
3979
|
}, COMMAND_TIMEOUT_MS);
|
|
3935
3980
|
child.stdout.on("data", (chunk) => {
|
|
3936
3981
|
stdout += String(chunk);
|
|
3982
|
+
run?.show?.(String(chunk));
|
|
3937
3983
|
});
|
|
3938
3984
|
child.stderr.on("data", (chunk) => {
|
|
3939
3985
|
stderr += String(chunk);
|
|
3986
|
+
run?.show?.(String(chunk));
|
|
3940
3987
|
});
|
|
3941
3988
|
child.on("error", (error) => {
|
|
3942
3989
|
finish({ exitCode: null, stdout, stderr: error.message, missing: error.code === "ENOENT" });
|
|
@@ -3945,8 +3992,8 @@ ${command} timed out after ${COMMAND_TIMEOUT_MS / 1e3}s`, missing: false });
|
|
|
3945
3992
|
});
|
|
3946
3993
|
}
|
|
3947
3994
|
function recordingRunner(runner, log) {
|
|
3948
|
-
return async (command, args) => {
|
|
3949
|
-
const result = await runner(command, args);
|
|
3995
|
+
return async (command, args, run) => {
|
|
3996
|
+
const result = await runner(command, args, run);
|
|
3950
3997
|
const entry = { command: [command, ...args].join(" "), exitCode: result.exitCode };
|
|
3951
3998
|
if (result.missing) {
|
|
3952
3999
|
entry.missing = true;
|
|
@@ -3972,7 +4019,7 @@ async function inspectAgents(context) {
|
|
|
3972
4019
|
return [await inspectClaude(context), await inspectCursor(context), await inspectCodex(context)];
|
|
3973
4020
|
}
|
|
3974
4021
|
var NOT_FOUND = /No MCP server named/i;
|
|
3975
|
-
async function inspectClaude({ runner }) {
|
|
4022
|
+
async function inspectClaude({ runner, endpoint }) {
|
|
3976
4023
|
const base = { client: "claude-code", ours: false, carriesRole: false };
|
|
3977
4024
|
const result = await runner("claude", ["mcp", "get", SERVER_NAME]);
|
|
3978
4025
|
if (result.missing) {
|
|
@@ -3987,9 +4034,9 @@ async function inspectClaude({ runner }) {
|
|
|
3987
4034
|
const url = field("URL");
|
|
3988
4035
|
const command = field("Command");
|
|
3989
4036
|
const entry = url ? { url } : command ? { command, args: (field("Args") ?? "").split(/\s+/).filter(Boolean) } : void 0;
|
|
3990
|
-
return { ...base, installed: true, scope, ...describe(entry) };
|
|
4037
|
+
return { ...base, installed: true, scope, ...describe(entry, endpoint) };
|
|
3991
4038
|
}
|
|
3992
|
-
async function inspectCursor({ home }) {
|
|
4039
|
+
async function inspectCursor({ home, endpoint }) {
|
|
3993
4040
|
const base = { client: "cursor", ours: false, carriesRole: false, scope: "global" };
|
|
3994
4041
|
if (!await exists(join4(home, ".cursor"))) {
|
|
3995
4042
|
return { ...base, installed: false };
|
|
@@ -4010,9 +4057,9 @@ async function inspectCursor({ home }) {
|
|
|
4010
4057
|
}
|
|
4011
4058
|
}
|
|
4012
4059
|
const raw = readServerEntry(content);
|
|
4013
|
-
return { ...base, installed: true, ...describe(
|
|
4060
|
+
return { ...base, installed: true, ...describe(toEntry(raw), endpoint) };
|
|
4014
4061
|
}
|
|
4015
|
-
async function inspectCodex({ runner }) {
|
|
4062
|
+
async function inspectCodex({ runner, endpoint }) {
|
|
4016
4063
|
const base = { client: "codex", ours: false, carriesRole: false, scope: "global" };
|
|
4017
4064
|
const result = await runner("codex", ["mcp", "get", SERVER_NAME, "--json"]);
|
|
4018
4065
|
if (result.missing) {
|
|
@@ -4024,7 +4071,7 @@ async function inspectCodex({ runner }) {
|
|
|
4024
4071
|
try {
|
|
4025
4072
|
const parsed = JSON.parse(result.stdout);
|
|
4026
4073
|
const transport = parsed.transport ?? {};
|
|
4027
|
-
return { ...base, installed: true, ...describe(
|
|
4074
|
+
return { ...base, installed: true, ...describe(toEntry(transport), endpoint) };
|
|
4028
4075
|
} catch {
|
|
4029
4076
|
return { ...base, installed: true, problem: "codex mcp get --json did not return JSON" };
|
|
4030
4077
|
}
|
|
@@ -4059,8 +4106,12 @@ async function connectAgent(state, desired, context, dryRun) {
|
|
|
4059
4106
|
const path = cursorConfigPath(context.home);
|
|
4060
4107
|
await writeKeepingMode(path, mergeServerEntry(await readIfExists2(path), desired).content);
|
|
4061
4108
|
}
|
|
4109
|
+
const signsInNow = state.client === "codex" && "url" in desired;
|
|
4110
|
+
if (signsInNow) {
|
|
4111
|
+
context.show?.("Connecting Codex \u2014 it signs in to AiNecto now. Approve it in the browser (the link follows if no tab opens):\n");
|
|
4112
|
+
}
|
|
4062
4113
|
for (const [command, ...args] of commands) {
|
|
4063
|
-
const result = await context.runner(command, args);
|
|
4114
|
+
const result = await context.runner(command, args, signsInNow ? { show: context.show } : void 0);
|
|
4064
4115
|
if (result.exitCode !== 0) {
|
|
4065
4116
|
return outcome("failed", `${[command, ...args].join(" ")}: ${lastLine(result.stderr) ?? lastLine(result.stdout) ?? `exit ${result.exitCode}`}`);
|
|
4066
4117
|
}
|
|
@@ -4112,22 +4163,19 @@ async function disconnectAgent(state, context, dryRun) {
|
|
|
4112
4163
|
}
|
|
4113
4164
|
return outcome("removed");
|
|
4114
4165
|
}
|
|
4115
|
-
function desiredEntry(input) {
|
|
4116
|
-
return buildServerEntry({ env: input.env, endpoint: input.endpoint });
|
|
4117
|
-
}
|
|
4118
4166
|
function cursorConfigPath(home) {
|
|
4119
4167
|
return join4(home, ".cursor", "mcp.json");
|
|
4120
4168
|
}
|
|
4121
4169
|
function writeCommands(client, entry, updating) {
|
|
4122
|
-
const bridge = [entry.command, ...entry.args];
|
|
4123
4170
|
if (client === "claude-code") {
|
|
4171
|
+
const add = "url" in entry ? ["--transport", "http", "-s", "user", SERVER_NAME, entry.url] : ["-s", "user", SERVER_NAME, "--", entry.command, ...entry.args];
|
|
4124
4172
|
return [
|
|
4125
4173
|
...updating ? [["claude", "mcp", "remove", "-s", "user", SERVER_NAME]] : [],
|
|
4126
|
-
["claude", "mcp", "add",
|
|
4174
|
+
["claude", "mcp", "add", ...add]
|
|
4127
4175
|
];
|
|
4128
4176
|
}
|
|
4129
4177
|
if (client === "codex") {
|
|
4130
|
-
return [["codex", "mcp", "add", SERVER_NAME, "--", ...
|
|
4178
|
+
return [["codex", "mcp", "add", SERVER_NAME, ..."url" in entry ? ["--url", entry.url] : ["--", entry.command, ...entry.args]]];
|
|
4131
4179
|
}
|
|
4132
4180
|
return [];
|
|
4133
4181
|
}
|
|
@@ -4141,22 +4189,22 @@ function keptDetail(state) {
|
|
|
4141
4189
|
const where = state.scope ? ` (${state.scope})` : "";
|
|
4142
4190
|
return `someone else's "${SERVER_NAME}" entry${where} \u2014 left untouched`;
|
|
4143
4191
|
}
|
|
4144
|
-
function describe(entry) {
|
|
4192
|
+
function describe(entry, endpoint) {
|
|
4145
4193
|
if (!entry) {
|
|
4146
4194
|
return { ours: false, carriesRole: false };
|
|
4147
4195
|
}
|
|
4148
4196
|
if ("url" in entry) {
|
|
4149
|
-
return { entry, ours:
|
|
4197
|
+
return { entry, ours: isOurEntry(entry, endpoint), carriesRole: false };
|
|
4150
4198
|
}
|
|
4151
4199
|
const pinnedVersion = pinnedBridgeVersion(entry);
|
|
4152
4200
|
return {
|
|
4153
4201
|
entry,
|
|
4154
|
-
ours:
|
|
4202
|
+
ours: isOurEntry(entry, endpoint),
|
|
4155
4203
|
carriesRole: entryCarriesRole(entry),
|
|
4156
4204
|
...pinnedVersion ? { pinnedVersion } : {}
|
|
4157
4205
|
};
|
|
4158
4206
|
}
|
|
4159
|
-
function
|
|
4207
|
+
function toEntry(raw) {
|
|
4160
4208
|
if (typeof raw !== "object" || raw === null) {
|
|
4161
4209
|
return void 0;
|
|
4162
4210
|
}
|
|
@@ -4170,6 +4218,9 @@ function toExisting(raw) {
|
|
|
4170
4218
|
return void 0;
|
|
4171
4219
|
}
|
|
4172
4220
|
function sameEntry(entry, desired) {
|
|
4221
|
+
if ("url" in desired) {
|
|
4222
|
+
return "url" in entry && normalizedServerUrl(entry.url) === desired.url;
|
|
4223
|
+
}
|
|
4173
4224
|
return "command" in entry && entry.command === desired.command && entry.args.length === desired.args.length && entry.args.every((arg, at) => arg === desired.args[at]);
|
|
4174
4225
|
}
|
|
4175
4226
|
async function writeKeepingMode(path, content) {
|
|
@@ -4215,7 +4266,15 @@ function isNodeError3(error, code) {
|
|
|
4215
4266
|
async function executeSetupCommand(options) {
|
|
4216
4267
|
const args = parseSetupArgs(options.argv);
|
|
4217
4268
|
const commands = [];
|
|
4218
|
-
const context = {
|
|
4269
|
+
const context = {
|
|
4270
|
+
runner: recordingRunner(options.runner, commands),
|
|
4271
|
+
home: options.home,
|
|
4272
|
+
endpoint: options.endpoint,
|
|
4273
|
+
// Codex 의 원격 add 는 그 자리에서 로그인한다 — 그 출력(로그인 링크)을 사용자에게 흘린다(stdout 결과는 깨끗하게).
|
|
4274
|
+
show: (text) => {
|
|
4275
|
+
options.io.stderr.write(text);
|
|
4276
|
+
}
|
|
4277
|
+
};
|
|
4219
4278
|
if (args.undo) {
|
|
4220
4279
|
const states = await inspectAgents(context);
|
|
4221
4280
|
const agents2 = [];
|
|
@@ -4238,10 +4297,15 @@ async function executeSetupCommand(options) {
|
|
|
4238
4297
|
signedIn = true;
|
|
4239
4298
|
}
|
|
4240
4299
|
const account = signedIn ? await readAccount(options.client) : void 0;
|
|
4241
|
-
const desired = desiredEntry({ env: options.env, endpoint: options.endpoint });
|
|
4242
4300
|
const agents = [];
|
|
4301
|
+
const remote = [];
|
|
4243
4302
|
for (const state of await inspectAgents(context)) {
|
|
4244
|
-
|
|
4303
|
+
const desired = desiredServerEntry({ client: state.client, env: options.env, endpoint: options.endpoint, local: args.local });
|
|
4304
|
+
const outcome = await connectAgent(state, desired, context, args.dryRun);
|
|
4305
|
+
agents.push(outcome);
|
|
4306
|
+
if ("url" in desired && (outcome.status === "connected" || outcome.status === "updated" || outcome.status === "failed")) {
|
|
4307
|
+
remote.push(state.client);
|
|
4308
|
+
}
|
|
4245
4309
|
}
|
|
4246
4310
|
const failed = agents.some((agent) => agent.status === "failed") || account?.problem !== void 0;
|
|
4247
4311
|
options.io.stdout.write(renderSuccess({
|
|
@@ -4251,7 +4315,7 @@ async function executeSetupCommand(options) {
|
|
|
4251
4315
|
account: accountView(account, signedIn, options.endpoint),
|
|
4252
4316
|
agents,
|
|
4253
4317
|
commands,
|
|
4254
|
-
next: nextSteps(account, agents, options.endpoint)
|
|
4318
|
+
next: nextSteps(account, agents, remote, options.endpoint)
|
|
4255
4319
|
}, { json: options.json }));
|
|
4256
4320
|
return failed ? 1 : 0;
|
|
4257
4321
|
}
|
|
@@ -4269,11 +4333,14 @@ function accountView(account, signedIn, endpoint) {
|
|
|
4269
4333
|
if (account?.problem) view.problem = `${account.problem.kind}: ${account.problem.message}`;
|
|
4270
4334
|
return view;
|
|
4271
4335
|
}
|
|
4272
|
-
function nextSteps(account, agents, endpoint) {
|
|
4336
|
+
function nextSteps(account, agents, remote, endpoint) {
|
|
4273
4337
|
const next = [];
|
|
4274
4338
|
if (agents.some((agent) => agent.status === "connected" || agent.status === "updated")) {
|
|
4275
4339
|
next.push("Start a new agent session to load the AiNecto tools. Every session sees the same tools; your AiNecto permissions decide what they may change.");
|
|
4276
4340
|
}
|
|
4341
|
+
if (remote.length > 0) {
|
|
4342
|
+
next.push(`Each agent signs in to AiNecto by itself the first time it connects: ${remote.map((client) => REMOTE_SIGN_IN[client]).join("; ")}.`);
|
|
4343
|
+
}
|
|
4277
4344
|
if (account?.jobTitle === null) {
|
|
4278
4345
|
next.push(`Set your AiNecto role (your job) at ${profileSettingsUrl(endpoint)} \u2014 AI uses it to pitch explanations; it does not change permissions.`);
|
|
4279
4346
|
}
|
|
@@ -4282,10 +4349,12 @@ function nextSteps(account, agents, endpoint) {
|
|
|
4282
4349
|
return next;
|
|
4283
4350
|
}
|
|
4284
4351
|
function parseSetupArgs(argv) {
|
|
4285
|
-
const args = { dryRun: false, undo: false };
|
|
4352
|
+
const args = { dryRun: false, undo: false, local: false };
|
|
4286
4353
|
for (const arg of argv) {
|
|
4287
4354
|
if (arg === "--dry-run") {
|
|
4288
4355
|
args.dryRun = true;
|
|
4356
|
+
} else if (arg === "--local") {
|
|
4357
|
+
args.local = true;
|
|
4289
4358
|
} else if (arg === "--undo") {
|
|
4290
4359
|
args.undo = true;
|
|
4291
4360
|
} else if (arg === "--json") {
|
|
@@ -4406,6 +4475,9 @@ function agentCheck(agent, cliVersion) {
|
|
|
4406
4475
|
if (olderThan(agent.pinnedVersion, cliVersion)) {
|
|
4407
4476
|
return { item, level: "warn", detail: `connected with @ainecto/mcp@${agent.pinnedVersion}; ${cliVersion} is available`, fix: "ainecto setup" };
|
|
4408
4477
|
}
|
|
4478
|
+
if ("url" in agent.entry) {
|
|
4479
|
+
return { item, level: "ok", detail: `connected to ${agent.entry.url}` };
|
|
4480
|
+
}
|
|
4409
4481
|
return { item, level: "ok", detail: agent.pinnedVersion ? `connected (@ainecto/mcp@${agent.pinnedVersion})` : "connected" };
|
|
4410
4482
|
}
|
|
4411
4483
|
function olderThan(a, b) {
|
|
@@ -4437,7 +4509,7 @@ async function collectStatus(input) {
|
|
|
4437
4509
|
endpoint: input.endpoint,
|
|
4438
4510
|
env: input.env,
|
|
4439
4511
|
token,
|
|
4440
|
-
agents: await inspectAgents({ runner: input.runner, home: input.home }),
|
|
4512
|
+
agents: await inspectAgents({ runner: input.runner, home: input.home, endpoint: input.endpoint }),
|
|
4441
4513
|
legacyEnv: [LEGACY_ROLE_ENV_VAR, "AI_ERD_ROLE"].filter((name) => input.envVars[name]?.trim()),
|
|
4442
4514
|
legacyCodexProfiles: await legacyCodexProfiles(input.envVars.CODEX_HOME ?? join5(input.home, ".codex"))
|
|
4443
4515
|
};
|
|
@@ -4445,9 +4517,9 @@ async function collectStatus(input) {
|
|
|
4445
4517
|
status.account = await readAccount(input.client);
|
|
4446
4518
|
}
|
|
4447
4519
|
if (input.hereRunner && input.cwd !== input.home) {
|
|
4448
|
-
status.claudeHere = await inspectClaude({ runner: input.hereRunner, home: input.home });
|
|
4520
|
+
status.claudeHere = await inspectClaude({ runner: input.hereRunner, home: input.home, endpoint: input.endpoint });
|
|
4449
4521
|
}
|
|
4450
|
-
status.repository = await repositoryStatus(input.cwd);
|
|
4522
|
+
status.repository = await repositoryStatus(input.cwd, input.endpoint);
|
|
4451
4523
|
const globalVersion = await globalCliVersion(input.runner);
|
|
4452
4524
|
if (globalVersion) {
|
|
4453
4525
|
status.globalCliVersion = globalVersion;
|
|
@@ -4474,7 +4546,7 @@ async function tokenStatus(input) {
|
|
|
4474
4546
|
};
|
|
4475
4547
|
}
|
|
4476
4548
|
}
|
|
4477
|
-
async function repositoryStatus(cwd) {
|
|
4549
|
+
async function repositoryStatus(cwd, endpoint) {
|
|
4478
4550
|
const gitRoot = await findGitRoot(cwd);
|
|
4479
4551
|
const root = gitRoot ?? cwd;
|
|
4480
4552
|
const status = { root, git: gitRoot !== void 0, harnessDoc: false, configHasProject: false, mcpFiles: [] };
|
|
@@ -4493,7 +4565,7 @@ async function repositoryStatus(cwd) {
|
|
|
4493
4565
|
const pinnedVersion = pinnedBridgeVersion(entry);
|
|
4494
4566
|
status.mcpFiles.push({
|
|
4495
4567
|
path: target.path,
|
|
4496
|
-
ours:
|
|
4568
|
+
ours: isOurEntry(entry, endpoint),
|
|
4497
4569
|
carriesRole: entryCarriesRole(entry),
|
|
4498
4570
|
...pinnedVersion ? { pinnedVersion } : {}
|
|
4499
4571
|
});
|
|
@@ -4574,6 +4646,7 @@ function statusView(status) {
|
|
|
4574
4646
|
agents: status.agents.map((agent) => ({
|
|
4575
4647
|
client: AGENT_CLIENT_LABELS[agent.client],
|
|
4576
4648
|
state: !agent.installed ? "not installed" : agent.problem ? `unknown (${agent.problem})` : !agent.entry ? "not connected" : agent.ours ? `connected${agent.scope ? ` (${agent.scope})` : ""}` : `someone else's entry${agent.scope ? ` (${agent.scope})` : ""}`,
|
|
4649
|
+
...agent.entry && "url" in agent.entry ? { url: agent.entry.url } : {},
|
|
4577
4650
|
...agent.pinnedVersion ? { bridge: `@ainecto/mcp@${agent.pinnedVersion}` } : {},
|
|
4578
4651
|
...agent.carriesRole ? { legacyRole: true } : {}
|
|
4579
4652
|
})),
|
|
@@ -4888,13 +4961,14 @@ function helpText() {
|
|
|
4888
4961
|
" ainecto mcp [--env prod|dev] [--endpoint URL]",
|
|
4889
4962
|
"",
|
|
4890
4963
|
"Setup (once per machine):",
|
|
4891
|
-
" ainecto setup [--env prod|dev] [--endpoint URL] [--dry-run] [--json] sign in and connect Claude Code, Cursor, and Codex",
|
|
4964
|
+
" ainecto setup [--env prod|dev] [--endpoint URL] [--dry-run] [--json] sign in and connect Claude Code, Cursor, and Codex to the server address",
|
|
4965
|
+
" ainecto setup --local connect through the local relay (npx -y @ainecto/mcp) instead",
|
|
4892
4966
|
" ainecto setup --undo remove those connections (sign-in stays)",
|
|
4893
4967
|
" ainecto status [--json] who is signed in, and what is connected (read-only)",
|
|
4894
4968
|
" ainecto doctor [--json] status + what is missing and the command that fixes it",
|
|
4895
4969
|
"",
|
|
4896
4970
|
"Harness:",
|
|
4897
|
-
" ainecto init [--mcp] [--dry-run] [--json] AiNecto rules for this repository (--mcp also writes .mcp.json and .cursor/mcp.json)",
|
|
4971
|
+
" ainecto init [--mcp] [--local] [--dry-run] [--json] AiNecto rules for this repository (--mcp also writes .mcp.json and .cursor/mcp.json with the server address; --local writes the local relay instead)",
|
|
4898
4972
|
" ainecto init --undo",
|
|
4899
4973
|
""
|
|
4900
4974
|
].join("\n");
|