InnoVint MCP by usefulapi
Review winery lots, vessels, analyses and work history; record analyses and add vendors.
我该使用它吗
质量与安全性
发现(5)
- LOW在 innovint_get_lot_components_summary 中
- LOW在 innovint_list_vessels_at_point_in_time 中
- LOW在 innovint_list_adjustment_actions 中
- LOW在 innovint_list_receive_fruit_actions 中
- LOW在 innovint_create_analysis_action 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"innovint": {
"url": "https://innovint.usefulapi.io/mcp"
}
}
}远程端点
https://innovint.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(27)
🟢innovint_list_wineries(limit, offset)
List the connected winery with id, name and the user's permissions. Hosted connections and scoped stdio return only the selected winery; unscoped stdio lists all accessible wineries. GET /api/v1/wineries or /api/v1/wineries/{wineryId}.
输入模式
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_winery(winery_id)
One winery by id: name, internal id and the token user's permissions there. GET /api/v1/wineries/{wineryId}.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lots(winery_id, q, code_in, id_in, bond_in, ...)
List the winery's lots (wine, juice, fruit or case-goods batches) with code, name, stage, color, type, tax class, volume, weight, bottles on hand and tags. Filter by search term, code, id, bond, archived state or last update. GET /api/v1/wineries/{wineryId}/lots.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"code_in": {
"description": "Only lots with one of these codes, e.g. [\"24CAB01\"].",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id_in": {
"description": "Only lots with one of these ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"bond_in": {
"description": "Only lots in one of these bonds (bond_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"updated_after": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"updated_before": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot(winery_id, lot_id)
One lot by id with its stage, volume, weight, bottles on hand, tags and links to related data. GET /api/v1/wineries/{wineryId}/lots/{id}.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot_composition(winery_id, lot_id, after_action)
The lot's makeup composition (what it is made of), now or right after a given action. GET /api/v1/wineries/{wineryId}/lots/{lotId}/makeupComposition.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"after_action": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Optional action id: describe the composition right after this action (e.g. act_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot_components_summary(winery_id, lot_id)
A summary of the lot's components. GET /api/v1/wineries/{wineryId}/lots/{lotId}/componentsSummary.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_analyses(winery_id, lot_id, analysis_type, vessels, is_lot_composite, ...)
Lab and in-house analysis results recorded on a lot (pH, TA, free SO2, Brix, VA, ...). Filter by analysis type slug, vessel or date range. GET /api/v1/wineries/{wineryId}/lots/{lotId}/analyses.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"analysis_type": {
"description": "Analysis type slugs, e.g. [\"ph\", \"ta\"] (see innovint_list_analysis_types).",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$"
}
},
"vessels": {
"description": "Only analyses on these vessel ids (ves_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"is_lot_composite": {
"description": "true = only lot composite analyses (not tied to one vessel).",
"type": "boolean"
},
"recorded_after": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"recorded_before": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"sort": {
"description": "Sort by recorded time: recordedAt (oldest first) or -recordedAt (newest first).",
"type": "string",
"enum": [
"recordedAt",
"-recordedAt"
]
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_additives(winery_id, lot_id, limit, offset)
Additives that have been added to a lot. GET /api/v1/wineries/{wineryId}/lots/{lotId}/additives.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_costs(winery_id, code_in, lot_in, effective_at, modified_after, ...)
Cost data per lot as of a date. Filter by lot code or id. GET /api/v1/wineries/{wineryId}/lotCosts.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"code_in": {
"description": "Only lots with one of these codes.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"lot_in": {
"description": "Only these lot ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_at": {
"description": "Costs as of this date-time (ISO 8601 with timezone).",
"type": "string"
},
"modified_after": {
"description": "Only costs modified after this date-time.",
"type": "string"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vessels(winery_id, q, code_in, id_in, lot_in, ...)
List tanks, barrels and other vessels with their codes and current contents. Filter by search term, code, id, lot or archived state. GET /api/v1/wineries/{wineryId}/vessels.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"code_in": {
"description": "Only vessels with one of these codes.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id_in": {
"description": "Only these vessel ids (ves_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"lot_in": {
"description": "Only vessels holding one of these lot ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vessels_at_point_in_time(winery_id, effective_at, vessel_type, q, limit, ...)
Preview (vendor contract may change): What every vessel held at a past date-time (history of cellar contents). GET /api/v1/wineries/{wineryId}/vesselsAtPointInTime.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"effective_at": {
"type": "string",
"description": "The moment to look at (ISO 8601 with timezone, e.g. 2026-09-30T23:59:59Z)."
},
"vessel_type": {
"description": "Only these vessel types.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"effective_at"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_actions(winery_id, state, reference_number, id, effective_after, ...)
The winery's work history across all action types (additions, analyses, transfers, racking, blending, bottling, fruit receiving, ...), filterable by type, state, reference number and dates. Each record has the action type, effective date and the lots and vessels involved; use the typed list tools for full detail of one kind. GET /api/v1/wineries/{wineryId}/actions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these action types, e.g. [\"ADDITION\", \"RACK\"].",
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"enum": [
"ADDITION",
"ANALYSIS",
"BARREL_DOWN",
"BATCH_ADJUSTMENT",
"BLEED",
"BLEND",
"BOTTLE",
"BOTTLING_EN_TIRAGE",
"COST_ITEM",
"CREATE_LOT",
"CREATE_VESSELS",
"CUSTOM",
"DISGORGE_DOSAGE_PACKAGE",
"DISTILLATION",
"DRAIN",
"DRAIN_AND_PRESS",
"FILTER",
"FRUIT_WEIGHT_CHANGE",
"LOT_TAX_CLASS_CHANGE",
"MAKEUP_CHANGE",
"PROCESS_FRUIT_TO_VOLUME",
"PROCESS_FRUIT_TO_WEIGHT",
"PULL_SAMPLE",
"RACK",
"RACK_AND_RETURN",
"RECEIVE_DRY_GOOD",
"RECEIVE_FRUIT",
"TOPPING",
"TOP_OFF",
"TRANSFER",
"TRANSFER_INTER_FACILITY",
"TRANSFER_VOLUME_TO_WEIGHT",
"UPDATE_LOT",
"VOLUME_CHANGE",
"WATER_ADD",
"WEIGHT_CHANGE",
"WEIGHT_TRANSFER"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_analysis_actions(winery_id, state, reference_number, id, effective_after, ...)
Analysis actions: the lab and in-house results entered in the winery, with the analyses (type, value, unit) and the lots and vessels they were taken on. GET /api/v1/wineries/{wineryId}/actions/analysisActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_addition_actions(winery_id, state, reference_number, id, effective_after, ...)
Addition actions: what additives were added to which lots and vessels, and when. GET /api/v1/wineries/{wineryId}/additionActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_transfer_actions(winery_id, state, reference_number, id, effective_after, ...)
Transfer actions: racking, filtering, topping off, barrel-down and other transfers between vessels. GET /api/v1/wineries/{wineryId}/transferActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these transfer types, e.g. [\"RACK\", \"FILTER\"].",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"BARREL_DOWN",
"FILTER",
"RACK",
"TOP_OFF",
"TRANSFER"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_adjustment_actions(winery_id, state, reference_number, id, effective_after, ...)
Adjustment actions: volume or weight changes, water adds and makeup changes. GET /api/v1/wineries/{wineryId}/actions/adjustmentActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these adjustment types.",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"VOLUME_CHANGE",
"WEIGHT_CHANGE",
"WATER_ADD",
"MAKEUP_CHANGE"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_receive_fruit_actions(winery_id, state, reference_number, id, effective_after, ...)
Fruit receiving actions (harvest intake) with the fruit received and the lots created. GET /api/v1/wineries/{wineryId}/actions/receiveFruitActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_analysis_types(q, slug, limit, offset)
The analysis types InnoVint knows (pH, TA, free SO2, Brix, ...), with the slug that innovint_create_analysis_action and the analysis filters need. GET /api/v1/analysisTypes.
输入模式
{
"type": "object",
"properties": {
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"slug": {
"description": "Only these slugs.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$"
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_additives(winery_id, q, id_in, product_name_in, tags, ...)
The winery's additive products and their batches. GET /api/v1/wineries/{wineryId}/additives.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"id_in": {
"description": "Only these additive ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"product_name_in": {
"description": "Only additives with one of these product names.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"tags": {
"description": "Only additives with these tags.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vineyards(winery_id, id_in, limit, offset)
The winery's vineyards (grower sources). GET /api/v1/wineries/{wineryId}/vineyards.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id_in": {
"description": "Only these vineyard ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_blocks(winery_id, id_in, vineyard_in, archived, limit, ...)
Vineyard blocks of the winery's vineyards. Filter by vineyard. GET /api/v1/wineries/{wineryId}/blocks.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id_in": {
"description": "Only these block ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"vineyard_in": {
"description": "Only blocks of these vineyard ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_growers(winery_id, id, limit, offset)
The growers the winery buys fruit from. GET /api/v1/wineries/{wineryId}/growers.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id": {
"description": "Only these grower ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_grower_receipts(winery_id, vintage, limit, offset)
Fruit receipts from growers for one vintage (year). GET /api/v1/wineries/{wineryId}/growerReceipts/{vintage}.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"vintage": {
"type": "integer",
"minimum": 1900,
"maximum": 2200,
"description": "Vintage year, e.g. 2026."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"vintage"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vendors(winery_id, name, name_contains, id_in, sort, ...)
The winery's vendors (suppliers of additives, dry goods, services). GET /api/v1/wineries/{wineryId}/vendors.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"name": {
"description": "Exact vendor name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"name_contains": {
"description": "Vendor name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"id_in": {
"description": "Only these vendor ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"sort": {
"type": "string",
"enum": [
"name",
"-name"
]
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_bonds(winery_id, limit, offset)
The winery's bonded premises (TTB bonds), whose ids lots belong to. GET /api/v1/wineries/{wineryId}/bonds.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴innovint_create_analysis_action(winery_id, effective_at, analyses, panel_name, note)
WRITE: records analysis results (e.g. pH 3.45, free SO2 28 mg/L) as a new analysis action in the winery's InnoVint records, effective at the given time. Each result needs an analysis type slug (innovint_list_analysis_types), a value and a unit, and a lot (add a vessel for a vessel-level result; without a vessel it is a lot composite result). The new action shows up in the cellar history and feeds lot data and reports; InnoVint's API has no delete here, so only call this when the numbers are confirmed. POST /api/v1/wineries/{wineryId}/actions/analysisActions.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"effective_at": {
"type": "string",
"description": "When the analysis was done (ISO 8601 with timezone, e.g. 2026-10-24T09:30:00Z)."
},
"analyses": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"analysis_type": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$",
"description": "Analysis type slug, e.g. \"ph\"."
},
"value": {
"type": "number",
"description": "The measured value."
},
"unit": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"description": "Unit of the value, e.g. \"g/L\" or \"mg/L\" (use the unit InnoVint lists for the type)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"vessel_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Vessel id for a vessel-level result; omit for a lot composite result (e.g. ves_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"analysis_type",
"value",
"unit",
"lot_id"
]
}
},
"panel_name": {
"description": "Optional name of the panel/report these results belong to.",
"type": "string",
"maxLength": 100
},
"note": {
"description": "Optional note saved with the action.",
"type": "string",
"minLength": 1,
"maxLength": 10000
}
},
"required": [
"winery_id",
"effective_at",
"analyses"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡innovint_create_vendor(winery_id, name)
WRITE: adds a new vendor (supplier) by name to the winery's InnoVint records. Check innovint_list_vendors first to avoid a duplicate. POST /api/v1/wineries/{wineryId}/vendors.
输入模式
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Vendor name."
}
},
"required": [
"winery_id",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据