diff --git a/agents-tool.json b/agents-tool.json
new file mode 100644
index 00000000..46db54ea
--- /dev/null
+++ b/agents-tool.json
@@ -0,0 +1,3598 @@
+{
+ "tools": [
+ {
+ "tool_id": "001-ABACUSVA-001",
+ "name": "abacus_vacancy_formation_energy",
+ "description": {
+ "What it does": "Calculate formation energy of non-charged vacancy in metal atoms using DFT.",
+ "When to use": "When you need vacancy formation energy for metal structures.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.",
+ "Output": "Vacancy formation energy.",
+ "Notes": "Only non-charged vacancy of metal atoms; requires supercell for calculation.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算金属原子中非带电空位的形成能。",
+ "使用场景": "当需要计算金属结构的空位形成能时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:如泛函、自旋极化、DFT+U、磁矩等。",
+ "输出": "空位形成能。",
+ "注意事项": "仅支持金属原子的非带电空位;计算需使用超胞。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "VACANCY_FORMATION_ENERGY"
+ ],
+ "alternative_tools": [
+ "apex_calculate_vacancy"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSPH-002",
+ "name": "abacus_phonon_dispersion",
+ "description": {
+ "What it does": "Calculate phonon dispersion curve using DFT.",
+ "When to use": "When you need phonon properties and thermal corrections for a structure.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.",
+ "Output": "Plot of phonon dispersion band structure and thermal corrections.",
+ "Notes": "Requires DFT; may need supercell for accuracy.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算声子色散曲线。",
+ "使用场景": "当需要结构的声子性质和热修正时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:可选超胞、高对称点、k 路径。",
+ "输出": "声子色散能带结构图和热修正。",
+ "注意事项": "需要 DFT 计算;可能需要超胞以提高精度。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "PHONON"
+ ],
+ "alternative_tools": [
+ "apex_calculate_phonon",
+ "calculate_phonon"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSCA-003",
+ "name": "abacus_cal_band",
+ "description": {
+ "What it does": "Calculate electronic band structure using DFT.",
+ "When to use": "When you need band structure and band gap for a material.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.",
+ "Output": "Plot of band structure and band gap.",
+ "Notes": "DFT-based; supports PYATB or ABACUS nscf.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算电子能带结构。",
+ "使用场景": "当需要材料的能带结构和带隙时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:可选高对称点、k 路径。",
+ "输出": "能带结构图和带隙。",
+ "注意事项": "基于 DFT;支持 PYATB 或 ABACUS nscf。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "BAND"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSCA-004",
+ "name": "abacus_calculation_scf",
+ "description": {
+ "What it does": "Perform SCF calculation to compute energy using DFT.",
+ "When to use": "When you need ground state energy for a structure.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.",
+ "Output": "Energy.",
+ "Notes": "Basic SCF; no relaxation or other properties.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)执行自洽场(SCF)计算以计算能量。",
+ "使用场景": "当需要结构的基态能量时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。",
+ "输出": "能量。",
+ "注意事项": "基础 SCF 计算;不包含弛豫或其他性质。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "SCF"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSDO-005",
+ "name": "abacus_dos_run",
+ "description": {
+ "What it does": "Calculate DOS and PDOS using DFT.",
+ "When to use": "When you need density of states for electronic structure analysis.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').",
+ "Output": "Plots for DOS and PDOS.",
+ "Notes": "DFT-based; requires relaxation support.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算态密度(DOS)和投影态密度(PDOS)。",
+ "使用场景": "当需要态密度进行电子结构分析时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT参数,PDOS 模式(\"species\"、\"species+shell\"、\"species+orbital\")。",
+ "输出": "DOS 和 PDOS 图。",
+ "注意事项": "基于 DFT;需要弛豫支持。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "DENSITY_OF_STATES"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSBA-006",
+ "name": "abacus_badercharge_run",
+ "description": {
+ "What it does": "Calculate Bader charge using DFT.",
+ "When to use": "When you need atomic charge analysis.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.",
+ "Output": "Bader charge for each atom.",
+ "Notes": "DFT-based; requires charge density calculation.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算 Bader 电荷。",
+ "使用场景": "当需要进行原子电荷分析时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。",
+ "输出": "每个原子的 Bader 电荷。",
+ "注意事项": "基于 DFT;需要电荷密度计算。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "BADER_CHARGE_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSDO-007",
+ "name": "abacus_do_relax",
+ "description": {
+ "What it does": "Perform geometry optimization (relaxation) using DFT.",
+ "When to use": "When you need optimized structure.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).",
+ "Output": "Relaxed structure file.",
+ "Notes": "DFT-based relaxation.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)执行几何优化(弛豫)。",
+ "使用场景": "当需要优化结构时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;弛豫设置(晶胞、步数、方法、轴)。",
+ "输出": "弛豫后的结构文件。",
+ "注意事项": "基于 DFT 的弛豫。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "OPTIMIZE_STRUCTURE"
+ ],
+ "alternative_tools": [
+ "apex_optimize_structure",
+ "optimize_structure"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSCA-008",
+ "name": "abacus_cal_work_function",
+ "description": {
+ "What it does": "Calculate work function of slabs and 2D materials using DFT.",
+ "When to use": "When you need work function for surface materials.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.",
+ "Output": "Plot of electrostatic potential and work function.",
+ "Notes": "For slabs and 2D materials; polar slabs have two work functions.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算表面和二维材料的功函数。",
+ "使用场景": "当需要表面材料的功函数时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;真空方向、偶极修正。",
+ "输出": "静电势和功函数图。",
+ "注意事项": "适用于表面和二维材料;极性表面有两个功函数。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "WORK_FUNCTION"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSRU-009",
+ "name": "abacus_run_md",
+ "description": {
+ "What it does": "Perform ab-initio molecular dynamics using DFT.",
+ "When to use": "When you need MD simulation with DFT accuracy.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.",
+ "Output": "ASE trajectory file.",
+ "Notes": "DFT-based MD; expensive for long simulations.",
+ "Costs": "High DFT cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)执行从头算分子动力学。",
+ "使用场景": "当需要具有 DFT 精度的分子动力学模拟时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;系综、步数、时间步长、温度。",
+ "输出": "ASE 轨迹文件。",
+ "注意事项": "基于 DFT 的分子动力学;长时间模拟成本高。",
+ "成本": "高 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "MOLECULAR_DYNAMICS"
+ ],
+ "alternative_tools": [
+ "run_molecular_dynamics"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSCA-010",
+ "name": "abacus_cal_elf",
+ "description": {
+ "What it does": "Calculate electron localization function using DFT.",
+ "When to use": "When you need ELF for bonding analysis.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.",
+ "Output": "Cube file of ELF.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算电子局域化函数(ELF)。",
+ "使用场景": "当需要 ELF 进行键合分析时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。",
+ "输出": "ELF 的 Cube 文件。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "Electron_Localization_Function"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSEO-011",
+ "name": "abacus_eos",
+ "description": {
+ "What it does": "Calculate equation of state using DFT.",
+ "When to use": "When you need EOS curve and bulk properties.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.",
+ "Output": "Plot of fitted EOS and fitting parameters.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算状态方程。",
+ "使用场景": "当需要状态方程曲线和体相性质时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。",
+ "输出": "拟合的状态方程图和拟合参数。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "EOS"
+ ],
+ "alternative_tools": [
+ "apex_calculate_eos"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "001-ABACUSCA-012",
+ "name": "abacus_cal_elastic",
+ "description": {
+ "What it does": "Calculate elastic properties using DFT.",
+ "When to use": "When you need elastic constants and moduli.",
+ "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.",
+ "Output": "Elastic tensor (Voigt notation), bulk/shear/Young's modulus, Poisson ratio.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost; supports relaxation before calculation."
+ },
+ "description_cn": {
+ "工具简介": "使用密度泛函理论(DFT)计算弹性性质。",
+ "使用场景": "当需要弹性常数和模量时使用。",
+ "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。",
+ "输出": "弹性张量(Voigt 记号)、体积/剪切/杨氏模量、泊松比。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。"
+ },
+ "belonging_agent": "ABACUS_calculation_agent",
+ "scenes": [
+ "ABACUS",
+ "ELASTIC_CONSTANT"
+ ],
+ "alternative_tools": [
+ "apex_calculate_elastic",
+ "calculate_elastic_constants"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://toyl1410396.bohrium.tech:50004/sse",
+ "uat": "http://toyl1410396.bohrium.tech:50004/sse",
+ "prod": "http://toyl1410396.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-001",
+ "name": "apex_calculate_vacancy",
+ "description": {
+ "What it does": "Evaluate vacancy formation energies by relaxing supercells after creating vacancies internally (removes one atom from a pristine supercell).",
+ "When to use": "When you need vacancy formation energies for a material starting from a pristine crystal.",
+ "Input": "Pristine (defect-free) structure file of the bulk crystal (unit cell or supercell). Do NOT provide a structure that already contains vacancies/defects (missing atoms, partial occupancies, disordered sites), because the tool assumes a complete bulk lattice and will construct vacancies itself; defected inputs may cause errors or invalid energies.",
+ "Output": "Vacancy formation energies.",
+ "Notes": "DFT-based.; does not accept pre-defected structures.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "通过在内部创建空位后弛豫超胞(从完整超胞中移除一个原子)来评估空位形成能。",
+ "使用场景": "当需要从完整晶体开始计算材料的空位形成能时使用。",
+ "输入": "结构文件:完整(无缺陷)的体相晶体结构文件(原胞或超胞)。",
+ "输出": "空位形成能。",
+ "注意事项": "基于 DFT;不要提供已包含空位/缺陷的结构(缺失原子、部分占位、无序位点),该工具假设完整的体相晶格并会自行构建空位;提供已有缺陷的结构可能导致错误或无效的能量。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "VACANCY_FORMATION_ENERGY"
+ ],
+ "alternative_tools": [
+ "abacus_vacancy_formation_energy"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-002",
+ "name": "apex_calculate_interstitial",
+ "description": {
+ "What it does": "Insert interstitial atoms into a host lattice to compute formation energies across candidate sites (generated internally).",
+ "When to use": "When you need interstitial formation energies starting from a defect-free bulk crystal.",
+ "Input": "Pristine (defect-free) host lattice structure and interstitial atoms. The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies. The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies.",
+ "Output": "Interstitial formation energies for candidate sites.",
+ "Notes": "DFT-based. Not intended for pre-defected host structures.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "将间隙原子插入宿主晶格,计算候选位点(内部生成)的形成能。",
+ "使用场景": "当需要从无缺陷的体相晶体开始计算间隙形成能时使用。",
+ "输入": "结构文件:完整(无缺陷)的宿主晶格结构和间隙原子。 宿主结构必须是完整的体相晶格(无空位/反位/替代、无缺失原子、无部分占位/无序位点)。",
+ "输出": "候选位点的间隙形成能。",
+ "注意事项": "基于 DFT。不要提供已包含缺陷或额外原子的结构;该工具假设完整的晶格并会自行放置间隙原子——提供已有缺陷的结构可能导致错误或无效的能量。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "INTERSTITIAL_FORMATION_ENERGY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-003",
+ "name": "apex_calculate_elastic",
+ "description": {
+ "What it does": "Apply small strains to the lattice to extract elastic constants and derived moduli.",
+ "When to use": "When you need elastic constants and moduli.",
+ "Input": "Structure file.",
+ "Output": "Elastic constants and derived moduli.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "对晶格施加小应变以提取弹性常数和衍生模量。",
+ "使用场景": "当需要弹性常数和模量时使用。",
+ "输入": "结构文件。",
+ "输出": "弹性常数和衍生模量。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "ELASTIC_CONSTANT"
+ ],
+ "alternative_tools": [
+ "abacus_cal_elastic",
+ "calculate_elastic_constants"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-004",
+ "name": "apex_calculate_surface",
+ "description": {
+ "What it does": "Execute a workflow of surface energy calculation using a pristine Bulk crystal as input.",
+ "When to use": "When you need surface energy starting from a Bulk structure.",
+ "Input": "Bulk structure file.",
+ "Output": "Surface energy.",
+ "Notes": "Do NOT provide an already-cut slab/surface structure as input. Slab inputs can cause errors or lead to invalid surface energies.; DFT-based.",
+ "Costs": "DFT calculation cost.ensure the input is a complete bulk lattice."
+ },
+ "description_cn": {
+ "工具简介": "使用完整的体相晶体作为输入执行表面能计算工作流。",
+ "使用场景": "当需要从体相结构开始计算表面能时使用。",
+ "输入": "体相结构文件。",
+ "输出": "表面能。",
+ "注意事项": "不要提供已切割的板/表面结构作为输入。板状输入可能导致错误或无效的表面能。 基于 DFT。",
+ "成本": "涉及 DFT 计算成本。确保输入是完整的体相晶格。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "SURFACE_ENERGY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-005",
+ "name": "apex_calculate_eos",
+ "description": {
+ "What it does": "Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.",
+ "When to use": "When you need EOS curve.",
+ "Input": "Structure file.",
+ "Output": "EOS energy-volume curve.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "扫描平衡点附近的体积,弛豫内部坐标,构建状态方程的能量-体积曲线。",
+ "使用场景": "当需要状态方程曲线时使用。",
+ "输入": "结构文件。",
+ "输出": "状态方程能量-体积曲线。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "EOS"
+ ],
+ "alternative_tools": [
+ "abacus_eos"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-006",
+ "name": "apex_calculate_phonon",
+ "description": {
+ "What it does": "Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.",
+ "When to use": "When you need phonon spectra.",
+ "Input": "Structure file.",
+ "Output": "Phonon spectra.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "执行超胞有限位移计算,弛豫构型,并组装声子谱。",
+ "使用场景": "当需要声子谱时使用。",
+ "输入": "结构文件。",
+ "输出": "声子谱。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "PHONON"
+ ],
+ "alternative_tools": [
+ "abacus_phonon_dispersion",
+ "calculate_phonon"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "002-APEXCALC-007",
+ "name": "apex_calculate_gamma",
+ "description": {
+ "What it does": "Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.",
+ "When to use": "When you need stacking-fault energies.",
+ "Input": "Structure file and specified slip paths.",
+ "Output": "Generalized stacking-fault energies.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "构建并弛豫滑动板,沿指定滑移路径映射广义堆垛层错能。",
+ "使用场景": "当需要堆垛层错能时使用。",
+ "输入": "结构文件和指定的滑移路径。",
+ "输出": "广义堆垛层错能。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "APEX",
+ "STACKING_FAULT_ENERGY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "005-RUNDARTG-001",
+ "name": "run_dart_ga",
+ "description": {
+ "What it does": "Perform compositional optimization for multi-component materials to target specific properties using genetic algorithm.",
+ "When to use": "Search optimized compositions for target properties.",
+ "Input": "Target properties, optional initial compositions or structure templates, constrains, and surrogate model.",
+ "Output": "Optimized compositions.",
+ "Notes": "Cannot build doping structures; requires surrogate model.",
+ "Costs": "High due to long iterations."
+ },
+ "description_cn": {
+ "工具简介": "利用遗传算法对多组分材料进行成分优化,以匹配特定的目标性能。",
+ "使用场景": "搜索针对目标性质的优化成分。",
+ "输入": "目标性质、可选的初始成分或结构模板、约束条件和代理模型。",
+ "输出": "优化后的成分。",
+ "注意事项": "无法构建掺杂结构;需要代理模型。",
+ "成本": "由于迭代时间长,成本高。"
+ },
+ "belonging_agent": "compdart_agent",
+ "scenes": [
+ "COMPOSITION_OPTIMIZATION"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50002/mcp",
+ "uat": "http://pfmx1355864.bohrium.tech:50002/mcp",
+ "prod": "https://dart-uuid1754393230.appspace.bohrium.com/mcp?token=b3a955c99823427683843616328023d8"
+ }
+ },
+ {
+ "tool_id": "007-BUILDCON-001",
+ "name": "build_convex_hull",
+ "description": {
+ "What it does": "Build convex hull diagrams.",
+ "When to use": "Assess thermodynamic stability.",
+ "Input": "Material structures.",
+ "Output": "Convex hull, stable phases.",
+ "Notes": "General materials only.",
+ "Costs": "High (DPA calculations)."
+ },
+ "description_cn": {
+ "工具简介": "构建凸包图。",
+ "使用场景": "评估材料的热力学稳定性。",
+ "输入": "材料结构。",
+ "输出": "凸包、稳定相。",
+ "注意事项": "仅适用于通用材料。",
+ "成本": "高(涉及 DPA 计算)。"
+ },
+ "belonging_agent": "convexhull_agent",
+ "scenes": [
+ "CONVEXHULL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "https://convexhull-test-uuid1769078392.appspace.bohrium.com/sse?token=f45ef610fbbd446eb154f024dda3540c",
+ "uat": "https://convexhull-test-uuid1769078392.appspace.bohrium.com/sse?token=f45ef610fbbd446eb154f024dda3540c",
+ "prod": "https://convexhull-uuid1764213120.appspace.bohrium.com/sse?token=1ea4a0b8cd1e497585680680eccdae8b"
+ }
+ },
+ {
+ "tool_id": "008-FETCHSTR-001",
+ "name": "fetch_structures_from_db",
+ "description": {
+ "What it does": "Retrieve structures across multiple sources (BohriumPublic / OpenLAM / OPTIMADE providers) and run advanced SQL queries on MOFdb.",
+ "When to use": "Any \"find crystal structures\" request, including formula/elements/space group/band gap filters, time/energy filters (OpenLAM), cross-provider searches (OPTIMADE), or MOF-specific analytics (MOFdb SQL).",
+ "Input": "Provide either structured filters (formula/elements/space group ranges), OpenLAM filters (energy/time), OPTIMADE filter strings, or MOFdb SQL.",
+ "Output": "Structures or metadata in CIF/JSON; MOFdb returns SQL rows and optional structure file links.",
+ "Notes": "OPTIMADE filters must follow the standard grammar; MOFdb is MOF-specific; OpenLAM does not provide space group/band gap.",
+ "Costs": "Default to BohriumPublic for speed; use OPTIMADE for flexible/cross-provider retrieval; use MOFdb for complex MOF analytics."
+ },
+ "description_cn": {
+ "工具简介": "从多个数据源(BohriumPublic / OpenLAM / OPTIMADE 提供者)检索晶体结构,或对 MOFdb 运行高级 SQL 查询。",
+ "使用场景": "任何“查找晶体结构”的请求,包括按化学式/元素/空间群/带隙筛选、或针对 MOF 的特定分析(MOFdb SQL)。",
+ "输入": "结构化筛选条件(化学式/元素/空间群范围)、筛选条件,筛选字符串,或 MOFdb SQL 语句。",
+ "输出": "CIF/JSON 格式的结构或元数据;MOFdb 返回 SQL 查询结果行及可选的结构文件链接。",
+ "注意事项": "OPTIMADE 筛选必须遵循标准语法;MOFdb 仅限 MOF 相关数据;OpenLAM 不提供空间群/带隙信息。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_search_agent",
+ "scenes": [
+ "DATABASE_SEARCH"
+ ],
+ "alternative_tools": [
+ "web-search"
+ ],
+ "summary_prompt": "\n## RESPONSE FORMAT\n\n**If the tool response indicates `by_source` = \"mofdb\"** (MOFdb results):\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n\n**If the tool response indicates `by_source` = \"optimade\"** (OPTIMADE results):\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`).\n3. A download link for an archive (.tgz) if provided by the tool.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (infer from formula)\n(3) Atom count (if available; else **Not Provided**)\n(4) Space group (`Symbol(Number)` if possible; else **Not Provided**)\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (infer from provider URL)\n(9) ID (`id`)\nMissing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table.\n\n**If the tool response indicates `by_source` = \"openlam\"** (OpenLAM results):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided**\n (4) Download link (CIF/JSON, based on requested output)\n (5) Source database → always `\"OpenLAM\"`\n (6) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n\n**Otherwise** (BohriumPublic or other sources):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n",
+ "summary_cn": "\n## RESPONSE FORMAT\n\n**If the tool response indicates `by_source` = \"mofdb\"** (MOFdb results):\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n\n**If the tool response indicates `by_source` = \"optimade\"** (OPTIMADE results):\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`).\n3. A download link for an archive (.tgz) if provided by the tool.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (infer from formula)\n(3) Atom count (if available; else **Not Provided**)\n(4) Space group (`Symbol(Number)` if possible; else **Not Provided**)\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (infer from provider URL)\n(9) ID (`id`)\nMissing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table.\n\n**If the tool response indicates `by_source` = \"openlam\"** (OpenLAM results):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided**\n (4) Download link (CIF/JSON, based on requested output)\n (5) Source database → always `\"OpenLAM\"`\n (6) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n\n**Otherwise** (BohriumPublic or other sources):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n",
+ "self_check": true,
+ "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## 0) ROUTING: WHICH TOOL TO CALL\nYou have access to multiple retrieval tools. Choose ONE based on the user intent:\n\n### A) BohriumPublic (fast structured filters)\nwhen the user asks for:\n- formula / elements / space group / atom count / predicted formation energy / band gap\n- and they do NOT require cross-provider search or complex boolean logic\n\n### B) OpenLAM (energy / time filters)\nwhen the user asks for:\n- OpenLAM specifically, OR upload/submission time filters, OR OpenLAM energy range filters\nLimits: OpenLAM does NOT support space group, band gap, or \"elements list\" filters.\n\n### C) OPTIMADE (cross-provider, flexible composition filters)\nwhen the user needs:\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n- cross-provider search (e.g., \"search in mp/cod/oqmd...\"), OR\n- flexible logical composition constraints, OR\n- structure-type family queries (anonymous formula like AB2C4), OR\n- 2D/1D/0D constraints (nperiodic_dimensions)\n\n### D) MOFdb (MOF-only, complex analytics)\nwhen the user asks for:\n- MOF-specific properties (surface area, pore metrics, adsorption/isotherms, heats), OR\n- advanced analysis requiring multi-table joins / ranking / statistics\n\n## 1) BOHRIUMPUBLIC PARAMETERS (fetch_bohrium_crystals)\n### FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_structures_from_db\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_structures_from_db\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_structures_from_db\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_structures_from_db\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_structures_from_db\n formula: \"SiO3\"\n match_mode: 0\n\n## 2) OPENLAM PARAMETERS (fetch_structures_from_db)\n### FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time (`min_submission_time`, `max_submission_time`)\n- **Result limit**: `n_results`\n- **Output formats**: `\"cif\"` or `\"json\"`\n\n### EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_structures_from_db\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_structures_from_db\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n## 3) MOFDB PARAMETERS (fetch_structures_from_db)\n### INPUT\n- **sql**: SQL query string (use CTEs, window functions, joins as needed)\n- **n_results**: controls SQL LIMIT (when applicable) and returned structures\n\n### EXAMPLE\n用户:统计各数据库的 MOF 数量\n→ Tool: fetch_structures_from_db\n sql: \"SELECT database, COUNT(*) AS count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n## 4) OPTIMADE PARAMETERS (fetch_structures_from_db)\n### MINIMUM SAFE OPTIMADE SYNTAX RULES (DO NOT VIOLATE)\n- Allowed operators ONLY: =, !=, <, <=, >, >=, AND, OR, NOT, HAS, HAS ALL, HAS ANY, IS KNOWN, IS UNKNOWN\n- All strings MUST be in double quotes: \"Fe\", \"SiO2\"\n- Do NOT use CONTAINS / LIKE / IN / regex / invented fields\n- To express \"only these elements\": use `elements HAS ALL ... AND nelements = N`\n\n### TOOL CHOICE\n- If user gives space group number → `fetch_structures_from_db(base_filter, spg_number, ...)`\n- If user gives band gap range → `fetch_structures_from_db(base_filter, min_bg, max_bg, ...)`\n- Else → `fetch_structures_from_db(filter, ...)`\n\n### EXAMPLES\n1) 用户:找空间群 225 的 MgO(rocksalt),返回 CIF\n → Tool: fetch_structures_from_db\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n as_format: \"cif\"\n\n2) 用户:找含 Al 且带隙 1–2 eV 的材料,返回 JSON\n → Tool: fetch_structures_from_db\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n"
+ },
+ {
+ "tool_id": "010-RUNDOETA-001",
+ "name": "run_doe_task",
+ "description": {
+ "What it does": "Run a Design of Experiments (DoE) task using supported algorithms.",
+ "When to use": "When you need experimental design.",
+ "Input": "Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).",
+ "Output": "DoE results.",
+ "Notes": "Limited to supported algorithms.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "使用支持的算法运行实验设计(DoE)任务。",
+ "使用场景": "当需要实验设计时使用。",
+ "输入": "算法选择(极值顶点、单纯形重心等)。",
+ "输出": "DOE 结果。",
+ "注意事项": "仅限于支持的算法。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "doe_agent",
+ "scenes": [
+ "DOE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://gvjj1410767.bohrium.tech:50001/sse",
+ "uat": "http://gvjj1410767.bohrium.tech:50002/sse",
+ "prod": "http://gvjj1410767.bohrium.tech:50003/sse"
+ }
+ },
+ {
+ "tool_id": "011-OPTIMIZE-001",
+ "name": "optimize_structure",
+ "description": {
+ "What it does": "Perform geometry optimization of a crystal or molecular structure using ML potential.",
+ "When to use": "When you need fast optimized structure without DFT.",
+ "Input": "Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.",
+ "Output": "Optimized structure file.",
+ "Notes": "ML-based; accuracy depends on potential domain.",
+ "Costs": "Low relative to DFT."
+ },
+ "description_cn": {
+ "工具简介": "使用机器学习势对晶体或分子结构进行几何优化。",
+ "使用场景": "当你需要快速获得优化后的结构,且不想进行耗时的 DFT 计算时使用",
+ "输入": "结构文件(CIF/POSCAR/ABACUS STRU/LAMMPS 数据);兼容的机器学习势文件。",
+ "输出": "优化后的结构文件。",
+ "注意事项": "基于机器学习;精度取决于所使用的势函数适用范围",
+ "成本": "相对于 DFT 成本低。"
+ },
+ "belonging_agent": "dpa_calculator_agent",
+ "scenes": [
+ "DPA",
+ "OPTIMIZE_STRUCTURE"
+ ],
+ "alternative_tools": [
+ "apex_optimize_structure",
+ "abacus_do_relax"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50001/mcp",
+ "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585",
+ "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23"
+ }
+ },
+ {
+ "tool_id": "011-RUNMOLEC-002",
+ "name": "run_molecular_dynamics",
+ "description": {
+ "What it does": "Run molecular dynamics simulations using ML potential.",
+ "When to use": "When you need fast MD without DFT.",
+ "Input": "Structure file; ML potential; ensemble settings.",
+ "Output": "MD trajectories and thermodynamics.",
+ "Notes": "NVE/NVT/NPT only; no classical force fields or DFT.",
+ "Costs": "Medium; scales with system size and steps."
+ },
+ "description_cn": {
+ "工具简介": "使用机器学习势运行分子动力学模拟。",
+ "使用场景": "当你需要比密度泛函理论(DFT)更快的速度,但又不满足于传统力场的精度时。",
+ "输入": "结构文件;机器学习势;系综设置。",
+ "输出": "分子动力学轨迹和热力学性质。",
+ "注意事项": "仅支持 NVE/NVT/NPT;不支持经典力场或 DFT。",
+ "成本": "中等;计算量随系统规模(原子数)和模拟步数增加。"
+ },
+ "belonging_agent": "dpa_calculator_agent",
+ "scenes": [
+ "DPA",
+ "MOLECULAR_DYNAMICS"
+ ],
+ "alternative_tools": [
+ "abacus_run_md"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50001/mcp",
+ "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585",
+ "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23"
+ }
+ },
+ {
+ "tool_id": "011-CALCULAT-003",
+ "name": "calculate_phonon",
+ "description": {
+ "What it does": "Compute phonon properties using ML potential.",
+ "When to use": "When you need phonon dispersion and thermal properties.",
+ "Input": "Optimized structure; ML potential.",
+ "Output": "Phonon dispersion, DOS, thermal properties.",
+ "Notes": "Requires finite-displacement supercells.",
+ "Costs": "High; scales with supercell size."
+ },
+ "description_cn": {
+ "工具简介": "使用机器学习势计算声子性质。",
+ "使用场景": "当需要声子色散和热性质时使用。",
+ "输入": "优化后的结构;机器学习势。",
+ "输出": "声子色散、态密度、热性质。",
+ "注意事项": "需要有限位移超胞。",
+ "成本": "高;计算量随超胞规模的增大而显著增加。"
+ },
+ "belonging_agent": "dpa_calculator_agent",
+ "scenes": [
+ "DPA",
+ "PHONON"
+ ],
+ "alternative_tools": [
+ "abacus_phonon_dispersion",
+ "apex_calculate_phonon"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50001/mcp",
+ "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585",
+ "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23"
+ }
+ },
+ {
+ "tool_id": "011-CALCULAT-004",
+ "name": "calculate_elastic_constants",
+ "description": {
+ "What it does": "Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.",
+ "When to use": "You have a relaxed structure and want fast elastic properties without running DFT.",
+ "Input": "A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.",
+ "Output": "Elastic tensor (Cij), bulk/shear/Young's modulus, Poisson ratio (units reported in the result payload).",
+ "Notes": "Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.",
+ "Costs": "Medium; scales with system size and deformation settings."
+ },
+ "description_cn": {
+ "工具简介": "使用机器学习原子间势计算弹性常数(Cij)和衍生的力学性质。",
+ "使用场景": "当你已拥有优化好的结构(Relaxed Structure),并希望跳过 DFT 计算,快速获取弹性性质时。",
+ "输入": "结构文件(例如 CIF/POSCAR/ABACUS STRU/LAMMPS 数据)、兼容的机器学习势。",
+ "输出": "弹性张量(Cij)、体积/剪切/杨氏模量、泊松比。",
+ "注意事项": "非 DFT 计算;其精度高度依赖于机器学习势的拟合水平; 如果目标结构超出了机器学习势的训练集分布,结果可能不可靠。",
+ "成本": "中等;计算量随原子数规模和形变采样(Deformation settings)的复杂程度增加。"
+ },
+ "belonging_agent": "dpa_calculator_agent",
+ "scenes": [
+ "DPA",
+ "ELASTIC_CONSTANT"
+ ],
+ "alternative_tools": [
+ "abacus_cal_elastic",
+ "apex_calculate_elastic"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50001/mcp",
+ "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585",
+ "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23"
+ }
+ },
+ {
+ "tool_id": "011-RUNNEB-005",
+ "name": "run_neb",
+ "description": {
+ "What it does": "Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.",
+ "When to use": "You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.",
+ "Input": "Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.",
+ "Output": "Optimized NEB path, energies along images, estimated barrier and reaction coordinate.",
+ "Notes": "Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.",
+ "Costs": "High relative to single relax; cost scales with number of images and system size."
+ },
+ "description_cn": {
+ "工具简介": "使用机器学习势运行微动弹性能带(NEB)计算以估计最小能量路径和能垒。",
+ "使用场景": "当你已知反应的初态和末态(以及可选的初始猜测路径),且需要快速估算反应能垒时。",
+ "输入": "初始和最终结构文件;可选的中间态构型或插值点数;兼容的机器学习势。",
+ "输出": "优化的 NEB 路径、沿图像的能量、估计的能垒和反应坐标。",
+ "注意事项": "默认精度不直接等同于 DFT 水准。如果中间映像畸变过大,或势函数无法准确描述该化学环境,计算可能会失败。",
+ "成本": "相对于单次弛豫成本高;计算量随映像数量和系统规模增加。"
+ },
+ "belonging_agent": "dpa_calculator_agent",
+ "scenes": [
+ "DPA",
+ "Nudged_Elastic_Band"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50001/mcp",
+ "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585",
+ "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23"
+ }
+ },
+ {
+ "tool_id": "011-FINETUNE-006",
+ "name": "finetune_dpa_model",
+ "description": {
+ "What it does": "Fine-tune DPA pretrained models using DFT-labeled data.",
+ "When to use": "When you need to adapt DPA potential to specific systems.",
+ "Input": "DFT-labeled data (energies, forces, stresses).",
+ "Output": "Fine-tuned DPA model.",
+ "Notes": "Cannot run calculations with the model.",
+ "Costs": "High."
+ },
+ "description_cn": {
+ "工具简介": "使用 DFT 标记的数据微调 DPA 预训练模型。",
+ "使用场景": "当需要将 DPA 势适应特定体系时使用。",
+ "输入": "DFT 标记的数据(能量、力、应力)。",
+ "输出": "微调后的 DPA 模型。",
+ "注意事项": "该功能仅负责“训练”,不能直接运行具体的模拟计算(如 MD 或 NEB)。",
+ "成本": "高。"
+ },
+ "belonging_agent": "finetune_dpa_agent",
+ "scenes": [
+ "DPA"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input.",
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50003/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50003/sse",
+ "prod": "https://dpafinetune-uuid1761721868.appspace.bohrium.com/sse?token=336ee47a05e5407899fdeb50c9e806d0"
+ }
+ },
+ {
+ "tool_id": "015-GETELECT-001",
+ "name": "get_electron_microscope_recognize",
+ "description": {
+ "What it does": "Analyze electron microscope images for particles and morphology.",
+ "When to use": "When you have TEM/SEM images to analyze.",
+ "Input": "Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).",
+ "Output": "Detected particles, morphology, geometric properties.",
+ "Notes": "Only support .tif, .tiff, .png, .jpeg, .jpg format files.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "分析电镜图像中的颗粒与形貌。",
+ "使用场景": "有待分析的 TEM/SEM 图像时使用。",
+ "输入": "电镜图像(.tif、.tiff、.png、.jpeg、.jpg)。",
+ "输出": "检测到的颗粒、形貌及几何性质。",
+ "注意事项": "仅支持 .tif、.tiff、.png、.jpeg、.jpg 格式。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "electron_microscope_agent",
+ "scenes": [
+ "Electron_Microscope"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50002/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50002/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50002/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEAPARAM-001",
+ "name": "HEA_params_calculator",
+ "description": {
+ "What it does": "Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.",
+ "When to use": "When you need HEA thermodynamic parameters.",
+ "Input": "HEA chemical formula.",
+ "Output": "VEC, delta, Hmix, Smix, Lambda.",
+ "Notes": "Specific to HEA.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从成分计算高熵合金参数,如 VEC、delta、Hmix、Smix、Lambda。",
+ "使用场景": "当需要高熵合金热力学参数时使用。",
+ "输入": "高熵合金化学式。",
+ "输出": "VEC、delta、Hmix、Smix、Lambda。",
+ "注意事项": "特定于 HEA。",
+ "成本": "低。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEAPREDI-002",
+ "name": "HEA_predictor",
+ "description": {
+ "What it does": "Predict if HEA composition forms solid-solution and its crystal structure.",
+ "When to use": "When you need phase prediction for HEA.",
+ "Input": "HEA composition.",
+ "Output": "Solid-solution formation and crystal structure.",
+ "Notes": "Uses pre-trained ML model.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "预测高熵合金成分是否形成固溶体及其晶体结构。",
+ "使用场景": "当需要高熵合金的相预测时使用。",
+ "输入": "高熵合金成分。",
+ "输出": "固溶体形成和晶体结构。",
+ "注意事项": "使用预训练的机器学习模型。",
+ "成本": "低。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEACOMPS-003",
+ "name": "HEA_comps_generator",
+ "description": {
+ "What it does": "Generate HEA compositions by adjusting molar ratios of one element.",
+ "When to use": "For HEA composition design and optimization.",
+ "Input": "Initial HEA composition.",
+ "Output": "Series of modified compositions.",
+ "Notes": "Adjusts one element at a time.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过调节单一元素的摩尔比来生成一系列高熵合金成分。",
+ "使用场景": "用于高熵合金成分设计和优化。",
+ "输入": "初始高熵合金成分。",
+ "输出": "一系列修改后的成分。",
+ "注意事项": "一次调整一个元素。",
+ "成本": "低。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEADATAE-004",
+ "name": "HEA_data_extract",
+ "description": {
+ "What it does": "Extract HEA data from PDF literature.",
+ "When to use": "When you need HEA data from papers.",
+ "Input": "PDF literature.",
+ "Output": "Compositions, processing, microstructures, properties.",
+ "Notes": "PDF format only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从 PDF 文献中提取高熵合金数据。",
+ "使用场景": "当需要从论文中获取高熵合金数据时使用。",
+ "输入": "PDF 文献。",
+ "输出": "成分、合成、微观结构、性质。",
+ "注意事项": "仅支持 PDF 格式。",
+ "成本": "低。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEAPAPER-005",
+ "name": "HEA_paper_search",
+ "description": {
+ "What it does": "Search and download HEA papers from arXiv.",
+ "When to use": "When you need HEA literature.",
+ "Input": "Title, author, or keywords.",
+ "Output": "Search results and downloaded papers.",
+ "Notes": "arXiv only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "从 arXiv 搜索并下载高熵合金论文。",
+ "使用场景": "当需要高熵合金文献时使用。",
+ "输入": "标题、作者或关键词。",
+ "输出": "搜索结果和下载的论文。",
+ "注意事项": "仅支持 arXiv。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [
+ "query_heakb_literature",
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-HEABIPHA-006",
+ "name": "HEA_bi_phase_Calc",
+ "description": {
+ "What it does": "Calculate formation energies and phase diagrams for binary pairs in HEA.",
+ "When to use": "When you need binary phase info for HEA.",
+ "Input": "HEA chemical system.",
+ "Output": "Formation energies and convex hulls.",
+ "Notes": "Binary pairs only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "计算高熵合金 中二元对的形成能和相图。",
+ "使用场景": "当需要高熵合金的二元相信息时使用。",
+ "输入": "高熵合金化学体系。",
+ "输出": "形成能和凸包。",
+ "注意事项": "仅支持二元对。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "HEA_assistant_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "uat": "http://yqwl1369135.bohrium.tech:50001/sse",
+ "prod": "http://yqwl1369135.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "016-GENERATE-007",
+ "name": "generate_binary_phase_diagram",
+ "description": {
+ "What it does": "Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.",
+ "When to use": "You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.",
+ "Input": "Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.",
+ "Output": "Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.",
+ "Notes": "If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.",
+ "Costs": "Medium; faster with cached datasets."
+ },
+ "description_cn": {
+ "工具简介": "基于后端工作流中可用的热力学/能量数据,为指定的 A–B 体系生成二元相图。",
+ "使用场景": "当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。",
+ "输入": "元素对(A, B)和可选的温度/压力范围;可访问的形成能/热力学数据集或计算路径。",
+ "输出": "相图原始数据(稳定相、结线/共轭线 (Tie-lines)、成分范围)以及可直接绘图的展示结果。",
+ "注意事项": "如果没有可用的数据集/计算路径,工具将返回错误; 结果依赖于数据覆盖范围和模型假设。",
+ "成本": "中等;使用缓存数据集更快。"
+ },
+ "belonging_agent": "hea_calculator_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@fewk1368842.bohrium.tech:50001/sse",
+ "uat": "http://root@fewk1368842.bohrium.tech:50001/sse",
+ "prod": "https://hea-calculator-uuid1754481039.app-space.dplink.cc/sse?token=37b90649f12c4b2e90db6bd9f2b3e9da"
+ }
+ },
+ {
+ "tool_id": "016-QUERYHEA-008",
+ "name": "query_heakb_literature",
+ "description": {
+ "What it does": "Query literature knowledge base for HEA(High-entropy alloys) research with natural language.",
+ "When to use": "When you need in-depth literature analysis on HEA topics.",
+ "Input": "Natural language questions about HEA.",
+ "Output": "Literature summaries from vector similarity search.",
+ "Notes": "Topics limited to HEA.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "使用自然语言查询高熵合金(HEA)研究的文献知识库。",
+ "使用场景": "当您需要对高熵合金相关主题进行深入的文献分析时。",
+ "输入": "关于高熵合金的自然语言问题。",
+ "输出": "通过向量相似性搜索返回的文献摘要。",
+ "注意事项": "主题仅限于高熵合金。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "HEAkb_agent",
+ "scenes": [
+ "HIGH_ENTROPY_ALLOY"
+ ],
+ "alternative_tools": [
+ "HEA_paper_search",
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n",
+ "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n",
+ "self_check": false,
+ "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n**Parameters:**\n- question (str, required): Natural language query about HEA(High-entropy alloys) research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询高熵合金中的相变机制:\n → Tool: query_heakb_literature\n question: '高熵合金中的相变诱导塑性(TRIP)机制是什么?这种机制如何影响合金的力学性能?'\n top_k: 5\n\n2) 查询FCC到HCP相变的条件:\n → Tool: query_heakb_literature\n question: '高熵合金中的FCC到HCP相变的条件和影响因素是什么?'\n top_k: 8\n\n3) 查询低温下的力学性能:\n → Tool: query_heakb_literature\n question: '高熵合金在低温下的力学性能如何?影响低温性能的主要因素有哪些?'\n top_k: 10\n\n4) 查询腐蚀行为和防护机制:\n → Tool: query_heakb_literature\n question: '高熵合金的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n5) 查询微观结构特征:\n → Tool: query_heakb_literature\n question: '高熵合金的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 6\n\n6) 查询制备方法:\n → Tool: query_heakb_literature\n question: '高熵合金的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 7\n",
+ "server": {
+ "test": "http://lmnm1410647.bohrium.tech:50001/sse",
+ "uat": "http://lmnm1410647.bohrium.tech:50001/sse",
+ "prod": "http://fwne1412142.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "019-EXTRACTM-001",
+ "name": "extract_material_data_from_pdf",
+ "description": {
+ "What it does": "Read and extract material data and methodologies from PDF documents.",
+ "When to use": "When you need to extract info from PDF literature.",
+ "Input": "PDF file.",
+ "Output": "Extracted material info and methodologies.",
+ "Notes": "Cannot retrieve from internet; local PDFs only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从 PDF 文档中读取并提取材料数据和方法。",
+ "使用场景": "当需要从 PDF 文献中提取信息时使用。",
+ "输入": "PDF 文件。",
+ "输出": "提取的材料信息和方法。",
+ "注意事项": "无法从互联网检索;仅支持本地 PDF 文件。",
+ "成本": "低。"
+ },
+ "belonging_agent": "document_parser_agent",
+ "scenes": [
+ "LITERATURE",
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [
+ "file_parse",
+ "extract_material_data_from_webpage"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50005/mcp",
+ "uat": "http://pfmx1355864.bohrium.tech:50005/mcp",
+ "prod": "http://pfmx1355864.bohrium.tech:50001/mcp"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "019-SEARCH-P-002",
+ "name": "search-papers-enhanced",
+ "description": {
+ "What it does": "Search scientific papers.",
+ "When to use": "Find research on topics.",
+ "Input": "Topic keywords.",
+ "Output": "Literature summary, abstract information of relevant papers, web link of the papers",
+ "Notes": "Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "检索科学文献。",
+ "使用场景": "按主题查找相关研究。",
+ "输入": "主题关键词。",
+ "输出": "文献摘要、相关论文摘要信息及论文链接。",
+ "注意事项": "仅进行文献检索;不下载学位论文等文件(.pdf、.doc 等)。",
+ "成本": "低。"
+ },
+ "belonging_agent": "science_navigator_agent",
+ "scenes": [
+ "LITERATURE"
+ ],
+ "alternative_tools": [
+ "web-search"
+ ],
+ "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools return a list of papers with metadata. Scan and organize them with as broad coverage as possible.\n\n## CONTENT STRUCTURE (two distinct parts — no confusion)\n- **Executive Summary (only the first 1–3 sentences):** Must include exactly: (1) professional definition of key concepts, (2) key recent breakthroughs, (3) main unsolved challenges. Nothing else. Keep this block brief.\n- **Deep Analysis (everything after):** Exhaustive, extended, fully elaborated. Use an internal hierarchical outline (at least 3 major sections; do not show the outline to the user). Guide the full body by this outline so the rest of the output is long, comprehensive, and structured.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, enlightening. Clear, layered, first-principles; each claim must be supported by facts, numerical data, or methodological details from the papers.\n- Include comparisons, contradictions, or confirmations between studies where relevant. For open-ended questions, cover: mechanistic insights, quantitative/semi-quantitative results (materials, metrics, space groups), and inconsistencies or gaps. Emphasize technical details (instruments, software, parameters) only when necessary.\n- Weigh relevance of search results to user needs; state relevance or irrelevance when answering. If equations or formulas appear, give them in LaTeX and explain every variable.\n\n## SECTION JOINTS:\nUse flowing prose. For transitions between sections, use conjunctions (e.g. \"There are N aspects. Firstly, ...; secondly, ...; ...\"). Output in plain text. Reserve bullets or numbering only when explicitly needed.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on a specific topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools return a list of papers with metadata. Scan and organize them with as broad coverage as possible.\n\n## CONTENT STRUCTURE (two distinct parts — no confusion)\n- **Executive Summary (only the first 1–3 sentences):** Must include exactly: (1) professional definition of key concepts, (2) key recent breakthroughs, (3) main unsolved challenges. Nothing else. Keep this block brief.\n- **Deep Analysis (everything after):** Exhaustive, extended, fully elaborated. Use an internal hierarchical outline (at least 3 major sections; do not show the outline to the user). Guide the full body by this outline so the rest of the output is long, comprehensive, and structured.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, enlightening. Clear, layered, first-principles; each claim must be supported by facts, numerical data, or methodological details from the papers.\n- Include comparisons, contradictions, or confirmations between studies where relevant. For open-ended questions, cover: mechanistic insights, quantitative/semi-quantitative results (materials, metrics, space groups), and inconsistencies or gaps. Emphasize technical details (instruments, software, parameters) only when necessary.\n- Weigh relevance of search results to user needs; state relevance or irrelevance when answering. If equations or formulas appear, give them in LaTeX and explain every variable.\n\n## SECTION JOINTS:\nUse flowing prose. For transitions between sections, use conjunctions (e.g. \"There are N aspects. Firstly, ...; secondly, ...; ...\"). Output in plain text. Reserve bullets or numbering only when explicitly needed.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on a specific topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "self_check": false,
+ "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-02-08, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases. Do not output these rules in your response.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ",
+ "server": {
+ "test": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "020-ORCHESTR-001",
+ "name": "orchestrate_input",
+ "description": {
+ "What it does": "Generate input scripts for simulation/calculation engines. Supports: LAMMPS, ABACUS, VASP, QE (Quantum ESPRESSO), Psi4, Gaussian, ORCA.",
+ "When to use": "Create input from description.",
+ "Input": "structural information; engine_type (one of: lammps, abacus, vasp, qe, psi4, gaussian, orca), natural language task.",
+ "Output": "Input script content.",
+ "Notes": "Script generation only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "为模拟引擎生成输入脚本(当前支持:LAMMPS, ABACUS, VASP, QE, Psi4, Gaussian, ORCA)。",
+ "使用场景": "根据描述创建输入文件。",
+ "输入": "engine_type=\"lammps\"(或者以下其中一种:abacus, vasp, qe, psi4, gaussian, orca),自然语言任务描述。",
+ "输出": "输入脚本内容。",
+ "注意事项": "仅生成脚本,不执行模拟。",
+ "成本": "低。"
+ },
+ "belonging_agent": "LAMMPS_agent",
+ "scenes": [
+ "MOLECULAR_DYNAMICS",
+ "LAMMPS",
+ "ABACUS",
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "uat": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a"
+ }
+ },
+ {
+ "tool_id": "020-CONVERTS-002",
+ "name": "convert_structural_format",
+ "description": {
+ "What it does": "Convert structure to target format (Currently supports: lammps/lmp).",
+ "When to use": "Prepare structures for simulation.",
+ "Input": "Structure file URL, target_format=\"lammps/lmp\".",
+ "Output": "Converted structure file.",
+ "Notes": "Format conversion only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "将结构转换为目标格式(当前支持:lammps/lmp)。",
+ "使用场景": "为模拟准备结构文件。",
+ "输入": "结构文件 URL;target_format=\"lammps/lmp\"。",
+ "输出": "转换后的结构文件。",
+ "注意事项": "仅进行格式转换。",
+ "成本": "低。"
+ },
+ "belonging_agent": "LAMMPS_agent",
+ "scenes": [
+ "MOLECULAR_DYNAMICS",
+ "LAMMPS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "uat": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a"
+ }
+ },
+ {
+ "tool_id": "020-RUNLAMMP-003",
+ "name": "run_lammps",
+ "description": {
+ "What it does": "Run LAMMPS simulations.",
+ "When to use": "Perform MD or minimization.",
+ "Input": "LAMMPS data file.",
+ "Output": "Simulation results.",
+ "Notes": "Requires LAMMPS format.",
+ "Costs": "High (simulation time)."
+ },
+ "description_cn": {
+ "工具简介": "运行 LAMMPS 分子动力学模拟。",
+ "使用场景": "执行分子动力学或能量最小化。",
+ "输入": "LAMMPS 数据文件。",
+ "输出": "模拟结果。",
+ "注意事项": "输入须为 LAMMPS 格式。",
+ "成本": "高(取决于模拟时长)。"
+ },
+ "belonging_agent": "LAMMPS_agent",
+ "scenes": [
+ "MOLECULAR_DYNAMICS",
+ "LAMMPS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "uat": "http://qpus1389933.bohrium.tech:50004/mcp",
+ "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a"
+ }
+ },
+ {
+ "tool_id": "021-NMRSEARC-001",
+ "name": "NMR_search_tool",
+ "description": {
+ "What it does": "Search a molecular database by NMR spectroscopic features to retrieve candidate structures.",
+ "When to use": "You have NMR peak/shift patterns and want likely matching molecules.",
+ "Input": "NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.",
+ "Output": "Ranked candidate molecules/structures with match scores and key evidence fields.",
+ "Notes": "Not a definitive identification; results depend on database coverage and feature quality.",
+ "Costs": "Medium; tighter tolerances increase runtime and reduce recall."
+ },
+ "description_cn": {
+ "工具简介": "根据核磁共振谱图特征在分子数据库中检索候选结构。",
+ "使用场景": "已有 NMR 峰/化学位移等谱图信息,需要匹配的可能分子。",
+ "输入": "符合工具规范的 NMR 特征(如化学位移、多重度、耦合、核类型等);可选容差设置。",
+ "输出": "带匹配分数和关键证据的候选分子/结构排序列表。",
+ "注意事项": "非唯一鉴定;结果依赖数据库覆盖度和特征质量。",
+ "成本": "中等;容差越严,耗时增加、召回率降低。"
+ },
+ "belonging_agent": "nmr_agent",
+ "scenes": [
+ "NMR"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://aubn1408899.bohrium.tech:50001/sse",
+ "uat": "http://aubn1408899.bohrium.tech:50001/sse",
+ "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6"
+ }
+ },
+ {
+ "tool_id": "021-NMRPREDI-002",
+ "name": "NMR_predict_tool",
+ "description": {
+ "What it does": "Predict NMR spectroscopic properties for molecular structures.",
+ "When to use": "When you need simulated NMR chemical shifts.",
+ "Input": "SMILES strings.",
+ "Output": "Predicted NMR shifts and similarity scores.",
+ "Notes": "1H and 13C only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "预测分子结构的核磁共振谱图性质。",
+ "使用场景": "需要模拟的 NMR 化学位移时使用。",
+ "输入": "SMILES 字符串。",
+ "输出": "预测的 NMR 化学位移及相似度分数。",
+ "注意事项": "仅支持 1H 与 13C。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "nmr_agent",
+ "scenes": [
+ "NMR"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://aubn1408899.bohrium.tech:50001/sse",
+ "uat": "http://aubn1408899.bohrium.tech:50001/sse",
+ "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6"
+ }
+ },
+ {
+ "tool_id": "021-NMRREVER-003",
+ "name": "NMR_reverse_predict_tool",
+ "description": {
+ "What it does": "Generate candidate molecular structures from NMR spectroscopic data.",
+ "When to use": "When you have NMR data and need structure candidates.",
+ "Input": "NMR spectroscopic data.",
+ "Output": "Candidate molecular structures.",
+ "Notes": "Based on NMR features.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "从核磁共振谱图数据生成候选分子结构。",
+ "使用场景": "已有 NMR 数据,需要结构候选时使用。",
+ "输入": "核磁共振谱图数据。",
+ "输出": "候选分子结构。",
+ "注意事项": "基于 NMR 特征生成。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "nmr_agent",
+ "scenes": [
+ "NMR"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://aubn1408899.bohrium.tech:50001/sse",
+ "uat": "http://aubn1408899.bohrium.tech:50001/sse",
+ "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6"
+ }
+ },
+ {
+ "tool_id": "023-APEXOPTI-001",
+ "name": "apex_optimize_structure",
+ "description": {
+ "What it does": "Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.",
+ "When to use": "When you need optimized crystal structure, especially for alloy systems.",
+ "Input": "Structure file.",
+ "Output": "Optimized structure.",
+ "Notes": "DFT-based.",
+ "Costs": "DFT calculation cost."
+ },
+ "description_cn": {
+ "工具简介": "执行晶体的几何优化,弛豫原子位置并可选择弛豫原胞。",
+ "使用场景": "当需要优化的晶体结构时使用,特别适用于合金体系。",
+ "输入": "结构文件。",
+ "输出": "优化后的结构。",
+ "注意事项": "基于 DFT。",
+ "成本": "涉及 DFT 计算成本。"
+ },
+ "belonging_agent": "apex_agent",
+ "scenes": [
+ "OPTIMIZE_STRUCTURE",
+ "APEX"
+ ],
+ "alternative_tools": [
+ "abacus_do_relax",
+ "optimize_structure"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "uat": "http://rtvq1394775.bohrium.tech:50001/mcp",
+ "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac"
+ }
+ },
+ {
+ "tool_id": "024-GETDATAB-001",
+ "name": "get_database_info",
+ "description": {
+ "What it does": "Fetch complete schema and descriptive information for the perovskite solar cell database.",
+ "When to use": "Before querying the perovskite database.",
+ "Input": "None.",
+ "Output": "Database schema and descriptions.",
+ "Notes": "Specific to perovskite database.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "获取钙钛矿太阳能电池数据库的完整模式和描述信息。",
+ "使用场景": "在查询钙钛矿数据库之前使用。",
+ "输入": "无。",
+ "输出": "数据库模式和描述。",
+ "注意事项": "特定于钙钛矿数据库。",
+ "成本": "低。"
+ },
+ "belonging_agent": "perovskite_research_agent",
+ "scenes": [
+ "PEROVSKITE_RESEARCH"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "uat": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1"
+ }
+ },
+ {
+ "tool_id": "024-SQLDATAB-002",
+ "name": "sql_database_mcp",
+ "description": {
+ "What it does": "Execute SQL queries against the perovskite solar cell database and return first k rows.",
+ "When to use": "When querying perovskite database after getting schema.",
+ "Input": "SQL query; call get_database_info first.",
+ "Output": "First k rows of query results.",
+ "Notes": "Limited to first k rows.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "对钙钛矿太阳能电池数据库执行 SQL 查询并返回前 k 行。",
+ "使用场景": "获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。",
+ "输入": "SQL 查询语句。",
+ "输出": "查询结果的前 k 行。",
+ "注意事项": "仅限于前 k 行。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "perovskite_research_agent",
+ "scenes": [
+ "PEROVSKITE_RESEARCH"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "uat": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1"
+ }
+ },
+ {
+ "tool_id": "024-UNIMOLPR-003",
+ "name": "Unimol_Predict_Perovskite_Additive",
+ "description": {
+ "What it does": "Predict the additive effect on perovskite PCE with a list of additive molecules.",
+ "When to use": "When you need PCE change prediction for additives.",
+ "Input": "List of additive molecules.",
+ "Output": "Predicted PCE changes.",
+ "Notes": "Specific to perovskite additives.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "使用添加剂分子列表预测添加剂对钙钛矿 PCE 的影响。",
+ "使用场景": "当需要添加剂的 PCE 变化预测时使用。",
+ "输入": "添加剂分子列表。",
+ "输出": "预测的 PCE 变化。",
+ "注意事项": "特定于钙钛矿添加剂。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "perovskite_research_agent",
+ "scenes": [
+ "PEROVSKITE_RESEARCH"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "uat": "http://cbqz1338812.bohrium.tech:50004/mcp",
+ "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1"
+ }
+ },
+ {
+ "tool_id": "026-PHYSICAL-001",
+ "name": "physical_adsorption_echart_data",
+ "description": {
+ "What it does": "Analyze physical adsorption instrument reports.",
+ "When to use": "When you have gas adsorption data.",
+ "Input": "Instrument reports.",
+ "Output": "Analyzed data.",
+ "Notes": "Specific to physical adsorption.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "分析物理吸附仪器报告。",
+ "使用场景": "有气体吸附数据需要分析时使用。",
+ "输入": "仪器报告。",
+ "输出": "分析后的数据。",
+ "注意事项": "仅针对物理吸附。",
+ "成本": "低。"
+ },
+ "belonging_agent": "physical_adsorption_agent",
+ "scenes": [
+ "PHYSICAL_ADSORPTION"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50003/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50003/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50003/sse"
+ }
+ },
+ {
+ "tool_id": "027-RUNPILOT-001",
+ "name": "run_piloteye",
+ "description": {
+ "What it does": "Perform property calculations for lithium-ion battery electrolytes using MD and DFT.",
+ "When to use": "When you need electrolyte property calculations.",
+ "Input": "Params JSON with formulation.",
+ "Output": "Target properties from modeling pipeline.",
+ "Notes": "Built-in molecule library; complete workflow.",
+ "Costs": "High."
+ },
+ "description_cn": {
+ "工具简介": "使用分子动力学和密度泛函理论对锂离子电池电解质进行性质计算。",
+ "使用场景": "当你需要评估或预测电解液体系的性能指标时。",
+ "输入": "包含“配方信息(Formulation)”的 JSON 格式参数文件。",
+ "输出": "建模流程的目标性质。",
+ "注意事项": "仅限使用内置分子库中的物料。该模块为固定工作流,自定义灵活度受限。",
+ "成本": "高。"
+ },
+ "belonging_agent": "piloteye_electro_agent",
+ "scenes": [
+ "PILOTEYE_ELECTRO"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://nlig1368433.bohrium.tech:50002/sse",
+ "uat": "http://nlig1368433.bohrium.tech:50003/sse",
+ "prod": "http://nlig1368433.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "028-GETTARGE-001",
+ "name": "get_target_info",
+ "description": {
+ "What it does": "Get target information from configuration settings for Uni-ELF inference system.",
+ "When to use": "When you need configuration info for Uni-ELF.",
+ "Input": "None.",
+ "Output": "Comprehensive configuration information and available target model mappings.",
+ "Notes": "Specific to Uni-ELF system.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从 Uni-ELF 推理系统的配置设置中获取目标信息。",
+ "使用场景": "当需要 Uni-ELF 的配置信息时使用。",
+ "输入": "无。",
+ "输出": "全面的配置信息和可用的目标模型映射。",
+ "注意事项": "特定于 Uni-ELF 系统。",
+ "成本": "低。"
+ },
+ "belonging_agent": "unielf_agent",
+ "scenes": [
+ "POLYMER"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://efpl1193834.bohrium.tech:50001/sse",
+ "uat": "http://efpl1193834.bohrium.tech:50002/sse",
+ "prod": null
+ }
+ },
+ {
+ "tool_id": "028-UNIELFIN-002",
+ "name": "unielf_inference",
+ "description": {
+ "What it does": "Run Uni-ELF inference for formulation inputs to predict properties.",
+ "When to use": "When you need property prediction for formulations.",
+ "Input": "Components and ratios for formulations.",
+ "Output": "Predicted properties.",
+ "Notes": "Supports mixtures and pseudo-formulations.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "对配方输入运行 Uni-ELF 推理以预测性质。",
+ "使用场景": "当需要配方的性质预测时使用。",
+ "输入": "配方的组分和比例。",
+ "输出": "预测的性质。",
+ "注意事项": "支持混合物和伪配方。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "unielf_agent",
+ "scenes": [
+ "POLYMER"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "Summarize the Uni-ELF inference results based on the output:\n1. Report the url to the full results CSV file (`result_csv`).\n2. List the top 10 formulations from `top_10_results_dict`. For each, display the `formulation_id`, the composition (combine `smiles_i` and `ratio_i`), and the predicted property value (key ending in `_pred`).\n3. Highlight the best performing formulation.\n",
+ "summary_cn": "Summarize the Uni-ELF inference results based on the output:\n1. Report the url to the full results CSV file (`result_csv`).\n2. List the top 10 formulations from `top_10_results_dict`. For each, display the `formulation_id`, the composition (combine `smiles_i` and `ratio_i`), and the predicted property value (key ending in `_pred`).\n3. Highlight the best performing formulation.\n",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://efpl1193834.bohrium.tech:50001/sse",
+ "uat": "http://efpl1193834.bohrium.tech:50002/sse",
+ "prod": null
+ }
+ },
+ {
+ "tool_id": "028-QUERYPOL-003",
+ "name": "query_polymerkb_literature",
+ "description": {
+ "What it does": "Query literature knowledge base for polymer research with natural language.",
+ "When to use": "When you need in-depth literature analysis on polymer topics.",
+ "Input": "Natural language questions about polymer.",
+ "Output": "Literature summaries from vector similarity search.",
+ "Notes": "Topics limited to polymers.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "使用自然语言查询聚合物研究的文献知识库。",
+ "使用场景": "当您需要对聚合物相关主题进行深入的文献分析时。",
+ "输入": "关于聚合物的自然语言问题。",
+ "输出": "通过向量相似性搜索返回的文献摘要。",
+ "注意事项": "主题仅限于聚合物。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "POLYMERkb_agent",
+ "scenes": [
+ "POLYMER"
+ ],
+ "alternative_tools": [
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, glass_transition_temperature, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *T_g*, *E*, *T*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., \"epoxy resins show tensile_strength values ranging from 1.2 to 1130 MPa [n] (DOI: 10.xxx), with most values between 20-60 MPa [m] (DOI: 10.yyy)\")\n - **Use database entries for statistical analysis**: Group by polymer_type, calculate property ranges, identify trends, create property distributions\n - **Example integration**: \"While detailed studies [1] show that SPAEK/PLA membranes achieve 0.129 S/cm proton conductivity, database entries reveal that epoxy resins typically exhibit tensile_strength in the range of 20-60 MPa [2-10] (DOIs: 10.xxx, 10.yyy, ...), suggesting different property profiles for different polymer classes\"\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by polymer_type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n",
+ "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, glass_transition_temperature, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *T_g*, *E*, *T*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., \"epoxy resins show tensile_strength values ranging from 1.2 to 1130 MPa [n] (DOI: 10.xxx), with most values between 20-60 MPa [m] (DOI: 10.yyy)\")\n - **Use database entries for statistical analysis**: Group by polymer_type, calculate property ranges, identify trends, create property distributions\n - **Example integration**: \"While detailed studies [1] show that SPAEK/PLA membranes achieve 0.129 S/cm proton conductivity, database entries reveal that epoxy resins typically exhibit tensile_strength in the range of 20-60 MPa [2-10] (DOIs: 10.xxx, 10.yyy, ...), suggesting different property profiles for different polymer classes\"\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by polymer_type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n",
+ "self_check": false,
+ "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_polymerkb_literature(query_description)\n\n=== KNOWLEDGE BASE COVERAGE ===\nThe knowledge base contains:\n• Structured database with polymer properties and paper metadata\n• Multiple tables including:\n - Polymer properties: polymer names, types, compositions, properties, DOI\n - Paper metadata: titles, abstracts, authors, publication dates, journal info, DOI\n - Paper full text: complete paper text and supplementary information\n - Monomer information: monomer abbreviations, full names, SMILES, notes\n• Topics covering:\n - Polymer types and compositions\n - Material properties (glass transition temperature, mechanical properties, etc.)\n - Monomer structures and synthesis\n - Processing methods and conditions\n - Structure-property relationships\n - Applications and performance\n\n**Examples:**\n1) 查询特定类型的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找玻璃化转变温度低于400°C的聚酰亚胺相关论文'\n\n2) 查询特定单体:\n → Tool: query_polymerkb_literature\n query_description: '查找包含PMDA单体的聚合物相关论文'\n\n3) 查询特定属性的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找发表在一区期刊上的聚酰亚胺论文'\n",
+ "server": {
+ "test": "http://lmnm1410647.bohrium.tech:50003/sse",
+ "uat": "http://lmnm1410647.bohrium.tech:50003/sse",
+ "prod": "http://fwne1412142.bohrium.tech:50003/sse"
+ }
+ },
+ {
+ "tool_id": "029-TRAJANAL-001",
+ "name": "traj_analysis_diffusion",
+ "description": {
+ "What it does": "Analyze diffusion from trajectories.",
+ "When to use": "Calculate MSD, diffusion coeffs.",
+ "Input": "MD trajectory file.",
+ "Output": "MSD, D, conductivity.",
+ "Notes": "Post-MD analysis only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "从分子动力学轨迹分析扩散。",
+ "使用场景": "计算均方位移(MSD)、扩散系数等。",
+ "输入": "分子动力学轨迹文件。",
+ "输出": "MSD、扩散系数 D、电导率等。",
+ "注意事项": "仅用于分子动力学后处理分析。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "traj_analysis_agent",
+ "scenes": [
+ "POST_MD_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "uat": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c"
+ }
+ },
+ {
+ "tool_id": "029-TRAJANAL-002",
+ "name": "traj_analysis_rdf",
+ "description": {
+ "What it does": "Compute RDF from trajectories.",
+ "When to use": "Analyze atomic distributions.",
+ "Input": "MD trajectory.",
+ "Output": "Radial distribution function.",
+ "Notes": "Post-MD analysis only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "从分子动力学轨迹计算径向分布函数(RDF)。",
+ "使用场景": "分析原子分布。",
+ "输入": "分子动力学轨迹。",
+ "输出": "径向分布函数。",
+ "注意事项": "仅用于分子动力学后处理分析。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "traj_analysis_agent",
+ "scenes": [
+ "POST_MD_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "uat": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c"
+ }
+ },
+ {
+ "tool_id": "029-TRAJANAL-003",
+ "name": "traj_analysis_solvation",
+ "description": {
+ "What it does": "Analyze solvation structures.",
+ "When to use": "Study solvent-solute interactions.",
+ "Input": "MD trajectory.",
+ "Output": "Solvation shells, properties.",
+ "Notes": "Post-MD analysis only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "分析溶剂化结构。",
+ "使用场景": "研究溶剂-溶质相互作用。",
+ "输入": "分子动力学轨迹。",
+ "输出": "溶剂化壳层、相关性质。",
+ "注意事项": "仅用于分子动力学后处理分析。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "traj_analysis_agent",
+ "scenes": [
+ "POST_MD_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "uat": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c"
+ }
+ },
+ {
+ "tool_id": "029-TRAJANAL-004",
+ "name": "traj_analysis_bond",
+ "description": {
+ "What it does": "Analyze bond length evolution.",
+ "When to use": "Monitor bond dynamics.",
+ "Input": "MD trajectory.",
+ "Output": "Bond length time series.",
+ "Notes": "Post-MD analysis only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "分析键长随时间的变化。",
+ "使用场景": "监测化学键动力学。",
+ "输入": "分子动力学轨迹。",
+ "输出": "键长时间序列。",
+ "注意事项": "仅用于分子动力学后处理分析。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "traj_analysis_agent",
+ "scenes": [
+ "POST_MD_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "uat": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c"
+ }
+ },
+ {
+ "tool_id": "029-TRAJANAL-005",
+ "name": "traj_analysis_react",
+ "description": {
+ "What it does": "Analyze reaction networks.",
+ "When to use": "Study chemical reactions.",
+ "Input": "MD trajectory.",
+ "Output": "Reaction species, networks.",
+ "Notes": "Post-MD analysis only.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "分析反应网络。",
+ "使用场景": "研究化学反应。",
+ "输入": "分子动力学轨迹。",
+ "输出": "反应物种、反应网络。",
+ "注意事项": "仅用于分子动力学后处理分析。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "traj_analysis_agent",
+ "scenes": [
+ "POST_MD_ANALYSIS"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "uat": "http://pfmx1355864.bohrium.tech:50004/sse",
+ "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c"
+ }
+ },
+ {
+ "tool_id": "030-CALCULAT-001",
+ "name": "calculate_reaction_profile",
+ "description": {
+ "What it does": "Calculate reaction profile.",
+ "When to use": "For organic reaction analysis.",
+ "Input": "Reaction inputs.",
+ "Output": "Reaction profile.",
+ "Notes": "Specific to reactions.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "计算反应势能剖面。",
+ "使用场景": "用于有机反应分析。",
+ "输入": "反应输入。",
+ "输出": "反应势能剖面(展示反应坐标与能量关系的剖面图)。",
+ "注意事项": "仅针对化学反应体系;不适用于通用的结构搜索或非反应性计算。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "organic_reaction_agent",
+ "scenes": [
+ "REACTION"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://luts1388252.bohrium.tech:50001/sse",
+ "uat": "http://luts1388252.bohrium.tech:50001/sse",
+ "prod": "https://1f187c8bc462403c4646ab271007edf4.app-space.dplink.cc/sse?token=aca7d1ad24ef436faa4470eaea006c12"
+ }
+ },
+ {
+ "tool_id": "033-QUERYSTE-001",
+ "name": "query_steelkb_literature",
+ "description": {
+ "What it does": "Query literature knowledge base for Stainless Steel research.",
+ "When to use": "When you need in-depth literature analysis on Stainless Steel topics.",
+ "Input": "Natural language questions about Stainless Steel.",
+ "Output": "Literature summaries from vector search.",
+ "Notes": "Topics limited to Stainless Steel.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "查询不锈钢研究的文献知识库。",
+ "使用场景": "当您需要对不锈钢相关主题进行深入的文献分析时。",
+ "输入": "关于不锈钢的自然语言问题。",
+ "输出": "通过向量搜索返回的文献摘要。",
+ "注意事项": "主题仅限于不锈钢。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "STEELkb_agent",
+ "scenes": [
+ "STEEL"
+ ],
+ "alternative_tools": [
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n",
+ "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n",
+ "self_check": false,
+ "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_steelkb_literature(question, top_k)\n\n**Parameters:**\n- question (str, required): Natural language query about Stainless Steel research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询不锈钢的腐蚀机制:\n → Tool: query_steelkb_literature\n question: '不锈钢的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n2) 查询力学性能:\n → Tool: query_steelkb_literature\n question: '不锈钢的力学性能如何?影响力学性能的主要因素有哪些?'\n top_k: 8\n\n3) 查询微观结构:\n → Tool: query_steelkb_literature\n question: '不锈钢的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 10\n\n4) 查询制备方法:\n → Tool: query_steelkb_literature\n question: '不锈钢的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 5\n",
+ "server": {
+ "test": "http://lmnm1410647.bohrium.tech:50004/sse",
+ "uat": "http://lmnm1410647.bohrium.tech:50004/sse",
+ "prod": "http://fwne1412142.bohrium.tech:50004/sse"
+ }
+ },
+ {
+ "tool_id": "033-PREDICTT-002",
+ "name": "predict_tensile_strength",
+ "description": {
+ "What it does": "Predict ultimate tensile strength for stainless steel using neural network.",
+ "When to use": "When you need UTS prediction based on composition.",
+ "Input": "List of chemical formulas.",
+ "Output": "List of predicted UTS values in MPa.",
+ "Notes": "Stainless steel only; no files returned.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "使用神经网络预测不锈钢的极限抗拉强度。",
+ "使用场景": "当您需要基于化学成分预测抗拉强度时。",
+ "输入": "化学配方列表。",
+ "输出": "预测的极限抗拉强度值列表(单位:MPa)。",
+ "注意事项": "仅适用于不锈钢;不返回文件。",
+ "成本": "低。"
+ },
+ "belonging_agent": "STEEL_PREDICT_agent",
+ "scenes": [
+ "STEEL"
+ ],
+ "alternative_tools": [
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "\n## RESPONSE FORMAT\n\n**Returns:**\n- List of float values: List of predicted tensile strength values in MPa\n- The order matches the input formula list\n- Example: [650.25, 680.50, 695.30] for three formulas\n- For single formula: Returns a list with one value, e.g., [650.25]\n\n**Presentation Guidelines:**\n- Present results clearly to the user:\n - For single formula: \"预测结果: 650.25 MPa\"\n - For batch: Create a table or list showing formula → prediction mapping\n- If the user asks for interpretation, explain what the predicted value(s) mean in context\n- For batch results, analyze trends (e.g., \"As Cr content increases from 16% to 22%, predicted strength increases from 620.30 to 710.15 MPa\")\n- Compare with typical stainless steel tensile strength ranges if relevant (e.g., 300-800 MPa for common grades)\n- When presenting batch results, organize them in a clear format (table, list, or trend analysis)\n- Match each prediction value with its corresponding formula from the input list\n",
+ "summary_cn": "\n## RESPONSE FORMAT\n\n**Returns:**\n- List of float values: List of predicted tensile strength values in MPa\n- The order matches the input formula list\n- Example: [650.25, 680.50, 695.30] for three formulas\n- For single formula: Returns a list with one value, e.g., [650.25]\n\n**Presentation Guidelines:**\n- Present results clearly to the user:\n - For single formula: \"预测结果: 650.25 MPa\"\n - For batch: Create a table or list showing formula → prediction mapping\n- If the user asks for interpretation, explain what the predicted value(s) mean in context\n- For batch results, analyze trends (e.g., \"As Cr content increases from 16% to 22%, predicted strength increases from 620.30 to 710.15 MPa\")\n- Compare with typical stainless steel tensile strength ranges if relevant (e.g., 300-800 MPa for common grades)\n- When presenting batch results, organize them in a clear format (table, list, or trend analysis)\n- Match each prediction value with its corresponding formula from the input list\n",
+ "self_check": false,
+ "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** predict_tensile_strength(formula)\n\n**Parameters:**\n- formula (list[str], required): List of chemical formula strings\n - **IMPORTANT**: Always provide a list, even for a single formula\n - Format: ElementSymbol followed by numeric value\n - Example (single): [\"Fe70Cr20Ni10\"] means Fe=70%, Cr=20%, Ni=10%\n - Example (single): [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"] means C=0.1%, Si=0.5%, Mn=1.0%, Cr=18.0%, Ni=8.0%\n - Example (batch): [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\"] for multiple predictions\n\n**Allowed Elements:**\nB, C, N, O, Al, Si, P, S, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Nb, Mo, W\n\n**Examples:**\n1) Predict tensile strength for a single formula (use list with one element):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\"]\n Returns: [650.25] (list with one value)\n\n2) Predict tensile strength with specific composition:\n → Tool: predict_tensile_strength\n formula: [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"]\n Returns: [680.50] (list with one value)\n\n3) Batch prediction for multiple formulas (more efficient):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\", \"Fe64Cr26Ni10\"]\n Returns: [650.25, 680.50, 695.30, 710.15]\n This is especially useful when analyzing the effect of element variation on strength.\n\n4) Systematic composition variation analysis:\n → Tool: predict_tensile_strength\n formula: [\"Fe66Cr16Ni12Mo2.5\", \"Fe64Cr18Ni12Mo2.5\", \"Fe62Cr20Ni12Mo2.5\", \"Fe60Cr22Ni12Mo2.5\"]\n Returns: [620.30, 650.25, 680.50, 710.15]\n Use this to analyze how changing Cr content affects tensile strength.\n\n**Usage Guidelines:**\n- **CRITICAL**: Always provide formula as a list, even for a single formula: [\"Fe70Cr20Ni10\"] not \"Fe70Cr20Ni10\"\n- Always provide the chemical formula in the correct format\n- Ensure all elements in the formula are from the allowed set\n- The tool will automatically handle element ordering and normalization\n- If prediction fails, check the formula format and element names\n- The model uses standardized input features, so the tool handles data preprocessing automatically\n- **For systematic analysis**: Use batch prediction when analyzing element variation effects (e.g., changing Cr from 16% to 22%)\n- **Batch prediction is more efficient**: When predicting multiple formulas, include all in one list\n",
+ "server": {
+ "test": "http://khag1410990.bohrium.tech:50001/sse",
+ "uat": "http://khag1410990.bohrium.tech:50001/sse",
+ "prod": "http://khag1410990.bohrium.tech:50002/sse"
+ }
+ },
+ {
+ "tool_id": "034-GENERATE-001",
+ "name": "generate_calypso_structures",
+ "description": {
+ "What it does": "Perform global structure search with CALYPSO to generate candidate crystal structures.",
+ "When to use": "When you need to explore polymorphs for a composition.",
+ "Input": "Valid element inputs; CALYPSO environment.",
+ "Output": "Multiple POSCAR files.",
+ "Notes": "Requires relaxation downstream.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "利用 CALYPSO 进行全局结构搜索,从而生成一系列候选晶体结构。",
+ "使用场景": "当需要探索成分的同质异形体时使用。",
+ "输入": "有效的元素输入。",
+ "输出": "POSCAR 文件。",
+ "注意事项": "需要下游弛豫。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended.",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ }
+ },
+ {
+ "tool_id": "034-GENERATE-002",
+ "name": "generate_crystalformer_structures",
+ "description": {
+ "What it does": "Generate crystal structures based on conditional attributes and space groups.",
+ "When to use": "When you need structures with specific properties.",
+ "Input": "Target properties (bandgap, moduli, Tc, sound); space groups.",
+ "Output": "Generated structures.",
+ "Notes": "Limited to supported properties; requires space group.",
+ "Costs": "High; uses generative model."
+ },
+ "description_cn": {
+ "工具简介": "基于条件属性和空间群生成晶体结构。",
+ "使用场景": "当需要具有特定性质的结构时使用。",
+ "输入": "目标性质(带隙、模量、Tc、声速);空间群。",
+ "输出": "生成的结构。",
+ "注意事项": "仅支持模型预训练过的特定性质;必须指定空间群作为生成的约束条件。",
+ "成本": "高;使用生成模型。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE",
+ "CONDITIONAL_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type=\"minimize\", use small target (e.g., 0.1) and low alpha (0.01); for \"equal\", \"greater\", \"less\", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference.",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ }
+ },
+ {
+ "tool_id": "034-MAKESUPE-003",
+ "name": "make_supercell_structure",
+ "description": {
+ "What it does": "Create supercell expansion from structure file.",
+ "When to use": "When you need larger unit cell for simulations.",
+ "Input": "Structure file.",
+ "Output": "Supercell structure.",
+ "Notes": "Expansion only; no reduction.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从结构文件创建超胞扩充。",
+ "使用场景": "当你需要构建更大尺寸的单元以进行模拟时。",
+ "输入": "结构文件。",
+ "输出": "超胞结构。",
+ "注意事项": "仅支持扩展,不支持缩减。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: Primarily follow user's instrucution. If not specified, firstly get structure information to understand the raw lattice. An ideal supercell for computation is isotropic. For example, the raw lattice is (4 A, 10 A, 12 A, 90 deg, 90 deg, 90 deg), the supercell should be 5 × 2 × 2. 30-50 angstrom is often appropriate for simulations. Avoid overly large cells unless needed for long-range interactions.",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDBUL-004",
+ "name": "build_bulk_structure_by_template",
+ "description": {
+ "What it does": "Build bulk structures for simple packing types and compounds.",
+ "When to use": "For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.",
+ "Input": "Element symbols or formulas; lattice constants.",
+ "Output": "Crystal structure file.",
+ "Notes": "Limited to simple structures; no complex crystals.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "为简单堆积类型和化合物构建体相结构。",
+ "使用场景": "用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。",
+ "输入": "元素符号或化学式;晶格常数。",
+ "输出": "晶体结构文件。",
+ "注意事项": "仅限于简单结构;不支持复杂晶体。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [
+ "fetch_bohrium_crystals",
+ "fetch_structures_with_filter",
+ "build_bulk_structure_by_wyckoff"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: Lattice constant requirements due to symmetry constraints: sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → only a; hcp/wurtzite → a and c; orthorhombic/monoclinic → a, b, c. Set conventional=True by default unless primitive cell is explicitly required. For elements, use element symbols; for compounds, use chemical formula (e.g., \"NaCl\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDSUR-005",
+ "name": "build_surface_slab",
+ "description": {
+ "What it does": "Build surface slab structures from bulk structure.",
+ "When to use": "When you need surface models for calculations.",
+ "Input": "Bulk structure file; Miller indices.",
+ "Output": "Slab structure file.",
+ "Notes": "Requires bulk input; vacuum added.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从体相结构构建表面结构。",
+ "使用场景": "当需要表面模型进行计算时使用。",
+ "输入": "体相结构文件;Miller 指数。",
+ "输出": "表面结构文件。",
+ "注意事项": "需要体相输入;添加真空层。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: Prefer slab_size_mode=\"layers\" with slab_size_value=4–6 for stability; or \"thickness\" with ≥12 Å for electronic convergence. Use vacuum=15–20 Å to minimize spurious interactions. For polar surfaces or systems with strong dipoles, increase vacuum to ensure the electrostatic potential flattens in the vacuum region. Enable repair=True for covalent materials (e.g., drug-like molecule crystals, oragnic-inorganic hybrids, MOFs); Set false for regular sphrical-like inorganic crystals. Gets slow if set True. Default termination=\"auto\" usually selects the most stoichiometric termination. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDSUR-006",
+ "name": "build_surface_adsorbate",
+ "description": {
+ "What it does": "Build surface-adsorbate structures by placing molecules on slabs.",
+ "When to use": "For adsorption studies.",
+ "Input": "Surface slab and adsorbate structure files.",
+ "Output": "Combined structure file.",
+ "Notes": "Single adsorbate placement.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过在表面上放置分子来构建表面-吸附物结构。",
+ "使用场景": "用于吸附研究。",
+ "输入": "表面结构文件和吸附质结构文件。",
+ "输出": "组合结构文件。",
+ "注意事项": "仅支持单吸附质放置。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: height=2.0 Å is typical for physisorption; reduce to 1.5–1.8 Å for chemisorption (e.g., CO on Pt). For high-symmetry sites, use string keywords (\"ontop\", \"fcc\", \"hcp\"); for custom placement, supply [x, y] fractional coordinates. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDSUR-007",
+ "name": "build_surface_interface",
+ "description": {
+ "What it does": "Build heterointerface by stacking two slab structures.",
+ "When to use": "For interface studies.",
+ "Input": "Two slab structure files.",
+ "Output": "Interface structure file.",
+ "Notes": "Basic strain checking.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过堆叠两个表面结构来构建异质界面。",
+ "使用场景": "用于界面研究。",
+ "输入": "两个表面结构文件。",
+ "输出": "界面结构文件。",
+ "注意事项": "基础的应变 (Strain) 检查。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: Keep max_strain=0.05 (5%) for physical relevance; relax only if intentional strain engineering is intended. Try combinding make_supercell and get_structural_info to obtain the appropriate size of the two slabs. interface_distance=2.5 Å is safe for van der Waals gaps; reduce to 1.8–2.0 Å for covalent bonding (e.g., heterostructures with orbital overlap). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-ADDCELLF-008",
+ "name": "add_cell_for_molecules",
+ "description": {
+ "What it does": "Add periodic cell to molecular structures for calculations.",
+ "When to use": "For isolated molecule calculations requiring periodicity.",
+ "Input": "Molecular structure file.",
+ "Output": "Structure with periodic cell.",
+ "Notes": "For gas-phase molecules.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "为分子结构添加周期晶胞以进行计算。",
+ "使用场景": "用于需要周期性的孤立分子计算。",
+ "输入": "分子结构文件。",
+ "输出": "带周期晶胞的结构。",
+ "注意事项": "用于气相分子。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: For non-periodic system aiming to run calculations with periodic boundary conditions required (e.g., DFT calculations with ABACUS), use add_cell_for_molecules to put the system in a large cell. Default cell [10, 10, 10] Å and vacuum = 5 Å are suitable for most gas-phase molecules; increase to ≥15 Å and ≥8 Å vacuum for polar or diffuse systems (e.g., anions, excited states). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDBUL-009",
+ "name": "build_bulk_structure_by_wyckoff",
+ "description": {
+ "What it does": "Build crystal structures by specifying space group and Wyckoff positions.",
+ "When to use": "For custom crystal structures.",
+ "Input": "Space group; Wyckoff positions with coordinates.",
+ "Output": "Crystal structure file.",
+ "Notes": "Requires symmetry knowledge.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过指定空间群和 Wyckoff 位置来构建晶体结构。",
+ "使用场景": "用于自定义晶体结构。",
+ "输入": "空间群;带坐标的 Wyckoff 位置。",
+ "输出": "晶体结构文件。",
+ "注意事项": "需要对称性知识。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [
+ "fetch_bohrium_crystals",
+ "fetch_structures_with_filter",
+ "build_bulk_structure_by_template"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: Space Group: Integer (e.g., 225) or Symbol (e.g., \"Fm-3m\"). Wyckoff Consistency: The provided coordinates must mathematically belong to the specific Wyckoff position (e.g., if using position 4a at (0,0,0), do not input (0.5, 0.5, 0) just because it's in the same unit cell; only input the canonical generator). Lattice: Angles in degrees, lengths in Å. Fractional Coordinates: Must be in [0, 1). Strictly Use the Asymmetric Unit: You must provide only the generating coordinates for each Wyckoff orbit. Do NOT Pre-calculate Symmetry: The function will automatically apply all space group operators to your input. If you manually input coordinates that are already symmetry-equivalent (e.g., providing both (x, y, z) and (-x, -y, -z) in a centrosymmetric structure), the function will generate them again, causing catastrophic atom overlapping. Redundancy Rule: Before adding a coordinate, check if it can be generated from an existing input coordinate via any operator in the Space Group. If yes, discard it. One Wyckoff letter = One coordinate triplet input. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-BUILDMOL-010",
+ "name": "build_molecule_structures_from_smiles",
+ "description": {
+ "What it does": "Build 3D molecular structures from SMILES strings.",
+ "When to use": "When you have SMILES and need 3D coordinates.",
+ "Input": "SMILES string.",
+ "Output": "Molecular structure file.",
+ "Notes": "Single conformer generation.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从 SMILES 字符串构建 3D 分子结构。",
+ "使用场景": "当您有 SMILES 并需要 3D 坐标时使用。",
+ "输入": "SMILES 字符串。",
+ "输出": "分子结构文件。",
+ "注意事项": "单个构象生成。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "\nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-MAKEDOPE-011",
+ "name": "make_doped_structure",
+ "description": {
+ "What it does": "Generate doped crystal structures by substituting atoms.",
+ "When to use": "For doping studies.",
+ "Input": "Host structure; dopant species and concentrations.",
+ "Output": "Doped structure file.",
+ "Notes": "Random substitution; recommend supercells.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过替换原子生成掺杂晶体结构。",
+ "使用场景": "用于掺杂研究。",
+ "输入": "主体结构;掺杂物种和浓度。",
+ "输出": "掺杂结构文件。",
+ "注意事项": "随机替换;建议使用超胞。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: Fractions are applied per-site; actual doping % may differ slightly in small cells — recommend ≥2×2×2 supercells for <10% doping. Covalent ions (ammonium, formamidinium, etc.) are supported via built-in library; specify by name (e.g., \"ammonium\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-MAKEDEFE-012",
+ "name": "make_defect_structure",
+ "description": {
+ "What it does": "Create a defect structure by removing specific molecular clusters based on spatial relationships.",
+ "When to use": "For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.",
+ "Input": "Input molecular crystal structure file; optionally target species to remove and starting molecule index.",
+ "Output": "Defective structure file.",
+ "Notes": "Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "通过基于空间关系移除特定分子簇来创建缺陷结构。",
+ "使用场景": "用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。",
+ "输入": "分子晶体结构文件;(可选)目标移除物种、起始分子索引。",
+ "输出": "缺陷结构文件。",
+ "注意事项": "专为分子晶体设计。该功能确保移除的是整个分子单元,而非晶格中的孤立原子。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: structure_path is the input molecular crystal structure file (e.g., CIF); target_spec is an optional dictionary mapping species IDs to counts to remove (e.g., {\"C6H14N2_1\": 1, \"H4N_1\": 1}), if None uses the simplest unit in crystal; seed_index is the index of molecule to start removing from, if None picks randomly from rarest species; method is the method to use for selecting molecules to remove; return_removed_cluster: controls whether returns removed clusters; output_file is the path to save the generated defective structure file.",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-MAKEAMOR-013",
+ "name": "make_amorphous_structure",
+ "description": {
+ "What it does": "Generate amorphous molecular structures in periodic boxes.",
+ "When to use": "For amorphous material simulations.",
+ "Input": "Molecule structure; box size/density/count.",
+ "Output": "Amorphous structure file.",
+ "Notes": "Avoids overlaps; for further relaxation.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "在周期性盒子 (Periodic Box) 中生成非晶态/无定形分子结构。",
+ "使用场景": "用于非晶材料模拟。",
+ "输入": "分子结构;盒子尺寸/密度/数量。",
+ "输出": "非晶结构文件。",
+ "注意事项": "具备基础的防重叠功能,但生成的结构仍需进行后续的结构弛豫或分子动力学平衡。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "Parameter guidance: Input Constraint: Specify exactly two of: box_size, density, molecule_numbers. The third is derived. Density Regimes (CRITICAL): Solids/Liquids: Target ~0.9–1.2 g/cm³ (e.g., water ~1.0, polymers ~1.1). Gases/Vapors: Target orders of magnitude lower (e.g., ~0.001–0.002 g/cm³ for STP gases). Warning: Do not apply default liquid densities to gas inputs. If simulating a specific pressure, pre-calculate the required number of molecules N for the given Box Volume V (using Ideal Gas Law), then fix box_size and molecule_numbers. Composition: Use composition for multi-component mixtures; otherwise equal molar ratios are assumed. Packing Geometry: Box Size: For gases, ensure the box is large enough (usually >15 Å) to minimize unphysical periodic self-interactions, even if the density is low. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-GENERATE-014",
+ "name": "generate_ordered_replicas",
+ "description": {
+ "What it does": "Process disordered CIF files to generate ordered replica structures.",
+ "When to use": "When you have a disordered structure and need to resolve disorder to create ordered structures.",
+ "Input": "Disordered CIF file path; optional number of structures to generate, method for generation.",
+ "Output": "List of paths to the generated ordered structure files.",
+ "Notes": "Only processes disordered structures to ordered ones; requires valid CIF input.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "处理含有原子无序的 CIF 文件,生成对应的有序化副本结构。",
+ "使用场景": "当您有无序结构并需要解决无序以创建有序结构时使用。",
+ "输入": "无序 CIF 文件路径;(可选)生成的有序结构数量、生成方法。",
+ "输出": "生成的有序结构文件路径列表。",
+ "注意事项": "仅处理无序结构到有序结构;必须提供符合规范的 CIF 输入文件。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE",
+ "STRUCTURE_SANITIZE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: structure_path: Required. Input disordered structure file (CIF format). generate_count: Optional. Number of ordered structures to generate (default: 1). method: Optional. Method for generation (\"optimal\" for single best structure, \"random\" for ensemble of structures) (default: \"random\"). output_file: Optional. Directory to save output files; defaults to subdirectory of input file location.",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "034-REMOVESO-015",
+ "name": "remove_solvents",
+ "description": {
+ "What it does": "Remove specified solvent molecules from a molecular crystal structure.",
+ "When to use": "When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.",
+ "Input": "CIF structure file containing identifiable solvent molecules; target solvent names or formulas.",
+ "Output": "Path to the desolvated structure file.",
+ "Notes": "Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder. Prior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.",
+ "Costs": "Low. Recommended to inspect molecular components first."
+ },
+ "description_cn": {
+ "工具简介": "从分子晶体结构中移除指定的溶剂分子。",
+ "使用场景": "当对分子晶体进行去溶剂化以获得无溶剂或部分去溶剂化结构用于分析或模拟时使用。",
+ "输入": "包含可识别溶剂分子的 CIF 结构文件;目标溶剂名称或化学式。",
+ "输出": "去溶剂化结构文件的路径。",
+ "注意事项": "仅能移除基于化学组成识别的完整溶剂分子;该操作不会修改骨架原子,也不会处理结构中的无序问题。建议首先调用 get_structure_info 以检查分子组分并确认溶剂身份。",
+ "成本": "低。建议首先检查分子组分。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_GENERATE",
+ "STRUCTURE_SANITIZE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "Parameter guidance: structure_path: Required. Input CIF file containing solvent molecules. output_file: Required. Path to save the desolvated structure. targets: Required. List of solvent names or chemical formulas to remove (e.g., \"H2O\", \"DMF\"). ",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "035-ADDHYDRO-001",
+ "name": "add_hydrogens",
+ "description": {
+ "What it does": "Add hydrogen atoms to a structure.",
+ "When to use": "Complete structures by adding missing hydrogens.",
+ "Input": "Structure file path; optional bonding or hydrogen-adding rules.",
+ "Output": "Structure file with hydrogens added.",
+ "Notes": "No optimization, refinement, or reactions.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "为输入结构添加氢原子。",
+ "使用场景": "补全结构中缺失的氢原子。",
+ "输入": "结构文件路径;成键规则或特定的加氢逻辑。",
+ "输出": "已添加氢原子的结构文件。",
+ "注意事项": "不进行优化、精化或反应。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "STRUCTURE_SANITIZE",
+ "STRUCTURE_GENERATE"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": true,
+ "args_setting": "- target_elements: Optional. Limit hydrogen addition to specific elements.\n- optimize_torsion: Optional. If True, adjust torsion angles to optimize geometry; default is False.\n- rules: Optional. **Critical** for special cases (e.g., N in ammonium must remain target_coordination=4 and geometry of tetrahedron). If not provided, default chemical environment rules are used. For precise control, provide rules to override defaults.\n- bond_lengths: Optional. Override default bond lengths for specific atom pairs. If None, defaults are used.\nIMPORTANT: Even though rules are optional, certain functional groups require explicit rules for correctness. ",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "036-RUNSUPER-001",
+ "name": "run_superconductor_optimization",
+ "description": {
+ "What it does": "Optimize superconducting structures.",
+ "When to use": "Relax superconductor geometries.",
+ "Input": "Structure file (CIF/POSCAR).",
+ "Output": "Optimized structure.",
+ "Notes": "Only geometry optimization.",
+ "Costs": "High (DPA calculations)."
+ },
+ "description_cn": {
+ "工具简介": "优化超导结构。",
+ "使用场景": "弛豫超导体几何结构。",
+ "输入": "结构文件(CIF/POSCAR)。",
+ "输出": "优化后的结构。",
+ "注意事项": "仅进行几何优化。",
+ "成本": "高(DPA 计算)。"
+ },
+ "belonging_agent": "superconductor_agent",
+ "scenes": [
+ "SUPERCONDUCTOR"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2"
+ }
+ },
+ {
+ "tool_id": "036-CALCULAT-002",
+ "name": "calculate_superconductor_enthalpy",
+ "description": {
+ "What it does": "Calculate enthalpy and stability.",
+ "When to use": "Screen superconductor stability.",
+ "Input": "Structure candidates.",
+ "Output": "Enthalpy, convex hull, stable phases.",
+ "Notes": "Superconductor-specific only.",
+ "Costs": "High (DPA calculations)."
+ },
+ "description_cn": {
+ "工具简介": "计算焓和稳定性。",
+ "使用场景": "筛选超导体稳定性。",
+ "输入": "结构候选物。",
+ "输出": "焓、凸包、稳定相。",
+ "注意事项": "仅限超导体。",
+ "成本": "高(DPA 计算)。"
+ },
+ "belonging_agent": "superconductor_agent",
+ "scenes": [
+ "SUPERCONDUCTOR"
+ ],
+ "alternative_tools": [
+ "predict_superconductor_Tc"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2"
+ }
+ },
+ {
+ "tool_id": "036-PREDICTS-003",
+ "name": "predict_superconductor_Tc",
+ "description": {
+ "What it does": "Predict superconducting Tc.",
+ "When to use": "Estimate critical temperature.",
+ "Input": "Material structure.",
+ "Output": "Tc prediction.",
+ "Notes": "DPA model only.",
+ "Costs": "High (ML predictions)."
+ },
+ "description_cn": {
+ "工具简介": "预测超导 Tc。",
+ "使用场景": "估算临界温度。",
+ "输入": "材料结构。",
+ "输出": "Tc 预测。",
+ "注意事项": "仅限 DPA 模型。",
+ "成本": "高(ML 预测)。"
+ },
+ "belonging_agent": "superconductor_agent",
+ "scenes": [
+ "SUPERCONDUCTOR"
+ ],
+ "alternative_tools": [
+ "calculate_superconductor_enthalpy"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2"
+ }
+ },
+ {
+ "tool_id": "036-SCREENSU-004",
+ "name": "screen_superconductor",
+ "description": {
+ "What it does": "Screen multiple superconductors.",
+ "When to use": "Compare Tc and stability.",
+ "Input": "List of candidates.",
+ "Output": "Ranked Tc and stability.",
+ "Notes": "Multiple candidates only.",
+ "Costs": "High (batch DPA)."
+ },
+ "description_cn": {
+ "工具简介": "筛选多个超导体。",
+ "使用场景": "比较 Tc 和稳定性。",
+ "输入": "候选物列表。",
+ "输出": "排序的 Tc 和稳定性。",
+ "注意事项": "仅限多个候选物。",
+ "成本": "高(批量 DPA)。"
+ },
+ "belonging_agent": "superconductor_agent",
+ "scenes": [
+ "SUPERCONDUCTOR"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50002/sse",
+ "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2"
+ }
+ },
+ {
+ "tool_id": "038-QUERYSSE-001",
+ "name": "query_ssekb_literature",
+ "description": {
+ "What it does": "Query literature knowledge base for SSE(Solid-state electrolyte) research with natural language.",
+ "When to use": "When you need in-depth literature analysis on Solid-state electrolyte topics.",
+ "Input": "Natural language questions about Solid-state electrolyte.",
+ "Output": "Literature summaries from vector similarity search.",
+ "Notes": "Topics limited to Solid-state electrolyte.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "使用自然语言查询固态电解质(SSE)研究的文献知识库。",
+ "使用场景": "当您需要对固态电解质相关主题进行深入的文献分析时。",
+ "输入": "关于固态电解质的自然语言问题。",
+ "输出": "通过向量相似性搜索返回的文献摘要。",
+ "注意事项": "主题仅限于固态电解质。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "SSEkb_agent",
+ "scenes": [
+ "Solid_State_Electrolyte"
+ ],
+ "alternative_tools": [
+ "search-papers-enhanced",
+ "web-search"
+ ],
+ "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., material properties, experimental data, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., material properties, experimental data, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., material properties, experimental values, DOI)\n - **Use database entries for statistical analysis**: Group by material type or property type, calculate property ranges, identify trends, create property distributions\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by material type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n",
+ "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., material properties, experimental data, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., material properties, experimental data, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., material properties, experimental values, DOI)\n - **Use database entries for statistical analysis**: Group by material type or property type, calculate property ranges, identify trends, create property distributions\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by material type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n",
+ "self_check": false,
+ "args_setting": "## PARAMETER CONSTRUCTION GUIDE\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_ssekb_literature(query_description)\n\n**Parameters:**\n- query_description (str, required): Natural language query about SSE(Solid-state electrolyte) research topics\n\n**Examples:**\n1) 查询特定材料属性:\n → Tool: query_ssekb_literature\n query_description: '查找具有特定性能的固态电解质材料相关论文'\n\n2) 查询特定材料类型:\n → Tool: query_ssekb_literature\n query_description: '查找特定材料类型的固态电解质相关论文'\n",
+ "server": {
+ "test": "http://lmnm1410647.bohrium.tech:50002/sse",
+ "uat": "http://lmnm1410647.bohrium.tech:50002/sse",
+ "prod": "http://fwne1412142.bohrium.tech:50002/sse"
+ }
+ },
+ {
+ "tool_id": "039-PREDICTT-001",
+ "name": "predict_thermoelectric_properties",
+ "description": {
+ "What it does": "Predict thermoelectric properties.",
+ "When to use": "Estimate band gap, Seebeck, etc.",
+ "Input": "Material structure.",
+ "Output": "Band gap, Seebeck, power factor, moduli.",
+ "Notes": "No thermal conductivity.",
+ "Costs": "High (DPA predictions)."
+ },
+ "description_cn": {
+ "工具简介": "预测热电性质。",
+ "使用场景": "估算带隙、塞贝克系数等。",
+ "输入": "材料结构文件。",
+ "输出": "带隙、塞贝克系数、功率因子、模量。",
+ "注意事项": "暂不支持热导率的预测。",
+ "成本": "高(DPA 预测)。"
+ },
+ "belonging_agent": "thermoelectric_agent",
+ "scenes": [
+ "THERMOELECTRIC"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767"
+ }
+ },
+ {
+ "tool_id": "039-RUNPRESS-002",
+ "name": "run_pressure_optimization",
+ "description": {
+ "What it does": "Optimize under pressure.",
+ "When to use": "Relax thermoelectric structures.",
+ "Input": "Structure, pressure.",
+ "Output": "Optimized structure.",
+ "Notes": "Thermoelectric-specific.",
+ "Costs": "High (DPA calculations)."
+ },
+ "description_cn": {
+ "工具简介": "在压力下优化。",
+ "使用场景": "弛豫热电结构。",
+ "输入": "结构、压力。",
+ "输出": "优化后的结构。",
+ "注意事项": "仅限热电材料。",
+ "成本": "高(DPA 计算)。"
+ },
+ "belonging_agent": "thermoelectric_agent",
+ "scenes": [
+ "THERMOELECTRIC"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767"
+ }
+ },
+ {
+ "tool_id": "039-CALCULAT-003",
+ "name": "calculate_thermoele_enthalp",
+ "description": {
+ "What it does": "Calculate enthalpy under pressure.",
+ "When to use": "Screen thermoelectric stability.",
+ "Input": "Candidates, pressure.",
+ "Output": "Enthalpy, convex hull.",
+ "Notes": "Thermoelectric-specific.",
+ "Costs": "High (DPA calculations)."
+ },
+ "description_cn": {
+ "工具简介": "计算压力下的焓。",
+ "使用场景": "筛选热电稳定性。",
+ "输入": "候选物、压力。",
+ "输出": "焓、凸包。",
+ "注意事项": "仅限热电材料。",
+ "成本": "高(DPA 计算)。"
+ },
+ "belonging_agent": "thermoelectric_agent",
+ "scenes": [
+ "THERMOELECTRIC"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767"
+ }
+ },
+ {
+ "tool_id": "039-SCREENTH-004",
+ "name": "screen_thermoelectric_candidate",
+ "description": {
+ "What it does": "Screen thermoelectric candidates.",
+ "When to use": "Identify promising materials.",
+ "Input": "Multiple structures.",
+ "Output": "Ranked thermoelectric properties.",
+ "Notes": "Requires multiple inputs.",
+ "Costs": "High (batch DPA)."
+ },
+ "description_cn": {
+ "工具简介": "筛选热电候选物。",
+ "使用场景": "识别有前景的材料。",
+ "输入": "多个结构。",
+ "输出": "排序的热电性质。",
+ "注意事项": "需要多个输入。",
+ "成本": "高(批量 DPA)。"
+ },
+ "belonging_agent": "thermoelectric_agent",
+ "scenes": [
+ "THERMOELECTRIC"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "uat": "http://root@mllo1368252.bohrium.tech:50001/sse",
+ "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767"
+ }
+ },
+ {
+ "tool_id": "040-TPDPARSE-001",
+ "name": "tpd_parse_and_get_mol",
+ "description": {
+ "What it does": "Parse a single TPD file and extract recognized molecule weights (m/z or labels).",
+ "When to use": "When you need to know which molecule weights are present in a TPD file.",
+ "Input": "Local file path, file name, data type (Signal vs. Temp/Time).",
+ "Output": "List of molecule weights (m/z or \"*\").",
+ "Notes": "Only parses local files; remote URLs must be downloaded first.",
+ "Costs": "Fast; supports three data types."
+ },
+ "description_cn": {
+ "工具简介": "解析单个 TPD 文件并提取识别到的分子量(m/z 或标签)。",
+ "使用场景": "需要获知 TPD 文件中包含哪些分子量时使用。",
+ "输入": "本地文件路径、文件名、数据类型(Signal 或 Temp/Time)。",
+ "输出": "分子量列表(m/z 或 \"*\")。",
+ "注意事项": "仅解析本地文件;远程 URL 需先下载。",
+ "成本": "快速;支持三种数据类型。"
+ },
+ "belonging_agent": "tpd_agent",
+ "scenes": [
+ "TPD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse"
+ }
+ },
+ {
+ "tool_id": "040-TPDGETCH-002",
+ "name": "tpd_get_chart",
+ "description": {
+ "What it does": "Generate ECharts visualization config for selected molecule weights in a TPD file.",
+ "When to use": "When you want to plot curves for selected m/z channels from a TPD file.",
+ "Input": "Local file path, file name, selected_weights (list of m/z), data type, line width.",
+ "Output": "Path to saved ECharts option JSON file.",
+ "Notes": "Only local files; selected_weights must match available m/z.",
+ "Costs": "Fast; supports three data types."
+ },
+ "description_cn": {
+ "工具简介": "为 TPD 文件中选定的分子量生成 ECharts 可视化配置。",
+ "使用场景": "需要绘制 TPD 文件中选定 m/z 通道的曲线时使用。",
+ "输入": "本地文件路径、文件名、selected_weights(m/z 列表)、数据类型、线宽。",
+ "输出": "保存的 ECharts 配置 JSON 文件路径。",
+ "注意事项": "仅支持本地文件;selected_weights 须与可用 m/z 对应。",
+ "成本": "快速;支持三种数据类型。"
+ },
+ "belonging_agent": "tpd_agent",
+ "scenes": [
+ "TPD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse"
+ }
+ },
+ {
+ "tool_id": "040-TPDGETCA-003",
+ "name": "tpd_get_cal",
+ "description": {
+ "What it does": "Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.",
+ "When to use": "When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.",
+ "Input": "Local file path; target molecule weight (m/z as string like \"18\", \"44\", or \"*\" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).",
+ "Output": "ECharts visualization config, integration area (if calculated), error list for failed operations.",
+ "Notes": "Processes one m/z at a time; call multiple times for multiple molecules; requires local files.",
+ "Costs": "Medium; each operation is independent; default to total signal (*) if m/z not specified."
+ },
+ "description_cn": {
+ "工具简介": "对单个文件中某一分子量(m/z)信号进行 TPD 分析(寻峰、拟合、积分、求导)。",
+ "使用场景": "需要对特定 m/z 通道或总信号做峰分析、面积计算或求导时使用。",
+ "输入": "本地文件路径;目标分子量(m/z 字符串如 \"18\"、\"44\",或 \"*\" 表示总信号);分析操作(寻峰、拟合、积分范围、求导设置等)。",
+ "输出": "ECharts 可视化配置、积分面积(若计算)、失败操作的错误列表。",
+ "注意事项": "每次仅处理一个 m/z;多分子需多次调用;须为本地文件。",
+ "成本": "中等;各操作独立;未指定 m/z 时默认总信号。"
+ },
+ "belonging_agent": "tpd_agent",
+ "scenes": [
+ "TPD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse"
+ }
+ },
+ {
+ "tool_id": "040-TPDPEAKI-004",
+ "name": "tpd_peak_integrate",
+ "description": {
+ "What it does": "For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.",
+ "When to use": "Quickly estimate peak areas for one channel.",
+ "Input": "Local file path, file name, mol_weight (m/z or \"*\"), data type, baseline_mode, window_halfwidth, line width.",
+ "Output": "Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.",
+ "Notes": "Only local files; window-based integration may overlap for dense peaks.",
+ "Costs": "Fast; supports horizontal/trend baseline."
+ },
+ "description_cn": {
+ "工具简介": "对单个 TPD 文件及 m/z,在局部窗口内检测峰并对各峰积分;可视化原始曲线、峰标记与基线段。",
+ "使用场景": "快速估算单通道峰面积时使用。",
+ "输入": "本地文件路径、文件名、mol_weight(m/z 或 \"*\")、数据类型、baseline_mode、window_halfwidth、线宽。",
+ "输出": "ECharts 配置 JSON 路径、峰列表、各峰积分值、llm_context 摘要。",
+ "注意事项": "仅支持本地文件;窗口积分在峰密集时可能重叠。",
+ "成本": "快速;支持水平/趋势基线。"
+ },
+ "belonging_agent": "tpd_agent",
+ "scenes": [
+ "TPD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse"
+ }
+ },
+ {
+ "tool_id": "041-GETSTRUC-001",
+ "name": "get_structure_info",
+ "description": {
+ "What it does": "Extract structural information from **files**.",
+ "When to use": "Analyze crystal/molecular structures **files**.",
+ "Input": "Structure file path.",
+ "Output": "Formula, space group, lattice, atoms.",
+ "Notes": "No modifications; read-only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从文件中提取结构信息。",
+ "使用场景": "分析晶体/分子结构文件。",
+ "输入": "结构文件路径。",
+ "输出": "化学式、空间群、晶格、原子。",
+ "注意事项": "不进行修改;只读。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [
+ "file_parse"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "041-GETMOLEC-002",
+ "name": "get_molecule_info",
+ "description": {
+ "What it does": "Extract molecular structure information from **files**.",
+ "When to use": "Analyze molecular structures **files**.",
+ "Input": "Molecule file path.",
+ "Output": "Formula, atoms, bonds, properties.",
+ "Notes": "No modifications; read-only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从文件中提取分子结构信息。",
+ "使用场景": "分析分子结构文件。",
+ "输入": "分子文件路径。",
+ "输出": "化学式、原子、键、性质。",
+ "注意事项": "不进行修改;只读。",
+ "成本": "低。"
+ },
+ "belonging_agent": "structure_generate_agent",
+ "scenes": [
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [
+ "file_parse"
+ ],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": "",
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50003/mcp",
+ "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf",
+ "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "041-WEB-SEAR-003",
+ "name": "web-search",
+ "description": {
+ "What it does": "Perform web searches for what, why, how questions.",
+ "When to use": "For concise factual or explanatory lookups.",
+ "Input": "Search query.",
+ "Output": "URL, title, snippet.",
+ "Notes": "No command-type queries; follow up with extract_info_from_webpage.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "执行网页搜索,回答 what、why、how 类问题。",
+ "使用场景": "进行简明的事实查询或解释性检索。",
+ "输入": "搜索查询词。",
+ "输出": "URL、标题、摘要片段。",
+ "注意事项": "不支持指令型查询;如需提取页面内容可后续调用 extract_info_from_webpage。",
+ "成本": "低。"
+ },
+ "belonging_agent": "science_navigator_agent",
+ "scenes": [
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Prioritize clarity and factual correctness; include technical depth only as needed. When perspectives differ, list them briefly and state the variation.\n- Limit statements to what search snippets directly support; omit unsupported inference.\n\nEnd with one concise, clear sentence. Omit prompts for next steps or follow-up questions.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Prioritize clarity and factual correctness; include technical depth only as needed. When perspectives differ, list them briefly and state the variation.\n- Limit statements to what search snippets directly support; omit unsupported inference.\n\nEnd with one concise, clear sentence. Omit prompts for next steps or follow-up questions.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "041-EXTRACTI-004",
+ "name": "extract_info_from_webpage",
+ "description": {
+ "What it does": "Extract key information from a webpage URL.",
+ "When to use": "When you need scientific facts, data, or findings from a webpage.",
+ "Input": "Webpage URL.",
+ "Output": "Extracted information in text form.",
+ "Notes": "Only return text and do not support generating files in any format.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从网页 URL 提取关键信息。",
+ "使用场景": "需要从网页获取科学事实、数据或结论时使用。",
+ "输入": "网页 URL。",
+ "输出": "以文本形式呈现的提取结果。",
+ "注意事项": "仅返回文本,不支持生成任何格式的文件。",
+ "成本": "低。"
+ },
+ "belonging_agent": "science_navigator_agent",
+ "scenes": [
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, concise. Every factual assertion must trace back to retrieved webpage content.\n- Restrict content to what is explicitly stated or clearly implied in the webpages; omit unsupported narrative or assumption-based reasoning.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Stay within what webpages support; infer only when logically necessary and label it as such.\n4. Cite each supporting sentence or phrase with a numbered link in the exact form: [n]. Wrong: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If procedural detail is insufficient, state that explicitly and give only steps supported by retrieved text; omit fabricated intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nSuggestions must be grounded in actual webpage content; propose only relevant, specific follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, concise. Every factual assertion must trace back to retrieved webpage content.\n- Restrict content to what is explicitly stated or clearly implied in the webpages; omit unsupported narrative or assumption-based reasoning.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Stay within what webpages support; infer only when logically necessary and label it as such.\n4. Cite each supporting sentence or phrase with a numbered link in the exact form: [n]. Wrong: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If procedural detail is insufficient, state that explicitly and give only steps supported by retrieved text; omit fabricated intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nSuggestions must be grounded in actual webpage content; propose only relevant, specific follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse",
+ "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "041-FILEPARS-005",
+ "name": "file_parse",
+ "description": {
+ "What it does": "Parse various file contents to extract key information.",
+ "When to use": "When you need to extract information from a file but there is no dedicated information extraction tool available.",
+ "Input": "File (TXT, PDF, Word, Excel, PNG, JPG, etc.).",
+ "Output": "Extracted information in text form.",
+ "Notes": "Only return text and do not support generating files in any format.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "解析各类文件内容并提取关键信息。",
+ "使用场景": "需要从文件中提取信息、且无专用提取工具时使用。",
+ "输入": "文件(TXT、PDF、Word、Excel、PNG、JPG 等)。",
+ "输出": "以文本形式呈现的提取信息。",
+ "注意事项": "仅返回文本,不支持生成任何格式的文件。",
+ "成本": "低。"
+ },
+ "belonging_agent": "file_parse_agent",
+ "scenes": [
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "043-VISUALIZ-001",
+ "name": "visualize_data_from_file",
+ "description": {
+ "What it does": "Create plots from data files.",
+ "When to use": "Visualize CSV/Excel/JSON data.",
+ "Input": "Data file URL.",
+ "Output": "Plots.",
+ "Notes": "Data files only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "从数据文件创建图表。",
+ "使用场景": "可视化 CSV/Excel/JSON 等数据。",
+ "输入": "数据文件 URL。",
+ "输出": "图表。",
+ "注意事项": "仅支持数据文件。",
+ "成本": "低。"
+ },
+ "belonging_agent": "visualizer_agent",
+ "scenes": [
+ "VISUALIZE_DATA",
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50005/mcp",
+ "uat": "http://qpus1389933.bohrium.tech:50005/mcp",
+ "prod": "http://qpus1389933.bohrium.tech:50002/mcp"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "043-VISUALIZ-002",
+ "name": "visualize_data_from_prompt",
+ "description": {
+ "What it does": "Create plots from prompts.",
+ "When to use": "Quick visualize data embedded in prompt.",
+ "Output": "Plots.",
+ "Notes": "Plot requests with valid data only.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "根据提示词创建图表。",
+ "使用场景": "快速可视化嵌入在提示词中的数据。",
+ "输入": "提示词(内含数据)。",
+ "输出": "图表。",
+ "注意事项": "仅支持包含有效数据的绘图请求。",
+ "成本": "低。"
+ },
+ "belonging_agent": "visualizer_agent",
+ "scenes": [
+ "VISUALIZE_DATA",
+ "UNIVERSAL"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "http://qpus1389933.bohrium.tech:50005/mcp",
+ "uat": "http://qpus1389933.bohrium.tech:50005/mcp",
+ "prod": "http://qpus1389933.bohrium.tech:50002/mcp"
+ },
+ "bypass_confirmation": true
+ },
+ {
+ "tool_id": "045-XRDPARSE-001",
+ "name": "xrd_parse_file",
+ "description": {
+ "What it does": "Parse and preprocess raw XRD data files.",
+ "When to use": "When you have XRD data to analyze.",
+ "Input": "XRD files (.xrdml, .xy, .asc, .txt).",
+ "Output": "Processed data and visualization configs.",
+ "Notes": "Not support .raw and .mdi format files.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "解析并预处理原始 XRD 数据文件。",
+ "使用场景": "有待分析的 XRD 数据时使用。",
+ "输入": "XRD 文件(.xrdml、.xy、.asc、.txt)。",
+ "输出": "处理后的数据及可视化配置。",
+ "注意事项": "不支持 .raw、.mdi 格式。",
+ "成本": "低。"
+ },
+ "belonging_agent": "xrd_agent",
+ "scenes": [
+ "XRD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "https://f0f037ca00652ac8d5509652c91f1332.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe",
+ "uat": "https://1128e9e0f1fc927bb885835e0e7a6e48.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "045-XRDPHASE-002",
+ "name": "xrd_phase_identification",
+ "description": {
+ "What it does": "Identify crystalline phases in XRD pattern.",
+ "When to use": "When you have processed XRD data.",
+ "Input": "Processed CSV file; optional composition filters.",
+ "Output": "Top matching phases and comparison chart.",
+ "Notes": "Requires processed data.",
+ "Costs": "Medium."
+ },
+ "description_cn": {
+ "工具简介": "在 XRD 谱图中鉴定晶相。",
+ "使用场景": "已有处理后的 XRD 数据时使用。",
+ "输入": "处理后的 CSV 文件;可选的组分过滤条件。",
+ "输出": "最佳匹配相及对比图。",
+ "注意事项": "需要先完成数据预处理。",
+ "成本": "中等。"
+ },
+ "belonging_agent": "xrd_agent",
+ "scenes": [
+ "XRD"
+ ],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "server": {
+ "test": "https://f0f037ca00652ac8d5509652c91f1332.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe",
+ "uat": "https://1128e9e0f1fc927bb885835e0e7a6e48.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe",
+ "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse"
+ }
+ },
+ {
+ "tool_id": "000-LLMTOOL-001",
+ "name": "llm_tool",
+ "description": {
+ "What it does": "Use LLM for general tasks.",
+ "When to use": "For LLM-based assistance.",
+ "Input": "Query or task.",
+ "Output": "LLM response.",
+ "Notes": "General purpose.",
+ "Costs": "Low."
+ },
+ "description_cn": {
+ "工具简介": "调用大语言模型处理通用任务。",
+ "使用场景": "需要基于 LLM 的辅助时使用。",
+ "输入": "查询或任务描述。",
+ "输出": "LLM 回复。",
+ "注意事项": "通用工具。",
+ "成本": "低。"
+ },
+ "belonging_agent": "llm_tool_agent",
+ "scenes": [],
+ "alternative_tools": [],
+ "summary_prompt": "",
+ "summary_cn": "",
+ "self_check": false,
+ "args_setting": null,
+ "bypass_confirmation": true
+ }
+ ],
+ "total_count": 102
+}
\ No newline at end of file
diff --git a/agents/matmaster_agent/sub_agents/mapping.py b/agents/matmaster_agent/sub_agents/mapping.py
index a974748e..14d5095d 100644
--- a/agents/matmaster_agent/sub_agents/mapping.py
+++ b/agents/matmaster_agent/sub_agents/mapping.py
@@ -112,28 +112,24 @@
from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME
from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.agent import (
Bohriumpublic_AgentBase,
- bohriumpublic_toolset,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import (
BOHRIUMPUBLIC_DATABASE_AGENT_NAME,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.agent import (
Mofdb_AgentBase,
- mofdb_toolset,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import (
MOFDB_DATABASE_AGENT_NAME,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.agent import (
Openlam_AgentBase,
- openlam_toolset,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import (
OPENLAM_DATABASE_AGENT_NAME,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.agent import (
Optimade_AgentBase,
- optimade_toolset,
)
from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import (
OPTIMADE_DATABASE_AGENT_NAME,
@@ -219,6 +215,13 @@
from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import (
StructureGenerateAgentName,
)
+from agents.matmaster_agent.sub_agents.structure_search_agent.agent import (
+ StructureSearchAgentBase,
+ structure_search_toolset,
+)
+from agents.matmaster_agent.sub_agents.structure_search_agent.constant import (
+ STRUCTURE_SEARCH_AGENT_NAME,
+)
from agents.matmaster_agent.sub_agents.superconductor_agent.agent import (
SuperconductorAgent,
superconductor_toolset,
@@ -293,10 +296,7 @@
'polymer_kb_toolset': polymer_kb_toolset,
'steel_kb_toolset': steel_kb_toolset,
'steel_predict_toolset': steel_predict_toolset,
- 'optimade_toolset': optimade_toolset,
- 'bohriumpublic_toolset': bohriumpublic_toolset,
- 'openlam_toolset': openlam_toolset,
- 'mofdb_toolset': mofdb_toolset,
+ 'structure_search_toolset': structure_search_toolset,
'organic_reaction_toolset': organic_reaction_toolset,
'perovskite_toolset': perovskite_toolset,
'piloteye_electro_toolset': piloteye_electro_toolset,
@@ -337,6 +337,7 @@
BOHRIUMPUBLIC_DATABASE_AGENT_NAME: Bohriumpublic_AgentBase,
MOFDB_DATABASE_AGENT_NAME: Mofdb_AgentBase,
OPENLAM_DATABASE_AGENT_NAME: Openlam_AgentBase,
+ STRUCTURE_SEARCH_AGENT_NAME: StructureSearchAgentBase,
ORGANIC_REACTION_AGENT_NAME: OragnicReactionAgent,
PerovskiteAgentName: PerovskiteAgent,
PILOTEYE_ELECTRO_AGENT_NAME: PiloteyeElectroAgent,
@@ -380,6 +381,7 @@ class MatMasterSubAgentsEnum(str, Enum):
BohriumPublicDatabaseAgent = BOHRIUMPUBLIC_DATABASE_AGENT_NAME
MOFDBDatabaseAgent = MOFDB_DATABASE_AGENT_NAME
OpenLAMDatabaseAgent = OPENLAM_DATABASE_AGENT_NAME
+ StructureSearchAgent = STRUCTURE_SEARCH_AGENT_NAME
OrganicReactionAgent = ORGANIC_REACTION_AGENT_NAME
PerovskiteAgent = PerovskiteAgentName
PiloteyeElectroAgent = PILOTEYE_ELECTRO_AGENT_NAME
diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/__init__.py b/agents/matmaster_agent/sub_agents/structure_search_agent/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/agent.py b/agents/matmaster_agent/sub_agents/structure_search_agent/agent.py
new file mode 100644
index 00000000..0d98ae55
--- /dev/null
+++ b/agents/matmaster_agent/sub_agents/structure_search_agent/agent.py
@@ -0,0 +1,36 @@
+from dp.agent.adapter.adk import CalculationMCPToolset
+from google.adk.agents import BaseAgent
+from google.adk.tools.mcp_tool.mcp_session_manager import SseServerParams
+
+from agents.matmaster_agent.constant import LOCAL_EXECUTOR, BohriumStorge
+from agents.matmaster_agent.core_agents.public_agents.sync_agent import (
+ BaseSyncAgentWithToolValidator,
+)
+from agents.matmaster_agent.sub_agents.MrDice_agent.constant import MrDice_Agent_Name
+from agents.matmaster_agent.sub_agents.structure_search_agent.constant import (
+ STRUCTURE_SEARCH_AGENT_NAME,
+ STRUCTURE_SEARCH_URL,
+)
+
+structure_search_toolset = CalculationMCPToolset(
+ connection_params=SseServerParams(url=STRUCTURE_SEARCH_URL),
+ storage=BohriumStorge,
+ executor=LOCAL_EXECUTOR,
+)
+
+
+class StructureSearchAgentBase(BaseSyncAgentWithToolValidator):
+ def __init__(self, llm_config):
+ super().__init__(
+ model=llm_config.default_litellm_model,
+ name=STRUCTURE_SEARCH_AGENT_NAME,
+ description='',
+ instruction='',
+ tools=[structure_search_toolset],
+ render_tool_response=True,
+ supervisor_agent=MrDice_Agent_Name,
+ )
+
+
+def init_structure_search_agent(llm_config, name_suffix='') -> BaseAgent:
+ return StructureSearchAgentBase(llm_config, name_suffix=name_suffix)
diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py
new file mode 100644
index 00000000..4baea51e
--- /dev/null
+++ b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py
@@ -0,0 +1,8 @@
+from agents.matmaster_agent.constant import CURRENT_ENV
+
+STRUCTURE_SEARCH_AGENT_NAME = 'structure_search_agent'
+
+if CURRENT_ENV in ['test', 'uat']:
+ STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50001/sse'
+else:
+ STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50002/sse'
diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py
new file mode 100644
index 00000000..7094dde1
--- /dev/null
+++ b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py
@@ -0,0 +1,218 @@
+StructureSearchAgentToolDescription = (
+ 'What it does: Retrieve structures across multiple sources (BohriumPublic / OpenLAM / OPTIMADE providers) and run advanced SQL queries on MOFdb.\n'
+ 'When to use: Any "find crystal structures" request, including formula/elements/space group/band gap filters, time/energy filters (OpenLAM), cross-provider searches (OPTIMADE), or MOF-specific analytics (MOFdb SQL).\n'
+ 'Prerequisites / Inputs: Provide either structured filters (formula/elements/space group ranges), OpenLAM filters (energy/time), OPTIMADE filter strings, or MOFdb SQL.\n'
+ 'Outputs: Structures or metadata in CIF/JSON; MOFdb returns SQL rows and optional structure file links.\n'
+ 'Cannot do / Limits: OPTIMADE filters must follow the standard grammar; MOFdb is MOF-specific; OpenLAM does not provide space group/band gap.\n'
+ 'Cost / Notes: Default to BohriumPublic for speed; use OPTIMADE for flexible/cross-provider retrieval; use MOFdb for complex MOF analytics.'
+)
+
+StructureSearchAgentArgsSetting = """
+## PARAMETER CONSTRUCTION GUIDE
+
+## Do not ask the user for confirmation; directly start retrieval when a query is made.
+
+## 0) ROUTING: WHICH TOOL TO CALL
+You have access to multiple retrieval tools. Choose ONE based on the user intent:
+
+### A) BohriumPublic (fast structured filters)
+when the user asks for:
+- formula / elements / space group / atom count / predicted formation energy / band gap
+- and they do NOT require cross-provider search or complex boolean logic
+
+### B) OpenLAM (energy / time filters)
+when the user asks for:
+- OpenLAM specifically, OR upload/submission time filters, OR OpenLAM energy range filters
+Limits: OpenLAM does NOT support space group, band gap, or "elements list" filters.
+
+### C) OPTIMADE (cross-provider, flexible composition filters)
+when the user needs:
+- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia
+- cross-provider search (e.g., "search in mp/cod/oqmd..."), OR
+- flexible logical composition constraints, OR
+- structure-type family queries (anonymous formula like AB2C4), OR
+- 2D/1D/0D constraints (nperiodic_dimensions)
+
+### D) MOFdb (MOF-only, complex analytics)
+when the user asks for:
+- MOF-specific properties (surface area, pore metrics, adsorption/isotherms, heats), OR
+- advanced analysis requiring multi-table joins / ranking / statistics
+
+## 1) BOHRIUMPUBLIC PARAMETERS (fetch_bohrium_crystals)
+### FILTER OPTIONS
+- **Formula**: chemical formula string (e.g., `"CoH12(BrO3)2"`)
+- **Elements**: list of required elements (e.g., `["Co","O"]`)
+- **Match mode** (applies to both `formula` and `elements`):
+ - `0` = contains (e.g., formula `"Co"` matches `"CoO"`, `"CoH12(BrO3)2"`; elements `["Co"]` matches materials containing Co + anything else)
+ - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)
+- **Space group**: use the space group number (e.g., `14` for P2₁/c)
+- **Atom count range**: filter by number of atoms in the unit cell, e.g. `["10","100"]`
+- **Predicted formation energy**: range filter in eV, e.g. `["-2","0"]`
+- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. ["0","3"], ["1","100"]
+- **Result limit**: maximum number of results (`n_results`)
+- **Output formats**:
+ - `"cif"` → crystallographic structure files
+ - `"json"` → complete metadata
+
+## HOW TO CHOOSE PARAMETERS
+- If user specifies a **formula** → set `formula` and choose `match_mode`:
+ - `0` if the user means "contains fragment"
+ - `1` if the user means "exact formula"
+- If user specifies **elements** → set `elements` and choose `match_mode`:
+ - `0` if the user means "must include these elements"
+ - `1` if the user means "must have exactly these elements and nothing else"
+- If user specifies a **space group number** → set `spacegroup_number`
+- If user specifies an **atom count range** → set `atom_count_range`
+- If user specifies **formation energy or band gap ranges** → set the corresponding ranges
+- If the user requests **metadata only** → use `output_formats=['json']`
+- If the user requests **downloadable crystal files** → use `output_formats=['cif']`
+
+## PARAMETER EXAMPLES
+1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回
+ → Tool: fetch_structures_from_db
+ formula: "SrTiO3"
+ match_mode: 1
+ output_formats: ["json"]
+
+2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构
+ → Tool: fetch_structures_from_db
+ elements: ["O"]
+ match_mode: 0
+ band_gap_range: ["2","100"]
+ n_results: 3
+
+3) 用户:找出空间群编号 14,原子数 50–100 的晶体
+ → Tool: fetch_structures_from_db
+ spacegroup_number: 14
+ atom_count_range: ["50","100"]
+
+4) 用户:检索 FeNi 合金的结构
+ → Tool: fetch_structures_from_db
+ elements: ["Fe","Ni"] # 合金只含有Fe和Ni元素,不能含有其他元素
+ match_mode: 1 # 合金需要精确匹配
+
+5) 用户:找所有化学式中包含 SiO3 的材料
+ → Tool: fetch_structures_from_db
+ formula: "SiO3"
+ match_mode: 0
+
+## 2) OPENLAM PARAMETERS (fetch_structures_from_db)
+### FILTER OPTIONS
+- **Formula**: chemical formula string (e.g., `"Fe2O3"`)
+- **Energy**: `min_energy` and/or `max_energy` in eV
+- **Submission time**: ISO UTC date-time (`min_submission_time`, `max_submission_time`)
+- **Result limit**: `n_results`
+- **Output formats**: `"cif"` or `"json"`
+
+### EXAMPLES
+1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF
+ → Tool: fetch_structures_from_db
+ formula: "Fe2O3"
+ n_results: 5
+ output_formats: ["cif"]
+
+2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料
+ → Tool: fetch_structures_from_db
+ min_energy: -10.0
+ max_energy: 20.0
+ min_submission_time: "2024-01-01T00:00:00Z"
+
+## 3) MOFDB PARAMETERS (fetch_structures_from_db)
+### INPUT
+- **sql**: SQL query string (use CTEs, window functions, joins as needed)
+- **n_results**: controls SQL LIMIT (when applicable) and returned structures
+
+### EXAMPLE
+用户:统计各数据库的 MOF 数量
+→ Tool: fetch_structures_from_db
+ sql: "SELECT database, COUNT(*) AS count FROM mofs GROUP BY database ORDER BY count DESC"
+
+## 4) OPTIMADE PARAMETERS (fetch_structures_from_db)
+### MINIMUM SAFE OPTIMADE SYNTAX RULES (DO NOT VIOLATE)
+- Allowed operators ONLY: =, !=, <, <=, >, >=, AND, OR, NOT, HAS, HAS ALL, HAS ANY, IS KNOWN, IS UNKNOWN
+- All strings MUST be in double quotes: "Fe", "SiO2"
+- Do NOT use CONTAINS / LIKE / IN / regex / invented fields
+- To express "only these elements": use `elements HAS ALL ... AND nelements = N`
+
+### TOOL CHOICE
+- If user gives space group number → `fetch_structures_from_db(base_filter, spg_number, ...)`
+- If user gives band gap range → `fetch_structures_from_db(base_filter, min_bg, max_bg, ...)`
+- Else → `fetch_structures_from_db(filter, ...)`
+
+### EXAMPLES
+1) 用户:找空间群 225 的 MgO(rocksalt),返回 CIF
+ → Tool: fetch_structures_from_db
+ base_filter: chemical_formula_reduced="MgO"
+ spg_number: 225
+ as_format: "cif"
+
+2) 用户:找含 Al 且带隙 1–2 eV 的材料,返回 JSON
+ → Tool: fetch_structures_from_db
+ base_filter: elements HAS "Al"
+ min_bg: 1.0
+ max_bg: 2.0
+ as_format: "json"
+"""
+
+StructureSearchAgentSummaryPrompt = """
+## RESPONSE FORMAT
+
+**If the tool response indicates `by_source` = "mofdb"** (MOFdb results):
+1. Brief explanation of the SQL query used
+2. Markdown table of retrieved MOFs with relevant columns
+3. Output directory path for download/archive
+4. Key findings from results (if applicable)
+
+**If the tool response indicates `by_source` = "optimade"** (OPTIMADE results):
+The response must always have three parts in order:
+1. A brief explanation of the applied filters and providers.
+2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`).
+3. A download link for an archive (.tgz) if provided by the tool.
+Each table must always include the following nine columns in this fixed order:
+(1) Formula (`attributes.chemical_formula_reduced`)
+(2) Elements (infer from formula)
+(3) Atom count (if available; else **Not Provided**)
+(4) Space group (`Symbol(Number)` if possible; else **Not Provided**)
+(5) Energy / Formation energy (if available; else **Not Provided**)
+(6) Band gap (if available; else **Not Provided**)
+(7) Download link (CIF or JSON file)
+(8) Provider (infer from provider URL)
+(9) ID (`id`)
+Missing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table.
+
+**If the tool response indicates `by_source` = "openlam"** (OpenLAM results):
+The response must always include:
+1. ✅ A brief explanation of the filters applied
+2. 📊 A Markdown table of the retrieved structures
+ - Columns (fixed order):
+ (1) Formula (`formula`)
+ (2) Elements (deduced from `formula`)
+ (3) Atom count → **Not Provided**
+ (4) Download link (CIF/JSON, based on requested output)
+ (5) Source database → always `"OpenLAM"`
+ (6) ID (`id`)
+ - Fill missing values with exactly **Not Provided**
+ - Number of rows **must exactly equal** `n_found`
+3. 📦 The `output_dir` path returned by the tool (for download/archive)
+If `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.
+
+**Otherwise** (BohriumPublic or other sources):
+The response must always include:
+1. ✅ A brief explanation of the filters applied
+2. 📊 A Markdown table of the retrieved structures
+ - Columns (fixed order):
+ (1) Formula (`formula`)
+ (2) Elements (deduced from `formula`)
+ (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)
+ (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)
+ (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)
+ (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)
+ (7) Download link (CIF/JSON, based on `output_formats`)
+ (8) Source database → always `"BohriumPublic"`
+ (9) ID (`id`)
+ - Fill missing values with exactly **Not Provided**
+ - Number of rows **must exactly equal** `n_found`
+3. 📦 The `output_dir` path returned by the tool (for download/archive)
+
+If `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.
+"""
diff --git a/agents/matmaster_agent/sub_agents/tools.py b/agents/matmaster_agent/sub_agents/tools.py
index 7daf5437..da652576 100644
--- a/agents/matmaster_agent/sub_agents/tools.py
+++ b/agents/matmaster_agent/sub_agents/tools.py
@@ -53,42 +53,6 @@
HEAKbAgentToolDescription,
)
from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME
-from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import (
- BOHRIUMPUBLIC_DATABASE_AGENT_NAME,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.prompt import (
- BohriumPublicAgentArgsSetting,
- BohriumPublicAgentSummaryPrompt,
- BohriumPublicAgentToolDescription,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import (
- MOFDB_DATABASE_AGENT_NAME,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.prompt import (
- MofdbAgentArgsSetting,
- MofdbAgentSummaryPrompt,
- MofdbAgentToolDescription,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import (
- OPENLAM_DATABASE_AGENT_NAME,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.prompt import (
- OpenlamAgentArgsSetting,
- OpenlamAgentSummaryPrompt,
- OpenlamAgentToolDescription,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import (
- OPTIMADE_DATABASE_AGENT_NAME,
-)
-from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.prompt import (
- OptimadeAgentSummaryPrompt,
- OptimadeBandgapArgsSetting,
- OptimadeBandgapToolDescription,
- OptimadeFilterArgsSetting,
- OptimadeFilterToolDescription,
- OptimadeSpgArgsSetting,
- OptimadeSpgToolDescription,
-)
from agents.matmaster_agent.sub_agents.NMR_agent.constant import (
NMR_AGENT_NAME,
)
@@ -147,6 +111,14 @@
from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import (
StructureGenerateAgentName,
)
+from agents.matmaster_agent.sub_agents.structure_search_agent.constant import (
+ STRUCTURE_SEARCH_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.structure_search_agent.prompt import (
+ StructureSearchAgentArgsSetting,
+ StructureSearchAgentSummaryPrompt,
+ StructureSearchAgentToolDescription,
+)
from agents.matmaster_agent.sub_agents.superconductor_agent.constant import (
SuperconductorAgentName,
)
@@ -829,78 +801,15 @@
'summary_prompt': STEELPredictAgentSummaryPrompt,
'self_check': False,
},
- 'fetch_structures_with_filter': {
- 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': OptimadeFilterToolDescription,
- 'args_setting': f"{OptimadeFilterArgsSetting}",
- 'alternative': [
- 'fetch_bohrium_crystals',
- 'fetch_openlam_structures',
- 'web-search',
- ],
- 'summary_prompt': OptimadeAgentSummaryPrompt,
- 'self_check': True,
- },
- 'fetch_structures_with_spg': {
- 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': OptimadeSpgToolDescription,
- 'args_setting': f"{OptimadeSpgArgsSetting}",
- 'alternative': [
- 'fetch_bohrium_crystals',
- 'fetch_structures_with_filter',
- 'web-search',
- ],
- 'summary_prompt': OptimadeAgentSummaryPrompt,
- 'self_check': True,
- },
- 'fetch_structures_with_bandgap': {
- 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': OptimadeBandgapToolDescription,
- 'args_setting': f"{OptimadeBandgapArgsSetting}",
- 'alternative': [
- 'fetch_bohrium_crystals',
- 'fetch_structures_with_filter',
- 'web-search',
- ],
- 'summary_prompt': OptimadeAgentSummaryPrompt,
- 'self_check': True,
- },
- 'fetch_bohrium_crystals': {
- 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': BohriumPublicAgentToolDescription,
- 'args_setting': f"{BohriumPublicAgentArgsSetting}",
+ 'fetch_structures_from_db': {
+ 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME,
+ 'scene': [SceneEnum.DATABASE_SEARCH],
+ 'description': StructureSearchAgentToolDescription,
+ 'args_setting': f"{StructureSearchAgentArgsSetting}",
'alternative': [
- 'fetch_structures_with_filter',
- 'web-search',
- 'fetch_openlam_structures',
- ],
- 'summary_prompt': BohriumPublicAgentSummaryPrompt,
- 'self_check': True,
- },
- 'fetch_openlam_structures': {
- 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': OpenlamAgentToolDescription,
- 'args_setting': f"{OpenlamAgentArgsSetting}",
- 'alternative': [
- 'fetch_structures_with_filter',
'web-search',
- 'fetch_openlam_structures',
],
- 'summary_prompt': OpenlamAgentSummaryPrompt,
- 'self_check': True,
- },
- 'fetch_mofs_sql': {
- 'belonging_agent': MOFDB_DATABASE_AGENT_NAME,
- 'scene': [SceneEnum.DATABASE_SEARCH, SceneEnum.STRUCTURE_GENERATE],
- 'description': MofdbAgentToolDescription,
- 'args_setting': f"{MofdbAgentArgsSetting}",
- 'alternative': ['web-search'],
- 'summary_prompt': MofdbAgentSummaryPrompt,
+ 'summary_prompt': StructureSearchAgentSummaryPrompt,
'self_check': True,
},
'calculate_reaction_profile': {
diff --git a/agents/matmaster_agent/sub_agents/tools_opt.py b/agents/matmaster_agent/sub_agents/tools_opt.py
new file mode 100644
index 00000000..5ae9463f
--- /dev/null
+++ b/agents/matmaster_agent/sub_agents/tools_opt.py
@@ -0,0 +1,3416 @@
+from datetime import date
+
+from agents.matmaster_agent.flow_agents.scene_agent.model import SceneEnum
+from agents.matmaster_agent.prompt import (
+ ALIAS_SEARCH_PROMPT,
+ DPA_MODEL_BRANCH_SELECTION,
+ STRUCTURE_BUILDING_SAVENAME,
+)
+from agents.matmaster_agent.sub_agents.ABACUS_agent.constant import ABACUS_AGENT_NAME
+from agents.matmaster_agent.sub_agents.apex_agent.constant import ApexAgentName
+from agents.matmaster_agent.sub_agents.built_in_agent.file_parse_agent.constant import (
+ FILE_PARSE_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.built_in_agent.llm_tool_agent.constant import (
+ TOOL_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.chembrain_agent.unielf_agent.constant import (
+ UniELFAgentName,
+)
+from agents.matmaster_agent.sub_agents.CompDART_agent.constant import (
+ COMPDART_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.convexhull_agent.constant import (
+ ConvexHullAgentName,
+)
+from agents.matmaster_agent.sub_agents.document_parser_agent.constant import (
+ DocumentParserAgentName,
+)
+from agents.matmaster_agent.sub_agents.doe_agent.constant import (
+ DOE_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.DPACalculator_agent.constant import (
+ DPACalulator_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.Electron_Microscope_agent.constant import (
+ Electron_Microscope_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.finetune_dpa_agent.constant import (
+ FinetuneDPAAgentName,
+)
+from agents.matmaster_agent.sub_agents.HEA_assistant_agent.constant import (
+ HEA_assistant_AgentName,
+)
+from agents.matmaster_agent.sub_agents.HEACalculator_agent.constant import (
+ HEACALCULATOR_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.HEAkb_agent.constant import (
+ HEA_KB_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.HEAkb_agent.prompt import (
+ HEAKbAgentArgsSetting,
+ HEAKbAgentSummaryPrompt,
+ HEAKbAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME
+from agents.matmaster_agent.sub_agents.structure_search_agent.constant import (
+ STRUCTURE_SEARCH_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.structure_search_agent.prompt import (
+ StructureSearchAgentArgsSetting,
+ StructureSearchAgentSummaryPrompt,
+ StructureSearchAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.NMR_agent.constant import (
+ NMR_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.organic_reaction_agent.constant import (
+ ORGANIC_REACTION_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.perovskite_agent.constant import (
+ PerovskiteAgentName,
+)
+from agents.matmaster_agent.sub_agents.Physical_adsorption_agent.constant import (
+ Physical_Adsorption_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.piloteye_electro_agent.constant import (
+ PILOTEYE_ELECTRO_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.POLYMERkb_agent.constant import (
+ POLYMER_KB_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.POLYMERkb_agent.prompt import (
+ POLYMERKbAgentArgsSetting,
+ POLYMERKbAgentSummaryPrompt,
+ POLYMERKbAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.ScienceNavigator_agent.constant import (
+ SCIENCE_NAVIGATOR_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.ScienceNavigator_agent.prompt import (
+ PAPER_SEARCH_AGENT_INSTRUCTION,
+ WEB_SEARCH_AGENT_INSTRUCTION,
+ WEBPAGE_PARSING_AGENT_INSTRUCTION,
+)
+from agents.matmaster_agent.sub_agents.SSEkb_agent.constant import (
+ SSE_KB_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.SSEkb_agent.prompt import (
+ SSEKbAgentArgsSetting,
+ SSEKbAgentSummaryPrompt,
+ SSEKbAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.STEEL_PREDICT_agent.constant import (
+ STEEL_PREDICT_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.STEEL_PREDICT_agent.prompt import (
+ STEELPredictAgentArgsSetting,
+ STEELPredictAgentSummaryPrompt,
+ STEELPredictAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.STEELkb_agent.constant import (
+ STEEL_KB_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.STEELkb_agent.prompt import (
+ STEELKbAgentArgsSetting,
+ STEELKbAgentSummaryPrompt,
+ STEELKbAgentToolDescription,
+)
+from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import (
+ StructureGenerateAgentName,
+)
+from agents.matmaster_agent.sub_agents.superconductor_agent.constant import (
+ SuperconductorAgentName,
+)
+from agents.matmaster_agent.sub_agents.thermoelectric_agent.constant import (
+ ThermoelectricAgentName,
+)
+from agents.matmaster_agent.sub_agents.TPD_agent.constant import (
+ TPD_AGENT_NAME,
+)
+from agents.matmaster_agent.sub_agents.traj_analysis_agent.constant import (
+ TrajAnalysisAgentName,
+)
+from agents.matmaster_agent.sub_agents.visualizer_agent.constant import (
+ VisualizerAgentName,
+)
+from agents.matmaster_agent.sub_agents.XRD_agent.constant import (
+ XRD_AGENT_NAME,
+)
+
+TODAY = date.today()
+
+
+ALL_TOOLS = {
+ 'abacus_vacancy_formation_energy': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.VACANCY_FORMATION_ENERGY],
+ 'description': (
+ 'What it does: Calculate formation energy of non-charged vacancy in metal atoms using DFT.\n'
+ 'When to use: When you need vacancy formation energy for metal structures.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.\n'
+ 'Outputs: Vacancy formation energy.\n'
+ 'Cannot do / Limits: Only non-charged vacancy of metal atoms; requires supercell for calculation.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': ['apex_calculate_vacancy'],
+ 'self_check': False,
+ },
+ 'abacus_vacancy_formation_energy_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.VACANCY_FORMATION_ENERGY],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算金属原子中非带电空位的形成能。\n'
+ '使用场景:当需要计算金属结构的空位形成能时使用。\n'
+ 'ABACUS,空位形成能\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:如泛函、自旋极化、DFT+U、磁矩等。\n'
+ '2. 输出:空位形成能。\n'
+ '3. 注意事项:仅支持金属原子的非带电空位;计算需使用超胞。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': ['apex_calculate_vacancy'],
+ 'self_check': False,
+ },
+ 'abacus_phonon_dispersion': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.PHONON],
+ 'description': (
+ 'What it does: Calculate phonon dispersion curve using DFT.\n'
+ 'When to use: When you need phonon properties and thermal corrections for a structure.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.\n'
+ 'Outputs: Plot of phonon dispersion band structure and thermal corrections.\n'
+ 'Cannot do / Limits: Requires DFT; may need supercell for accuracy.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': ['apex_calculate_phonon', 'calculate_phonon'],
+ 'self_check': False,
+ },
+ 'abacus_phonon_dispersion_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.PHONON],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算声子色散曲线。\n'
+ '使用场景:当需要结构的声子性质和热修正时使用。\n'
+ 'ABACUS,声子\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:可选超胞、高对称点、k 路径。\n'
+ '2. 输出:声子色散能带结构图和热修正。\n'
+ '3. 注意事项:需要 DFT 计算;可能需要超胞以提高精度。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': ['apex_calculate_phonon', 'calculate_phonon'],
+ 'self_check': False,
+ },
+ 'abacus_cal_band': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.BAND],
+ 'description': (
+ 'What it does: Calculate electronic band structure using DFT.\n'
+ 'When to use: When you need band structure and band gap for a material.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.\n'
+ 'Outputs: Plot of band structure and band gap.\n'
+ 'Cannot do / Limits: DFT-based; supports PYATB or ABACUS nscf.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_cal_band_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.BAND],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算电子能带结构。\n'
+ '使用场景:当需要材料的能带结构和带隙时使用。\n'
+ 'ABACUS,能带\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:可选高对称点、k 路径。\n'
+ '2. 输出:能带结构图和带隙。\n'
+ '3. 注意事项:基于 DFT;支持 PYATB 或 ABACUS nscf。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_calculation_scf': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.SCF],
+ 'description': (
+ 'What it does: Perform SCF calculation to compute energy using DFT.\n'
+ 'When to use: When you need ground state energy for a structure.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n'
+ 'Outputs: Energy.\n'
+ 'Cannot do / Limits: Basic SCF; no relaxation or other properties.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_calculation_scf_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.SCF],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)执行自洽场(SCF)计算以计算能量。\n'
+ '使用场景:当需要结构的基态能量时使用。\n'
+ 'ABACUS,SCF\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数。\n'
+ '2. 输出:能量。\n'
+ '3. 注意事项:基础 SCF 计算;不包含弛豫或其他性质。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_dos_run': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.DENSITY_OF_STATES],
+ 'description': (
+ 'What it does: Calculate DOS and PDOS using DFT.\n'
+ 'When to use: When you need density of states for electronic structure analysis.\n'
+ "Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').\n"
+ 'Outputs: Plots for DOS and PDOS.\n'
+ 'Cannot do / Limits: DFT-based; requires relaxation support.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_dos_run_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.DENSITY_OF_STATES],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算态密度(DOS)和投影态密度(PDOS)。\n'
+ '使用场景:当需要态密度进行电子结构分析时使用。\n'
+ 'ABACUS,态密度\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT参数,PDOS 模式("species"、"species+shell"、"species+orbital")。\n'
+ '2. 输出:DOS 和 PDOS 图。\n'
+ '3. 注意事项:基于 DFT;需要弛豫支持。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_badercharge_run': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.BADER_CHARGE_ANALYSIS],
+ 'description': (
+ 'What it does: Calculate Bader charge using DFT.\n'
+ 'When to use: When you need atomic charge analysis.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n'
+ 'Outputs: Bader charge for each atom.\n'
+ 'Cannot do / Limits: DFT-based; requires charge density calculation.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_badercharge_run_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.BADER_CHARGE_ANALYSIS],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算 Bader 电荷。\n'
+ '使用场景:当需要进行原子电荷分析时使用。\n'
+ 'ABACUS,Bader 电荷\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数。\n'
+ '2. 输出:每个原子的 Bader 电荷。\n'
+ '3. 注意事项:基于 DFT;需要电荷密度计算。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_do_relax': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.OPTIMIZE_STRUCTURE],
+ 'description': (
+ 'What it does: Perform geometry optimization (relaxation) using DFT.\n'
+ 'When to use: When you need optimized structure.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).\n'
+ 'Outputs: Relaxed structure file.\n'
+ 'Cannot do / Limits: DFT-based relaxation.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['apex_optimize_structure', 'optimize_structure'],
+ 'self_check': False,
+ },
+ 'abacus_do_relax_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.OPTIMIZE_STRUCTURE],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)执行几何优化(弛豫)。\n'
+ '使用场景:当需要优化结构时使用。\n'
+ 'ABACUS,结构优化\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数;弛豫设置(晶胞、步数、方法、轴)。\n'
+ '2. 输出:弛豫后的结构文件。\n'
+ '3. 注意事项:基于 DFT 的弛豫。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': ['apex_optimize_structure', 'optimize_structure'],
+ 'self_check': False,
+ },
+ 'abacus_cal_work_function': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.WORK_FUNCTION],
+ 'description': (
+ 'What it does: Calculate work function of slabs and 2D materials using DFT.\n'
+ 'When to use: When you need work function for surface materials.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.\n'
+ 'Outputs: Plot of electrostatic potential and work function.\n'
+ 'Cannot do / Limits: For slabs and 2D materials; polar slabs have two work functions.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_cal_work_function_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.WORK_FUNCTION],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算表面和二维材料的功函数。\n'
+ '使用场景:当需要表面材料的功函数时使用。\n'
+ 'ABACUS,功函数\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数;真空方向、偶极修正。\n'
+ '2. 输出:静电势和功函数图。\n'
+ '3. 注意事项:适用于表面和二维材料;极性表面有两个功函数。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_run_md': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.MOLECULAR_DYNAMICS],
+ 'description': (
+ 'What it does: Perform ab-initio molecular dynamics using DFT.\n'
+ 'When to use: When you need MD simulation with DFT accuracy.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.\n'
+ 'Outputs: ASE trajectory file.\n'
+ 'Cannot do / Limits: DFT-based MD; expensive for long simulations.\n'
+ 'Cost / Notes: High DFT cost; supports relaxation before calculation.'
+ ),
+ 'alternative': ['run_molecular_dynamics'],
+ 'self_check': False,
+ },
+ 'abacus_run_md_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.MOLECULAR_DYNAMICS],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)执行从头算分子动力学。\n'
+ '使用场景:当需要具有 DFT 精度的分子动力学模拟时使用。\n'
+ 'ABACUS,分子动力学模拟\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数;系综、步数、时间步长、温度。\n'
+ '2. 输出:ASE 轨迹文件。\n'
+ '3. 注意事项:基于 DFT 的分子动力学;长时间模拟成本高。\n'
+ '4. 成本/备注:高 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': ['run_molecular_dynamics'],
+ 'self_check': False,
+ },
+ 'abacus_cal_elf': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.Electron_Localization_Function],
+ 'description': (
+ 'What it does: Calculate electron localization function using DFT.\n'
+ 'When to use: When you need ELF for bonding analysis.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n'
+ 'Outputs: Cube file of ELF.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_cal_elf_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.Electron_Localization_Function],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算电子局域化函数(ELF)。\n'
+ '使用场景:当需要 ELF 进行键合分析时使用。\n'
+ 'ABACUS,电子局域函数\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数。\n'
+ '2. 输出:ELF 的 Cube 文件。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'abacus_eos': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.EOS],
+ 'description': (
+ 'What it does: Calculate equation of state using DFT.\n'
+ 'When to use: When you need EOS curve and bulk properties.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n'
+ 'Outputs: Plot of fitted EOS and fitting parameters.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': ['apex_calculate_eos'],
+ 'self_check': False,
+ },
+ 'abacus_eos_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.EOS],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算状态方程。\n'
+ '使用场景:当需要状态方程曲线和体相性质时使用。\n'
+ 'ABACUS,EOS\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数。\n'
+ '2. 输出:拟合的状态方程图和拟合参数。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': ['apex_calculate_eos'],
+ 'self_check': False,
+ },
+ 'abacus_cal_elastic': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ 'What it does: Calculate elastic properties using DFT.\n'
+ 'When to use: When you need elastic constants and moduli.\n'
+ 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n'
+ 'Outputs: Elastic tensor (Voigt notation), bulk/shear/Young\'s modulus, Poisson ratio.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.'
+ ),
+ 'alternative': ['apex_calculate_elastic', 'calculate_elastic_constants'],
+ 'self_check': False,
+ },
+ 'abacus_cal_elastic_zh': {
+ 'belonging_agent': ABACUS_AGENT_NAME,
+ 'scene': [SceneEnum.ABACUS, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ '功能:使用密度泛函理论(DFT)计算弹性性质。\n'
+ '使用场景:当需要弹性常数和模量时使用。\n'
+ 'ABACUS,弹性常数\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n'
+ ' 计算参数:DFT 参数。\n'
+ '2. 输出:弹性张量(Voigt 记号)、体积/剪切/杨氏模量、泊松比。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。'
+ ),
+ 'alternative': ['apex_calculate_elastic', 'calculate_elastic_constants'],
+ 'self_check': False,
+ },
+ 'apex_calculate_vacancy': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.VACANCY_FORMATION_ENERGY],
+ 'description': (
+ 'What it does: Evaluate vacancy formation energies by relaxing supercells after creating vacancies internally (removes one atom from a pristine supercell).\n'
+ 'When to use: When you need vacancy formation energies for a material starting from a pristine crystal.\n'
+ 'Prerequisites / Inputs: Pristine (defect-free) structure file of the bulk crystal (unit cell or supercell). Do NOT provide a structure that already contains vacancies/defects (missing atoms, partial occupancies, disordered sites), because the tool assumes a complete bulk lattice and will construct vacancies itself; defected inputs may cause errors or invalid energies.\n'
+ 'Outputs: Vacancy formation energies.\n'
+ 'Cannot do / Limits: DFT-based.; does not accept pre-defected structures.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['abacus_vacancy_formation_energy'],
+ 'self_check': False,
+ },
+ 'apex_calculate_vacancy_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.VACANCY_FORMATION_ENERGY],
+ 'description': (
+ '功能:通过在内部创建空位后弛豫超胞(从完整超胞中移除一个原子)来评估空位形成能。\n'
+ '使用场景:当需要从完整晶体开始计算材料的空位形成能时使用。\n'
+ 'APEX,空位形成能\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:完整(无缺陷)的体相晶体结构文件(原胞或超胞)。\n'
+ '2. 输出:空位形成能。\n'
+ '3. 注意事项:基于 DFT;不要提供已包含空位/缺陷的结构(缺失原子、部分占位、无序位点),该工具假设完整的体相晶格并会自行构建空位;提供已有缺陷的结构可能导致错误或无效的能量。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': ['abacus_vacancy_formation_energy'],
+ 'self_check': False,
+ },
+ 'apex_optimize_structure': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.OPTIMIZE_STRUCTURE, SceneEnum.APEX],
+ 'description': (
+ 'What it does: Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.\n'
+ 'When to use: When you need optimized crystal structure, especially for alloy systems.\n'
+ 'Prerequisites / Inputs: Structure file.\n'
+ 'Outputs: Optimized structure.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['abacus_do_relax', 'optimize_structure'],
+ 'self_check': False,
+ },
+ 'apex_optimize_structure_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.OPTIMIZE_STRUCTURE, SceneEnum.APEX],
+ 'description': (
+ '功能:执行晶体的几何优化,弛豫原子位置并可选择弛豫原胞。\n'
+ '使用场景:当需要优化的晶体结构时使用,特别适用于合金体系。\n'
+ 'APEX,结构优化\n'
+ '使用方法:\n'
+ '1. 输入:结构文件。\n'
+ '2. 输出:优化后的结构。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': ['abacus_do_relax', 'optimize_structure'],
+ 'self_check': False,
+ },
+ 'apex_calculate_interstitial': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.INTERSTITIAL_FORMATION_ENERGY],
+ 'description': (
+ 'What it does: Insert interstitial atoms into a host lattice to compute formation energies across candidate sites (generated internally).\n'
+ 'When to use: When you need interstitial formation energies starting from a defect-free bulk crystal.\n'
+ 'Prerequisites / Inputs: Pristine (defect-free) host lattice structure and interstitial atoms.\n The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies.\n'
+ 'Outputs: Interstitial formation energies for candidate sites.\n'
+ 'Cannot do / Limits: DFT-based. Not intended for pre-defected host structures.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'apex_calculate_interstitial_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.INTERSTITIAL_FORMATION_ENERGY],
+ 'description': (
+ '功能:将间隙原子插入宿主晶格,计算候选位点(内部生成)的形成能。\n'
+ '使用场景:当需要从无缺陷的体相晶体开始计算间隙形成能时使用。\n'
+ 'APEX,间隙形成能\n'
+ '使用方法:\n'
+ '1. 输入:\n'
+ ' 结构文件:完整(无缺陷)的宿主晶格结构和间隙原子。\n'
+ ' 宿主结构必须是完整的体相晶格(无空位/反位/替代、无缺失原子、无部分占位/无序位点)。\n'
+ '2. 输出:候选位点的间隙形成能。\n'
+ '3. 注意事项:基于 DFT。不要提供已包含缺陷或额外原子的结构;该工具假设完整的晶格并会自行放置间隙原子——提供已有缺陷的结构可能导致错误或无效的能量。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'apex_calculate_elastic': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ 'What it does: Apply small strains to the lattice to extract elastic constants and derived moduli.\n'
+ 'When to use: When you need elastic constants and moduli.\n'
+ 'Prerequisites / Inputs: Structure file.\n'
+ 'Outputs: Elastic constants and derived moduli.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['abacus_cal_elastic', 'calculate_elastic_constants'],
+ 'self_check': False,
+ },
+ 'apex_calculate_elastic_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ '功能:对晶格施加小应变以提取弹性常数和衍生模量。\n'
+ '使用场景:当需要弹性常数和模量时使用。\n'
+ 'APEX,弹性常数\n'
+ '使用方法:\n'
+ '1. 输入:结构文件。\n'
+ '2. 输出:弹性常数和衍生模量。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': ['abacus_cal_elastic', 'calculate_elastic_constants'],
+ 'self_check': False,
+ },
+ 'apex_calculate_surface': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.SURFACE_ENERGY],
+ 'description': (
+ 'What it does: Execute a workflow of surface energy calculation using a pristine Bulk crystal as input.\n'
+ 'When to use: When you need surface energy starting from a Bulk structure.\n'
+ 'Prerequisites / Inputs: Bulk structure file. \n'
+ 'Outputs: Surface energy.\n'
+ 'Cannot do / Limits: Do NOT provide an already-cut slab/surface structure as input. Slab inputs can cause errors or lead to invalid surface energies.; DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.ensure the input is a complete bulk lattice.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'apex_calculate_surface_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.SURFACE_ENERGY],
+ 'description': (
+ '功能:使用完整的体相晶体作为输入执行表面能计算工作流。\n'
+ '使用场景:当需要从体相结构开始计算表面能时使用。\n'
+ 'APEX,表面能\n'
+ '使用方法:\n'
+ '1. 输入:体相结构文件。\n'
+ '2. 输出:表面能。\n'
+ '3. 注意事项:\n'
+ ' 不要提供已切割的板/表面结构作为输入。板状输入可能导致错误或无效的表面能。\n'
+ ' 基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。确保输入是完整的体相晶格。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'apex_calculate_eos': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.EOS],
+ 'description': (
+ 'What it does: Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.\n'
+ 'When to use: When you need EOS curve.\n'
+ 'Prerequisites / Inputs: Structure file.\n'
+ 'Outputs: EOS energy-volume curve.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['abacus_eos'],
+ 'self_check': False,
+ },
+ 'apex_calculate_eos_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.EOS],
+ 'description': (
+ '功能:扫描平衡点附近的体积,弛豫内部坐标,构建状态方程的能量-体积曲线。\n'
+ '使用场景:当需要状态方程曲线时使用。\n'
+ 'APEX,EOS\n'
+ '使用方法:\n'
+ '1. 输入:结构文件。\n'
+ '2. 输出:状态方程能量-体积曲线。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': ['abacus_eos'],
+ 'self_check': False,
+ },
+ 'apex_calculate_phonon': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.PHONON],
+ 'description': (
+ 'What it does: Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.\n'
+ 'When to use: When you need phonon spectra.\n'
+ 'Prerequisites / Inputs: Structure file.\n'
+ 'Outputs: Phonon spectra.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': ['abacus_phonon_dispersion', 'calculate_phonon'],
+ 'self_check': False,
+ },
+ 'apex_calculate_phonon_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.PHONON],
+ 'description': (
+ '功能:执行超胞有限位移计算,弛豫构型,并组装声子谱。\n'
+ '使用场景:当需要声子谱时使用。\n'
+ 'APEX,声子\n'
+ '使用方法:\n'
+ '1. 输入:结构文件。\n'
+ '2. 输出:声子谱。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。\n'
+ ),
+ 'alternative': ['abacus_phonon_dispersion', 'calculate_phonon'],
+ 'self_check': False,
+ },
+ 'apex_calculate_gamma': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.STACKING_FAULT_ENERGY],
+ 'description': (
+ 'What it does: Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.\n'
+ 'When to use: When you need stacking-fault energies.\n'
+ 'Prerequisites / Inputs: Structure file and specified slip paths.\n'
+ 'Outputs: Generalized stacking-fault energies.\n'
+ 'Cannot do / Limits: DFT-based.\n'
+ 'Cost / Notes: DFT calculation cost.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'apex_calculate_gamma_zh': {
+ 'belonging_agent': ApexAgentName,
+ 'scene': [SceneEnum.APEX, SceneEnum.STACKING_FAULT_ENERGY],
+ 'description': (
+ '功能:构建并弛豫滑动板,沿指定滑移路径映射广义堆垛层错能。\n'
+ '使用场景:当需要堆垛层错能时使用。\n'
+ 'APEX,堆垛层错能\n'
+ '使用方法:\n'
+ '1. 输入:结构文件和指定的滑移路径。\n'
+ '2. 输出:广义堆垛层错能。\n'
+ '3. 注意事项:基于 DFT。\n'
+ '4. 成本/备注:涉及 DFT 计算成本。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'get_target_info': {
+ 'belonging_agent': UniELFAgentName,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': (
+ 'What it does: Get target information from configuration settings for Uni-ELF inference system.\n'
+ 'When to use: When you need configuration info for Uni-ELF.\n'
+ 'Prerequisites / Inputs: None.\n'
+ 'Outputs: Comprehensive configuration information and available target model mappings.\n'
+ 'Cannot do / Limits: Specific to Uni-ELF system.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'get_target_info_zh': {
+ 'belonging_agent': UniELFAgentName,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': (
+ '功能:从 Uni-ELF 推理系统的配置设置中获取目标信息。\n'
+ '使用场景:当需要 Uni-ELF 的配置信息时使用。\n'
+ '聚合物\n'
+ '使用方法:\n'
+ '1. 输入:无。\n'
+ '2. 输出:全面的配置信息和可用的目标模型映射。\n'
+ '3. 注意事项:特定于 Uni-ELF 系统。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'unielf_inference': {
+ 'belonging_agent': UniELFAgentName,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': (
+ 'What it does: Run Uni-ELF inference for formulation inputs to predict properties.\n'
+ 'When to use: When you need property prediction for formulations.\n'
+ 'Prerequisites / Inputs: Components and ratios for formulations.\n'
+ 'Outputs: Predicted properties.\n'
+ 'Cannot do / Limits: Supports mixtures and pseudo-formulations.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'summary_prompt': (
+ 'Summarize the Uni-ELF inference results based on the output:\n'
+ '1. Report the url to the full results CSV file (`result_csv`).\n'
+ '2. List the top 10 formulations from `top_10_results_dict`. '
+ 'For each, display the `formulation_id`, the composition '
+ '(combine `smiles_i` and `ratio_i`), and the predicted property '
+ 'value (key ending in `_pred`).\n'
+ '3. Highlight the best performing formulation.\n'
+ ),
+ 'self_check': False,
+ },
+ 'unielf_inference_zh': {
+ 'belonging_agent': UniELFAgentName,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': (
+ '功能:对配方输入运行 Uni-ELF 推理以预测性质。\n'
+ '使用场景:当需要配方的性质预测时使用。\n'
+ '聚合物\n'
+ '使用方法:\n'
+ '1. 输入:配方的组分和比例。\n'
+ '2. 输出:预测的性质。\n'
+ '3. 注意事项:支持混合物和伪配方。\n'
+ '4. 成本/备注:中等。'
+ ),
+
+
+
+ },
+ 'get_database_info': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ 'What it does: Fetch complete schema and descriptive information for the perovskite solar cell database.\n'
+ 'When to use: Before querying the perovskite database.\n'
+ 'Prerequisites / Inputs: None.\n'
+ 'Outputs: Database schema and descriptions.\n'
+ 'Cannot do / Limits: Specific to perovskite database.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'get_database_info_zh': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ '功能:获取钙钛矿太阳能电池数据库的完整模式和描述信息。\n'
+ '使用场景:在查询钙钛矿数据库之前使用。\n'
+ '钙钛矿\n'
+ '使用方法:\n'
+ '1. 输入:无。\n'
+ '2. 输出:数据库模式和描述。\n'
+ '3. 注意事项:特定于钙钛矿数据库。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'sql_database_mcp': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ 'What it does: Execute SQL queries against the perovskite solar cell database and return first k rows.\n'
+ 'When to use: When querying perovskite database after getting schema.\n'
+ 'Prerequisites / Inputs: SQL query; call get_database_info first.\n'
+ 'Outputs: First k rows of query results.\n'
+ 'Cannot do / Limits: Limited to first k rows.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'sql_database_mcp_zh': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ '功能:对钙钛矿太阳能电池数据库执行 SQL 查询并返回前 k 行。\n'
+ '使用场景:获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。\n'
+ '钙钛矿\n'
+ '使用方法:\n'
+ '1. 输入:SQL 查询语句。\n'
+ '2. 输出:查询结果的前 k 行。\n'
+ '3. 注意事项:仅限于前 k 行。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'Unimol_Predict_Perovskite_Additive': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ 'What it does: Predict the additive effect on perovskite PCE with a list of additive molecules.\n'
+ 'When to use: When you need PCE change prediction for additives.\n'
+ 'Prerequisites / Inputs: List of additive molecules.\n'
+ 'Outputs: Predicted PCE changes.\n'
+ 'Cannot do / Limits: Specific to perovskite additives.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'Unimol_Predict_Perovskite_Additive_zh': {
+ 'belonging_agent': PerovskiteAgentName,
+ 'scene': [SceneEnum.PEROVSKITE_RESEARCH],
+ 'description': (
+ '功能:使用添加剂分子列表预测添加剂对钙钛矿 PCE 的影响。\n'
+ '使用场景:当需要添加剂的 PCE 变化预测时使用。\n'
+ '钙钛矿\n'
+ '使用方法:\n'
+ '1. 输入:添加剂分子列表。\n'
+ '2. 输出:预测的 PCE 变化。\n'
+ '3. 注意事项:特定于钙钛矿添加剂。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_dart_ga': {
+ 'belonging_agent': COMPDART_AGENT_NAME,
+ 'scene': [SceneEnum.COMPOSITION_OPTIMIZATION],
+ 'description': (
+ 'What it does: Perform compositional optimization for multi-component materials to target specific properties using genetic algorithm.\n'
+ 'When to use: Search optimized compositions for target properties.\n'
+ 'Prerequisites / Inputs: Target properties, optional initial compositions or structure templates, constrains, and surrogate model.\n'
+ 'Outputs: Optimized compositions.\n'
+ 'Cannot do / Limits: Cannot build doping structures; requires surrogate model.\n'
+ 'Cost / Notes: High due to long iterations.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_dart_ga_zh': {
+ 'belonging_agent': COMPDART_AGENT_NAME,
+ 'scene': [SceneEnum.COMPOSITION_OPTIMIZATION],
+ 'description': (
+ '功能:利用遗传算法对多组分材料进行成分优化,以匹配特定的目标性能。\n'
+ '使用场景:搜索针对目标性质的优化成分。\n'
+ '组分优化\n'
+ '使用方法:\n'
+ '1. 输入:目标性质、可选的初始成分或结构模板、约束条件和代理模型。\n'
+ '2. 输出:优化后的成分。\n'
+ '3. 注意事项:无法构建掺杂结构;需要代理模型。\n'
+ '4. 成本/备注:由于迭代时间长,成本高。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_doe_task': {
+ 'belonging_agent': DOE_AGENT_NAME,
+ 'scene': [SceneEnum.DOE],
+ 'description': (
+ 'What it does: Run a Design of Experiments (DoE) task using supported algorithms.\n'
+ 'When to use: When you need experimental design.\n'
+ 'Prerequisites / Inputs: Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).\n'
+ 'Outputs: DoE results.\n'
+ 'Cannot do / Limits: Limited to supported algorithms.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_doe_task_zh': {
+ 'belonging_agent': DOE_AGENT_NAME,
+ 'scene': [SceneEnum.DOE],
+ 'description': (
+ '功能:使用支持的算法运行实验设计(DoE)任务。\n'
+ '使用场景:当需要实验设计时使用。\n'
+ 'DOE\n'
+ '使用方法:\n'
+ '1. 输入:算法选择(极值顶点、单纯形重心等)。\n'
+ '2. 输出:DOE 结果。\n'
+ '3. 注意事项:仅限于支持的算法。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'extract_material_data_from_pdf': {
+ 'belonging_agent': DocumentParserAgentName,
+ 'scene': [SceneEnum.LITERATURE, SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Read and extract material data and methodologies from PDF documents.\n'
+ 'When to use: When you need to extract info from PDF literature.\n'
+ 'Prerequisites / Inputs: PDF file.\n'
+ 'Outputs: Extracted material info and methodologies.\n'
+ 'Cannot do / Limits: Cannot retrieve from internet; local PDFs only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': ['file_parse', 'extract_material_data_from_webpage'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'extract_material_data_from_pdf_zh': {
+ 'belonging_agent': DocumentParserAgentName,
+ 'scene': [SceneEnum.LITERATURE, SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:从 PDF 文档中读取并提取材料数据和方法。\n'
+ '使用场景:当需要从 PDF 文献中提取信息时使用。\n'
+ '文献,通用场景\n'
+ '使用方法:\n'
+ '1. 输入:PDF 文件。\n'
+ '2. 输出:提取的材料信息和方法。\n'
+ '3. 注意事项:无法从互联网检索;仅支持本地 PDF 文件。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': ['file_parse', 'extract_material_data_from_webpage'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'optimize_structure': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.OPTIMIZE_STRUCTURE],
+ 'description': (
+ 'What it does: Perform geometry optimization of a crystal or molecular structure using ML potential.\n'
+ 'When to use: When you need fast optimized structure without DFT.\n'
+ 'Prerequisites / Inputs: Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.\n'
+ 'Outputs: Optimized structure file.\n'
+ 'Cannot do / Limits: ML-based; accuracy depends on potential domain.\n'
+ 'Cost / Notes: Low relative to DFT.'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['apex_optimize_structure', 'abacus_do_relax'],
+ 'self_check': False,
+ },
+ 'optimize_structure_zh': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.OPTIMIZE_STRUCTURE],
+ 'description': (
+ '功能:使用机器学习势对晶体或分子结构进行几何优化。\n'
+ '使用场景:当你需要快速获得优化后的结构,且不想进行耗时的 DFT 计算时使用\n'
+ 'DPA,结构优化\n'
+ '使用方法:\n'
+ '1. 输入:结构文件(CIF/POSCAR/ABACUS STRU/LAMMPS 数据);兼容的机器学习势文件。\n'
+ '2. 输出:优化后的结构文件。\n'
+ '3. 注意事项:基于机器学习;精度取决于所使用的势函数适用范围\n'
+ '4. 成本/备注:相对于 DFT 成本低。'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['apex_optimize_structure', 'abacus_do_relax'],
+ 'self_check': False,
+ },
+ 'run_molecular_dynamics': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.MOLECULAR_DYNAMICS],
+ 'description': (
+ 'What it does: Run molecular dynamics simulations using ML potential.\n'
+ 'When to use: When you need fast MD without DFT.\n'
+ 'Prerequisites / Inputs: Structure file; ML potential; ensemble settings.\n'
+ 'Outputs: MD trajectories and thermodynamics.\n'
+ 'Cannot do / Limits: NVE/NVT/NPT only; no classical force fields or DFT.\n'
+ 'Cost / Notes: Medium; scales with system size and steps.'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_run_md'],
+ 'self_check': False,
+ },
+ 'run_molecular_dynamics_zh': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.MOLECULAR_DYNAMICS],
+ 'description': (
+ '功能:使用机器学习势运行分子动力学模拟。\n'
+ '使用场景:当你需要比密度泛函理论(DFT)更快的速度,但又不满足于传统力场的精度时。\n'
+ 'DPA,分子动力学\n'
+ '使用方法:\n'
+ '1. 输入:结构文件;机器学习势;系综设置。\n'
+ '2. 输出:分子动力学轨迹和热力学性质。\n'
+ '3. 注意事项:仅支持 NVE/NVT/NPT;不支持经典力场或 DFT。\n'
+ '4. 成本/备注:中等;计算量随系统规模(原子数)和模拟步数增加。'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_run_md'],
+ 'self_check': False,
+ },
+ 'calculate_phonon': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.PHONON],
+ 'description': (
+ 'What it does: Compute phonon properties using ML potential.\n'
+ 'When to use: When you need phonon dispersion and thermal properties.\n'
+ 'Prerequisites / Inputs: Optimized structure; ML potential.\n'
+ 'Outputs: Phonon dispersion, DOS, thermal properties.\n'
+ 'Cannot do / Limits: Requires finite-displacement supercells.\n'
+ 'Cost / Notes: High; scales with supercell size.'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_phonon_dispersion', 'apex_calculate_phonon'],
+ 'self_check': False,
+ },
+ 'calculate_phonon_zh': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.PHONON],
+ 'description': (
+ '功能:使用机器学习势计算声子性质。\n'
+ '使用场景:当需要声子色散和热性质时使用。\n'
+ 'DPA,声子\n'
+ '使用方法:\n'
+ '1. 输入:优化后的结构;机器学习势。\n'
+ '2. 输出:声子色散、态密度、热性质。\n'
+ '3. 注意事项:需要有限位移超胞。\n'
+ '4. 成本/备注:高;计算量随超胞规模的增大而显著增加。'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_phonon_dispersion', 'apex_calculate_phonon'],
+ 'self_check': False,
+ },
+ 'calculate_elastic_constants': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ 'What it does: Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.\n'
+ 'When to use: You have a relaxed structure and want fast elastic properties without running DFT.\n'
+ 'Prerequisites / Inputs: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.\n'
+ 'Outputs: Elastic tensor (Cij), bulk/shear/Young\'s modulus, Poisson ratio (units reported in the result payload).\n'
+ 'Cannot do / Limits: Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.\n'
+ 'Cost / Notes: Medium; scales with system size and deformation settings.'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_cal_elastic', 'apex_calculate_elastic'],
+ 'self_check': False,
+ },
+ 'calculate_elastic_constants_zh': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.ELASTIC_CONSTANT],
+ 'description': (
+ '功能:使用机器学习原子间势计算弹性常数(Cij)和衍生的力学性质。\n'
+ '使用场景:当你已拥有优化好的结构(Relaxed Structure),并希望跳过 DFT 计算,快速获取弹性性质时。\n'
+ 'DPA,弹性常数\n'
+ '使用方法:\n'
+ '1. 输入:结构文件(例如 CIF/POSCAR/ABACUS STRU/LAMMPS 数据)、兼容的机器学习势。\n'
+ '2. 输出:弹性张量(Cij)、体积/剪切/杨氏模量、泊松比。\n'
+ '3. 注意事项:\n'
+ ' 非 DFT 计算;其精度高度依赖于机器学习势的拟合水平;\n'
+ ' 如果目标结构超出了机器学习势的训练集分布,结果可能不可靠。\n'
+ '4. 成本/备注:中等;计算量随原子数规模和形变采样(Deformation settings)的复杂程度增加。'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': ['abacus_cal_elastic', 'apex_calculate_elastic'],
+ 'self_check': False,
+ },
+ 'run_neb': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.Nudged_Elastic_Band],
+ 'description': (
+ 'What it does: Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.\n'
+ 'When to use: You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.\n'
+ 'Prerequisites / Inputs: Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.\n'
+ 'Outputs: Optimized NEB path, energies along images, estimated barrier and reaction coordinate.\n'
+ 'Cannot do / Limits: Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.\n'
+ 'Cost / Notes: High relative to single relax; cost scales with number of images and system size.'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_neb_zh': {
+ 'belonging_agent': DPACalulator_AGENT_NAME,
+ 'scene': [SceneEnum.DPA, SceneEnum.Nudged_Elastic_Band],
+ 'description': (
+ '功能:使用机器学习势运行微动弹性能带(NEB)计算以估计最小能量路径和能垒。\n'
+ '使用场景:当你已知反应的初态和末态(以及可选的初始猜测路径),且需要快速估算反应能垒时。\n'
+ 'DPA,NEB\n'
+ '使用方法:\n'
+ '1. 输入:初始和最终结构文件;可选的中间态构型或插值点数;兼容的机器学习势。\n'
+ '2. 输出:优化的 NEB 路径、沿图像的能量、估计的能垒和反应坐标。\n'
+ '3. 注意事项:\n'
+ ' 默认精度不直接等同于 DFT 水准。如果中间映像畸变过大,或势函数无法准确描述该化学环境,计算可能会失败。\n'
+ '4. 成本/备注:相对于单次弛豫成本高;计算量随映像数量和系统规模增加。'
+ ),
+ 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}",
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'finetune_dpa_model': {
+ 'belonging_agent': FinetuneDPAAgentName,
+ 'scene': [SceneEnum.DPA],
+ 'description': (
+ 'What it does: Fine-tune DPA pretrained models using DFT-labeled data.\n'
+ 'When to use: When you need to adapt DPA potential to specific systems.\n'
+ 'Prerequisites / Inputs: DFT-labeled data (energies, forces, stresses).\n'
+ 'Outputs: Fine-tuned DPA model.\n'
+ 'Cannot do / Limits: Cannot run calculations with the model.\n'
+ 'Cost / Notes: High.'
+ ),
+ 'args_setting': 'Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input.',
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'finetune_dpa_model_zh': {
+ 'belonging_agent': FinetuneDPAAgentName,
+ 'scene': [SceneEnum.DPA],
+ 'description': (
+ '功能:使用 DFT 标记的数据微调 DPA 预训练模型。\n'
+ '使用场景:当需要将 DPA 势适应特定体系时使用。\n'
+ 'DPA\n'
+ '使用方法:\n'
+ '1. 输入:DFT 标记的数据(能量、力、应力)。\n'
+ '2. 输出:微调后的 DPA 模型。\n'
+ '3. 注意事项:该功能仅负责“训练”,不能直接运行具体的模拟计算(如 MD 或 NEB)。\n'
+ '4. 成本/备注:高。'
+ ),
+ 'args_setting': '不要省略具有默认值的参数。如果用户未提供值,您必须使用输入参数中定义的默认值,并在工具调用中包含该字段。只有没有默认值的参数才是真正必需的,必须从用户输入中填充。',
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_params_calculator': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.\n'
+ 'When to use: When you need HEA thermodynamic parameters.\n'
+ 'Prerequisites / Inputs: HEA chemical formula.\n'
+ 'Outputs: VEC, delta, Hmix, Smix, Lambda.\n'
+ 'Cannot do / Limits: Specific to HEA.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_params_calculator_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:从成分计算高熵合金参数,如 VEC、delta、Hmix、Smix、Lambda。\n'
+ '使用场景:当需要高熵合金热力学参数时使用。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:高熵合金化学式。\n'
+ '2. 输出:VEC、delta、Hmix、Smix、Lambda。\n'
+ '3. 注意事项:特定于 HEA。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_predictor': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Predict if HEA composition forms solid-solution and its crystal structure.\n'
+ 'When to use: When you need phase prediction for HEA.\n'
+ 'Prerequisites / Inputs: HEA composition.\n'
+ 'Outputs: Solid-solution formation and crystal structure.\n'
+ 'Cannot do / Limits: Uses pre-trained ML model.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_predictor_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:预测高熵合金成分是否形成固溶体及其晶体结构。\n'
+ '使用场景:当需要高熵合金的相预测时使用。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:高熵合金成分。\n'
+ '2. 输出:固溶体形成和晶体结构。\n'
+ '3. 注意事项:使用预训练的机器学习模型。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_comps_generator': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Generate HEA compositions by adjusting molar ratios of one element.\n'
+ 'When to use: For HEA composition design and optimization.\n'
+ 'Prerequisites / Inputs: Initial HEA composition.\n'
+ 'Outputs: Series of modified compositions.\n'
+ 'Cannot do / Limits: Adjusts one element at a time.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_comps_generator_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:通过调节单一元素的摩尔比来生成一系列高熵合金成分。\n'
+ '使用场景:用于高熵合金成分设计和优化。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:初始高熵合金成分。\n'
+ '2. 输出:一系列修改后的成分。\n'
+ '3. 注意事项:一次调整一个元素。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_data_extract': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Extract HEA data from PDF literature.\n'
+ 'When to use: When you need HEA data from papers.\n'
+ 'Prerequisites / Inputs: PDF literature.\n'
+ 'Outputs: Compositions, processing, microstructures, properties.\n'
+ 'Cannot do / Limits: PDF format only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_data_extract_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:从 PDF 文献中提取高熵合金数据。\n'
+ '使用场景:当需要从论文中获取高熵合金数据时使用。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:PDF 文献。\n'
+ '2. 输出:成分、合成、微观结构、性质。\n'
+ '3. 注意事项:仅支持 PDF 格式。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_paper_search': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Search and download HEA papers from arXiv.\n'
+ 'When to use: When you need HEA literature.\n'
+ 'Prerequisites / Inputs: Title, author, or keywords.\n'
+ 'Outputs: Search results and downloaded papers.\n'
+ 'Cannot do / Limits: arXiv only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [
+ 'query_heakb_literature',
+ 'search-papers-enhanced',
+ 'web-search',
+ ],
+ 'self_check': False,
+ },
+ 'HEA_paper_search_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:从 arXiv 搜索并下载高熵合金论文。\n'
+ '使用场景:当需要高熵合金文献时使用。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:标题、作者或关键词。\n'
+ '2. 输出:搜索结果和下载的论文。\n'
+ '3. 注意事项:仅支持 arXiv。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [
+ 'query_heakb_literature',
+ 'search-papers-enhanced',
+ 'web-search',
+ ],
+ 'self_check': False,
+ },
+ 'HEA_bi_phase_Calc': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Calculate formation energies and phase diagrams for binary pairs in HEA.\n'
+ 'When to use: When you need binary phase info for HEA.\n'
+ 'Prerequisites / Inputs: HEA chemical system.\n'
+ 'Outputs: Formation energies and convex hulls.\n'
+ 'Cannot do / Limits: Binary pairs only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'HEA_bi_phase_Calc_zh': {
+ 'belonging_agent': HEA_assistant_AgentName,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:计算高熵合金 中二元对的形成能和相图。\n'
+ '使用场景:当需要高熵合金的二元相信息时使用。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:高熵合金化学体系。\n'
+ '2. 输出:形成能和凸包。\n'
+ '3. 注意事项:仅支持二元对。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'generate_binary_phase_diagram': {
+ 'belonging_agent': HEACALCULATOR_AGENT_NAME,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ 'What it does: Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.\n'
+ 'When to use: You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.\n'
+ 'Prerequisites / Inputs: Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.\n'
+ 'Outputs: Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.\n'
+ 'Cannot do / Limits: If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.\n'
+ 'Cost / Notes: Medium; faster with cached datasets.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'generate_binary_phase_diagram_zh': {
+ 'belonging_agent': HEACALCULATOR_AGENT_NAME,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:基于后端工作流中可用的热力学/能量数据,为指定的 A–B 体系生成二元相图。\n'
+ '使用场景:当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:元素对(A, B)和可选的温度/压力范围;可访问的形成能/热力学数据集或计算路径。\n'
+ '2. 输出:相图原始数据(稳定相、结线/共轭线 (Tie-lines)、成分范围)以及可直接绘图的展示结果。\n'
+ '3. 注意事项:\n'
+ ' 如果没有可用的数据集/计算路径,工具将返回错误;\n'
+ ' 结果依赖于数据覆盖范围和模型假设。\n'
+ '4. 成本/备注:中等;使用缓存数据集更快。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'query_heakb_literature': {
+ 'belonging_agent': HEA_KB_AGENT_NAME,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': HEAKbAgentToolDescription,
+ 'args_setting': f"{HEAKbAgentArgsSetting}",
+ 'alternative': ['HEA_paper_search', 'search-papers-enhanced', 'web-search'],
+ 'summary_prompt': HEAKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_heakb_literature_zh': {
+ 'belonging_agent': HEA_KB_AGENT_NAME,
+ 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY],
+ 'description': (
+ '功能:使用自然语言查询高熵合金(HEA)研究的文献知识库。\n'
+ '使用场景:当您需要对高熵合金相关主题进行深入的文献分析时。\n'
+ '高熵合金\n'
+ '使用方法:\n'
+ '1. 输入:关于高熵合金的自然语言问题。\n'
+ '2. 输出:通过向量相似性搜索返回的文献摘要。\n'
+ '3. 注意事项:\n'
+ ' 主题仅限于高熵合金。\n'
+ '4. 成本/备注:中等。\n',
+ ),
+ 'args_setting': f"{HEAKbAgentArgsSetting}",
+ 'alternative': ['HEA_paper_search', 'search-papers-enhanced', 'web-search'],
+ 'summary_prompt': HEAKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_ssekb_literature': {
+ 'belonging_agent': SSE_KB_AGENT_NAME,
+ 'scene': [SceneEnum.Solid_State_Electrolyte],
+ 'description': SSEKbAgentToolDescription,
+ 'args_setting': f"{SSEKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': SSEKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_ssekb_literature_zh': {
+ 'belonging_agent': SSE_KB_AGENT_NAME,
+ 'scene': [SceneEnum.Solid_State_Electrolyte],
+ 'description': (
+ '功能:使用自然语言查询固态电解质(SSE)研究的文献知识库。\n'
+ '使用场景:当您需要对固态电解质相关主题进行深入的文献分析时。\n'
+ '固态电解质\n'
+ '使用方法:\n'
+ '1. 输入:关于固态电解质的自然语言问题。\n'
+ '2. 输出:通过向量相似性搜索返回的文献摘要。\n'
+ '3. 注意事项:\n'
+ ' 主题仅限于固态电解质。\n'
+ '4. 成本/备注:中等。\n',
+ ),
+ 'args_setting': f"{SSEKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': SSEKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_polymerkb_literature': {
+ 'belonging_agent': POLYMER_KB_AGENT_NAME,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': POLYMERKbAgentToolDescription,
+ 'args_setting': f"{POLYMERKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': POLYMERKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_polymerkb_literature_zh': {
+ 'belonging_agent': POLYMER_KB_AGENT_NAME,
+ 'scene': [SceneEnum.POLYMER],
+ 'description': ('功能:使用自然语言查询聚合物研究的文献知识库。\n'
+ '使用场景:当您需要对聚合物相关主题进行深入的文献分析时。\n'
+ '聚合物\n'
+ '使用方法:\n'
+ '1. 输入:关于聚合物的自然语言问题。\n'
+ '2. 输出:通过向量相似性搜索返回的文献摘要。\n'
+ '3. 注意事项:\n'
+ ' 主题仅限于聚合物。\n'
+ '4. 成本/备注:中等。\n',
+ ),
+ 'args_setting': f"{POLYMERKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': POLYMERKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_steelkb_literature': {
+ 'belonging_agent': STEEL_KB_AGENT_NAME,
+ 'scene': [SceneEnum.STEEL],
+ 'description': STEELKbAgentToolDescription,
+ 'args_setting': f"{STEELKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': STEELKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'query_steelkb_literature_zh': {
+ 'belonging_agent': STEEL_KB_AGENT_NAME,
+ 'scene': [SceneEnum.STEEL],
+ 'description': (
+ '功能:查询不锈钢研究的文献知识库。\n'
+ '使用场景:当您需要对不锈钢相关主题进行深入的文献分析时。\n'
+ '不锈钢\n'
+ '使用方法:\n'
+ '1. 输入:关于不锈钢的自然语言问题。\n'
+ '2. 输出:通过向量搜索返回的文献摘要。\n'
+ '3. 注意事项:\n'
+ ' 主题仅限于不锈钢。\n'
+ '4. 成本/备注:中等。\n',
+ ),
+ 'args_setting': f"{STEELKbAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': STEELKbAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'predict_tensile_strength': {
+ 'belonging_agent': STEEL_PREDICT_AGENT_NAME,
+ 'scene': [SceneEnum.STEEL],
+ 'description': STEELPredictAgentToolDescription,
+ 'args_setting': f"{STEELPredictAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': STEELPredictAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'predict_tensile_strength_zh': {
+ 'belonging_agent': STEEL_PREDICT_AGENT_NAME,
+ 'scene': [SceneEnum.STEEL],
+ 'description': (
+ '功能:使用神经网络预测不锈钢的极限抗拉强度。\n'
+ '使用场景:当您需要基于化学成分预测抗拉强度时。\n'
+ '不锈钢\n'
+ '使用方法:\n'
+ '1. 输入:化学配方列表。\n'
+ '2. 输出:预测的极限抗拉强度值列表(单位:MPa)。\n'
+ '3. 注意事项:\n'
+ ' 仅适用于不锈钢;不返回文件。\n'
+ '4. 成本/备注:低。\n',
+ ),
+ 'args_setting': f"{STEELPredictAgentArgsSetting}",
+ 'alternative': ['search-papers-enhanced', 'web-search'],
+ 'summary_prompt': STEELPredictAgentSummaryPrompt,
+ 'self_check': False,
+ },
+ 'fetch_structures_from_db': {
+ 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME,
+ 'scene': [SceneEnum.DATABASE_SEARCH],
+ 'description': StructureSearchAgentToolDescription,
+ 'args_setting': f"{StructureSearchAgentArgsSetting}",
+ 'alternative': [
+ 'web-search',
+ ],
+ 'summary_prompt': StructureSearchAgentSummaryPrompt,
+ 'self_check': True,
+ },
+ 'fetch_structures_from_db_zh': {
+ 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME,
+ 'scene': [SceneEnum.DATABASE_SEARCH],
+ 'description': (
+ '功能:从多个数据源(BohriumPublic / OpenLAM / OPTIMADE 提供者)检索晶体结构,或对 MOFdb 运行高级 SQL 查询。\n'
+ '使用场景:任何“查找晶体结构”的请求,包括按化学式/元素/空间群/带隙筛选、或针对 MOF 的特定分析(MOFdb SQL)。\n'
+ '数据库搜索\n'
+ '使用方法:\n'
+ '1. 输入:结构化筛选条件(化学式/元素/空间群范围)、筛选条件,筛选字符串,或 MOFdb SQL 语句。\n'
+ '2. 输出:CIF/JSON 格式的结构或元数据;MOFdb 返回 SQL 查询结果行及可选的结构文件链接。\n'
+ '3. 注意事项:\n'
+ ' OPTIMADE 筛选必须遵循标准语法;MOFdb 仅限 MOF 相关数据;OpenLAM 不提供空间群/带隙信息。\n'
+ '4. 成本/备注:低。\n',
+ ),
+ 'args_setting': f"{StructureSearchAgentArgsSetting}",
+ 'alternative': ['web-search'],
+ 'summary_prompt': StructureSearchAgentSummaryPrompt,
+ 'self_check': True,
+ },
+ 'calculate_reaction_profile': {
+ 'belonging_agent': ORGANIC_REACTION_AGENT_NAME,
+ 'scene': [SceneEnum.REACTION],
+ 'description': (
+ 'What it does: Calculate reaction profile.\n'
+ 'When to use: For organic reaction analysis.\n'
+ 'Prerequisites / Inputs: Reaction inputs.\n'
+ 'Outputs: Reaction profile.\n'
+ 'Cannot do / Limits: Specific to reactions.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'calculate_reaction_profile_zh': {
+ 'belonging_agent': ORGANIC_REACTION_AGENT_NAME,
+ 'scene': [SceneEnum.REACTION],
+ 'description': (
+ '功能:计算反应势能剖面。\n'
+ '使用场景:用于有机反应分析。\n'
+ '反应\n'
+ '使用方法:\n'
+ '1. 输入:反应输入。\n'
+ '2. 输出:反应势能剖面(展示反应坐标与能量关系的剖面图)。\n'
+ '3. 注意事项:仅针对化学反应体系;不适用于通用的结构搜索或非反应性计算。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_piloteye': {
+ 'belonging_agent': PILOTEYE_ELECTRO_AGENT_NAME,
+ 'scene': [SceneEnum.PILOTEYE_ELECTRO],
+ 'description': (
+ 'What it does: Perform property calculations for lithium-ion battery electrolytes using MD and DFT.\n'
+ 'When to use: When you need electrolyte property calculations.\n'
+ 'Prerequisites / Inputs: Params JSON with formulation.\n'
+ 'Outputs: Target properties from modeling pipeline.\n'
+ 'Cannot do / Limits: Built-in molecule library; complete workflow.\n'
+ 'Cost / Notes: High.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_piloteye_zh': {
+ 'belonging_agent': PILOTEYE_ELECTRO_AGENT_NAME,
+ 'scene': [SceneEnum.PILOTEYE_ELECTRO],
+ 'description': (
+ '功能:使用分子动力学和密度泛函理论对锂离子电池电解质进行性质计算。\n'
+ '使用场景:当你需要评估或预测电解液体系的性能指标时。\n'
+ 'PILOTEYE_ELECTRO\n'
+ '使用方法:\n'
+ '1. 输入:包含“配方信息(Formulation)”的 JSON 格式参数文件。\n'
+ '2. 输出:建模流程的目标性质。\n'
+ '3. 注意事项:仅限使用内置分子库中的物料。该模块为固定工作流,自定义灵活度受限。\n'
+ '4. 成本/备注:高。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'generate_calypso_structures': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Perform global structure search with CALYPSO to generate candidate crystal structures.\n'
+ 'When to use: When you need to explore polymorphs for a composition.\n'
+ 'Prerequisites / Inputs: Valid element inputs; CALYPSO environment.\n'
+ 'Outputs: Multiple POSCAR files.\n'
+ 'Cannot do / Limits: Requires relaxation downstream.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'args_setting': 'Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended.',
+ 'alternative': [],
+ 'self_check': True,
+ },
+ 'generate_calypso_structures_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:利用 CALYPSO 进行全局结构搜索,从而生成一系列候选晶体结构。\n'
+ '使用场景:当需要探索成分的同质异形体时使用。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:有效的元素输入。\n'
+ '2. 输出:POSCAR 文件。\n'
+ '3. 注意事项:需要下游弛豫。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'args_setting': '参数指导:n_tot=10–30 可在不过度成本的情况下提供合理的多样性。元素必须来自支持的列表(H–Bi, Ac–Pu)。输出是一组 POSCAR 文件;强烈建议进行下游弛豫。',
+ 'alternative': [],
+ 'self_check': True,
+ },
+ 'generate_crystalformer_structures': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.CONDITIONAL_GENERATE],
+ 'description': (
+ 'What it does: Generate crystal structures based on conditional attributes and space groups.\n'
+ 'When to use: When you need structures with specific properties.\n'
+ 'Prerequisites / Inputs: Target properties (bandgap, moduli, Tc, sound); space groups.\n'
+ 'Outputs: Generated structures.\n'
+ 'Cannot do / Limits: Limited to supported properties; requires space group.\n'
+ 'Cost / Notes: High; uses generative model.'
+ ),
+ 'args_setting': 'Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type="minimize", use small target (e.g., 0.1) and low alpha (0.01); for "equal", "greater", "less", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference.',
+ 'alternative': [],
+ 'self_check': True,
+ },
+ 'generate_crystalformer_structures_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.CONDITIONAL_GENERATE],
+ 'description': (
+ '功能:基于条件属性和空间群生成晶体结构。\n'
+ '使用场景:当需要具有特定性质的结构时使用。\n'
+ '结构生成,条件生成\n'
+ '使用方法:\n'
+ '1. 输入:目标性质(带隙、模量、Tc、声速);空间群。\n'
+ '2. 输出:生成的结构。\n'
+ '3. 注意事项:仅支持模型预训练过的特定性质;必须指定空间群作为生成的约束条件。\n'
+ '4. 成本/备注:高;使用生成模型。'
+ ),
+ 'args_setting': '参数指导:支持的性质:带隙(eV)、剪切模量、体积模量(均为 log₁₀ GPa)、超导常压/高压(K)、声速(m/s)。对于 target_type="minimize",使用小目标值(例如 0.1)和低 alpha(0.01);对于 "equal"、"greater"、"less",使用 alpha=1.0。mc_steps=500 平衡收敛和速度;对于高精度目标,增加到 2000。建议 sample_num=20–100;如果 random_spacegroup_num>0,则在空间群之间分布。关键:空间群必须由用户明确指定——无默认值或自动推断。',
+ 'alternative': [],
+ 'self_check': True,
+ },
+ 'make_supercell_structure': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Create supercell expansion from structure file.\n'
+ 'When to use: When you need larger unit cell for simulations.\n'
+ 'Prerequisites / Inputs: Structure file.\n'
+ 'Outputs: Supercell structure.\n'
+ 'Cannot do / Limits: Expansion only; no reduction.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': "Parameter guidance: Primarily follow user's instrucution. If not specified, firstly get structure information to understand the raw lattice. An ideal supercell for computation is isotropic. For example, the raw lattice is (4 A, 10 A, 12 A, 90 deg, 90 deg, 90 deg), the supercell should be 5 × 2 × 2. 30-50 angstrom is often appropriate for simulations. Avoid overly large cells unless needed for long-range interactions.",
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'make_supercell_structure_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:从结构文件创建超胞扩充。\n'
+ '使用场景:当你需要构建更大尺寸的单元以进行模拟时。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:结构文件。\n'
+ '2. 输出:超胞结构。\n'
+ '3. 注意事项:仅支持扩展,不支持缩减。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': '参数指导:主要遵循用户的指示。如果未指定,首先获取结构信息以了解原始晶格。用于计算的理想超胞是各向同性的。例如,原始晶格为(4 Å, 10 Å, 12 Å, 90 deg, 90 deg, 90 deg),超胞应为 5 × 2 × 2。30-50 埃通常适合模拟。除非需要长程相互作用,否则避免过大的晶胞。',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_bulk_structure_by_template': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build bulk structures for simple packing types and compounds.\n'
+ 'When to use: For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.\n'
+ 'Prerequisites / Inputs: Element symbols or formulas; lattice constants.\n'
+ 'Outputs: Crystal structure file.\n'
+ 'Cannot do / Limits: Limited to simple structures; no complex crystals.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: Lattice constant requirements due to symmetry constraints: sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → only a; hcp/wurtzite → a and c; orthorhombic/monoclinic → a, b, c. Set conventional=True by default unless primitive cell is explicitly required. For elements, use element symbols; for compounds, use chemical formula (e.g., "NaCl"). {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [
+ 'fetch_bohrium_crystals',
+ 'fetch_structures_with_filter',
+ 'build_bulk_structure_by_wyckoff',
+ ],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_bulk_structure_by_template_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:为简单堆积类型和化合物构建体相结构。\n'
+ '使用场景:用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:元素符号或化学式;晶格常数。\n'
+ '2. 输出:晶体结构文件。\n'
+ '3. 注意事项:仅限于简单结构;不支持复杂晶体。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:由于对称性约束的晶格常数要求:sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → 仅 a;hcp/wurtzite → a 和 c;orthorhombic/monoclinic → a, b, c。除非明确要求原胞,否则默认设置 conventional=True。对于元素,使用元素符号;对于化合物,使用化学式(例如 "NaCl")。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [
+ 'fetch_bohrium_crystals',
+ 'fetch_structures_with_filter',
+ 'build_bulk_structure_by_wyckoff',
+ ],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_surface_slab': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build surface slab structures from bulk structure.\n'
+ 'When to use: When you need surface models for calculations.\n'
+ 'Prerequisites / Inputs: Bulk structure file; Miller indices.\n'
+ 'Outputs: Slab structure file.\n'
+ 'Cannot do / Limits: Requires bulk input; vacuum added.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: Prefer slab_size_mode="layers" with slab_size_value=4–6 for stability; or "thickness" with ≥12 Å for electronic convergence. Use vacuum=15–20 Å to minimize spurious interactions. For polar surfaces or systems with strong dipoles, increase vacuum to ensure the electrostatic potential flattens in the vacuum region. Enable repair=True for covalent materials (e.g., drug-like molecule crystals, oragnic-inorganic hybrids, MOFs); Set false for regular sphrical-like inorganic crystals. Gets slow if set True. Default termination="auto" usually selects the most stoichiometric termination. {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_surface_slab_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:从体相结构构建表面结构。\n'
+ '使用场景:当需要表面模型进行计算时使用。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:体相结构文件;Miller 指数。\n'
+ '2. 输出:表面结构文件。\n'
+ '3. 注意事项:需要体相输入;添加真空层。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:为了稳定性,优先使用 slab_size_mode="layers",slab_size_value=4–6;或使用 "thickness",≥12 Å 用于电子收敛。使用 vacuum=15–20 Å 以最小化虚假相互作用。对于极性表面或具有强偶极子的体系,增加真空层以确保静电势在真空区域变平。对于共价材料(例如,类药物分子晶体、有机-无机杂化物、MOF),启用 repair=True;对于规则的类球形无机晶体,设置为 false。如果设置为 True,速度会变慢。默认 termination="auto" 通常选择最化学计量的终止。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_surface_adsorbate': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build surface-adsorbate structures by placing molecules on slabs.\n'
+ 'When to use: For adsorption studies.\n'
+ 'Prerequisites / Inputs: Surface slab and adsorbate structure files.\n'
+ 'Outputs: Combined structure file.\n'
+ 'Cannot do / Limits: Single adsorbate placement.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: height=2.0 Å is typical for physisorption; reduce to 1.5–1.8 Å for chemisorption (e.g., CO on Pt). For high-symmetry sites, use string keywords ("ontop", "fcc", "hcp"); for custom placement, supply [x, y] fractional coordinates. {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_surface_adsorbate_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:通过在表面上放置分子来构建表面-吸附物结构。\n'
+ '使用场景:用于吸附研究。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:表面结构文件和吸附质结构文件。\n'
+ '2. 输出:组合结构文件。\n'
+ '3. 注意事项:仅支持单吸附质放置。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:height=2.0 Å 通常用于物理吸附;对于化学吸附(例如,CO 在 Pt 上)减少到 1.5–1.8 Å。对于高对称性位点,使用字符串关键词("ontop"、"fcc"、"hcp");对于自定义放置,提供 [x, y] 分数坐标。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'build_surface_interface': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build heterointerface by stacking two slab structures.\n'
+ 'When to use: For interface studies.\n'
+ 'Prerequisites / Inputs: Two slab structure files.\n'
+ 'Outputs: Interface structure file.\n'
+ 'Cannot do / Limits: Basic strain checking.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: Keep max_strain=0.05 (5%) for physical relevance; relax only if intentional strain engineering is intended. Try combinding make_supercell and get_structural_info to obtain the appropriate size of the two slabs. interface_distance=2.5 Å is safe for van der Waals gaps; reduce to 1.8–2.0 Å for covalent bonding (e.g., heterostructures with orbital overlap). {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_surface_interface_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:通过堆叠两个表面结构来构建异质界面。\n'
+ '使用场景:用于界面研究。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:两个表面结构文件。\n'
+ '2. 输出:界面结构文件。\n'
+ '3. 注意事项:基础的应变 (Strain) 检查。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:保持 max_strain=0.05(5%)以确保物理相关性;仅在有意进行应变工程时进行弛豫。尝试结合 make_supercell 和 get_structural_info 以获得两个板的适当尺寸。interface_distance=2.5 Å 对于范德华间隙是安全的;对于共价键合(例如,具有轨道重叠的异质结构)减少到 1.8–2.0 Å。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'add_cell_for_molecules': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Add periodic cell to molecular structures for calculations.\n'
+ 'When to use: For isolated molecule calculations requiring periodicity.\n'
+ 'Prerequisites / Inputs: Molecular structure file.\n'
+ 'Outputs: Structure with periodic cell.\n'
+ 'Cannot do / Limits: For gas-phase molecules.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: For non-periodic system aiming to run calculations with periodic boundary conditions required (e.g., DFT calculations with ABACUS), use add_cell_for_molecules to put the system in a large cell. Default cell [10, 10, 10] Å and vacuum = 5 Å are suitable for most gas-phase molecules; increase to ≥15 Å and ≥8 Å vacuum for polar or diffuse systems (e.g., anions, excited states). {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'add_cell_for_molecules_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:为分子结构添加周期晶胞以进行计算。\n'
+ '使用场景:用于需要周期性的孤立分子计算。\n'
+ '使用方法:\n'
+ '结构生成\n'
+ '1. 输入:分子结构文件。\n'
+ '2. 输出:带周期晶胞的结构。\n'
+ '3. 注意事项:用于气相分子。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:对于需要周期性边界条件的非周期体系(例如,使用 ABACUS 的 DFT 计算),使用 add_cell_for_molecules 将体系放入大晶胞中。默认晶胞 [10, 10, 10] Å 和 vacuum = 5 Å 适合大多数气相分子;对于极性或扩散体系(例如,阴离子、激发态)增加到 ≥15 Å 和 ≥8 Å 真空。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_bulk_structure_by_wyckoff': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build crystal structures by specifying space group and Wyckoff positions.\n'
+ 'When to use: For custom crystal structures.\n'
+ 'Prerequisites / Inputs: Space group; Wyckoff positions with coordinates.\n'
+ 'Outputs: Crystal structure file.\n'
+ 'Cannot do / Limits: Requires symmetry knowledge.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: Space Group: Integer (e.g., 225) or Symbol (e.g., "Fm-3m"). Wyckoff Consistency: The provided coordinates must mathematically belong to the specific Wyckoff position (e.g., if using position 4a at (0,0,0), do not input (0.5, 0.5, 0) just because it\'s in the same unit cell; only input the canonical generator). Lattice: Angles in degrees, lengths in Å. Fractional Coordinates: Must be in [0, 1). Strictly Use the Asymmetric Unit: You must provide only the generating coordinates for each Wyckoff orbit. Do NOT Pre-calculate Symmetry: The function will automatically apply all space group operators to your input. If you manually input coordinates that are already symmetry-equivalent (e.g., providing both (x, y, z) and (-x, -y, -z) in a centrosymmetric structure), the function will generate them again, causing catastrophic atom overlapping. Redundancy Rule: Before adding a coordinate, check if it can be generated from an existing input coordinate via any operator in the Space Group. If yes, discard it. One Wyckoff letter = One coordinate triplet input. {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [
+ 'fetch_bohrium_crystals',
+ 'fetch_structures_with_filter',
+ 'build_bulk_structure_by_template',
+ ],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_bulk_structure_by_wyckoff_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:通过指定空间群和 Wyckoff 位置来构建晶体结构。\n'
+ '使用场景:用于自定义晶体结构。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:空间群;带坐标的 Wyckoff 位置。\n'
+ '2. 输出:晶体结构文件。\n'
+ '3. 注意事项:需要对称性知识。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:空间群:整数(例如,225)或符号(例如,"Fm-3m")。Wyckoff 一致性:提供的坐标必须在数学上属于特定的 Wyckoff 位置(例如,如果在 (0,0,0) 使用位置 4a,不要仅仅因为它在同一晶胞中就输入 (0.5, 0.5, 0);只输入规范生成元)。晶格:角度以度为单位,长度以 Å 为单位。分数坐标:必须在 [0, 1) 范围内。严格使用非对称单元:您必须仅为每个 Wyckoff 轨道提供生成坐标。不要预先计算对称性:函数将自动将所有空间群操作符应用于您的输入。如果您手动输入已经对称等价的坐标(例如,在中心对称结构中同时提供 (x, y, z) 和 (-x, -y, -z)),函数将再次生成它们,导致灾难性的原子重叠。冗余规则:在添加坐标之前,检查它是否可以通过空间群中的任何操作符从现有输入坐标生成。如果是,则丢弃它。一个 Wyckoff 字母 = 一个坐标三元组输入。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [
+ 'fetch_bohrium_crystals',
+ 'fetch_structures_with_filter',
+ 'build_bulk_structure_by_template',
+ ],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_molecule_structures_from_smiles': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Build 3D molecular structures from SMILES strings.\n'
+ 'When to use: When you have SMILES and need 3D coordinates.\n'
+ 'Prerequisites / Inputs: SMILES string.\n'
+ 'Outputs: Molecular structure file.\n'
+ 'Cannot do / Limits: Single conformer generation.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_molecule_structures_from_smiles_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:从 SMILES 字符串构建 3D 分子结构。\n'
+ '使用场景:当您有 SMILES 并需要 3D 坐标时使用。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:SMILES 字符串。\n'
+ '2. 输出:分子结构文件。\n'
+ '3. 注意事项:单个构象生成。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'make_doped_structure': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Generate doped crystal structures by substituting atoms.\n'
+ 'When to use: For doping studies.\n'
+ 'Prerequisites / Inputs: Host structure; dopant species and concentrations.\n'
+ 'Outputs: Doped structure file.\n'
+ 'Cannot do / Limits: Random substitution; recommend supercells.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f'Parameter guidance: Fractions are applied per-site; actual doping % may differ slightly in small cells — recommend ≥2×2×2 supercells for <10% doping. Covalent ions (ammonium, formamidinium, etc.) are supported via built-in library; specify by name (e.g., "ammonium"). {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'make_doped_structure_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:通过替换原子生成掺杂晶体结构。\n'
+ '使用场景:用于掺杂研究。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:主体结构;掺杂物种和浓度。\n'
+ '2. 输出:掺杂结构文件。\n'
+ '3. 注意事项:随机替换;建议使用超胞。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f'参数指导:分数按位点应用;实际掺杂百分比在小晶胞中可能略有不同——对于 <10% 掺杂,建议使用 ≥2×2×2 超胞。共价离子(铵、甲脒等)通过内置库支持;按名称指定(例如,"ammonium")。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'make_defect_structure': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Create a defect structure by removing specific molecular clusters based on spatial relationships.\n'
+ 'When to use: For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.\n'
+ 'Prerequisites / Inputs: Input molecular crystal structure file; optionally target species to remove and starting molecule index.\n'
+ 'Outputs: Defective structure file.\n'
+ 'Cannot do / Limits: Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': 'Parameter guidance: structure_path is the input molecular crystal structure file (e.g., CIF); target_spec is an optional dictionary mapping species IDs to counts to remove (e.g., {"C6H14N2_1": 1, "H4N_1": 1}), if None uses the simplest unit in crystal; seed_index is the index of molecule to start removing from, if None picks randomly from rarest species; method is the method to use for selecting molecules to remove; return_removed_cluster: controls whether returns removed clusters; output_file is the path to save the generated defective structure file.',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'make_defect_structure_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:通过基于空间关系移除特定分子簇来创建缺陷结构。\n'
+ '使用场景:用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:分子晶体结构文件;(可选)目标移除物种、起始分子索引。\n'
+ '2. 输出:缺陷结构文件。\n'
+ '3. 注意事项:专为分子晶体设计。该功能确保移除的是整个分子单元,而非晶格中的孤立原子。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': '参数指导:structure_path 是输入的分子晶体结构文件(例如,CIF);target_spec 是一个可选的字典,将物种 ID 映射到要移除的数量(例如,{"C6H14N2_1": 1, "H4N_1": 1}),如果为 None 则使用晶体中最简单的单元;seed_index 是开始移除的分子的索引,如果为 None 则从最稀有物种中随机选择;method 是用于选择要移除的分子的方法;return_removed_cluster:控制是否返回移除的簇;output_file 是保存生成的缺陷结构文件的路径。',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'make_amorphous_structure': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Generate amorphous molecular structures in periodic boxes.\n'
+ 'When to use: For amorphous material simulations.\n'
+ 'Prerequisites / Inputs: Molecule structure; box size/density/count.\n'
+ 'Outputs: Amorphous structure file.\n'
+ 'Cannot do / Limits: Avoids overlaps; for further relaxation.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'args_setting': f'Parameter guidance: Input Constraint: Specify exactly two of: box_size, density, molecule_numbers. The third is derived. Density Regimes (CRITICAL): Solids/Liquids: Target ~0.9–1.2 g/cm³ (e.g., water ~1.0, polymers ~1.1). Gases/Vapors: Target orders of magnitude lower (e.g., ~0.001–0.002 g/cm³ for STP gases). Warning: Do not apply default liquid densities to gas inputs. If simulating a specific pressure, pre-calculate the required number of molecules N for the given Box Volume V (using Ideal Gas Law), then fix box_size and molecule_numbers. Composition: Use composition for multi-component mixtures; otherwise equal molar ratios are assumed. Packing Geometry: Box Size: For gases, ensure the box is large enough (usually >15 Å) to minimize unphysical periodic self-interactions, even if the density is low. {STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'make_amorphous_structure_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:在周期性盒子 (Periodic Box) 中生成非晶态/无定形分子结构。\n'
+ '使用场景:用于非晶材料模拟。\n'
+ '结构生成\n'
+ '使用方法:\n'
+ '1. 输入:分子结构;盒子尺寸/密度/数量。\n'
+ '2. 输出:非晶结构文件。\n'
+ '3. 注意事项:具备基础的防重叠功能,但生成的结构仍需进行后续的结构弛豫或分子动力学平衡。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'args_setting': f'参数指导:输入约束:精确指定以下两个:box_size、density、molecule_numbers。第三个是推导的。密度范围(关键):固体/液体:目标 ~0.9–1.2 g/cm³(例如,水 ~1.0,聚合物 ~1.1)。气体/蒸汽:目标数量级更低(例如,STP 气体 ~0.001–0.002 g/cm³)。警告:不要将默认液体密度应用于气体输入。如果模拟特定压力,预先计算给定盒子体积 V 所需的分子数 N(使用理想气体定律),然后固定 box_size 和 molecule_numbers。组成:对于多组分混合物使用 composition;否则假设等摩尔比。堆积几何:盒子尺寸:对于气体,确保盒子足够大(通常 >15 Å)以最小化非物理周期性自相互作用,即使密度很低。{STRUCTURE_BUILDING_SAVENAME}',
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'get_structure_info': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Extract structural information from **files**.\n'
+ 'When to use: Analyze crystal/molecular structures **files**.\n'
+ 'Prerequisites / Inputs: Structure file path.\n'
+ 'Outputs: Formula, space group, lattice, atoms.\n'
+ 'Cannot do / Limits: No modifications; read-only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': '',
+ 'alternative': ['file_parse'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'get_structure_info_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:从文件中提取结构信息。\n'
+ '使用场景:分析晶体/分子结构文件。\n'
+ '通用场景\n'
+ '使用方法:\n'
+ '1. 输入:结构文件路径。\n'
+ '2. 输出:化学式、空间群、晶格、原子。\n'
+ '3. 注意事项:不进行修改;只读。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': '',
+ 'alternative': ['file_parse'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'get_molecule_info': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Extract molecular structure information from **files**.\n'
+ 'When to use: Analyze molecular structures **files**.\n'
+ 'Prerequisites / Inputs: Molecule file path.\n'
+ 'Outputs: Formula, atoms, bonds, properties.\n'
+ 'Cannot do / Limits: No modifications; read-only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': '',
+ 'alternative': ['file_parse'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'get_molecule_info_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:从文件中提取分子结构信息。\n'
+ '使用场景:分析分子结构文件。\n'
+ '通用场景\n'
+ '使用方法:\n'
+ '1. 输入:分子文件路径。\n'
+ '2. 输出:化学式、原子、键、性质。\n'
+ '3. 注意事项:不进行修改;只读。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': '',
+ 'alternative': ['file_parse'],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'add_hydrogens': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_SANITIZE, SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ 'What it does: Add hydrogen atoms to a structure.\n'
+ 'When to use: Complete structures by adding missing hydrogens.\n'
+ 'Prerequisites / Inputs: Structure file path; optional bonding or hydrogen-adding rules.\n'
+ 'Outputs: Structure file with hydrogens added.\n'
+ 'Cannot do / Limits: No optimization, refinement, or reactions.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': (
+ '- target_elements: Optional. Limit hydrogen addition to specific elements.\n'
+ '- optimize_torsion: Optional. If True, adjust torsion angles to optimize geometry; default is False.\n'
+ '- rules: Optional. **Critical** for special cases (e.g., N in ammonium must remain target_coordination=4 and geometry of tetrahedron). '
+ 'If not provided, default chemical environment rules are used. For precise control, provide rules to override defaults.\n'
+ '- bond_lengths: Optional. Override default bond lengths for specific atom pairs. If None, defaults are used.\n'
+ 'IMPORTANT: Even though rules are optional, certain functional groups require explicit rules for correctness. '
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'add_hydrogens_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_SANITIZE, SceneEnum.STRUCTURE_GENERATE],
+ 'description': (
+ '功能:为输入结构添加氢原子。\n'
+ '使用场景:补全结构中缺失的氢原子。\n'
+ '结构规范化,结构生成\n'
+ '使用方法:\n'
+ '1. 输入:结构文件路径;成键规则或特定的加氢逻辑。\n'
+ '2. 输出:已添加氢原子的结构文件。\n'
+ '3. 注意事项:不进行优化、精化或反应。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': (
+ '- target_elements: 可选。将氢添加限制到特定元素。\n'
+ '- optimize_torsion: 可选。如果为 True,调整扭转角以优化几何结构;默认为 False。\n'
+ '- rules: 可选。对于特殊情况**关键**(例如,铵中的 N 必须保持 target_coordination=4 和四面体几何)。'
+ '如果未提供,则使用默认化学环境规则。为了精确控制,提供规则以覆盖默认值。\n'
+ '- bond_lengths: 可选。覆盖特定原子对的默认键长。如果为 None,则使用默认值。\n'
+ '重要提示:尽管规则是可选的,但某些官能团需要显式规则才能正确。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': True,
+ },
+ 'generate_ordered_replicas': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE],
+ 'description': (
+ 'What it does: Process disordered CIF files to generate ordered replica structures.\n'
+ 'When to use: When you have a disordered structure and need to resolve disorder to create ordered structures.\n'
+ 'Prerequisites / Inputs: Disordered CIF file path; optional number of structures to generate, method for generation.\n'
+ 'Outputs: List of paths to the generated ordered structure files.\n'
+ 'Cannot do / Limits: Only processes disordered structures to ordered ones; requires valid CIF input.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'args_setting': (
+ 'Parameter guidance: structure_path: Required. Input disordered structure file (CIF format). '
+ 'generate_count: Optional. Number of ordered structures to generate (default: 1). '
+ 'method: Optional. Method for generation ("optimal" for single best structure, "random" for ensemble of structures) (default: "random"). '
+ 'output_file: Optional. Directory to save output files; defaults to subdirectory of input file location.'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'generate_ordered_replicas_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE],
+ 'description': (
+ '功能:处理含有原子无序的 CIF 文件,生成对应的有序化副本结构。\n'
+ '使用场景:当您有无序结构并需要解决无序以创建有序结构时使用。\n'
+ '结构生成,结构规范化\n'
+ '使用方法:\n'
+ '1. 输入:无序 CIF 文件路径;(可选)生成的有序结构数量、生成方法。\n'
+ '2. 输出:生成的有序结构文件路径列表。\n'
+ '3. 注意事项:仅处理无序结构到有序结构;必须提供符合规范的 CIF 输入文件。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'args_setting': (
+ '参数指导:structure_path: 必需。输入无序结构文件(CIF 格式)。'
+ 'generate_count: 可选。要生成的有序结构数量(默认:1)。'
+ 'method: 可选。生成方法("optimal" 用于单个最佳结构,"random" 用于结构集合)(默认:"random")。'
+ 'output_file: 可选。保存输出文件的目录;默认为输入文件位置的子目录。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'remove_solvents': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE],
+ 'description': (
+ 'What it does: Remove specified solvent molecules from a molecular crystal structure.\n'
+ 'When to use: When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.\n'
+ 'Prerequisites / Inputs: CIF structure file containing identifiable solvent molecules; target solvent names or formulas.\n'
+ 'Outputs: Path to the desolvated structure file.\n'
+ 'Cannot do / Limits: Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder.\n'
+ 'Prior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.\n'
+ 'Cost / Notes: Low. Recommended to inspect molecular components first.'
+ ),
+ 'args_setting': (
+ 'Parameter guidance: structure_path: Required. Input CIF file containing solvent molecules. '
+ 'output_file: Required. Path to save the desolvated structure. '
+ 'targets: Required. List of solvent names or chemical formulas to remove (e.g., "H2O", "DMF"). '
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'remove_solvents_zh': {
+ 'belonging_agent': StructureGenerateAgentName,
+ 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE],
+ 'description': (
+ '功能:从分子晶体结构中移除指定的溶剂分子。\n'
+ '使用场景:当对分子晶体进行去溶剂化以获得无溶剂或部分去溶剂化结构用于分析或模拟时使用。\n'
+ '结构生成,结构规范化\n'
+ '使用方法:\n'
+ '1. 输入:包含可识别溶剂分子的 CIF 结构文件;目标溶剂名称或化学式。\n'
+ '2. 输出:去溶剂化结构文件的路径。\n'
+ '3. 注意事项:仅能移除基于化学组成识别的完整溶剂分子;该操作不会修改骨架原子,也不会处理结构中的无序问题。建议首先调用 get_structure_info 以检查分子组分并确认溶剂身份。\n'
+ '4. 成本/备注:低。建议首先检查分子组分。'
+ ),
+ 'args_setting': (
+ '参数指导:structure_path: 必需。包含溶剂分子的输入 CIF 文件。'
+ 'output_file: 必需。保存去溶剂化结构的路径。'
+ 'targets: 必需。要移除的溶剂名称或化学式列表(例如,"H2O"、"DMF")。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'run_superconductor_optimization': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ 'What it does: Optimize superconducting structures.\n'
+ 'When to use: Relax superconductor geometries.\n'
+ 'Prerequisites / Inputs: Structure file (CIF/POSCAR).\n'
+ 'Outputs: Optimized structure.\n'
+ 'Cannot do / Limits: Only geometry optimization.\n'
+ 'Cost / Notes: High (DPA calculations).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_superconductor_optimization_zh': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ '功能:优化超导结构。\n'
+ '使用场景:弛豫超导体几何结构。\n'
+ '超导体\n'
+ '使用方法:\n'
+ '1. 输入:结构文件(CIF/POSCAR)。\n'
+ '2. 输出:优化后的结构。\n'
+ '3. 注意事项:仅进行几何优化。\n'
+ '4. 成本/备注:高(DPA 计算)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'calculate_superconductor_enthalpy': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ 'What it does: Calculate enthalpy and stability.\n'
+ 'When to use: Screen superconductor stability.\n'
+ 'Prerequisites / Inputs: Structure candidates.\n'
+ 'Outputs: Enthalpy, convex hull, stable phases.\n'
+ 'Cannot do / Limits: Superconductor-specific only.\n'
+ 'Cost / Notes: High (DPA calculations).'
+ ),
+ 'alternative': ['predict_superconductor_Tc'],
+ 'self_check': False,
+ },
+ 'calculate_superconductor_enthalpy_zh': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ '功能:计算焓和稳定性。\n'
+ '使用场景:筛选超导体稳定性。\n'
+ '超导体\n'
+ '使用方法:\n'
+ '1. 输入:结构候选物。\n'
+ '2. 输出:焓、凸包、稳定相。\n'
+ '3. 注意事项:仅限超导体。\n'
+ '4. 成本/备注:高(DPA 计算)。'
+ ),
+ 'alternative': ['predict_superconductor_Tc'],
+ 'self_check': False,
+ },
+ 'predict_superconductor_Tc': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ 'What it does: Predict superconducting Tc.\n'
+ 'When to use: Estimate critical temperature.\n'
+ 'Prerequisites / Inputs: Material structure.\n'
+ 'Outputs: Tc prediction.\n'
+ 'Cannot do / Limits: DPA model only.\n'
+ 'Cost / Notes: High (ML predictions).'
+ ),
+ 'alternative': ['calculate_superconductor_enthalpy'],
+ 'self_check': False,
+ },
+ 'predict_superconductor_Tc_zh': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ '功能:预测超导 Tc。\n'
+ '使用场景:估算临界温度。\n'
+ '超导体\n'
+ '使用方法:\n'
+ '1. 输入:材料结构。\n'
+ '2. 输出:Tc 预测。\n'
+ '3. 注意事项:仅限 DPA 模型。\n'
+ '4. 成本/备注:高(ML 预测)。'
+ ),
+ 'alternative': ['calculate_superconductor_enthalpy'],
+ 'self_check': False,
+ },
+ 'screen_superconductor': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ 'What it does: Screen multiple superconductors.\n'
+ 'When to use: Compare Tc and stability.\n'
+ 'Prerequisites / Inputs: List of candidates.\n'
+ 'Outputs: Ranked Tc and stability.\n'
+ 'Cannot do / Limits: Multiple candidates only.\n'
+ 'Cost / Notes: High (batch DPA).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'screen_superconductor_zh': {
+ 'belonging_agent': SuperconductorAgentName,
+ 'scene': [SceneEnum.SUPERCONDUCTOR],
+ 'description': (
+ '功能:筛选多个超导体。\n'
+ '使用场景:比较 Tc 和稳定性。\n'
+ '超导体\n'
+ '使用方法:\n'
+ '1. 输入:候选物列表。\n'
+ '2. 输出:排序的 Tc 和稳定性。\n'
+ '3. 注意事项:仅限多个候选物。\n'
+ '4. 成本/备注:高(批量 DPA)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'predict_thermoelectric_properties': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ 'What it does: Predict thermoelectric properties.\n'
+ 'When to use: Estimate band gap, Seebeck, etc.\n'
+ 'Prerequisites / Inputs: Material structure.\n'
+ 'Outputs: Band gap, Seebeck, power factor, moduli.\n'
+ 'Cannot do / Limits: No thermal conductivity.\n'
+ 'Cost / Notes: High (DPA predictions).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'predict_thermoelectric_properties_zh': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ '功能:预测热电性质。\n'
+ '使用场景:估算带隙、塞贝克系数等。\n'
+ '热电\n'
+ '使用方法:\n'
+ '1. 输入:材料结构文件。\n'
+ '2. 输出:带隙、塞贝克系数、功率因子、模量。\n'
+ '3. 注意事项:暂不支持热导率的预测。\n'
+ '4. 成本/备注:高(DPA 预测)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_pressure_optimization': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ 'What it does: Optimize under pressure.\n'
+ 'When to use: Relax thermoelectric structures.\n'
+ 'Prerequisites / Inputs: Structure, pressure.\n'
+ 'Outputs: Optimized structure.\n'
+ 'Cannot do / Limits: Thermoelectric-specific.\n'
+ 'Cost / Notes: High (DPA calculations).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_pressure_optimization_zh': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ '功能:在压力下优化。\n'
+ '使用场景:弛豫热电结构。\n'
+ '热电\n'
+ '使用方法:\n'
+ '1. 输入:结构、压力。\n'
+ '2. 输出:优化后的结构。\n'
+ '3. 注意事项:仅限热电材料。\n'
+ '4. 成本/备注:高(DPA 计算)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'calculate_thermoele_enthalp': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ 'What it does: Calculate enthalpy under pressure.\n'
+ 'When to use: Screen thermoelectric stability.\n'
+ 'Prerequisites / Inputs: Candidates, pressure.\n'
+ 'Outputs: Enthalpy, convex hull.\n'
+ 'Cannot do / Limits: Thermoelectric-specific.\n'
+ 'Cost / Notes: High (DPA calculations).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'calculate_thermoele_enthalp_zh': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ '功能:计算压力下的焓。\n'
+ '使用场景:筛选热电稳定性。\n'
+ '热电\n'
+ '使用方法:\n'
+ '1. 输入:候选物、压力。\n'
+ '2. 输出:焓、凸包。\n'
+ '3. 注意事项:仅限热电材料。\n'
+ '4. 成本/备注:高(DPA 计算)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'screen_thermoelectric_candidate': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ 'What it does: Screen thermoelectric candidates.\n'
+ 'When to use: Identify promising materials.\n'
+ 'Prerequisites / Inputs: Multiple structures.\n'
+ 'Outputs: Ranked thermoelectric properties.\n'
+ 'Cannot do / Limits: Requires multiple inputs.\n'
+ 'Cost / Notes: High (batch DPA).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'screen_thermoelectric_candidate_zh': {
+ 'belonging_agent': ThermoelectricAgentName,
+ 'scene': [SceneEnum.THERMOELECTRIC],
+ 'description': (
+ '功能:筛选热电候选物。\n'
+ '使用场景:识别有前景的材料。\n'
+ '热电\n'
+ '使用方法:\n'
+ '1. 输入:多个结构。\n'
+ '2. 输出:排序的热电性质。\n'
+ '3. 注意事项:需要多个输入。\n'
+ '4. 成本/备注:高(批量 DPA)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_diffusion': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ 'What it does: Analyze diffusion from trajectories.\n'
+ 'When to use: Calculate MSD, diffusion coeffs.\n'
+ 'Prerequisites / Inputs: MD trajectory file.\n'
+ 'Outputs: MSD, D, conductivity.\n'
+ 'Cannot do / Limits: Post-MD analysis only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_diffusion_zh': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ '功能:从分子动力学轨迹分析扩散。\n'
+ '使用场景:计算均方位移(MSD)、扩散系数等。\n'
+ 'POST_MD_ANALYSIS\n'
+ '使用方法:\n'
+ '1. 输入:分子动力学轨迹文件。\n'
+ '2. 输出:MSD、扩散系数 D、电导率等。\n'
+ '3. 注意事项:仅用于分子动力学后处理分析。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_rdf': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ 'What it does: Compute RDF from trajectories.\n'
+ 'When to use: Analyze atomic distributions.\n'
+ 'Prerequisites / Inputs: MD trajectory.\n'
+ 'Outputs: Radial distribution function.\n'
+ 'Cannot do / Limits: Post-MD analysis only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_rdf_zh': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ '功能:从分子动力学轨迹计算径向分布函数(RDF)。\n'
+ '使用场景:分析原子分布。\n'
+ 'POST_MD_ANALYSIS\n'
+ '使用方法:\n'
+ '1. 输入:分子动力学轨迹。\n'
+ '2. 输出:径向分布函数。\n'
+ '3. 注意事项:仅用于分子动力学后处理分析。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_solvation': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ 'What it does: Analyze solvation structures.\n'
+ 'When to use: Study solvent-solute interactions.\n'
+ 'Prerequisites / Inputs: MD trajectory.\n'
+ 'Outputs: Solvation shells, properties.\n'
+ 'Cannot do / Limits: Post-MD analysis only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_solvation_zh': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ '功能:分析溶剂化结构。\n'
+ '使用场景:研究溶剂-溶质相互作用。\n'
+ 'POST_MD_ANALYSIS\n'
+ '使用方法:\n'
+ '1. 输入:分子动力学轨迹。\n'
+ '2. 输出:溶剂化壳层、相关性质。\n'
+ '3. 注意事项:仅用于分子动力学后处理分析。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_bond': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ 'What it does: Analyze bond length evolution.\n'
+ 'When to use: Monitor bond dynamics.\n'
+ 'Prerequisites / Inputs: MD trajectory.\n'
+ 'Outputs: Bond length time series.\n'
+ 'Cannot do / Limits: Post-MD analysis only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_bond_zh': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ '功能:分析键长随时间的变化。\n'
+ '使用场景:监测化学键动力学。\n'
+ 'POST_MD_ANALYSIS\n'
+ '使用方法:\n'
+ '1. 输入:分子动力学轨迹。\n'
+ '2. 输出:键长时间序列。\n'
+ '3. 注意事项:仅用于分子动力学后处理分析。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_react': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ 'What it does: Analyze reaction networks.\n'
+ 'When to use: Study chemical reactions.\n'
+ 'Prerequisites / Inputs: MD trajectory.\n'
+ 'Outputs: Reaction species, networks.\n'
+ 'Cannot do / Limits: Post-MD analysis only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'traj_analysis_react_zh': {
+ 'belonging_agent': TrajAnalysisAgentName,
+ 'scene': [SceneEnum.POST_MD_ANALYSIS],
+ 'description': (
+ '功能:分析反应网络。\n'
+ '使用场景:研究化学反应。\n'
+ 'POST_MD_ANALYSIS\n'
+ '使用方法:\n'
+ '1. 输入:分子动力学轨迹。\n'
+ '2. 输出:反应物种、反应网络。\n'
+ '3. 注意事项:仅用于分子动力学后处理分析。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'visualize_data_from_file': {
+ 'belonging_agent': VisualizerAgentName,
+ 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Create plots from data files.\n'
+ 'When to use: Visualize CSV/Excel/JSON data.\n'
+ 'Prerequisites / Inputs: Data file URL.\n'
+ 'Outputs: Plots.\n'
+ 'Cannot do / Limits: Data files only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'visualize_data_from_file_zh': {
+ 'belonging_agent': VisualizerAgentName,
+ 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:从数据文件创建图表。\n'
+ '使用场景:可视化 CSV/Excel/JSON 等数据。\n'
+ '数据可视化,通用场景\n'
+ '使用方法:\n'
+ '1. 输入:数据文件 URL。\n'
+ '2. 输出:图表。\n'
+ '3. 注意事项:仅支持数据文件。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'visualize_data_from_prompt': {
+ 'belonging_agent': VisualizerAgentName,
+ 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Create plots from prompts.\n'
+ 'When to use: Quick visualize data embedded in prompt.\n'
+ 'Outputs: Plots.\n'
+ 'Cannot do / Limits: Plot requests with valid data only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'visualize_data_from_prompt_zh': {
+ 'belonging_agent': VisualizerAgentName,
+ 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:根据提示词创建图表。\n'
+ '使用场景:快速可视化嵌入在提示词中的数据。\n'
+ '数据可视化,通用场景\n'
+ '使用方法:\n'
+ '1. 输入:提示词(内含数据)。\n'
+ '2. 输出:图表。\n'
+ '3. 注意事项:仅支持包含有效数据的绘图请求。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'orchestrate_input': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [
+ SceneEnum.MOLECULAR_DYNAMICS,
+ SceneEnum.LAMMPS,
+ SceneEnum.ABACUS,
+ SceneEnum.UNIVERSAL,
+ ],
+ 'description': (
+ 'What it does: Generate input scripts for simulation/calculation engines. '
+ 'Supports: LAMMPS, ABACUS, VASP, QE (Quantum ESPRESSO), Psi4, Gaussian, ORCA.\n'
+ 'When to use: Create input from description.\n'
+ 'Prerequisites / Inputs: structural information; engine_type (one of: lammps, abacus, vasp, qe, psi4, gaussian, orca), natural language task.\n'
+ 'Outputs: Input script content.\n'
+ 'Cannot do / Limits: Script generation only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'orchestrate_input_zh': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS],
+ 'description': (
+ '功能:为模拟引擎生成输入脚本(当前支持:LAMMPS, ABACUS, VASP, QE, Psi4, Gaussian, ORCA)。\n'
+ '使用场景:根据描述创建输入文件。\n'
+ '分子动力学,LAMMPS\n'
+ '使用方法:\n'
+ '1. 输入:engine_type="lammps"(或者以下其中一种:abacus, vasp, qe, psi4, gaussian, orca),自然语言任务描述。\n'
+ '2. 输出:输入脚本内容。\n'
+ '3. 注意事项:仅生成脚本,不执行模拟。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'convert_structural_format': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS],
+ 'description': (
+ 'What it does: Convert structure to target format (Currently supports: lammps/lmp).\n'
+ 'When to use: Prepare structures for simulation.\n'
+ 'Prerequisites / Inputs: Structure file URL, target_format="lammps/lmp".\n'
+ 'Outputs: Converted structure file.\n'
+ 'Cannot do / Limits: Format conversion only.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'convert_structural_format_zh': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS],
+ 'description': (
+ '功能:将结构转换为目标格式(当前支持:lammps/lmp)。\n'
+ '使用场景:为模拟准备结构文件。\n'
+ '分子动力学,LAMMPS\n'
+ '使用方法:\n'
+ '1. 输入:结构文件 URL;target_format="lammps/lmp"。\n'
+ '2. 输出:转换后的结构文件。\n'
+ '3. 注意事项:仅进行格式转换。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_lammps': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS],
+ 'description': (
+ 'What it does: Run LAMMPS simulations.\n'
+ 'When to use: Perform MD or minimization.\n'
+ 'Prerequisites / Inputs: LAMMPS data file.\n'
+ 'Outputs: Simulation results.\n'
+ 'Cannot do / Limits: Requires LAMMPS format.\n'
+ 'Cost / Notes: High (simulation time).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'run_lammps_zh': {
+ 'belonging_agent': LAMMPS_AGENT_NAME,
+ 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS],
+ 'description': (
+ '功能:运行 LAMMPS 分子动力学模拟。\n'
+ '使用场景:执行分子动力学或能量最小化。\n'
+ '分子动力学,LAMMPS\n'
+ '使用方法:\n'
+ '1. 输入:LAMMPS 数据文件。\n'
+ '2. 输出:模拟结果。\n'
+ '3. 注意事项:输入须为 LAMMPS 格式。\n'
+ '4. 成本/备注:高(取决于模拟时长)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'search-papers-enhanced': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.LITERATURE],
+ 'description': (
+ 'What it does: Search scientific papers.\n'
+ 'When to use: Find research on topics.\n'
+ 'Prerequisites / Inputs: Topic keywords.\n'
+ 'Outputs: Literature summary, abstract information of relevant papers, web link of the papers\n'
+ 'Cannot do / Limits: Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'args_setting': f"""
+ If not specified, apply start_time=2020-01-01, end_time={TODAY}, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.
+
+ Must be aware of these prior knowledge:
+ - {ALIAS_SEARCH_PROMPT}
+ """,
+ 'alternative': ['web-search'],
+ 'summary_prompt': PAPER_SEARCH_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'search-papers-enhanced_zh': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.LITERATURE],
+ 'description': (
+ '功能:检索科学文献。\n'
+ '使用场景:按主题查找相关研究。\n'
+ '文献\n'
+ '使用方法:\n'
+ '1. 输入:主题关键词。\n'
+ '2. 输出:文献摘要、相关论文摘要信息及论文链接。\n'
+ '3. 注意事项:仅进行文献检索;不下载学位论文等文件(.pdf、.doc 等)。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'args_setting': f"""
+ If not specified, apply start_time=2020-01-01, end_time={TODAY}, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.
+
+ Must be aware of these prior knowledge:
+ - {ALIAS_SEARCH_PROMPT}
+ """,
+ 'alternative': ['web-search'],
+ 'summary_prompt': PAPER_SEARCH_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'web-search': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Perform web searches for what, why, how questions.\n'
+ 'When to use: For concise factual or explanatory lookups.\n'
+ 'Prerequisites / Inputs: Search query.\n'
+ 'Outputs: URL, title, snippet.\n'
+ 'Cannot do / Limits: No command-type queries; follow up with extract_info_from_webpage.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'summary_prompt': WEB_SEARCH_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'web-search_zh': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:执行网页搜索,回答 what、why、how 类问题。\n'
+ '使用场景:进行简明的事实查询或解释性检索。\n'
+ '通用场景\n'
+ '使用方法:\n'
+ '1. 输入:搜索查询词。\n'
+ '2. 输出:URL、标题、摘要片段。\n'
+ '3. 注意事项:不支持指令型查询;如需提取页面内容可后续调用 extract_info_from_webpage。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'summary_prompt': WEB_SEARCH_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'build_convex_hull': {
+ 'belonging_agent': ConvexHullAgentName,
+ 'scene': [SceneEnum.CONVEXHULL],
+ 'description': (
+ 'What it does: Build convex hull diagrams.\n'
+ 'When to use: Assess thermodynamic stability.\n'
+ 'Prerequisites / Inputs: Material structures.\n'
+ 'Outputs: Convex hull, stable phases.\n'
+ 'Cannot do / Limits: General materials only.\n'
+ 'Cost / Notes: High (DPA calculations).'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'build_convex_hull_zh': {
+ 'belonging_agent': ConvexHullAgentName,
+ 'scene': [SceneEnum.CONVEXHULL],
+ 'description': (
+ '功能:构建凸包图。\n'
+ '使用场景:评估材料的热力学稳定性。\n'
+ '凸包\n'
+ '使用方法:\n'
+ '1. 输入:材料结构。\n'
+ '2. 输出:凸包、稳定相。\n'
+ '3. 注意事项:仅适用于通用材料。\n'
+ '4. 成本/备注:高(涉及 DPA 计算)。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_search_tool': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ 'What it does: Search a molecular database by NMR spectroscopic features to retrieve candidate structures.\n'
+ 'When to use: You have NMR peak/shift patterns and want likely matching molecules.\n'
+ 'Prerequisites / Inputs: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.\n'
+ 'Outputs: Ranked candidate molecules/structures with match scores and key evidence fields.\n'
+ 'Cannot do / Limits: Not a definitive identification; results depend on database coverage and feature quality.\n'
+ 'Cost / Notes: Medium; tighter tolerances increase runtime and reduce recall.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_search_tool_zh': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ '功能:根据核磁共振谱图特征在分子数据库中检索候选结构。\n'
+ '使用场景:已有 NMR 峰/化学位移等谱图信息,需要匹配的可能分子。\n'
+ 'NMR\n'
+ '使用方法:\n'
+ '1. 输入:符合工具规范的 NMR 特征(如化学位移、多重度、耦合、核类型等);可选容差设置。\n'
+ '2. 输出:带匹配分数和关键证据的候选分子/结构排序列表。\n'
+ '3. 注意事项:非唯一鉴定;结果依赖数据库覆盖度和特征质量。\n'
+ '4. 成本/备注:中等;容差越严,耗时增加、召回率降低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_predict_tool': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ 'What it does: Predict NMR spectroscopic properties for molecular structures.\n'
+ 'When to use: When you need simulated NMR chemical shifts.\n'
+ 'Prerequisites / Inputs: SMILES strings.\n'
+ 'Outputs: Predicted NMR shifts and similarity scores.\n'
+ 'Cannot do / Limits: 1H and 13C only.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_predict_tool_zh': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ '功能:预测分子结构的核磁共振谱图性质。\n'
+ '使用场景:需要模拟的 NMR 化学位移时使用。\n'
+ 'NMR\n'
+ '使用方法:\n'
+ '1. 输入:SMILES 字符串。\n'
+ '2. 输出:预测的 NMR 化学位移及相似度分数。\n'
+ '3. 注意事项:仅支持 1H 与 13C。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_reverse_predict_tool': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ 'What it does: Generate candidate molecular structures from NMR spectroscopic data.\n'
+ 'When to use: When you have NMR data and need structure candidates.\n'
+ 'Prerequisites / Inputs: NMR spectroscopic data.\n'
+ 'Outputs: Candidate molecular structures.\n'
+ 'Cannot do / Limits: Based on NMR features.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'NMR_reverse_predict_tool_zh': {
+ 'belonging_agent': NMR_AGENT_NAME,
+ 'scene': [SceneEnum.NMR],
+ 'description': (
+ '功能:从核磁共振谱图数据生成候选分子结构。\n'
+ '使用场景:已有 NMR 数据,需要结构候选时使用。\n'
+ 'NMR\n'
+ '使用方法:\n'
+ '1. 输入:核磁共振谱图数据。\n'
+ '2. 输出:候选分子结构。\n'
+ '3. 注意事项:基于 NMR 特征生成。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'extract_info_from_webpage': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Extract key information from a webpage URL.\n'
+ 'When to use: When you need scientific facts, data, or findings from a webpage.\n'
+ 'Prerequisites / Inputs: Webpage URL.\n'
+ 'Outputs: Extracted information in text form.\n'
+ 'Cannot do / Limits: Only return text and do not support generating files in any format.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'summary_prompt': WEBPAGE_PARSING_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'extract_info_from_webpage_zh': {
+ 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:从网页 URL 提取关键信息。\n'
+ '使用场景:需要从网页获取科学事实、数据或结论时使用。\n'
+ '通用场景\n'
+ '使用方法:\n'
+ '1. 输入:网页 URL。\n'
+ '2. 输出:以文本形式呈现的提取结果。\n'
+ '3. 注意事项:仅返回文本,不支持生成任何格式的文件。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'summary_prompt': WEBPAGE_PARSING_AGENT_INSTRUCTION,
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'xrd_parse_file': {
+ 'belonging_agent': XRD_AGENT_NAME,
+ 'scene': [SceneEnum.XRD],
+ 'description': (
+ 'What it does: Parse and preprocess raw XRD data files.\n'
+ 'When to use: When you have XRD data to analyze.\n'
+ 'Prerequisites / Inputs: XRD files (.xrdml, .xy, .asc, .txt).\n'
+ 'Outputs: Processed data and visualization configs.\n'
+ 'Cannot do / Limits: Not support .raw and .mdi format files.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'xrd_parse_file_zh': {
+ 'belonging_agent': XRD_AGENT_NAME,
+ 'scene': [SceneEnum.XRD],
+ 'description': (
+ '功能:解析并预处理原始 XRD 数据文件。\n'
+ '使用场景:有待分析的 XRD 数据时使用。\n'
+ 'XRD\n'
+ '使用方法:\n'
+ '1. 输入:XRD 文件(.xrdml、.xy、.asc、.txt)。\n'
+ '2. 输出:处理后的数据及可视化配置。\n'
+ '3. 注意事项:不支持 .raw、.mdi 格式。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'xrd_phase_identification': {
+ 'belonging_agent': XRD_AGENT_NAME,
+ 'scene': [SceneEnum.XRD],
+ 'description': (
+ 'What it does: Identify crystalline phases in XRD pattern.\n'
+ 'When to use: When you have processed XRD data.\n'
+ 'Prerequisites / Inputs: Processed CSV file; optional composition filters.\n'
+ 'Outputs: Top matching phases and comparison chart.\n'
+ 'Cannot do / Limits: Requires processed data.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'xrd_phase_identification_zh': {
+ 'belonging_agent': XRD_AGENT_NAME,
+ 'scene': [SceneEnum.XRD],
+ 'description': (
+ '功能:在 XRD 谱图中鉴定晶相。\n'
+ '使用场景:已有处理后的 XRD 数据时使用。\n'
+ 'XRD\n'
+ '使用方法:\n'
+ '1. 输入:处理后的 CSV 文件;可选的组分过滤条件。\n'
+ '2. 输出:最佳匹配相及对比图。\n'
+ '3. 注意事项:需要先完成数据预处理。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'get_electron_microscope_recognize': {
+ 'belonging_agent': Electron_Microscope_AGENT_NAME,
+ 'scene': [SceneEnum.Electron_Microscope],
+ 'description': (
+ 'What it does: Analyze electron microscope images for particles and morphology.\n'
+ 'When to use: When you have TEM/SEM images to analyze.\n'
+ 'Prerequisites / Inputs: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\n'
+ 'Outputs: Detected particles, morphology, geometric properties.\n'
+ 'Cannot do / Limits: Only support .tif, .tiff, .png, .jpeg, .jpg format files.\n'
+ 'Cost / Notes: Medium.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'get_electron_microscope_recognize_zh': {
+ 'belonging_agent': Electron_Microscope_AGENT_NAME,
+ 'scene': [SceneEnum.Electron_Microscope],
+ 'description': (
+ '功能:分析电镜图像中的颗粒与形貌。\n'
+ '使用场景:有待分析的 TEM/SEM 图像时使用。\n'
+ '电镜\n'
+ '使用方法:\n'
+ '1. 输入:电镜图像(.tif、.tiff、.png、.jpeg、.jpg)。\n'
+ '2. 输出:检测到的颗粒、形貌及几何性质。\n'
+ '3. 注意事项:仅支持 .tif、.tiff、.png、.jpeg、.jpg 格式。\n'
+ '4. 成本/备注:中等。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_parse_and_get_mol': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ 'What it does: Parse a single TPD file and extract recognized molecule weights (m/z or labels).\n'
+ 'When to use: When you need to know which molecule weights are present in a TPD file.\n'
+ 'Prerequisites / Inputs: Local file path, file name, data type (Signal vs. Temp/Time).\n'
+ 'Outputs: List of molecule weights (m/z or "*").\n'
+ 'Cannot do / Limits: Only parses local files; remote URLs must be downloaded first.\n'
+ 'Cost / Notes: Fast; supports three data types.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_parse_and_get_mol_zh': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ '功能:解析单个 TPD 文件并提取识别到的分子量(m/z 或标签)。\n'
+ '使用场景:需要获知 TPD 文件中包含哪些分子量时使用。\n'
+ 'TPD\n'
+ '使用方法:\n'
+ '1. 输入:本地文件路径、文件名、数据类型(Signal 或 Temp/Time)。\n'
+ '2. 输出:分子量列表(m/z 或 "*")。\n'
+ '3. 注意事项:仅解析本地文件;远程 URL 需先下载。\n'
+ '4. 成本/备注:快速;支持三种数据类型。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_get_chart': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ 'What it does: Generate ECharts visualization config for selected molecule weights in a TPD file.\n'
+ 'When to use: When you want to plot curves for selected m/z channels from a TPD file.\n'
+ 'Prerequisites / Inputs: Local file path, file name, selected_weights (list of m/z), data type, line width.\n'
+ 'Outputs: Path to saved ECharts option JSON file.\n'
+ 'Cannot do / Limits: Only local files; selected_weights must match available m/z.\n'
+ 'Cost / Notes: Fast; supports three data types.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_get_chart_zh': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ '功能:为 TPD 文件中选定的分子量生成 ECharts 可视化配置。\n'
+ '使用场景:需要绘制 TPD 文件中选定 m/z 通道的曲线时使用。\n'
+ 'TPD\n'
+ '使用方法:\n'
+ '1. 输入:本地文件路径、文件名、selected_weights(m/z 列表)、数据类型、线宽。\n'
+ '2. 输出:保存的 ECharts 配置 JSON 文件路径。\n'
+ '3. 注意事项:仅支持本地文件;selected_weights 须与可用 m/z 对应。\n'
+ '4. 成本/备注:快速;支持三种数据类型。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_get_cal': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ 'What it does: Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.\n'
+ 'When to use: When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.\n'
+ 'Prerequisites / Inputs: Local file path; target molecule weight (m/z as string like "18", "44", or "*" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).\n'
+ 'Outputs: ECharts visualization config, integration area (if calculated), error list for failed operations.\n'
+ 'Cannot do / Limits: Processes one m/z at a time; call multiple times for multiple molecules; requires local files.\n'
+ 'Cost / Notes: Medium; each operation is independent; default to total signal (*) if m/z not specified.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_get_cal_zh': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ '功能:对单个文件中某一分子量(m/z)信号进行 TPD 分析(寻峰、拟合、积分、求导)。\n'
+ '使用场景:需要对特定 m/z 通道或总信号做峰分析、面积计算或求导时使用。\n'
+ 'TPD\n'
+ '使用方法:\n'
+ '1. 输入:本地文件路径;目标分子量(m/z 字符串如 "18"、"44",或 "*" 表示总信号);分析操作(寻峰、拟合、积分范围、求导设置等)。\n'
+ '2. 输出:ECharts 可视化配置、积分面积(若计算)、失败操作的错误列表。\n'
+ '3. 注意事项:每次仅处理一个 m/z;多分子需多次调用;须为本地文件。\n'
+ '4. 成本/备注:中等;各操作独立;未指定 m/z 时默认总信号。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_peak_integrate': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ 'What it does: For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.\n'
+ 'When to use: Quickly estimate peak areas for one channel.\n'
+ 'Prerequisites / Inputs: Local file path, file name, mol_weight (m/z or "*"), data type, baseline_mode, window_halfwidth, line width.\n'
+ 'Outputs: Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.\n'
+ 'Cannot do / Limits: Only local files; window-based integration may overlap for dense peaks.\n'
+ 'Cost / Notes: Fast; supports horizontal/trend baseline.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'tpd_peak_integrate_zh': {
+ 'belonging_agent': TPD_AGENT_NAME,
+ 'scene': [SceneEnum.TPD],
+ 'description': (
+ '功能:对单个 TPD 文件及 m/z,在局部窗口内检测峰并对各峰积分;可视化原始曲线、峰标记与基线段。\n'
+ '使用场景:快速估算单通道峰面积时使用。\n'
+ 'TPD\n'
+ '使用方法:\n'
+ '1. 输入:本地文件路径、文件名、mol_weight(m/z 或 "*")、数据类型、baseline_mode、window_halfwidth、线宽。\n'
+ '2. 输出:ECharts 配置 JSON 路径、峰列表、各峰积分值、llm_context 摘要。\n'
+ '3. 注意事项:仅支持本地文件;窗口积分在峰密集时可能重叠。\n'
+ '4. 成本/备注:快速;支持水平/趋势基线。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'llm_tool': {
+ 'belonging_agent': TOOL_AGENT_NAME,
+ 'scene': [],
+ 'description': (
+ 'What it does: Use LLM for general tasks.\n'
+ 'When to use: For LLM-based assistance.\n'
+ 'Prerequisites / Inputs: Query or task.\n'
+ 'Outputs: LLM response.\n'
+ 'Cannot do / Limits: General purpose.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'llm_tool_zh': {
+ 'belonging_agent': TOOL_AGENT_NAME,
+ 'scene': [],
+ 'description': (
+ '功能:调用大语言模型处理通用任务。\n'
+ '使用场景:需要基于 LLM 的辅助时使用。\n'
+ 'LLM\n'
+ '使用方法:\n'
+ '1. 输入:查询或任务描述。\n'
+ '2. 输出:LLM 回复。\n'
+ '3. 注意事项:通用工具。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'physical_adsorption_echart_data': {
+ 'belonging_agent': Physical_Adsorption_AGENT_NAME,
+ 'scene': [SceneEnum.PHYSICAL_ADSORPTION],
+ 'description': (
+ 'What it does: Analyze physical adsorption instrument reports.\n'
+ 'When to use: When you have gas adsorption data.\n'
+ 'Prerequisites / Inputs: Instrument reports.\n'
+ 'Outputs: Analyzed data.\n'
+ 'Cannot do / Limits: Specific to physical adsorption.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'physical_adsorption_echart_data_zh': {
+ 'belonging_agent': Physical_Adsorption_AGENT_NAME,
+ 'scene': [SceneEnum.PHYSICAL_ADSORPTION],
+ 'description': (
+ '功能:分析物理吸附仪器报告。\n'
+ '使用场景:有气体吸附数据需要分析时使用。\n'
+ '物理吸附\n'
+ '使用方法:\n'
+ '1. 输入:仪器报告。\n'
+ '2. 输出:分析后的数据。\n'
+ '3. 注意事项:仅针对物理吸附。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'self_check': False,
+ },
+ 'file_parse': {
+ 'belonging_agent': FILE_PARSE_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ 'What it does: Parse various file contents to extract key information.\n'
+ 'When to use: When you need to extract information from a file but there is no dedicated information extraction tool available.\n'
+ 'Prerequisites / Inputs: File (TXT, PDF, Word, Excel, PNG, JPG, etc.).\n'
+ 'Outputs: Extracted information in text form.\n'
+ 'Cannot do / Limits: Only return text and do not support generating files in any format.\n'
+ 'Cost / Notes: Low.'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+ 'file_parse_zh': {
+ 'belonging_agent': FILE_PARSE_AGENT_NAME,
+ 'scene': [SceneEnum.UNIVERSAL],
+ 'description': (
+ '功能:解析各类文件内容并提取关键信息。\n'
+ '使用场景:需要从文件中提取信息、且无专用提取工具时使用。\n'
+ '通用工具\n'
+ '使用方法:\n'
+ '1. 输入:文件(TXT、PDF、Word、Excel、PNG、JPG 等)。\n'
+ '2. 输出:以文本形式呈现的提取信息。\n'
+ '3. 注意事项:仅返回文本,不支持生成任何格式的文件。\n'
+ '4. 成本/备注:低。'
+ ),
+ 'alternative': [],
+ 'bypass_confirmation': True,
+ 'self_check': False,
+ },
+}
+
+
\ No newline at end of file
diff --git a/scripts/generate_agents_tool_json.py b/scripts/generate_agents_tool_json.py
new file mode 100644
index 00000000..df8248d9
--- /dev/null
+++ b/scripts/generate_agents_tool_json.py
@@ -0,0 +1,538 @@
+#!/usr/bin/env python3
+"""
+Generate agents-tool.json from tools_opt.py
+"""
+import json
+import sys
+from collections import defaultdict
+from pathlib import Path
+
+# Add project root to path
+project_root = Path(__file__).parent.parent
+sys.path.insert(0, str(project_root))
+
+from agents.matmaster_agent.sub_agents.tools_opt import ALL_TOOLS
+from agents.matmaster_agent.flow_agents.scene_agent.model import SceneEnum
+
+# Import URL extraction function
+try:
+ from scripts.get_agent_urls import get_urls_for_all_environments
+ AGENT_URL_MAPPING = get_urls_for_all_environments()
+except Exception as e:
+ print(f"Warning: Could not load agent URLs: {e}", file=sys.stderr)
+ AGENT_URL_MAPPING = {}
+
+
+# Scene ID Mapping (Scene Name -> Scene ID)
+# This mapping is generated automatically based on the scenes used in ALL_TOOLS
+# Scene IDs are assigned sequentially starting from 001, sorted alphabetically by scene name
+#
+# Scene ID -> Scene Name:
+# 001 -> ABACUS
+# 002 -> APEX
+# 005 -> COMPOSITION_OPTIMIZATION
+# 007 -> CONVEXHULL
+# 008 -> DATABASE_SEARCH
+# 010 -> DOE
+# 011 -> DPA
+# 015 -> Electron_Microscope
+# 016 -> HIGH_ENTROPY_ALLOY
+# 019 -> LITERATURE
+# 020 -> MOLECULAR_DYNAMICS
+# 021 -> NMR
+# 023 -> OPTIMIZE_STRUCTURE
+# 024 -> PEROVSKITE_RESEARCH
+# 026 -> PHYSICAL_ADSORPTION
+# 027 -> PILOTEYE_ELECTRO
+# 028 -> POLYMER
+# 029 -> POST_MD_ANALYSIS
+# 030 -> REACTION
+# 033 -> STEEL
+# 034 -> STRUCTURE_GENERATE
+# 035 -> STRUCTURE_SANITIZE
+# 036 -> SUPERCONDUCTOR
+# 038 -> Solid_State_Electrolyte
+# 039 -> THERMOELECTRIC
+# 040 -> TPD
+# 041 -> UNIVERSAL
+# 043 -> VISUALIZE_DATA
+# 045 -> XRD
+# 000 -> None (empty scene)
+
+# Create SceneEnum to numeric ID mapping (starting from 001)
+def create_scene_id_mapping():
+ """Create a mapping from SceneEnum to numeric ID (001, 002, ...)."""
+ scene_id_map = {}
+ scene_id_counter = 1
+
+ # Get all unique scenes from ALL_TOOLS
+ all_scenes = set()
+ for tool_config in ALL_TOOLS.values():
+ scenes = tool_config.get("scene", [])
+ for scene in scenes:
+ if isinstance(scene, SceneEnum):
+ all_scenes.add(scene)
+
+ # Sort scenes by name for consistent ordering
+ sorted_scenes = sorted(all_scenes, key=lambda x: x.name)
+
+ # Create mapping
+ for scene in sorted_scenes:
+ scene_id_map[scene] = f"{scene_id_counter:03d}"
+ scene_id_counter += 1
+
+ # Handle empty scene case
+ scene_id_map[None] = "000"
+
+ return scene_id_map
+
+
+SCENE_ID_MAP = create_scene_id_mapping()
+
+
+def get_scene_name(scene_enum):
+ """Convert SceneEnum to string name."""
+ if isinstance(scene_enum, SceneEnum):
+ return scene_enum.name
+ return str(scene_enum)
+
+
+def get_scene_id(scene_enum):
+ """Get numeric ID for a scene."""
+ if isinstance(scene_enum, SceneEnum):
+ return SCENE_ID_MAP.get(scene_enum, "000")
+ return "000"
+
+
+def parse_description(description: str) -> dict:
+ """
+ Parse description string into dictionary format.
+
+ Args:
+ description: Description string with sections separated by newlines
+
+ Returns:
+ Dictionary with keys: "What it does", "When to use", "Input", "Output", "Notes", "Costs"
+ """
+ # Normalize description to string (supports tuple/list concatenation)
+ if not description:
+ return {}
+ if isinstance(description, (tuple, list)):
+ # Join multi-part descriptions safely with newlines
+ description = "\n".join(str(part) for part in description)
+ else:
+ description = str(description)
+
+ result = {}
+ lines = description.split('\n')
+
+ current_key = None
+ current_value = []
+ input_value = []
+ output_value = []
+
+ for line in lines:
+ line = line.strip()
+ if not line:
+ continue
+
+ # Check for section headers
+ if line.startswith('What it does:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "What it does"
+ current_value = [line.replace('What it does:', '').strip()]
+ elif line.startswith('When to use:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "When to use"
+ current_value = [line.replace('When to use:', '').strip()]
+ elif line.startswith('Prerequisites / Inputs:') or line.startswith('Inputs:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "Input"
+ prefix = 'Prerequisites / Inputs:' if line.startswith('Prerequisites / Inputs:') else 'Inputs:'
+ input_value = [line.replace(prefix, '').strip()]
+ current_value = input_value
+ elif line.startswith('Outputs:'):
+ # Save input if exists
+ if current_key == "Input":
+ if input_value:
+ result["Input"] = ' '.join(input_value).strip()
+ elif current_key:
+ result[current_key] = ' '.join(current_value).strip()
+
+ current_key = "Output"
+ output_value = [line.replace('Outputs:', '').strip()]
+ current_value = output_value
+ elif line.startswith('Cannot do / Limits:') or line.startswith('Limits:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ prefix = 'Cannot do / Limits:' if line.startswith('Cannot do / Limits:') else 'Limits:'
+ current_key = "Notes"
+ current_value = [line.replace(prefix, '').strip()]
+ elif line.startswith('Cost / Notes:') or line.startswith('Costs:') or line.startswith('Cost:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ prefix = 'Cost / Notes:' if line.startswith('Cost / Notes:') else ('Costs:' if line.startswith('Costs:') else 'Cost:')
+ current_key = "Costs"
+ current_value = [line.replace(prefix, '').strip()]
+ else:
+ # Continue current section
+ if current_key:
+ current_value.append(line)
+ if current_key == "Input":
+ input_value.append(line)
+ elif current_key == "Output":
+ output_value.append(line)
+
+ # Add last section
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+
+ return result
+
+
+def parse_description_cn(description_cn: str) -> dict:
+ """
+ Parse Chinese description string into dictionary format.
+
+ Args:
+ description_cn: Chinese description string with sections separated by newlines
+
+ Returns:
+ Dictionary with keys: "工具简介", "使用场景", "输入", "输出", "注意事项", "成本"
+ """
+ # Normalize Chinese description to string (supports tuple/list concatenation)
+ if not description_cn:
+ return {}
+ if isinstance(description_cn, (tuple, list)):
+ description_cn = "\n".join(str(part) for part in description_cn)
+ else:
+ description_cn = str(description_cn)
+
+ result = {}
+ lines = description_cn.split('\n')
+
+ current_key = None
+ current_value = []
+ input_value = []
+ output_value = []
+ in_usage_method = False
+
+ for line in lines:
+ line = line.strip()
+ if not line:
+ continue
+
+ # Check for section headers
+ if line.startswith('功能:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "工具简介"
+ current_value = [line.replace('功能:', '').strip()]
+ elif line.startswith('使用场景:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "使用场景"
+ current_value = [line.replace('使用场景:', '').strip()]
+ in_usage_method = False
+ elif current_key == "使用场景" and (',' in line or line.isupper() or line.isdigit()):
+ # Skip tag lines like "ABACUS,空位形成能" that appear after "使用场景:"
+ continue
+ elif current_key == "使用场景" and not line.startswith(('功能:', '使用场景:', '使用方法:', '1. 输入:', '1.输入:', '2. 输出:', '2.输出:', '3. 注意事项:', '3.注意事项:', '4. 成本/备注:', '4.成本/备注:', '前置条件/输入:', '输入:', '输出:', '不能做/限制:', '限制:', '注意事项:', '成本/备注:', '成本:')):
+ # Skip tag lines between "使用场景:" and "使用方法:" (e.g., "结构生成")
+ # These are typically scene names or tags that should not be part of the usage scenario
+ continue
+ elif line.startswith('使用方法:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ in_usage_method = True
+ current_key = None
+ current_value = []
+ input_value = []
+ output_value = []
+ elif line.startswith('1. 输入:') or line.startswith('1.输入:'):
+ if in_usage_method:
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "输入"
+ prefix = '1. 输入:' if line.startswith('1. 输入:') else '1.输入:'
+ content = line.replace(prefix, '').strip()
+ # Skip if empty (the actual content is on next lines)
+ if content:
+ input_value = [content]
+ current_value = input_value
+ else:
+ input_value = []
+ current_value = input_value
+ elif line.startswith('2. 输出:') or line.startswith('2.输出:'):
+ if in_usage_method:
+ if current_key == "输入":
+ if input_value:
+ result["输入"] = ' '.join(input_value).strip()
+ elif current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "输出"
+ prefix = '2. 输出:' if line.startswith('2. 输出:') else '2.输出:'
+ content = line.replace(prefix, '').strip()
+ # Skip if empty (the actual content is on next lines)
+ if content:
+ output_value = [content]
+ current_value = output_value
+ else:
+ output_value = []
+ current_value = output_value
+ elif line.startswith('3. 注意事项:') or line.startswith('3.注意事项:'):
+ if in_usage_method:
+ if current_key == "输出":
+ if output_value:
+ result["输出"] = ' '.join(output_value).strip()
+ elif current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ in_usage_method = False
+ current_key = "注意事项"
+ prefix = '3. 注意事项:' if line.startswith('3. 注意事项:') else '3.注意事项:'
+ content = line.replace(prefix, '').strip()
+ current_value = [content] if content else []
+ elif line.startswith('4. 成本/备注:') or line.startswith('4.成本/备注:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "成本"
+ prefix = '4. 成本/备注:' if line.startswith('4. 成本/备注:') else '4.成本/备注:'
+ content = line.replace(prefix, '').strip()
+ current_value = [content] if content else []
+ in_usage_method = False
+ elif line.startswith('前置条件/输入:') or line.startswith('输入:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ current_key = "输入"
+ prefix = '前置条件/输入:' if line.startswith('前置条件/输入:') else '输入:'
+ input_value = [line.replace(prefix, '').strip()]
+ current_value = input_value
+ in_usage_method = False
+ elif line.startswith('输出:'):
+ # Save input if exists
+ if current_key == "输入":
+ if input_value:
+ result["输入"] = ' '.join(input_value).strip()
+ elif current_key:
+ result[current_key] = ' '.join(current_value).strip()
+
+ current_key = "输出"
+ output_value = [line.replace('输出:', '').strip()]
+ current_value = output_value
+ in_usage_method = False
+ elif line.startswith('不能做/限制:') or line.startswith('限制:') or line.startswith('注意事项:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ prefix = '不能做/限制:' if line.startswith('不能做/限制:') else ('限制:' if line.startswith('限制:') else '注意事项:')
+ current_key = "注意事项"
+ current_value = [line.replace(prefix, '').strip()]
+ in_usage_method = False
+ elif line.startswith('成本/备注:') or line.startswith('成本:'):
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+ prefix = '成本/备注:' if line.startswith('成本/备注:') else '成本:'
+ current_key = "成本"
+ current_value = [line.replace(prefix, '').strip()]
+ in_usage_method = False
+ else:
+ # Continue current section
+ if current_key:
+ # Remove leading whitespace from indented lines
+ cleaned_line = line.lstrip()
+ if cleaned_line:
+ # Only append to current_value, input_value/output_value are references
+ current_value.append(cleaned_line)
+ elif in_usage_method:
+ # Skip lines like "ABACUS,空位形成能" that appear before "使用方法:"
+ pass
+
+ # Add last section
+ if current_key:
+ result[current_key] = ' '.join(current_value).strip()
+
+ # Handle remaining input/output if in usage method
+ if in_usage_method:
+ if current_key == "输入" and input_value:
+ result["输入"] = ' '.join(input_value).strip()
+ elif current_key == "输出" and output_value:
+ result["输出"] = ' '.join(output_value).strip()
+
+ return result
+
+
+def generate_tool_id(tool_name: str, primary_scene, scene_index: int) -> str:
+ """
+ Generate unique tool_id in format: {SCENE_ID}-{TOOL_PREFIX}-{INDEX:03d}
+
+ Args:
+ tool_name: Tool name
+ primary_scene: Primary scene (SceneEnum or None)
+ scene_index: Index within the scene (starting from 1)
+
+ Returns:
+ Unique tool_id string
+ """
+ # Get scene ID
+ scene_id = get_scene_id(primary_scene)
+
+ # Get tool prefix (first 8 chars, remove underscores, uppercase)
+ tool_prefix = tool_name.replace("_", "")[:8].upper()
+
+ # Format: 001-TOOLPREFIX-001
+ return f"{scene_id}-{tool_prefix}-{scene_index:03d}"
+
+
+def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_scene, zh_tool_config: dict = None) -> dict:
+ """
+ Process a single tool configuration into JSON format.
+
+ Args:
+ tool_name: Tool name (key in ALL_TOOLS)
+ tool_config: Tool configuration dictionary
+ scene_index: Index within the scene (starting from 1)
+ primary_scene: Primary scene for this tool
+ zh_tool_config: Optional Chinese tool configuration (for _zh suffix tools)
+
+ Returns:
+ Dictionary with tool information in JSON format
+ """
+ # Extract scenes and convert to string list
+ scenes = tool_config.get("scene", [])
+ scene_names = [get_scene_name(s) for s in scenes]
+
+ # Generate tool_id (use base name without _zh suffix)
+ base_tool_name = tool_name.replace('_zh', '')
+ tool_id = generate_tool_id(base_tool_name, primary_scene, scene_index)
+
+ # Get summary_prompt and translate it
+ summary_prompt = tool_config.get("summary_prompt", "")
+ summary_cn = summary_prompt
+
+ # Get agent URL
+ belonging_agent = tool_config.get("belonging_agent", "")
+ url_info = AGENT_URL_MAPPING.get(belonging_agent, {"test": None, "uat": None, "prod": None})
+
+ # Parse description into dictionary format
+ description_str = tool_config.get("description", "")
+ description_dict = parse_description(description_str) if description_str else {}
+
+ # Get description_cn from zh_tool_config if available, otherwise from tool_config
+ if zh_tool_config:
+ description_cn_str = zh_tool_config.get("description", "")
+ else:
+ description_cn_str = tool_config.get("description_cn", "")
+
+ description_cn_dict = parse_description_cn(description_cn_str) if description_cn_str else {}
+
+ # Build result dictionary (use base name without _zh suffix)
+ result = {
+ "tool_id": tool_id,
+ "name": base_tool_name,
+ "description": description_dict,
+ "description_cn": description_cn_dict,
+ "belonging_agent": belonging_agent,
+ "scenes": scene_names,
+ "alternative_tools": tool_config.get("alternative", []),
+ "summary_prompt": summary_prompt,
+ "summary_cn": summary_cn,
+ "self_check": tool_config.get("self_check", False),
+ "args_setting": tool_config.get("args_setting", None),
+ "server": url_info,
+ }
+
+ # Remove server field if all values are None
+ if all(v is None for v in url_info.values()):
+ result.pop("server", None)
+
+ # Add optional fields if they exist
+ if "bypass_confirmation" in tool_config:
+ result["bypass_confirmation"] = tool_config["bypass_confirmation"]
+
+ # Remove None values for cleaner JSON (but keep empty strings for summary fields)
+ result = {
+ k: v for k, v in result.items()
+ if v is not None or k in ["args_setting", "summary_prompt", "summary_cn"]
+ }
+
+ return result
+
+
+def main():
+ """Main function to generate agents-tool.json."""
+ # Separate English and Chinese tools
+ en_tools = {}
+ zh_tools = {}
+
+ for tool_name, tool_config in ALL_TOOLS.items():
+ if tool_name.endswith('_zh'):
+ base_name = tool_name[:-3] # Remove '_zh' suffix
+ zh_tools[base_name] = tool_config
+ else:
+ en_tools[tool_name] = tool_config
+
+ # Group English tools by primary scene (first scene in the list)
+ tools_by_scene = defaultdict(list)
+
+ for tool_name, tool_config in en_tools.items():
+ scenes = tool_config.get("scene", [])
+ primary_scene = scenes[0] if scenes else None
+ tools_by_scene[primary_scene].append((tool_name, tool_config))
+
+ # Process tools grouped by scene
+ tools_list = []
+
+ # Sort scenes for consistent ordering (None goes last)
+ def scene_sort_key(scene):
+ if scene is None:
+ return ("ZZZ", "")
+ if isinstance(scene, SceneEnum):
+ return ("AAA", scene.name)
+ return ("ZZZ", str(scene))
+
+ sorted_scenes = sorted(tools_by_scene.keys(), key=scene_sort_key)
+
+ total_tools = sum(len(tools_by_scene[s]) for s in sorted_scenes)
+ processed = 0
+
+ for primary_scene in sorted_scenes:
+ scene_tools = tools_by_scene[primary_scene]
+ scene_name = get_scene_name(primary_scene) if primary_scene else "UNIVERSAL"
+
+ print(f"Processing scene: {scene_name} ({len(scene_tools)} tools)", file=sys.stderr)
+
+ # Process each tool in this scene, resetting index for each scene
+ for scene_index, (tool_name, tool_config) in enumerate(scene_tools, start=1):
+ try:
+ # Get corresponding Chinese tool config if available
+ zh_tool_config = zh_tools.get(tool_name)
+ tool_json = process_tool(tool_name, tool_config, scene_index, primary_scene, zh_tool_config)
+ tools_list.append(tool_json)
+ processed += 1
+ if processed % 10 == 0:
+ print(f" Progress: {processed}/{total_tools} tools", file=sys.stderr)
+ except Exception as e:
+ print(f"Error processing tool {tool_name}: {e}", file=sys.stderr)
+ continue
+
+ # Create output dictionary
+ output = {
+ "tools": tools_list,
+ "total_count": len(tools_list),
+ }
+
+ # Write to JSON file
+ output_file = project_root / "agents-tool.json"
+ with open(output_file, "w", encoding="utf-8") as f:
+ json.dump(output, f, indent=2, ensure_ascii=False)
+
+ print(f"Successfully generated {output_file}")
+ print(f"Total tools: {len(tools_list)}")
+ print(f"Scene ID mapping: {len(SCENE_ID_MAP)} scenes")
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/scripts/get_agent_urls.py b/scripts/get_agent_urls.py
new file mode 100644
index 00000000..1632089f
--- /dev/null
+++ b/scripts/get_agent_urls.py
@@ -0,0 +1,269 @@
+#!/usr/bin/env python3
+"""
+Get agent URLs for all environments by parsing constant.py files
+"""
+import ast
+import re
+import sys
+from pathlib import Path
+
+project_root = Path(__file__).parent.parent
+sys.path.insert(0, str(project_root))
+
+
+def extract_urls_from_file(file_path: Path) -> dict:
+ """
+ Extract URLs for test, uat, prod from a constant.py file.
+ Returns: {test: url, uat: url, prod: url}
+ """
+ urls = {'test': None, 'uat': None, 'prod': None}
+
+ if not file_path.exists():
+ return urls
+
+ try:
+ with open(file_path, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ # Find URL variable name (look for variables ending in URL or ServerUrl)
+ url_var_pattern = r'(\w*(?:URL|ServerUrl|_URL|_SERVER_URL))\s*='
+ url_vars = re.findall(url_var_pattern, content)
+
+ if not url_vars:
+ return urls
+
+ url_var = url_vars[0] # Use first URL variable found
+
+ # Extract URLs by finding the assignment and extracting the quoted string
+ # Handle both single-line and multi-line assignments
+
+ # Pattern for test/uat together
+ test_uat_block = re.search(
+ rf"if\s+CURRENT_ENV\s+in\s*\[['\"]test['\"],\s*['\"]uat['\"]\]:.*?{url_var}\s*=\s*",
+ content,
+ re.DOTALL
+ )
+ if test_uat_block:
+ remaining = content[test_uat_block.end():]
+ # Support multi-line assignments with parentheses
+ lines = remaining.split('\n')
+ url_found = None
+ for i, line in enumerate(lines[:10]):
+ stripped = line.strip()
+ if stripped.startswith('#'):
+ continue
+ # Try to find URL on same line
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", line)
+ if url_match:
+ url_found = url_match.group(1).strip()
+ break
+ # If line ends with '(' or '=', check next line(s) for URL
+ if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line):
+ for j in range(i + 1, min(i + 5, len(lines))):
+ next_line = lines[j].strip()
+ if next_line.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line)
+ if url_match:
+ url_found = url_match.group(1).strip()
+ break
+ if url_found:
+ break
+ # Stop if we hit another conditional block
+ if re.match(r'\s*(if|elif|else)\s*:', line):
+ break
+ if url_found:
+ urls['test'] = url_found
+ urls['uat'] = url_found
+
+ # Pattern for test only
+ # Support both:
+ # if CURRENT_ENV == 'test':
+ # if CURRENT_ENV in ['test']:
+ if not urls['test']:
+ test_patterns = [
+ rf"(if|elif)\s+CURRENT_ENV\s*==\s*['\"]test['\"]\s*:.*?{url_var}\s*=\s*",
+ rf"(if|elif)\s+CURRENT_ENV\s+in\s*\[['\"]test['\"]\]\s*:.*?{url_var}\s*=\s*",
+ ]
+ for pattern in test_patterns:
+ test_block = re.search(pattern, content, re.DOTALL)
+ if test_block:
+ remaining = content[test_block.end():]
+ # Support multi-line assignments
+ lines = remaining.split('\n')
+ for i, line in enumerate(lines[:10]):
+ stripped = line.strip()
+ if stripped.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", line)
+ if url_match:
+ urls['test'] = url_match.group(1).strip()
+ break
+ # Check for multi-line assignment
+ if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line):
+ for j in range(i + 1, min(i + 5, len(lines))):
+ next_line = lines[j].strip()
+ if next_line.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line)
+ if url_match:
+ urls['test'] = url_match.group(1).strip()
+ break
+ if urls['test']:
+ break
+ if re.match(r'\s*(if|elif|else)\s*:', line):
+ break
+ if urls['test']:
+ break
+
+ # Pattern for uat only
+ # Support both:
+ # elif CURRENT_ENV == 'uat':
+ # elif CURRENT_ENV in ['uat']:
+ if not urls['uat']:
+ uat_patterns = [
+ rf"elif\s+CURRENT_ENV\s*==\s*['\"]uat['\"]\s*:.*?{url_var}\s*=\s*",
+ rf"elif\s+CURRENT_ENV\s+in\s*\[['\"]uat['\"]\]\s*:.*?{url_var}\s*=\s*",
+ ]
+ for pattern in uat_patterns:
+ uat_block = re.search(pattern, content, re.DOTALL)
+ if uat_block:
+ remaining = content[uat_block.end():]
+ # Support multi-line assignments
+ lines = remaining.split('\n')
+ for i, line in enumerate(lines[:10]):
+ stripped = line.strip()
+ if stripped.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", line)
+ if url_match:
+ urls['uat'] = url_match.group(1).strip()
+ break
+ # Check for multi-line assignment
+ if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line):
+ for j in range(i + 1, min(i + 5, len(lines))):
+ next_line = lines[j].strip()
+ if next_line.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line)
+ if url_match:
+ urls['uat'] = url_match.group(1).strip()
+ break
+ if urls['uat']:
+ break
+ if re.match(r'\s*(if|elif|else)\s*:', line):
+ break
+ if urls['uat']:
+ break
+
+ # Pattern for prod (else block)
+ # Find else block and then search for URL assignment in subsequent lines
+ else_match = re.search(r'else\s*:', content)
+ if else_match:
+ remaining = content[else_match.end():]
+ # Look for URL assignment in the else block (stop at next if/elif/else or end of function)
+ # Find the URL assignment line (may be on same line or next few lines)
+ # Support multi-line assignments with parentheses
+ lines = remaining.split('\n')
+ for i, line in enumerate(lines[:10]): # Check first 10 lines after else
+ stripped = line.strip()
+ if stripped.startswith('#'):
+ continue
+ # Check if this line contains the URL assignment
+ if url_var in line and '=' in line:
+ # Try to find URL on same line first
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", line)
+ if url_match:
+ urls['prod'] = url_match.group(1).strip()
+ break
+ # If line ends with '(' or '=', check next line(s) for URL (multi-line assignment)
+ if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line):
+ # Look ahead for URL string in next few lines
+ for j in range(i + 1, min(i + 5, len(lines))):
+ next_line = lines[j].strip()
+ if next_line.startswith('#'):
+ continue
+ url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line)
+ if url_match:
+ urls['prod'] = url_match.group(1).strip()
+ break
+ if urls['prod']:
+ break
+ # Stop if we hit another conditional block
+ if re.match(r'\s*(if|elif|else)\s*:', line):
+ break
+
+ # If no conditional found, look for direct assignment
+ if not any(urls.values()):
+ direct_match = re.search(rf"{url_var}\s*=\s*['\"]([^'\"]+)['\"]", content)
+ if direct_match:
+ url = direct_match.group(1).strip()
+ urls['test'] = url
+ urls['uat'] = url
+ urls['prod'] = url
+
+ except Exception as e:
+ print(f"Error parsing {file_path}: {e}", file=sys.stderr)
+
+ return urls
+
+
+def get_urls_for_all_environments():
+ """
+ Get URLs for all agents in all environments.
+ Returns: {agent_name: {test: url, uat: url, prod: url}}
+ """
+ # Agent name to constant file path mapping
+ agent_mappings = {
+ 'ABACUS_calculation_agent': project_root / 'agents/matmaster_agent/sub_agents/ABACUS_agent/constant.py',
+ 'apex_agent': project_root / 'agents/matmaster_agent/sub_agents/apex_agent/constant.py',
+ 'dpa_calculator_agent': project_root / 'agents/matmaster_agent/sub_agents/DPACalculator_agent/constant.py',
+ 'finetune_dpa_agent': project_root / 'agents/matmaster_agent/sub_agents/finetune_dpa_agent/constant.py',
+ 'LAMMPS_agent': project_root / 'agents/matmaster_agent/sub_agents/LAMMPS_agent/constant.py',
+ 'structure_generate_agent': project_root / 'agents/matmaster_agent/sub_agents/structure_generate_agent/constant.py',
+ 'convexhull_agent': project_root / 'agents/matmaster_agent/sub_agents/convexhull_agent/constant.py',
+ 'superconductor_agent': project_root / 'agents/matmaster_agent/sub_agents/superconductor_agent/constant.py',
+ 'thermoelectric_agent': project_root / 'agents/matmaster_agent/sub_agents/thermoelectric_agent/constant.py',
+ 'traj_analysis_agent': project_root / 'agents/matmaster_agent/sub_agents/traj_analysis_agent/constant.py',
+ 'visualizer_agent': project_root / 'agents/matmaster_agent/sub_agents/visualizer_agent/constant.py',
+ 'optimade_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/optimade_agent/constant.py',
+ 'bohriumpublic_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/bohriumpublic_agent/constant.py',
+ 'openlam_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/openlam_agent/constant.py',
+ 'mofdb_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/mofdb_agent/constant.py',
+ 'perovskite_research_agent': project_root / 'agents/matmaster_agent/sub_agents/perovskite_agent/constant.py',
+ 'doe_agent': project_root / 'agents/matmaster_agent/sub_agents/doe_agent/constant.py',
+ 'compdart_agent': project_root / 'agents/matmaster_agent/sub_agents/CompDART_agent/constant.py',
+ 'document_parser_agent': project_root / 'agents/matmaster_agent/sub_agents/document_parser_agent/constant.py',
+ 'electron_microscope_agent': project_root / 'agents/matmaster_agent/sub_agents/Electron_Microscope_agent/constant.py',
+ 'xrd_agent': project_root / 'agents/matmaster_agent/sub_agents/XRD_agent/constant.py',
+ 'tpd_agent': project_root / 'agents/matmaster_agent/sub_agents/TPD_agent/constant.py',
+ 'physical_adsorption_agent': project_root / 'agents/matmaster_agent/sub_agents/Physical_adsorption_agent/constant.py',
+ 'science_navigator_agent': project_root / 'agents/matmaster_agent/sub_agents/ScienceNavigator_agent/constant.py',
+ 'nmr_agent': project_root / 'agents/matmaster_agent/sub_agents/NMR_agent/constant.py',
+ 'vaspkit_agent': project_root / 'agents/matmaster_agent/sub_agents/vaspkit_agent/constant.py',
+ 'HEAkb_agent': project_root / 'agents/matmaster_agent/sub_agents/HEAkb_agent/constant.py',
+ 'SSEkb_agent': project_root / 'agents/matmaster_agent/sub_agents/SSEkb_agent/constant.py',
+ 'POLYMERkb_agent': project_root / 'agents/matmaster_agent/sub_agents/POLYMERkb_agent/constant.py',
+ 'STEELkb_agent': project_root / 'agents/matmaster_agent/sub_agents/STEELkb_agent/constant.py',
+ 'STEEL_PREDICT_agent': project_root / 'agents/matmaster_agent/sub_agents/STEEL_PREDICT_agent/constant.py',
+ 'unielf_agent': project_root / 'agents/matmaster_agent/sub_agents/chembrain_agent/unielf_agent/constant.py',
+ 'hea_calculator_agent': project_root / 'agents/matmaster_agent/sub_agents/HEACalculator_agent/constant.py',
+ 'HEA_assistant_agent': project_root / 'agents/matmaster_agent/sub_agents/HEA_assistant_agent/constant.py',
+ 'organic_reaction_agent': project_root / 'agents/matmaster_agent/sub_agents/organic_reaction_agent/constant.py',
+ 'piloteye_electro_agent': project_root / 'agents/matmaster_agent/sub_agents/piloteye_electro_agent/constant.py',
+ }
+
+ url_mapping = {}
+
+ for agent_name, constant_file in agent_mappings.items():
+ urls = extract_urls_from_file(constant_file)
+ url_mapping[agent_name] = urls
+
+ return url_mapping
+
+
+if __name__ == "__main__":
+ mapping = get_urls_for_all_environments()
+ import json
+ print(json.dumps(mapping, indent=2, ensure_ascii=False))
+