Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ツール一覧

公開されている MCP ツールは以下の 6 個です。

model_query

原階の属性と明示所属は kind: "source_stories"、原階入力の不整合と解析用推定との差は kind: "source_story_diagnostics" で確認できます。診断文は GUI と共通です。

節点・部材・断面・壁版・床板・床領域・壁領域・二次部材を検索します。

引数型必須/任意意味
kindString必須下表の種別・別名。未知の値は対応種別を示す入力エラー(invalid_params)
filterOption<String>任意各アイテムを JSON 文字列化した内容に対する部分一致フィルタ
種別・別名対象
node / nodes節点
member / members / element / elements部材
section / sections断面
wall_plate / wall_plates壁版
slab / slabs床板
floor_region / floor_regions床領域
wall_region / wall_regions壁領域
floor_assignment_region / floor_assignment_regions床板割当領域
wall_assignment_region / wall_assignment_regions壁版割当領域
secondary_member_end / secondary_member_ends支持先を持つ小梁・間柱
unassigned_beam / unassigned_beams未割当の小梁
unassigned_post / unassigned_posts未割当の間柱
secondary_beam / secondary_beams全小梁
source_stories原階の入力属性と明示所属
source_story_diagnostics原階入力・解析用所属の診断
stb_strengthsSTB強度入力(1項目)
resolved_strengths部材ごとの強度解決結果
strength_diagnostics強度入力の診断
rebar_notices鉄筋入力の非阻害通知

既知の種別で対象がない場合や、フィルタに一致しない場合は正常な items: [] です。 未完成のモデルも照会できます。

返り値:

{ "items": [ /* 検索結果の JSON オブジェクト配列 */ ] }
  • node: { "id", "coord", "story" }
  • member/element: { "id", "kind", "nodes", "section", "material" }。部材付帯情報(ハンチ・継手位置)があれば haunch_i/haunch_j(length/depth_increase/width_increase)と joints(distance/kind)を追加。入力モデルに保存されている部材だけを返す(壁版から都度生成する耐震壁は含まない。壁は kind=wall_plate で照会する)
  • section: { "id", "name", "area", "iy", "iz" }
  • wall_plate: { "id", "shape", "section", "opening_area", "opening_weight", "slit", "openings", "loads", "becomes_element" }。slit は { "column_face": [bool, bool], "beam_face": [bool, bool] }(耐震スリット。梁際は 0 が下辺、1 が上辺)、loads は仕上げ・増打ちの面荷重 [N/mm²](躯体の自重は含まない)、becomes_element はその壁版から壁エレメントが生成されるか。shape.kind は "Enclosed"(boundary)または "Attached"(anchor・extent・resolved_extent)。extent は入力値そのもので null は階高いっぱいを表し、resolved_extent は階レベルから解決した高さ(null は直上に階が無く解決できない。解析前チェックが止める)
  • slab: { "id", "shape", "section", "loads", "usage", "method", "one_way" }。shape.kind は "Enclosed"(boundary)または "Attached"(anchor・extent)
  • floor_region: { "id", "name", "boundary", "slab_ids", "secondary_beams" }。secondary_beams は所属小梁の実体配列
  • wall_region: { "id", "name", "boundary", "wall_plate_ids", "posts" }。posts は所属間柱の実体配列
  • unassigned_beam / unassigned_post: どの領域にも入らなかった二次部材の配列
  • secondary_beam: 領域内と未割当を合わせた小梁の実体配列

囲まれた壁版・床板の shape.boundary は解決できた節点ID列です。 割当領域がない、支持部材を解決できない、境界頂点に一致する節点がない場合は null です。 空の割当境界も未解決です。未解決を空の節点列として表示しません。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::model_query(crates/sepika-mcp/src/server.rs)で、検索本体は sepika_mcp::query::query_model(crates/sepika-mcp/src/query.rs)が担います。

model_edit

明示階種別は SetStoryLevelKind(例: {"command":"SetStoryLevelKind","story":1,"level_kind":{"Penthouse":{"k":0.7}}})でGUIと同じ編集を行います。取り込み原階kindは保持し、native由来の原階kindだけを更新します。

原階の明示所属は {"command":"SetSourceStoryNodes","source_story":51,"nodes":[0,1]} で変更します。 source_story は元 STB 階 ID、nodes は GUI と同じ内部節点 ID の配列です。 未知節点・生成代表節点・重複 ID は適用を拒否し、undo 履歴を増やしません。

モデルを編集します。GUI と同じ EditCommand と Undo 履歴を使います。引数は command キーで種別を指定する JSON オブジェクトです(トップレベルに command を置く)。{ "body": { "command": "...", ... } } という入れ子も受け付けます。

壁版・床板・領域・断面・二次部材の ID は 0〜4294967295 の JSON 整数で指定します。 負数、小数、範囲外、文字列、真偽値、配列、オブジェクトを指定すると、対象項目と理由を付けて拒否します。 必須 ID の省略・null も拒否します。任意の断面 ID は省略・null が未割当で、不正な指定値は未割当として扱いません。 拒否時はモデル・割当・Undo 履歴を変更しません。有効範囲内でも、対象 ID の存在や各操作の適用条件は別途確認します。 たとえば {"body":{"command":"DeleteSlab","id":4294967296}} は床板0を削除せずエラーになります。 MCP のツール引数はこの body 形式で渡します。

返り値:

{ "op_id": "op-1", "applied": true, "undoable": true, "summary": "..." }
  • applied が false のときは、参照検証などでコマンドが Noop になった(モデルは変わらない)
  • 節点・部材・荷重・断面そのものの追加削除など、下表にない EditCommand は未対応(エラー)

断面形状と数量設定(2)

command必須任意と既定
EditSectionShapesection(断面ID)、new_shape(断面形状)frame_use(線材用途、省略時はnull。壁・床断面はnull)
SetQuantityCfgcfg(共有数量設定の全5項目)—

RC壁の方向比はEditSectionShapeで共有断面のpwh_ratio・pwv_ratioを編集します。 値は小数比で、nullは未入力、数量上の明示0は0.0です。 数量設定の5項目・単位・既定値は算定係数を参照してください。 SetQuantityCfgは解析結果を失効させず、設定値を保存モデルへ反映します。

{"body":{"command":"SetQuantityCfg","cfg":{"anchorage_dia_factor":40.0,"assumed_wall_bar_dia":13.0,"beam_main_ratio":0.008,"beam_stirrup_ratio":0.001,"slab_rebar_ratio":0.01}}}

壁版(9)

囲まれた壁版は任意の節点境界からは作れません。柱・梁・間柱から導出した壁版割当領域 (準備計算が作る)へ AssignWallPlateToRegion で割り当てます。四辺の対称性から 割当領域の境界がそのまま壁版の境界になります。

command必須任意と既定
AssignWallPlateToRegionregion(壁版割当領域 ID)section(既定 null)、opening_area(既定 0)、opening_weight(既定 0)。領域が既に版ありなら applied: false
SetWallPlateRegionNoPlateregion既存の版があれば削除する(同一 Undo 単位)
UnsetWallPlateRegionregion既存の版があれば削除する(同一 Undo 単位)
AddAttachedWallPlateanchorextent(2 要素 [mm]。省略または null で階高いっぱい。自立壁のみ)、section(既定 null)、self_weight_shares(境界辺順の負担率。非負・有限・総和 1、既定 [] は未指定)、opening_area(既定 0)、opening_weight(既定 0)
DeleteWallPlateid—
SetWallPlateSectionidsection(null で未割当)
SetPostGravityEndSharesmember(間柱の安定 ID)shares(端の並び順の負担率2値、非負・有限・総和1。省略・nullは未指定)
SetWallPlateAttrsidself_weight_shares(境界辺順の負担率。非負・有限・総和 1、既定 [] は未指定)、opening_area(既定 0)、opening_weight(既定 0)、openings(既定 [])、loads(仕上げ・増打ちの面荷重。既定 [])、slit({ "column_face": [bool, bool], "beam_face": [bool, bool] }。片方のキーだけでも可。既定は 4 辺とも false)
SetAttachedWallPlateExtentidextent(省略または null で階高いっぱい。自立壁のみ)
SetAttachedWallPlateAnchorid、anchor—

壁版割当領域への割当の例:

{
  "command": "AssignWallPlateToRegion",
  "region": 0,
  "section": null,
  "opening_area": 0.0,
  "opening_weight": 0.0
}

取付き先 anchor が線のときの形(nodes は取付き梁の 2 節点、span は梁全長に対する無次元区間):

{
  "Line": { "nodes": [0, 1], "span": [0.0, 1.0], "transfer": "Anchor" }
}

床板(10)

囲まれた床板は任意の節点境界からは作れません。大梁・小梁から導出した床板割当領域 (floor_assignment_region)へ割り当てます。割当・版なし・未設定は同一 Undo 単位です。

command必須任意と既定
AssignSlabToFloorPlateRegionregion(床板割当領域 ID)版仕様はフラット引数(section/loads/usage/method/one_way)か plate オブジェクト。method 未指定は "TriTrapezoid"。loads 未指定は []。領域が既に版ありなら applied: false
SetFloorPlateRegionNoPlateregion既存の版があれば削除する(同一 Undo 単位)
UnsetFloorPlateRegionregion既存の版があれば削除する(同一 Undo 単位)
AddAttachedSlabanchor、extent版仕様はフラット引数(section/loads/usage/method/one_way)か plate オブジェクト。method 未指定は "TriTrapezoid"。loads 未指定は []
DeleteSlabid—
SetSlabSectionidsection(null で未割当)
SetSlabUsageidusage(null で積載荷重なし)
SetSlabOneWayidone_way(null で境界辺 0・2 が負担)
SetAttachedExtentid、extent—
SetAttachedAnchorid、anchor—

AddAttachedSlab のフラット引数の例:

{
  "command": "AddAttachedSlab",
  "anchor": { "Line": { "nodes": [0, 1], "span": [0.0, 1.0], "transfer": "Anchor" } },
  "extent": [1000.0, 1000.0],
  "section": 0
}

床領域(2)

command必須任意と既定
SetFloorRegionNameid、name—
SetFloorRegionSecondaryBeamsfloor_region(別名 id)、secondary_beams(SecondaryMember の配列。空にするときは []。空にすると旧所属は未割当へ移る)—

secondary_beams を省略するとエラーになります(欠落を空配列とみなしてリストを消すことはしません)。旧小梁語彙のコマンドやキーは受け付けずエラーになります。

未割当二次部材(4)

command必須任意と既定
AddUnassignedBeambeam(SecondaryMember)—
DeleteUnassignedBeamindex—
AddUnassignedPostpost(SecondaryMember)—
DeleteUnassignedPostindex—

同じ端点の小梁・間柱が既にあるときは適用されず applied: false になります。SecondaryMember は id(安定 ID)・kind・ends(支持部材アンカー/片持ち自由端)・section・name を持ちます。端部支持条件は SetSecondaryMemberEndSupport で設定できます。

二次部材の端部支持条件(1)

command必須任意と既定
SetSecondaryMemberEndSupportmember(二次部材の安定 ID)、end_support("Supported" / "Free" の 2 要素配列)—

安定 ID で対象の小梁・間柱を探し、床領域内・壁領域内・未割当のいずれにあっても設定します。支持端は現在の端部座標から支持部材アンカーへ再解決し、片持ち小梁は自由端の位置を "Free" にします(例: "end_support": ["Supported", "Free"])。同じ条件のときは適用されず applied: false になります。

二次部材の配置・移動・削除(3)

command必須任意と既定
PlaceSecondaryMemberparent("floor" / "wall" / "unassigned")、kind("Beam" / "Post")、ends(取付き位置表現)region(parent が "floor" / "wall" のとき必須。対象の床領域/壁領域 ID)、section(既定は未割当)、name(既定は空)
SetSecondaryMemberEndsmember(二次部材の安定 ID)、ends(取付き位置表現)—
DeleteSecondaryMembermember(二次部材の安定 ID)—

PlaceSecondaryMember は安定 ID を新規に払い出し、親領域(floor なら小梁、wall なら間柱、unassigned なら未割当)へ追加したうえで床板・壁版割当領域を再構築します。ends は {"Supported": [{"support": {"Primary": 0}, "position": 0.5}, ...]} のように支持部材アンカーで指定します。支持が決まらない端(Detached)、種別に合わない親、支持端が親領域(SecondaryParent が指す床領域・壁領域)の内側または境界上(許容差 10 mm)にない場合は適用されず applied: false になります(片持ちへの読み替えはしません)。SetSecondaryMemberEnds も同じ親領域内判定を行い、移動先が現在の所属領域の外へ出る場合は適用されません。

配置・移動・削除で旧版を失う場合は、まず除去する版 ID・件数・入力面荷重・室用途・開口重量と、1 Undo で復元できることをエラー応答で知らせます。モデル・ID の払い出し・Undo/Redo 履歴は未更新です。内容を確認した後、同じコマンドへ "confirm_plate_loss": true を追加して再送してください(既定は確認なし)。確認後は旧版を取り除き、新しい割当領域を未設定にします。成功応答の summary に除去対象を記載し、版・入力荷重の除去まで含めて 1 つの Undo 単位とします。ends の解析に失敗した場合は ends の解析エラーを返します。

版の割当は支持部材の種類・ID・厳密な材軸区間が同じ領域だけへ保持します。重心・面積・親名が同じ別境界へ転用しません。境界キーの衝突や同じ版の重複割当は確認フラグで許可できず、理由を返してモデル・履歴を更新しません。解析準備で予期しない孤立版が生じる場合も、入力荷重と版 ID を示して候補の確定を停止します。

壁領域(1)

command必須任意と既定
SetWallRegionPostswall_region(別名 id)、posts(SecondaryMember の配列。空にするときは [])—

posts を省略するとエラーになります。壁領域の新規作成・削除は公開していません(準備計算が壁領域を作り直すため)。

床領域の新規作成・削除は公開していません(準備計算が床領域を作り直すため)。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::model_edit(crates/sepika-mcp/src/server.rs)で、コマンドの解析と GUI と同じ Undo 経路での適用は sepika_mcp::edit::{parse_edit_command, apply_edit}(crates/sepika-mcp/src/edit.rs)が担います。

quantity_takeoff

数量積算(コンクリート体積・型枠面積・鉄筋/鉄骨重量の概算)を集計します。

引数型必須/任意意味既定値
group_byOption<String>任意"category"(部位別)/"story"/"stories"(階別)/"structure"(構造別)/"steel"(鉄骨種類別)/"rebar"(鉄筋径別)/"detail"/"items"(明細)"category"

group_by の未指定・空文字列は category です。明示した未知の文字列は 入力エラー(invalid_params)となり、数量を計算できないモデルでも集計軸の誤指定を先に通知します。

返り値:

{ "status": "complete", "rows": [ /* group_by に応じた行 */ ], "totals": { "concrete_m3": .., "formwork_m2": .., "rebar_t": .., "rebar_status": "complete", "rebar_issues": [], "steel_t": .., "rebar_joints": .. }, "notes": [ /* 注記 */ ] }

rows の形は group_by により異なります。

group_by行の形
category(既定){ category, concrete_m3, formwork_m2, rebar_t, steel_t, rebar_joints }
story{ story, concrete_m3, formwork_m2, rebar_t, steel_t, rebar_joints }
structure{ structure, concrete_m3, formwork_m2, rebar_t, steel_t, rebar_joints }
steel{ section, length_m, weight_t }
rebar{ dia_mm, length_m, weight_t }
detail{ elem, slab, wall_plate, secondary_member, section, label, story, category, structure, concrete_m3, formwork_m2, rebar_t, steel_t, rebar_joints, rebar_status, rebar_issues, rebar }

部位別・階別・構造別と全体にはrebar_status・rebar_issuesを付します。 状態はempty(対象なし)、complete(算定済み概算)、incomplete(未算定を伴う小計)です。 completeは実配筋数量との照合済みを意味しません。rebar_issuesには elem・wall_plate・section・usage・kind・reasonを返し、欠落/不正/未実装を区別します。 明細のrebarは方向・径・総延長・重量・状態の算定済み行です。未入力方向は0の行にせず理由を返します。 鉄筋径別の行は算定済み分の小計で、全体の状態・理由も確認してください。 数量全体の算定が不成立の場合はstatus="unavailable"、totals=nullと理由を返します。

detail(別名items)では、secondary_memberが二次部材IDの整数、他の対象ではnullです。 二次部材をelem・slabのIDで代用しません。端点にモデル節点がなくても解決実長で集計します。 実材への集約条件を満たす明細は、実材のelemを保持し、secondary_member=nullです。 階だけが未確定の場合は、ID付きの注記とstory="-"の行を残し、数量を全体・各小計へ含めます。 鉄骨種類別の集計は鋼材だけを対象とします。 断面・材料・端点等の不足で数量が決まらない場合は、対象IDと原因付きのunavailableです。 階の確定条件と実材との重複防止は二次部材の数量を参照してください。

集計にはモデルに保存された共有数量設定を用います。model_editのSetQuantityCfgで 数量設定を編集でき、Undo/Redo・保存後の再読込も同じ設定を使用します。

数量の算定式は数量積算を参照してください。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::quantity_takeoff(crates/sepika-mcp/src/server.rs)で、集計本体は sepika_mcp::query::quantity_takeoff_json(crates/sepika-mcp/src/query.rs)が担います。

analysis_run

解析を非同期で実行し、ジョブを登録して job_id を即座に返します(計算完了は待ちません)。

引数型必須/任意意味既定値
kindJobKind必須LinearStatic/Eigen/Pushover/TimeHistory/DesignCheck/UltimateCheck(質点系は含まれません)—
load_caseOption<u32>任意LinearStatic/DesignCheck/UltimateCheck: 対象荷重ケース ID先頭の荷重ケース
load_combinationOption<usize>任意DesignCheck専用: 保存組合せindex。load_caseとの同時指定・不正indexは拒否未指定
n_modesOption<usize>任意Eigen: モード数3
dirOption<String>任意Pushover/TimeHistory: 加力・入力方向。"X"/"Y" 以外はエラー"X"
stepsOption<usize>任意Pushover: 最大ステップ数50
max_dispOption<f64>任意Pushover: 目標変位 [mm]。未指定なら目標層間変形角のみで判定なし
max_drift_denomOption<f64>任意Pushover: 目標最大層間変形角の分母 n(角度 1/n)。max_disp と両方指定した場合は早く達した方で終了150(max_disp 未指定時)
dtOption<f64>任意TimeHistory: サンプル波の時間刻み [s]0.01
durationOption<f64>任意TimeHistory: サンプル波の継続時間 [s]2.0
periodOption<f64>任意TimeHistory: サンプル波の周期 [s]0.5
ampOption<f64>任意TimeHistory: サンプル波の振幅 [mm/s²]1000
zOption<f64>任意荷重自動同期: 地域係数 Z(令88条)1.0
soilOption<String>任意荷重自動同期: 地盤種別。"I"/"II"/"III" 以外はエラー"II"
c0Option<f64>任意荷重自動同期: 標準せん断力係数 C00.2
ai_modeOption<String>任意荷重自動同期: Ai 算定法。"Approx"/"SemiPrecise" 以外はエラー"Approx"
design_periodOption<f64>任意荷重自動同期: 参考の固有周期 T [s]。数値だけは告示精算の証拠にならず、SemiPrecise の標準EX/EYは未対応なし

返り値:

{ "job_id": "job-0" }

kind ごとに使用するパラメータと概略処理:

kind使用パラメータ処理概要
LinearStaticload_case, z, soil, c0, ai_mode, design_period指定/先頭の荷重ケースで線形静解析(解析前に荷重自動同期)
Eigenn_modes, z, soil, c0, ai_mode, design_period固有値解析(周期・刺激係数・有効質量。解析前に荷重自動同期)
Pushoverdir, steps, max_disp, max_drift_denom(解析前同期: z, soil, c0, ai_mode, design_period)増分解析(プッシュオーバー解析)。水平載荷の Ai 分布は solver 側で略算 T・Z=1・地盤 II・C0=0.2 固定。地震引数は階重量・EX/EY の同期にのみ効く。結果ストアには書かずサマリ JSON のみを返す
TimeHistorydir, dt, duration, period, amp, z, soil, c0, ai_mode, design_periodサンプル波(amp * sin(ωt) * e^{-0.3t})による時刻歴応答解析。減衰は剛性比例減衰(h=0.02、1 次固有振動数使用)固定(解析前に荷重自動同期)。結果ストアには書かずサマリ JSON のみを返す
DesignCheckload_case または load_combination, z, soil, c0, ai_mode, design_period保存組合せはGUIと同じterms/kind・継続時間・線形内力で検定。単独ケースは種別による状態を表示し、雪/風単体は組合せ未検定。地震単独指定は架構用G+Pを自動合成し、必要重力の一部/全部失敗で拒否。積雪ケースがあれば保存組合せの明示が必要。結果のload_targetがsingle_case/automatic_gravity_combination/saved_combination、terms、状態と理由を区別。法的全条件確認を意味しない。付着はRc1999、QDは既定方式。検定結果はサマリJSON。単独ケース内力だけ結果ストアへ保存し、組合せ内力は下記サマリから取得
UltimateCheckload_case, z, soil, c0, ai_mode, design_periodRC 部材の終局せん断・付着・軸余裕度、CFT 柱の軸終局検定(靭性保証型耐震設計指針)。単独ケースの指定と未指定時の先頭ケース採用には、架構用長期総組合せの完全性に関する未解決事項があり、終局需要の専用受入は未完了。共通の需要モード・不足条件を確認。結果ストアには書かずサマリ JSON のみを返す

解析前に、現在のモデルから既存階の地震用重量・剛床重量・物理質量と自動荷重を同期します。 密度・仕上げ・地震用積載などの編集後も、準備ボタンを経由せず最新重量を使用します。 重量・周期・係数の生成が失敗すると旧 Auto EX/EY を両方向とも除去し、通常の手入力荷重は保持します。 失敗した旧派生質量を使う Eigen/TimeHistory は拒否しますが、独立した DL 解析は可能なら継続します。 階が未定義のモデルの初期化は、この解析入口では行いません。

DesignCheckの保存組合せ・自動G+P+Kはcase: null、store.persisted: falseです。既存単独ケースの変位・内力と同じIDで保存しません。load_targetのsource・combination_index・requested_case・termsで計算対象を確認してください。単独ケースはcaseにケースIDを返し、store.persisted: trueならresult_getで内力を取得できます。

組合せ内力の取得は、analysis_statusの公開レスポンスにあるstatus.Done.result_refをJSON文字列として解析し、サマリ内のmember_forcesとload_targetを読み取ります。member_forces.rowsは最大10,000行、内部単位はN/QがN、MがN·mmです。total_rowsは計算した全行数、truncated: trueは取得行の省略を示し、全内力の取得完了を意味しません。store.retrievalに取得ツール・フィールド・JSON文字列の形式を示します。

組合せサマリと内力はサーバープロセス中のジョブ情報だけに保持します(store.lifetime: "server_process")。結果ストア/プロジェクトへの永続保存、result_getでの組合せ取得、10,000行を超えた内力のページ取得は未対応です。サーバー終了前に必要なサマリを取得してください。

Done の result_ref(サマリ JSON)には、解析結果に加え、前処理の注意事項があれば notices 配列が付きます。たとえば ai_mode="SemiPrecise" では告示精算の適用証拠の検証が未対応のため、design_period の有無にかかわらず EX/EY の自動水平力を生成せず、理由が notices に入ります(DL等の独立した解析は続行できますが、Ai生成に失敗した標準EX/EYと依存組合せは実行できません)。未設定の床板・壁版割当領域が残っている場合も、件数と対象 ID を記した警告が notices に入ります。GUI のような計算前の確認は挟みませんが、矩形RC/SRC大梁が支持する床板の割当が未設定なら、実重複控除を確定できないため停止します。それ以外は警告を添えて続行します(未設定は荷重・剛性を過小評価し得るため、結果を採用する前に必ず解消してください)。

標準 EX/EY の LinearStatic が Ai 地震力の再生成失敗で止まる場合、Failed.error に選択方向の具体的な理由を表示します。C0 下限、告示精算の未対応、精算周期の未取得などを確認してください。別方向の再生成通知は失敗原因へ混在させず、DL 等の独立した解析は続行できます。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::analysis_run(crates/sepika-mcp/src/server.rs)で、kind ごとの振り分けは sepika_mcp::job::compute_job(crates/sepika-mcp/src/job/mod.rs)が担います。

analysis_status

ジョブの状態を取得します。

引数型必須/任意意味
job_idString必須analysis_run が返した ID

返り値:

{ "id": "job-0", "kind": "LinearStatic", "status": { /* Queued | Running{progress} | Done{result_ref} | Failed{error} */ } }
  • status は次のいずれかの形を取ります。
    • "Queued"(ジョブ登録直後の内部状態。通常は analysis_run がすぐに実行を開始するため、ポーリングではほとんど見えません)
    • { "Running": { "progress": null } }
    • { "Done": { "result_ref": "<サマリ JSON 文字列>" } }
    • { "Failed": { "error": "<エラーメッセージ>" } }
  • Running.progress の null は未計測を表します。実測値 0.0(0%)とは区別します。現在の解析ジョブは進捗を計測しません。結果保存中も状態を照会でき、保存が終わるまで Running です。
  • job_id が存在しない場合はエラー(invalid_params)。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::analysis_status(crates/sepika-mcp/src/server.rs)で、ジョブの登録・状態保持は sepika_mcp::JobRegistry(crates/sepika-mcp/src/lib.rs)が担います。

result_get

解析結果ストアから結果を取得します。

引数型必須/任意意味
caseu32必須荷重ケース ID(Eigen の結果は case=0 固定)
kindString必須"NodalDisp"/"MemberForce"/"Modal"/"TimeHistory" のいずれか
node_idsOption<Vec<u32>>任意節点 ID での絞り込み
member_idsOption<Vec<u32>>任意部材 ID での絞り込み
step_rangeOption<Vec<u64>>任意[start, end) のちょうど 2 要素。それ以外はエラー

返り値:

{ "case": 1, "kind": "NodalDisp", "status": "current", "current_scope": "model_input_only", "entry": { /* 選択成果の生成元・版・公開path/hash */ }, "rows": [ /* 明細行 */ ], "truncated": false }

(case, kind) の組が結果ストアにない場合はエラーになります(analysis_run を先に実行する必要があります)。 各 kind の列構成は解析ジョブのフローと結果ストアを参照してください。 生成入力不一致でも保存値は stale として照会できます。生成元不明・版不一致・公開ファイル不整合では status: "unavailable"、機械可読な reason、action: "analysis_run" を返し、rows は返しません。保存成果の生成元と利用可否で判定範囲を確認してください。

実装参照:ハンドラは sepika_mcp::server::SepikaServer::result_get(crates/sepika-mcp/src/server.rs)で、結果の読み出しと絞り込み・行数上限の適用は sepika_mcp::persist::result_get_json(crates/sepika-mcp/src/persist.rs)が担います。