@tokenlabai/mcp-server 0.4.2 → 0.5.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 CHANGED
@@ -4,22 +4,33 @@
4
4
  [![npm](https://img.shields.io/npm/v/%40tokenlabai%2Fmcp-server)](https://www.npmjs.com/package/@tokenlabai/mcp-server)
5
5
  [![npm downloads](https://img.shields.io/npm/dm/%40tokenlabai%2Fmcp-server)](https://www.npmjs.com/package/@tokenlabai/mcp-server)
6
6
 
7
- OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, multimodal generation, async tasks, files, embeddings, rerank, translation, and the broader developer API.
7
+ OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, multimodal generation, async tasks, files, embeddings, rerank, translation, resources, prompts, and the broader developer API.
8
8
 
9
9
  It exposes public catalog tools for agents that need to choose models, inspect supported request formats, or compare pricing before calling TokenLab APIs. Credentialed tools cover text inference, image generation and editing, video, music, 3D, async task polling, embeddings, rerank, and text translation.
10
10
 
11
11
  ## Generated Tool Profiles
12
12
 
13
- The checked-in `generated/tools.json` manifest is generated from TokenLab's public OpenAPI document plus the small MCP-only overlay in `contract/mcp-overlay.json`. Version 0.4.2 generates 76 endpoint tools; two composite discovery tools are registered at runtime.
13
+ The checked-in `generated/tools.json` manifest is generated from TokenLab's public OpenAPI document plus the small MCP-only overlay in `contract/mcp-overlay.json`. Version 0.5.0 generates 76 endpoint tools; two composite discovery tools are registered at runtime.
14
14
 
15
15
  | Profile | Endpoint tools | Coverage |
16
16
  | --- | ---: | --- |
17
+ | `catalog` | 4 | Public model discovery and pricing only; no API key required |
17
18
  | `core` (default) | 29 | Catalog and pricing; Chat Completions, Responses, Anthropic Messages, Gemini generateContent; images, video, music, 3D, speech and transcription; async tasks; files; embeddings, rerank, and translation |
18
19
  | `full` | 76 | Every allowlisted developer API operation in the checked-in OpenAPI snapshot, including core plus response lifecycle, batches, worlds, and native model discovery |
19
20
 
20
- Both profiles also include `compare_models` and `get_api_overview`. Realtime and streaming-only operations are excluded because stdio MCP tool calls return one final result. API operations that accept `stream` constrain it to `false` in the MCP overlay, and the Gemini query-string API key is intentionally hidden from tool arguments.
21
+ All profiles also include `compare_models` and `get_api_overview`, producing totals of 6, 31, and 78 tools. Realtime and streaming-only operations are excluded because stdio MCP tool calls return one final result. API operations that accept `stream` constrain it to `false` in the MCP overlay, and the Gemini query-string API key is intentionally hidden from tool arguments.
21
22
 
22
- Set `TOKENLAB_MCP_TOOL_PROFILE=full` to expose the full profile. Tool names, descriptions, input JSON Schemas, HTTP bindings, content types, auth requirements, and task behavior can be inspected in [`generated/tools.json`](./generated/tools.json).
23
+ Set `TOKENLAB_MCP_TOOL_PROFILE=catalog` for the smallest public-only tool list or `TOKENLAB_MCP_TOOL_PROFILE=full` for the broad developer API. Tool names, descriptions, input JSON Schemas, HTTP bindings, content types, auth requirements, and task behavior can be inspected in [`generated/tools.json`](./generated/tools.json).
24
+
25
+ The smaller [`generated/public-contract.json`](./generated/public-contract.json) is the machine-readable projection used by TokenLab's website and other public consumers. It contains package identity, profile counts, core tool layers, resources, prompts, and source hashes without copying all endpoint schemas.
26
+
27
+ ## Native MCP Features
28
+
29
+ - JSON tool responses include `structuredContent` while retaining serialized text for older clients.
30
+ - Generated tools expose human-readable titles, standard read-only/destructive/idempotent/open-world annotations, auth/profile metadata, and response request IDs when available.
31
+ - Three resources expose the live API overview, the package's OpenAPI snapshot, and the compact MCP public contract.
32
+ - `choose_tokenlab_model` and `build_tokenlab_request` prompts guide agents to use live model truth and preserve native endpoint shapes.
33
+ - Server instructions tell clients to confirm billable or destructive operations and treat external model/API output as untrusted content.
23
34
 
24
35
  ## Run
25
36
 
@@ -91,7 +102,7 @@ Use `delivery.mode` instead of assuming all image requests are synchronous. For
91
102
 
92
103
  - `TOKENLAB_API_BASE`: optional, defaults to `https://api.tokenlab.sh`
93
104
  - `TOKENLAB_API_KEY`: optional; required for text inference, multimodal generation, async task, embedding, rerank, and translation tools
94
- - `TOKENLAB_MCP_TOOL_PROFILE`: optional, `core` (default) or `full`
105
+ - `TOKENLAB_MCP_TOOL_PROFILE`: optional, `catalog`, `core` (default), or `full`
95
106
  - `TOKENLAB_REQUEST_TIMEOUT_MS`: optional request timeout in milliseconds, defaults to `120000`
96
107
  - `TOKENLAB_MCP_MAX_FILE_BYTES`: optional maximum local upload size per file, defaults to `104857600` (100 MiB)
97
108
  - `TOKENLAB_MCP_INLINE_BYTES`: optional maximum binary/JSON response size returned inline, defaults to `2097152` (2 MiB)
@@ -99,7 +110,7 @@ Use `delivery.mode` instead of assuming all image requests are synchronous. For
99
110
 
100
111
  ## Contract Sync
101
112
 
102
- The public OpenAPI document is the API contract source. The overlay contains only MCP-specific choices: profile exposure, stable tool aliases, secret omission, non-streaming constraints, content-type variants, and async task semantics.
113
+ The public OpenAPI document is the API contract source. The overlay contains only MCP-specific choices: profile exposure, stable tool aliases, secret omission, non-streaming constraints, content-type variants, async task semantics, and the compact public projection consumed by the website and docs gates.
103
114
 
104
115
  ```bash
105
116
  npm run contract:sync # fetch OpenAPI and regenerate the manifest
@@ -115,21 +126,25 @@ This repository includes `server.json` for the official MCP Registry.
115
126
 
116
127
  Release metadata:
117
128
 
118
- - npm package: `@tokenlabai/mcp-server@0.4.2`
129
+ - npm package: `@tokenlabai/mcp-server@0.5.0`
119
130
  - MCP registry name: `io.github.hedging8563/tokenlab`
120
131
  - `package.json.mcpName`: `io.github.hedging8563/tokenlab`
121
132
 
122
133
  For a new release:
123
134
 
124
135
  1. Bump the matching versions in `package.json`, `package-lock.json`, and `server.json`.
125
- 2. Push a matching tag such as `v0.4.2`.
136
+ 2. Push a matching tag such as `v0.5.0`.
126
137
  3. The publish workflow tests and publishes npm through trusted publishing, then publishes the MCP Registry entry through GitHub Actions OIDC.
127
138
 
128
139
  The same workflow can be run manually from `main` to republish only the current MCP Registry metadata. No npm or MCP Registry token is stored in GitHub.
129
140
 
141
+ ## Security
142
+
143
+ Use the `catalog` profile when no credentialed tools are needed. Keep `TOKENLAB_API_KEY` in the local MCP client's secret environment, enable human confirmation for billable and destructive calls, and review tool annotations before granting persistent approval. Do not send a TokenLab API key to an untrusted hosted MCP server.
144
+
130
145
  ## Links
131
146
 
132
- - Website: https://tokenlab.sh
147
+ - Website: https://tokenlab.sh/mcp
133
148
  - Docs: https://docs.tokenlab.sh
134
149
  - OpenAPI: https://docs.tokenlab.sh/openapi.json
135
150
  - Model catalog: https://api.tokenlab.sh/v1/models
@@ -3,6 +3,14 @@
3
3
  "openapi_url": "https://docs.tokenlab.sh/openapi.json",
4
4
  "default_profile": "core",
5
5
  "profiles": {
6
+ "catalog": {
7
+ "operations": [
8
+ "listModels",
9
+ "getModel",
10
+ "getModelPricing",
11
+ "getPricing"
12
+ ]
13
+ },
6
14
  "core": {
7
15
  "operations": [
8
16
  "listModels",
@@ -57,6 +65,96 @@
57
65
  ]
58
66
  }
59
67
  },
68
+ "public_contract": {
69
+ "landing_url": "https://tokenlab.sh/mcp",
70
+ "docs_url": "https://docs.tokenlab.sh/integrations/tokenlab-mcp-server",
71
+ "recommended_client_name": "tokenlab",
72
+ "composite_tools": [
73
+ {
74
+ "name": "compare_models",
75
+ "profiles": ["catalog", "core", "full"],
76
+ "auth": "optional",
77
+ "annotations": {
78
+ "readOnlyHint": true,
79
+ "destructiveHint": false,
80
+ "idempotentHint": true,
81
+ "openWorldHint": true
82
+ }
83
+ },
84
+ {
85
+ "name": "get_api_overview",
86
+ "profiles": ["catalog", "core", "full"],
87
+ "auth": "optional",
88
+ "annotations": {
89
+ "readOnlyHint": true,
90
+ "destructiveHint": false,
91
+ "idempotentHint": true,
92
+ "openWorldHint": true
93
+ }
94
+ }
95
+ ],
96
+ "core_tool_layers": [
97
+ {
98
+ "id": "discover",
99
+ "authentication": "none",
100
+ "tool_rows": [
101
+ ["list_models", "get_model", "get_pricing"],
102
+ ["get_model_pricing", "compare_models", "get_api_overview"]
103
+ ]
104
+ },
105
+ {
106
+ "id": "create",
107
+ "authentication": "api_key",
108
+ "tool_rows": [
109
+ ["create_chat_completion", "create_response", "create_anthropic_message", "create_gemini_content"],
110
+ ["create_image", "create_image_file", "edit_image", "edit_image_file"],
111
+ ["create_video", "create_music", "create_3d_model", "create_speech", "transcribe_audio", "translate_audio"]
112
+ ]
113
+ },
114
+ {
115
+ "id": "operate",
116
+ "authentication": "api_key",
117
+ "tool_rows": [
118
+ ["upload_file", "list_files", "retrieve_file"],
119
+ ["retrieve_file_content", "delete_file", "get_task_status", "cancel_task"],
120
+ ["create_embedding", "create_multimodal_embedding", "rerank_documents", "translate_text"]
121
+ ]
122
+ }
123
+ ],
124
+ "resources": [
125
+ {
126
+ "name": "tokenlab-api-overview",
127
+ "title": "TokenLab API Overview",
128
+ "uri": "tokenlab://api/overview",
129
+ "mime_type": "text/plain",
130
+ "freshness": "live"
131
+ },
132
+ {
133
+ "name": "tokenlab-openapi-contract",
134
+ "title": "TokenLab OpenAPI Contract",
135
+ "uri": "tokenlab://contract/openapi",
136
+ "mime_type": "application/json",
137
+ "freshness": "package_snapshot"
138
+ },
139
+ {
140
+ "name": "tokenlab-mcp-public-contract",
141
+ "title": "TokenLab MCP Public Contract",
142
+ "uri": "tokenlab://contract/mcp",
143
+ "mime_type": "application/json",
144
+ "freshness": "package_snapshot"
145
+ }
146
+ ],
147
+ "prompts": [
148
+ {
149
+ "name": "choose_tokenlab_model",
150
+ "title": "Choose a TokenLab Model"
151
+ },
152
+ {
153
+ "name": "build_tokenlab_request",
154
+ "title": "Build a TokenLab Request"
155
+ }
156
+ ]
157
+ },
60
158
  "public_auth_operations": [
61
159
  "listModels",
62
160
  "getModel",
@@ -64,6 +162,22 @@
64
162
  "getPricing"
65
163
  ],
66
164
  "operation_overrides": {
165
+ "cancelAnthropicMessageBatch": {
166
+ "annotations": {
167
+ "readOnlyHint": false,
168
+ "destructiveHint": true,
169
+ "idempotentHint": true,
170
+ "openWorldHint": true
171
+ }
172
+ },
173
+ "cancelBatch": {
174
+ "annotations": {
175
+ "readOnlyHint": false,
176
+ "destructiveHint": true,
177
+ "idempotentHint": true,
178
+ "openWorldHint": true
179
+ }
180
+ },
67
181
  "createAnthropicMessage": {
68
182
  "tool_name": "create_anthropic_message",
69
183
  "input_property_overrides": {
@@ -117,6 +117,34 @@
117
117
  "stream": true
118
118
  }
119
119
  },
120
+ "live_translation": {
121
+ "summary": "Stream audio translation",
122
+ "value": {
123
+ "model": "qwen3-livetranslate-flash",
124
+ "messages": [
125
+ {
126
+ "role": "user",
127
+ "content": [
128
+ {
129
+ "type": "input_audio",
130
+ "input_audio": {
131
+ "data": "https://example.com/sample.wav",
132
+ "format": "wav"
133
+ }
134
+ }
135
+ ]
136
+ }
137
+ ],
138
+ "translation_options": {
139
+ "source_lang": "zh",
140
+ "target_lang": "en"
141
+ },
142
+ "modalities": [
143
+ "text"
144
+ ],
145
+ "stream": true
146
+ }
147
+ },
120
148
  "function_calling": {
121
149
  "summary": "Function calling",
122
150
  "value": {
@@ -6520,7 +6548,7 @@
6520
6548
  },
6521
6549
  "top_k": {
6522
6550
  "type": "integer",
6523
- "minimum": 1,
6551
+ "minimum": 0,
6524
6552
  "description": "Top-k sampling cutoff for compatible providers."
6525
6553
  },
6526
6554
  "logit_bias": {
@@ -6542,6 +6570,35 @@
6542
6570
  "additionalProperties": true,
6543
6571
  "description": "Audio output configuration when requesting audio modality."
6544
6572
  },
6573
+ "translation_options": {
6574
+ "type": "object",
6575
+ "required": [
6576
+ "target_lang"
6577
+ ],
6578
+ "properties": {
6579
+ "source_lang": {
6580
+ "type": "string",
6581
+ "description": "Source language code. Omit when the model supports automatic detection."
6582
+ },
6583
+ "target_lang": {
6584
+ "type": "string",
6585
+ "description": "Target language code."
6586
+ }
6587
+ },
6588
+ "description": "Language settings for models that translate audio or video through Chat Completions."
6589
+ },
6590
+ "speech_rate": {
6591
+ "type": "number",
6592
+ "minimum": 0.5,
6593
+ "maximum": 2,
6594
+ "description": "Speech rate for compatible translated audio output."
6595
+ },
6596
+ "repetition_penalty": {
6597
+ "type": "number",
6598
+ "minimum": 0,
6599
+ "exclusiveMinimum": true,
6600
+ "description": "Repetition penalty for compatible models."
6601
+ },
6545
6602
  "prediction": {
6546
6603
  "type": "object",
6547
6604
  "additionalProperties": true,
@@ -6634,6 +6691,62 @@
6634
6691
  "type",
6635
6692
  "image_url"
6636
6693
  ]
6694
+ },
6695
+ {
6696
+ "type": "object",
6697
+ "properties": {
6698
+ "type": {
6699
+ "type": "string",
6700
+ "enum": [
6701
+ "video_url"
6702
+ ]
6703
+ },
6704
+ "video_url": {
6705
+ "type": "object",
6706
+ "properties": {
6707
+ "url": {
6708
+ "type": "string"
6709
+ }
6710
+ },
6711
+ "required": [
6712
+ "url"
6713
+ ]
6714
+ }
6715
+ },
6716
+ "required": [
6717
+ "type",
6718
+ "video_url"
6719
+ ]
6720
+ },
6721
+ {
6722
+ "type": "object",
6723
+ "properties": {
6724
+ "type": {
6725
+ "type": "string",
6726
+ "enum": [
6727
+ "input_audio"
6728
+ ]
6729
+ },
6730
+ "input_audio": {
6731
+ "type": "object",
6732
+ "properties": {
6733
+ "data": {
6734
+ "type": "string",
6735
+ "description": "Public audio URL or Base64 data URL."
6736
+ },
6737
+ "format": {
6738
+ "type": "string"
6739
+ }
6740
+ },
6741
+ "required": [
6742
+ "data"
6743
+ ]
6744
+ }
6745
+ },
6746
+ "required": [
6747
+ "type",
6748
+ "input_audio"
6749
+ ]
6637
6750
  }
6638
6751
  ]
6639
6752
  }
@@ -0,0 +1,324 @@
1
+ {
2
+ "schema_version": 1,
3
+ "generated_at": null,
4
+ "asset": {
5
+ "id": "tokenlab-mcp-server",
6
+ "name": "@tokenlabai/mcp-server",
7
+ "title": "TokenLab MCP Server",
8
+ "version": "0.5.0",
9
+ "registry_name": "io.github.hedging8563/tokenlab",
10
+ "source_url": "https://github.com/hedging8563/tokenlab-mcp-server",
11
+ "landing_url": "https://tokenlab.sh/mcp",
12
+ "docs_url": "https://docs.tokenlab.sh/integrations/tokenlab-mcp-server",
13
+ "recommended_client_name": "tokenlab",
14
+ "transport": "stdio",
15
+ "command": "npx",
16
+ "args": [
17
+ "-y",
18
+ "@tokenlabai/mcp-server"
19
+ ],
20
+ "api_key_environment_variable": "TOKENLAB_API_KEY",
21
+ "tool_profile_environment_variable": "TOKENLAB_MCP_TOOL_PROFILE"
22
+ },
23
+ "source": {
24
+ "url": "https://docs.tokenlab.sh/openapi.json",
25
+ "openapi": "3.0.3",
26
+ "title": "TokenLab AI Gateway",
27
+ "version": "1.0.0",
28
+ "sha256": "f494fcfb2b4d67aaddc88a2ec164739c807bb59331a7e5270fd9d9fa282745e0",
29
+ "tool_manifest_sha256": "a2690dd92f5e7dbc47ce4fe25b327eaafd4848224f0e329bee0f1c2797c4521d"
30
+ },
31
+ "profiles": {
32
+ "catalog": {
33
+ "is_default": false,
34
+ "endpoint_tools": 4,
35
+ "composite_tools": 2,
36
+ "total_tools": 6,
37
+ "tool_names": [
38
+ "compare_models",
39
+ "get_api_overview",
40
+ "get_model",
41
+ "get_model_pricing",
42
+ "get_pricing",
43
+ "list_models"
44
+ ]
45
+ },
46
+ "core": {
47
+ "is_default": true,
48
+ "endpoint_tools": 29,
49
+ "composite_tools": 2,
50
+ "total_tools": 31,
51
+ "tool_names": [
52
+ "cancel_task",
53
+ "compare_models",
54
+ "create_3d_model",
55
+ "create_anthropic_message",
56
+ "create_chat_completion",
57
+ "create_embedding",
58
+ "create_gemini_content",
59
+ "create_image",
60
+ "create_image_file",
61
+ "create_multimodal_embedding",
62
+ "create_music",
63
+ "create_response",
64
+ "create_speech",
65
+ "create_video",
66
+ "delete_file",
67
+ "edit_image",
68
+ "edit_image_file",
69
+ "get_api_overview",
70
+ "get_model",
71
+ "get_model_pricing",
72
+ "get_pricing",
73
+ "get_task_status",
74
+ "list_files",
75
+ "list_models",
76
+ "rerank_documents",
77
+ "retrieve_file",
78
+ "retrieve_file_content",
79
+ "transcribe_audio",
80
+ "translate_audio",
81
+ "translate_text",
82
+ "upload_file"
83
+ ]
84
+ },
85
+ "full": {
86
+ "is_default": false,
87
+ "endpoint_tools": 76,
88
+ "composite_tools": 2,
89
+ "total_tools": 78,
90
+ "tool_names": [
91
+ "bind_seedance_visual_validation_result",
92
+ "cancel_anthropic_message_batch",
93
+ "cancel_batch",
94
+ "cancel_task",
95
+ "compact_response",
96
+ "compare_models",
97
+ "count_anthropic_message_tokens",
98
+ "create_3d_model",
99
+ "create_anthropic_message",
100
+ "create_anthropic_message_batch",
101
+ "create_batch",
102
+ "create_chat_completion",
103
+ "create_embedding",
104
+ "create_gemini_content",
105
+ "create_image",
106
+ "create_image_file",
107
+ "create_image_variation",
108
+ "create_multimodal_embedding",
109
+ "create_music",
110
+ "create_response",
111
+ "create_seedance_material_asset",
112
+ "create_seedance_material_asset_group",
113
+ "create_seedance_visual_validation_session",
114
+ "create_speech",
115
+ "create_video",
116
+ "create_volc_compatible_seedance_task",
117
+ "create_world",
118
+ "delete_anthropic_message_batch",
119
+ "delete_file",
120
+ "delete_response",
121
+ "delete_seedance_material_asset",
122
+ "delete_seedance_material_asset_group",
123
+ "delete_volc_compatible_seedance_task",
124
+ "delete_world",
125
+ "dispatch_volc_compatible_seedance_action_get",
126
+ "dispatch_volc_compatible_seedance_action_post",
127
+ "edit_image",
128
+ "edit_image_file",
129
+ "get_3_dtask",
130
+ "get_api_overview",
131
+ "get_gemini_model",
132
+ "get_image_task_status_alias",
133
+ "get_model",
134
+ "get_model_pricing",
135
+ "get_music_task",
136
+ "get_pricing",
137
+ "get_seedance_material_asset",
138
+ "get_seedance_material_asset_group",
139
+ "get_task_status",
140
+ "get_video_task",
141
+ "get_volc_compatible_seedance_task",
142
+ "get_world",
143
+ "get_world_media_asset",
144
+ "get_world_status",
145
+ "list_anthropic_message_batches",
146
+ "list_batches",
147
+ "list_files",
148
+ "list_gemini_models",
149
+ "list_models",
150
+ "list_seedance_material_asset_groups",
151
+ "list_seedance_material_assets",
152
+ "list_seedance_visual_validation_history",
153
+ "list_volc_compatible_seedance_tasks",
154
+ "list_worlds",
155
+ "prepare_world_media_asset_upload",
156
+ "rerank_documents",
157
+ "retrieve_anthropic_message_batch",
158
+ "retrieve_anthropic_message_batch_results",
159
+ "retrieve_batch",
160
+ "retrieve_file",
161
+ "retrieve_file_content",
162
+ "retrieve_response",
163
+ "transcribe_audio",
164
+ "translate_audio",
165
+ "translate_text",
166
+ "update_seedance_material_asset",
167
+ "update_seedance_material_asset_group",
168
+ "upload_file"
169
+ ]
170
+ }
171
+ },
172
+ "core_tool_layers": [
173
+ {
174
+ "id": "discover",
175
+ "authentication": "none",
176
+ "tool_rows": [
177
+ [
178
+ "list_models",
179
+ "get_model",
180
+ "get_pricing"
181
+ ],
182
+ [
183
+ "get_model_pricing",
184
+ "compare_models",
185
+ "get_api_overview"
186
+ ]
187
+ ],
188
+ "tool_count": 6
189
+ },
190
+ {
191
+ "id": "create",
192
+ "authentication": "api_key",
193
+ "tool_rows": [
194
+ [
195
+ "create_chat_completion",
196
+ "create_response",
197
+ "create_anthropic_message",
198
+ "create_gemini_content"
199
+ ],
200
+ [
201
+ "create_image",
202
+ "create_image_file",
203
+ "edit_image",
204
+ "edit_image_file"
205
+ ],
206
+ [
207
+ "create_video",
208
+ "create_music",
209
+ "create_3d_model",
210
+ "create_speech",
211
+ "transcribe_audio",
212
+ "translate_audio"
213
+ ]
214
+ ],
215
+ "tool_count": 14
216
+ },
217
+ {
218
+ "id": "operate",
219
+ "authentication": "api_key",
220
+ "tool_rows": [
221
+ [
222
+ "upload_file",
223
+ "list_files",
224
+ "retrieve_file"
225
+ ],
226
+ [
227
+ "retrieve_file_content",
228
+ "delete_file",
229
+ "get_task_status",
230
+ "cancel_task"
231
+ ],
232
+ [
233
+ "create_embedding",
234
+ "create_multimodal_embedding",
235
+ "rerank_documents",
236
+ "translate_text"
237
+ ]
238
+ ],
239
+ "tool_count": 11
240
+ }
241
+ ],
242
+ "features": {
243
+ "structured_content": true,
244
+ "tool_annotations": true,
245
+ "composite_tools": [
246
+ {
247
+ "name": "compare_models",
248
+ "profiles": [
249
+ "catalog",
250
+ "core",
251
+ "full"
252
+ ],
253
+ "auth": "optional",
254
+ "annotations": {
255
+ "readOnlyHint": true,
256
+ "destructiveHint": false,
257
+ "idempotentHint": true,
258
+ "openWorldHint": true
259
+ }
260
+ },
261
+ {
262
+ "name": "get_api_overview",
263
+ "profiles": [
264
+ "catalog",
265
+ "core",
266
+ "full"
267
+ ],
268
+ "auth": "optional",
269
+ "annotations": {
270
+ "readOnlyHint": true,
271
+ "destructiveHint": false,
272
+ "idempotentHint": true,
273
+ "openWorldHint": true
274
+ }
275
+ }
276
+ ],
277
+ "async_delivery_tools": [
278
+ "cancel_task",
279
+ "create_3d_model",
280
+ "create_image",
281
+ "create_image_file",
282
+ "create_music",
283
+ "create_video",
284
+ "create_world",
285
+ "edit_image",
286
+ "edit_image_file",
287
+ "get_task_status",
288
+ "get_world_status"
289
+ ],
290
+ "resources": [
291
+ {
292
+ "name": "tokenlab-api-overview",
293
+ "title": "TokenLab API Overview",
294
+ "uri": "tokenlab://api/overview",
295
+ "mime_type": "text/plain",
296
+ "freshness": "live"
297
+ },
298
+ {
299
+ "name": "tokenlab-openapi-contract",
300
+ "title": "TokenLab OpenAPI Contract",
301
+ "uri": "tokenlab://contract/openapi",
302
+ "mime_type": "application/json",
303
+ "freshness": "package_snapshot"
304
+ },
305
+ {
306
+ "name": "tokenlab-mcp-public-contract",
307
+ "title": "TokenLab MCP Public Contract",
308
+ "uri": "tokenlab://contract/mcp",
309
+ "mime_type": "application/json",
310
+ "freshness": "package_snapshot"
311
+ }
312
+ ],
313
+ "prompts": [
314
+ {
315
+ "name": "choose_tokenlab_model",
316
+ "title": "Choose a TokenLab Model"
317
+ },
318
+ {
319
+ "name": "build_tokenlab_request",
320
+ "title": "Build a TokenLab Request"
321
+ }
322
+ ]
323
+ }
324
+ }