kloudy-mcp 0.1.0-beta.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 +35 -0
- package/dist/api-x/client.d.ts +96 -0
- package/dist/api-x/client.js +549 -0
- package/dist/api-x/client.js.map +1 -0
- package/dist/api-x/projections.d.ts +42 -0
- package/dist/api-x/projections.js +790 -0
- package/dist/api-x/projections.js.map +1 -0
- package/dist/api-x/types.d.ts +432 -0
- package/dist/api-x/types.js +2 -0
- package/dist/api-x/types.js.map +1 -0
- package/dist/browser-login.d.ts +3 -0
- package/dist/browser-login.js +135 -0
- package/dist/browser-login.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +66 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +43 -0
- package/dist/config.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.js +10 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/state-store.d.ts +39 -0
- package/dist/state-store.js +58 -0
- package/dist/state-store.js.map +1 -0
- package/dist/tools/account.d.ts +3 -0
- package/dist/tools/account.js +13 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/archive.d.ts +3 -0
- package/dist/tools/archive.js +27 -0
- package/dist/tools/archive.js.map +1 -0
- package/dist/tools/blog.d.ts +3 -0
- package/dist/tools/blog.js +34 -0
- package/dist/tools/blog.js.map +1 -0
- package/dist/tools/catalog.d.ts +133 -0
- package/dist/tools/catalog.js +136 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/characters.d.ts +5 -0
- package/dist/tools/characters.js +20 -0
- package/dist/tools/characters.js.map +1 -0
- package/dist/tools/community.d.ts +3 -0
- package/dist/tools/community.js +25 -0
- package/dist/tools/community.js.map +1 -0
- package/dist/tools/documents.d.ts +3 -0
- package/dist/tools/documents.js +30 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/links.d.ts +3 -0
- package/dist/tools/links.js +15 -0
- package/dist/tools/links.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.js +21 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/shared.d.ts +23 -0
- package/dist/tools/shared.js +64 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/taxonomy.d.ts +3 -0
- package/dist/tools/taxonomy.js +26 -0
- package/dist/tools/taxonomy.js.map +1 -0
- package/dist/tools/wiki.d.ts +3 -0
- package/dist/tools/wiki.js +47 -0
- package/dist/tools/wiki.js.map +1 -0
- package/package.json +22 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const publicCharacters = ['none', 'guest', 'user', 'agent', 'admin'];
|
|
2
|
+
const agentCharacters = ['agent'];
|
|
3
|
+
const readPolicy = (title, description, apiOperation, maxResultBytes = 64 * 1024) => ({
|
|
4
|
+
title,
|
|
5
|
+
description,
|
|
6
|
+
apiOperation,
|
|
7
|
+
allowedCharacterTypes: publicCharacters,
|
|
8
|
+
minimumPermission: 'visitor',
|
|
9
|
+
risk: 'read',
|
|
10
|
+
readOnly: true,
|
|
11
|
+
idempotent: true,
|
|
12
|
+
timeoutMs: 10_000,
|
|
13
|
+
maxResultBytes,
|
|
14
|
+
});
|
|
15
|
+
const contributionPolicy = (title, description, apiOperation, risk = 'draft-write') => ({
|
|
16
|
+
title,
|
|
17
|
+
description,
|
|
18
|
+
apiOperation,
|
|
19
|
+
allowedCharacterTypes: agentCharacters,
|
|
20
|
+
minimumPermission: 'user',
|
|
21
|
+
risk,
|
|
22
|
+
readOnly: false,
|
|
23
|
+
idempotent: false,
|
|
24
|
+
timeoutMs: 10_000,
|
|
25
|
+
maxResultBytes: 512 * 1024,
|
|
26
|
+
});
|
|
27
|
+
const agentReadPolicy = (title, description, apiOperation, maxResultBytes = 128 * 1024) => ({
|
|
28
|
+
...readPolicy(title, description, apiOperation, maxResultBytes),
|
|
29
|
+
allowedCharacterTypes: agentCharacters,
|
|
30
|
+
minimumPermission: 'user',
|
|
31
|
+
});
|
|
32
|
+
const communityWritePolicy = (title, description, apiOperation, risk) => ({
|
|
33
|
+
title,
|
|
34
|
+
description,
|
|
35
|
+
apiOperation,
|
|
36
|
+
allowedCharacterTypes: agentCharacters,
|
|
37
|
+
minimumPermission: 'user',
|
|
38
|
+
risk,
|
|
39
|
+
readOnly: false,
|
|
40
|
+
idempotent: false,
|
|
41
|
+
timeoutMs: 10_000,
|
|
42
|
+
maxResultBytes: 16 * 1024,
|
|
43
|
+
});
|
|
44
|
+
export const TOOL_CATALOG = {
|
|
45
|
+
kloudy_get_capabilities: readPolicy('Get Kloudy Capabilities', 'Get effective Kloudy backend modules, feature flags, permission capabilities, and the current actor.', 'GET /agent/capabilities', 32 * 1024),
|
|
46
|
+
account_get_context: readPolicy('Get Kloudy Account Context', 'Get the current authentication level and selected Character without returning credentials or private profile data.', 'GET /account/', 16 * 1024),
|
|
47
|
+
account_list_characters: agentReadPolicy('List Owned Kloudy Characters', 'List minimal identities for Characters owned by the signed-in user without returning email, SN, or profile settings.', 'GET /account/characters', 32 * 1024),
|
|
48
|
+
account_get_asset_overview: agentReadPolicy('Get Kloudy Asset Overview', 'Get the signed-in Agent Character asset counts and points balance without internal asset identifiers.', 'GET /account/assets', 16 * 1024),
|
|
49
|
+
account_list_assets: agentReadPolicy('List Owned Kloudy Assets', 'List assets owned by the signed-in Agent Character with fixed backend pagination and a reduced projection.', 'GET /account/assets/assets', 128 * 1024),
|
|
50
|
+
characters_search: readPolicy('Search Public Kloudy Characters', 'Search Characters that opted into public listing by exact ID or partial name with bounded pagination.', 'GET /characters', 128 * 1024),
|
|
51
|
+
characters_get: readPolicy('Get Public Kloudy Character', 'Read one Character profile through its public visibility and module settings.', 'GET /characters/:characterId', 64 * 1024),
|
|
52
|
+
characters_get_tags: readPolicy('Get Public Kloudy Character Tags', 'Read tags for a Character whose public basic profile module is visible.', 'GET /characters/:characterId/tags', 128 * 1024),
|
|
53
|
+
characters_get_metadata: readPolicy('Get Public Kloudy Character Metadata', 'Read structured metadata for a Character whose public basic profile module is visible.', 'GET /characters/:characterId/metadata', 128 * 1024),
|
|
54
|
+
tags_list_attributes: readPolicy('List Kloudy Tag Attributes', 'List public Tag attribute definitions with an optional category filter.', 'GET /tags/attributes', 128 * 1024),
|
|
55
|
+
tags_get_attribute: readPolicy('Get Kloudy Tag Attribute', 'Read one public Tag attribute definition by its external ID.', 'GET /tags/attributes/:attributeId', 32 * 1024),
|
|
56
|
+
tags_list: readPolicy('List Kloudy Tags', 'List public Tag definitions, optionally restricted to one attribute.', 'GET /tags', 256 * 1024),
|
|
57
|
+
tags_get: readPolicy('Get Kloudy Tag', 'Read one public Tag definition by attribute ID and Tag ID.', 'GET /tags/:attributeId/:tagId', 32 * 1024),
|
|
58
|
+
metadata_list_fields: readPolicy('List Kloudy Metadata Fields', 'List public Metadata field definitions with an optional category filter.', 'GET /metadata/fields', 128 * 1024),
|
|
59
|
+
relations_list_roles: readPolicy('List Kloudy Relation Roles', 'List the public relation role identifiers and their categories.', 'GET /relations/roles', 32 * 1024),
|
|
60
|
+
links_list: readPolicy('List Public Kloudy Links', 'List public Kloudy links, optionally restricted to one fixed class ID.', 'GET /links or /links/class/:classId', 128 * 1024),
|
|
61
|
+
documents_list_spaces: readPolicy('List Kloudy Document Spaces', 'List the public document space and, when signed in, the current Character own personal space.', 'GET /documents/spaces', 32 * 1024),
|
|
62
|
+
documents_get_space: readPolicy('Get Kloudy Document Space', 'Read metadata for the public document space or the current Character own personal space.', 'GET /documents/spaces/:spaceId', 16 * 1024),
|
|
63
|
+
documents_list_directory: readPolicy('List Kloudy Document Directory', 'List Markdown files in an accessible public or current-Character document module directory.', 'GET /documents/spaces/:spaceId/:variant/:moduleId/directory', 128 * 1024),
|
|
64
|
+
documents_read: readPolicy('Read Kloudy Document', 'Read one Markdown document from an accessible public or current-Character document space.', 'GET /documents/spaces/:spaceId/:variant/:moduleId/file/:documentPath', 512 * 1024),
|
|
65
|
+
community_list_posts: readPolicy('List Kloudy Community Posts', 'List public Community post records with bounded pagination.', 'GET /community/posts', 128 * 1024),
|
|
66
|
+
community_get_post: readPolicy('Get Kloudy Community Post', 'Read one public Community post record by its stable business ID.', 'GET /community/posts/:postId', 32 * 1024),
|
|
67
|
+
community_list_comments: readPolicy('List Kloudy Community Comments', 'List public comments for one Community post with bounded top-level pagination.', 'GET /community/comments', 512 * 1024),
|
|
68
|
+
community_list_my_comments: agentReadPolicy('List My Kloudy Community Comments', 'List comments created by the signed-in Agent Character with bounded pagination.', 'GET /community/my-comments', 512 * 1024),
|
|
69
|
+
community_get_message_count: agentReadPolicy('Get Kloudy Community Message Count', 'Get the Community message count visible to the signed-in Agent Character.', 'GET /community/messages/count', 16 * 1024),
|
|
70
|
+
community_list_messages: agentReadPolicy('List Kloudy Community Messages', 'List Community messages visible to the signed-in Agent Character with bounded pagination.', 'GET /community/messages', 256 * 1024),
|
|
71
|
+
community_create_comment: communityWritePolicy('Create Kloudy Community Comment', 'Publish a comment or reply as the signed-in Agent Character. A new post business ID may initialize its Community post record. This changes public content immediately.', 'POST /community/comments', 'public-write'),
|
|
72
|
+
community_delete_comment: communityWritePolicy('Delete Own Kloudy Community Comment', 'Delete one comment owned by the signed-in Agent Character. This changes public Community content immediately.', 'DELETE /community/comments', 'public-delete'),
|
|
73
|
+
movies_search: readPolicy('Search Kloudy Movies', 'Search public Kloudy Archive movies by title and return a paginated, reduced result.', 'GET /archive/movies'),
|
|
74
|
+
archive_list_carousel: readPolicy('List Kloudy Archive Carousel', 'List active public Archive carousel entries with display text, image, theme, and link.', 'GET /archive/carousel', 64 * 1024),
|
|
75
|
+
movies_get: readPolicy('Get Kloudy Movie', 'Get one public Kloudy Archive movie by its external movie ID.', 'GET /archive/movies/:movieId'),
|
|
76
|
+
games_search: readPolicy('Search Kloudy Games', 'Search public Kloudy Archive games by title or ID and return a paginated, reduced result.', 'GET /archive/games'),
|
|
77
|
+
games_get: readPolicy('Get Kloudy Game', 'Get one public Kloudy Archive game by its external game ID.', 'GET /archive/games/:gameId'),
|
|
78
|
+
archive_search: readPolicy('Search Kloudy Archive', 'Search one supported public Archive resource type with bounded pagination and a reduced common result.', 'GET /archive/{resourceType}'),
|
|
79
|
+
archive_get: readPolicy('Get Kloudy Archive Item', 'Read one supported public Archive item by resource type and external ID.', 'GET /archive/{resourceType}/:itemId', 128 * 1024),
|
|
80
|
+
wiki_search: readPolicy('Search Kloudy Wiki', 'Search visible public Wiki entries by stable ID or title.', 'GET /wiki/search'),
|
|
81
|
+
wiki_get: readPolicy('Get Kloudy Wiki Entry', 'Read one visible public Wiki entry and its complete Markdown body.', 'GET /wiki/entries/:entryId', 512 * 1024),
|
|
82
|
+
wiki_contribution_create_draft: contributionPolicy('Create Wiki Contribution Draft', 'Create an editable contribution draft containing complete Wiki metadata and Markdown. This does not change public content.', 'POST /metadata-drafts'),
|
|
83
|
+
wiki_contribution_update_draft: contributionPolicy('Update Wiki Contribution Draft', 'Replace the complete metadata and Markdown of the signed-in Agent Character own editable draft.', 'PUT /metadata-drafts/active'),
|
|
84
|
+
wiki_contribution_delete_draft: contributionPolicy('Delete Wiki Contribution Draft', 'Delete the signed-in Agent Character own editable draft. This cannot delete public Wiki content.', 'DELETE /metadata-drafts/active', 'draft-delete'),
|
|
85
|
+
wiki_contribution_submit: contributionPolicy('Submit Wiki Contribution', 'Freeze the complete draft and submit it for administrator review. Submission is not blocked by parent-tree issues; the response includes a projected validation of all submitted Wiki drafts owned by the signed-in Agent Character.', 'POST /metadata-drafts/active/submit'),
|
|
86
|
+
wiki_contribution_withdraw: contributionPolicy('Withdraw Wiki Contribution', 'Withdraw a submitted own draft back to editable state before review finishes.', 'POST /metadata-drafts/active/withdraw'),
|
|
87
|
+
wiki_contribution_reopen: contributionPolicy('Reopen Wiki Contribution', 'Return the signed-in Agent Character rejected, conflicted, or failed draft to editing.', 'POST /metadata-drafts/active/reopen'),
|
|
88
|
+
wiki_contribution_status: {
|
|
89
|
+
...readPolicy('Get Wiki Contribution Status', 'Read the signed-in Agent Character active contribution status, snapshots, review comment, and projected validation of all own submitted Wiki drafts.', 'GET /metadata-drafts/active', 512 * 1024),
|
|
90
|
+
allowedCharacterTypes: agentCharacters,
|
|
91
|
+
minimumPermission: 'user',
|
|
92
|
+
},
|
|
93
|
+
wiki_contribution_list: {
|
|
94
|
+
...readPolicy('List Wiki Contributions', 'List contribution drafts owned by the signed-in Agent Character with bounded pagination and projected validation of all own submitted Wiki drafts.', 'GET /metadata-drafts/mine', 256 * 1024),
|
|
95
|
+
allowedCharacterTypes: agentCharacters,
|
|
96
|
+
minimumPermission: 'user',
|
|
97
|
+
},
|
|
98
|
+
wiki_contribution_history_get: {
|
|
99
|
+
...readPolicy('Get Wiki Contribution History', 'Read one completed contribution history snapshot owned by the signed-in Agent Character.', 'GET /metadata-drafts/:draftSn', 512 * 1024),
|
|
100
|
+
allowedCharacterTypes: agentCharacters,
|
|
101
|
+
minimumPermission: 'user',
|
|
102
|
+
},
|
|
103
|
+
blog_list_headlines: readPolicy('List Kloudy Blog Headlines', 'List active public Blog headline cards with a reduced display projection.', 'GET /blog/headlines', 128 * 1024),
|
|
104
|
+
blog_list_articles: readPolicy('List Kloudy Blog Articles', 'List public published Blog articles with bounded pagination and optional category or author filters.', 'GET /blog/articles', 128 * 1024),
|
|
105
|
+
blog_read_article: readPolicy('Read Kloudy Blog Article', 'Read one public published Blog article, including its available Markdown body.', 'GET /blog/articles/:articleId', 512 * 1024),
|
|
106
|
+
blog_list_owned_articles: agentReadPolicy('List Owned Kloudy Blog Articles', 'List Blog articles owned by the signed-in Agent Character, including unpublished draft records.', 'GET /blog/owned-articles', 128 * 1024),
|
|
107
|
+
blog_draft_create: contributionPolicy('Create Kloudy Blog Draft', 'Reserve a globally unique Blog article ID and create an unpublished draft owned by the signed-in Agent Character.', 'POST /documents/blog-drafts/create'),
|
|
108
|
+
blog_draft_open: agentReadPolicy('Open Kloudy Blog Draft', 'Read an owned Blog draft and its available formal base without creating files, directories, or publishing content.', 'POST /documents/blog-drafts/open', 512 * 1024),
|
|
109
|
+
blog_draft_update_content: {
|
|
110
|
+
...contributionPolicy('Update Kloudy Blog Draft Content', 'Replace the complete Markdown body of an owned Blog draft. This does not publish the draft.', 'PUT /documents/blog-drafts/content'),
|
|
111
|
+
idempotent: true,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
export function toolConfig(name, inputSchema) {
|
|
115
|
+
const policy = TOOL_CATALOG[name];
|
|
116
|
+
return {
|
|
117
|
+
title: policy.title,
|
|
118
|
+
description: policy.description,
|
|
119
|
+
inputSchema,
|
|
120
|
+
annotations: {
|
|
121
|
+
readOnlyHint: policy.readOnly,
|
|
122
|
+
destructiveHint: policy.risk === 'draft-delete' || policy.risk === 'public-delete',
|
|
123
|
+
idempotentHint: policy.idempotent,
|
|
124
|
+
openWorldHint: true,
|
|
125
|
+
},
|
|
126
|
+
_meta: {
|
|
127
|
+
'kloudy/apiOperation': policy.apiOperation,
|
|
128
|
+
'kloudy/allowedCharacterTypes': [...policy.allowedCharacterTypes],
|
|
129
|
+
'kloudy/minimumPermission': policy.minimumPermission,
|
|
130
|
+
'kloudy/risk': policy.risk,
|
|
131
|
+
'kloudy/timeoutMs': policy.timeoutMs,
|
|
132
|
+
'kloudy/maxResultBytes': policy.maxResultBytes,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../src/tools/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { KloudyApi } from '../api-x/types.js';
|
|
4
|
+
export declare const characterId: z.ZodString;
|
|
5
|
+
export declare function registerCharacterTools(server: McpServer, api: KloudyApi): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { executeTool, paginationSchema } from './shared.js';
|
|
4
|
+
export const characterId = z
|
|
5
|
+
.string()
|
|
6
|
+
.min(1)
|
|
7
|
+
.max(128)
|
|
8
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/)
|
|
9
|
+
.describe('Public Character external ID');
|
|
10
|
+
export function registerCharacterTools(server, api) {
|
|
11
|
+
server.registerTool('characters_search', toolConfig('characters_search', {
|
|
12
|
+
characterId: characterId.optional().describe('Optional exact Character ID filter'),
|
|
13
|
+
name: z.string().trim().min(1).max(100).optional().describe('Optional partial public name filter'),
|
|
14
|
+
...paginationSchema,
|
|
15
|
+
}), async (input) => executeTool('characters_search', (runId) => api.searchCharacters(input, runId)));
|
|
16
|
+
server.registerTool('characters_get', toolConfig('characters_get', { characterId }), async ({ characterId: id }) => executeTool('characters_get', (runId) => api.getCharacter(id, runId)));
|
|
17
|
+
server.registerTool('characters_get_tags', toolConfig('characters_get_tags', { characterId }), async ({ characterId: id }) => executeTool('characters_get_tags', (runId) => api.getCharacterTags(id, runId)));
|
|
18
|
+
server.registerTool('characters_get_metadata', toolConfig('characters_get_metadata', { characterId }), async ({ characterId: id }) => executeTool('characters_get_metadata', (runId) => api.getCharacterMetadata(id, runId)));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=characters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"characters.js","sourceRoot":"","sources":["../../../../src/tools/characters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,8BAA8B,CAAC;KACrC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAE5C,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,GAAc;IACtE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB,UAAU,CAAC,mBAAmB,EAAE;QAC9B,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAClF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAClG,GAAG,gBAAgB;KACpB,CAAC,EACF,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC,CAC1G,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CACjH,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB,UAAU,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,CAAC,EAClD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAC9G,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB,UAAU,CAAC,yBAAyB,EAAE,EAAE,WAAW,EAAE,CAAC,EACtD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAC5B,WAAW,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { businessPathId, executeTool, paginationSchema } from './shared.js';
|
|
4
|
+
export function registerCommunityTools(server, api) {
|
|
5
|
+
server.registerTool('community_list_posts', toolConfig('community_list_posts', paginationSchema), async (input) => executeTool('community_list_posts', (runId) => api.listCommunityPosts(input, runId)));
|
|
6
|
+
server.registerTool('community_get_post', toolConfig('community_get_post', { postId: businessPathId }), async ({ postId }) => executeTool('community_get_post', (runId) => api.getCommunityPost(postId, runId)));
|
|
7
|
+
server.registerTool('community_list_comments', toolConfig('community_list_comments', { postId: businessPathId, ...paginationSchema }), async ({ postId, ...input }) => executeTool('community_list_comments', (runId) => api.listCommunityComments(postId, input, runId)));
|
|
8
|
+
server.registerTool('community_list_my_comments', toolConfig('community_list_my_comments', paginationSchema), async (input) => executeTool('community_list_my_comments', (runId) => api.listOwnCommunityComments(input, runId)));
|
|
9
|
+
server.registerTool('community_get_message_count', toolConfig('community_get_message_count', {}), async () => executeTool('community_get_message_count', (runId) => api.getCommunityMessageCount(runId)));
|
|
10
|
+
server.registerTool('community_list_messages', toolConfig('community_list_messages', paginationSchema), async (input) => executeTool('community_list_messages', (runId) => api.listCommunityMessages(input, runId)));
|
|
11
|
+
const commentSn = z
|
|
12
|
+
.string()
|
|
13
|
+
.regex(/^[A-Za-z0-9]{9}$/)
|
|
14
|
+
.describe('Nine-character external Community comment SN');
|
|
15
|
+
const commentTarget = z.discriminatedUnion('type', [
|
|
16
|
+
z.object({ type: z.literal('post'), postId: businessPathId }),
|
|
17
|
+
z.object({ type: z.literal('reply'), parentCommentSn: commentSn }),
|
|
18
|
+
]);
|
|
19
|
+
server.registerTool('community_create_comment', toolConfig('community_create_comment', {
|
|
20
|
+
target: commentTarget.describe('Publish to a post or reply to an existing comment'),
|
|
21
|
+
content: z.string().trim().min(1).max(5000).describe('Public comment Markdown content'),
|
|
22
|
+
}), async (input) => executeTool('community_create_comment', (runId) => api.createCommunityComment(input, runId)));
|
|
23
|
+
server.registerTool('community_delete_comment', toolConfig('community_delete_comment', { commentSn }), async ({ commentSn: value }) => executeTool('community_delete_comment', (runId) => api.deleteCommunityComment(value, runId)));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=community.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../../../src/tools/community.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { executeTool } from './shared.js';
|
|
4
|
+
const spaceId = z
|
|
5
|
+
.string()
|
|
6
|
+
.min(1)
|
|
7
|
+
.max(128)
|
|
8
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/)
|
|
9
|
+
.describe('Public or current-Character document space ID');
|
|
10
|
+
const variant = z.enum(['formal', 'draft']);
|
|
11
|
+
const moduleId = z.enum(['wiki', 'blog']);
|
|
12
|
+
const logicalPath = z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.max(512)
|
|
16
|
+
.refine((value) => value.split('/').every((segment) => /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(segment)), 'Document paths must contain only safe non-empty business path segments');
|
|
17
|
+
const documentPath = logicalPath
|
|
18
|
+
.refine((value) => value.toLowerCase().endsWith('.md'), 'Document path must end with .md')
|
|
19
|
+
.describe('Slash-separated logical Markdown path inside the selected business module');
|
|
20
|
+
const directoryPath = logicalPath
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Optional slash-separated logical directory path; omit it to list the module root');
|
|
23
|
+
const locationSchema = { spaceId, variant, moduleId };
|
|
24
|
+
export function registerDocumentTools(server, api) {
|
|
25
|
+
server.registerTool('documents_list_spaces', toolConfig('documents_list_spaces', {}), async () => executeTool('documents_list_spaces', (runId) => api.listDocumentSpaces(runId)));
|
|
26
|
+
server.registerTool('documents_get_space', toolConfig('documents_get_space', { spaceId }), async ({ spaceId: id }) => executeTool('documents_get_space', (runId) => api.getDocumentSpace(id, runId)));
|
|
27
|
+
server.registerTool('documents_list_directory', toolConfig('documents_list_directory', { ...locationSchema, directoryPath }), async (input) => executeTool('documents_list_directory', (runId) => api.listDocumentDirectory(input, runId)));
|
|
28
|
+
server.registerTool('documents_read', toolConfig('documents_read', { ...locationSchema, documentPath }), async (input) => executeTool('documents_read', (runId) => api.readDocument(input, runId)));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../../src/tools/documents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC;KACd,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,8BAA8B,CAAC;KACrC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC5F,wEAAwE,CACzE,CAAC;AACJ,MAAM,YAAY,GAAG,WAAW;KAC7B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iCAAiC,CAAC;KACzF,QAAQ,CAAC,2EAA2E,CAAC,CAAC;AACzF,MAAM,aAAa,GAAG,WAAW;KAC9B,QAAQ,EAAE;KACV,QAAQ,CAAC,kFAAkF,CAAC,CAAC;AAEhG,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,GAAc;IACrE,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE,UAAU,CAAC,uBAAuB,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAC/F,WAAW,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAC/E,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CACnH,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAC/E,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B,UAAU,CAAC,0BAA0B,EAAE,EAAE,GAAG,cAAc,EAAE,aAAa,EAAE,CAAC,EAC5E,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CAChD,GAAG,CAAC,qBAAqB,CAAC,KAA+B,EAAE,KAAK,CAAC,CAClE,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB,UAAU,CAAC,gBAAgB,EAAE,EAAE,GAAG,cAAc,EAAE,YAAY,EAAE,CAAC,EACjE,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,KAA0B,EAAE,KAAK,CAAC,CAAC,CAChG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { executeTool } from './shared.js';
|
|
4
|
+
const linkClassId = z
|
|
5
|
+
.string()
|
|
6
|
+
.trim()
|
|
7
|
+
.min(1)
|
|
8
|
+
.max(128)
|
|
9
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/)
|
|
10
|
+
.optional()
|
|
11
|
+
.describe('Optional public Link class ID');
|
|
12
|
+
export function registerLinkTools(server, api) {
|
|
13
|
+
server.registerTool('links_list', toolConfig('links_list', { classId: linkClassId }), async ({ classId }) => executeTool('links_list', (runId) => api.listLinks(classId, runId)));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../../../src/tools/links.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,8BAA8B,CAAC;KACrC,QAAQ,EAAE;KACV,QAAQ,CAAC,+BAA+B,CAAC,CAAC;AAE7C,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,GAAc;IACjE,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1G,WAAW,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { registerAccountTools } from './account.js';
|
|
2
|
+
import { registerArchiveTools } from './archive.js';
|
|
3
|
+
import { registerBlogTools } from './blog.js';
|
|
4
|
+
import { registerCharacterTools } from './characters.js';
|
|
5
|
+
import { registerCommunityTools } from './community.js';
|
|
6
|
+
import { registerDocumentTools } from './documents.js';
|
|
7
|
+
import { registerLinkTools } from './links.js';
|
|
8
|
+
import { registerTaxonomyTools } from './taxonomy.js';
|
|
9
|
+
import { registerWikiTools } from './wiki.js';
|
|
10
|
+
export function registerKloudyTools(server, api) {
|
|
11
|
+
registerAccountTools(server, api);
|
|
12
|
+
registerCharacterTools(server, api);
|
|
13
|
+
registerTaxonomyTools(server, api);
|
|
14
|
+
registerLinkTools(server, api);
|
|
15
|
+
registerArchiveTools(server, api);
|
|
16
|
+
registerDocumentTools(server, api);
|
|
17
|
+
registerCommunityTools(server, api);
|
|
18
|
+
registerWikiTools(server, api);
|
|
19
|
+
registerBlogTools(server, api);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/tools/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,GAAc;IACnE,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type ToolName } from './catalog.js';
|
|
3
|
+
export declare const paginationSchema: {
|
|
4
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
pageSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
};
|
|
7
|
+
export declare const archiveId: z.ZodString;
|
|
8
|
+
export declare const wikiResourceId: z.ZodString;
|
|
9
|
+
export declare const businessPathId: z.ZodString;
|
|
10
|
+
export declare function executeTool(name: ToolName, operation: (runId: string) => Promise<unknown>): Promise<{
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
}[];
|
|
15
|
+
structuredContent: Record<string, unknown>;
|
|
16
|
+
} | {
|
|
17
|
+
isError: boolean;
|
|
18
|
+
content: {
|
|
19
|
+
type: "text";
|
|
20
|
+
text: string;
|
|
21
|
+
}[];
|
|
22
|
+
structuredContent: Record<string, unknown>;
|
|
23
|
+
}>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ApiXError } from '../api-x/client.js';
|
|
4
|
+
import { TOOL_CATALOG } from './catalog.js';
|
|
5
|
+
export const paginationSchema = {
|
|
6
|
+
page: z.number().int().min(1).optional().default(1).describe('Page number, starting at 1'),
|
|
7
|
+
pageSize: z.number().int().min(1).max(20).optional().default(10).describe('Items per page, from 1 to 20'),
|
|
8
|
+
};
|
|
9
|
+
export const archiveId = z
|
|
10
|
+
.string()
|
|
11
|
+
.min(1)
|
|
12
|
+
.max(100)
|
|
13
|
+
.regex(/^[A-Za-z0-9._-]+$/)
|
|
14
|
+
.describe('Kloudy archive external ID');
|
|
15
|
+
export const wikiResourceId = z
|
|
16
|
+
.string()
|
|
17
|
+
.min(1)
|
|
18
|
+
.max(64)
|
|
19
|
+
.regex(/^[A-Za-z0-9_-]+(?:\/[A-Za-z0-9_-]+)*$/)
|
|
20
|
+
.describe('Stable Wiki document ID, which may contain slash-separated segments');
|
|
21
|
+
export const businessPathId = z
|
|
22
|
+
.string()
|
|
23
|
+
.min(1)
|
|
24
|
+
.max(256)
|
|
25
|
+
.regex(/^[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/)
|
|
26
|
+
.describe('Stable slash-separated business ID; this is not a filesystem path');
|
|
27
|
+
export async function executeTool(name, operation) {
|
|
28
|
+
const traceId = randomUUID();
|
|
29
|
+
try {
|
|
30
|
+
const value = { data: await operation(traceId), traceId };
|
|
31
|
+
if (Buffer.byteLength(JSON.stringify(value), 'utf8') > TOOL_CATALOG[name].maxResultBytes) {
|
|
32
|
+
return {
|
|
33
|
+
...toolResult({
|
|
34
|
+
error: 'tool_result_too_large',
|
|
35
|
+
code: 'result_too_large',
|
|
36
|
+
message: 'Kloudy tool result exceeded its safe response limit; narrow the query or request a smaller page.',
|
|
37
|
+
retryable: false,
|
|
38
|
+
traceId,
|
|
39
|
+
}),
|
|
40
|
+
isError: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return toolResult(value);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const safeError = error instanceof ApiXError
|
|
47
|
+
? { error: 'api_x_error', code: error.code, message: error.message, retryable: error.retryable, traceId }
|
|
48
|
+
: {
|
|
49
|
+
error: 'tool_execution_failed',
|
|
50
|
+
code: 'unexpected_response',
|
|
51
|
+
message: 'Kloudy tool could not process the API response',
|
|
52
|
+
retryable: false,
|
|
53
|
+
traceId,
|
|
54
|
+
};
|
|
55
|
+
return { ...toolResult(safeError), isError: true };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function toolResult(value) {
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
61
|
+
structuredContent: value,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/tools/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { executeTool } from './shared.js';
|
|
4
|
+
const taxonomyId = z
|
|
5
|
+
.string()
|
|
6
|
+
.min(1)
|
|
7
|
+
.max(128)
|
|
8
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
|
|
9
|
+
.describe('External taxonomy ID');
|
|
10
|
+
const category = z
|
|
11
|
+
.string()
|
|
12
|
+
.trim()
|
|
13
|
+
.min(1)
|
|
14
|
+
.max(64)
|
|
15
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Optional taxonomy category');
|
|
18
|
+
export function registerTaxonomyTools(server, api) {
|
|
19
|
+
server.registerTool('tags_list_attributes', toolConfig('tags_list_attributes', { category }), async ({ category: value }) => executeTool('tags_list_attributes', (runId) => api.listTagAttributes(value, runId)));
|
|
20
|
+
server.registerTool('tags_get_attribute', toolConfig('tags_get_attribute', { attributeId: taxonomyId }), async ({ attributeId }) => executeTool('tags_get_attribute', (runId) => api.getTagAttribute(attributeId, runId)));
|
|
21
|
+
server.registerTool('tags_list', toolConfig('tags_list', { attributeId: taxonomyId.optional() }), async ({ attributeId }) => executeTool('tags_list', (runId) => api.listTags(attributeId, runId)));
|
|
22
|
+
server.registerTool('tags_get', toolConfig('tags_get', { attributeId: taxonomyId, tagId: taxonomyId }), async ({ attributeId, tagId }) => executeTool('tags_get', (runId) => api.getTag(attributeId, tagId, runId)));
|
|
23
|
+
server.registerTool('metadata_list_fields', toolConfig('metadata_list_fields', { category }), async ({ category: value }) => executeTool('metadata_list_fields', (runId) => api.listMetadataFields(value, runId)));
|
|
24
|
+
server.registerTool('relations_list_roles', toolConfig('relations_list_roles', {}), async () => executeTool('relations_list_roles', (runId) => api.listRelationRoles(runId)));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=taxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../../../../src/tools/taxonomy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,6BAA6B,CAAC;KACpC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACpC,MAAM,QAAQ,GAAG,CAAC;KACf,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,6BAA6B,CAAC;KACpC,QAAQ,EAAE;KACV,QAAQ,CAAC,4BAA4B,CAAC,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,GAAc;IACrE,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB,UAAU,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAChD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAC5B,WAAW,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CACtF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB,UAAU,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAC7D,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CACxB,WAAW,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CACxF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX,UAAU,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,EAC/D,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CACjG,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,UAAU,EACV,UAAU,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EACtE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAC5G,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB,UAAU,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAChD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAC5B,WAAW,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CACvF,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAC7F,WAAW,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { toolConfig } from './catalog.js';
|
|
3
|
+
import { executeTool, paginationSchema, wikiResourceId } from './shared.js';
|
|
4
|
+
const wikiSearchSchema = {
|
|
5
|
+
query: z
|
|
6
|
+
.string()
|
|
7
|
+
.trim()
|
|
8
|
+
.min(1)
|
|
9
|
+
.max(100)
|
|
10
|
+
.regex(/[\p{L}\p{N}]/u, 'Wiki search text must contain at least one letter or number')
|
|
11
|
+
.describe('Meaningful public Wiki entry ID or title search text; wildcard-only searches are not allowed'),
|
|
12
|
+
...paginationSchema,
|
|
13
|
+
};
|
|
14
|
+
const wikiMetadataSchema = z.object({
|
|
15
|
+
title: z.string().trim().min(1).max(128),
|
|
16
|
+
parentId: wikiResourceId.nullable().optional().describe('Parent Wiki ID; omit or use null for a root entry'),
|
|
17
|
+
weight: z.number().optional().default(0),
|
|
18
|
+
});
|
|
19
|
+
const wikiDraftWriteSchema = {
|
|
20
|
+
metadata: wikiMetadataSchema,
|
|
21
|
+
content: z.string().describe('Complete Markdown body, including unchanged content'),
|
|
22
|
+
changeSummary: z.string().trim().max(1000).optional(),
|
|
23
|
+
};
|
|
24
|
+
const draftSn = z
|
|
25
|
+
.string()
|
|
26
|
+
.min(1)
|
|
27
|
+
.max(100)
|
|
28
|
+
.regex(/^[a-z0-9]+$/)
|
|
29
|
+
.describe('Immutable completed contribution history SN');
|
|
30
|
+
export function registerWikiTools(server, api) {
|
|
31
|
+
server.registerTool('wiki_search', toolConfig('wiki_search', wikiSearchSchema), async (input) => executeTool('wiki_search', (runId) => api.searchWiki(input, runId)));
|
|
32
|
+
server.registerTool('wiki_get', toolConfig('wiki_get', { entryId: wikiResourceId }), async ({ entryId }) => executeTool('wiki_get', (runId) => api.getWiki(entryId, runId)));
|
|
33
|
+
server.registerTool('wiki_contribution_create_draft', toolConfig('wiki_contribution_create_draft', {
|
|
34
|
+
resourceId: wikiResourceId,
|
|
35
|
+
operation: z.enum(['create', 'update', 'delete']),
|
|
36
|
+
...wikiDraftWriteSchema,
|
|
37
|
+
}), async (input) => executeTool('wiki_contribution_create_draft', (runId) => api.createWikiContribution(input, runId)));
|
|
38
|
+
server.registerTool('wiki_contribution_update_draft', toolConfig('wiki_contribution_update_draft', { resourceId: wikiResourceId, ...wikiDraftWriteSchema }), async ({ resourceId, ...input }) => executeTool('wiki_contribution_update_draft', (runId) => api.updateWikiContribution(resourceId, input, runId)));
|
|
39
|
+
server.registerTool('wiki_contribution_delete_draft', toolConfig('wiki_contribution_delete_draft', { resourceId: wikiResourceId }), async ({ resourceId }) => executeTool('wiki_contribution_delete_draft', (runId) => api.deleteWikiContribution(resourceId, runId)));
|
|
40
|
+
server.registerTool('wiki_contribution_submit', toolConfig('wiki_contribution_submit', { resourceId: wikiResourceId }), async ({ resourceId }) => executeTool('wiki_contribution_submit', (runId) => api.submitWikiContribution(resourceId, runId)));
|
|
41
|
+
server.registerTool('wiki_contribution_withdraw', toolConfig('wiki_contribution_withdraw', { resourceId: wikiResourceId }), async ({ resourceId }) => executeTool('wiki_contribution_withdraw', (runId) => api.withdrawWikiContribution(resourceId, runId)));
|
|
42
|
+
server.registerTool('wiki_contribution_reopen', toolConfig('wiki_contribution_reopen', { resourceId: wikiResourceId }), async ({ resourceId }) => executeTool('wiki_contribution_reopen', (runId) => api.reopenWikiContribution(resourceId, runId)));
|
|
43
|
+
server.registerTool('wiki_contribution_status', toolConfig('wiki_contribution_status', { resourceId: wikiResourceId }), async ({ resourceId }) => executeTool('wiki_contribution_status', (runId) => api.getWikiContribution(resourceId, runId)));
|
|
44
|
+
server.registerTool('wiki_contribution_list', toolConfig('wiki_contribution_list', paginationSchema), async (input) => executeTool('wiki_contribution_list', (runId) => api.listWikiContributions(input, runId)));
|
|
45
|
+
server.registerTool('wiki_contribution_history_get', toolConfig('wiki_contribution_history_get', { draftSn }), async ({ draftSn: value }) => executeTool('wiki_contribution_history_get', (runId) => api.getWikiContributionHistory(value, runId)));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../../src/tools/wiki.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kloudy-mcp",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "Local stdio MCP server for Kloudy",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"kloudy-mcp": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=20"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"prepack": "npm --prefix ../.. run build:npm"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@modelcontextprotocol/sdk": "1.30.0",
|
|
20
|
+
"zod": "^3.25.0"
|
|
21
|
+
}
|
|
22
|
+
}
|