@wiro-ai/wiro-mcp 1.1.4 → 1.2.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.
Files changed (69) hide show
  1. package/README.md +87 -5
  2. package/dist/client.d.ts +46 -11
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +239 -22
  5. package/dist/client.js.map +1 -1
  6. package/dist/tools/cancel-task.d.ts.map +1 -1
  7. package/dist/tools/cancel-task.js +34 -4
  8. package/dist/tools/cancel-task.js.map +1 -1
  9. package/dist/tools/explore.d.ts.map +1 -1
  10. package/dist/tools/explore.js +17 -1
  11. package/dist/tools/explore.js.map +1 -1
  12. package/dist/tools/get-model-schema.d.ts.map +1 -1
  13. package/dist/tools/get-model-schema.js +18 -2
  14. package/dist/tools/get-model-schema.js.map +1 -1
  15. package/dist/tools/get-task-price.d.ts.map +1 -1
  16. package/dist/tools/get-task-price.js +38 -5
  17. package/dist/tools/get-task-price.js.map +1 -1
  18. package/dist/tools/get-task.d.ts +1 -1
  19. package/dist/tools/get-task.d.ts.map +1 -1
  20. package/dist/tools/get-task.js +77 -7
  21. package/dist/tools/get-task.js.map +1 -1
  22. package/dist/tools/index.d.ts +3 -1
  23. package/dist/tools/index.d.ts.map +1 -1
  24. package/dist/tools/index.js +5 -1
  25. package/dist/tools/index.js.map +1 -1
  26. package/dist/tools/kill-task.d.ts.map +1 -1
  27. package/dist/tools/kill-task.js +34 -4
  28. package/dist/tools/kill-task.js.map +1 -1
  29. package/dist/tools/list-tasks.d.ts +4 -0
  30. package/dist/tools/list-tasks.d.ts.map +1 -0
  31. package/dist/tools/list-tasks.js +89 -0
  32. package/dist/tools/list-tasks.js.map +1 -0
  33. package/dist/tools/recommend-model.d.ts.map +1 -1
  34. package/dist/tools/recommend-model.js +51 -4
  35. package/dist/tools/recommend-model.js.map +1 -1
  36. package/dist/tools/run-model.d.ts +1 -1
  37. package/dist/tools/run-model.d.ts.map +1 -1
  38. package/dist/tools/run-model.js +115 -19
  39. package/dist/tools/run-model.js.map +1 -1
  40. package/dist/tools/schemas.d.ts +683 -0
  41. package/dist/tools/schemas.d.ts.map +1 -0
  42. package/dist/tools/schemas.js +134 -0
  43. package/dist/tools/schemas.js.map +1 -0
  44. package/dist/tools/search-docs.d.ts.map +1 -1
  45. package/dist/tools/search-docs.js +30 -4
  46. package/dist/tools/search-docs.js.map +1 -1
  47. package/dist/tools/search-models.d.ts.map +1 -1
  48. package/dist/tools/search-models.js +65 -15
  49. package/dist/tools/search-models.js.map +1 -1
  50. package/dist/tools/upload-file.d.ts.map +1 -1
  51. package/dist/tools/upload-file.js +42 -4
  52. package/dist/tools/upload-file.js.map +1 -1
  53. package/dist/tools/wait-for-task.d.ts +4 -0
  54. package/dist/tools/wait-for-task.d.ts.map +1 -0
  55. package/dist/tools/wait-for-task.js +121 -0
  56. package/dist/tools/wait-for-task.js.map +1 -0
  57. package/dist/types.d.ts +8 -1
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js +3 -0
  60. package/dist/types.js.map +1 -1
  61. package/dist/utils/format.d.ts +10 -0
  62. package/dist/utils/format.d.ts.map +1 -1
  63. package/dist/utils/format.js +93 -4
  64. package/dist/utils/format.js.map +1 -1
  65. package/dist/utils/structured.d.ts +113 -0
  66. package/dist/utils/structured.d.ts.map +1 -0
  67. package/dist/utils/structured.js +227 -0
  68. package/dist/utils/structured.js.map +1 -0
  69. package/package.json +13 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../src/tools/list-tasks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recommend-model.d.ts","sourceRoot":"","sources":["../../src/tools/recommend-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsClF"}
1
+ {"version":3,"file":"recommend-model.d.ts","sourceRoot":"","sources":["../../src/tools/recommend-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoFlF"}
@@ -1,8 +1,23 @@
1
1
  import { z } from 'zod';
2
2
  import { formatModelList } from '../utils/format.js';
3
+ import { toStructuredModel } from '../utils/structured.js';
4
+ import { modelListOutputSchema } from './schemas.js';
3
5
  export function registerRecommendModel(server, client) {
4
- server.tool('recommend_model', 'Describe what you want to build and get model recommendations ranked by relevance. Use natural language like "remove background from product photos" or "generate a 10-second cinematic video".', {
5
- task: z.string().describe('What you want to do, e.g. "generate a photorealistic portrait", "upscale an image to 4K", "transcribe audio to text"'),
6
+ server.registerTool('recommend_model', {
7
+ title: 'Recommend Wiro models',
8
+ description: 'Describe a generation goal in natural language and receive '
9
+ + 'ranked model recommendations. Follow the returned '
10
+ + '`get_model_schema` next action before running a model.',
11
+ inputSchema: {
12
+ task: z.string().describe('What you want to do, e.g. "generate a photorealistic portrait", "upscale an image to 4K", "transcribe audio to text".'),
13
+ },
14
+ outputSchema: modelListOutputSchema,
15
+ annotations: {
16
+ readOnlyHint: true,
17
+ destructiveHint: false,
18
+ idempotentHint: true,
19
+ openWorldHint: true,
20
+ },
6
21
  }, async ({ task }) => {
7
22
  try {
8
23
  const result = await client.searchModels({
@@ -10,18 +25,50 @@ export function registerRecommendModel(server, client) {
10
25
  sort: 'relevance',
11
26
  limit: 10,
12
27
  });
13
- if (!result.result || !result.tool?.length) {
28
+ if (!result.result) {
29
+ const message = result.errors?.map(error => error.message).join(', ')
30
+ || 'Model recommendation failed.';
31
+ return {
32
+ content: [{ type: 'text', text: `## Error\n\n${message}` }],
33
+ isError: true,
34
+ };
35
+ }
36
+ const models = result.tool ?? [];
37
+ const total = Number.parseInt(String(result.total ?? models.length), 10) || models.length;
38
+ const firstModel = models[0];
39
+ if (!models.length) {
14
40
  return {
15
41
  content: [{
16
42
  type: 'text',
17
43
  text: `No models found for "${task}". Try a different description or use \`search_models\` with specific categories.`,
18
44
  }],
45
+ structuredContent: {
46
+ models: [],
47
+ total,
48
+ start: 0,
49
+ limit: 10,
50
+ nextStart: null,
51
+ },
19
52
  };
20
53
  }
21
- const text = formatModelList(result.tool, `## Recommended Models for "${task}" (${result.tool.length} results)`);
54
+ const text = formatModelList(models, `## Recommended Models for "${task}" (${models.length} results)`);
22
55
  const footer = `\n\n*Use \`get_model_schema\` to see full parameters and pricing for any model.*`;
23
56
  return {
24
57
  content: [{ type: 'text', text: text + footer }],
58
+ structuredContent: {
59
+ models: models.map(toStructuredModel),
60
+ total,
61
+ start: 0,
62
+ limit: 10,
63
+ nextStart: null,
64
+ nextAction: {
65
+ tool: 'get_model_schema',
66
+ arguments: {
67
+ model: `${firstModel.cleanslugowner}/${firstModel.cleanslugproject}`,
68
+ },
69
+ reason: 'Inspect the selected model parameters before running it.',
70
+ },
71
+ },
25
72
  };
26
73
  }
27
74
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"recommend-model.js","sourceRoot":"","sources":["../../src/tools/recommend-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAkB;IAC1E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,iMAAiM,EACjM;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sHAAsH,CAAC;KAClJ,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;gBACvC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC3C,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,wBAAwB,IAAI,mFAAmF;yBACtH,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,8BAA8B,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;YACjH,MAAM,MAAM,GAAG,kFAAkF,CAAC;YAElG,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;aAC1D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACnH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"recommend-model.js","sourceRoot":"","sources":["../../src/tools/recommend-model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { WiroClient } from '../client.js';
2
+ import { type WiroClient } from '../client.js';
3
3
  export declare function registerRunModel(server: McpServer, client: WiroClient): void;
4
4
  //# sourceMappingURL=run-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-model.d.ts","sourceRoot":"","sources":["../../src/tools/run-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6D5E"}
1
+ {"version":3,"file":"run-model.d.ts","sourceRoot":"","sources":["../../src/tools/run-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AActB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6J5E"}
@@ -1,17 +1,33 @@
1
1
  import { z } from 'zod';
2
- import { formatTaskResult } from '../utils/format.js';
2
+ import { TaskPollingError, TaskWaitTimeoutError, } from '../client.js';
3
+ import { formatTaskPending, formatTaskResult, formatTaskSubmitted, } from '../utils/format.js';
4
+ import { createTaskContent, toPendingTaskResult, toStructuredTaskResult, } from '../utils/structured.js';
5
+ import { taskResultOutputSchema } from './schemas.js';
3
6
  export function registerRunModel(server, client) {
4
- server.tool('run_model', 'Run any AI model on Wiro. Supports image generation, video generation, LLMs, audio, 3D, and more.\n\n' +
5
- 'Use `get_model_schema` first to discover available parameters.\n\n' +
6
- 'With wait=true (default), polls until completion and returns the result.\n' +
7
- 'With wait=false, returns the task token immediately for async monitoring.', {
8
- model: z.string().describe('Model slug in "owner/model" format, e.g. "openai/sora-2", "google/nano-banana-pro"'),
9
- params: z.record(z.string(), z.unknown()).describe('Model-specific parameters as key-value pairs. Use get_model_schema to discover available parameters. For file parameters (fileinput, multifileinput, combinefileinput), pass URLs directly — no upload needed. For combinefileinput, pass an array of URLs.'),
10
- wait: z.boolean().default(true).describe('If true, poll until completion and return result. If false, return task token immediately.'),
11
- timeout_seconds: z.number().int().min(10).max(600).default(120).describe('Max seconds to wait for completion (only when wait=true)'),
12
- }, async ({ model, params, wait, timeout_seconds }) => {
7
+ server.registerTool('run_model', {
8
+ title: 'Run a Wiro model',
9
+ description: 'Run any AI model on Wiro. Supports image, video, text, audio, '
10
+ + '3D, and more. Call `get_model_schema` first. With `wait=true` this '
11
+ + 'performs a bounded wait; when the response contains '
12
+ + '`nextAction.tool = "wait_for_task"`, call that tool with the exact '
13
+ + 'arguments returned. Never call `run_model` again for the same request.',
14
+ inputSchema: {
15
+ model: z.string().describe('Model slug in "owner/model" format, e.g. "openai/sora-2", "google/nano-banana-pro"'),
16
+ params: z.record(z.string(), z.unknown()).describe('Model-specific parameters as key-value pairs. Use get_model_schema to discover available parameters. For file parameters (fileinput, multifileinput, combinefileinput), pass URLs directly — no upload needed. For combinefileinput, pass an array of URLs.'),
17
+ wait: z.boolean().default(true).describe('If true, poll until completion and return the result. If false, return the task identifiers immediately.'),
18
+ timeout_seconds: z.number().int().min(10).max(600).default(45).describe('Maximum seconds to wait when wait=true. The 45-second default is safe for clients with a 60-second tool timeout.'),
19
+ },
20
+ outputSchema: taskResultOutputSchema,
21
+ annotations: {
22
+ readOnlyHint: false,
23
+ destructiveHint: false,
24
+ idempotentHint: false,
25
+ openWorldHint: true,
26
+ },
27
+ }, async ({ model, params, wait, timeout_seconds }, extra) => {
28
+ let runResult;
13
29
  try {
14
- const runResult = await client.runModel(model, params);
30
+ runResult = await client.runModel(model, params, extra.signal);
15
31
  if (!runResult.result) {
16
32
  const errors = runResult.errors?.map(e => e.message).join(', ') || 'Unknown error';
17
33
  return {
@@ -23,26 +39,106 @@ export function registerRunModel(server, client) {
23
39
  return {
24
40
  content: [{
25
41
  type: 'text',
26
- text: `## Task Submitted\n\n` +
27
- `**Task ID:** ${runResult.taskid}\n` +
28
- `**Task Token:** ${runResult.socketaccesstoken}\n\n` +
29
- `Use \`get_task\` with this token to check results.`,
42
+ text: formatTaskSubmitted(runResult.taskid, runResult.socketaccesstoken),
30
43
  }],
44
+ structuredContent: toPendingTaskResult({
45
+ taskid: runResult.taskid,
46
+ tasktoken: runResult.socketaccesstoken,
47
+ model,
48
+ }),
31
49
  };
32
50
  }
33
- const detail = await client.waitForTask(runResult.socketaccesstoken, timeout_seconds * 1000);
51
+ const detail = await client.waitForTask(runResult.socketaccesstoken, timeout_seconds * 1000, {
52
+ signal: extra.signal,
53
+ onPoll: async (task, context) => {
54
+ const progressToken = extra._meta?.progressToken;
55
+ if (progressToken === undefined)
56
+ return;
57
+ try {
58
+ await extra.sendNotification({
59
+ method: 'notifications/progress',
60
+ params: {
61
+ progressToken,
62
+ progress: context.elapsedMs / 1000,
63
+ message: `Task status: ${task.status}`,
64
+ },
65
+ });
66
+ }
67
+ catch {
68
+ // Progress is best-effort and must never interrupt task polling.
69
+ }
70
+ },
71
+ });
34
72
  const task = detail.tasklist?.[0];
35
73
  if (!task) {
74
+ const reason = 'The status endpoint returned no task data.';
36
75
  return {
37
- content: [{ type: 'text', text: '## Error\n\nNo task data returned.' }],
38
- isError: true,
76
+ content: [{
77
+ type: 'text',
78
+ text: formatTaskPending({
79
+ taskid: runResult.taskid,
80
+ tasktoken: runResult.socketaccesstoken,
81
+ timeoutSeconds: timeout_seconds,
82
+ reason,
83
+ }),
84
+ }],
85
+ structuredContent: toPendingTaskResult({
86
+ taskid: runResult.taskid,
87
+ tasktoken: runResult.socketaccesstoken,
88
+ model,
89
+ reason,
90
+ }),
39
91
  };
40
92
  }
41
93
  return {
42
- content: [{ type: 'text', text: formatTaskResult(task) }],
94
+ content: createTaskContent(formatTaskResult(task), task),
95
+ structuredContent: toStructuredTaskResult(task, {
96
+ taskid: runResult.taskid,
97
+ tasktoken: runResult.socketaccesstoken,
98
+ model,
99
+ }),
43
100
  };
44
101
  }
45
102
  catch (error) {
103
+ if (runResult?.result && runResult.socketaccesstoken) {
104
+ const lastDetail = error instanceof TaskWaitTimeoutError
105
+ || error instanceof TaskPollingError
106
+ ? error.lastDetail
107
+ : undefined;
108
+ const lastTask = lastDetail?.tasklist?.[0];
109
+ const reason = error instanceof TaskWaitTimeoutError
110
+ ? undefined
111
+ : 'Task submission succeeded, but status monitoring was interrupted.';
112
+ const structured = lastTask
113
+ ? toStructuredTaskResult(lastTask, {
114
+ taskid: runResult.taskid,
115
+ tasktoken: runResult.socketaccesstoken,
116
+ model,
117
+ })
118
+ : toPendingTaskResult({
119
+ taskid: runResult.taskid,
120
+ tasktoken: runResult.socketaccesstoken,
121
+ model,
122
+ reason,
123
+ });
124
+ if (reason)
125
+ structured.error = reason;
126
+ return {
127
+ content: [{
128
+ type: 'text',
129
+ text: formatTaskPending({
130
+ taskid: runResult.taskid,
131
+ tasktoken: runResult.socketaccesstoken,
132
+ status: lastTask?.status,
133
+ timeoutSeconds: error instanceof TaskWaitTimeoutError
134
+ ? timeout_seconds
135
+ : undefined,
136
+ reason,
137
+ }),
138
+ }],
139
+ structuredContent: structured,
140
+ };
141
+ }
46
142
  return {
47
143
  content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
48
144
  isError: true,
@@ -1 +1 @@
1
- {"version":3,"file":"run-model.js","sourceRoot":"","sources":["../../src/tools/run-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-model.js","sourceRoot":"","sources":["../../src/tools/run-model.ts"],"names":[],"mappings":"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"}