designsafe-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DESIGNSAFE_MCP_MOCK | No | Set to '1' to run the server in mock mode (no Tapis calls, no SUs). | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| supported_capabilitiesA | What this server supports, by scientific domain. Consult this before promising anything. Every capability names how it is served and whether it is tested; 'candidate' and 'untested' entries need a human-run graduation before unattended use. Requests outside this map should be declined by pointing at out_of_scope. |
| plan_simulationA | Plan an OpenSees/quoFEM simulation from the decision matrix. Pass the facts you know; anything left None is inferred from the request only when unambiguous, and otherwise returned in open_questions for you to ask the user. The decision is the matrix's, not yours: do not override app_id, and compose the cells from the returned snippet, not from memory. model_language: "tcl" | "python" parallelism: "serial" | "domain-decomposition" | "single-domain-parallel-solver" | "many-independent-cases" |
| plan_calibrationA | Plan a calibration study from the method matrix. Pass what you know; unanswered facts come back as open questions. uncertainty_required: must the result carry parameter uncertainty into a downstream prediction (posterior), or is a best-fit point enough? quofem_wrappable: can quoFEM drive the model (OpenSees main script with parameter placeholders and a scalar-QoI postprocessor)? screened: has a sensitivity study already reduced the parameter set? |
| calibration_optionsA | Every calibration-stage method runnable on DesignSafe, with its engine, what it returns, and its tested/candidate status. |
| describe_materialA | Parameters, sensitivities, and the calibration sequence for a constitutive model, transcribed from its manual with page citations. Use this before planning a calibration: it answers which parameters exist, what data informs each one, and in what order to calibrate. |
| search_snippetsA | Find tested, version-pinned workflow snippets matching a query. Snippets are executed, self-checking notebooks with pinned app and dapi versions; only entries whose test passed are in the corpus. |
| search_communityA | Search every local notebook, model, and script for aligned passages. Returns the matching text itself with its source path and the index build stamp, so the caller can ground a workflow in what the community actually wrote and knows how fresh that knowledge is. Call corpus_status() to see which sources the index covers; use search_docs for documentation-only search. |
| search_docsA | Search the documentation corpus: the dapi user guide, the ds-workflows book, SimCenter quoFEM docs, and reference manuals. Grounding only, never the source of orchestration code; snippets remain the only source an agent may compose runs from. Results carry source and index stamp. Backend today is a local index over live-fetched docs; the Ask AI knowledge graph replaces it later behind this same tool. |
| corpus_statusA | What the grounding index covers and where it came from: each logical source (UW notebooks, dapi, the ds-workflows book), how it resolved (local checkout, fetched cache, or absent), how many passages it contributes, and when the index was built. An absent source means degraded grounding; say so rather than answering from partial knowledge, and fetch_corpus() can fill the gap live. |
| reindexA | Rebuild the index after mirroring new notebooks or references. |
| fetch_corpusA | Fetch grounding sources live from their canonical GitHub repos into corpus/, for deployments without local checkouts. source: fetch just one logical source by name; empty fetches every GitHub-backed source. CommunityData is not fetched here (needs Tapis auth; see corpus_status for the command). Run reindex after. |
| opensees_matrixA | Which OpenSees to use when: the decision matrix from the training deck. Returns the variant table (variant -> app_id -> when), the full scope x platform x interface matrix with its legend, and the path of the original slide image for display to the user. |
| describe_appC | The app's real interface from Tapis: inputs, parameters, defaults. |
| stage_inputsB | Upload a local folder once and return the tapis:// URI to run from. |
| build_job_requestA | Build a complete Tapis job request from the app definition. Mirrors ds.jobs.generate; returns the dict for inspection. Nothing is submitted. SimCenter apps (quoFEM) take no script_filename; dapi wires scInput.json and the driver automatically. |
| validate_jobB | Schema and sanity checks plus input existence, before any SU is spent. |
| estimate_costA | Estimated SU cost: nodes x hours, per the DesignSafe job-resources guidance. |
| approve_submissionA | Record human approval for exactly this job request; returns the token submit_job requires. The calling harness must show the trust summary (snippet, versions, cost, outputs) to a human before calling this. |
| submit_jobA | Submit a validated job. Refuses without the approval token minted by approve_submission for this exact request. |
| job_statusC | Current Tapis status for a submitted job. |
| get_resultsC | List the job archive, or return a small text file's content. |
| build_workflow_previewA | Compile a DAG of job requests without running it. tasks: [{"task_id", "job", "depends_on": [...], "input_from": {"task_id", "suffix"} (optional)}] Returns the compiled pipeline: deterministic archives, resolved edges. |
| write_manifestA | Emit the provenance manifest that makes the run reproducible. Refuses incomplete provenance: the job must be a fully built request (app, name, resources, inputs) and the uuid must belong to a job this server submitted. A manifest that cannot reproduce the run is worse than none. |
| list_my_jobsA | List jobs with optional filtering. Fetches jobs from Tapis ordered by creation date (newest first). Filters are applied client-side. Args: app_id (str, optional): Filter by application ID. status (str, optional): Filter by job status (e.g., "FINISHED"). Case-insensitive. limit (int, optional): Maximum jobs to fetch. Defaults to 100. output (str, optional): Output format. "df" for pandas DataFrame (default), "list" for list of dicts, "raw" for TapisResult objects. verbose (bool, optional): Print job count. Defaults to False. list_type (str, optional): "MY_JOBS" (default) for jobs you own, "SHARED_JOBS" for jobs shared with you, "ALL_JOBS" for both. Returns: Depends on output: DataFrame, list of dicts, or list of TapisResult objects. Raises: JobMonitorError: If the Tapis API call fails. Example: >>> df = ds.jobs.list(app_id="matlab-r2023a", status="FINISHED") >>> jobs = ds.jobs.list(output="list") >>> raw = ds.jobs.list(limit=10, output="raw") [schema introspected from dapi 0.6.1 (jobs.list); this tool is generated, not maintained by hand] |
| list_queuesA | List batch queues available on a Tapis execution system. Args: system_id (str): The ID of the execution system (e.g., "stampede3"). output (str, optional): "df" for DataFrame (default), "raw" for Tapis objects. Returns: DataFrame or List: Queues with name, maxNodes, maxMinutes, etc. Example: >>> ds.systems.queues("stampede3") [schema introspected from dapi 0.6.1 (systems.queues); this tool is generated, not maintained by hand] |
| list_systemsA | List Tapis systems you have access to. Filters out internal and project-specific systems by default. Args: category (str, optional): "hpc" for execution systems, "storage" for storage systems, "all" for everything, None for HPC + storage (default). output (str, optional): "df" for DataFrame (default), "list" for dicts. Returns: DataFrame or List[Dict]: Systems with id, host, category, authn, credentials. Example: >>> ds.systems.list() # HPC + storage >>> ds.systems.list("hpc") # HPC only with credential status >>> ds.systems.list("storage") # Storage only >>> ds.systems.list("all") # Everything including internal [schema introspected from dapi 0.6.1 (systems.list); this tool is generated, not maintained by hand] |
| list_app_templatesB | Names of the app templates that ship with dapi. [schema introspected from dapi 0.6.1 (apps.templates); this tool is generated, not maintained by hand] |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| opensees_matrix_image | The training deck's OpenSees decision matrix, as shown to humans. |
| resource_flowchart_image | Which DesignSafe resource to use: the deck's decision flowchart. |
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/kks32/designsafe-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server