# Qiao-MCP — Bridge Engineering (桥梁工程) (pypi · qiao-mcp)

Full-lifecycle bridge structural analysis — modeling, staging, code checks.

- Trust score: 61/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-21

## Components

- pypi · `qiao-mcp`: 61/100 (this document), [markdown](https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp.md), [page](https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp)

## Channel facts

- Registry: `pypi`
- Package: `qiao-mcp`
- Version: `0.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-21.

- **Supply Chain Security**: 93/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs a script at install time (build_backend) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does.
  - 5 of 52 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 28646 tokens (~206/item across 139 items; 132 tools + 7 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add soratayang-qiao-mcp -- uvx qiao-mcp
```

### Codex

```bash
codex mcp add soratayang-qiao-mcp -- uvx qiao-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "soratayang-qiao-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "qiao-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add soratayang-qiao-mcp --command uvx --arg qiao-mcp
```

### Hermes

```yaml
mcp_servers:
  soratayang-qiao-mcp:
    command: "uvx"
    args: ["qiao-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "soratayang-qiao-mcp": {
      "command": "uvx",
      "args": [
        "qiao-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-19 (score 61, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-18 (score 46)

First indexed and scored.

## MCP tools (132)

### `create_nodes` (~263 tokens)

Create nodes in the bridge model from an explicit coordinate list (创建节点).

Prefer `create_nodes_linear` when nodes are evenly spaced along a line
— it is far more concise for typical bridge models.

Args:
    node_data: List of node coordinates. Format: [[x,y,z], ...] or [[id,x,y,z], ...]
               节点坐标列表，格式: [[x,y,z],...] 或 [[id,x,y,z],...]
    intersected: Whether to split elements at intersection points (是否交叉分割, 默认关)
    is_merged: Whether to merge duplicate nodes at the same position (是否合并重合节点)
    merge_error: Merge tolerance in model units, default 1e-3 (合并容差，默认1mm)
    numbering_type: Node numbering strategy: 1=sequential (编号方式: 1=顺序编号)
    start_id: Starting node ID when auto-numbering (起始节点编号)

Input parameters:

- `intersected` (boolean)
- `is_merged` (boolean)
- `merge_error` (number)
- `node_data` (array, required)
- `numbering_type` (integer)
- `start_id` (integer)

### `create_nodes_linear` (~487 tokens)

Create evenly-spaced nodes along a straight line — the preferred way to model
a bridge girder (等间距直线批量创建节点).

Instead of listing 101 coordinates for a 100m span at 1m intervals, just specify
the count, starting point, and spacing in each direction.

Args:
    count: Number of nodes to create (节点数量)
    start_x: X coordinate of the first node (起点X坐标)
    start_y: Y coordinate of the first node (起点Y坐标)
    start_z: Z coordinate of the first node (起点Z坐标)
    spacing_x: X increment between nodes, m (相邻节点X方向间距)
    spacing_y: Y increment between nodes (相邻节点Y方向间距)
    spacing_z: Z increment between nodes (相邻节点Z方向间距)
    start_id: Requested ID of the first node (期望的起始节点编号).
              HONORED ONLY when the model has no conflicting IDs — the
              backend assigns its own numbering when start_id is taken.
              The returned message reports the IDs actually assigned;
              always trust those, not start_id.
              （编号可能被后端改派，请以返回消息中的实际编号为准）
    is_merged: Whether to merge duplicate nodes (是否合并重合节点).
               When merging occurs, fewer nodes are created than requested.
    merge_error: Merge tolerance, default 1e-3 (合并容差)

Examples:
    # 100m simply-supported beam, 101 nodes at 1m pitch along X axis:
    create_nodes_linear(count=101, start_x=0, spacing_x=1.0)

    # Two-span 50m+50m continuous beam, start x from 0:
    create_nodes_linear(count=101, start_x=0, spacing_x=1.0)

Input parameters:

- `count` (integer, required)
- `is_merged` (boolean)
- `merge_error` (number)
- `spacing_x` (number)
- `spacing_y` (number)
- `spacing_z` (number)
- `start_id` (integer)
- `start_x` (number)
- `start_y` (number)
- `start_z` (number)

### `create_beam_element` (~360 tokens)

Create a single frame element (beam/truss/cable) with named parameters
(创建单个梁/杆/索单元，参数具名).

This is the preferred way to create individual elements — all parameters
have explicit names and inline documentation.

Args:
    node_i: Start node ID (I端节点编号)
    node_j: End node ID (J端节点编号)
    mat_id: Material ID — use get_materials to find valid IDs (材料编号)
    sec_id: Section ID — use get_section_list to find valid IDs (截面编号)
    element_id: Element ID, -1 = auto-assign next available ID (单元编号，-1表示自动分配)
    beta_angle: Beta angle in degrees, controls local axis orientation (贝塔角，度)
    ele_type: Element type (单元类型): 1=Beam(梁), 2=Truss(杆), 3=Cable(索)
    initial_type: Initial strain/force type (初始应变类型): 0=None, 1=Strain, 2=Force
    initial_value: Initial strain or force value (初始应变或内力值)

Example:
    create_beam_element(node_i=1, node_j=2, mat_id=1, sec_id=1)

Input parameters:

- `beta_angle` (number)
- `ele_type` (integer)
- `element_id` (integer)
- `initial_type` (integer)
- `initial_value` (number)
- `mat_id` (integer, required)
- `node_i` (integer, required)
- `node_j` (integer, required)
- `sec_id` (integer, required)

### `create_beam_elements_linear` (~651 tokens)

Batch-create frame elements chaining nodes along a girder
(批量创建沿主梁方向连接相邻节点的梁单元).

PREFERRED: pass node_ids — the exact ID sequence reported by
create_nodes_linear. Elements chain them in the order given:
node_ids[0]→[1], [1]→[2], …
（首选：直接传 create_nodes_linear 回报的编号序列，按给定顺序连接）

Do NOT assume node IDs are consecutive. The backend assigns numbering in
an order that is NOT predictable from the request — measured on qtmodel
2.6.3, one batch came back [1104,1103,1102,1101,1100] (reversed) and
another [1201,1200,1204,1203,1202] (neither ascending nor reversed).
Chaining by ID arithmetic on such a batch silently produces folded-back
geometry: elements of wrong length and direction that the solver accepts
without error, yielding a model that computes the wrong bridge.
（后端编号顺序不可预测，按编号递推会静默建出折返几何，求解器不会报错）

Node coordinates are checked before writing: if the chain is not
geometrically monotonic, the call fails instead of building a bad model.

Args:
    mat_id: Material ID for all elements (所有梁单元的材料编号)
    sec_id: Section ID for all elements (所有梁单元的截面编号)
    node_ids: Node IDs in girder order, as reported by create_nodes_linear
              (节点编号序列，按主梁走向排列). Creates len(node_ids)-1 elements.
    node_id_start: LEGACY fallback, only when node_ids is omitted — assumes
                   IDs run consecutively from here (旧式用法，假设编号连续)
    count: Number of elements, only with node_id_start (单元数量)
    element_id_start: ID assigned to the first element, then auto-incremented
                      (第一个单元的编号，后续自动递增)
    beta_angle: Beta angle in degrees, same for all elements (贝塔角，度)
    ele_type: 1=Beam(梁), 2=Truss(杆), 3=Cable(索)

Examples:
    # Preferred — chain the IDs create_nodes_linear actually returned:
    create_beam_elements_linear(mat_id=1, sec_id=1,
                                node_ids=[5, 501, 500, 502])

    # Legacy — only safe when the nodes are known to be consecutive:
    create_beam_elements_linear(mat_id=1, sec_id=1,
                                node_id_sta…

Input parameters:

- `beta_angle` (number)
- `count` (integer)
- `ele_type` (integer)
- `element_id_start` (integer)
- `mat_id` (integer, required)
- `node_id_start` (integer)
- `node_ids`
- `sec_id` (integer, required)

### `create_elements` (~208 tokens)

Create elements from a raw data array (通过原始数组创建单元).

For beam elements, prefer `create_beam_element` or `create_beam_elements_linear`
which have named parameters and are easier to use correctly.

Args:
    element_data: Element data list. Each item format:
        - Beam/Truss: [id, type(1=beam,2=truss), matId, secId, beta, nodeI, nodeJ, initType, initVal]
        - Cable:      [id, 3, matId, secId, beta, nodeI, nodeJ, tensionType, tensionVal]
        - Plate:      [id, 4, matId, thicknessId, beta, nodeI, nodeJ, nodeK, nodeL, plateType]
        单元数据列表。梁=1, 杆=2, 索=3, 板=4

Input parameters:

- `element_data` (array, required)

### `create_load_group` (~99 tokens)

Create a load group (创建荷载组).

Every load in QiaoTong must belong to a load group.
Create this before creating a load case or applying loads.
每个荷载必须属于某个荷载组，迅建荷载工况之前先建荷载组。

Args:
    name: Load group name (荷载组名称, e.g. "默认荷载组")

Input parameters:

- `name` (string)

### `create_load_case` (~225 tokens)

Create a load case (创建荷载工况).

A load case must exist before loads can be applied to it.
In QiaoTong, creating a load case named "自重" is sufficient for self-weight —
the software applies it automatically (see server instructions for details).

Args:
    name: Load case name (工况名称, e.g. "自重", "SW", "恒荷")
    case_type: Load case type (荷载工况类型):
        "施工阶段荷载" (default) | "恒载" | "活载" | "制动力" | "风荷载"
        "体系温度荷载" | "梯度温度荷载"
        "长轨伸缩挠曲力荷载" | "脱轨荷载" | "长轨断轨力荷载"
        "船舶撞击荷载" | "汽车撞击荷载" | "用户定义荷载"

Input parameters:

- `case_type` (string)
- `name` (string, required)

### `add_load_combine` (~192 tokens)

Add a load combination (添加荷载组合).

Combines multiple load cases into a single combination for analysis/checking.
(将多个荷载工况组合成一个荷载组合)

Args:
    name: Load combination name (荷载组合名称)
    combine_type: Combination type (组合类型): 1=Add(线性加), 2=Envelope(包络), etc.
    combine_info: List of components [[case_name, case_type, factor], ...]
                  (组合项信息 [[工况名, 类型(如'ST'), 系数], ...])
    describe: Description (描述说明)
    index: ID index, -1 for auto (编号，-1自动生成)

Input parameters:

- `combine_info`
- `combine_type` (integer)
- `describe` (string)
- `index` (integer)
- `name` (string, required)

### `create_material` (~219 tokens)

Create a material in the bridge model (创建材料).

Args:
    name: Material name (材料名称)
    mat_type: Material type (材料类型): 1=Concrete(混凝土), 2=Steel(钢材),
              3=Prestress(预应力), 4=Rebar(钢筋), 5=Custom(自定义), 6=Composite(组合)
    standard: Code standard index, starts from 1 (规范序号，从1开始)
    database: Material database name, e.g. 'C50', 'Q345' (数据库名称)
    data_info: Custom material properties [E, γ, ν, α] for mat_type=5
               自定义材料参数 [弹性模量, 容重, 泊松比, 热膨胀系数]

Input parameters:

- `data_info`
- `database` (string)
- `mat_type` (integer, required)
- `name` (string, required)
- `standard` (integer)

### `add_time_parameter` (~155 tokens)

Add time-dependent material parameters (添加时间依存材料参数).

Args:
    name: Parameter name (参数名称)
    code_index: Code index (规范号)
    time_parameter: Code specific parameters (规范关联的材料参数)
    creep_data: Custom creep data [[time, value], ...] (自定义徐变数据)
    shrink_data: Custom shrinkage data string (自定义收缩数据)
    index: ID index, -1 for auto (编号，-1自动生成)

Input parameters:

- `code_index` (integer)
- `creep_data`
- `index` (integer)
- `name` (string, required)
- `shrink_data` (string)
- `time_parameter`

### `add_creep_function` (~104 tokens)

Add user-defined creep function (添加自定义徐变函数).

Args:
    name: Function name (函数名称)
    creep_data: Creep coefficient over time [[time(days), coefficient], ...]
                (徐变系数表 [[天数, 徐变系数], ...])
    scale_factor: Scale factor (比例系数)

Input parameters:

- `creep_data` (array, required)
- `name` (string, required)
- `scale_factor` (number)

### `add_shrink_function` (~102 tokens)

Add user-defined shrinkage function (添加自定义收缩函数).

Args:
    name: Function name (函数名称)
    shrink_data: Shrinkage strain over time [[time(days), strain], ...]
                 (收缩应变表 [[天数, 应变], ...])
    scale_factor: Scale factor (比例系数)

Input parameters:

- `name` (string, required)
- `scale_factor` (number)
- `shrink_data`

### `create_section` (~1772 tokens)

Create a cross-section (创建截面) — one tool for all parametric section types.

Args:
    name: Section name (截面名称)
    sec_type: Section type, Chinese enum (截面类型，中文枚举)。
        sec_info layout per type (各类型 sec_info 参数顺序):
        ─ 基本形状 ─
        "矩形":       [宽, 高]
        "圆形":       [直径]
        "圆管":       [直径, 壁厚]
        "箱型":       [宽, 高, 底宽, 腹板厚, 顶板厚, 底板厚]
        "T形":        [宽, 高, 腹板厚, 顶板厚]
        "倒T形":      [宽, 高, 腹板厚, 底板厚]
        "I字形":      [顶宽, 底宽, 高, 腹板厚, 顶板厚, 底板厚]
        "马蹄T形":    [宽, 高, 腹板厚, 翼缘厚, 腹板底渐变高, 顶倒角宽, 顶倒角高, 底倒角宽, 底倒角高]
        "实腹八边形": [宽, 高, 倒角高, 倒角宽]
        "空腹八边形": [宽, 高, 腹板厚, 顶板厚, 底板厚, 倒角宽, 倒角高]
        "内八角形":   [宽, 高, 腹板厚, 顶板厚, 底板厚, 倒角宽, 倒角高]
        "实腹圆端形": [宽, 高]
        "空腹圆端形": [宽, 高, 壁厚]
        ─ 混凝土/组合 ─
        "I字型混凝土": [顶宽, 底宽, 高, 腹板厚, 顶板厚, 底板厚, 顶倒角宽, 顶倒角高, 底倒角宽, 底倒角高]
        "钢管砼":     [直径, 壁厚]
        "钢箱砼":     [宽, 高, 底宽, 腹板厚, 顶板厚, 底板厚]
        "混凝土箱梁": 顶板/腹板/底板参数列表，配合 box_num/box_height/symmetry/chamfer_info
        "工字组合梁" | "箱形组合梁" | "自定义组合梁": sec_info + mat_combine(材料组合比)
        ─ 钢结构带肋 ─
        "带肋H截面":   [高, 宽, 左右腹板厚, 横腹板厚, 腹板肋高, 腹板肋厚]
        "钢工字型带肋": [顶宽, 底宽, 腹板高, 顶板厚, 底板厚, 腹板厚, 顶缘肋距, 肋数, 肋距, 肋高, 肋厚]
        "带肋钢箱":   [宽, 高, 腹板厚, 顶板厚, 底板厚, 顶底板肋高, 顶底板肋厚, 腹板肋高, 腹板肋厚,
                      顶底板肋距, 腹板肋距, 腹板肋数, 顶底板肋数]
        "钢桁箱梁3":  [高, 宽, 顶悬臂肋高, 底悬臂肋高, 腹板厚, 顶板厚, 底板厚, 顶板肋高, 顶板肋厚,
                      底板肋高, 底板肋厚, 腹板肋高, 腹板肋厚]
        "钢桁箱梁1":  [高, 宽, 左悬臂宽, 右悬臂宽, 底悬臂高, 腹板厚, 顶板厚, 底板厚, 顶板肋高, 顶板肋厚,
                      底板肋高, 底板肋厚, 顶缘腹板肋距, 腹板肋数, 腹板肋距, 腹板肋高, 腹板肋厚,
                      左腹板肋位置, 右腹板肋位置, 左悬臂肋距, 左悬臂肋高, 左悬臂肋厚, 左悬臂肋顶距,
                      左悬臂肋底距, 左悬臂肋倒角, 右悬臂肋距, 右悬臂肋高, 右悬臂肋厚, 右悬臂肋顶距,
                      右悬臂肋底距, 右悬臂肋倒角]  (32项)
        "钢桁箱梁2":  [高, 宽, 左上悬臂宽, 右上悬臂宽, 左下悬臂宽, 右下悬臂宽, 腹板厚, 顶板厚, 底板厚,
                      顶板肋高, 顶板肋厚, 底板肋高, 底板肋厚, 顶缘腹板肋距, 腹板肋数, 腹板肋距,
                      腹板肋高, 腹板肋厚, 左腹板肋位置, 右腹板肋位置, 左上悬臂肋距, 左上悬臂肋高,
                      左上悬臂肋厚, 左上悬臂肋顶距, 左上悬臂肋底距, 左上悬臂肋倒角, 右上悬臂肋距,…

Input parameters:

- `box_height`
- `box_num`
- `chamfer_info`
- `mat_combine`
- `name` (string, required)
- `sec_info`
- `sec_type` (string, required)
- `symmetry` (boolean)

### `create_polygon_section` (~103 tokens)

Create a custom polygon cross-section (创建任意多边形截面).

Args:
    name: Section name (截面名称)
    loop_segments: Dictionary of loops. Keys should be 'main' for outer loop and 'sub1'... for inner hollow loops. Example: `{"main": [[y1,z1], [y2,z2], ...]}`

Input parameters:

- `loop_segments` (object, required)
- `name` (string, required)

### `create_line_width_section` (~80 tokens)

Create a line-width cross-section (创建线宽截面).

Args:
    name: Section name (截面名称)
    sec_lines: List of line segments with thickness. Format: [[y1, z1, y2, z2, thickness], ...]

Input parameters:

- `name` (string, required)
- `sec_lines` (array, required)

### `create_section_from_properties` (~186 tokens)

Create a section directly from its pre-calculated properties (通过截面特性直接创建截面).

Args:
    name: Section name (截面名称)
    area: Cross-sectional area (横截面面积 Area)
    ix: Torsional constant (扭转惯性矩 Ixx)
    iy: Moment of inertia about y-axis (抗弯惯性矩 Iyy)
    iz: Moment of inertia about z-axis (抗弯惯性矩 Izz)
    sec_property: Full list of properties (up to 29). If not provided, a basic list is auto-generated with Area, Ix, Iy, Iz.

Input parameters:

- `area` (number, required)
- `ix` (number, required)
- `iy` (number, required)
- `iz` (number, required)
- `name` (string, required)
- `sec_property`

### `create_tapered_section` (~155 tokens)

Create a tapered section from two existing sections (根据两个已存截面创建渐变截面).

Args:
    name: Tapered section name (渐变截面名称)
    begin_id: Start section ID (起始截面编号)
    end_id: End section ID (终止截面编号)
    shear_consider: Consider shear deformation (是否考虑剪切变形), default True
    sec_normalize: Normalize section (截面归一化), default False

Input parameters:

- `begin_id` (integer, required)
- `end_id` (integer, required)
- `name` (string, required)
- `sec_normalize` (boolean)
- `shear_consider` (boolean)

### `add_tapper_section_group` (~210 tokens)

Add a tapered section group (添加变截面组).

Args:
    name: Group name (变截面组名称)
    ids: Element IDs in the group (变截面组内的单元编号)
    factor_w: Width variation factor (宽度变化系数)
    factor_h: Height variation factor (高度变化系数)
    ref_w: Width reference point (宽度参考点: 0=i, 1=j)
    ref_h: Height reference point (高度参考点: 0=i, 1=j)
    dis_w: Width variation distance (宽度变化距离)
    dis_h: Height variation distance (高度变化距离)

Input parameters:

- `dis_h` (number)
- `dis_w` (number)
- `factor_h` (number)
- `factor_w` (number)
- `ids`
- `name` (string, required)
- `ref_h` (integer)
- `ref_w` (integer)

### `add_thickness` (~129 tokens)

Add a plate thickness property (添加板厚度).

Args:
    name: Thickness name (厚度名称)
    t: Thickness in meters (板厚 m)
    thick_type: Thickness type (厚度类型): 0=平面内及平面外等厚, 1=平面内及平面外不等厚
    index: ID index, -1 for auto (编号，-1自动生成)

Input parameters:

- `index` (integer)
- `name` (string, required)
- `t` (number)
- `thick_type` (integer)

### `add_effective_width` (~157 tokens)

Add effective width to beam elements (添加截面有效宽度).

Args:
    element_ids: Element ID(s) (单元编号)
    factor_i: I-end factor (I端系数)
    factor_j: J-end factor (J端系数)
    dz_i: I-end Dz offset (I端 Dz 偏移)
    dz_j: J-end Dz offset (J端 Dz 偏移)
    group_name: Boundary group name (边界组名)

Input parameters:

- `dz_i` (number)
- `dz_j` (number)
- `element_ids` (required)
- `factor_i` (number, required)
- `factor_j` (number, required)
- `group_name` (string)

### `update_section_bias` (~229 tokens)

Update section bias/eccentricity (更新截面偏心/对齐方式).

Args:
    index: Section ID (截面编号)
    bias_type: Bias type (偏心类型): e.g. "中心", "中上", "中下", "左上", "右上", "左下", "右下"
    center_type: Center type (中心类型): "质心" (Centroid) or "剪心" (Shear center), default "质心"
    shear_consider: Consider shear deformation (是否考虑剪切变形), default True
    bias_point: Custom bias offset [y, z] (自定义偏心距离)
    side_i: Apply to I-end (应用于I端) - for tapered sections True means I-end, False means J-end, default True

Input parameters:

- `bias_point`
- `bias_type` (string, required)
- `center_type` (string)
- `index` (integer, required)
- `shear_consider` (boolean)
- `side_i` (boolean)

### `remove_section` (~66 tokens)

Delete one or more sections from the model (删除截面).

Args:
    ids: Section ID(s) to delete. Supports int, list, or range string '3to5'.
         (截面编号，支持整数、列表或范围字符串)

Input parameters:

- `ids` (required)

### `update_section_property` (~231 tokens)

Directly modify the calculated properties of a section (直接修改截面特性值).

Use this to manually override Area, Ix, Iy, Iz etc. after creation.
Typically used for fine-tuning or correcting auto-calculated values.
(用于手动覆盖截面面积、惯性矩等自动计算值)

Args:
    index: Section ID (截面编号)
    sec_property: List of up to 29 section properties in order:
                  [Area, Asy, Asz, Ixx, Iyy, Izz, ...]
                  (截面特性列表，按顺序: 面积, 剪切面积y, 剪切面积z, 扭转惯性矩, 抗弯惯性矩y, 抗弯惯性矩z, ...)
    side_i: For tapered sections, True=I-end, False=J-end (变截面时 True=I端, False=J端)

Input parameters:

- `index` (integer, required)
- `sec_property` (array, required)
- `side_i` (boolean)

### `calculate_section_property` (~78 tokens)

Recalculate properties for all sections in the model (重新计算所有截面特性).

Call this after creating or modifying section geometry to ensure
Area, Iy, Iz, J etc. are up-to-date.
(在创建或修改截面几何后调用，确保面积、惯性矩等特性值为最新)

### `set_support` (~222 tokens)

Set support boundary conditions on nodes (设置节点支承).

Args:
    node_id: Node ID(s). Supports int, list, or range string like '1to10'
             (节点编号，支持整数、列表或范围字符串如 '1to10')
    dx: Fix X translation (固定X平动), default True
    dy: Fix Y translation (固定Y平动), default True
    dz: Fix Z translation (固定Z平动), default True
    rx: Fix X rotation (固定X转动), default False
    ry: Fix Y rotation (固定Y转动), default False
    rz: Fix Z rotation (固定Z转动), default False
    group_name: Boundary group name (边界组名)

Input parameters:

- `dx` (boolean)
- `dy` (boolean)
- `dz` (boolean)
- `group_name` (string)
- `node_id` (required)
- `rx` (boolean)
- `ry` (boolean)
- `rz` (boolean)

### `set_self_weight_stage` (~285 tokens)

Configure self-weight for a construction stage (设置施工阶段自重).

IMPORTANT — In QiaoTong, self-weight is NOT a load case. It is controlled
by each construction stage's "self-weight stage number" per structure group.
The solver computes gravity load automatically from section area × material
unit weight × g. You only choose WHICH stage carries a group's self-weight.
（桥通中自重不是荷载工况，由施工阶段对各结构组的"计自重阶段号"控制，
求解器按 截面面积 × 材料容重 × 重力加速度 自动计算。）

For a single-stage / one-shot (一次成桥) model, self-weight is handled when
you merge stages via merge_operation_stage — you usually do NOT need this tool.
Use it only to override which stage accounts for a group's self-weight.

Args:
    stage_name: Construction stage name (施工阶段名)
    structure_group_name: Structure group name (结构组名)
    weight_stage_id: Self-weight stage number (计自重阶段号):
        0=not counted(不计自重), 1=this stage(本阶段), n=stage n(第n阶段)

Input parameters:

- `stage_name` (string, required)
- `structure_group_name` (string)
- `weight_stage_id` (integer)

### `set_gravity` (~62 tokens)

Set the gravitational acceleration used for self-weight (设置重力加速度).

Args:
    gravity: Gravitational acceleration in m/s² (重力加速度，单位 m/s²), default 9.8

Input parameters:

- `gravity` (number)

### `apply_nodal_force` (~213 tokens)

Apply forces/moments at nodes (施加节点荷载).

Args:
    node_id: Node ID(s) (节点编号)
    case_name: Load case name (荷载工况名)
    fx: Force in X direction (X方向力)
    fy: Force in Y direction (Y方向力)
    fz: Force in Z direction (Z方向力)
    mx: Moment about X axis (绕X轴弯矩)
    my: Moment about Y axis (绕Y轴弯矩)
    mz: Moment about Z axis (绕Z轴弯矩)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `fx` (number)
- `fy` (number)
- `fz` (number)
- `group_name` (string)
- `mx` (number)
- `my` (number)
- `mz` (number)
- `node_id` (required)

### `apply_beam_distributed_load` (~216 tokens)

Apply distributed load on beam elements (施加梁单元分布荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    direction: Load direction (荷载方向): 1=Global X, 2=Global Y, 3=Global Z,
               4=Local X, 5=Local Y, 6=Local Z
    load_values: Load values at positions (荷载值列表), e.g. [q1, q2] for linear varying
    load_positions: Relative positions 0-1 (荷载位置), e.g. [0, 1] for full span
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `direction` (integer)
- `element_id` (required)
- `group_name` (string)
- `load_positions`
- `load_values`

### `add_system_temperature` (~118 tokens)

Apply system temperature load (体系温度/整体升降温荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    temperature: Temperature value (温度变化值，如升温+20，降温-20)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `element_id` (required)
- `group_name` (string)
- `temperature` (number, required)

### `add_gradient_temperature` (~194 tokens)

Apply gradient temperature load (梯度温度荷载).

Args:
    element_id: Element ID(s) (单元编号，支持范围字符串)
    case_name: Load case name (荷载工况名)
    temperature: Temperature difference (温差)
    section_oriental: Section direction, beams only (截面方向，仅梁单元):
        0=section Y (截面Y向, default), 1=section Z (截面Z向)
    element_type: Element type (单元类型): 1=beam(梁), 2=plate(板)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `element_id` (required)
- `element_type` (integer)
- `group_name` (string)
- `section_oriental` (integer)
- `temperature` (number, required)

### `add_custom_temperature` (~144 tokens)

Apply custom temperature load (自定义温度荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    orientation: Direction of temperature change (温度方向, 1=Y向, 2=Z向)
    temperature_data: Custom temperature points [[distance, temp_diff], ...] (温度数据点)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `element_id` (required)
- `group_name` (string)
- `orientation` (integer)
- `temperature_data`

### `add_beam_section_temperature` (~255 tokens)

Apply beam section temperature load (梁截面温度荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    code_index: Code index (规范号)
    sec_type: Section type (截面类型, 如1为箱梁等)
    t1: Temperature difference param 1 (各部位温差参数1)
    t2: Temperature difference param 2 (各部位温差参数2)
    t3: Temperature difference param 3 (各部位温差参数3)
    t4: Temperature difference param 4 (各部位温差参数4)
    thick: Thickness parameter (厚度参数)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `code_index` (integer)
- `element_id` (required)
- `group_name` (string)
- `sec_type` (integer)
- `t1` (number)
- `t2` (number)
- `t3` (number)
- `t4` (number)
- `thick` (number)

### `add_initial_tension_load` (~164 tokens)

Apply initial tension load (初拉力荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    tension: Tension force (拉力值)
    tension_type: Type of tension (初拉力类型)
    application_type: Application type (施加方式)
    stiffness: Stiffness reduction (刚度参数)
    group_name: Load group name (荷载组名)

Input parameters:

- `application_type` (integer)
- `case_name` (string, required)
- `element_id` (required)
- `group_name` (string)
- `stiffness` (number)
- `tension` (number)
- `tension_type` (integer)

### `add_cable_length_load` (~127 tokens)

Apply cable length adjustment load (索长误差荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    length: Length difference (长度误差量)
    tension_type: Tension type (拉力类型)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `element_id` (required)
- `group_name` (string)
- `length` (number)
- `tension_type` (integer)

### `add_plate_element_load` (~184 tokens)

Apply plate element load (板单元面上荷载).

Args:
    element_id: Element ID(s) (单元编号)
    case_name: Load case name (荷载工况名)
    load_type: Load type (荷载类型)
    load_place: Application place (施加位置)
    coord_system: Coordinate system (坐标系: 3为整体)
    list_load: Load values (荷载值)
    list_xy: Location coords (位置坐标)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `coord_system` (integer)
- `element_id` (required)
- `group_name` (string)
- `list_load`
- `list_xy`
- `load_place` (integer)
- `load_type` (integer)

### `add_distribute_plane_load` (~234 tokens)

Apply arbitrary distributed plane load (任意分布面荷载).

Args:
    index: Load ID (编号)
    case_name: Load case name (荷载工况名)
    type_name: Load type name (分布面荷载类型名)
    point1: 1st point defining the plane [x,y,z] (定义面的点1)
    point2: 2nd point defining the plane [x,y,z] (定义面的点2)
    point3: 3rd point defining the plane [x,y,z] (定义面的点3)
    plate_ids: Optional plate elements to load (指定板单元)
    coord_system: Coordinate system (坐标系)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `coord_system` (integer)
- `group_name` (string)
- `index` (integer, required)
- `plate_ids`
- `point1`
- `point2`
- `point3`
- `type_name` (string, required)

### `add_support_settlement` (~236 tokens)

Apply support settlement / nodal displacement load (支座沉降/节点强制位移).

Args:
    node_id: Node ID(s) (节点编号)
    case_name: Load case name (荷载工况名)
    dz: Settlement in Z direction (Z向沉降量/下沉为负值)
    dx: Displacement in X direction (X向强制位移)
    dy: Displacement in Y direction (Y向强制位移)
    rx: Rotation around X axis (绕X轴强制转角)
    ry: Rotation around Y axis (绕Y轴强制转角)
    rz: Rotation around Z axis (绕Z轴强制转角)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `dx` (number)
- `dy` (number)
- `dz` (number, required)
- `group_name` (string)
- `node_id` (required)
- `rx` (number)
- `ry` (number)
- `rz` (number)

### `add_nodal_mass` (~126 tokens)

Add nodal mass for dynamic analysis (添加节点质量).

Args:
    node_id: Node ID(s) (节点编号)
    mass_x: Mass in X direction (X向质量)
    mass_y: Mass in Y direction (Y向质量)
    mass_z: Mass in Z direction (Z向质量)
    mass_rm: Rotational mass (转动质量)

Input parameters:

- `mass_rm` (number)
- `mass_x` (number)
- `mass_y` (number)
- `mass_z` (number)
- `node_id` (required)

### `add_load_to_mass` (~80 tokens)

Convert a load case to mass for dynamic analysis (将荷载转换为质量).

Args:
    name: Load case name to convert (要转换为质量的荷载工况名称)
    factor: Conversion factor (转换系数，通常取1.0)

Input parameters:

- `factor` (number)
- `name` (string, required)

### `add_spectrum_function` (~109 tokens)

Add response spectrum function (添加反应谱函数).

Args:
    name: Function name (函数名称)
    factor: Scale factor (比例系数)
    kind: Type of spectrum (反应谱类型, 例如中国规范等)
    function_info: User defined spectrum points [[period, value], ...] (自定义谱数据)

Input parameters:

- `factor` (number)
- `function_info`
- `kind` (integer)
- `name` (string, required)

### `add_spectrum_case` (~158 tokens)

Add response spectrum load case (添加反应谱工况).

Args:
    name: Case name (工况名称)
    description: Description (描述)
    kind: Combination method (组合方法, SRSS/CQC等)
    info_x: X direction info [function_name, factor] (X向配置 [谱函数名, 系数])
    info_y: Y direction info [function_name, factor] (Y向配置)
    info_z: Z direction info [function_name, factor] (Z向配置)

Input parameters:

- `description` (string)
- `info_x`
- `info_y`
- `info_z`
- `kind` (integer)
- `name` (string, required)

### `add_time_history_function` (~96 tokens)

Add time history function (添加时程函数).

Args:
    name: Function name (函数名称)
    factor: Scale factor (比例系数)
    kind: Type (类型)
    function_info: Time history points [[time, value], ...] (时程数据点)

Input parameters:

- `factor` (number)
- `function_info`
- `kind` (integer)
- `name` (string, required)

### `add_time_history_case` (~113 tokens)

Add time history analysis case (添加时程分析工况).

Args:
    name: Case name (工况名称)
    duration: Total duration in seconds (总时长)
    time_step: Output time step in seconds (输出步长)
    description: Description (描述)
    index: ID index (编号)

Input parameters:

- `description` (string)
- `duration` (number)
- `index` (integer)
- `name` (string, required)
- `time_step` (number)

### `update_bulking_setting` (~103 tokens)

Configure buckling analysis settings (屈曲分析设定).

Args:
    do_analysis: Enable buckling analysis (是否进行屈曲分析)
    mode_count: Number of modes to calculate (计算模态数)
    stage_id: Construction stage ID for base state, -1 for base model (施工阶段号)

Input parameters:

- `do_analysis` (boolean)
- `mode_count` (integer)
- `stage_id` (integer)

### `add_construction_stage` (~243 tokens)

Add a construction stage (添加施工阶段).

Args:
    name: Stage name (施工阶段名称)
    duration: Stage duration in days (时长，单位：天)
    active_structures: Activated structure groups (激活结构组):
                       [[group_name, age, install_method, weight_stage_id], ...]
                       install_method: 1=deformation, 2=unstressed, 3=tangent, 4=tangent
                       (安装方法: 1=变形法, 2=无应力法, 3=接线法, 4=切线法)
    active_boundaries: Activated boundary groups (激活边界组):
                       [[group_name, position], ...], position: 0=before, 1=after deformation
    active_loads: Activated load groups (激活荷载组):
                  [[group_name, time], ...], time: 0=start, 1=end

Input parameters:

- `active_boundaries`
- `active_loads`
- `active_structures`
- `duration` (number, required)
- `name` (string, required)

### `configure_analysis` (~166 tokens)

Configure analysis settings (配置分析设置).

Args:
    do_construction_stage: Enable construction stage analysis (是否进行施工阶段分析)
    do_creep: Enable creep analysis (是否进行徐变分析)
    do_vibration: Enable self-vibration analysis (是否进行自振分析)
    vibration_modes: Number of vibration modes (振型数量)
    solver_type: Solver type (求解器): 0=sparse matrix, 1=variable bandwidth
                 0=稀疏矩阵, 1=变带宽

Input parameters:

- `do_construction_stage` (boolean)
- `do_creep` (boolean)
- `do_vibration` (boolean)
- `solver_type` (integer)
- `vibration_modes` (integer)

### `run_analysis` (~138 tokens)

Run the structural analysis calculation (执行结构分析计算).

Use this after all loads, boundaries, and analysis settings are configured.
Solving can take a long time; it runs in a worker thread so the connection
stays responsive, with periodic progress heartbeats.
求解可能耗时较长，在工作线程中执行以保持连接不阻塞，并周期性上报进度。

Args:
    read_timeout: Max total solve time in seconds, default 3600
                  (求解总时限秒数；超时抛错，求解本身在后台继续)

Input parameters:

- `read_timeout` (integer)

### `validate_model` (~72 tokens)

Validate the current model for common issues before running analysis
(验证模型，在运行分析前检查常见问题).

Checks for:
\- Missing nodes/elements/materials (缺失的节点/单元/材料)
\- Overlapping nodes (重合节点)
\- Overlapping elements (重合单元)

### `get_model_info` (~58 tokens)

Get a summary of the current bridge model (获取当前桥梁模型概要信息).

Returns counts of all model entities: nodes, elements, materials,
sections, construction stages, load cases, etc.
返回所有模型实体的数量统计。

### `get_analysis_results` (~360 tokens)

Get analysis results from the bridge model (获取分析结果).

Args:
    result_type: Type of result to retrieve (结果类型):
        'deformation' (变形), 'force' (内力), 'stress' (应力), 'reaction' (反力)
    ids: Node/Element IDs to query (查询的节点/单元编号)
    stage_id: Construction stage (施工阶段): -1=operation(运营), 0=envelope(包络),
              n=stage n (第n阶段)
    case_name: Load case name for operation stage (运营阶段荷载工况名).
               For stage_id=-1, the tool automatically adds "ST:" prefix if missing.
               (运营阶段查询时工具会自动添加 "ST:" 前缀)
    limit: Max items per page, default 100 (单页条数上限)
    offset: Pagination offset (翻页偏移)

Returns:
    Deformation results (变形): List of dicts with keys
        {node_id, dx, dy, dz, rx, ry, rz} (lowercase, in meters/radians)
    Force results (内力): List of dicts with keys
        {element_id, force_i: {Fx, Fy, Fz, Mx, My, Mz}, force_j: {...}}
        (nested structure, forces in kN, moments in kN·m)
    Stress/Reaction: Similar nested dict structures

Input parameters:

- `case_name` (string)
- `ids`
- `limit` (integer)
- `offset` (integer)
- `result_type` (string, required)
- `stage_id` (integer)

### `create_structure_group` (~113 tokens)

Create a structure group and optionally assign elements to it (创建结构组).

Structure groups are used to control which elements are active during
each construction stage (施工阶段分析中控制单元激活状态).

Args:
    name: Structure group name (结构组名称)
    element_ids: Element IDs to add, int list or range string like '1to20'
                 (单元编号列表或范围字符串，如 '1to20')

Input parameters:

- `element_ids`
- `name` (string, required)

### `update_structure_group_name` (~67 tokens)

Rename an existing structure group (重命名结构组).

Args:
    name: Current structure group name (当前结构组名称)
    new_name: New structure group name (新结构组名称)

Input parameters:

- `name` (string, required)
- `new_name` (string, required)

### `remove_structure_group` (~68 tokens)

Remove a structure group (删除结构组).
If no name is provided, removes all structure groups.

Args:
    name: Name of the structure group to remove, leave empty to remove all (待删除的结构组名称，不填则删除全部)

Input parameters:

- `name` (string)

### `create_boundary_group` (~73 tokens)

Create a boundary condition group (创建边界组).

Boundary groups collect supports/links to be activated or deactivated
together during construction stages (施工阶段中统一控制边界条件激活状态).

Args:
    name: Boundary group name (边界组名称)

Input parameters:

- `name` (string, required)

### `list_group_members` (~76 tokens)

List members of a structure/boundary/load group (查看分组的成员信息).

Args:
    group_type: Type of group (分组类型): 'structure', 'boundary', 'load'
    name: Group name (分组名称)

Input parameters:

- `group_type` (string, required)
- `name` (string, required)

### `add_elements_to_group` (~78 tokens)

Add elements to an existing structure group (向已有结构组添加单元).

Args:
    group_name: Structure group name (结构组名称)
    element_ids: Element IDs to add (单元编号，支持列表或范围字符串 '1to20')

Input parameters:

- `element_ids` (required)
- `group_name` (string, required)

### `merge_operation_stage` (~88 tokens)

Merge all construction stages into a final operation stage (合并为运营阶段).

This finalizes the construction stage analysis by creating an operation
stage that accumulates all previous stage results.
通过合并所有施工阶段创建运营阶段，作为施工阶段分析的最终状态。

Args:
    name: Name for the merged operation stage (运营阶段名称)

Input parameters:

- `name` (string)

### `remove_construction_stage` (~62 tokens)

Remove a construction stage (删除施工阶段).

Args:
    name: Name of the stage to remove. If empty, removes all stages.
          (要删除的施工阶段名称。如果为空，则删除所有施工阶段)

Input parameters:

- `name` (string)

### `update_construction_stage` (~376 tokens)

Update an existing construction stage (修改施工阶段).

Used to activate/deactivate structure groups, boundaries, and loads
in a specific construction stage.
(用于在特定施工阶段激活/钝化结构组、边界条件和荷载)

Args:
    name: Existing stage name (现有阶段名称)
    new_name: New stage name (新名称)
    duration: Stage duration in days (阶段时长，天)
    active_structures: Structures to activate [[name, age, mat_id, time_param_id], ...]
                       (激活的结构组信息 [[名称, 材龄, 材料号, 时间参数号], ...])
    delete_structures: Structure group names to deactivate (钝化的结构组名称列表)
    active_boundaries: Boundaries to activate [[name, position], ...]
                       (激活的边界组信息 [[名称, 位置], ...])
    delete_boundaries: Boundary group names to deactivate (钝化的边界组名称列表)
    active_loads: Loads to activate [[name, day], ...] (激活的荷载组信息 [[名称, 天数], ...])
    delete_loads: Loads to deactivate [[name, day], ...] (钝化的荷载组信息 [[名称, 天数], ...])
    temp_loads: Temporary load group names (临时荷载组名称列表)

Input parameters:

- `active_boundaries`
- `active_loads`
- `active_structures`
- `delete_boundaries`
- `delete_loads`
- `delete_structures`
- `duration` (integer)
- `name` (string, required)
- `new_name` (string)
- `temp_loads`

### `switch_display_stage` (~78 tokens)

Switch the view to a specific construction stage (切换显示阶段).

Updates the software UI to display the model at the specified stage.
(更新软件界面，显示指定施工阶段的模型状态)

Args:
    stage_name: Name of the stage to display (要显示的阶段名称)

Input parameters:

- `stage_name` (string, required)

### `create_tendon_property` (~486 tokens)

Create a tendon property definition (创建钢束特性).

Args:
    name: Tendon property name (钢束特性名)
    material_name: Prestress steel material name, must exist
                   (钢材材料名，须已通过 create_material 创建)
    tendon_type: Tendon type (钢束类型): 0=pre-tension(先张),
                 1=post-tension(后张), 2=external(体外)
    duct_type: Duct type (孔道类型): 1=金属波纹管, 2=塑料波纹管,
               3=铁皮管, 4=钢管, 5=抽芯成型
    steel_type: Steel type (钢材类型): 1=钢绞线(strand), 2=螺纹钢筋(threaded bar)
    area: Tendon area in m² (钢束面积), e.g. 0.00139 for 10Φ15.2 strands
    duct_diameter: Duct diameter in m (孔道直径)
    friction: Friction coefficient μ (摩阻系数), typically 0.20~0.30
    deviation: Wobble coefficient k (偏差系数), typically 0.0015
    anchorage_slip: Anchorage slip at each end in m (锚固滑移，两端相同), typ. 0.006
    steel_detail: Advanced override, raw qtmodel steel_detail list
                  (高级用法：直接给出原始 steel_detail 列表，覆盖上述四个参数；
                  钢绞线=[面积,孔道直径,摩阻,偏差]，
                  螺纹钢筋=[直径,面积,孔道直径,摩阻,偏差,张拉方式])

Input parameters:

- `anchorage_slip` (number)
- `area` (number)
- `deviation` (number)
- `duct_diameter` (number)
- `duct_type` (integer)
- `friction` (number)
- `material_name` (string, required)
- `name` (string, required)
- `steel_detail`
- `steel_type` (integer)
- `tendon_type` (integer)

### `create_tendon_2d` (~468 tokens)

Create a 2D tendon defined by profile control points (创建2D钢束/平弯钢束).

The tendon profile lies in the X-Z plane; each control point is
[x, z, r] where r is the fillet radius (0 for sharp points).
钢束线形位于XZ平面，控制点为 [x, z, r]，r为圆弧半径（0为折点）。

Args:
    name: Tendon name (钢束名称)
    property_name: Tendon property name, must exist (钢束特性名，须已创建)
    control_points: Profile control points [[x, z, r], ...]
                    (控制点信息 [[x, z, 半径r], ...])
    point_insert: Insertion point [x, y, z] for straight positioning
                  (直线定位时的插入点坐标 [x, y, z])
    num: Number of tendons (根数)
    line_type: Point type (线型): 1=导线点(guide), 2=折线点(polyline)
    position_type: Positioning (定位方式): 1=straight(直线), 2=track line(轨迹线)
    symmetry: Symmetry point (对称点): 0=left end(左端), 1=right end(右端),
              2=asymmetric(不对称)
    group_name: Tendon group name (钢束组名)

Example:
    create_tendon_2d(name="T1", property_name="15-10",
                     control_points=[[0, -0.5, 0], [20, -1.2, 8], [40, -0.5, 0]],
                     point_insert=[0, 0, 0])

Input parameters:

- `control_points` (array, required)
- `group_name` (string)
- `line_type` (integer)
- `name` (string, required)
- `num` (integer)
- `point_insert` (array, required)
- `position_type` (integer)
- `property_name` (string, required)
- `symmetry` (integer)

### `apply_prestress` (~186 tokens)

Apply prestress force to tendon(s) (施加预应力).

Args:
    case_name: Load case name for the prestress (预应力荷载工况名)
    tendon_name: Tendon name or list of tendon names (钢束名称或名称列表)
    force: Prestress force in N (预应力张拉力，单位N), e.g. 3000000 = 3000kN
    tension_type: Tension end (张拉方式): 0=start(始端), 1=end(末端), 2=both(两端)
    group_name: Load group name (荷载组名)

Input parameters:

- `case_name` (string, required)
- `force` (number, required)
- `group_name` (string)
- `tendon_name` (required)
- `tension_type` (integer)

### `get_tendon_info` (~69 tokens)

Get tendon geometry and prestress loss results (获取钢束信息与损失结果).

Args:
    tendon_name: Specific tendon name, or empty string for all tendons
                 (钢束名称，空字符串则返回所有钢束)

Input parameters:

- `tendon_name` (string)

### `add_tendon_3d` (~286 tokens)

Add a 3D tendon (添加三维钢束/空间钢束).

Args:
    name: Tendon name (钢束名称)
    property_name: Tendon property name, must exist (钢束特性名，须已创建)
    control_points: 3D control points [[x, y, z, r], ...], r = fillet radius
                    (三维控制点 [[x, y, z, 半径r], ...])
    point_insert: Insertion point [x, y, z] for straight positioning
                  (直线定位时的插入点坐标)
    num: Number of tendons (钢束根数)
    line_type: Point type (线型): 1=导线点(guide), 2=折线点(polyline)
    position_type: Positioning (定位方式): 1=straight(直线), 2=track line(轨迹线)
    group_name: Tendon group name (钢束组名)

Input parameters:

- `control_points` (array, required)
- `group_name` (string)
- `line_type` (integer)
- `name` (string, required)
- `num` (integer)
- `point_insert` (array, required)
- `position_type` (integer)
- `property_name` (string, required)

### `assign_tendon_elements` (~42 tokens)

Assign elements to a tendon (为钢束分配单元).

Args:
    ids: Element IDs (单元编号)

Input parameters:

- `ids` (required)

### `get_tendon_loss_results` (~67 tokens)

Get tendon prestress loss results (获取预应力损失结果).

Args:
    name: Tendon name (钢束名)
    stage_id: Construction stage ID (施工阶段编号)

Input parameters:

- `name` (string, required)
- `stage_id` (integer)

### `get_tendon_position_result` (~46 tokens)

Get tendon position/coordinate results (获取钢束坐标结果).

Args:
    name: Tendon name (钢束名)

Input parameters:

- `name` (string, required)

### `get_tendon_length_result` (~25 tokens)

Get all tendon length results (获取所有钢束长度结果).

### `add_elastic_link` (~432 tokens)

Add an elastic link between two nodes (添加弹性连接).

Elastic links model connections like bearings between members.
弹性连接用于模拟支座等节点间的连接关系。

Args:
    start_node_id: Start node ID (起始节点编号)
    end_node_id: End node ID (终止节点编号)
    link_type: Link type (连接类型):
        1=General elastic (一般弹性连接), 2=Rigid (刚性连接),
        3=Tension-only (受拉弹性连接), 4=Compression-only (受压弹性连接)
    stiffness_values: Stiffness [kx, ky, kz, krx, kry, krz], ONLY for type=1
                      (刚度值列表，仅一般弹性连接需要)
    kx: Axial stiffness for tension/compression links, ONLY for type=3/4
        (受拉或受压刚度，仅受拉/受压连接需要)
    gap: Gap for tension/compression links (间隙)
    friction: Friction coefficient (摩擦系数)
    beta_angle: Beta angle in degrees (贝塔角)
    dis_ratio: Distance ratio from I-end, ONLY for type=1 (距i端距离比)
    group_name: Boundary group name (边界组名)

Example:
    add_elastic_link(1, 2, link_type=1, stiffness_values=[1e6,1e6,1e6,0,0,0])
    add_elastic_link(1, 2, link_type=3, kx=1e6)  # tension-only

Input parameters:

- `beta_angle` (number)
- `dis_ratio` (number)
- `end_node_id` (integer, required)
- `friction` (number)
- `gap` (number)
- `group_name` (string)
- `kx` (number)
- `link_type` (integer)
- `start_node_id` (integer, required)
- `stiffness_values`

### `add_master_slave_link` (~218 tokens)

Add master-slave constraint (rigid link) between nodes (添加主从约束/刚域).

Used to model rigid connections where slave nodes follow the motion
of the master node (typically for diaphragm rigid zones).
用于模拟刚域，从节点跟随主节点运动（典型应用：隔板刚域）。

Args:
    master_node_id: Master node ID (主节点编号)
    slave_node_ids: Slave node ID(s), list or range string like "2to5"
                    (从节点编号，支持列表或范围字符串)
    dof_constraints: DOF flags [dx, dy, dz, rx, ry, rz],
                     True=constrained, default all constrained
                     (自由度约束标志，True=约束，默认全部约束)
    group_name: Boundary group name (边界组名)

Input parameters:

- `dof_constraints`
- `group_name` (string)
- `master_node_id` (integer, required)
- `slave_node_ids` (required)

### `add_elastic_support` (~327 tokens)

Add elastic spring supports on nodes (添加弹性支承/弹簧支座).

Models foundation flexibility, pile caps, or rubber bearing stiffness.
用于模拟地基柔度、桩基础、橡胶支座刚度等。

Args:
    node_id: Node ID(s), list or range string (节点编号)
    spring_values: Stiffness values, meaning depends on support_type
                   (刚度信息，含义随支承类型不同):
        type=1 (linear 线性): [kx, ky, kz, krx, kry, krz] in N/m, N·m/rad
        type=2/3 (tension/compression 受拉/受压): [direction, stiffness],
                  direction: 1=X, 2=Y, 3=Z
    support_type: Support type (支承类型): 1=linear(线性),
                  2=tension-only(受拉), 3=compression-only(受压)
    group_name: Boundary group name (边界组名)

Example:
    add_elastic_support(1, spring_values=[1e6,0,1e6,0,0,0])           # linear
    add_elastic_support(1, spring_values=[3, 1e6], support_type=3)    # Z compression-only

Input parameters:

- `group_name` (string)
- `node_id` (required)
- `spring_values` (array, required)
- `support_type` (integer)

### `add_beam_constraint` (~286 tokens)

Set beam end releases / constraints (设置梁端约束/铰接释放).

Controls which DOFs are released at each end of a beam element.
True = released (free), False = fixed (constrained).
用于控制梁单元两端的自由度释放，True=释放(铰接), False=固接。

Common use: releasing rotation at one end to create a pin connection.
常见用法：释放一端转动自由度以创建铰接。

Args:
    beam_id: Beam element ID (梁单元编号)
    release_i: DOF releases at I-end [dx, dy, dz, rx, ry, rz]
               (I端自由度释放，True=释放)
    release_j: DOF releases at J-end [dx, dy, dz, rx, ry, rz]
               (J端自由度释放，True=释放)
    group_name: Boundary group name (边界组名)

Example:
    add_beam_constraint(1, release_i=[False,False,False,False,True,False])
    # Release My rotation at I-end (I端释放绕Y轴转动=铰接)

Input parameters:

- `beam_id` (integer, required)
- `group_name` (string)
- `release_i`
- `release_j`

### `add_constraint_equation` (~313 tokens)

Add a constraint equation between node DOFs (添加约束方程).

Establishes a linear relationship between a slave DOF and one or more
master DOFs: slave_dof = Σ(coefficient × master_dof).
建立从属自由度与主自由度之间的线性约束关系。

Args:
    name: Constraint equation name (约束方程名称)
    slave_node: Slave node ID (从节点编号)
    slave_dof: Slave DOF index 1-6 (从节点自由度: 1=Dx,2=Dy,3=Dz,4=Rx,5=Ry,6=Rz)
    master_info: List of master DOF definitions [[node_id, dof, coefficient], ...]
                 (主自由度信息 [[节点号, 自由度号, 系数], ...])
    group_name: Boundary group name (边界组名)

Example:
    add_constraint_equation("CE1", slave_node=5, slave_dof=3,
                            master_info=[[1, 3, 1.0], [2, 3, 0.5]])
    # Node 5 Dz = 1.0 * Node1_Dz + 0.5 * Node2_Dz

Input parameters:

- `group_name` (string)
- `master_info`
- `name` (string, required)
- `slave_dof` (integer)
- `slave_node` (integer, required)

### `remove_boundary` (~290 tokens)

Remove a specific boundary condition (删除指定边界条件).

Args:
    remove_id: Node or element ID to remove boundary from
               (节点号/单元号/从节点号，取决于边界类型)
    kind: Boundary type to remove (边界类型), English token or Chinese:
        "support" (一般支承), "elastic_support" (弹性支承),
        "general_elastic_support" (一般弹性支承),
        "elastic_link" (一般弹性连接), "tension_elastic_link" (受拉弹性连接),
        "compression_elastic_link" (受压弹性连接), "rigid_elastic_link" (刚性弹性连接),
        "master_slave" (主从约束), "beam_constraint" (梁端约束),
        "constraint_equation" (约束方程)
    group_name: Boundary group name (边界组名)
    extra_name: Extra identifier (额外标识):
        for elastic links: "I" or "J" end (弹性连接时为I/J端);
        for constraint equations: the equation name (约束方程时为方程名)

Input parameters:

- `extra_name` (string)
- `group_name` (string)
- `kind` (string, required)
- `remove_id` (integer, required)

### `save_model_screenshot` (~222 tokens)

Capture a screenshot of the current bridge model view (截取桥梁模型视图).

By default returns the image itself so it can be viewed directly.
默认直接返回图像内容，可在客户端预览。

Args:
    file_path: Output file path (.png). If empty, saves to default directory.
               输出路径（.png格式），为空则保存到默认目录
    view_angle: View preset (视角预设): 'iso'(空间视图), 'front'(前视),
        'side'(左视), 'top'(俯视), 'right'(右视), 'back'(后视), 'bottom'(仰视),
        or 'current' to keep the current view (保持当前视角)
    return_image: Return the PNG as viewable image content; if False, return
                  only the saved path (是否直接返回图像内容，否则仅返回路径)

Input parameters:

- `file_path` (string)
- `return_image` (boolean)
- `view_angle` (string)

### `plot_analysis_result` (~354 tokens)

Generate an analysis result contour plot (生成分析结果云图).

By default returns the plot image itself for direct viewing.
默认直接返回云图图像内容，可在客户端预览。

Args:
    result_type: Result type (结果类型):
        'displacement'(位移), 'reaction'(反力),
        'beam_force'(梁内力), 'beam_stress'(梁应力),
        'truss_force'(杆内力), 'truss_stress'(杆应力),
        'plate_force'(板内力), 'plate_stress'(板应力),
        'modal'(振型)
    stage_id: Construction stage ID (施工阶段ID):
        -1=operation(运营), 0=envelope(包络), n=stage n (第n阶段)
    case_name: Load case name for operation stage (运营阶段荷载工况名)
    component: Result component to display (显示分量), e.g.
        'uy'(竖向位移), 'mz'(弯矩), 'fx'(轴力), 'sz'(正应力)
        Leave empty to use default component.
    file_path: Output file path (.png). Empty = default directory.
               输出路径，为空则保存到默认目录
    return_image: Return the PNG as viewable image content; if False, return
                  only the saved path (是否直接返回图像内容，否则仅返回路径)

Input parameters:

- `case_name` (string)
- `component` (string)
- `file_path` (string)
- `result_type` (string, required)
- `return_image` (boolean)
- `stage_id` (integer)

### `set_view_angle` (~169 tokens)

Set the 3D view angle of the bridge model (设置三维视角).

Args:
    angle_preset: View preset (视角预设): 'iso'(空间视图), 'front'(前视图),
        'side'(左视图), 'top'(俯视图), 'right'(右视图), 'back'(后视图),
        'bottom'(仰视图). Set to 'custom' to use horizontal/vertical rotation.
    horizontal: Horizontal rotation in degrees, for 'custom' (水平旋转角，度)
    vertical: Vertical rotation in degrees, for 'custom' (垂直旋转角，度)

Input parameters:

- `angle_preset` (string)
- `horizontal`
- `vertical`

### `display_ids` (~82 tokens)

Toggle the display of node and element IDs (开关节点和单元编号显示).

Args:
    node_id: True to show node IDs, False to hide (显示节点号)
    element_id: True to show element IDs, False to hide (显示单元号)

Input parameters:

- `element_id` (boolean)
- `node_id` (boolean)

### `activate_structure` (~75 tokens)

Activate only specific nodes/elements for display (仅激活显示指定节点/单元).

Args:
    node_ids: Node IDs to activate (要激活的节点号)
    element_ids: Element IDs to activate (要激活的单元号)

Input parameters:

- `element_ids`
- `node_ids`

### `set_render` (~49 tokens)

Toggle solid rendering mode (开关实体渲染模式).

Args:
    flag: True for rendered view, False for wireframe (是否渲染)

Input parameters:

- `flag` (boolean)

### `reset_display` (~20 tokens)

Reset display view (恢复默认显示/全显).

### `set_unit` (~74 tokens)

Set display units (设置显示单位).

Args:
    unit_force: Force unit (力单位, 例如: KN, N, TONF)
    unit_length: Length unit (长度单位, 例如: M, MM, CM)

Input parameters:

- `unit_force` (string)
- `unit_length` (string)

### `change_construct_stage` (~56 tokens)

Change current construction stage in view (切换当前显示的施工阶段).

Args:
    stage: Stage ID, 0 for Base stage (施工阶段号，0为成桥阶段)

Input parameters:

- `stage` (integer)

### `add_node_tandem` (~180 tokens)

Define a node tandem — the node path a moving load travels along
(添加节点纵列，移动荷载行进经过的节点序列).

This is STEP 1 of the moving load workflow:
add_node_tandem → add_influence_plane → add_traffic_lane
→ add_standard_vehicle → create_live_load_case

Args:
    name: Tandem name (节点纵列名, e.g. "节点纵列1")
    node_ids: Node IDs along the girder, list or range string like "1to101"
              (节点列表，支持 XtoY 范围字符串)
    order_by_x: Auto-sort nodes by X coordinate ascending (按X坐标自动排序)

Input parameters:

- `name` (string, required)
- `node_ids` (required)
- `order_by_x` (boolean)

### `add_influence_plane` (~105 tokens)

Define an influence plane from node tandems (添加影响面).

STEP 2 of the moving load workflow. The influence plane is built
from one or more node tandems and is required by lanes and load cases.

Args:
    name: Influence plane name (影响面名称, e.g. "影响面1")
    tandem_names: Node tandem names (节点纵列名称列表)

Input parameters:

- `name` (string, required)
- `tandem_names` (array, required)

### `add_traffic_lane` (~233 tokens)

Define a traffic lane line for moving load analysis (添加车道线).

STEP 3 of the moving load workflow. Requires an influence plane
and a node tandem created beforehand.

Args:
    name: Lane name (车道线名称, e.g. "车道1")
    influence_name: Influence plane name (影响面名称)
    tandem_name: Node tandem name (节点纵列名)
    offset: Lateral offset from the tandem in meters (横向偏移，单位m)
    lane_width: Lane width in meters (车道宽度，单位m), typical 3.1~3.75
    optimize: Allow vehicle lateral wandering (是否允许车辆摆动)
    direction: Travel direction (行车方向): 0=forward(向前), 1=backward(向后)

Input parameters:

- `direction` (integer)
- `influence_name` (string, required)
- `lane_width` (number)
- `name` (string, required)
- `offset` (number)
- `optimize` (boolean)
- `tandem_name` (string, required)

### `add_standard_vehicle` (~314 tokens)

Add a standard vehicle load from a design code database (添加标准车辆荷载).

STEP 4 of the moving load workflow.

Args:
    name: Vehicle name (车辆荷载名称)
    standard_code: Design code (荷载规范):
        1=铁路桥涵规范 TB10002-2017, 2=城市桥梁 CJJ11-2019,
        3=公路工程技术标准 JTJ 001-97, 4=公路桥涵通规 JTG D60-2004,
        5=公路桥涵通规 JTG D60-2015, 6=城市轨道交通 GB/T51234-2017,
        7=市域铁路 T/CRS C0101-2017
    load_type: Load type name exactly as shown in the QiaoTong UI
               (荷载类型，与软件界面名称一致), e.g. "公路I级车道" (公路通规),
               "ZK高速铁路" (铁路规范 TB10002-2017)
    load_length: Load length limit, 0 = unlimited (荷载长度限制，铁路规范参数)
    factor: Load factor (荷载系数，铁路 ZH 荷载参数)

Input parameters:

- `factor` (number)
- `load_length` (number)
- `load_type` (string)
- `name` (string, required)
- `standard_code` (integer)

### `create_live_load_case` (~229 tokens)

Create a moving live load case (创建活载工况).

FINAL STEP of the moving load workflow. The analysis engine finds the
worst-case vehicle positions for envelope results
(分析引擎自动计算最不利车辆位置得到包络效应).

Args:
    name: Load case name (活载工况名)
    influence_plane: Influence plane name (影响面名称)
    span: Bridge span in meters (跨度，单位m)
    sub_cases: Sub-case list, each item [vehicle_name, factor, [lane names...]]
               (子工况信息 [[车辆名, 系数, [车道名...]], ...])

Example:
    create_live_load_case(name="活载工况1", influence_plane="影响面1", span=100,
                          sub_cases=[["公路I级", 1.0, ["车道1", "车道2"]]])

Input parameters:

- `influence_plane` (string, required)
- `name` (string, required)
- `span` (number, required)
- `sub_cases` (array, required)

### `get_live_load_results` (~142 tokens)

Get moving load analysis results (获取移动荷载分析结果).

Returns envelope (maximum and minimum) results for specified elements.
返回指定单元的移动荷载包络结果（最大值和最小值）。

Args:
    case_name: Live load case name (活载工况名)
    result_type: Result type (结果类型): 'force'(内力), 'stress'(应力), 'deformation'(变形)
    element_ids: Element or node IDs to query (查询的单元或节点编号)

Input parameters:

- `case_name` (string, required)
- `element_ids`
- `result_type` (string)

### `setup_concrete_check` (~182 tokens)

Create a concrete structural check case (创建混凝土检算工况).

Args:
    name: Check case name (检算工况名称)
    standard: Design code (检算规范):
        1=JTG 3362-2018 (公路规范), 2=TB 10092-2017 (铁路规范)
    structure_type: Structural category (结构类型):
        1=钢筋混凝土 (RC), 2=B类预应力构件, 3=A类预应力构件, 4=全预应力构件
    group_name: Structure group name to check (检算的结构组名)

Input parameters:

- `group_name` (string)
- `name` (string, required)
- `standard` (integer)
- `structure_type` (integer)

### `add_check_load_combination` (~280 tokens)

Add a load combination for structural checking (添加检算荷载组合).

Args:
    name: Combination name (组合名称)
    standard: Code standard (规范): 1=JTG D60-2015, 2=TB 2017
    kind: Combination type (组合类型):
        Highway JTG D60: 1=基本组合, 2=偶然组合, 3=标准值组合,
                         4=频遇组合, 5=准永久组合, 6=疲劳组合, 7=临时组合
        Railway TB 2017: 1=主力组合, 2=主加附组合, 3=主加特殊组合, 4=临时组合
    load_case_factors: Load case factors list, format:
                       [[case_name, unfavorable_factor, favorable_factor], ...]
                       荷载工况系数 [[工况名, 不利系数, 有利系数], ...]
    combine_method: Combination method (组合方式): 1=相加并判别, 2=包络

Input parameters:

- `combine_method` (integer)
- `kind` (integer)
- `load_case_factors`
- `name` (string, required)
- `standard` (integer)

### `run_concrete_check` (~140 tokens)

Execute concrete structural checking analysis (运行混凝土检算).

Syncs the named check case into the current check data, then runs the
code-based verification and waits for the background task to finish.
先将指定检算工况同步为当前检算数据，再运行规范验算并等待后台任务完成。

Args:
    name: Check case name to run (要运行的检算工况名)
    max_wait_seconds: Max seconds to wait for completion; None = no limit
                      (最长等待秒数，None 表示不限时)

Input parameters:

- `max_wait_seconds`
- `name` (string, required)

### `add_parametric_reinforcement` (~232 tokens)

Add parametric reinforcement to a concrete section (添加参数化配筋).

Args:
    section_id: Section ID (截面ID)
    position: Section end (截面位置): 0=I端 (start), 1=J端 (end)
    has_outer: Has outer reinforcement (是否有外部钢筋)
    has_inner: Has inner reinforcement (是否有内部钢筋)
    outer_rebar_info: Outer rebar list (外部钢筋信息):
                      [[diameter, material_id, cover, spacing_or_count, bars_per_bundle], ...]
                      [[直径mm, 材料号, 层边距m, 间距m/数量, 每束根数], ...]
    inner_rebar_info: Inner rebar list (内部钢筋信息), same format as outer

Input parameters:

- `has_inner` (boolean)
- `has_outer` (boolean)
- `inner_rebar_info`
- `outer_rebar_info`
- `position` (integer)
- `section_id` (integer, required)

### `add_check_stirrup` (~324 tokens)

Add a stirrup definition for checking (添加检算箍筋定义).

Args:
    stirrup_id: Stirrup definition ID (箍筋定义编号)
    name: Stirrup definition name (箍筋定义名称)
    stirrup_type: Stirrup type (箍筋类型): 1=普通箍筋 (normal), 2=螺旋式箍筋 (spiral)
    material_id: Rebar material ID (钢筋材料号)
    limbs_number: Number of limbs, for normal stirrups (普通箍筋肢数)
    loops_number: Number of loops, for spiral stirrups (螺旋式箍筋环数)
    diameter: Stirrup diameter in meters (箍筋直径, 单位 m, 如 0.020 = 20mm)
    spacing: Stirrup spacing in meters (箍筋间距, 单位 m)
    core_diameter: Core diameter for spiral stirrups in meters
                   (螺旋式箍筋核心直径, 单位 m, 仅螺旋箍筋使用)

Input parameters:

- `core_diameter` (number)
- `diameter` (number)
- `limbs_number` (integer)
- `loops_number` (integer)
- `material_id` (integer)
- `name` (string, required)
- `spacing` (number)
- `stirrup_id` (integer, required)
- `stirrup_type` (integer)

### `update_vertical_steel_tendon` (~213 tokens)

Update vertical prestress tendon parameters for checking (修改竖向预应力钢束参数).

Args:
    limbs_number: Number of vertical limbs/strands (竖向预应力肢数)
    area: Area of a single limb in m^2 (单肢面积, 单位 m², 如 0.000804 = 804mm²)
    spacing: Longitudinal spacing in meters (钢束间距, 单位 m)
    effective_prestress: Effective prestress in Pa (有效预应力, 单位 Pa, 8e8 = 800MPa)
    fpd: Design tensile strength in Pa (强度设计值 fpd, 单位 Pa, 9e8 = 900MPa)

Input parameters:

- `area` (number)
- `effective_prestress` (number)
- `fpd` (number)
- `limbs_number` (integer)
- `spacing` (number)

### `get_check_data` (~711 tokens)

Query concrete-check data by kind (按类型查询混凝土检算数据).

Read-only. Requires a check case to be open/imported first.
只读工具；需先创建或打开检算工况。列表结果分页返回。

Args:
    kind: What to query (查询类型):
        ── 结果 Results ──
        "stress" (应力信息, 可选 stress_type/name),
        "solve_status" (检算求解状态)
        ── 工况 Case ──
        "case" (检算工况, 可选 name), "basic_info" (检算基本信息),
        "materials" (材料信息), "load_table" (荷载表, 可选 combine_type/name),
        "section_property" (截面特性), "element_table" (单元表)
        ── 配筋 Reinforcement ──
        "reinforcement" (配筋数据), "stirrups" (箍筋定义),
        "shear_stirrup" (单元抗剪箍筋, 可选 element_id),
        "torsion_stirrup" (单元抗扭箍筋, 可选 element_id),
        "vertical_prestress" (竖向预应力), "tendon_section" (钢束截面)
        ── 分析设置 Analysis settings ──
        "normal_section_bearing_setting" (正截面承载力),
        "oblique_shear_bearing_setting" (斜截面抗剪承载力),
        "limit_state_setting" (极限状态法), "normal_stress_setting" (正应力),
        "crack_width_setting" (裂缝宽度), "moment_curvature_setting" (弯矩曲率),
        "bearing_curve_setting" (承载力曲线)
    element_id: Element ID for stirrup queries; omit for all (单元号，省略则查全部)
    stress_type: Stress combination type for kind="stress" (应力组合类型):
        非 AASHTO: 1=标准值组合, 2=频遇组合, 3=准永久值组合, 4=主力组合,
                  5=主加附组合, 6=施工组合, 7=主加特殊组合, 8=恒载作用,
                  9=预应力作用, 10~13=使用组合Ⅰ~Ⅳ, 14=永久作用组合
        AASHTO 2020: 1~4=使用组合Ⅰ~Ⅳ, 5=永久作用组合, 6=施工组合
    combine_type: Combination type for kind="load_table" (荷载表组合类型)
    name: Explicit display name; overrides stress_type/combine_type when set
          (指定组合显示名，非空时优先于类型序号)
    limit: Max items per page, default 100, max 500 (单页条数上限)
    offset: Pagination offset (分页偏移)

Input parameters:

- `combine_type` (integer)
- `element_id`
- `kind` (string, required)
- `limit` (integer)
- `name` (string)
- `offset` (integer)
- `stress_type` (integer)

### `configure_check_analysis` (~873 tokens)

Configure a concrete-check analysis setting group (配置混凝土检算分析设置).

⚠️ UNITS (单位): parameters in this tool use qtmodel's NATIVE units —
\**mm for lengths and MPa for stresses**, NOT the SI (m/Pa) used elsewhere
in this server. qtmodel does not document these units; they are inferred
from its defaults (e.g. protective_thickness=30.0 means 30 mm,
fatigue_limit_steel_bar=145.0 means 145 MPa). Pass values accordingly.
本工具参数沿用 qtmodel 原生单位（长度 mm、应力 MPa），与本服务器其余
工具的 SI 约定不同；qtmodel 未标注单位，此结论由其默认值推断。

Use get_check_data("<kind>_setting") to read current values first.
建议先用 get_check_data 读取当前值，再按需覆盖。

Args:
    kind: Setting group (设置类别):
        "normal_section_bearing" (正截面承载力):
            normal_section_bearing_calculation_type: 1=同比例变化 2=轴力不变
                3=My不变 4=Mz不变 5=轴力与My不变 6=轴力与Mz不变 7=My与Mz不变
        "oblique_shear_bearing" (斜截面抗剪承载力):
            reinforcement_height_multiple, is_consider_as_simple_support,
            shear_strength_material_factor,
            oblique_section_shear_direction_type: 1=竖向(z) 2=横向(y) 3=双向
        "limit_state" (极限状态法):
            cal_fatigue, fatigue_limit_steel_bar (MPa),
            fatigue_limit_prestress (MPa), is_consider_as_simple_support,
            is_consider_construction_load
        "normal_stress" (正应力):
            aashto2020_normal_stress_rebar_type: 1=直钢筋/无交叉焊缝焊接钢丝网
                2=高应力区带交叉焊缝的直焊接钢丝网,
            tendon_allowable_stress_amplitude (MPa),
            flange_web_slenderness_ratio,
            construction_stage_concrete_tensile_limit (MPa),
            service_combination3_concrete_tension_limit (MPa)
        "crack_width" (裂缝宽度):
            highway_environment_category_type (1~7 公路环境类别),
            railway_environment_category_type (1~6 铁路环境类别),
            railway_limit_environment_category_type (1~11 铁路限值环境类别),
            crack_setting_type: 1=0 2=0.10 3=0.15 4=0.20 5=0.25 6=禁止使用,
            clear_protective_thickness (mm), protective_thickness (mm),
            steel_bar_type: 1=带肋钢筋 2=光圆钢筋…

Input parameters:

- `kind` (string, required)
- `settings` (object, required)

### `manage_check_stirrup` (~361 tokens)

Update or remove a stirrup definition (修改或删除检算箍筋定义).

Use add_check_stirrup to create one. Lengths are in METERS (SI), converted
internally. 新增请用 add_check_stirrup；长度入参为米，内部换算。

Args:
    action: "update" (修改) or "remove" (删除)
    stirrup_id: Stirrup definition ID (箍筋定义编号); <=0 means match by name
    name: Stirrup definition name (箍筋定义名称)
    stirrup_type: 1=普通箍筋 (normal), 2=螺旋式箍筋 (spiral)
    material_id: Rebar material ID (钢筋材料号)
    limbs_number: Limbs, for normal stirrups (普通箍筋肢数)
    loops_number: Loops, for spiral stirrups (螺旋式箍筋环数)
    diameter: Stirrup diameter in meters (箍筋直径, 单位 m)
    spacing: Stirrup spacing in meters (箍筋间距, 单位 m)
    core_diameter: Spiral core diameter in meters (螺旋箍筋核心直径, 单位 m)

Input parameters:

- `action` (string, required)
- `core_diameter` (number)
- `diameter` (number)
- `limbs_number` (integer)
- `loops_number` (integer)
- `material_id` (integer)
- `name` (string)
- `spacing` (number)
- `stirrup_id` (integer)
- `stirrup_type` (integer)

### `assign_element_stirrup` (~342 tokens)

Assign or remove element stirrups (指定或删除单元箍筋).

Stirrup numbers refer to definitions created by add_check_stirrup.
箍筋号引用 add_check_stirrup 创建的箍筋定义。

Args:
    action: "shear" (抗剪箍筋), "torsion" (抗扭箍筋), or "remove" (删除)
    element_id: Element ID (单元号); for "remove", <=0 removes all elements
    stirrup_i_y: I-end vertical stirrup ID, shear only (I端竖向箍筋号)
    stirrup_i_x: I-end transverse stirrup ID, shear only (I端横向箍筋号)
    stirrup_j_y: J-end vertical stirrup ID, shear only (J端竖向箍筋号)
    stirrup_j_x: J-end transverse stirrup ID, shear only (J端横向箍筋号)
    stirrup_i: I-end stirrup ID, torsion only (I端抗扭箍筋号)
    stirrup_j: J-end stirrup ID, torsion only (J端抗扭箍筋号)

Input parameters:

- `action` (string, required)
- `element_id` (integer)
- `stirrup_i` (integer)
- `stirrup_i_x` (integer)
- `stirrup_i_y` (integer)
- `stirrup_j` (integer)
- `stirrup_j_x` (integer)
- `stirrup_j_y` (integer)

### `manage_check_case_file` (~154 tokens)

Open or save a concrete check case file (打开或保存混凝土检算工况文件).

Args:
    action: "open" (打开) or "save" (保存)
    name: Check case name; for "open", resolves to the default check data
          directory when file_path is empty (工况名称)
    file_path: Full path to the case file. For "open" it takes priority over
               name; for "save" a non-empty value means save-as
               (工况文件完整路径；保存时非空表示另存为)

Input parameters:

- `action` (string, required)
- `file_path` (string)
- `name` (string)

### `create_simple_beam_bridge` (~290 tokens)

One-step creation of a simple beam bridge model (一键创建简支梁桥模型).

Creates nodes, beam elements, supports, and a self-weight load case in
a single step. The bridge lies along the X-axis.
一键完成节点、梁单元、支承和自重工况的建立，桥梁沿X轴布置。

Args:
    span: Span length in meters (跨径，单位m)
    num_elements: Number of beam elements (梁单元划分数量), min 2
    material_name: Material name (material must already exist) (材料名，须已创建)
    section_name: Section name (section must already exist) (截面名，须已创建)
    section_width: Section width in m for auto-creating a rectangle section
                   (矩形截面宽度，单位m，若截面不存在则自动创建)
    section_height: Section height in m (矩形截面高度，单位m)
    self_weight_case: Self-weight load case name (自重工况名)

Input parameters:

- `material_name` (string)
- `num_elements` (integer)
- `section_height` (number)
- `section_name` (string)
- `section_width` (number)
- `self_weight_case` (string)
- `span` (number)

### `create_continuous_beam_bridge` (~229 tokens)

One-step creation of a continuous beam bridge model (一键创建连续梁桥模型).

Creates a multi-span continuous beam with fixed supports at piers
and appropriate end conditions.
创建多跨连续梁桥，中间支座为固定支承，端部为活动支承。

Args:
    spans: List of span lengths in meters (各跨跨径列表，单位m),
           e.g. [30.0, 50.0, 30.0] means 3-span (3跨均匀布置)
    num_elements_per_span: Elements per span (每跨单元划分数)
    material_name: Material name (材料名，须已创建)
    section_name: Section name (截面名，须已创建)
    self_weight_case: Self-weight load case name (自重工况名)

Input parameters:

- `material_name` (string)
- `num_elements_per_span` (integer)
- `section_name` (string)
- `self_weight_case` (string)
- `spans`

### `get_model_data` (~700 tokens)

Query model data by kind (按类型查询模型数据) — the single read tool for
entities, loads, groups and stages. List results are paginated.

Args:
    kind: What to query (查询类型):
        ── 实体 Entities ──
        "nodes" (节点, 可选 ids), "elements" (单元, 可选 ids),
        "materials" (材料), "sections" (截面列表),
        "section_detail" (截面详情, 需 sec_id, 可选 position 0=起端 1=末端),
        "section_shape" (截面形状, 需 sec_id),
        "section_property" (截面特性, 需 sec_id),
        "thickness" (板厚), "boundaries" (全部边界条件),
        "node_local_axis" (节点局部坐标), "constraint_equations" (约束方程),
        "effective_widths" (有效宽度), "reinforcement" (配筋数据)
        ── 组 Groups ──
        "structure_groups" (结构组名列表),
        "group_elements" (结构组内单元, 需 name),
        "group_nodes" (结构组内节点, 需 name)
        ── 荷载 Loads ──
        "load_cases" (荷载工况名), "nodal_force_loads" (节点力),
        "nodal_displacement_loads" (节点位移/沉降), "beam_element_loads" (梁单元荷载),
        "plate_element_loads" (板单元荷载), "initial_tension_loads" (初拉力),
        "cable_length_loads" (索长荷载), "pre_stress_loads" (预应力荷载),
        "node_masses" (节点质量), "tendon_properties" (钢束特性),
        "deviation_parameters" (制造偏差参数), "deviation_loads" (制造偏差荷载)
        ── 施工阶段 Stages ──
        "stages" (施工阶段名), "stage_elements" (阶段内单元, 需 stage_id),
        "stage_nodes" (阶段内节点, 需 stage_id), "stage_groups" (阶段内组, 需 stage_id)
    ids: Entity IDs for nodes/elements, int/list/range string "1to10" (编号)
    name: Group name, for group_elements/group_nodes (结构组名)
    sec_id: Section ID, for section_detail/section_shape/section_property (截面号)
    position: Tapered section end, for section_detail (变截面位置 0起/1末)
    stage_id: Stage ID, for stage_* kinds (施工阶段号)
    limit: Max items per page, default 100, max 500 (单页条数上限)
    offset: Skip count for pagination (翻页偏移)

Input parameters:

- `ids`
- `kind` (string, required)
- `limit` (integer)
- `name` (string)
- `offset` (integer)
- `position` (integer)
- `sec_id`
- `stage_id`

### `find_entities` (~360 tokens)

Locate nodes/elements by coordinates or attributes (按坐标或属性定位节点/单元).

Args:
    by: Search mode (查找方式):
        "node_at_point" (按坐标找节点, 需 x/y/z, 可选 tolerance),
        "elements_at_point" (按坐标找单元, 需 x/y/z, 可选 tolerance),
        "elements_by_material" (按材料名找单元, 需 name),
        "elements_by_section" (按截面号找单元, 需 index),
        "element_type" (查单元类型, 需 ids),
        "element_weight" (查单元重量, 需 ids),
        "span_supports" (跨径支承信息, 需 span_info_name),
        "span_elements" (跨径单元信息, 需 span_info_name)
    x, y, z: Coordinates for point search (坐标)
    tolerance: Search tolerance (容差)
    name: Material name (材料名)
    index: Section ID (截面号)
    ids: Element IDs (单元编号)
    span_info_name: Span info name (跨径信息名)
    limit: Max items per page (单页条数上限)
    offset: Pagination offset (翻页偏移)

Input parameters:

- `by` (string, required)
- `ids`
- `index`
- `limit` (integer)
- `name` (string)
- `offset` (integer)
- `span_info_name` (string)
- `tolerance` (number)
- `x` (number)
- `y` (number)
- `z` (number)

### `calc_section_property` (~110 tokens)

Compute section properties from raw geometry, without creating a section
(按几何直接计算截面特性，不创建截面).

Provide EXACTLY ONE of:
    loop_segments: Polygon loops [{"main": [[x,y],...], "sub": ...}, ...]
                   (多边形环定义)
    sec_lines: Line-width segments [[x1,y1,x2,y2,width], ...] (线宽定义)

Input parameters:

- `loop_segments`
- `sec_lines`

### `get_special_results` (~445 tokens)

Get special post-analysis results (专项分析结果查询) — beyond the basic
deformation/force/stress/reaction of get_analysis_results.

Args:
    kind: Result kind (结果类型):
        "vibration_modal" (自振振型, 需 mode), "buckling_modal" (屈曲振型, 需 mode),
        "period_vibration" (周期与振型汇总), "buckling_eigenvalue" (屈曲特征值),
        "self_concurrent_reaction" (自并发反力, 需 node_id + case_name),
        "all_concurrent_reaction" (全并发反力, 需 node_id + case_name),
        "concurrent_force" (并发内力, 需 ids + case_name),
        "elastic_link_force" (弹性连接内力, 需 ids),
        "constraint_equation_force" (约束方程内力, 需 ids),
        "cable_element_length" (索单元无应力长度, 需 ids)
    ids: Element/link IDs (单元/连接编号)
    case_name: Load case name (荷载工况名)
    node_id: Node ID for concurrent reactions (并发反力节点号)
    mode: Mode number for modal results (振型阶数)
    stage_id: Construction stage (施工阶段号, -1=运营)
    result_kind: Result kind flag (结果种类)
    envelop_type: Envelope type (包络类型)
    increment_type: Increment type (增量类型)
    limit: Max items per page (单页条数上限)
    offset: Pagination offset (翻页偏移)

Input parameters:

- `case_name` (string)
- `envelop_type` (integer)
- `ids`
- `increment_type` (integer)
- `kind` (string, required)
- `limit` (integer)
- `mode` (integer)
- `node_id`
- `offset` (integer)
- `result_kind` (integer)
- `stage_id` (integer)

### `initialize_model` (~194 tokens)

Initialize a new empty model (初始化全新模型).

WARNING: This will CLEAR the current model data in the active bridge software!
(警告：此操作将清空桥通软件中的当前模型！)

Use this ONLY when starting a brand new project, NOT when modifying an existing one.
(仅在从零开始新建桥梁时使用，修改现有模型时绝对不要调用此工具)

CRITICAL LLM INSTRUCTION: Do NOT call this tool autonomously to fix your own mistakes. 
You MUST explicitly ask the USER for permission before calling this tool.
(严重的指令：大模型绝对不可为了修复自己的建型错误而自行调用此工具清空模型！必须先向用户询问并获得许可！)

Args:
    confirm: Must be set to true to execute (必须设为true以确认操作)

Input parameters:

- `confirm` (boolean)

### `save_model_file` (~52 tokens)

Save the current model to a file (保存模型文件).

Args:
    file_path: Absolute or relative path to the .qtb file (保存的文件路径)

Input parameters:

- `file_path` (string, required)

### `open_model_file` (~51 tokens)

Open an existing model file (打开模型文件).

Args:
    file_path: Absolute or relative path to the .qtb file (要打开的文件路径)

Input parameters:

- `file_path` (string, required)

### `remove_unused_sections` (~28 tokens)

Clean up and remove all unused sections from the model (删除未使用的截面).

### `update_node` (~196 tokens)

Modify an existing node's coordinates or ID (修改节点坐标或编号).

Args:
    node_id: Existing node ID to modify (待修改的节点编号)
    x: New X coordinate, leave None to keep unchanged (新X坐标，不修改则留空)
    y: New Y coordinate, leave None to keep unchanged (新Y坐标，不修改则留空)
    z: New Z coordinate, leave None to keep unchanged (新Z坐标，不修改则留空)
    new_id: New node ID, -1 to keep unchanged (新节点编号，-1表示不修改编号)

Example:
    update_node(1, z=-1.5)  # Move node 1 down to z=-1.5

Input parameters:

- `new_id` (integer)
- `node_id` (integer, required)
- `x`
- `y`
- `z`

### `update_node_id` (~62 tokens)

Change a node's ID (修改节点编号).

Args:
    node_id: Existing node ID (原节点编号)
    new_id: New node ID (新节点编号)

Input parameters:

- `new_id` (integer, required)
- `node_id` (integer, required)

### `renumber_nodes` (~81 tokens)

Renumber nodes (节点重新编号).
If no IDs are provided, renumbers all nodes starting from 1 continuously.

Args:
    ids: List of node IDs or string format (可选，原节点号)
    new_ids: List of new node IDs (可选，新节点号)

Input parameters:

- `ids`
- `new_ids`

### `move_nodes` (~170 tokens)

Move nodes by an offset (平移节点).

Args:
    ids: Node ID(s) to move. Supports int, list, or range string '1to10'.
         (节点编号，支持整数、列表或范围字符串)
    offset_x: X-direction offset in model units (X方向偏移量)
    offset_y: Y-direction offset in model units (Y方向偏移量)
    offset_z: Z-direction offset in model units (Z方向偏移量)

Example:
    move_nodes("1to10", offset_z=-0.5)  # Move nodes 1-10 down by 0.5m

Input parameters:

- `ids` (required)
- `offset_x` (number)
- `offset_y` (number)
- `offset_z` (number)

### `update_element` (~259 tokens)

Modify an existing element's properties (修改单元属性).

Args:
    old_id: Existing element ID (待修改的单元编号)
    new_id: New element ID, -1 to keep unchanged  (新单元编号，-1不修改)
    ele_type: Element type (单元类型): 1=beam(梁), 2=truss(杆), 3=cable(索), 4=plate(板)
    node_i: New I-end node ID (新I端节点号)
    node_j: New J-end node ID (新J端节点号)
    mat_id: New material ID (新材料编号)
    sec_id: New section ID (新截面编号)
    beta_angle: New beta angle in degrees (新贝塔角，单位度)

Example:
    update_element(5, mat_id=2, sec_id=3)  # Change element 5's material and section

Input parameters:

- `beta_angle`
- `ele_type`
- `mat_id`
- `new_id` (integer)
- `node_i`
- `node_j`
- `old_id` (integer, required)
- `sec_id`

### `update_element_id` (~65 tokens)

Change an element's ID (更改单元编号).

Args:
    old_id: Existing element ID (原单元编号)
    new_id: New element ID (新单元编号)

Input parameters:

- `new_id` (integer, required)
- `old_id` (integer, required)

### `renumber_elements` (~87 tokens)

Renumber elements (单元编号重排序).
If no IDs are provided, renumbers all elements starting from 1 continuously.

Args:
    element_ids: List of element IDs or string format (可选，原单元号)
    new_ids: List of new element IDs (可选，新单元号)

Input parameters:

- `element_ids`
- `new_ids`

### `revert_local_orientation` (~54 tokens)

Revert local orientation of frame elements (反转杆系单元局部方向).

Args:
    ids: Element ID(s) to revert (待反转方向的单元编号)

Input parameters:

- `ids` (required)

### `update_element_material` (~109 tokens)

Change the material of one or more elements (修改单元材料).

Args:
    ids: Element ID(s). Supports int, list, or range string '1to50'.
         (单元编号，支持整数、列表或范围字符串)
    mat_id: New material ID (新材料编号，使用 get_materials 查询有效编号)

Example:
    update_element_material("1to20", mat_id=2)

Input parameters:

- `ids` (required)
- `mat_id` (integer, required)

### `update_element_section` (~114 tokens)

Change the section of one or more frame elements (修改杆系单元截面).

Args:
    ids: Element ID(s). Supports int, list, or range string '1to50'.
         (单元编号，支持整数、列表或范围字符串)
    sec_id: New section ID (新截面编号，使用 get_section_list 查询有效编号)

Example:
    update_element_section("1to30", sec_id=2)

Input parameters:

- `ids` (required)
- `sec_id` (integer, required)

### `update_element_beta` (~132 tokens)

Change the beta angle of one or more elements (修改单元贝塔角).

The beta angle controls the local axis orientation of a beam/truss element.
贝塔角控制单元局部坐标系方向。

Args:
    ids: Element ID(s). Supports int, list, or range string.
         (单元编号，支持整数、列表或范围字符串)
    beta: New beta angle in degrees (新贝塔角，单位：度)

Example:
    update_element_beta("1to10", beta=90)

Input parameters:

- `beta` (number, required)
- `ids` (required)

### `update_element_nodes` (~98 tokens)

Replace the end nodes of an element (修改单元端节点).

Args:
    element_id: Element ID to modify (待修改的单元编号)
    node_i: New I-end node ID (新I端节点号)
    node_j: New J-end node ID (新J端节点号)

Input parameters:

- `element_id` (integer, required)
- `node_i` (integer, required)
- `node_j` (integer, required)

### `add_to_structure_group` (~152 tokens)

Add nodes and/or elements to an existing structure group
(向已有结构组中添加节点和/或单元).

Args:
    group_name: Name of the structure group (结构组名称)
    node_ids: Node ID(s) to add. Supports int, list, or range string '1to10'.
              (要添加的节点编号)
    element_ids: Element ID(s) to add. Supports int, list, or range string.
                 (要添加的单元编号)

Example:
    add_to_structure_group("上部结构", element_ids="11to20")

Input parameters:

- `element_ids`
- `group_name` (string, required)
- `node_ids`

### `remove_from_structure_group` (~131 tokens)

Remove nodes and/or elements from an existing structure group
(从结构组中移除节点和/或单元).

Args:
    group_name: Name of the structure group (结构组名称)
    node_ids: Node ID(s) to remove. Supports int, list, or range string.
              (要移除的节点编号)
    element_ids: Element ID(s) to remove. Supports int, list, or range string.
                 (要移除的单元编号)

Input parameters:

- `element_ids`
- `group_name` (string, required)
- `node_ids`

### `remove_nodes` (~196 tokens)

Delete nodes from the model (删除节点).

Args:
    ids: Node ID(s) to delete. Supports int, list, or range string '1to10'.
         Leave empty to delete ALL nodes.
         (节点编号，留空则删除全部节点)
    confirm_delete_all: MUST be set to true if ids is empty (deleting all nodes).
                        (如果要删除所有节点，必须设为 true)

CRITICAL LLM INSTRUCTION: Do NOT delete all nodes autonomously to fix your own mistakes.
You MUST explicitly ask the USER for permission before calling this tool with empty ids.
(大模型绝对不可为了修复自己的错误而自行清空所有节点！必须先向用户询问并获得许可！)

Example:
    remove_nodes(ids=[5, 6, 7])  # Delete specific nodes

Input parameters:

- `confirm_delete_all` (boolean)
- `ids`

### `remove_elements` (~228 tokens)

Delete elements from the model (删除单元).

Args:
    ids: Element ID(s) to delete. Supports int, list, or range string '1to10'.
         Leave empty to delete ALL elements.
         (单元编号，留空则删除全部单元)
    remove_free_nodes: Also delete nodes that become free after element deletion
                       (是否同时删除孤立节点，默认不删除)
    confirm_delete_all: MUST be set to true if ids is empty (deleting all elements).
                        (如果要删除所有单元，必须设为 true)

CRITICAL LLM INSTRUCTION: Do NOT delete all elements autonomously to fix your own mistakes.
You MUST explicitly ask the USER for permission before calling this tool with empty ids.
(大模型绝对不可为了修复自己的错误而自行清空所有单元！必须先向用户询问并获得许可！)

Example:
    remove_elements(ids="11to20")

Input parameters:

- `confirm_delete_all` (boolean)
- `ids`
- `remove_free_nodes` (boolean)

### `merge_nodes` (~178 tokens)

Merge nodes that are at (nearly) the same coordinates (合并重合节点).

This is equivalent to the "Merge Nodes" operation in the GUI.
Useful after building a model to remove accidental duplicate nodes.
相当于界面上的"合并节点"功能，用于消除重叠节点。

Args:
    ids: Node ID(s) to check. Supports int, list, or range string.
         Leave empty to check ALL nodes.
         (节点编号，留空则检查全部节点)
    tolerance: Merge distance tolerance in model units, default 0.0001m
               (合并容许误差，默认 0.0001m)

Example:
    merge_nodes()  # Merge all overlapping nodes in the model

Input parameters:

- `ids`
- `tolerance` (number)

### `check_qiaotong_connection` (~325 tokens)

Diagnose the connection to QiaoTong software (诊断桥通软件连接状态).

CALL THIS FIRST when any tool reports the backend is unavailable.
It distinguishes the three failure modes, which need different fixes:
（任一工具报后端不可用时先调用本工具，它区分三种需要不同处置的状态）

\- connected (已连接): ready to model.
\- version_mismatch (版本不匹配): the QiaoTong API version and the
  installed qtmodel differ. qtmodel pins an exact version, so the
  user must upgrade QiaoTong (or install a matching qtmodel).
  （桥通与 qtmodel 版本必须精确一致，需升级桥通软件）
\- software_not_running (软件未启动): start QiaoTong and wait for the
  main window, then retry. （启动桥通并等待主界面加载）

Returns the status, a human-readable message, the recommended action,
and the client/server versions involved.

IMPORTANT: when connecting through a port forward (e.g. an SSH tunnel to
QiaoTong on another machine), the URL host must be `localhost`, not
\`127.0.0.1`. Windows HTTP.sys validates the Host header and rejects the
bare IP with "400 Invalid Hostname" even though the port is reachable.
（经端口转发访问时必须用 localhost；Windows HTTP.sys 会以
400 Invalid Hostname 拒绝 127.0.0.1 的 Host 头）

### `list_qtmodel_api` (~182 tokens)

Discover qtmodel API methods and their real signatures (检索 qtmodel API 方法及签名).

Use this to find long-tail methods NOT covered by the curated tools,
then invoke them with call_qtmodel_api. ALWAYS discover the real
signature here before calling — do not guess parameter names.
（先用本工具查到真实签名，再用 call_qtmodel_api 调用，切勿臆测参数名。）

Args:
    api_object: Which database to inspect (数据库对象):
        "mdb" (建模), "odb" (结果/查询), "cdb" (检算)
    pattern: Case-insensitive substring filter on method name
             (方法名关键字过滤，如 "tendon"、"spectrum")

Input parameters:

- `api_object` (string, required)
- `pattern` (string)

### `call_qtmodel_api` (~263 tokens)

Call a qtmodel API method not covered by a curated tool (调用 qtmodel 长尾 API).

ESCAPE HATCH — prefer a dedicated tool when one exists. Discover the
real signature with list_qtmodel_api first. Arguments are validated
against the real signature before dispatch, so a wrong parameter name
fails fast with the correct signature rather than corrupting the model.

Destructive/long-running methods (initial 清空模型, do_solve 求解) are
blocked here — use initialize_model / run_analysis instead.
（清空模型、求解等危险或长耗时操作已禁止经此调用，请用对应专用工具。）

Args:
    api_object: Database object (数据库对象): "mdb", "odb", "cdb"
    method: Exact method name (精确方法名), e.g. "add_spectrum_function"
    kwargs: Keyword arguments as a dict, matching the real signature
            (与真实签名一致的关键字参数字典)

Example:
    call_qtmodel_api("mdb", "add_tendon_group", {"name": "钢束组1"})

Input parameters:

- `api_object` (string, required)
- `kwargs`
- `method` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp#diagnostics

## Score history

- 2026-08-21: 61
- 2026-08-20: 61
- 2026-08-19: 61
- 2026-08-18: 46

## Links

- PyPI project: https://pypi.org/project/qiao-mcp/
- Socket report: https://socket.dev/pypi/package/qiao-mcp
- Repository: https://github.com/SorataYang/qiao-mcp
- Changelog RSS feed: https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp.json
- HTML version of this page: https://verifymcp.io/servers/soratayang-qiao-mcp/qiao-mcp
