@wiro-ai/wiro-mcp 1.0.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/client.d.ts +21 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +115 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +24 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/server.d.ts +7 -0
  12. package/dist/server.d.ts.map +1 -0
  13. package/dist/server.js +13 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/tools/cancel-task.d.ts +4 -0
  16. package/dist/tools/cancel-task.d.ts.map +1 -0
  17. package/dist/tools/cancel-task.js +20 -0
  18. package/dist/tools/cancel-task.js.map +1 -0
  19. package/dist/tools/get-model-schema.d.ts +4 -0
  20. package/dist/tools/get-model-schema.d.ts.map +1 -0
  21. package/dist/tools/get-model-schema.js +29 -0
  22. package/dist/tools/get-model-schema.js.map +1 -0
  23. package/dist/tools/get-task.d.ts +4 -0
  24. package/dist/tools/get-task.d.ts.map +1 -0
  25. package/dist/tools/get-task.js +35 -0
  26. package/dist/tools/get-task.js.map +1 -0
  27. package/dist/tools/index.d.ts +11 -0
  28. package/dist/tools/index.d.ts.map +1 -0
  29. package/dist/tools/index.js +16 -0
  30. package/dist/tools/index.js.map +1 -0
  31. package/dist/tools/kill-task.d.ts +4 -0
  32. package/dist/tools/kill-task.d.ts.map +1 -0
  33. package/dist/tools/kill-task.js +20 -0
  34. package/dist/tools/kill-task.js.map +1 -0
  35. package/dist/tools/run-model.d.ts +4 -0
  36. package/dist/tools/run-model.d.ts.map +1 -0
  37. package/dist/tools/run-model.js +53 -0
  38. package/dist/tools/run-model.js.map +1 -0
  39. package/dist/tools/search-models.d.ts +4 -0
  40. package/dist/tools/search-models.d.ts.map +1 -0
  41. package/dist/tools/search-models.js +31 -0
  42. package/dist/tools/search-models.js.map +1 -0
  43. package/dist/types.d.ts +110 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +5 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/utils/format.d.ts +5 -0
  48. package/dist/utils/format.d.ts.map +1 -0
  49. package/dist/utils/format.js +111 -0
  50. package/dist/utils/format.js.map +1 -0
  51. package/package.json +64 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Wiro AI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,195 @@
1
+ <div align="center">
2
+
3
+ <img src="https://wiro.ai/images/logos/logo/logo.png" alt="Wiro" width="180" />
4
+
5
+ # Wiro MCP Server
6
+
7
+ **Official [MCP](https://modelcontextprotocol.io/) server for [Wiro AI](https://wiro.ai/)** — access all AI models on Wiro from Cursor, Claude, Windsurf, and any MCP-compatible AI assistant.
8
+
9
+ [![npm](https://img.shields.io/badge/npm-@wiro--ai/wiro--mcp-00c38c?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@wiro-ai/wiro-mcp)
10
+ [![MCP](https://img.shields.io/badge/MCP-compatible-333?style=for-the-badge&logo=data:image/svg+xml;base64,&logoColor=white)](https://modelcontextprotocol.io/)
11
+ [![MIT](https://img.shields.io/badge/license-MIT-6f42c1?style=for-the-badge)](./LICENSE)
12
+
13
+ [Hosted MCP](https://wiro.ai/docs#/mcp) · [Models](https://wiro.ai/models) · [Dashboard](https://wiro.ai/panel) · [Docs](https://wiro.ai/docs)
14
+
15
+ <img src="https://wiro.ai/images/koala/accent-heavy-koala.png" alt="Wiro Koala mascot" width="60" />
16
+
17
+ </div>
18
+
19
+ ## Quick Start
20
+
21
+ ### 1. Get API Keys
22
+
23
+ Sign up at [wiro.ai](https://wiro.ai/) and create a project at [wiro.ai/panel/project/new](https://wiro.ai/panel/project/new) to get your API key and secret.
24
+
25
+ ### 2. Add to Your AI Assistant
26
+
27
+ **Cursor** — open MCP settings (`Cmd+Shift+P` → "Open MCP settings") and add:
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "wiro": {
33
+ "command": "npx",
34
+ "args": ["-y", "@wiro-ai/wiro-mcp"],
35
+ "env": {
36
+ "WIRO_API_KEY": "your-api-key",
37
+ "WIRO_API_SECRET": "your-api-secret"
38
+ }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ **Claude Code:**
45
+
46
+ ```bash
47
+ claude mcp add wiro -- npx -y @wiro-ai/wiro-mcp
48
+ ```
49
+
50
+ Then set environment variables `WIRO_API_KEY` and `WIRO_API_SECRET`.
51
+
52
+ **Claude Desktop** — add to `claude_desktop_config.json`:
53
+
54
+ ```json
55
+ {
56
+ "mcpServers": {
57
+ "wiro": {
58
+ "command": "npx",
59
+ "args": ["-y", "@wiro-ai/wiro-mcp"],
60
+ "env": {
61
+ "WIRO_API_KEY": "your-api-key",
62
+ "WIRO_API_SECRET": "your-api-secret"
63
+ }
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ **Windsurf** — add to MCP settings:
70
+
71
+ ```json
72
+ {
73
+ "mcpServers": {
74
+ "wiro": {
75
+ "command": "npx",
76
+ "args": ["-y", "@wiro-ai/wiro-mcp"],
77
+ "env": {
78
+ "WIRO_API_KEY": "your-api-key",
79
+ "WIRO_API_SECRET": "your-api-secret"
80
+ }
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ ### 3. Start Using
87
+
88
+ Ask your AI assistant:
89
+
90
+ - *"Generate a photorealistic image of a mountain lake at sunset"*
91
+ - *"What video generation models are available on Wiro?"*
92
+ - *"Show me the parameters for openai/sora-2"*
93
+ - *"Create a 5-second video with Kling V3 — a drone shot over mountains"*
94
+ - *"Check the status of my last task"*
95
+
96
+ ## Authentication
97
+
98
+ Wiro supports two authentication types (chosen when creating a project):
99
+
100
+ ### Signature-Based (Recommended)
101
+
102
+ More secure. Requires both API key and API secret.
103
+
104
+ ```
105
+ WIRO_API_KEY=your-api-key
106
+ WIRO_API_SECRET=your-api-secret
107
+ ```
108
+
109
+ ### API Key Only
110
+
111
+ Simpler. Only requires the API key. Omit `WIRO_API_SECRET` from your config.
112
+
113
+ ```
114
+ WIRO_API_KEY=your-api-key
115
+ ```
116
+
117
+ ## Available Tools
118
+
119
+ | Tool | Description |
120
+ |------|-------------|
121
+ | `search_models` | Search and browse all AI models on Wiro by keyword or category |
122
+ | `get_model_schema` | Get full parameter schema for any model |
123
+ | `run_model` | Run any model — wait for result or get task token |
124
+ | `get_task` | Check task status, outputs, and cost |
125
+ | `cancel_task` | Cancel a queued task |
126
+ | `kill_task` | Kill a running task |
127
+
128
+ ## Hosted MCP Server
129
+
130
+ Wiro also provides a hosted MCP server at `https://mcp.wiro.ai/v1` that requires no local installation. See the [MCP Server documentation](https://wiro.ai/docs#/mcp) for setup instructions.
131
+
132
+ ## Documentation
133
+
134
+ - [MCP Server (Hosted)](https://wiro.ai/docs#/mcp) — setup guides for Cursor, Claude Code, Claude Desktop, Windsurf
135
+ - [Self-Hosted MCP](https://wiro.ai/docs#/mcp-self-hosted) — run locally with npx, environment variables, library usage
136
+ - [Authentication](https://wiro.ai/docs#/authentication) — signature-based vs API Key Only
137
+ - [Run a Model](https://wiro.ai/docs#/run-a-model) — how the Run endpoint works
138
+ - [Tasks](https://wiro.ai/docs#/tasks) — task lifecycle, statuses, determining success
139
+ - [Concurrency Limits](https://wiro.ai/docs#/concurrency-limits) — concurrent task limits based on balance
140
+ - [Error Reference](https://wiro.ai/docs#/error-reference) — error codes and handling
141
+
142
+ ## Using as a Library
143
+
144
+ This package exports its core components for use in custom MCP servers:
145
+
146
+ ```typescript
147
+ import { createMcpServer, WiroClient } from '@wiro-ai/wiro-mcp';
148
+
149
+ const client = new WiroClient('your-api-key', 'your-api-secret');
150
+ const server = createMcpServer(client);
151
+ ```
152
+
153
+ ### Exports
154
+
155
+ | Export | Description |
156
+ |--------|-------------|
157
+ | `createMcpServer(client)` | Creates an McpServer with all 6 tools registered |
158
+ | `WiroClient` | API client with both auth types |
159
+ | `registerTools(server, client)` | Register tools on an existing McpServer |
160
+
161
+ ```typescript
162
+ // Import specific components
163
+ import { WiroClient } from '@wiro-ai/wiro-mcp/client';
164
+ import { registerTools } from '@wiro-ai/wiro-mcp/tools';
165
+ ```
166
+
167
+ ## Environment Variables
168
+
169
+ | Variable | Required | Description |
170
+ |----------|----------|-------------|
171
+ | `WIRO_API_KEY` | Yes | Your Wiro project API key |
172
+ | `WIRO_API_SECRET` | No | Your Wiro project API secret (for signature auth) |
173
+ | `WIRO_API_BASE_URL` | No | Override API base URL (default: `https://api.wiro.ai/v1`) |
174
+
175
+ ## Links
176
+
177
+ - [Wiro AI](https://wiro.ai/)
178
+ - [Dashboard](https://wiro.ai/panel)
179
+ - [Models](https://wiro.ai/models)
180
+ - [API Documentation](https://wiro.ai/docs)
181
+ - [Create Project](https://wiro.ai/panel/project/new)
182
+
183
+ ## License
184
+
185
+ MIT — see [LICENSE](./LICENSE) for details.
186
+
187
+ ---
188
+
189
+ <div align="center">
190
+
191
+ **Built with ❤️ by the Wiro team**
192
+
193
+ 🌐 [wiro.ai](https://wiro.ai) · [GitHub @wiroai](https://github.com/wiroai)
194
+
195
+ </div>
@@ -0,0 +1,21 @@
1
+ import type { SearchModelsParams, RunModelResult, TaskDetailResponse, ToolListResponse, ToolDetailResponse } from './types.js';
2
+ export declare class WiroClient {
3
+ private readonly apiKey;
4
+ private readonly apiSecret?;
5
+ private readonly baseUrl;
6
+ readonly authType: 'signature' | 'apikey-only';
7
+ constructor(apiKey: string, apiSecret?: string, baseUrl?: string);
8
+ private getAuthHeaders;
9
+ private request;
10
+ searchModels(params?: SearchModelsParams): Promise<ToolListResponse>;
11
+ getModelSchema(model: string): Promise<ToolDetailResponse>;
12
+ runModel(model: string, params: Record<string, unknown>): Promise<RunModelResult>;
13
+ getTask(opts: {
14
+ tasktoken?: string;
15
+ taskid?: string;
16
+ }): Promise<TaskDetailResponse>;
17
+ cancelTask(tasktoken: string): Promise<Record<string, unknown>>;
18
+ killTask(tasktoken: string): Promise<Record<string, unknown>>;
19
+ waitForTask(tasktoken: string, timeoutMs?: number): Promise<TaskDetailResponse>;
20
+ }
21
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAOpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,SAAgB,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;gBAE1C,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAQhE,OAAO,CAAC,cAAc;YAmBR,OAAO;IAuBf,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWxE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY1D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IASjF,OAAO,CAAC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAUnF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAkB/F"}
package/dist/client.js ADDED
@@ -0,0 +1,115 @@
1
+ import crypto from 'node:crypto';
2
+ import { TERMINAL_STATUSES } from './types.js';
3
+ const DEFAULT_BASE_URL = 'https://api.wiro.ai/v1';
4
+ const DEFAULT_POLL_INTERVAL = 3000;
5
+ const DEFAULT_TIMEOUT = 120000;
6
+ export class WiroClient {
7
+ apiKey;
8
+ apiSecret;
9
+ baseUrl;
10
+ authType;
11
+ constructor(apiKey, apiSecret, baseUrl) {
12
+ if (!apiKey)
13
+ throw new Error('WIRO_API_KEY is required');
14
+ this.apiKey = apiKey;
15
+ this.apiSecret = apiSecret;
16
+ this.baseUrl = baseUrl ?? DEFAULT_BASE_URL;
17
+ this.authType = apiSecret ? 'signature' : 'apikey-only';
18
+ }
19
+ getAuthHeaders() {
20
+ const headers = {
21
+ 'x-api-key': this.apiKey,
22
+ 'Content-Type': 'application/json',
23
+ };
24
+ if (this.authType === 'signature' && this.apiSecret) {
25
+ const nonce = Date.now().toString();
26
+ const signature = crypto
27
+ .createHmac('sha256', this.apiKey)
28
+ .update(this.apiSecret + nonce)
29
+ .digest('hex');
30
+ headers['x-signature'] = signature;
31
+ headers['x-nonce'] = nonce;
32
+ }
33
+ return headers;
34
+ }
35
+ async request(path, body) {
36
+ const url = `${this.baseUrl}${path}`;
37
+ const headers = this.getAuthHeaders();
38
+ const response = await fetch(url, {
39
+ method: 'POST',
40
+ headers,
41
+ body: JSON.stringify(body),
42
+ });
43
+ const text = await response.text();
44
+ if (!response.ok) {
45
+ throw new Error(`Wiro API error ${response.status}: ${text}`);
46
+ }
47
+ try {
48
+ return JSON.parse(text);
49
+ }
50
+ catch {
51
+ throw new Error(`Invalid JSON response: ${text}`);
52
+ }
53
+ }
54
+ async searchModels(params = {}) {
55
+ return this.request('/Tool/List', {
56
+ start: String(params.start ?? 0),
57
+ limit: String(params.limit ?? 20),
58
+ search: params.search ?? '',
59
+ categories: params.categories ?? [],
60
+ hideworkflows: true,
61
+ summary: true,
62
+ });
63
+ }
64
+ async getModelSchema(model) {
65
+ const [cleanslugowner, ...rest] = model.split('/');
66
+ const cleanslugproject = rest.join('/');
67
+ if (!cleanslugowner || !cleanslugproject) {
68
+ throw new Error('Model must be in "owner/model" format, e.g. "openai/sora-2"');
69
+ }
70
+ return this.request('/Tool/Detail', {
71
+ slugowner: cleanslugowner,
72
+ slugproject: cleanslugproject,
73
+ });
74
+ }
75
+ async runModel(model, params) {
76
+ const [cleanslugowner, ...rest] = model.split('/');
77
+ const cleanslugproject = rest.join('/');
78
+ if (!cleanslugowner || !cleanslugproject) {
79
+ throw new Error('Model must be in "owner/model" format, e.g. "openai/sora-2"');
80
+ }
81
+ return this.request(`/Run/${cleanslugowner}/${cleanslugproject}`, params);
82
+ }
83
+ async getTask(opts) {
84
+ if (!opts.tasktoken && !opts.taskid) {
85
+ throw new Error('Either tasktoken or taskid is required');
86
+ }
87
+ const body = {};
88
+ if (opts.tasktoken)
89
+ body.tasktoken = opts.tasktoken;
90
+ if (opts.taskid)
91
+ body.taskid = opts.taskid;
92
+ return this.request('/Task/Detail', body);
93
+ }
94
+ async cancelTask(tasktoken) {
95
+ return this.request('/Task/Cancel', { tasktoken });
96
+ }
97
+ async killTask(tasktoken) {
98
+ return this.request('/Task/Kill', { tasktoken });
99
+ }
100
+ async waitForTask(tasktoken, timeoutMs = DEFAULT_TIMEOUT) {
101
+ const deadline = Date.now() + timeoutMs;
102
+ while (Date.now() < deadline) {
103
+ const detail = await this.getTask({ tasktoken });
104
+ const task = detail.tasklist?.[0];
105
+ if (task) {
106
+ if (TERMINAL_STATUSES.includes(task.status)) {
107
+ return detail;
108
+ }
109
+ }
110
+ await new Promise(resolve => setTimeout(resolve, DEFAULT_POLL_INTERVAL));
111
+ }
112
+ throw new Error(`Task timed out after ${timeoutMs / 1000} seconds`);
113
+ }
114
+ }
115
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { WiroClient } from './client.js';
4
+ import { createMcpServer } from './server.js';
5
+ const apiKey = process.env['WIRO_API_KEY'];
6
+ const apiSecret = process.env['WIRO_API_SECRET'];
7
+ const baseUrl = process.env['WIRO_API_BASE_URL'];
8
+ if (!apiKey) {
9
+ console.error('Error: WIRO_API_KEY environment variable is required.\n\n' +
10
+ 'Set it in your MCP server config:\n\n' +
11
+ ' "env": {\n' +
12
+ ' "WIRO_API_KEY": "your-api-key",\n' +
13
+ ' "WIRO_API_SECRET": "your-api-secret"\n' +
14
+ ' }\n\n' +
15
+ 'Get your API keys at https://wiro.ai/panel/project/new\n\n' +
16
+ 'WIRO_API_SECRET is optional (required for signature auth, not needed for API Key Only auth).');
17
+ process.exit(1);
18
+ }
19
+ const client = new WiroClient(apiKey, apiSecret, baseUrl);
20
+ const server = createMcpServer(client);
21
+ const transport = new StdioServerTransport();
22
+ await server.connect(transport);
23
+ console.error(`Wiro MCP server running on stdio (auth: ${client.authType})`);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,KAAK,CACX,2DAA2D;QAC3D,uCAAuC;QACvC,cAAc;QACd,uCAAuC;QACvC,4CAA4C;QAC5C,SAAS;QACT,4DAA4D;QAC5D,8FAA8F,CAC/F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,KAAK,CAAC,2CAA2C,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { WiroClient } from './client.js';
3
+ export { WiroClient } from './client.js';
4
+ export { registerTools } from './tools/index.js';
5
+ export type { WiroCredentials } from './types.js';
6
+ export declare function createMcpServer(client: WiroClient): McpServer;
7
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAS7D"}
package/dist/server.js ADDED
@@ -0,0 +1,13 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { registerTools } from './tools/index.js';
3
+ export { WiroClient } from './client.js';
4
+ export { registerTools } from './tools/index.js';
5
+ export function createMcpServer(client) {
6
+ const server = new McpServer({
7
+ name: 'wiro-mcp-server',
8
+ version: '1.0.0',
9
+ });
10
+ registerTools(server, client);
11
+ return server;
12
+ }
13
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerCancelTask(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=cancel-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel-task.d.ts","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAqB9E"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export function registerCancelTask(server, client) {
3
+ server.tool('cancel_task', 'Cancel a task that is still in the queue (before worker assignment). Tasks already running cannot be cancelled — use kill_task instead.', {
4
+ tasktoken: z.string().describe('The task token to cancel'),
5
+ }, async ({ tasktoken }) => {
6
+ try {
7
+ await client.cancelTask(tasktoken);
8
+ return {
9
+ content: [{ type: 'text', text: `Task cancelled successfully.` }],
10
+ };
11
+ }
12
+ catch (error) {
13
+ return {
14
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
15
+ isError: true,
16
+ };
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=cancel-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel-task.js","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yIAAyI,EACzI;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;aAC3E,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerGetModelSchema(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=get-model-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-model-schema.d.ts","sourceRoot":"","sources":["../../src/tools/get-model-schema.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,CAgClF"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import { formatModelSchema } from '../utils/format.js';
3
+ export function registerGetModelSchema(server, client) {
4
+ server.tool('get_model_schema', 'Get the full parameter schema for a specific model. Shows parameter names, types, options, defaults, and required fields. Use this before run_model to understand what parameters a model accepts.', {
5
+ model: z.string().describe('Model slug in "owner/model" format, e.g. "openai/sora-2", "black-forest-labs/flux-2-pro"'),
6
+ }, async ({ model }) => {
7
+ try {
8
+ const result = await client.getModelSchema(model);
9
+ const modelData = result.tool?.[0];
10
+ if (!result.result || !modelData) {
11
+ return {
12
+ content: [{ type: 'text', text: `Model "${model}" not found.` }],
13
+ isError: true,
14
+ };
15
+ }
16
+ const text = formatModelSchema(modelData);
17
+ return {
18
+ content: [{ type: 'text', text }],
19
+ };
20
+ }
21
+ catch (error) {
22
+ return {
23
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
24
+ isError: true,
25
+ };
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=get-model-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-model-schema.js","sourceRoot":"","sources":["../../src/tools/get-model-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAkB;IAC1E,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oMAAoM,EACpM;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0FAA0F,CAAC;KACvH,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAElD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,cAAc,EAAE,CAAC;oBACzE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAE1C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerGetTask(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=get-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.d.ts","sourceRoot":"","sources":["../../src/tools/get-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsC3E"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import { formatTaskResult } from '../utils/format.js';
3
+ export function registerGetTask(server, client) {
4
+ server.tool('get_task', 'Get the current status and output of a task. Returns status, outputs, cost, and elapsed time. Check pexit for success ("0") or failure.', {
5
+ tasktoken: z.string().optional().describe('The task token returned from run_model'),
6
+ taskid: z.string().optional().describe('The task ID (alternative to tasktoken)'),
7
+ }, async ({ tasktoken, taskid }) => {
8
+ try {
9
+ if (!tasktoken && !taskid) {
10
+ return {
11
+ content: [{ type: 'text', text: '## Error\n\nEither `tasktoken` or `taskid` is required.' }],
12
+ isError: true,
13
+ };
14
+ }
15
+ const detail = await client.getTask({ tasktoken, taskid });
16
+ const task = detail.tasklist?.[0];
17
+ if (!task) {
18
+ return {
19
+ content: [{ type: 'text', text: '## Error\n\nTask not found.' }],
20
+ isError: true,
21
+ };
22
+ }
23
+ return {
24
+ content: [{ type: 'text', text: formatTaskResult(task) }],
25
+ };
26
+ }
27
+ catch (error) {
28
+ return {
29
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
30
+ isError: true,
31
+ };
32
+ }
33
+ });
34
+ }
35
+ //# sourceMappingURL=get-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../src/tools/get-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAkB;IACnE,MAAM,CAAC,IAAI,CACT,UAAU,EACV,yIAAyI,EACzI;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACnF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC;oBACrG,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;oBACzE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;aACnE,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"}
@@ -0,0 +1,11 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ import { registerSearchModels } from './search-models.js';
4
+ import { registerGetModelSchema } from './get-model-schema.js';
5
+ import { registerRunModel } from './run-model.js';
6
+ import { registerGetTask } from './get-task.js';
7
+ import { registerCancelTask } from './cancel-task.js';
8
+ import { registerKillTask } from './kill-task.js';
9
+ export declare function registerTools(server: McpServer, client: WiroClient): void;
10
+ export { registerSearchModels, registerGetModelSchema, registerRunModel, registerGetTask, registerCancelTask, registerKillTask, };
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAOzE;AAED,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { registerSearchModels } from './search-models.js';
2
+ import { registerGetModelSchema } from './get-model-schema.js';
3
+ import { registerRunModel } from './run-model.js';
4
+ import { registerGetTask } from './get-task.js';
5
+ import { registerCancelTask } from './cancel-task.js';
6
+ import { registerKillTask } from './kill-task.js';
7
+ export function registerTools(server, client) {
8
+ registerSearchModels(server, client);
9
+ registerGetModelSchema(server, client);
10
+ registerRunModel(server, client);
11
+ registerGetTask(server, client);
12
+ registerCancelTask(server, client);
13
+ registerKillTask(server, client);
14
+ }
15
+ export { registerSearchModels, registerGetModelSchema, registerRunModel, registerGetTask, registerCancelTask, registerKillTask, };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAkB;IACjE,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerKillTask(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=kill-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-task.d.ts","sourceRoot":"","sources":["../../src/tools/kill-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAqB5E"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export function registerKillTask(server, client) {
3
+ server.tool('kill_task', 'Kill a task that is currently running (after worker assignment). For queued tasks, use cancel_task instead.', {
4
+ tasktoken: z.string().describe('The task token to kill'),
5
+ }, async ({ tasktoken }) => {
6
+ try {
7
+ await client.killTask(tasktoken);
8
+ return {
9
+ content: [{ type: 'text', text: `Task killed successfully.` }],
10
+ };
11
+ }
12
+ catch (error) {
13
+ return {
14
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
15
+ isError: true,
16
+ };
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=kill-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-task.js","sourceRoot":"","sources":["../../src/tools/kill-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAkB;IACpE,MAAM,CAAC,IAAI,CACT,WAAW,EACX,6GAA6G,EAC7G;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;aACxE,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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerRunModel(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=run-model.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { formatTaskResult } from '../utils/format.js';
3
+ 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. Common: prompt, negativePrompt, width, height, aspectRatio'),
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 }) => {
13
+ try {
14
+ const runResult = await client.runModel(model, params);
15
+ if (!runResult.result) {
16
+ const errors = runResult.errors?.map(e => e.message).join(', ') || 'Unknown error';
17
+ return {
18
+ content: [{ type: 'text', text: `## Error\n\nFailed to run model: ${errors}` }],
19
+ isError: true,
20
+ };
21
+ }
22
+ if (!wait) {
23
+ return {
24
+ content: [{
25
+ 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.`,
30
+ }],
31
+ };
32
+ }
33
+ const detail = await client.waitForTask(runResult.socketaccesstoken, timeout_seconds * 1000);
34
+ const task = detail.tasklist?.[0];
35
+ if (!task) {
36
+ return {
37
+ content: [{ type: 'text', text: '## Error\n\nNo task data returned.' }],
38
+ isError: true,
39
+ };
40
+ }
41
+ return {
42
+ content: [{ type: 'text', text: formatTaskResult(task) }],
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
48
+ isError: true,
49
+ };
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=run-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-model.js","sourceRoot":"","sources":["../../src/tools/run-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerSearchModels(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=search-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-models.d.ts","sourceRoot":"","sources":["../../src/tools/search-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkChF"}
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ import { formatModelList } from '../utils/format.js';
3
+ export function registerSearchModels(server, client) {
4
+ server.tool('search_models', 'Search and browse AI models on Wiro. Returns model names, slugs, descriptions, and categories. Use this to discover available models before running them.', {
5
+ search: z.string().optional().describe('Search keyword, e.g. "flux", "video generation", "upscale"'),
6
+ categories: z.array(z.string()).optional().describe('Filter by categories, e.g. ["text-to-image", "text-to-video", "llm"]'),
7
+ start: z.number().int().min(0).optional().describe('Pagination offset (default 0)'),
8
+ limit: z.number().int().min(1).max(100).optional().describe('Max results to return (default 20, max 100)'),
9
+ }, async ({ search, categories, start, limit }) => {
10
+ try {
11
+ const result = await client.searchModels({ search, categories, start, limit });
12
+ if (!result.result || !result.tool?.length) {
13
+ return {
14
+ content: [{ type: 'text', text: 'No models found matching your criteria.' }],
15
+ };
16
+ }
17
+ const text = formatModelList(result.tool);
18
+ const total = result.total ? `\n\n*Total available: ${result.total}*` : '';
19
+ return {
20
+ content: [{ type: 'text', text: text + total }],
21
+ };
22
+ }
23
+ catch (error) {
24
+ return {
25
+ content: [{ type: 'text', text: `## Error\n\n${error instanceof Error ? error.message : String(error)}` }],
26
+ isError: true,
27
+ };
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=search-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-models.js","sourceRoot":"","sources":["../../src/tools/search-models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAkB;IACxE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2JAA2J,EAC3J;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;QACpG,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;QAC3H,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KAC3G,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/E,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC3C,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;iBACtF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAE3E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC;aACzD,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"}
@@ -0,0 +1,110 @@
1
+ export interface WiroCredentials {
2
+ apiKey: string;
3
+ apiSecret?: string;
4
+ }
5
+ export interface SearchModelsParams {
6
+ search?: string;
7
+ categories?: string[];
8
+ start?: number;
9
+ limit?: number;
10
+ }
11
+ export interface RunModelResult {
12
+ result: boolean;
13
+ errors: Array<{
14
+ message: string;
15
+ }>;
16
+ taskid: string;
17
+ socketaccesstoken: string;
18
+ }
19
+ export interface TaskOutput {
20
+ name: string;
21
+ contenttype: string;
22
+ size: string;
23
+ url: string;
24
+ }
25
+ export interface Task {
26
+ id: string;
27
+ socketaccesstoken: string;
28
+ parameters: Record<string, unknown>;
29
+ status: string;
30
+ pexit: string;
31
+ debugoutput: string;
32
+ starttime: string;
33
+ endtime: string;
34
+ elapsedseconds: string;
35
+ totalcost: string;
36
+ outputs: TaskOutput[];
37
+ modeldescription?: string;
38
+ }
39
+ export interface TaskDetailResponse {
40
+ result: boolean;
41
+ errors: Array<{
42
+ message: string;
43
+ }>;
44
+ total: string;
45
+ tasklist: Task[];
46
+ }
47
+ export interface ToolParameterItem {
48
+ id: string;
49
+ type: string;
50
+ label: string;
51
+ description?: string;
52
+ default?: string;
53
+ required?: boolean;
54
+ placeholder?: string;
55
+ note?: string;
56
+ options?: Array<{
57
+ label: string;
58
+ value: string;
59
+ }>;
60
+ min?: number;
61
+ max?: number;
62
+ step?: number;
63
+ }
64
+ export interface ToolParameterGroup {
65
+ title: string;
66
+ items: ToolParameterItem[];
67
+ }
68
+ export interface ToolListItem {
69
+ id: string;
70
+ title: string;
71
+ slugowner: string;
72
+ slugproject: string;
73
+ cleanslugowner: string;
74
+ cleanslugproject: string;
75
+ description: string;
76
+ seodescription: string;
77
+ categories: string[];
78
+ image: string;
79
+ computingtime?: string;
80
+ parameters: ToolParameterGroup[] | null;
81
+ readme?: string;
82
+ samples?: string[];
83
+ tags?: string[];
84
+ marketplace?: number;
85
+ dynamicprice?: string;
86
+ seotitle?: string;
87
+ taskstat?: {
88
+ runcount: number;
89
+ successcount: string;
90
+ errorcount: string;
91
+ lastruntime: string;
92
+ };
93
+ }
94
+ export interface ToolListResponse {
95
+ result: boolean;
96
+ errors: Array<{
97
+ message: string;
98
+ }>;
99
+ total: number | string;
100
+ tool: ToolListItem[];
101
+ }
102
+ export interface ToolDetailResponse {
103
+ result: boolean;
104
+ errors: Array<{
105
+ message: string;
106
+ }>;
107
+ tool: ToolListItem[];
108
+ }
109
+ export declare const TERMINAL_STATUSES: readonly ["task_postprocess_end", "task_cancel"];
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ export const TERMINAL_STATUSES = [
2
+ 'task_postprocess_end',
3
+ 'task_cancel',
4
+ ];
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA4GA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,sBAAsB;IACtB,aAAa;CACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Task, ToolListItem } from '../types.js';
2
+ export declare function formatTaskResult(task: Task): string;
3
+ export declare function formatModelList(models: ToolListItem[]): string;
4
+ export declare function formatModelSchema(model: ToolListItem): string;
5
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAuCnD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAkB9D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAiD7D"}
@@ -0,0 +1,111 @@
1
+ export function formatTaskResult(task) {
2
+ const lines = [];
3
+ lines.push(`## Task Result`);
4
+ lines.push('');
5
+ lines.push(`**Status:** ${task.status}`);
6
+ lines.push(`**Task ID:** ${task.id}`);
7
+ if (task.pexit === '0') {
8
+ lines.push(`**Result:** Success`);
9
+ }
10
+ else if (task.pexit) {
11
+ lines.push(`**Result:** Failed (exit code: ${task.pexit})`);
12
+ }
13
+ if (task.elapsedseconds) {
14
+ lines.push(`**Duration:** ${task.elapsedseconds}s`);
15
+ }
16
+ if (task.totalcost && task.totalcost !== '0') {
17
+ lines.push(`**Cost:** $${task.totalcost}`);
18
+ }
19
+ if (task.debugoutput) {
20
+ lines.push('');
21
+ lines.push('### Response');
22
+ lines.push('');
23
+ lines.push(task.debugoutput);
24
+ }
25
+ if (task.outputs?.length > 0) {
26
+ lines.push('');
27
+ lines.push('### Outputs');
28
+ lines.push('');
29
+ for (const output of task.outputs) {
30
+ lines.push(`- **${output.name}** (${output.contenttype}, ${formatSize(output.size)})`);
31
+ lines.push(` ${output.url}`);
32
+ }
33
+ }
34
+ return lines.join('\n');
35
+ }
36
+ export function formatModelList(models) {
37
+ if (models.length === 0)
38
+ return 'No models found.';
39
+ const lines = [];
40
+ lines.push(`## Models (${models.length} results)`);
41
+ lines.push('');
42
+ for (const model of models) {
43
+ const slug = `${model.cleanslugowner}/${model.cleanslugproject}`;
44
+ const cats = model.categories?.filter(c => c !== 'tool').join(', ') || '';
45
+ lines.push(`### ${model.title}`);
46
+ lines.push(`- **Model:** \`${slug}\``);
47
+ if (cats)
48
+ lines.push(`- **Categories:** ${cats}`);
49
+ if (model.seodescription)
50
+ lines.push(`- **Description:** ${model.seodescription}`);
51
+ lines.push('');
52
+ }
53
+ return lines.join('\n');
54
+ }
55
+ export function formatModelSchema(model) {
56
+ const lines = [];
57
+ const slug = `${model.cleanslugowner}/${model.cleanslugproject}`;
58
+ lines.push(`## ${model.title}`);
59
+ lines.push(`**Model:** \`${slug}\``);
60
+ if (model.seodescription)
61
+ lines.push(`**Description:** ${model.seodescription}`);
62
+ const cats = model.categories?.filter(c => c !== 'tool').join(', ') || '';
63
+ if (cats)
64
+ lines.push(`**Categories:** ${cats}`);
65
+ lines.push('');
66
+ if (model.parameters && model.parameters.length > 0) {
67
+ lines.push('### Parameters');
68
+ lines.push('');
69
+ for (const group of model.parameters) {
70
+ if (group.title) {
71
+ lines.push(`#### ${group.title}`);
72
+ lines.push('');
73
+ }
74
+ for (const param of group.items) {
75
+ const required = param.required ? ' **(required)**' : '';
76
+ const defaultVal = param.default ? ` (default: \`${param.default}\`)` : '';
77
+ lines.push(`- **\`${param.id}\`** (${param.type})${required}${defaultVal}`);
78
+ if (param.label)
79
+ lines.push(` ${param.label}`);
80
+ if (param.note)
81
+ lines.push(` ${param.note}`);
82
+ if (param.options?.length) {
83
+ const optionValues = param.options.map(o => `\`${o.value}\``).join(', ');
84
+ lines.push(` Options: ${optionValues}`);
85
+ }
86
+ if (param.type === 'range' && param.min != null && param.max != null) {
87
+ lines.push(` Range: ${param.min} - ${param.max}${param.step ? `, step: ${param.step}` : ''}`);
88
+ }
89
+ }
90
+ lines.push('');
91
+ }
92
+ }
93
+ lines.push('### Usage');
94
+ lines.push('');
95
+ lines.push('Use `run_model` with this model:');
96
+ lines.push('```json');
97
+ lines.push(`{ "model": "${slug}", "params": { ... } }`);
98
+ lines.push('```');
99
+ return lines.join('\n');
100
+ }
101
+ function formatSize(sizeStr) {
102
+ const bytes = parseInt(sizeStr, 10);
103
+ if (isNaN(bytes))
104
+ return sizeStr;
105
+ if (bytes < 1024)
106
+ return `${bytes} B`;
107
+ if (bytes < 1024 * 1024)
108
+ return `${(bytes / 1024).toFixed(1)} KB`;
109
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
110
+ }
111
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@wiro-ai/wiro-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Official MCP server for Wiro AI — run 70+ AI models from Cursor, Claude, Windsurf, and any MCP-compatible AI assistant",
5
+ "type": "module",
6
+ "main": "dist/server.js",
7
+ "types": "dist/server.d.ts",
8
+ "bin": {
9
+ "wiro-mcp-server": "dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/server.d.ts",
14
+ "default": "./dist/server.js"
15
+ },
16
+ "./client": {
17
+ "types": "./dist/client.d.ts",
18
+ "default": "./dist/client.js"
19
+ },
20
+ "./tools": {
21
+ "types": "./dist/tools/index.d.ts",
22
+ "default": "./dist/tools/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "LICENSE"
28
+ ],
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "clean": "rm -rf dist",
32
+ "prepublishOnly": "npm run clean && npm run build"
33
+ },
34
+ "keywords": [
35
+ "wiro",
36
+ "ai",
37
+ "mcp",
38
+ "model-context-protocol",
39
+ "cursor",
40
+ "claude",
41
+ "windsurf",
42
+ "image-generation",
43
+ "video-generation",
44
+ "llm"
45
+ ],
46
+ "author": "Wiro AI",
47
+ "license": "MIT",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/wiroai/Wiro-MCP.git"
51
+ },
52
+ "homepage": "https://wiro.ai",
53
+ "engines": {
54
+ "node": ">=18.0.0"
55
+ },
56
+ "dependencies": {
57
+ "@modelcontextprotocol/sdk": "^1.12.0",
58
+ "zod": "^3.23.0"
59
+ },
60
+ "devDependencies": {
61
+ "typescript": "^5.7.0",
62
+ "@types/node": "^22.0.0"
63
+ }
64
+ }