MCP-Server-for-CFD
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP-Server-for-CFDrun CFD analysis on NACA 0012 at 5° angle of attack"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CFD FastAPI Server
將 2D 翼型空氣動力分析包裝成一般 FastAPI HTTP API,讓前端、腳本或其他服務可以直接呼叫完整的「幾何 → 網格 → 求解 → 後處理 → 視覺化」流程。
Client ──▶ FastAPI Server ──▶ aerosandbox / NeuralFoil / SU2
└─▶ Cp 分布 / 極曲線 / dashboard / artifact downloads功能
API | 功能 |
| 從 NACA 4/5 位數代碼生成翼型座標 ( |
| 生成 2D 網格,支援 placeholder 與 SU2/Gmsh |
| 執行 NeuralFoil,或提交非同步 SU2 求解 |
| 查詢 job 狀態;完成後回傳 CL / CD / CM / Cpmin / 轉捩點 |
| 一次完成 geometry -> mesh -> solver;SU2 只提交背景求解 |
| 生成視覺化 artifact metadata |
| 在瀏覽器 inline 預覽視覺化圖檔 |
| 下載視覺化圖檔 |
| Streamable HTTP MCP endpoint,提供同一套 CFD workflow tools |
視覺化模式
| 內容 |
| 翼型形狀 + 結果數字 |
| 沿翼型表面真 Cp 分布 |
| CL/CD vs alpha 雙軸極曲線 |
| CL vs CD 拖力極曲線 |
| 網格預覽圖 |
| 綜合 dashboard 與網格預覽 |
| 馬赫數分佈圖 (SU2) |
| 壓力分佈圖 (SU2) |
POST /api/visualizations 會回傳:
{
"status": "success",
"summary": "...",
"artifact": {
"artifact_id": "vis_abc123",
"filename": "dashboard_vis_abc123.jpg",
"mimeType": "image/jpeg",
"size_bytes": 170868
}
}圖檔不直接塞進 JSON body,而是落地成 artifact。用回傳的 artifact_id 組 GET /artifacts/{artifact_id} 在瀏覽器預覽,或組 GET /artifacts/{artifact_id}/download 下載。
HTTP API 只回傳資源 id,不回傳伺服器端檔案路徑。手動流程請依序傳遞 geometry_id、mesh_id、job_id、artifact_id。
SU2 求解是非同步工作。POST /api/solver/run 或 POST /api/workflow/airfoil 使用 solver_backend="su2" 時會回傳 status: "submitted" 與 job_id;之後用 GET /api/solver/results/{job_id} 輪詢,直到狀態變成 converged 或 failed。NeuralFoil surrogate 仍同步回傳結果。
Related MCP server: OpenVSP MCP Server
快速開始
環境需求
Python 3.11+
uv
本機啟動
uv sync
uv run python -m cfd_server啟動後可用:
Swagger UI:
http://localhost:8765/docsOpenAPI:
http://localhost:8765/openapi.jsonHealth check:
http://localhost:8765/healthzMCP endpoint:
http://localhost:8765/mcp/
執行測試
uv run --group dev pytestDocker
docker build -t cfd-server:su2-local .
docker run --rm -p 8765:8765 -v "$PWD/jobs:/app/jobs" cfd-server:su2-local檢查 SU2 與 Gmsh:
docker run --rm cfd-server:su2-local SU2_CFD --help
docker run --rm cfd-server:su2-local gmsh --versionDocker Compose
docker compose up --build cfd-serverAPI 範例
建立翼型
curl -X POST http://localhost:8765/api/geometry/airfoil \
-H "content-type: application/json" \
-d '{
"naca_code": "0012",
"chord_length": 1.0,
"n_points_per_side": 180,
"normalize_geometry": true
}'一鍵工作流
curl -X POST http://localhost:8765/api/workflow/airfoil \
-H "content-type: application/json" \
-d '{
"naca_code": "0012",
"velocity": 30.0,
"angle_of_attack": 5.0,
"solver_backend": "neuralfoil"
}'SU2 一鍵工作流會先產生 SU2/Gmsh mesh,然後提交背景求解:
curl -X POST http://localhost:8765/api/workflow/airfoil \
-H "content-type: application/json" \
-d '{
"naca_code": "0012",
"velocity": 30.0,
"angle_of_attack": 5.0,
"mesh_format": "su2",
"solver_backend": "su2",
"max_iterations": 500
}'查詢背景求解:
curl http://localhost:8765/api/solver/results/06936164e5a7視覺化
curl -X POST http://localhost:8765/api/visualizations \
-H "content-type: application/json" \
-d '{
"job_id": "06936164e5a7",
"plot_kind": "dashboard",
"image_format": "jpeg"
}'MCP
這個服務現在同時提供 Streamable HTTP MCP,直接重用現有 service layer,不需要另外維護第二套 CFD 邏輯。
MCP tools:
generate_airfoil_geometrygenerate_2d_meshrun_cfd_solvercheck_solver_resultsrun_airfoil_workflowvisualize_cfd_resultsget_visualization_artifact
本機啟動 HTTP + MCP:
uv run python -m cfd_server用 MCP Inspector 連線:
npx -y @modelcontextprotocol/inspector連到:
http://localhost:8765/mcp/如果你要用 stdio 模式直接跑 MCP server:
uv run python -m cfd_server.app.interfaces.mcp.server測試
tests/conftest.py: 共用 FastAPITestClient與 workflow fixturetests/test_http_workflow.py: 幾何、網格、求解、結果查詢、路由註冊tests/test_async_su2_solver.py: SU2 非同步提交與狀態轉換tests/test_visualization_artifacts.py: artifact metadata 與落地檔案tests/test_artifact_download.py: artifact HTTP download endpointtests/test_su2_config.py: SU2 config 單元測試
專案結構
cfd-server/
├── cfd_server/
│ ├── __main__.py
│ ├── app/
│ │ ├── interfaces/
│ │ │ └── http/ # FastAPI app, routers, request schemas
│ │ └── services/ # workflow / visualization service layer
│ ├── server.py # 相容 wrapper
│ ├── core/
│ ├── mesh/
│ ├── solvers/
│ ├── visualization/
│ └── models/
├── tests/
├── pyproject.toml
├── Dockerfile
└── README.mdAvailable Tools
7 toolscheck_solver_resultsA
Check the current status and coefficients for an existing CFD job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | job_id returned by run_cfd_solver or run_airfoil_workflow. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'checks' status and coefficients, implying a read-only operation, but does not explicitly mention that it is non-destructive, how it behaves if the job does not exist, or any polling/blocking behavior. This lack of detail leaves significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action ('Check') and efficiently conveys the tool's purpose without unnecessary words. Every word contributes to meaning, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description is minimally adequate, but it lacks guidance on when to use it relative to siblings and does not disclose behavioral specifics (e.g., job lifecycle). The schema covers parameters and output, but the absence of annotations and usage context makes it less complete than ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single parameter job_id, with a helpful description indicating it is returned by run_cfd_solver or run_airfoil_workflow. This provides meaning beyond the parameter name, but the tool description itself adds no additional parameter semantics, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks the current status and coefficients of an existing CFD job, using a specific verb ('Check') and resource ('current status and coefficients'). This distinguishes it from sibling tools that generate geometry, mesh, run the solver, visualize results, or get visualization artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than explicitly stated. The mention of 'existing CFD job' suggests it should be used after a job is created, and the parameter description clarifies that job_id comes from run_cfd_solver or run_airfoil_workflow. However, there is no explicit 'use this when' or exclusion of alternatives, relying on the agent to infer the workflow order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_2d_meshA
Generate a 2D mesh from a geometry_id for NeuralFoil or SU2 workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_size | No | Farfield domain size in chord lengths. | |
| geometry_id | Yes | geometry_id returned by generate_airfoil_geometry. | |
| growth_rate | No | Boundary-layer growth ratio between successive inflation layers. | |
| mesh_format | No | Mesh format. Use 'placeholder' for NeuralFoil or 'su2' for solver-effective meshes. | placeholder |
| wake_length | No | Wake extension length downstream of the trailing edge in chord lengths. | |
| mesh_density | No | Mesh density preset: coarse, medium, or fine. | medium |
| target_y_plus | No | Target wall y+ used to infer first_cell_height for SU2 meshes. | |
| surface_points | No | Number of discretization points placed around the airfoil surface. | |
| first_cell_height | No | First boundary-layer cell height in chord units. | |
| gmsh_timeout_seconds | No | Maximum wall-clock time allowed for the Gmsh subprocess. | |
| boundary_layer_layers | No | Number of boundary-layer inflation layers for SU2/Gmsh meshes. | |
| reference_reynolds_number | No | Reference Reynolds number used with target_y_plus to infer first_cell_height. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It only says 'Generate a 2D mesh' and does not mention that it invokes a Gmsh subprocess, can be time-consuming, or has side effects like creating mesh files. The output format and dependencies (e.g., valid geometry_id) are not described, leaving a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence (15 words) that starts with action and object. It contains no filler and effectively communicates the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters and no annotations, the description should provide more high-level context about prerequisites, runtime, and workflow position. It mentions geometry_id but does not explicitly state that the geometry must be generated first or that this mesh is required for subsequent solver calls. The output schema exists, mitigating the need to describe return values, but gaps in workflow context remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with detailed descriptions (e.g., domain_size, growth_rate, target_y_plus). The tool description adds only the workflow context and mentions geometry_id, which is already in the schema. Since the schema does the heavy lifting, the description provides marginal added value, fitting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: generating a 2D mesh from a geometry_id for NeuralFoil or SU2 workflows. It uses a specific verb ('Generate') and resource ('2D mesh'), and the mention of geometry_id distinguishes it from geometry-generation and solver tools. The sibling tools reinforce its role as the meshing step in the pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after generate_airfoil_geometry (via geometry_id) and before solver tools (for NeuralFoil or SU2 workflows). It provides context but does not explicitly state when not to use it or name alternatives. The guidance is clear enough for an agent familiar with the workflow, but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_airfoil_geometryB
Generate a NACA 4/5-digit airfoil geometry and return a reusable geometry_id.
| Name | Required | Description | Default |
|---|---|---|---|
| naca_code | Yes | NACA 4- or 5-digit airfoil code, for example '0012' or '23012'. | |
| chord_length | No | Airfoil chord length in meters. | |
| n_points_per_side | No | Number of coordinate points sampled on each airfoil side. | |
| normalize_geometry | No | Normalize the generated airfoil to unit chord before scaling. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only states the basic action and output. It does not disclose side effects, persistence behavior, error conditions, or safety aspects, beyond implying the geometry is stored for reuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the primary action and output, with no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (four parameters) and the presence of detailed parameter schemas and an output schema, the description is mostly sufficient. The only gap is the lack of usage guidance, which is already penalized in that dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter meaning, aligning with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Generate a NACA 4/5-digit airfoil geometry' and the output: 'return a reusable geometry_id'. This specific verb and resource distinguish it from sibling tools like mesh generation or solving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention downstream steps, exclusions, or prerequisites, leaving the agent to infer usage from the tool's name and the mention of a 'reusable geometry_id'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visualization_artifactB
Load a previously generated visualization artifact as an MCP image result.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the output behavior (MCP image result), but it does not mention related traits such as whether the artifact is consumed, what happens if the ID is invalid, or any prerequisites. This is minimal but non-contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. Every element contributes to understanding the tool's function and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too sparse for a tool in a multi-step workflow. It lacks context about where the artifact comes from (likely from visualize_cfd_results), what to do if the artifact doesn't exist, and how the returned MCP image result should be used. The absence of an output schema and annotations increases the need for descriptive context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter (artifact_id) with 0% schema description coverage. The description does not elaborate on what artifact_id means, how to obtain it, or any format expectations, completely failing to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads a previously generated visualization artifact and converts it to an MCP image result. This specific verb-resource pairing distinguishes it from sibling tools like visualize_cfd_results, which generate artifacts, while this one retrieves them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'previously generated' implies usage after a generation step, but it does not explicitly mention when to use this tool vs alternatives, nor does it exclude scenarios. There is no explicit guidance or naming of prerequisite tools like visualize_cfd_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_airfoil_workflowB
Run geometry, mesh generation, and CFD as one MCP tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| mach | No | Optional Mach number override. If omitted, it is computed from velocity and speed_of_sound. | |
| velocity | Yes | Freestream velocity in meters per second. | |
| naca_code | Yes | NACA 4- or 5-digit airfoil code, for example '0012' or '23012'. | |
| cfl_number | No | SU2 CFL number. | |
| domain_size | No | Farfield domain size in chord lengths. | |
| growth_rate | No | Boundary-layer growth ratio between successive inflation layers. | |
| mesh_format | No | Mesh format. Use 'placeholder' for NeuralFoil or 'su2' for solver-effective meshes. | placeholder |
| wake_length | No | Wake extension length downstream of the trailing edge in chord lengths. | |
| chord_length | No | Airfoil chord length in meters. | |
| mesh_density | No | Mesh density preset: coarse, medium, or fine. | medium |
| low_mach_prec | No | Enable SU2 low-Mach preconditioning. | |
| target_y_plus | No | Target wall y+ used to infer first_cell_height for SU2 meshes. | |
| max_iterations | No | Maximum nonlinear iterations for the selected solver backend. | |
| solver_backend | No | Solver backend: 'neuralfoil' or 'su2'. | neuralfoil |
| surface_points | No | Number of discretization points placed around the airfoil surface. | |
| angle_of_attack | Yes | Angle of attack in degrees. | |
| reynolds_number | No | Optional Reynolds number override. If omitted, it is computed from velocity and chord. | |
| turbulence_model | No | SU2 flow model: EULER, NAVIER_STOKES, or RANS. | RANS |
| first_cell_height | No | First boundary-layer cell height in chord units. | |
| n_points_per_side | No | Number of coordinate points sampled on each airfoil side. | |
| normalize_geometry | No | Normalize the generated airfoil to unit chord before scaling. | |
| su2_timeout_seconds | No | Maximum wall-clock time allowed for the SU2 subprocess. | |
| convergence_residual | No | SU2 convergence target expressed as log10 residual. | |
| gmsh_timeout_seconds | No | Maximum wall-clock time allowed for the Gmsh subprocess. | |
| boundary_layer_layers | No | Number of boundary-layer inflation layers for SU2/Gmsh meshes. | |
| reference_reynolds_number | No | Reference Reynolds number used with target_y_plus to infer first_cell_height. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits, but it only lists the three steps without mentioning runtime expectations, resource consumption, side effects like intermediate file writes, or any caveats about the workflow. For a complex multi-stage tool, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently communicates the core purpose without any redundant or irrelevant information. It is appropriately front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having a full input schema and an output schema, the description is far too sparse for a tool orchestrating three complex simulation stages. It omits any information about what the workflow returns, expected execution time, or how it differs from chaining the sibling tools manually, leaving substantial gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents all 26 parameters with descriptions, so the baseline is 3. The description adds no extra semantic context about how parameters relate to the workflow or any non-obvious interactions, but the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool runs a composite workflow of geometry generation, mesh generation, and CFD simulation in one MCP call. It distinguishes itself from sibling tools like generate_airfoil_geometry and run_cfd_solver by being the aggregate workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus invoking the sibling tools separately. It does not mention scenarios where a full workflow is preferred or when individual steps should be used instead, leaving usage entirely implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_cfd_solverC
Run NeuralFoil synchronously or submit an SU2 background job from a mesh_id.
| Name | Required | Description | Default |
|---|---|---|---|
| mach | No | Optional Mach number override. If omitted, it is computed from velocity and speed_of_sound. | |
| n_crit | No | NeuralFoil e^N critical amplification factor. | |
| mesh_id | Yes | mesh_id returned by generate_2d_mesh. | |
| velocity | Yes | Freestream velocity in meters per second. | |
| xtr_lower | No | Forced transition location on the lower surface as x/c in [0, 1]. | |
| xtr_upper | No | Forced transition location on the upper surface as x/c in [0, 1]. | |
| cfl_number | No | SU2 CFL number. | |
| model_size | No | NeuralFoil surrogate model size preset. | large |
| low_mach_prec | No | Enable SU2 low-Mach preconditioning. | |
| max_iterations | No | Maximum nonlinear iterations for the selected solver backend. | |
| solver_backend | No | Solver backend: 'neuralfoil' or 'su2'. | neuralfoil |
| speed_of_sound | No | Speed of sound in meters per second used to compute Mach. | |
| angle_of_attack | Yes | Angle of attack in degrees. | |
| reynolds_number | No | Optional Reynolds number override. If omitted, it is computed from velocity and chord. | |
| turbulence_model | No | SU2 flow model: EULER, NAVIER_STOKES, or RANS. | RANS |
| kinematic_viscosity | No | Fluid kinematic viscosity in square meters per second. | |
| su2_timeout_seconds | No | Maximum wall-clock time allowed for the SU2 subprocess. | |
| convergence_residual | No | SU2 convergence target expressed as log10 residual. | |
| include_360_deg_effects | No | Enable NeuralFoil's 360-degree post-stall correction model. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses synchronous execution for NeuralFoil and background job submission for SU2, but omits side effects, job lifecycle, result retrieval mechanisms, and failure behavior. This is minimal behavioral context for a complex solver tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, front-loading the verb and backend modes. However, given the tool's complexity, the brevity borders on under-specification rather than elegant conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool with 19 parameters, dual backend modes, and asynchronous behavior, yet the description is one sentence. It does not explain the background job workflow, how results are obtained, or tie into sibling tools like check_solver_results. The presence of an output schema helps but does not compensate for missing operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 19 parameters have detailed schema descriptions (100% coverage), so the baseline is 3. The description adds only backend-mode context (synchronous vs. background), which is useful but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Run' and clearly names 'NeuralFoil' and 'SU2' backends, scoped 'from a mesh_id.' It does not explicitly differentiate from sibling tools like run_airfoil_workflow or check_solver_results, but the core purpose is identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or alternative guidance is provided. The phrase 'from a mesh_id' implies a prerequisite, but there is no instruction on choosing between NeuralFoil and SU2 backends or how this relates to run_airfoil_workflow or check_solver_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visualize_cfd_resultsA
Create a visualization artifact for a converged job and return its artifact_id.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | job_id returned by run_cfd_solver or run_airfoil_workflow. | |
| alpha_max | No | Maximum angle of attack in degrees for sweep-based plots. | |
| alpha_min | No | Minimum angle of attack in degrees for sweep-based plots. | |
| plot_kind | No | Visualization type: dashboard, cp, polar, drag_polar, summary, mesh, field, mach, or pressure. | dashboard |
| alpha_points | No | Number of angle-of-attack samples used for sweep-based plots. | |
| image_format | No | Output artifact format: png or jpeg. | jpeg |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It clearly states the tool creates an artifact and returns its artifact_id, which is a key behavioral trait. However, it does not disclose potential limitations, error conditions (e.g., what happens if the job is not converged), or persistence details. This is adequate for a simple creation tool but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, condition, and return value without any filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 params) and the existence of an output schema (which likely documents the artifact_id return), the description is sufficient for an agent to select and invoke the tool. The only minor gap is the lack of explicit relationship to sibling tools like get_visualization_artifact for retrieving the artifact, but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all six parameters. The description adds no additional parameter semantics beyond what the schema already states, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a clear resource ('a visualization artifact for a converged job'), and explicitly mentions returning an 'artifact_id'. It clearly distinguishes from siblings like get_visualization_artifact (which retrieves) and run_cfd_solver (which runs the simulation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a converged job' implies the tool should be used after a solver job has completed, but there is no explicit mention of when not to use it or alternatives. The job_id parameter description in the schema provides more context, but the description itself offers limited usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
check_solver_results - First observed
generate_2d_mesh - First observed
generate_airfoil_geometry - First observed
get_visualization_artifact - First observed
run_airfoil_workflow - First observed
run_cfd_solver - First observed
visualize_cfd_results
TDQS
Each tool maps to a distinct stage of the CFD workflow: geometry, meshing, solver execution, status checking, combined workflow, visualization, and artifact retrieval. The only near-overlap is run_cfd_solver versus run_airfoil_workflow, but their descriptions clearly separate step-by-step execution from end-to-end orchestration.
All tool names follow a consistent verb_noun pattern with snake_case (generate_, run_, check_, visualize_, get_). This uniformity makes the toolset predictable and easy to navigate.
Seven tools is well-scoped for an airfoil CFD pipeline, covering geometry generation, meshing, solver execution, result checking, visualization, and artifact retrieval without redundancy. Each tool earns its place.
The set covers the entire airfoil simulation lifecycle from geometry generation through visualization and artifact access. The inclusion of a combined workflow tool fills a potential gap for users who want a single-call solution. No essential operation appears missing.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Materials MCP — computed (DFT) materials structures & thermodynamic properties.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Engineering calculation MCP server for oil and gas engineering applications.
Private GANO MCP for feasibility, scenario analysis, persistence and executive operations.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables aerodynamic analysis through XFOIL polar computations. Provides typed models and tools to run airfoil performance analyses from agents or automation workflows.1MIT
- AlicenseAqualityDmaintenanceEnables automated geometry editing and aerodynamic analysis using OpenVSP and VSPAero through natural language. Provides tools to modify aircraft geometry parameters and run computational fluid dynamics simulations programmatically.436MIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for CPACS-oriented TiGL workflows, enabling lifecycle management, inspection, export, and parameter manipulation of aircraft geometry models without native geometry runtimes.3MIT
- AlicenseNot gradedqualityDmaintenanceAutomates Ansys Fluent simulation workflows, enabling environment checks, case execution, UDF management, and result export through MCP tools.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DaveFan-NCHC/MCP-Server-for-CFD'
If you have feedback or need assistance with the MCP directory API, please join our Discord server