AFSIM MCP Server
Summary: The schema describes a large (~37-tool) AFSIM scenario editor/runner workbench — it lets a model build, save, validate, execute, and inspect AFSIM scenarios — which directly contradicts the README's
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AFSIM MCP Servercreate a scenario with an F-16 and a radar site"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AFSIM MCP
本项目是一个本地 MCP(Model Context Protocol)服务器,让大模型能真正跑起 AFSIM (Advanced Framework for Simulation, Integration, and Modeling)仿真并读懂结果。
只有 4 个工具。 不是一个功能齐全的想定编辑器,而是一层薄薄的、专门补上 模型自身做不到的那几件事的垫片。
边界:工具归工具,知识库归知识库
这个 MCP 只做两件事,两件事都不含判断:
一、AFSIM 知识库(core/knowledge/) — 只读 AFSIM 安装目录,只报告里面有什么。
不含任何作者编写的规则,AFSIM 升级后可以整体重新生成。
二、工具(core/runtime|validation|analysis) — 执行能力。薄,不含知识。
分层与依赖方向
core/knowledge/ 事实:从安装目录提取 不含判断
├ source.py 归一化读取(CRLF 会静默吞声明)
├ type_index.py 类型命名空间
└ mission_grammar.py mission 输出的语法
core/policy.py 判断:哪些事实算失败 全部具名、可覆盖
core/runtime.py 执行器:起进程
core/validation.py 执行器:跑 + 解析
core/analysis.py 执行器:evt → 指标
core/results.py 执行器:运行记录
core/server.py 配置解析与 JSON-RPC 分发
tools/ MCP 接口:模型答不了的问题
transport/stdio.py 传输依赖严格单向,下层不导入上层(tests/test_layers.py 会检查)。
一个事实不能悄悄变成判断,一个底层模块不能悄悄依赖上层。
什么进知识库,什么不进
进知识库 | 不进知识库 |
这台机器上有哪些 | 什么样的防空部署是合理的 |
mission 的报错长什么样 | 这个想定该怎么设计 |
| Pk 意味着什么、要不要追求 |
判据:能从 AFSIM 安装里提取出来的进,靠经验猜的不进。
这不是理论。这个仓库里两件"嵌知识"的事成功、两件失败:
成功:类型目录、错误语法。都是从 mission 真正读取的字节里提取的。 装上之后模型不再编造
AUTO_BLUE_FIGHTER_AIR。失败:关键词推断层、想定模板。都是作者根据经验猜的。结果是提示词写 "不要任何飞机",照样生成空中战斗机,平台类型只有
icon+mover。
4 个工具,每个对应一个模型答不了的问题
工具 | 模型为什么答不了 |
|
|
| 编译、实例化、运行在 AFSIM 里是一次 |
| KPI 和时间线来自数 MB 的 |
| 启动 GUI 工具。 |
每个工具都要能回答"模型为什么不能自己问这个问题"。
按这条规则 list_demos 站不住(68 个目录,ls 一下就行),已经删掉。
判断是显式的
core/policy.py 里的每条规则都具名、可从参数覆盖:
// 一份"跑了但什么都没发生"的仿真,默认判失败
{ "ok": false, "policy": { "inert_is_failure": true, ... },
"problems": ["simulation ran but produced no activity: ..."] }
// 不认同这个判断的调用方可以覆盖
run_mission { scenario_file: "...", inert_is_failure: false }
// → problems 变 caveats,ok 变 true之前这些判断埋在 validation.py 里,读起来像是 mission 自己说的。
Related MCP server: AspenPlus MCP Server
前置条件
Windows
Python 3.10+
已安装 AFSIM(
mission.exe等)。类型目录从 AFSIM 自带的 demos 索引而来。
服务只依赖 Python 标准库,不需要安装 mcp 包:transport/ 内置了完整的
JSON-RPC / MCP stdio 实现。
快速开始
python configure_mcp.py脚本会询问 AFSIM 根目录、工程目录、demos 目录和 bin 目录,写入
%USERPROFILE%\.afsim_mcp\config.json,并输出客户端配置片段。
环境变量 | 作用 |
| AFSIM 安装根目录 |
| 你的工程目录 |
| demos 目录(类型目录的数据源) |
|
|
| 配置文件所在目录,客户端只需传这一个 |
| 状态目录(类型目录缓存、运行记录) |
客户端配置形如:
{
"mcpServers": {
"afsim": {
"command": "python",
"args": ["<仓库路径>/transport/stdio.py"],
"env": { "AFSIM_MCP_CONFIG_DIR": "C:\\Users\\你\\.afsim_mcp" }
}
}
}工作流
1. afsim_types 查真实的 platform_type(模型必须选,不能编)
2. (模型自己写 AFSIM 文本到工程目录)
3. run_mission 跑 + 校验,拿到 file:line:column 的真实报错
4. 按报错改文本,再跑
5. analyze_run 出战斗报告与 KPI第 1 步:类型目录
AFSIM 有两个封闭的类型命名空间,两个都被索引了(2.9.0 实测):
层级 | 数量 | 说明 |
| 657(224 个含传感器或武器) | 完整的平台类型,含运动器/传感器/武器/处理器清单 |
组件类型 | 535 |
|
AFSIM 内置库类 | 88 |
|
区分方法是缩进:顶格的 sensor aesa WSF_RADAR_SENSOR 是类型定义,
缩进的 sensor rdr1 aesa 是平台内的实例(实例 rdr1,类型 aesa)。
afsim_types(domain="air")
→ AIR_MOVER_FIGHTER, DCA, ESCORT, HVAA, LTE_FIGHTER, SIX_DOF_FIGHTER, SOJ ...
afsim_types(name="LTE_FIGHTER")
→ sensor: aesa, esm
weapon: MEDIUM_RANGE_RADAR_MISSILE, SHORT_RANGE_IR_MISSILE
mover: WSF_BRAWLER_MOVER
processor: radar_track_cueing, weapon_datalink_manager
include_path: platforms/lte_fighter.txt
afsim_types(kind="sensor", keyword="radar") # 列传感器类型
afsim_types(name="aesa", kind="sensor")
→ base: WSF_RADAR_SENSOR
parameters: ignore_domain, initial_mode, selection_mode, slew_mode,
azimuth_slew_limits, elevation_slew_limits, ...
used_by: AIR_MOVER_FIGHTER, DCA, ESCORT, LTE_FIGHTER默认只列含传感器或武器的平台类型是有意的:一个既不能探测也不能开火的平台, 出现在交战想定里没有意义。每个组件类型还记录了它接受哪些参数和被哪些平台 使用,所以写组件时不用猜关键字。目录首次构建约 9 秒,之后走缓存。
脚本处理器的接口:这是"加了战术处理器却不开火"这个最常见故障的根因。目录会
把处理器声明的 script_variables 抽出来,标出默认为空因而必须赋值的变量,并
给出 demo 里的可用配置:
afsim_types(name="AA_TACTICS", kind="processor")
script_interface:
must_set = ['SENSOR_NAME', 'WEAPON_NAME']
working_configuration:
platform_type = BLUE_NAVAL_SAM_BATTERY
on_initialize = [{WEAPON_NAME: "blue_naval_sam"}, {MAX_ENGAGEMENTS: "20"}]赋值必须写在 on_initialize 块里;在 script_variables 里重声明会被 mission
拒绝——子 Agent 实测正是在这里卡住过。535 个组件类型中有 75 个带这样的脚本接口。
第 3 步:校验
run_mission 真正跑 mission.exe 并解析它的真实输出,而不是只看退出码:
{
"ok": false,
"returncode": 0, // mission 自己认为成功
"simulation_complete": true,
"inert_simulation": true, // 但只有 PLATFORM_INITIALIZED,什么都没发生
"evt_events": 4,
"evt_categories": { "PLATFORM_INITIALIZED": 4 },
"problems": ["simulation ran but produced no activity: ..."]
}判定失败的条件:Mission 报错、退出码非 0、超时、没跑到 Simulation complete、
一个输出文件都没写(no_evidence),或者跑完了却只有 PLATFORM_INITIALIZED
事件(inert_simulation)。
另有一类是"通过了但没法分析"(not_analyzable):仿真确实跑了、.aer 也有内容,
但一条 .evt 事件都没记录——通常是想定里 event_output 的 enable 全被注释掉了。
这种情况返回 ok: true 并附 caveat 说明,而不是误判成失败。
报错带精确定位:
ERROR Unknown command: bogus_keyword
at C:\proj\s.txt:2:22
source: "bogus_keyword 5"关于内置库类:WSF_AIR_MOVER、WSF_RADAR_SENSOR 这类是编译进 AFSIM 的,
demos 里不会声明,但 mission 认。目录把这类名字也收进来了(从别的类型的 base
字段和平台组件引用中反推),查不到时会明确区分"不在 demos 里"和"不是已知类型",
不会像之前那样误导你说 WSF_AIR_MOVER 不存在。
include 解析:demo 里的类型文件用相对路径 include 兄弟文件,只有当入口的
file_path 也指向那个 demo 时才能解析。run_mission 遇到
Cannot open file: X 时会直接在诊断里给出可执行的修复行:
"include_resolution": {
"found": true, "match": "basename",
"candidates": [{
"path": "air_to_air/platforms/lte_fighter.txt",
"add_to_entry_file": "file_path C:\SoftCode\Sim\AFSim\demos\air_to_air"
}]
}调试行为:include_stdout=true 会带回 Mission 的原始 stdout。AFSIM 把
show_state_transitions、show_task_messages 这类行为诊断放在 stdout,
查"为什么这个战术处理器不开火"基本只能靠它。
第 5 步:分析
analyze_run 除了 KPI 和交战统计,还会给出 diagnostics,说明报告为什么是空的
——这两种情况完全不同:
"diagnostics": [
{ "issue": "empty_evt", "detail": "output/scn.evt is 0 bytes.",
"likely_cause": "The scenario's event_output block enables no events..." },
{ "issue": "no_events", ... }
]对比之下,一次健康的交战跑出来的 diagnostics 是 []——有诊断信息本身就是
信号:它在告诉你结果可信还是不可信。
分析还给出 first_event_sec / last_event_sec(从全部解析记录算,不是从截断的
时间线),以及 kill_attribution 说明:AFSIM 的事件输出不记录击毁方的射手,
所以 first_kill 是按"损失方归给对面"推断的,油耗耗尽、坠毁或同归于尽都会被
算到对方头上——要下结论前请对照 weapon_statistics。
损失是怎么算出来的
red_blue_losses 里最容易被误读的是 platforms_lost。一发打出去的导弹在 AFSIM
里也是一个平台,命中后同样会产生 PLATFORM_BROKEN,所以"损失"这个词本身有歧义。
本项目不靠平台名字判断,判据全部取自事件流自身:
WEAPON_FIRED的第三个 token 就是这发弹的实例名,它随后会原样出现在PLATFORM_BROKEN里。名字对上的记为weapons_expended,不计入战斗损失。PLATFORM_INITIALIZED列出想定开场就摆上场的平台。名字在其中的才算真实损失。两者都覆盖不到时(
.evt被截断,或event_output没开这两类事件),该条 损失进loss_accounting.unverified_losses,照常计入platforms_lost,但明确 标注依据不足。
"loss_accounting": {
"basis": "AFSIM event stream (WEAPON_FIRED / PLATFORM_INITIALIZED), not name spelling",
"launched_weapon_platforms": 14,
"initialized_platforms": 9,
"unverified_loss_count": 0
}早期版本用名字关键词判定,把 BLUE_SAM_SITE 因为含 "sam" 当成了一枚导弹,
于是一份零战斗损失的仿真报出 9 架飞机损失。宁可报"依据不足",也不报一个看起来
精确、方向却错了的数字。
平台类型的域
afsim_types 的 domain 取自平台自己声明的 mover,并沿 base 链向上查找。
链上任何一环都没有声明 mover 的类型返回 undetermined——这是真实答案,不是失败。
早期版本会在类型名和定义文件路径里搜 "air""space" 这类词,结果把 GPS 归到
space、把 HVAA 和 SSM_MISSILE 归到 air。
仓库结构
core/knowledge/ AFSIM 知识库:只从安装目录提取事实
source.py 归一化读取
type_index.py 类型命名空间(platform_type / 组件类型 / 内置库类)
mission_grammar.py mission 输出的语法
core/policy.py 判断层:哪些事实算失败,具名可覆盖
core/runtime.py 执行器:进程
core/validation.py 执行器:跑 + 解析
core/analysis.py 执行器:evt → 指标
core/results.py 执行器:运行记录
core/server.py 配置解析与 JSON-RPC 分发
tools/ 4 个工具的定义与路由
transport/stdio.py stdio 传输入口
tests/
test_layers.py 层级纪律:下层不得导入上层
test_knowledge.py 知识层提取规则
test_type_index.py 类型索引提取规则
test_validation.py mission 输出解析
test_protocol.py MCP 协议测试
python -m pytest tests/ -v许可
MIT,见 LICENSE。
一个平台类型能不能开火
platform_type 继承是叠加的:派生类型只覆盖一个 mover,也会保留基类声明的
全部传感器、武器和处理器。所以只看类型自己那一段会把每个派生类型都读成裸的——
SAM-MR_RB6 会报"无传感器、无武器",而它其实继承了 SAM-MR 的导引头和四个
处理器。afsim_types 因此同时给出两份:
components—— 这个类型自己声明的effective_components—— 沿base链解析后的实际配置
还有一个坑:老版本里 armed 的定义是"声明了传感器或武器",于是只有雷达、
根本没有导弹的阵地也被标成 armed。一个 Agent 挑中这样的类型建了防空阵地,工程
干净运行、返回 0、然后全场一弹未发,而 MCP 一直在说它是武装的。
现在分开报三个事实:
字段 | 含义 |
| 有效配置里有传感器 |
| 有效配置里有武器 |
| 有效配置里有处理器 |
| 同时有武器和处理器 |
can_engage 是必要条件而非充分条件:脚本处理器在变量没配之前仍然是惰性的,而
mission 不会在加载时拒绝一个没接线的平台——照样跑、照样返回 0、照样不开火。
<length-value> 到底是什么
命令索引里每个带数值的参数都写成一个占位符——altitude <length-value>、
end_time <time-value>——而占位符正是语法变得不可校验的地方。<length-value>
是两个 token,第二个是单位,所以 altitude 5000m msl 会被拒,而索引无法
表达这个理由;end_time 00:00:30 也会被拒,因为 <time-value> 是一个数加一个
单位,不是时钟。这些全是一个 Agent 反复运行 mission 直到它不再报错试出来的。
AFSIM 在 documentation/html/docs/argumenttypes.html 里正式定义了这套产生式,
本项目直接读那份定义:
altitude <length-value>
-> altitude <real> <length-units>
length-units 36 个可接受拼写: meters meter m kilometers km feet ft kft miles mi nm nmi cm mm ...命令索引里 2267 个 <*-value> 占位符,现在 2068 个(91%)能被展开。剩下的是文档
本身没定义的(裸 <value>、dbratio-value、坐标类的 X-value),保持未定义。
拼写表里的每个词都来自 AFSIM 自己,不是谁试出来的。
include 是怎么找文件的
include 找不到文件时的提示以前指向 demo 的顶层目录,于是给出
file_path demos/suppressor,而文件其实在 demos/suppressor/platforms 下面——
加了这行没有任何变化。
AFSIM 是把 file_path 条目拼到它被要求的名字上来找文件的,所以正确的条目不是文件
所在目录,而是把请求的名字从文件路径里去掉之后剩下的目录:
mission 找不到 | 正确的 file_path |
|
|
|
|
搜索顺序取自 AFSIM File Commands 页的说明(它说这套算法和 C/C++ 预处理器一致):
先做 $(name) / ${name} 路径变量替换,然后绝对路径直接用,然后拼到当前正在
处理的那个文件所在目录,最后依次拼到每个 file_path 条目。declared_duration
也走同一套遍历,所以 end_time 写在被 include 的文件里一样算数——以前只读入口
文件,于是一份跑了 7200 秒的仿真一边报"用了 AFSIM 的 60 秒默认值"、一边建议加一个
已经存在且生效的 end_time。
仿真事件名
event_output 的 enable / disable 接受事件名,mission 对不认识的名字报
Invalid event name for event_output。这些名字既不在命令索引里(索引收的是命令,
不是命令的参数),也不可靠地在 HTML 文档里:documentation/html/docs/event/
有 80 页,而 AFSIM 自带 demo 里实际出现的 21 个事件有 17 个不在其中,包括
PLATFORM_BROKEN 和全部 SENSOR_TRACK_*、LOCAL_TRACK_*。
它们的声明在 SDK 头文件里。每个事件结果类给 cNAME 字符串一个字面量,那就是
event_output 接受的全集。这些类不集中在一个头文件里:核心的在
WsfEventResults.hpp,每个扩展自带一份——WsfMilEventResults.hpp 携带整个
WEAPON_* 事件族(WEAPON_FIRED、WEAPON_HIT、WEAPON_MISSED……)。
只读核心头文件会静默丢掉 55 个名字(早期版本就丢过整个武器事件族),所以索引
对 SDK include 树里所有 *EventResults*.hpp 取并集:153 个。GUI 工具的
偏好设置类也用 cNAME,但没有一个叫这个名字的文件,按文件名过滤即可精确排除。
afsim_command kind=event keyword=SENSOR_TRACK # 列出
afsim_command name=PLATFORM_BROKEN # 查一个
afsim_command name=WEAPON_FIRED # 武器事件族(扩展头文件声明)
afsim_command keyword=PLATFORM_BROKEN # 查不到命令时自动回落到事件名每个事件还带一个 seen_in_demos 标记,表示它是否真的在 AFSIM 自带场景的输出里
出现过——153 个里有 21 个。
实例接线:类型没写在那里的那一半
afsim_types(name=...) 返回的类型事实是"这个类型是什么",但 BRAWLER_TEST 这类
战术类型族还有另一半事实藏在 demo 的入口想定里:平台实例怎么接线。指挥链
(commander / command_chain)、战术处理器读的 script_variables
(MISSION_TYPE、ROUTE.Append、WINCHESTER……)、edit processor 改配置——
这些都写在平台实例上,不写类型就不生效;入口文件自己还得带一个顶层
script_variables 全局块(log、iout 等),否则脚本上下文根本初始化不了。
省掉它们的表现完全静默:仿真照样跑、照样退出 0,只是跟踪了十分钟、一弹未发。
索引因此在构建时把 demo 入口里实例化每种类型的块解析出来(每型最多 3 份、按
完整度排序),连同入口文件的 include、命名航路和全局脚本变量一起返回。force
layout 常被入口委托给被 include 的 scenarios/<名字>.txt(往往经
${SCNRIO} 路径变量),而序言在父入口里——索引沿 include 链把父入口的
$define、序言逐行合并下来,并按"序言前 / 序言后"拆分父入口的 include:
消耗这些全局变量的 observer 必须在序言之后 include,放错位置脚本上下文就
初始化失败:
afsim_types(name="BLUE_FIGHTER")
→ demo_instantiations:
file: air_to_air/scenarios/2v2.txt
wiring: commander SELF, command_chain IFLITE SELF, ...
script_variables: START_TYPE = "route"; MISSION_TYPE = "SWEEP"; ...
entry: includes [platforms/lte_fighter.txt, observer.txt, ...]
global_script_variables [closest_hostile, log_print, iout, ...]照抄一份就是"这个类型被使用的方式"。配套地,analyze_run 把"跟踪很多、零开火"
单列为一个诊断项(tracking_without_engagement),并把原因指向实例接线而不是
让报告看起来只是运气不好。
脚本 API
战术处理器就是脚本,而脚本是写在对象上的——PLATFORM、SENSOR、WEAPON、
TRACK、PROCESSOR——以及它们的那些方法。这些此前在这个 server 上无处可查:
命令索引收的是输入文件命令,事件索引收的是事件名,所以"WsfTrack 有哪些方法"
在哪儿都没有答案。把一个处理器接起来,只能猜标识符,然后反复运行 mission 直到
它不再说 Unknown identifier。
产品自己文档化了:documentation/html/docs/script/ 330 页,295 页是 WSF 类,
每页列出方法、返回类型、参数和说明;另外 208 个模型页在文档根目录也带脚本方法。
本项目把两处一起读,得到 329 个类、4551 个方法:
afsim_command kind=script name=WsfTrack # 列出方法
afsim_command kind=script name=TrackQuality # 按方法名反查是哪些类的
afsim_command kind=script keyword="track quality" # 搜参数和说明正文
afsim_command kind=script # 列全部类WsfAssetManager 的方法里有一组是 GetEWRequired / GetTARRequired /
GetTTRRequired / GetWeaponRequired——这就是"传感器没指定分类,资产永远不合格,
于是永远不开火"那条规则的接口面。现在它可查了。
WsfTrack.TrackQuality() 会连文档说明一起返回:"Return the track's quality as
a value in the range [0..1]"。
一个处理器要配成什么样才会开火
处理器出厂时 SENSOR_NAME / WEAPON_NAME 是空的,而 mission 拒绝在
script_variables 里重声明它们——只能在处理器内部的 on_initialize 块里赋值。
以前只返回第一条匹配,结果目录里 18 个需要外部配置的处理器,只有 1 个有示例, 其余 17 个被告知"要从脚本源码推断"——而答案就在旁边一行的派生类型里:
processor SR_SAM_TELAR_TASK_MGR TELAR_TASK_MGR
on_initialize
ACQ_SENSOR_NAME = "sr_sam_acq_radar_sensor";
SENSOR_NAME = "sr_sam_ttr_radar_sensor";
WEAPON_NAME = "sam";
...现在按完整度排序返回全部示例,优先给出类型自己定义里那段(哪怕它在一个派生
类上),并逐条标明覆盖了哪些变量、还缺哪些。TELAR_TASK_MGR、AA_TACTICS、
SAM_BATTERY_TASK_MGR 都能直接拿到一份完整可抄的配置。
on_initialize 的存储也从"扁平赋值列表"改成"保留块边界"——实际使用时是整块照抄,
而需要 SENSOR_NAME 和 WEAPON_NAME 的处理器只有两者在同一个块里才工作。
交战包线
zone 是平台声明自己能在哪里活动、交战的地方,而 zone 的名字正是战术处理器里
ENVELOPE = "..." 要填的把手。两者必须一起给:只给范围不知道叫什么,只给名字
不知道边界。
"zones": [
{ "name": "full_kinematic", "shape": "circular",
"extent": { "maximum_radius": "6 nm", "maximum_altitude": "20000 ft" } }
]SR_SAM_TELAR 此前两个数字都看不见——maximum_radius 根本不在关键词表里,而且
_performance 只对组件调用、平台类型从来没调用过。一个 Agent 想知道这个阵地够
不着 9 km 高 60 km 外的目标,只能靠二分二十几个几何。现在一眼可见。
zones 和性能限值都沿 base 链继承,因为交战包线通常写在基类里。657 个平台类型
里 10 个声明了 zone,314 个带性能限值。
同一个关键字在不同块里参数不同
命令索引里 5646 条命令带着 context 字段,但埋得太深。hits_to_establish_track
要两个整数,而且只在传感器的 mode 块里合法——只读语法的人写
hits_to_establish_track 3 被拒,然后断定命令写错了,而不是自己放错了块。
现在每条 form 都带 legal_in(_ 解释成 "top level")和一句说明。end_time 就有
四种形式,其中三种限定在别的块内。
Available Tools
37 toolsadd_moverA
Add a mover component to a platform.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the target platform. mover_type: AFSIM mover type (e.g. 'wsf_route_mover', 'wsf_air_mover'). mover_name: Optional name for the mover component.
Returns
JSON with component metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes | ||
| mover_type | No | wsf_route_mover | |
| mover_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral disclosure. It states the core behavior and return type but lacks details on side effects, validation, preconditions, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear first sentence and well-structured parameter list. Every sentence is necessary and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action and parameters well, and mentions the return type. It lacks prerequisites (e.g., platform must exist) and error conditions, but is adequate for a straightforward add operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by providing clear, context-rich explanations for each parameter (e.g., 'UUID', 'AFSIM mover type', 'Optional name'), adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a mover component to a platform') with specific verb and object, and distinguishes from sibling tools like add_sensor and add_weapon by specifying 'mover'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need to add a mover to a platform) but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sensorA
Add a sensor component to a platform.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the target platform. sensor_type: AFSIM sensor type (e.g. 'wsf_radar_sensor', 'wsf_eo_sensor'). sensor_name: Optional name for the sensor component.
Returns
JSON with component metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes | ||
| sensor_type | No | wsf_radar_sensor | |
| sensor_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool adds a sensor component and returns JSON metadata, but does not mention prerequisites (e.g., platform must exist), potential side effects, or any destructive behavior. The explanation is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief one-sentence summary followed by a clear parameter list. It is front-loaded with the key action. While it could be slightly more compact, it efficiently conveys necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, it omits important contextual information such as prerequisites (scenario and platform must exist) and whether the operation is additive or overwrites existing sensors. The description is moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the parameter explanations in the description add significant value. Each parameter is explained with context: scenario_id is a UUID, platform_name is the target, sensor_type includes example values, and sensor_name is optional. This goes beyond the schema's title/type/default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Add a sensor component to a platform.' This specific verb+resource (add + sensor) distinguishes it from sibling tools like add_mover and add_weapon. The tool name and description are consistent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus alternatives. While the tool name implies it's for sensors, there is no mention of when not to use it or which other tools might be more appropriate (e.g., add_mover for movers). Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_weaponA
Add a weapon component to a platform.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the target platform. weapon_type: AFSIM weapon type (e.g. 'wsf_missile', 'wsf_bomb'). weapon_name: Optional name for the weapon component.
Returns
JSON with component metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes | ||
| weapon_type | No | wsf_missile | |
| weapon_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the tool 'adds' a component but does not detail side effects (e.g., whether the platform is modified permanently, or if any validation occurs). The return type is noted, but more context on impact would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure: a header line, a parameter list, and a return note. Every sentence adds information, but the parameter descriptions could be more tightly integrated. Overall, it's efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 2 required) and the presence of an output schema, the description covers parameters and return but misses usage context and behavioral details. For a straightforward tool, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining each parameter's purpose (e.g., 'scenario_id' as UUID, 'weapon_type' as AFSIM type with example). It also clarifies the optional nature of 'weapon_name' and the return value, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add', the resource 'weapon component', and the target 'platform'. It distinguishes from sibling tools like 'add_mover' and 'add_sensor' by specifying the weapon type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'add_mover', 'add_sensor'). No prerequisites or exclusions are mentioned, leaving the agent without context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_platformA
Add a new platform (entity) to a scenario.
Parameters
scenario_id: UUID of the target scenario. name: Unique name for the platform within the scenario. platform_type: AFSIM platform type (e.g. 'wsf_air_vehicle', 'wsf_ground_vehicle'). latitude, longitude: Initial position in decimal degrees. altitude_m: Initial altitude in metres.
Returns
JSON with platform metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| name | Yes | ||
| platform_type | No | wsf_platform | |
| latitude | No | ||
| longitude | No | ||
| altitude_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral disclosure. It states the tool adds a platform but omits side effects, prerequisites (e.g., scenario existence), or whether it is destructive. The return value is mentioned but not in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with headings and bullet points, no extraneous information. It is concise yet covers all parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the minimal return description is acceptable. However, missing prerequisites (e.g., scenario must exist) and error conditions make it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides meaningful context: explains scenario_id as UUID, name as unique, platform_type examples, latitude/longitude in decimal degrees, and altitude in metres. This goes beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a new platform (entity) to a scenario.' with specific verb and resource, and includes a detailed parameter list. It distinguishes itself from sibling tools like delete_platform and modify_platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing required parameters but does not explicitly state when to use this tool versus alternatives (e.g., add_mover). No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scenarioA
Create a new AFSIM scenario in memory.
Parameters
name: Unique name for the scenario. description: Optional human-readable description. duration_s: Simulation duration in seconds (default 3600). time_step_s: Simulation time step in seconds (default 1.0).
Returns
JSON with scenario_id, name, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| duration_s | No | ||
| time_step_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the 'in memory' behavior and return fields, providing key behavioral context. However, it does not specify behavior on duplicate names (overwrite/error) or side effects on existing scenarios. Still, it adds significant value beyond a bare description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-line purpose, a structured parameter list, and a return note. Every sentence earns its place, with no fluff. The front-loaded purpose immediately orients the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (4 params, no annotations, output schema present), the description covers the core: name, duration, time step, and return. It misses context like reliance on an AFSIM installation and the need to later save the scenario. However, it is adequate for an experienced agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds 'Unique name', 'Optional human-readable description', and units for numeric parameters (seconds, defaults). This meaningfully goes beyond the schema's titles and types, though it could include constraints like positive duration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new AFSIM scenario in memory,' with a specific verb and resource. It distinguishes from siblings like load_scenario (file-based) and generate_scenario_from_prompt (AI-generated), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating a new in-memory scenario but lacks explicit guidance on when to use vs. alternatives. It does not mention prerequisites (e.g., before adding components) or when to use load_scenario or generate_scenario_from_prompt instead. The 'in memory' hint is helpful but insufficient for clear decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_platformA
Remove a platform from a scenario.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the platform to remove.
Returns
JSON with 'removed' boolean.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states the basic action and return type (JSON with 'removed' boolean). It does not mention that the operation is destructive, irreversible, or whether it cascades to associated components. Side effects or conditions are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one introductory sentence followed by a clear parameter list. No extraneous information, well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema (not shown), the description covers purpose, parameters, and return format. However, it could be more complete by mentioning that the platform must exist or that the operation is irreversible. Overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes parameter explanations: 'UUID of the target scenario' and 'Name of the platform to remove.' This adds meaningful semantics beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Remove a platform from a scenario,' which identifies the specific action (remove) and resource (platform from scenario). This distinguishes it from sibling tools like create_platform, modify_platform, and remove_component.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for removing a platform, but lacks explicit guidance on when to use this tool versus alternatives (e.g., delete_scenario for deleting the entire scenario) or prerequisites (e.g., the platform must exist). No exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scenarioA
Remove a scenario from memory (does not delete files on disk).
Parameters
scenario_id: UUID of the scenario to remove.
Returns
JSON with 'removed' boolean.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the key behavior of not deleting files on disk, but lacks details on side effects, permissions, or reversibility. With no annotations, the description provides moderate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded description. The parameter section is somewhat redundant with the schema but not excessively so. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter and an output schema, the description covers the essential behavior (removes from memory, not disk) and return value. Could mention error handling but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'scenario_id' is described as 'UUID of the scenario to remove', adding meaning beyond the schema's type and title. However, no format constraints or examples are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (remove a scenario from memory) and distinguishes from file deletion. Specific verb 'remove' and resource 'scenario' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: use when needing to remove a scenario from memory without deleting files. No explicit when-not-to-use or alternatives among siblings like 'delete_platform' or 'remove_component'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_afsim_installationA
Auto-detect AFSIM installation from environment and file system.
Returns
JSON with afsim_home, binary paths, and all_found flag.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the non-destructive nature of detection and specifies the return format (JSON with afsim_home, binary paths, all_found flag). Since no annotations exist, this provides useful transparency, though it could mention potential failure scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with two short sentences. The purpose is front-loaded, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and a simple task, the description is fully complete. It explains the detection method and return value, which suffices for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4. The description adds meaning beyond the empty schema by specifying the return structure, which aids in understanding the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Auto-detect AFSIM installation') and the source ('from environment and file system'). It distinguishes itself from sibling tools like set_afsim_binary by focusing on detection rather than setting paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives. The description only states what the tool does, without indicating prerequisites or when it should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_results_to_jsonA
Convert a result file (.csv, .evt, .aer) to JSON format.
Parameters
file_path: Path to the source result file. output_path: Destination JSON path (defaults to same name with .json extension).
Returns
JSON with the output file path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the conversion action and return format but fails to mention critical behavioral traits such as whether existing output files are overwritten, required permissions, error handling, or side effects on source files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at ~50 words, structured with parameters and returns sections, and front-loaded with the main purpose. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, supported formats listed) and presence of an output schema, the description is largely complete. It explains the return value and covers main behavior. However, it could mention whether the conversion is lossy or preserves all data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for both parameters: file_path is the source path, output_path defaults to same name with .json extension (though schema default is empty string, creating slight inconsistency). This partially compensates but could be more precise (e.g., clarifying default behavior).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts specific result file formats (.csv, .evt, .aer) to JSON format, using a specific verb 'convert' and resource 'result file to JSON'. This distinguishes it from sibling tools like query_csv_results which query data rather than convert formats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates usage when a JSON output file is needed from supported result files. However, it does not explicitly state when to avoid this tool or mention alternatives, such as using query tools for in-memory results. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_scenario_from_promptA
Generate an AFSIM scenario from a natural language description.
The generator uses keyword matching and heuristics to parse the prompt and build a scenario with platforms, movers, sensors, and weapons.
Examples: "Create a scenario with 2 fighters and a ship over 2 hours" "Simulate 3 UAVs with radar sensors patrolling for 30 minutes" "Air defense scenario: 1 SAM site and 4 attack aircraft, 1 hour"
Parameters
prompt: Natural language description of the desired scenario.
Returns
JSON with scenario_id, name, platform list, warnings, and AFSIM preview.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses use of keyword matching/heuristics and components built, but lacks details on limitations, side effects, or error handling; no annotations to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with front-loaded purpose and helpful examples; structured Parameters/Returns section adds clarity but slightly lengthens the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mechanism, examples, and return format. Lacks mention of persistence or linkage to other tools, but sufficient for a 1-parameter tool with output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'prompt' is described in the Parameters section, adding meaning beyond the bare schema (which had 0% coverage).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it generates an AFSIM scenario from natural language, distinguishing it from siblings like create_scenario or refine_scenario_from_prompt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Examples imply use for quick scenario creation, but no explicit when-to-use or when-not-to-use guidelines, nor direct comparison with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_results_summaryA
Summarise simulation results in a directory.
Parameters
directory: Directory to summarise (defaults to simulation output dir).
Returns
JSON with total_files, by_format counts, and total_size_bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It mentions the return format but does not disclose side effects, permissions, or safety (e.g., read-only). With no annotation support, the description is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured as a docstring with a clear first line and parameter/return sections. It is efficient but could be slightly more concise, though it remains readable and focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and return structure, but lacks details on edge cases (e.g., empty or non-existent directories). Given the tool's simplicity and the presence of an output schema, it is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the directory parameter's purpose and default behavior ('defaults to simulation output dir'), adding meaning beyond the schema (which lacks descriptions). This compensates for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Summarise simulation results in a directory' with a specific verb and resource, distinguishing it from sibling tools like list_result_files (lists files, not summary) and query_* tools (queries specific formats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for summarizing results but does not explicitly state when to use it versus alternatives like export_results_to_json or query tools. No when-not or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scenario_contentA
Get the AFSIM text representation of a scenario.
Parameters
scenario_id: UUID of the scenario.
Returns
JSON with 'name' and 'content' (AFSIM scenario text).
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It states it returns the text representation, implying a read-only operation. However, it does not mention prerequisites (e.g., scenario must exist) or potential errors. The given info is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief purpose statement, followed by a parameters section and a returns section. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema (known to exist). The description explains the output format (JSON with 'name' and 'content'). It could mention that the scenario must exist, but overall it's sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no parameter description (0% coverage), but the tool's description clarifies that 'scenario_id' is a UUID. This adds meaning beyond the schema, which only provides the title and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the AFSIM text representation of a scenario, using the verb 'Get' and specifying the resource. This distinguishes it from sibling tools like create_scenario or delete_scenario.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_scenarios (which lists names) or load_scenario (which loads into memory). The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_simulation_statusA
Query the current status of a simulation run.
Parameters
run_id: UUID of the simulation run.
Returns
JSON with status, times, PID, output directory, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It discloses return fields (status, times, PID, output directory) but omits details like whether state changes, required permissions, or error conditions. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load purpose and parameters. Every sentence adds value; no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple parameter and an output schema (not shown but indicated), the description adequately covers purpose and return format. Could mention possible status values or usage caveats, but overall complete for a query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds that run_id is a 'UUID of the simulation run,' providing format and semantics beyond the schema's 'string' type. Schema coverage is 0%, so description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Query the current status of a simulation run.' The verb 'Query' and resource 'status of a simulation run' are specific and distinct from siblings like run_simulation or get_results_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_results_summary, list_simulation_runs). The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsA
List all components on a platform.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the target platform.
Returns
JSON array of component summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the return type (JSON array of component summaries) but omits behavioral traits like idempotency, authentication requirements, or potential side effects. The description is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with a clear structure: a one-line purpose, a parameter list, and a return value note. Every sentence serves a purpose, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is largely complete. It identifies the parameters and return type. However, it could mention that the operation is read-only and safe to call multiple times, enhancing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds brief descriptions ('UUID of the target scenario', 'Name of the target platform') which clarify the role of each parameter but offer no format constraints or examples. Minimal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists components on a platform, specifying the required parameters scenario_id and platform_name. This distinguishes it from sibling tools like list_platforms or list_scenarios, as it operates on a lower-level entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to list components) but does not provide explicit guidance on when not to use or alternative tools. With siblings like remove_component, some exclusion context would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_platformsA
List all platforms in a scenario.
Parameters
scenario_id: UUID of the target scenario.
Returns
JSON array of platform summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It states the tool lists platforms and returns a JSON array, implying a read-only operation. However, it does not mention any potential limitations or dependencies, which is adequate for a simple list tool but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose, followed by a structured parameters section and return value note. No extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description is complete. It covers purpose, input, and output. However, it could mention that it returns all platforms without filtering, which is already implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, so the description carries the burden. It explains that scenario_id is a 'UUID of the target scenario', adding meaning beyond the schema's title and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all platforms in a scenario', using a specific verb and resource. This distinguishes it from sibling tools like create_platform or delete_platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs a list of platforms in a scenario, but does not explicitly state when to use it over alternatives like list_components or list_scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_result_filesB
List simulation result files.
Parameters
run_id: Filter to a specific run's output directory (optional). directory: Directory to scan (overrides default output dir). formats: Comma-separated list of extensions to include (e.g. '.aer,.csv').
Returns
JSON array of result file metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No | ||
| directory | No | ||
| formats | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It states that the tool lists files and returns metadata, but does not disclose that it is read-only, whether it accesses the file system or a database, or any side effects. The description is minimal and leaves the agent unaware of important behavioral aspects like default directories or recursion behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and uses a clear structure with a brief purpose statement followed by labeled parameter explanations. It avoids unnecessary text, though the Python docstring style (e.g., 'Parameters ----------') is slightly verbose for an MCP description. Overall, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains parameters and return type, which is helpful given the output schema exists. However, it lacks context about default behavior (e.g., what directory is scanned if none provided), whether listing is recursive, and the relationship to simulation runs. Given the tool's complexity (3 optional parameters) and no annotations, the description should provide more context to fully inform the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description provides clear semantics for all three parameters: run_id 'Filter to a specific run's output directory (optional)', directory 'Directory to scan (overrides default output dir)', and formats 'Comma-separated list of extensions to include (e.g. '.aer,.csv')'. This compensates well for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List simulation result files' and specifies that it returns a JSON array of result file metadata. It distinguishes itself from sibling tools like query_aer_results, query_csv_results, and query_evt_results that query specific result types, and from export_results_to_json that exports results. The verb 'list' combined with 'result files' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Sibling tools such as query_aer_results, query_csv_results, and query_evt_results also deal with results, but the description does not explain that list_result_files returns file metadata while the query tools return parsed data. The agent is left to infer this distinction on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenario_filesA
List scenario files (.afsim and .json) in the scenarios directory.
Returns
JSON array of file paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return type (JSON array of file paths) and the directory searched, but lacks details on error handling, performance characteristics, or whether listing is recursive. No annotations provided to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences, front-loaded with the core purpose. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Sufficient for a simple tool with no parameters and an output schema. Could clarify if listing is recursive or only top-level, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description does not need to add parameter info; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists scenario files with specific extensions (.afsim and .json) in the scenarios directory, and notes the return format. This distinguishes it from sibling tools like list_scenarios or list_result_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus other list tools (e.g., list_scenarios). No mentions of prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenariosA
List all in-memory scenarios.
Returns
JSON array of scenario summaries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates it returns a JSON array of summaries, implying read-only behavior. However, with no annotations provided, it lacks details like side effects (none) or performance implications, which is acceptable for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no wasted words, front-loading the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, output schema exists), the description is complete: it specifies the resource, scope, and return format. No additional context required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema coverage is 100% trivially. Per calibration, baseline is 4 for 0-param tools; no additional parameter info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all in-memory scenarios,' using a specific verb ('List') and resource ('scenarios'), and distinguishes from siblings like list_scenario_files and list_platforms by specifying 'in-memory'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., list_scenario_files, list_platforms), or any prerequisites such as needing a loaded scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_simulation_runsB
List all known simulation runs and their statuses.
Returns
JSON array of run summaries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the return format. It does not disclose read-only nature, auth requirements, or other behavioral traits. The description carries the full burden and falls short.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema exists, the description is minimally acceptable but lacks details on what constitutes a 'run summary' and could be more informative for a general audience.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline is 4. The description adds nothing about parameters, but that is acceptable given zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists all simulation runs with statuses. It is specific and matches the tool name, but does not differentiate from sibling tools like get_simulation_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings. Lacks context about prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_scenarioA
Load a scenario from disk.
Parameters
file_path: Path to the scenario file. format: 'afsim' for .afsim files (default), 'json' for JSON files.
Returns
JSON with scenario_id and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| format | No | afsim |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It does not disclose side effects (e.g., overwriting current state), error handling, or requirements. The minimal description ('load from disk') adds little behavioral insight beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and efficiently structured with a purpose statement, a parameter list, and a return note. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no enums, no nested objects, output schema present), the description covers essential information (what it does, parameters, return type). It misses error handling or edge cases, but is complete for basic usage. Sibling tools are diverse enough that this description suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains both parameters: file_path (path to file) and format (afsim default, json for JSON). This adds meaningful context beyond the schema's title and type. However, it lacks details like accepted file extensions or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads a scenario from disk, using specific verb 'load' and resource 'scenario from disk'. It distinguishes itself from sibling tools like create_scenario, save_scenario, and delete_scenario by focusing on loading an existing file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like create_scenario or get_scenario_content. The description lacks any context about prerequisites or situations where loading is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_platformA
Modify an existing platform's position or type.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the platform to modify. latitude, longitude, altitude_m: New position values (omit to keep current). platform_type: New platform type string (omit to keep current).
Returns
JSON with updated platform metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes | ||
| latitude | No | ||
| longitude | No | ||
| altitude_m | No | ||
| platform_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that optional parameters can be omitted to keep current values, and mentions the return type (JSON with updated metadata). However, it does not discuss side effects, permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose sentence, a bulleted parameter list, and a returns line. It is concise and each part is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the moderate complexity (6 parameters), the description covers purpose, parameters, and return type adequately. It is missing details on error handling or prerequisites (e.g., scenario must exist), but overall it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It provides clear explanations for each parameter: scenario_id as UUID, platform_name, lat/lon/alt as new position (omit to keep current), and platform_type as new type (omit to keep current). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the action and resource: 'Modify an existing platform's position or type.' This distinguishes it from sibling tools like create_platform (create new) and delete_platform (delete).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying position or type but does not explicitly state when to use this tool versus alternatives like creating a new platform or deleting one. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_aer_resultsA
Read an AFSIM .aer archive/result file.
Parameters
file_path: Path to the .aer file. max_lines: Maximum lines to return (default 500).
Returns
JSON with line_count and lines array.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| max_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation ('Read') but provides no additional behavioral context such as side effects, authentication requirements, or error handling. With no annotations, a more explicit statement about safety would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear purpose statement followed by structured parameter and return sections. No unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with an output schema, the description covers parameters and return format adequately. Missing details like error handling or prerequisites, but overall complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear semantics for both parameters: file_path is 'Path to the .aer file' and max_lines is 'Maximum lines to return (default 500)'. Since schema coverage is 0%, this fully compensates and adds necessary meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'AFSIM .aer archive/result file', distinguishing it from sibling tools like query_csv_results and query_evt_results which operate on different file formats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over alternatives or when not to use it. The intended use case (reading .aer files) is implied but not contrasted with similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_csv_resultsA
Read and query a CSV result file.
Parameters
file_path: Path to the CSV file. columns: Comma-separated column names to include (all if empty). max_rows: Maximum rows to return (default 1000).
Returns
JSON with columns, row_count, and rows.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| columns | No | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It describes the parameters and return format (JSON with columns, row_count, rows), adding default max_rows. However, it does not mention read-only nature, error handling, file existence requirements, or performance implications. Adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: one sentence for purpose, followed by a clear parameter list, and a return format note. Every sentence earns its place with no redundancy. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (reading CSV with optional filtering), the description covers purpose, parameters, and return structure. With an output schema present, the return explanation suffices. However, it does not state assumptions like file_path must exist or behavior on missing columns. Mostly complete but misses minor contextual details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains file_path (path to CSV), columns (comma-separated, all if empty), and max_rows (default 1000). This adds meaning beyond the schema's field names and types, but the explanations are minimal. Sufficient for basic understanding, not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read and query' and the resource 'CSV result file', which precisely conveys the tool's function. It differentiates well from sibling query tools like query_aer_results and query_evt_results by specifying the file type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It lacks explicit context for when it is appropriate, exclusions, or mention of related tools. Users must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_evt_resultsA
Read an AFSIM .evt event file.
Parameters
file_path: Path to the .evt file. max_lines: Maximum lines to return (default 500).
Returns
JSON with line_count and lines array.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| max_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must bear the full burden. It discloses the return format and default max_lines but lacks details on error handling, large file behavior, or safety (read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and well-structured with clear Parameters and Returns sections. No extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately explains return values. It covers the core functionality but omits error scenarios or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaningful context: 'Path to the .evt file' and 'Maximum lines to return (default 500)'. This goes beyond the schema's bare titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'AFSIM .evt event file', distinguishing it from sibling tools like query_aer_results and query_csv_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading .evt files but provides no explicit guidance on when to use this tool versus alternatives like query_aer_results or query_csv_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refine_scenario_from_promptA
Apply a natural language refinement to an existing scenario.
Supports:
Adding platforms: "add 2 more fighters"
Changing duration: "extend to 3 hours"
Parameters
scenario_id: UUID of the scenario to refine. refinement_prompt: Natural language description of the changes to make.
Returns
JSON with changes applied and updated platform count.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| refinement_prompt | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains it applies changes and returns updated JSON, but does not disclose whether modifications are persisted immediately, if the scenario must be loaded first, or potential side effects. Without annotations, more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using bullet points for supported changes and a clear header for parameters. Every sentence is informative and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, and return value. However, it lacks details on error handling, prerequisites (e.g., scenario existence), or validation of the prompt, leaving minor gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly explains both parameters: scenario_id as the UUID and refinement_prompt as the natural language description. This adds essential meaning beyond the schema which only provides titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool refines an existing scenario using natural language, with examples of adding platforms and changing duration. This distinguishes it from siblings like generate_scenario_from_prompt which creates new scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing scenarios and provides concrete examples, but does not explicitly state when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_componentB
Remove a component from a platform.
Parameters
scenario_id: UUID of the target scenario. platform_name: Name of the target platform. component_name: Name of the component to remove.
Returns
JSON with 'removed' boolean.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| platform_name | Yes | ||
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only mentions the return boolean 'removed'. It does not disclose potential side effects, permissions needed, or what happens if the component doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, using a clear header and separate sections for parameters and returns. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple removal tool with three required parameters and an output schema, the description covers the basic functionality and return format. It lacks error handling or edge-case details but is reasonably complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds brief parameter explanations (e.g., 'UUID of the target scenario') beyond the schema's field titles. However, schema coverage is 0% and the explanations are minimal, not deeply clarifying formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove a component from a platform', which is a specific verb and resource. It distinguishes from sibling tools like 'add_mover' or 'delete_platform'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as when to remove a component versus modifying or deleting the platform. No context on prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_missionA
Launch the AFSIM Mission Planner.
Parameters
scenario_file: Optional path to open in Mission Planner.
Returns
JSON with success flag and PID.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_file | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions it returns a PID, implying process launch, but does not disclose potential side effects, blocking behavior, or dependencies (e.g., AFSIM installation). With no annotations, more detail is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three lines covering purpose, parameter, and return value. Every part is essential and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers a simple launcher use case but omits important details like when to use this vs other run tools and whether AFSIM must be installed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the single parameter 'scenario_file' as an optional path, which the schema lacks (0% coverage). This adds necessary meaning beyond the structured input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool launches the AFSIM Mission Planner, a specific action and resource. It distinguishes from sibling tools like run_simulation, run_warlock, etc., which focus on running other AFSIM components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., run_simulation, run_mystic). The description lacks context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_mysticB
Launch the AFSIM Mystic post-processor.
Parameters
results_dir: Directory containing simulation results to analyse.
Returns
JSON with success flag and PID.
| Name | Required | Description | Default |
|---|---|---|---|
| results_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond launching and returning a PID. Without annotations, it fails to indicate whether the tool is blocking or async, what resources it uses, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using a brief paragraph followed by a structured Parameters and Returns section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and parameter, but lacks context about prerequisites, behavior (e.g., blocking/non-blocking), and relationship to sibling tools. With no annotations, more detail is needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single parameter by specifying 'results_dir: Directory containing simulation results to analyse.' This tells the user it expects a directory path with simulation results, which is not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool launches the AFSIM Mystic post-processor, specifying a verb and resource. However, it does not differentiate it from sibling tools like run_warlock or run_wizard, which might also be post-processors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as needing simulation results from a prior run, or context for choosing between post-processors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_simulationA
Run an AFSIM simulation for the specified scenario.
If no AFSIM binary is configured (or dry_run is True), the simulation is recorded as completed immediately without executing AFSIM.
Parameters
scenario_id: UUID of the scenario to simulate. dry_run: If True, skip actual AFSIM execution (useful for testing).
Returns
JSON with run_id, status, and other run metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the conditional execution behavior (dry_run or missing binary) and mentions the return format. However, it does not specify whether the tool is synchronous, its side effects, or prerequisites beyond the binary configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a summary line, a conditional note, parameter descriptions, and return type. Every sentence is informative with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no nested objects, output schema exists), the description covers essential aspects: purpose, parameter semantics, return structure, and a behavioral nuance. It lacks only minor details like error cases or prerequisite checks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It fully explains both parameters: 'scenario_id' as 'UUID of the scenario to simulate' and 'dry_run' as skipping execution for testing. This adds clear meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Run an AFSIM simulation') and target ('for the specified scenario'). It is specific and distinct from sibling tools by mentioning AFSIM and scenario, but it does not explicitly differentiate from similar run tools like run_mission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about when the simulation is recorded without execution (no binary or dry_run=True), which guides usage. However, it lacks explicit statements about when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_warlockB
Run the AFSIM Warlock batch simulation engine.
Parameters
scenario_file: Path to the AFSIM scenario file. output_dir: Directory for output files (default current dir).
Returns
JSON with success flag, returncode, stdout/stderr snippets.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_file | Yes | ||
| output_dir | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions returning JSON with success flag and output snippets, but does not disclose side effects (e.g., file creation), blocking behavior, permissions, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and structured: a brief header followed by a parameter list and return description. No fluff, though the docstring format is not overly compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and return value. However, lacks behavioral context (e.g., whether it's a long-running batch job) and usage guidelines. Adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds clear meaning: 'scenario_file' is a path, 'output_dir' is for output files with a default. This is sufficient for a 2-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run' and the resource 'AFSIM Warlock batch simulation engine'. It distinguishes from siblings like 'run_simulation' by specifying the Warlock engine, but could be more explicit about what makes Warlock unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives such as 'run_simulation' or 'run_mystic'. No preconditions or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_wizardA
Launch the AFSIM Wizard (GUI scenario builder).
Parameters
scenario_file: Optional path to open in Wizard.
Returns
JSON with success flag and PID (if launched).
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_file | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals the tool launches a GUI (blocking/interactive) and returns a PID, which is useful. However, it does not mention side effects, system state changes, or dependencies like AFSIM installation, leaving moderate gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: a one-sentence purpose, then a clean parameter table and return type. Every piece of information is relevant and no filler. This front-loads the core action efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, the description covers the key aspects: what it does, the parameter, and the return structure (success + PID). The existence of an output schema (not shown) partially offsets the need for return details. However, it could mention that the call is blocking or that AFSIM must be installed, making it nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter with 0% coverage (no property descriptions). The description adds meaning: 'Optional path to open in Wizard', clarifying the param's role beyond the schema's type and default. This adds value, though it is brief.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Launch[es] the AFSIM Wizard (GUI scenario builder)', using a specific verb and resource. It distinguishes from siblings like 'run_mission' and 'run_simulation' by emphasizing the GUI builder aspect, indicating a different use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., 'create_scenario' for programmatic creation, 'run_simulation' for execution). No when-not-to-use or context is given, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_scenarioA
Save a scenario to disk.
Parameters
scenario_id: UUID of the scenario to save. file_path: Destination path. Defaults to scenarios/.afsim (or .json). format: 'afsim' (default) or 'json'.
Returns
JSON with the saved file path.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | ||
| file_path | No | ||
| format | No | afsim |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses default file paths and formats but does not mention overwriting behavior, error handling, or any destructive aspects. No annotations provided to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure: description line, parameters section, returns note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, and return value. Minor gaps on error conditions and overwriting behavior but sufficient for a simple save tool given output schema presence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully explains each parameter: scenario_id, file_path (with default path template), and format (with defaults). Adds meaning beyond schema titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Save a scenario to disk,' specifying the action (save) and resource (scenario). It distinguishes from siblings like load_scenario and create_scenario.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like load_scenario or create_scenario. Usage is implied but lacks exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_afsim_binaryA
Configure the path to the AFSIM simulation binary.
Parameters
binary_path: Absolute path to the AFSIM executable.
Returns
JSON confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| binary_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose whether the path is validated, persisted, or if it overwrites previous settings. Minimal behavioral insight beyond 'configure'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear purpose, parameters section, and returns section. No superfluous sentences; well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple setter tool with one parameter and an output schema. Lacks usage context and behavioral details but covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single parameter by specifying 'Absolute path to the AFSIM executable', which goes beyond the schema's type string. With 0% schema coverage, this is valuable context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool configures the path to the AFSIM simulation binary, with specific verb 'Configure' and resource 'path to the AFSIM simulation binary'. It distinguishes from siblings like set_afsim_home and set_tool_binary_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., set_afsim_home, set_tool_binary_path). No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_afsim_homeA
Set the AFSIM installation root directory.
Parameters
path: Path to AFSIM_HOME (the directory containing bin/, data/, etc.).
Returns
JSON confirmation with detected binaries.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only mentions setting a directory and returning a JSON confirmation. Lacks details on side effects (e.g., global state change, dependencies for other tools).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three lines with clear purpose, parameter summary, and return value. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter with one parameter and an output schema, the description covers the essential functionality. Could mention impact on other tools, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for 'path' (0% coverage), but the description adds meaning by specifying the directory contents (bin/, data/, etc.), providing context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and the resource 'AFSIM installation root directory', distinguishing it from siblings like set_afsim_binary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like set_afsim_binary or set_tool_binary_path, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tool_binary_pathA
Override the binary path for a specific AFSIM tool.
Parameters
tool: Tool identifier: 'wizard', 'mission', 'warlock', or 'mystic'. path: Absolute path to the tool binary.
Returns
JSON confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavior. It states the action and return type, but does not mention side effects, persistence, validation, or error handling. This is adequate for a simple configuration tool but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, front-loaded with the key action, and uses a clear list format for parameters. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no nested objects) and the presence of an output schema, the description is nearly complete. It explains the tool's purpose and parameter semantics, though behavioral details like path validation are missing. Context signals indicate 0% schema coverage, so the description compensates adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in schema), but the description adds meaning by listing valid tool identifiers and specifying that path must be absolute. This clarifies usage beyond the raw schema types. Could be improved by adding constraints or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Override the binary path for a specific AFSIM tool') and lists the valid tool identifiers. It distinctively separates this tool from siblings like set_afsim_binary and set_afsim_home by focusing on individual tool binaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly specify when to use this tool versus alternatives, nor does it mention prerequisites or when not to use it. While sibling context provides some differentiation, the description lacks direct guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_simulationB
Stop a running simulation.
Parameters
run_id: UUID of the simulation run to stop.
Returns
JSON with updated run status.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It does not disclose behavior for edge cases (e.g., stopping an already stopped simulation) or any side effects. The return type is mentioned briefly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded, with no wasted words. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 required parameter, no nested objects), the description covers the main function and return type. However, it omits potential errors or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains run_id as 'UUID of the simulation run to stop', adding meaning beyond the schema's type-only definition. This clarifies the parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Stop a running simulation' with a specific verb and resource, clearly distinguishing from related tools like run_simulation. However, it could be more detailed about the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as pausing or canceling simulations. The description only states what it does, not context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_scenarioB
Validate a scenario and return errors/warnings.
Parameters
scenario_id: UUID of the scenario to validate.
Returns
JSON with 'valid', 'errors', and 'warnings' lists.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It states it returns errors/warnings but does not mention if it modifies state, requires an existing scenario, or has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and well-structured with Parameters and Returns sections. Slightly verbose for the low complexity, but no excess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers basic purpose and return format, but lacks context about prerequisites, side effects, or when validation is needed. With output schema, return detail is partially redundant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description specifies scenario_id as 'UUID of the scenario to validate', which adds meaning beyond the schema's type string. Coverage is 0%, so this is essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Validate' with specific resource 'scenario', and the purpose is distinct from sibling tools like create_scenario or run_simulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use validation, what prerequisites exist (e.g., scenario must be saved), or how it relates to other tools like run_simulation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
37 tool updates
v0.1.0- First observed
add_mover - First observed
add_sensor - First observed
add_weapon - First observed
create_platform - First observed
create_scenario - First observed
delete_platform - First observed
delete_scenario - First observed
detect_afsim_installation - First observed
export_results_to_json - First observed
generate_scenario_from_prompt - First observed
get_results_summary - First observed
get_scenario_content - First observed
get_simulation_status - First observed
list_components - First observed
list_platforms - First observed
list_result_files - First observed
list_scenario_files - First observed
list_scenarios - First observed
list_simulation_runs - First observed
load_scenario - First observed
modify_platform - First observed
query_aer_results - First observed
query_csv_results - First observed
query_evt_results - First observed
refine_scenario_from_prompt - First observed
remove_component - First observed
run_mission - First observed
run_mystic - First observed
run_simulation - First observed
run_warlock - First observed
run_wizard - First observed
save_scenario - First observed
set_afsim_binary - First observed
set_afsim_home - First observed
set_tool_binary_path - First observed
stop_simulation - First observed
validate_scenario
TDQS
Scored across 37 tools
Each tool targets a distinct action or resource: scenario, platform, component, simulation, results, or configuration. Even closely related tools like run_simulation, run_warlock, run_mission are clearly differentiated by their specific AFSIM binary and purpose. No two tools overlap in functionality.
All tools follow a verb_noun naming pattern (e.g., create_scenario, list_platforms, run_simulation). Verbs are descriptive and consistent (create, delete, list, get, set, run, query, etc.). Even longer names like export_results_to_json maintain the pattern with additional qualifiers.
With 37 tools, the server is above the typical range but still appropriate for the complex AFSIM domain. Each tool serves a specific need across scenario creation, platform management, simulation execution, and result analysis. The count is high but not excessive given the breadth of functionality.
The tool set covers the full lifecycle: scenario CRUD, platform and component management, simulation execution (multiple binaries), result querying/export, and configuration. There are no critical gaps; all major operations for managing AFSIM simulations are represented.
Maintenance
Related MCP Connectors
MCP-Native LLM Orchestration Agent
Build, validate, and manage API simulations in WireMock Cloud from MCP-compatible AI agents.
LLM Orchestration Agent (Mcp)
LLM Orchestration MCP Agent
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables Large Language Models or other MCP clients to interact with Ansys/AGI STK (Systems Tool Kit), allowing users to control STK Desktop simulations programmatically or via natural language.42-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Aspen Plus process simulations through a standardized MCP interface, supporting simulation control, data access, and flowsheet manipulation.36MIT
- AlicenseCqualityDmaintenanceEnables AI agents to control Ansys Electronics Desktop (HFSS, Maxwell, Q3D, etc.) using MCP tools for simulation automation.10049PolyForm Noncommercial 1.0.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to read and control Command: Modern Operations scenarios locally via MCP tools, supporting real-time battle assessment, task planning, and scenario editing.7MIT