@tokenlabai/mcp-server 0.5.0 → 0.6.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
@@ -10,7 +10,7 @@ It exposes public catalog tools for agents that need to choose models, inspect s
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.5.0 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.6.0 generates 76 endpoint tools; two composite discovery tools are registered at runtime.
14
14
 
15
15
  | Profile | Endpoint tools | Coverage |
16
16
  | --- | ---: | --- |
@@ -126,14 +126,14 @@ This repository includes `server.json` for the official MCP Registry.
126
126
 
127
127
  Release metadata:
128
128
 
129
- - npm package: `@tokenlabai/mcp-server@0.5.0`
129
+ - npm package: `@tokenlabai/mcp-server@0.6.0`
130
130
  - MCP registry name: `io.github.hedging8563/tokenlab`
131
131
  - `package.json.mcpName`: `io.github.hedging8563/tokenlab`
132
132
 
133
133
  For a new release:
134
134
 
135
135
  1. Bump the matching versions in `package.json`, `package-lock.json`, and `server.json`.
136
- 2. Push a matching tag such as `v0.5.0`.
136
+ 2. Push a matching tag such as `v0.6.0`.
137
137
  3. The publish workflow tests and publishes npm through trusted publishing, then publishes the MCP Registry entry through GitHub Actions OIDC.
138
138
 
139
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.
@@ -162,6 +162,16 @@
162
162
  "getPricing"
163
163
  ],
164
164
  "operation_overrides": {
165
+ "listModels": {
166
+ "default_arguments": {
167
+ "view": "compact"
168
+ },
169
+ "input_property_overrides": {
170
+ "view": {
171
+ "description": "Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-compatible list shape is required."
172
+ }
173
+ }
174
+ },
165
175
  "cancelAnthropicMessageBatch": {
166
176
  "annotations": {
167
177
  "readOnlyHint": false,
@@ -1597,22 +1597,111 @@
1597
1597
  "Models"
1598
1598
  ],
1599
1599
  "summary": "List models",
1600
- "description": "Lists the currently available models. Default responses are trimmed for discovery. Non-chat models may include lightweight request-format metadata; `agent_preferences` appears only when `recommended_for` is present. Deprecated `lemondata` is still returned as a compatibility alias during the migration.",
1600
+ "description": "Lists the currently available models. Use `view=compact` for model selection and `view=full` for the existing OpenAI-compatible discovery shape. Native API calls default to `full`; integrations may choose `compact` as their default. Non-chat recommendations are available through `recommended_for`.",
1601
1601
  "operationId": "listModels",
1602
+ "parameters": [
1603
+ {
1604
+ "name": "provider",
1605
+ "in": "query",
1606
+ "required": false,
1607
+ "description": "Filter by public model provider, for example openai, anthropic, google, or minimax.",
1608
+ "schema": {
1609
+ "type": "string"
1610
+ }
1611
+ },
1612
+ {
1613
+ "name": "tag",
1614
+ "in": "query",
1615
+ "required": false,
1616
+ "description": "Filter by a public capability tag.",
1617
+ "schema": {
1618
+ "type": "string"
1619
+ }
1620
+ },
1621
+ {
1622
+ "name": "category",
1623
+ "in": "query",
1624
+ "required": false,
1625
+ "description": "Filter by model category.",
1626
+ "schema": {
1627
+ "type": "string",
1628
+ "enum": [
1629
+ "chat",
1630
+ "embedding",
1631
+ "translation",
1632
+ "image",
1633
+ "video",
1634
+ "audio",
1635
+ "tts",
1636
+ "stt",
1637
+ "rerank",
1638
+ "3d",
1639
+ "music"
1640
+ ]
1641
+ }
1642
+ },
1643
+ {
1644
+ "name": "recommended_for",
1645
+ "in": "query",
1646
+ "required": false,
1647
+ "description": "Sort supported non-chat models for a task category and include recommendation evidence.",
1648
+ "schema": {
1649
+ "type": "string",
1650
+ "enum": [
1651
+ "image",
1652
+ "video",
1653
+ "music",
1654
+ "3d",
1655
+ "tts",
1656
+ "stt",
1657
+ "embedding",
1658
+ "rerank",
1659
+ "translation"
1660
+ ]
1661
+ }
1662
+ },
1663
+ {
1664
+ "name": "view",
1665
+ "in": "query",
1666
+ "required": false,
1667
+ "description": "Choose compact model-selection fields or the full OpenAI-compatible list shape.",
1668
+ "schema": {
1669
+ "type": "string",
1670
+ "enum": [
1671
+ "compact",
1672
+ "full"
1673
+ ],
1674
+ "default": "full"
1675
+ }
1676
+ }
1677
+ ],
1602
1678
  "responses": {
1603
1679
  "200": {
1604
1680
  "description": "List of models",
1605
1681
  "content": {
1606
1682
  "application/json": {
1607
1683
  "schema": {
1608
- "$ref": "#/components/schemas/ModelsResponse"
1684
+ "oneOf": [
1685
+ {
1686
+ "$ref": "#/components/schemas/ModelsResponse"
1687
+ },
1688
+ {
1689
+ "$ref": "#/components/schemas/CompactModelsResponse"
1690
+ }
1691
+ ]
1609
1692
  }
1610
1693
  }
1611
1694
  }
1612
1695
  },
1696
+ "400": {
1697
+ "$ref": "#/components/responses/BadRequest"
1698
+ },
1613
1699
  "401": {
1614
1700
  "$ref": "#/components/responses/Unauthorized"
1615
1701
  },
1702
+ "429": {
1703
+ "$ref": "#/components/responses/RateLimitExceeded"
1704
+ },
1616
1705
  "500": {
1617
1706
  "$ref": "#/components/responses/ServerError"
1618
1707
  }
@@ -8356,7 +8445,180 @@
8356
8445
  "required": [
8357
8446
  "object",
8358
8447
  "data"
8359
- ]
8448
+ ],
8449
+ "additionalProperties": false
8450
+ },
8451
+ "CompactModelsResponse": {
8452
+ "type": "object",
8453
+ "description": "Compact model-selection response used by TokenLab MCP and other agent integrations.",
8454
+ "properties": {
8455
+ "object": {
8456
+ "type": "string",
8457
+ "enum": [
8458
+ "list"
8459
+ ]
8460
+ },
8461
+ "view": {
8462
+ "type": "string",
8463
+ "enum": [
8464
+ "compact"
8465
+ ]
8466
+ },
8467
+ "count": {
8468
+ "type": "integer",
8469
+ "minimum": 0
8470
+ },
8471
+ "data": {
8472
+ "type": "array",
8473
+ "items": {
8474
+ "$ref": "#/components/schemas/CompactModelListItem"
8475
+ }
8476
+ }
8477
+ },
8478
+ "required": [
8479
+ "object",
8480
+ "view",
8481
+ "count",
8482
+ "data"
8483
+ ],
8484
+ "additionalProperties": false
8485
+ },
8486
+ "CompactModelListItem": {
8487
+ "type": "object",
8488
+ "description": "Fields needed to shortlist a model before calling get_model or get_model_pricing.",
8489
+ "properties": {
8490
+ "id": {
8491
+ "type": "string",
8492
+ "description": "Model identifier"
8493
+ },
8494
+ "provider": {
8495
+ "type": "string",
8496
+ "description": "Public model provider"
8497
+ },
8498
+ "category": {
8499
+ "type": "string"
8500
+ },
8501
+ "capabilities": {
8502
+ "type": "array",
8503
+ "items": {
8504
+ "type": "string"
8505
+ }
8506
+ },
8507
+ "max_input_tokens": {
8508
+ "type": [
8509
+ "number",
8510
+ "null"
8511
+ ]
8512
+ },
8513
+ "max_output_tokens": {
8514
+ "type": [
8515
+ "number",
8516
+ "null"
8517
+ ]
8518
+ },
8519
+ "pricing": {
8520
+ "type": "object",
8521
+ "properties": {
8522
+ "unit": {
8523
+ "type": "string"
8524
+ },
8525
+ "currency": {
8526
+ "type": "string",
8527
+ "enum": [
8528
+ "USD"
8529
+ ]
8530
+ },
8531
+ "input_per_1m": {
8532
+ "type": "string"
8533
+ },
8534
+ "output_per_1m": {
8535
+ "type": "string"
8536
+ },
8537
+ "per_request": {
8538
+ "type": "string"
8539
+ },
8540
+ "min_price": {
8541
+ "type": "string",
8542
+ "description": "Minimum TokenLab price for a structured pricing model."
8543
+ },
8544
+ "max_price": {
8545
+ "type": "string",
8546
+ "description": "Maximum TokenLab price for a structured pricing model."
8547
+ },
8548
+ "has_complex_pricing": {
8549
+ "type": "boolean"
8550
+ }
8551
+ },
8552
+ "required": [
8553
+ "unit",
8554
+ "currency",
8555
+ "has_complex_pricing"
8556
+ ],
8557
+ "additionalProperties": false
8558
+ },
8559
+ "status": {
8560
+ "type": "string",
8561
+ "description": "Public model lifecycle stage."
8562
+ },
8563
+ "latest": {
8564
+ "type": "boolean"
8565
+ },
8566
+ "supported_operations": {
8567
+ "type": "array",
8568
+ "items": {
8569
+ "type": "string"
8570
+ }
8571
+ },
8572
+ "request_endpoint": {
8573
+ "type": "string"
8574
+ },
8575
+ "recommendation": {
8576
+ "type": "object",
8577
+ "properties": {
8578
+ "preferred_rank": {
8579
+ "type": [
8580
+ "number",
8581
+ "null"
8582
+ ]
8583
+ },
8584
+ "success_rate_24h": {
8585
+ "type": [
8586
+ "number",
8587
+ "null"
8588
+ ]
8589
+ },
8590
+ "sample_count_24h": {
8591
+ "type": "integer"
8592
+ },
8593
+ "status": {
8594
+ "type": "string",
8595
+ "enum": [
8596
+ "ready",
8597
+ "insufficient_samples"
8598
+ ]
8599
+ }
8600
+ },
8601
+ "required": [
8602
+ "preferred_rank",
8603
+ "success_rate_24h",
8604
+ "sample_count_24h",
8605
+ "status"
8606
+ ],
8607
+ "additionalProperties": false
8608
+ }
8609
+ },
8610
+ "required": [
8611
+ "id",
8612
+ "provider",
8613
+ "category",
8614
+ "capabilities",
8615
+ "max_input_tokens",
8616
+ "max_output_tokens",
8617
+ "pricing",
8618
+ "status",
8619
+ "latest"
8620
+ ],
8621
+ "additionalProperties": false
8360
8622
  },
8361
8623
  "Model": {
8362
8624
  "type": "object",
@@ -8383,15 +8645,6 @@
8383
8645
  },
8384
8646
  "tokenlab": {
8385
8647
  "$ref": "#/components/schemas/ModelTokenLabExtension"
8386
- },
8387
- "lemondata": {
8388
- "allOf": [
8389
- {
8390
- "$ref": "#/components/schemas/ModelLemondataExtension"
8391
- }
8392
- ],
8393
- "deprecated": true,
8394
- "description": "Deprecated alias for tokenlab. Retained for compatibility during the TokenLab migration."
8395
8648
  }
8396
8649
  },
8397
8650
  "required": [
@@ -9857,87 +10110,6 @@
9857
10110
  }
9858
10111
  }
9859
10112
  },
9860
- "ModelListLemondataExtension": {
9861
- "type": "object",
9862
- "description": "TokenLab discovery fields for the list route. Detail-only metadata such as capability flags, pricing provenance, full model details, and empty recommendation snapshots are omitted.",
9863
- "properties": {
9864
- "aliases": {
9865
- "type": "array",
9866
- "items": {
9867
- "type": "string"
9868
- }
9869
- },
9870
- "pricing": {
9871
- "type": "object",
9872
- "additionalProperties": true
9873
- },
9874
- "capabilities": {
9875
- "type": "array",
9876
- "items": {
9877
- "type": "string"
9878
- }
9879
- },
9880
- "providers": {
9881
- "type": "array",
9882
- "items": {
9883
- "type": "string"
9884
- }
9885
- },
9886
- "max_input_tokens": {
9887
- "type": [
9888
- "number",
9889
- "null"
9890
- ]
9891
- },
9892
- "max_output_tokens": {
9893
- "type": [
9894
- "number",
9895
- "null"
9896
- ]
9897
- },
9898
- "category": {
9899
- "type": "string"
9900
- },
9901
- "pricing_unit": {
9902
- "type": "string"
9903
- },
9904
- "cache_pricing": {
9905
- "type": [
9906
- "object",
9907
- "null"
9908
- ],
9909
- "additionalProperties": true
9910
- },
9911
- "has_complex_pricing": {
9912
- "type": "boolean"
9913
- },
9914
- "pricing_summary": {
9915
- "type": [
9916
- "object",
9917
- "null"
9918
- ],
9919
- "additionalProperties": true
9920
- },
9921
- "agent_preferences": {
9922
- "type": "object",
9923
- "additionalProperties": true
9924
- },
9925
- "request_format_summary": {
9926
- "$ref": "#/components/schemas/ModelListRequestFormatSummary"
9927
- }
9928
- },
9929
- "required": [
9930
- "aliases",
9931
- "pricing",
9932
- "capabilities",
9933
- "max_input_tokens",
9934
- "max_output_tokens",
9935
- "category",
9936
- "pricing_unit",
9937
- "has_complex_pricing"
9938
- ],
9939
- "additionalProperties": false
9940
- },
9941
10113
  "ModelListItem": {
9942
10114
  "type": "object",
9943
10115
  "properties": {
@@ -9961,15 +10133,6 @@
9961
10133
  "description": "Model provider",
9962
10134
  "example": "openai"
9963
10135
  },
9964
- "lemondata": {
9965
- "allOf": [
9966
- {
9967
- "$ref": "#/components/schemas/ModelListLemondataExtension"
9968
- }
9969
- ],
9970
- "deprecated": true,
9971
- "description": "Deprecated alias for tokenlab. Retained for compatibility during the TokenLab migration."
9972
- },
9973
10136
  "tokenlab": {
9974
10137
  "$ref": "#/components/schemas/ModelListTokenLabExtension"
9975
10138
  }
@@ -9983,89 +10146,6 @@
9983
10146
  ],
9984
10147
  "additionalProperties": false
9985
10148
  },
9986
- "ModelLemondataExtension": {
9987
- "type": "object",
9988
- "description": "TokenLab extension fields for the detail route, including pricing, capabilities, recommendation metadata, and detailed non-chat request metadata.",
9989
- "properties": {
9990
- "aliases": {
9991
- "type": "array",
9992
- "items": {
9993
- "type": "string"
9994
- }
9995
- },
9996
- "pricing": {
9997
- "type": "object",
9998
- "additionalProperties": true
9999
- },
10000
- "capabilities": {
10001
- "type": "array",
10002
- "items": {
10003
- "type": "string"
10004
- }
10005
- },
10006
- "providers": {
10007
- "type": "array",
10008
- "items": {
10009
- "type": "string"
10010
- }
10011
- },
10012
- "max_input_tokens": {
10013
- "type": [
10014
- "number",
10015
- "null"
10016
- ]
10017
- },
10018
- "max_output_tokens": {
10019
- "type": [
10020
- "number",
10021
- "null"
10022
- ]
10023
- },
10024
- "category": {
10025
- "type": "string"
10026
- },
10027
- "pricing_unit": {
10028
- "type": "string"
10029
- },
10030
- "cache_pricing": {
10031
- "type": [
10032
- "object",
10033
- "null"
10034
- ],
10035
- "additionalProperties": true
10036
- },
10037
- "has_complex_pricing": {
10038
- "type": "boolean"
10039
- },
10040
- "supported_operations": {
10041
- "type": "array",
10042
- "items": {
10043
- "type": "string"
10044
- }
10045
- },
10046
- "pricing_summary": {
10047
- "type": [
10048
- "object",
10049
- "null"
10050
- ],
10051
- "additionalProperties": true
10052
- },
10053
- "pricing_provenance": {
10054
- "type": [
10055
- "object",
10056
- "null"
10057
- ],
10058
- "additionalProperties": true
10059
- },
10060
- "request_format_summary": {
10061
- "$ref": "#/components/schemas/NonChatRequestFormatSummary"
10062
- },
10063
- "request_format_details": {
10064
- "$ref": "#/components/schemas/NonChatRequestFormatDetails"
10065
- }
10066
- },
10067
- "additionalProperties": true
10068
- },
10069
10149
  "ModelPricingResponse": {
10070
10150
  "type": "object",
10071
10151
  "properties": {
@@ -5,7 +5,7 @@
5
5
  "id": "tokenlab-mcp-server",
6
6
  "name": "@tokenlabai/mcp-server",
7
7
  "title": "TokenLab MCP Server",
8
- "version": "0.5.0",
8
+ "version": "0.6.0",
9
9
  "registry_name": "io.github.hedging8563/tokenlab",
10
10
  "source_url": "https://github.com/hedging8563/tokenlab-mcp-server",
11
11
  "landing_url": "https://tokenlab.sh/mcp",
@@ -25,8 +25,8 @@
25
25
  "openapi": "3.0.3",
26
26
  "title": "TokenLab AI Gateway",
27
27
  "version": "1.0.0",
28
- "sha256": "f494fcfb2b4d67aaddc88a2ec164739c807bb59331a7e5270fd9d9fa282745e0",
29
- "tool_manifest_sha256": "a2690dd92f5e7dbc47ce4fe25b327eaafd4848224f0e329bee0f1c2797c4521d"
28
+ "sha256": "586c32a9e47c4557977b92d73183518e986e70666f6530e2718ef5b7293a1706",
29
+ "tool_manifest_sha256": "e38134c2fa2489313f79dbefae73808ff8222d7009f1eb81c0c958f09d2c8677"
30
30
  },
31
31
  "profiles": {
32
32
  "catalog": {
@@ -6,7 +6,7 @@
6
6
  "openapi": "3.0.3",
7
7
  "title": "TokenLab AI Gateway",
8
8
  "version": "1.0.0",
9
- "sha256": "f494fcfb2b4d67aaddc88a2ec164739c807bb59331a7e5270fd9d9fa282745e0"
9
+ "sha256": "586c32a9e47c4557977b92d73183518e986e70666f6530e2718ef5b7293a1706"
10
10
  },
11
11
  "default_profile": "core",
12
12
  "profiles": [
@@ -6054,19 +6054,78 @@
6054
6054
  "core",
6055
6055
  "full"
6056
6056
  ],
6057
- "description": "List models Lists the currently available models. Default responses are trimmed for discovery. Non-chat models may include lightweight request-format metadata; `agent_preferences` appears only when `recommended_for` is present. Deprecated `lemondata` is still returned as a compatibility alias during the migration.",
6057
+ "description": "List models Lists the currently available models. Use `view=compact` for model selection and `view=full` for the existing OpenAI-compatible discovery shape. Native API calls default to `full`; integrations may choose `compact` as their default. Non-chat recommendations are available through `recommended_for`.",
6058
6058
  "input_schema": {
6059
6059
  "type": "object",
6060
- "properties": {},
6060
+ "properties": {
6061
+ "provider": {
6062
+ "type": "string",
6063
+ "description": "Filter by public model provider, for example openai, anthropic, google, or minimax."
6064
+ },
6065
+ "tag": {
6066
+ "type": "string",
6067
+ "description": "Filter by a public capability tag."
6068
+ },
6069
+ "category": {
6070
+ "type": "string",
6071
+ "enum": [
6072
+ "chat",
6073
+ "embedding",
6074
+ "translation",
6075
+ "image",
6076
+ "video",
6077
+ "audio",
6078
+ "tts",
6079
+ "stt",
6080
+ "rerank",
6081
+ "3d",
6082
+ "music"
6083
+ ],
6084
+ "description": "Filter by model category."
6085
+ },
6086
+ "recommended_for": {
6087
+ "type": "string",
6088
+ "enum": [
6089
+ "image",
6090
+ "video",
6091
+ "music",
6092
+ "3d",
6093
+ "tts",
6094
+ "stt",
6095
+ "embedding",
6096
+ "rerank",
6097
+ "translation"
6098
+ ],
6099
+ "description": "Sort supported non-chat models for a task category and include recommendation evidence."
6100
+ },
6101
+ "view": {
6102
+ "type": "string",
6103
+ "enum": [
6104
+ "compact",
6105
+ "full"
6106
+ ],
6107
+ "default": "compact",
6108
+ "description": "Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-compatible list shape is required."
6109
+ }
6110
+ },
6061
6111
  "additionalProperties": false
6062
6112
  },
6063
6113
  "bindings": {
6064
6114
  "path": [],
6065
- "query": [],
6115
+ "query": [
6116
+ "provider",
6117
+ "tag",
6118
+ "category",
6119
+ "recommended_for",
6120
+ "view"
6121
+ ],
6066
6122
  "header": [],
6067
6123
  "body": [],
6068
6124
  "files": []
6069
6125
  },
6126
+ "default_arguments": {
6127
+ "view": "compact"
6128
+ },
6070
6129
  "annotations": {
6071
6130
  "readOnlyHint": true,
6072
6131
  "destructiveHint": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tokenlabai/mcp-server",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "OpenAPI-generated TokenLab MCP server with catalog, native AI, multimodal, resource, prompt, and async task support.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -216,6 +216,17 @@ function applyInputOverrides(schema, bindings, override) {
216
216
  if (!schema.properties[name]) throw new Error(`Cannot override unknown MCP argument: ${name}`);
217
217
  schema.properties[name] = { ...schema.properties[name], ...patch };
218
218
  }
219
+ for (const [name, value] of Object.entries(override.default_arguments || {})) {
220
+ if (!schema.properties[name]) throw new Error(`Cannot default unknown MCP argument: ${name}`);
221
+ const property = schema.properties[name];
222
+ if (Array.isArray(property.enum) && !property.enum.includes(value)) {
223
+ throw new Error(`Default MCP argument ${name} is outside its enum`);
224
+ }
225
+ if (Object.hasOwn(property, "const") && property.const !== value) {
226
+ throw new Error(`Default MCP argument ${name} does not match its const value`);
227
+ }
228
+ schema.properties[name] = { ...schema.properties[name], default: value };
229
+ }
219
230
  }
220
231
 
221
232
  function annotations(method) {
@@ -262,6 +273,7 @@ for (const [operationId, indexed] of operations) {
262
273
  description,
263
274
  input_schema: schema,
264
275
  bindings,
276
+ ...(override.default_arguments ? { default_arguments: override.default_arguments } : {}),
265
277
  annotations: { ...annotations(indexed.method), ...(override.annotations || {}) },
266
278
  ...(override.task ? { task: override.task } : {})
267
279
  });
package/src/index.js CHANGED
@@ -109,12 +109,14 @@ async function appendMultipart(form, name, value, isFile) {
109
109
  }
110
110
 
111
111
  function collectArguments(tool, input) {
112
- const pathArguments = Object.fromEntries(tool.bindings.path.map((name) => [name, input[name]]));
113
- const queryArguments = Object.fromEntries(tool.bindings.query.map((name) => [name, input[name]]));
114
- const headerArguments = Object.fromEntries(tool.bindings.header.map((name) => [name, input[name]]));
112
+ const resolvedInput = { ...(tool.default_arguments || {}), ...input };
113
+
114
+ const pathArguments = Object.fromEntries(tool.bindings.path.map((name) => [name, resolvedInput[name]]));
115
+ const queryArguments = Object.fromEntries(tool.bindings.query.map((name) => [name, resolvedInput[name]]));
116
+ const headerArguments = Object.fromEntries(tool.bindings.header.map((name) => [name, resolvedInput[name]]));
115
117
  const bodyArguments = tool.bindings.body.includes("body")
116
- ? input.body
117
- : Object.fromEntries(tool.bindings.body.map((name) => [name, input[name]]));
118
+ ? resolvedInput.body
119
+ : Object.fromEntries(tool.bindings.body.map((name) => [name, resolvedInput[name]]));
118
120
  return { pathArguments, queryArguments, headerArguments, bodyArguments };
119
121
  }
120
122