{
  "version": "2026-10-03.2",
  "name": "实物服务",
  "availability": "owner_pilot_only",
  "definition": "在确认的范围、计价、交期条件和授权内，由明确责任方完成约定成果并负责交付、验收、异常与售后。",
  "services": [
    {
      "id": "feasibility",
      "name": "硬件可行性评估",
      "deliverables": [
        "有来源的路径结论",
        "未验证风险",
        "最小实测方案",
        "下一阶段工作范围"
      ],
      "exclusions": [
        "制造实物",
        "保证研究假设成立"
      ],
      "acceptance": "接单前固定检查项与实测范围；有依据的否定结论可完成评估。"
    },
    {
      "id": "hardware",
      "name": "定制硬件交付",
      "deliverables": [
        "约定规格的实物",
        "测试证据",
        "使用与售后资料"
      ],
      "exclusions": [
        "未经验证的识别效果保证"
      ],
      "acceptance": "所有必需交付物按确认版本验收通过，签收不能替代验收。"
    }
  ],
  "required_inputs": [
    "用途",
    "预算与币种",
    "数量",
    "目标交期",
    "规格"
  ],
  "optional_inputs": [
    "已有材料",
    "不能改变的约束",
    "逐项批准的附件"
  ],
  "intake": "允许保存不完整需求，未知值用 null；missing_fields 返回待补充项。字段齐全仅代表需求可供审查，不代表接单。",
  "pricing": "当前只收集请求；报价须另行落实具名责任方、金额、交期和条款，尚不接单或收费。",
  "operator": "平台经营责任方与工程签核人待落实",
  "fulfillment": "人工履约；未连接常驻执行或通知服务。",
  "start": "业务仅向经核实的所有者开放。获准登录后先 connections_list；没有有效连接则打开 account_url，由用户选择项目并授权。取得 connection_id 后调用 project_get 或 requirements_submit。",
  "resume": "新会话调用 connections_list，由用户选择可见项目；再读取 project_get。不要硬编码项目编号。",
  "permissions": "登录与业务授权分离；需求摘要可在有效范围内连续更新；每个新文件先按名称、大小、SHA-256 授权。付款、委托、制造不在 Agent 权限内。",
  "return": "完成网页登录后手动回到原聊天，发送：继续我的实物服务，先读取可访问项目。无自动跳回保证。",
  "changes": "通过 case_open 提出变更、取消、验收缺陷、售后。记录申请不等于取消生效、退款到账或验收通过。",
  "payment": {
    "mode": "unconfigured",
    "can_charge": false,
    "reason": "本站尚未配置、未批准真实支付；当前无商户与正式报价，不收集卡号、不创建支付。"
  },
  "account_url": "https://thingweave.com/account",
  "protocol": {
    "endpoint": "/mcp",
    "transport": "MCP JSON-RPC POST over HTTPS; /api/agent is same-origin browser diagnostics only",
    "authentication": "Google OIDC browser identity plus explicit ThingWeave OAuth 2.1 client consent; native clients use first-party bearer tokens with S256 PKCE and resource audience",
    "request": {
      "jsonrpc": "2.0",
      "id": "a unique request ID",
      "method": "tools/call",
      "params": {
        "name": "service_describe",
        "arguments": {}
      }
    },
    "discovery_methods": [
      "initialize",
      "tools/list"
    ],
    "errors": "result.isError with JSON error/status/account_url in content[0].text",
    "native_remote_mcp": "implemented_local_tests_pass_live_google_and_client_verification_pending",
    "browser_endpoint": "/api/agent",
    "oauth": {
      "authorization_endpoint": "/authorize",
      "token_endpoint": "/oauth/token",
      "registration_endpoint": "/oauth/register",
      "scope": "thingweave",
      "offline_scope": "offline_access",
      "google_callback": "/auth/callback"
    }
  },
  "tools": [
    {
      "name": "service_describe",
      "description": "首次使用先读取。解释实物服务的成果、验收、限制、授权、报价和恢复路径；当前仅收集请求，未落实责任方，不能下单或付款。",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "connections_list",
      "description": "列出当前真实身份下仍有效的业务连接与项目。新会话先调用，用户消歧后选项目。没有连接时打开账户页授权。",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "project_get",
      "description": "按有效 connection_id 取回服务请求、材料、证据、待办与真实状态。建立记录不代表接单、付款或工程完成。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          }
        },
        "required": [
          "connection_id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "requirements_submit",
      "description": "提交或修改结构化需求：用途、预算金额与币种、数量、目标交期、规格、约束与已有材料。未知字段明确传 null，返回缺项提示；必须读回并提交完整 requirements 对象。先 project_get 获取 version，重试复用 request_key。仅需求整理，不接单或付款。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string",
            "format": "uuid"
          },
          "requirements": {
            "type": "object",
            "properties": {
              "purpose": {
                "type": [
                  "string",
                  "null"
                ],
                "maxLength": 4000
              },
              "budget": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1000000000000
                      },
                      "currency": {
                        "type": "string",
                        "enum": [
                          "CNY",
                          "USD",
                          "EUR",
                          "GBP",
                          "JPY",
                          "HKD"
                        ]
                      }
                    },
                    "required": [
                      "amount",
                      "currency"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "quantity": {
                "type": [
                  "integer",
                  "null"
                ],
                "minimum": 1,
                "maximum": 1000000
              },
              "delivery_date": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date"
              },
              "specifications": {
                "type": [
                  "string",
                  "null"
                ],
                "maxLength": 10000
              },
              "constraints": {
                "type": "string",
                "maxLength": 4000
              },
              "materials": {
                "type": "string",
                "maxLength": 4000
              }
            },
            "required": [
              "purpose",
              "budget",
              "quantity",
              "delivery_date",
              "specifications"
            ],
            "additionalProperties": false
          },
          "expected_version": {
            "type": "integer",
            "minimum": 0
          },
          "request_key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "required": [
          "connection_id",
          "requirements",
          "expected_version",
          "request_key"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "brief_submit",
      "description": "连续提交用户授权范围内的本项目需求摘要；区分用户确认、建议与假设。不上传整段聊天、整个工作区或未授权资料。先读取 version，重试复用 request_key。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          },
          "brief": {
            "type": "string"
          },
          "expected_version": {
            "type": "integer"
          },
          "request_key": {
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "brief",
          "expected_version",
          "request_key"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "attachments_prepare",
      "description": "仅登记用户指定文件的名称、大小、SHA-256，返回逐项授权链接。此步未上传文件内容。仅 UTF-8 纯文本 .txt；每份最大 5 MiB。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "size": {
            "type": "integer"
          },
          "sha256": {
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "name",
          "size",
          "sha256"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "attachment_upload",
      "description": "在用户网页批准指纹后上传单个文件。服务端核验权限、大小、哈希；内容不同必须重新授权。返回上传事实，不代表工程验收通过。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          },
          "attachment_id": {
            "type": "string"
          },
          "content_base64": {
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "attachment_id",
          "content_base64"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "attachment_get",
      "description": "读取当前连接下已上传且有权访问的附件。不返回内部 Drive 链接。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          },
          "attachment_id": {
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "attachment_id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "case_open",
      "description": "提交问题、变更、取消申请、验收缺陷或售后。只创建待处理记录，不修改原承诺、不退款、不宣称修复。",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connection_id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "question",
              "change",
              "cancel",
              "acceptance_defect",
              "aftercare"
            ]
          },
          "description": {
            "type": "string"
          },
          "request_key": {
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "kind",
          "description",
          "request_key"
        ],
        "additionalProperties": false
      }
    }
  ]
}
