@pixeldojo/mcp 0.15.1 → 0.16.1
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/dist/cli.cjs +40 -7
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +40 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +41 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -1
- package/dist/index.d.ts +32 -1
- package/dist/index.js +41 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -242,6 +242,37 @@ declare function makeAttributedClient(options: MakeClientOptions): PixelDojoClie
|
|
|
242
242
|
declare const ALL_SKILLS: ReadonlyArray<SkillModule<unknown>>;
|
|
243
243
|
|
|
244
244
|
declare const HOSTED_SKILLS: ReadonlyArray<SkillModule<unknown>>;
|
|
245
|
+
/**
|
|
246
|
+
* MCP tool annotations for every skill. ChatGPT's plugin review rejects tools
|
|
247
|
+
* without readOnlyHint / destructiveHint / openWorldHint, and clients use them
|
|
248
|
+
* to decide when to ask before a call. Rationale per hint:
|
|
249
|
+
* - readOnlyHint: false for anything that renders, spends credits or saves.
|
|
250
|
+
* - destructiveHint: renders are additive (new media, nothing of the user's
|
|
251
|
+
* is changed or deleted; failed jobs refund), so false. save_workflow
|
|
252
|
+
* overwrites a same-named workflow, so true.
|
|
253
|
+
* - openWorldHint: everything stays inside the user's own account, except
|
|
254
|
+
* from_url, which fetches an arbitrary public page.
|
|
255
|
+
*/
|
|
256
|
+
type Hints = {
|
|
257
|
+
title: string;
|
|
258
|
+
readOnlyHint: boolean;
|
|
259
|
+
destructiveHint: boolean;
|
|
260
|
+
openWorldHint: boolean;
|
|
261
|
+
};
|
|
262
|
+
declare const TOOL_ANNOTATIONS: Record<string, Hints>;
|
|
263
|
+
/** The tools/list entry for a skill, shared by the stdio server and the hosted /mcp route. */
|
|
264
|
+
declare function toolListing(skill: SkillModule<unknown>): {
|
|
265
|
+
name: string;
|
|
266
|
+
title: string;
|
|
267
|
+
description: string;
|
|
268
|
+
inputSchema: Record<string, unknown>;
|
|
269
|
+
annotations: {
|
|
270
|
+
readOnlyHint: boolean;
|
|
271
|
+
destructiveHint: boolean;
|
|
272
|
+
openWorldHint: boolean;
|
|
273
|
+
title: string;
|
|
274
|
+
};
|
|
275
|
+
};
|
|
245
276
|
declare function findHostedSkill(name: string): SkillModule<unknown> | undefined;
|
|
246
277
|
/**
|
|
247
278
|
* Skill names were `pixeldojo:<x>` until 2026-07-29. A colon is illegal in a
|
|
@@ -286,4 +317,4 @@ declare function makeRedactedLogger(target?: Pick<Console, 'error'>): {
|
|
|
286
317
|
error(msg: string, ...args: unknown[]): void;
|
|
287
318
|
};
|
|
288
319
|
|
|
289
|
-
export { ALL_SKILLS, HOSTED_SKILLS, type MakeClientOptions, PACKAGE_VERSION, type PollOptions, type PollResult, type PollableJob, SERVER_INSTRUCTIONS, type ServerOptions, type SkillContext, type SkillModule, type SkillResult, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse };
|
|
320
|
+
export { ALL_SKILLS, HOSTED_SKILLS, type MakeClientOptions, PACKAGE_VERSION, type PollOptions, type PollResult, type PollableJob, SERVER_INSTRUCTIONS, type ServerOptions, type SkillContext, type SkillModule, type SkillResult, TOOL_ANNOTATIONS, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse, toolListing };
|
package/dist/index.d.ts
CHANGED
|
@@ -242,6 +242,37 @@ declare function makeAttributedClient(options: MakeClientOptions): PixelDojoClie
|
|
|
242
242
|
declare const ALL_SKILLS: ReadonlyArray<SkillModule<unknown>>;
|
|
243
243
|
|
|
244
244
|
declare const HOSTED_SKILLS: ReadonlyArray<SkillModule<unknown>>;
|
|
245
|
+
/**
|
|
246
|
+
* MCP tool annotations for every skill. ChatGPT's plugin review rejects tools
|
|
247
|
+
* without readOnlyHint / destructiveHint / openWorldHint, and clients use them
|
|
248
|
+
* to decide when to ask before a call. Rationale per hint:
|
|
249
|
+
* - readOnlyHint: false for anything that renders, spends credits or saves.
|
|
250
|
+
* - destructiveHint: renders are additive (new media, nothing of the user's
|
|
251
|
+
* is changed or deleted; failed jobs refund), so false. save_workflow
|
|
252
|
+
* overwrites a same-named workflow, so true.
|
|
253
|
+
* - openWorldHint: everything stays inside the user's own account, except
|
|
254
|
+
* from_url, which fetches an arbitrary public page.
|
|
255
|
+
*/
|
|
256
|
+
type Hints = {
|
|
257
|
+
title: string;
|
|
258
|
+
readOnlyHint: boolean;
|
|
259
|
+
destructiveHint: boolean;
|
|
260
|
+
openWorldHint: boolean;
|
|
261
|
+
};
|
|
262
|
+
declare const TOOL_ANNOTATIONS: Record<string, Hints>;
|
|
263
|
+
/** The tools/list entry for a skill, shared by the stdio server and the hosted /mcp route. */
|
|
264
|
+
declare function toolListing(skill: SkillModule<unknown>): {
|
|
265
|
+
name: string;
|
|
266
|
+
title: string;
|
|
267
|
+
description: string;
|
|
268
|
+
inputSchema: Record<string, unknown>;
|
|
269
|
+
annotations: {
|
|
270
|
+
readOnlyHint: boolean;
|
|
271
|
+
destructiveHint: boolean;
|
|
272
|
+
openWorldHint: boolean;
|
|
273
|
+
title: string;
|
|
274
|
+
};
|
|
275
|
+
};
|
|
245
276
|
declare function findHostedSkill(name: string): SkillModule<unknown> | undefined;
|
|
246
277
|
/**
|
|
247
278
|
* Skill names were `pixeldojo:<x>` until 2026-07-29. A colon is illegal in a
|
|
@@ -286,4 +317,4 @@ declare function makeRedactedLogger(target?: Pick<Console, 'error'>): {
|
|
|
286
317
|
error(msg: string, ...args: unknown[]): void;
|
|
287
318
|
};
|
|
288
319
|
|
|
289
|
-
export { ALL_SKILLS, HOSTED_SKILLS, type MakeClientOptions, PACKAGE_VERSION, type PollOptions, type PollResult, type PollableJob, SERVER_INSTRUCTIONS, type ServerOptions, type SkillContext, type SkillModule, type SkillResult, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse };
|
|
320
|
+
export { ALL_SKILLS, HOSTED_SKILLS, type MakeClientOptions, PACKAGE_VERSION, type PollOptions, type PollResult, type PollableJob, SERVER_INSTRUCTIONS, type ServerOptions, type SkillContext, type SkillModule, type SkillResult, TOOL_ANNOTATIONS, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse, toolListing };
|
package/dist/index.js
CHANGED
|
@@ -919,6 +919,7 @@ var init_character = __esm({
|
|
|
919
919
|
ALLOWED = [
|
|
920
920
|
"seedream-5",
|
|
921
921
|
"seedream-4",
|
|
922
|
+
"seedream-5-flash",
|
|
922
923
|
"google-nano-banana",
|
|
923
924
|
"wan-2.7-image-edit",
|
|
924
925
|
"qwen-3-pro",
|
|
@@ -930,6 +931,7 @@ var init_character = __esm({
|
|
|
930
931
|
FALLBACK_REF_KEY = {
|
|
931
932
|
"seedream-5": "image_urls",
|
|
932
933
|
"seedream-4": "image_urls",
|
|
934
|
+
"seedream-5-flash": "image_urls",
|
|
933
935
|
"google-nano-banana": "image_input",
|
|
934
936
|
"wan-2.7-image-edit": "image_urls",
|
|
935
937
|
"qwen-3-pro": "image",
|
|
@@ -3050,6 +3052,7 @@ var skills_exports = {};
|
|
|
3050
3052
|
__export(skills_exports, {
|
|
3051
3053
|
ALL_SKILLS: () => ALL_SKILLS,
|
|
3052
3054
|
HOSTED_SKILLS: () => HOSTED_SKILLS,
|
|
3055
|
+
TOOL_ANNOTATIONS: () => TOOL_ANNOTATIONS,
|
|
3053
3056
|
adSkill: () => adSkill,
|
|
3054
3057
|
audioSkill: () => audioSkill,
|
|
3055
3058
|
campaignSkill: () => campaignSkill,
|
|
@@ -3068,10 +3071,21 @@ __export(skills_exports, {
|
|
|
3068
3071
|
saveWorkflowSkill: () => saveWorkflowSkill,
|
|
3069
3072
|
statusSkill: () => statusSkill,
|
|
3070
3073
|
storyboardSkill: () => storyboardSkill,
|
|
3074
|
+
toolListing: () => toolListing,
|
|
3071
3075
|
uploadSkill: () => uploadSkill,
|
|
3072
3076
|
upscaleSkill: () => upscaleSkill,
|
|
3073
3077
|
videoSkill: () => videoSkill
|
|
3074
3078
|
});
|
|
3079
|
+
function toolListing(skill) {
|
|
3080
|
+
const { title, ...hints } = TOOL_ANNOTATIONS[skill.name];
|
|
3081
|
+
return {
|
|
3082
|
+
name: skill.name,
|
|
3083
|
+
title,
|
|
3084
|
+
description: skill.description,
|
|
3085
|
+
inputSchema: skill.inputJsonSchema,
|
|
3086
|
+
annotations: { title, ...hints }
|
|
3087
|
+
};
|
|
3088
|
+
}
|
|
3075
3089
|
function findHostedSkill(name) {
|
|
3076
3090
|
const wanted = name.replace(/^pixeldojo:/, "pixeldojo_");
|
|
3077
3091
|
return HOSTED_SKILLS.find((s) => s.name === wanted);
|
|
@@ -3080,7 +3094,7 @@ function findSkill(name) {
|
|
|
3080
3094
|
const wanted = name.replace(/^pixeldojo:/, "pixeldojo_");
|
|
3081
3095
|
return ALL_SKILLS.find((s) => s.name === wanted);
|
|
3082
3096
|
}
|
|
3083
|
-
var ALL_SKILLS, isLocalPathField, HOSTED_SKILLS;
|
|
3097
|
+
var ALL_SKILLS, isLocalPathField, HOSTED_SKILLS, render, read, TOOL_ANNOTATIONS;
|
|
3084
3098
|
var init_skills = __esm({
|
|
3085
3099
|
"src/skills/index.ts"() {
|
|
3086
3100
|
init_generate();
|
|
@@ -3135,6 +3149,29 @@ var init_skills = __esm({
|
|
|
3135
3149
|
}
|
|
3136
3150
|
};
|
|
3137
3151
|
});
|
|
3152
|
+
render = (title) => ({ title, readOnlyHint: false, destructiveHint: false, openWorldHint: false });
|
|
3153
|
+
read = (title) => ({ title, readOnlyHint: true, destructiveHint: false, openWorldHint: false });
|
|
3154
|
+
TOOL_ANNOTATIONS = {
|
|
3155
|
+
pixeldojo_generate: render("Generate image or video"),
|
|
3156
|
+
pixeldojo_edit: render("Edit image"),
|
|
3157
|
+
pixeldojo_character: render("Consistent character image"),
|
|
3158
|
+
pixeldojo_storyboard: render("Storyboard preview video"),
|
|
3159
|
+
pixeldojo_upscale: render("Upscale image or video"),
|
|
3160
|
+
pixeldojo_audio: render("Generate music, speech or sound"),
|
|
3161
|
+
pixeldojo_video: render("Change, animate or extend video"),
|
|
3162
|
+
pixeldojo_ad: render("Make video ad"),
|
|
3163
|
+
pixeldojo_campaign: render("Make product launch campaign"),
|
|
3164
|
+
pixeldojo_film: render("Make short film"),
|
|
3165
|
+
pixeldojo_episode: render("Make faceless video"),
|
|
3166
|
+
pixeldojo_run_workflow: render("Run saved workflow"),
|
|
3167
|
+
pixeldojo_upload: render("Upload local file"),
|
|
3168
|
+
pixeldojo_save_workflow: { ...render("Save workflow"), destructiveHint: true },
|
|
3169
|
+
pixeldojo_status: read("Check job status"),
|
|
3170
|
+
pixeldojo_campaign_status: read("Check campaign status"),
|
|
3171
|
+
pixeldojo_library: read("Search media library"),
|
|
3172
|
+
pixeldojo_list_workflows: read("List saved workflows"),
|
|
3173
|
+
pixeldojo_from_url: { ...read("Read product page"), openWorldHint: true }
|
|
3174
|
+
};
|
|
3138
3175
|
}
|
|
3139
3176
|
});
|
|
3140
3177
|
function makeAttributedClient(options) {
|
|
@@ -3188,7 +3225,7 @@ function makeRedactedLogger(target = console) {
|
|
|
3188
3225
|
}
|
|
3189
3226
|
|
|
3190
3227
|
// src/server.ts
|
|
3191
|
-
var PACKAGE_VERSION = "0.
|
|
3228
|
+
var PACKAGE_VERSION = "0.16.1" ;
|
|
3192
3229
|
var SERVER_INSTRUCTIONS = "PixelDojo generates images, video, audio and short films across 100+ models, billed in credits from the connected PixelDojo account. A job that runs past the 30-second wait returns a jobId to check later; check it rather than submitting again, since every new submission is charged. Generated asset URLs are deleted one hour after they are created, so download anything the user wants to keep. Finished films are the exception and stay in the account library.";
|
|
3193
3230
|
function buildServer(options) {
|
|
3194
3231
|
if (!options.apiKey) {
|
|
@@ -3213,11 +3250,7 @@ function buildServer(options) {
|
|
|
3213
3250
|
);
|
|
3214
3251
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
3215
3252
|
return {
|
|
3216
|
-
tools: ALL_SKILLS.map(
|
|
3217
|
-
name: skill.name,
|
|
3218
|
-
description: skill.description,
|
|
3219
|
-
inputSchema: skill.inputJsonSchema
|
|
3220
|
-
}))
|
|
3253
|
+
tools: ALL_SKILLS.map(toolListing)
|
|
3221
3254
|
};
|
|
3222
3255
|
});
|
|
3223
3256
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
@@ -3333,6 +3366,6 @@ async function runStdio(options) {
|
|
|
3333
3366
|
init_skills();
|
|
3334
3367
|
init_poll();
|
|
3335
3368
|
|
|
3336
|
-
export { ALL_SKILLS, HOSTED_SKILLS, PACKAGE_VERSION, SERVER_INSTRUCTIONS, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse };
|
|
3369
|
+
export { ALL_SKILLS, HOSTED_SKILLS, PACKAGE_VERSION, SERVER_INSTRUCTIONS, TOOL_ANNOTATIONS, buildServer, errorToActionableMessage, findHostedSkill, findSkill, makeAttributedClient, makeRedactedLogger, pollJobUntilDoneOrHandoff, redactKeys, redactValue, runStdio, skillResultToMcpResponse, toolListing };
|
|
3337
3370
|
//# sourceMappingURL=index.js.map
|
|
3338
3371
|
//# sourceMappingURL=index.js.map
|