Skip to main content
Glama

openvsp-mcp - Parametric geometry for MCP workflows

TL;DR: Automate OpenVSP geometry edits and VSPAero runs so agents can generate meshes, scripts, and aerodynamic coefficients without manual GUI steps.

Table of contents

  1. What it provides

  2. Quickstart

  3. Run as a service

  4. Agent playbook

  5. Stretch ideas

  6. Accessibility & upkeep

  7. Contributing

Related MCP server: ANSYS MCP Server

What it provides

Scenario

Value

OpenVSP scripting

Automate OpenVSP commands (set parameters, duplicate geometries, export meshes) without opening the GUI.

VSPAero batch runs

Launch VSPAero cases and capture generated metrics/CSV files for downstream optimisation.

MCP transport

Publish the same functionality over STDIO or HTTP via the Model Context Protocol so ToolHive or other clients can drive geometry studies remotely.

Quickstart

1. Install the package

uv pip install "git+https://github.com/Three-Little-Birds/openvsp-mcp.git"

Install the official binaries from the OpenVSP download page (this wrapper was tested with OpenVSP/VSPAero 3.46.0 on macOS). Verify they are in your PATH:

export OPENVSP_BIN=/Applications/OpenVSP/vsp
export VSPAERO_BIN=/Applications/OpenVSP/vspaero

Tip (macOS/Linux): if you prefer to avoid GUI installers, build the repo's ToolHive image and run the examples inside Docker:

docker build -t openvsp-mcp-toolhive -f infra/docker/openvsp_toolhive/Dockerfile .
docker run --rm --entrypoint /usr/local/bin/vsp openvsp-mcp-toolhive --version

Mount your geometry directory and set OPENVSP_BIN=/usr/local/bin/vsp when executing the Python snippets in-container.

2. Run a scripted geometry edit

from importlib import resources
import shutil
import tempfile
from pathlib import Path

from openvsp_mcp import OpenVSPRequest, VSPCommand, execute_openvsp

with resources.as_file(resources.files("openvsp_mcp.data") / "rect_wing.vsp3") as bundled:
    with tempfile.TemporaryDirectory(prefix="openvsp_mcp_") as tmpdir:
        geometry_path = Path(tmpdir) / "rect_wing.vsp3"
        shutil.copy(bundled, geometry_path)

        request = OpenVSPRequest(
            geometry_file=str(geometry_path),
            set_commands=[
                VSPCommand(command='string geom_id = FindGeom("RectWing", 0)'),
                VSPCommand(command='string span_id = GetParm( geom_id, "TotalSpan", "WingGeom" )'),
                VSPCommand(command='SetParmVal( span_id, 12.0 )'),
                VSPCommand(command='Update()'),
            ],
            run_vspaero=False,
            case_name="rectwing_span12",
        )

        response = execute_openvsp(request)
        print("Script used:", response.script_path)
        print("ADB path:", response.result_path)  # None unless run_vspaero=True

OpenVSPResponse contains:

  • script_path – absolute path to the generated .vspscript you can archive for repeatability.

  • result_path – VSPAero .adb file (string) when run_vspaero=True, otherwise None. Meshes, CSVs, and other artefacts are emitted by OpenVSP next to your original .vsp3.

Need a starter geometry? The package ships with openvsp_mcp.data/rect_wing.vsp3, generated from a single OpenVSP wing primitive. The snippet above uses OpenVSP script helpers (FindGeom + GetParm) so it works out of the box. For your own models, open the geometry in the GUI, note the component name returned by FindGeom, and update the commands accordingly.

Run as a service

CLI (STDIO / Streamable HTTP)

uvx openvsp-mcp  # runs the MCP over stdio
# or python -m openvsp_mcp
python -m openvsp_mcp --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp

Registered tools:

  • openvsp.inspect – describe a geometry without modifying it.

  • openvsp.modify – apply scripted parameter edits (no VSPAero).

  • openvsp.run_vspaero – run edits followed by VSPAero.

Use python -m openvsp_mcp --describe to list the tools at runtime.

FastAPI (REST)

uv run uvicorn openvsp_mcp.fastapi_app:create_app --factory --port 8002

Endpoints:

  • POST /vsp/inspectOpenVSPInspectResponse

  • POST /vsp/modify → run edits only

  • POST /vsp/run → run edits + VSPAero

All operations return structured JSON; explore them via the interactive docs at http://127.0.0.1:8002/docs.

python-sdk tool (STDIO / MCP)

from mcp.server.fastmcp import FastMCP
from openvsp_mcp.tool import build_tool

mcp = FastMCP("openvsp-mcp", "OpenVSP automation")
build_tool(mcp)

if __name__ == "__main__":
    mcp.run()

Then launch with uv run mcp dev examples/openvsp_tool.py and connect your agent.

ToolHive smoke test

Requires exported binaries and a geometry file reachable inside the container:

export OPENVSP_BIN=/path/to/vsp
export VSPAERO_BIN=/path/to/vspaero    # optional
export OPENVSP_GEOMETRY=/path/to/model.vsp3
uvx --with 'mcp==1.20.0' python scripts/integration/run_openvsp.py
# ToolHive 2025+ defaults to Streamable HTTP; select the same transport when registering
# the workload manually to avoid the legacy SSE 502 proxy issue.

Agent playbook

  • Geometry studies - script sweep operations (span, twist, control surface deflections) and archive each variant.

  • Aerodynamic coefficients - hand VSPAero results to ctrltest-mcp or custom controllers.

  • Mesh exports - agents can request STL/OBJ assets for CFD or manufacturing pipelines.

Stretch ideas

  1. Pair with foam-agent-mcp-core to auto-generate mesh-ready cases.

  2. Use deck.gl to visualise planform edits by surfacing geometry metadata in the response.

  3. Schedule nightly configuration sweeps (span x sweep x incidence) and store the results for design-of-experiments studies.

Accessibility & upkeep

  • Run uv run pytest before committing; tests mock VSPAero calls so they finish quickly.

  • Keep OpenVSP/VSPAero versions consistent across developers to avoid geometry mismatches.

Contributing

  1. uv pip install --system -e .[dev]

  2. Run uv run ruff check . and uv run pytest

  3. Submit PRs with sample scripts or geometry diffs so reviewers can validate quickly.

MIT license - see LICENSE.

  • OpenVSP ships under NASA’s license; VSPAero usage must comply with the terms that accompany your download. Commercial redistribution generally requires a separate agreement—check the official FAQ before packaging binaries into your MCP workloads.

Available Tools

3 tools
openvsp.inspectA

Describe an OpenVSP geometry without modifying it. Returns component IDs and raw info.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
geom_idsYesTop-level geometry IDs discovered
info_logYesRaw output from OpenVSP describe command
wing_namesNoDetected wing geometry names

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool is non-modifying and returns 'component IDs and raw info,' which covers basic behavior. However, it lacks details on error handling, performance, or any constraints like file size limits, leaving gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and concise, consisting of two sentences that efficiently convey the tool's purpose and output. Every sentence earns its place by adding value without redundancy, making it easy to understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter) and the presence of an output schema, the description is mostly complete. It covers the non-modifying nature and output type, but could benefit from more behavioral context, such as error cases or usage tips, to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-specific information beyond what the input schema provides, as schema description coverage is 0%. However, with only one parameter, the baseline is high. The description's mention of 'OpenVSP geometry' and '.vsp3 file' in the schema provides adequate context, compensating for the lack of explicit param details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Describe') and resource ('OpenVSP geometry'), and distinguishes it from siblings by emphasizing it doesn't modify the geometry. However, it doesn't explicitly name the sibling tools for comparison, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool by stating it 'without modifying it,' suggesting it's for inspection rather than modification. However, it doesn't provide explicit guidance on when to choose this over alternatives like 'openvsp.modify' or 'openvsp.run_vspaero,' nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openvsp.modifyB

Apply scripted parameter edits to an OpenVSP model without running VSPAero. Use set_commands to adjust geometry; returns the generated script path.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
result_pathNoPath to the generated VSPAero .adb file (if run_vspaero=True)
script_pathYesAbsolute path to the temporary script file

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions that the tool 'returns the generated script path,' which adds some behavioral context about the output. However, it lacks details on permissions needed, whether edits are destructive or reversible, error handling, or how the script interacts with the model. For a mutation tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences that are front-loaded with key information: the tool's purpose and a usage hint. There's no wasted text, though it could be slightly more structured to separate purpose from guidelines.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with 1 parameter but nested objects), no annotations, and an output schema (which reduces the need to describe returns), the description is partially complete. It covers the main action and output but misses critical behavioral details like safety, prerequisites, and parameter explanations, leaving gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It references 'set_commands' to adjust geometry, which aligns with one parameter, but doesn't explain other parameters like 'geometry_file' or 'run_vspaero' (which seems contradictory to the description's 'without running VSPAero'). The description adds minimal value beyond the schema, resulting in a baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Apply scripted parameter edits to an OpenVSP model without running VSPAero.' It specifies the action (apply edits), resource (OpenVSP model), and constraint (without VSPAero). However, it doesn't explicitly differentiate from sibling tools like 'openvsp.run_vspaero' beyond mentioning the VSPAero exclusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context: 'Use set_commands to adjust geometry' and distinguishes it from VSPAero execution. However, it doesn't explicitly state when to use this tool versus alternatives like 'openvsp.inspect' or 'openvsp.run_vspaero', nor does it mention prerequisites or exclusions beyond the VSPAero aspect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openvsp.run_vspaeroC

Run OpenVSP edits followed by VSPAero. Provide geometry commands and case_name.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
result_pathNoPath to the generated VSPAero .adb file (if run_vspaero=True)
script_pathYesAbsolute path to the temporary script file

TDQS

C2.9/5.0
Behavior2/5

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 runs edits and VSPAero, implying a mutation operation, but doesn't detail critical behaviors such as whether it modifies the input file in-place, creates new files, requires specific permissions, handles errors, or has performance implications like runtime or resource usage. The description is too sparse for a tool that likely involves complex computational tasks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—just one sentence—with no wasted words. It front-loads the core action ('Run OpenVSP edits followed by VSPAero') and includes essential input hints. This efficiency is appropriate, though it may sacrifice detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of running geometry edits and aerodynamic analysis, the description is incomplete. No annotations exist to clarify safety or behavior, and while an output schema is present (which might describe results), the description doesn't hint at what the tool returns or its operational context. For a tool with nested parameters and likely significant computational impact, more guidance on usage, outcomes, and constraints is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions 'geometry commands and case_name,' which loosely maps to the 'set_commands' and 'case_name' parameters in the schema. However, with 0% schema description coverage, the schema provides no descriptions for parameters, and the description doesn't fully compensate by explaining all parameters (e.g., 'geometry_file' and 'run_vspaero' are not addressed). It adds minimal semantic value beyond the parameter names, meeting the baseline for partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Run OpenVSP edits followed by VSPAero.' It specifies the verb 'run' and the resources 'OpenVSP edits' and 'VSPAero,' which is specific and actionable. However, it doesn't explicitly distinguish this tool from its siblings (openvsp.inspect and openvsp.modify), which likely involve inspection or modification without the VSPAero execution step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions providing 'geometry commands and case_name,' but doesn't explain scenarios where this tool is preferred over openvsp.inspect or openvsp.modify, nor does it outline prerequisites or exclusions. This lack of contextual direction leaves the agent to infer usage based on tool names alone.

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.

  1. 3 tool updatesv1.0.0
    • Changedopenvsp.inspect2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "OpenVSPGeometryRequest": {
        +    "properties": {
        +      "geometry_file": {
        +        "description": "Path to the .vsp3 file",
        +        "title": "Geometry File",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "geometry_file"
        +    ],
        +    "title": "OpenVSPGeometryRequest",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / title
        Added value: +"inspectArguments"
    • Changedopenvsp.modify2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "OpenVSPRequest": {
        +    "description": "Parameters controlling geometry edits and optional VSPAero run.",
        +    "properties": {
        +      "case_name": {
        +        "default": "case",
        +        "description": "Base name for generated results",
        +        "title": "Case Name",
        +        "type": "string"
        +      },
        +      "geometry_file": {
        +        "description": "Path to the .vsp3 file",
        +        "title": "Geometry File",
        +        "type": "string"
        +      },
        +      "run_vspaero": {
        +        "default": true,
        +        "description": "Execute VSPAero after editing geometry",
        +        "title": "Run Vspaero",
        +        "type": "boolean"
        +      },
        +      "set_commands": {
        +        "description": "Commands to run",
        +        "items": {
        +          "$ref": "#/$defs/VSPCommand"
        +        },
        +        "title": "Set Commands",
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "geometry_file"
        +    ],
        +    "title": "OpenVSPRequest",
        +    "type": "object"
        +  },
        +  "VSPCommand": {
        +    "description": "Single OpenVSP script command.",
        +    "properties": {
        +      "command": {
        +        "description": "Literal line inserted into the VSP script",
        +        "title": "Command",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "command"
        +    ],
        +    "title": "VSPCommand",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / title
        Added value: +"modifyArguments"
    • Changedopenvsp.run_vspaero2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "OpenVSPRequest": {
        +    "description": "Parameters controlling geometry edits and optional VSPAero run.",
        +    "properties": {
        +      "case_name": {
        +        "default": "case",
        +        "description": "Base name for generated results",
        +        "title": "Case Name",
        +        "type": "string"
        +      },
        +      "geometry_file": {
        +        "description": "Path to the .vsp3 file",
        +        "title": "Geometry File",
        +        "type": "string"
        +      },
        +      "run_vspaero": {
        +        "default": true,
        +        "description": "Execute VSPAero after editing geometry",
        +        "title": "Run Vspaero",
        +        "type": "boolean"
        +      },
        +      "set_commands": {
        +        "description": "Commands to run",
        +        "items": {
        +          "$ref": "#/$defs/VSPCommand"
        +        },
        +        "title": "Set Commands",
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "geometry_file"
        +    ],
        +    "title": "OpenVSPRequest",
        +    "type": "object"
        +  },
        +  "VSPCommand": {
        +    "description": "Single OpenVSP script command.",
        +    "properties": {
        +      "command": {
        +        "description": "Literal line inserted into the VSP script",
        +        "title": "Command",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "command"
        +    ],
        +    "title": "VSPCommand",
        +    "type": "object"
        +  }
        +}
      • addedInput schema / title
        Added value: +"run_vspaeroArguments"
  2. 3 tool updates
    • First observedopenvsp.inspect
    • First observedopenvsp.modify
    • First observedopenvsp.run_vspaero

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: inspect is for describing geometry, modify is for applying parameter edits, and run_vspaero is for running edits followed by VSPAero. There is no overlap or ambiguity between these functions, making tool selection straightforward for an agent.

Naming Consistency5/5

All tool names follow a consistent pattern with the prefix 'openvsp.' and a descriptive action suffix (inspect, modify, run_vspaero). This verb-based naming is uniform and predictable, enhancing usability and clarity across the tool set.

Tool Count3/5

With only 3 tools, the set feels thin for a server focused on OpenVSP geometry and VSPAero analysis. While it covers core operations, it may lack depth for more advanced workflows, such as managing multiple models or handling specific analysis outputs, which could limit agent capabilities.

Completeness4/5

The tools provide a basic workflow for inspecting, modifying, and running analyses on OpenVSP models, covering key operations. However, there are minor gaps, such as no tools for creating new models, saving/loading files, or accessing detailed VSPAero results, which agents might need to work around.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables language models to perform hardware engineering tasks including CAD part design and heat transfer simulations. Provides tool calls for building mechanical components and running thermal analysis through natural language interactions.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables natural language-driven ANSYS simulations (Fluent, Mechanical, Geometry) with automatic TUI script generation for reproducibility.
    41
    6
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Automates OpenFOAM CFD simulations via MCP, enabling AI agents to mesh, run, and post-process cases from natural language prompts without any API keys.
    MIT

Latest Blog Posts

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/Three-Little-Birds/openvsp-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server