diff --git a/.github/workflows/deploy-docs-prod.yaml b/.github/workflows/deploy-docs-prod.yaml index c2e62fb39b..24697c2f30 100644 --- a/.github/workflows/deploy-docs-prod.yaml +++ b/.github/workflows/deploy-docs-prod.yaml @@ -117,7 +117,7 @@ jobs: run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} && aws configure set default.region us-east-1 - name: Deploy docs prod site - run: aws s3 sync site/_site s3://validmind-docs-prod/site --delete --exclude "installation/omnibus/*" --exclude "installation/helm-repo/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id E2BGG3USKQTR9W --paths "/*" --no-cli-pager + run: aws s3 sync site/_site s3://validmind-docs-prod/site --delete --exclude "installation/omnibus/*" --exclude "installation/helm-repo/*" --exclude "notebooks/EXECUTED/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id E2BGG3USKQTR9W --paths "/*" --no-cli-pager # Release headroom and shrink before final lightweight steps & post-job - name: Release reserve & shrink diff --git a/.github/workflows/deploy-docs-staging.yaml b/.github/workflows/deploy-docs-staging.yaml index 48e76d348f..4c8f8fb69b 100644 --- a/.github/workflows/deploy-docs-staging.yaml +++ b/.github/workflows/deploy-docs-staging.yaml @@ -120,7 +120,7 @@ jobs: run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_STAGING }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGING }} && aws configure set default.region us-west-2 - name: Deploy docs staging site - run: aws s3 sync site/_site s3://validmind-docs-staging/site --delete --exclude "installation/helm-repo/*" --exclude "pr_previews/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager + run: aws s3 sync site/_site s3://validmind-docs-staging/site --delete --exclude "installation/helm-repo/*" --exclude "pr_previews/*" --exclude "notebooks/EXECUTED/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager # Release headroom and shrink before final lightweight steps & post-job - name: Release reserve & shrink diff --git a/.github/workflows/validate-docs-site.yaml b/.github/workflows/validate-docs-site.yaml index da1d3bc9d1..309a7b302f 100644 --- a/.github/workflows/validate-docs-site.yaml +++ b/.github/workflows/validate-docs-site.yaml @@ -130,7 +130,7 @@ jobs: run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_STAGING }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGING }} && aws configure set default.region us-east-1 - name: Deploy PR preview - run: aws s3 sync site/_site s3://validmind-docs-staging/site/pr_previews/${{ github.head_ref }} --delete && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager + run: aws s3 sync site/_site s3://validmind-docs-staging/site/pr_previews/${{ github.head_ref }} --delete --exclude "notebooks/EXECUTED/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager - name: Post comment with preview URL uses: actions/github-script@v6 diff --git a/.gitignore b/.gitignore index 9684da543c..f4de6a8af5 100644 --- a/.gitignore +++ b/.gitignore @@ -36,9 +36,6 @@ site/validmind-docs.yaml # Python API docs are now generated on the fly site/validmind -# Generated template schema documentation -site/guide/templates/_template-schema-generated.qmd - # Cursor rules .cursor/rules/ .cursor/skills/ diff --git a/README.md b/README.md index 1734a7b31e..2c188de20c 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Some documentation content is auto-generated from backend source files. These sc #### Template schema documentation -The template schema reference in `site/guide/templates/customize-document-templates.qmd` is auto-generated from the backend JSON Schema. CI workflows generate this automatically, but you can also regenerate locally: +The template schema reference in `site/guide/templates/customize-document-templates.qmd` is auto-generated from the backend JSON Schema, overwriting any baseline output checked into this repo. You can also regenerate locally and commit: ```bash cd site @@ -172,7 +172,7 @@ make template-schema-docs The script reads from: - `backend/src/backend/templates/documentation/model_documentation/mdd_template_schema_v5.json` — template schema definition -Output: `site/guide/templates/_template-schema-generated.qmd` +Output: Content is injected directly into `site/guide/templates/customize-document-templates.qmd` between marker comments. #### Stylesheet organization (IN PROGRESS) diff --git a/site/releases/breaking-changes/breaking-changes.qmd b/internal/releases-archive/breaking-changes/breaking-changes.qmd similarity index 69% rename from site/releases/breaking-changes/breaking-changes.qmd rename to internal/releases-archive/breaking-changes/breaking-changes.qmd index 5436f8f06d..a71687d175 100644 --- a/site/releases/breaking-changes/breaking-changes.qmd +++ b/internal/releases-archive/breaking-changes/breaking-changes.qmd @@ -1,4 +1,7 @@ --- +# Copyright © 2023-2026 ValidMind Inc. All rights reserved. +# Refer to the LICENSE file in the root of this repository for details. +# SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial title: "Breaking changes and deprecations" date: last-modified categories: ["breaking changes", "deprecations"] diff --git a/internal/releases-archive/release-scripts/__pycache__/generate_release_objects.cpython-310.pyc b/internal/releases-archive/release-scripts/__pycache__/generate_release_objects.cpython-310.pyc new file mode 100644 index 0000000000..2627bac9f2 Binary files /dev/null and b/internal/releases-archive/release-scripts/__pycache__/generate_release_objects.cpython-310.pyc differ diff --git a/internal/releases-archive/release-scripts/__pycache__/yearly_cleanup.cpython-310.pyc b/internal/releases-archive/release-scripts/__pycache__/yearly_cleanup.cpython-310.pyc new file mode 100644 index 0000000000..ad28ed051b Binary files /dev/null and b/internal/releases-archive/release-scripts/__pycache__/yearly_cleanup.cpython-310.pyc differ diff --git a/release-scripts/generate-release-notes.ipynb b/internal/releases-archive/release-scripts/generate-release-notes.ipynb similarity index 100% rename from release-scripts/generate-release-notes.ipynb rename to internal/releases-archive/release-scripts/generate-release-notes.ipynb diff --git a/release-scripts/generate_release_objects.py b/internal/releases-archive/release-scripts/generate_release_objects.py similarity index 100% rename from release-scripts/generate_release_objects.py rename to internal/releases-archive/release-scripts/generate_release_objects.py diff --git a/release-scripts/year-end-cleanup.ipynb b/internal/releases-archive/release-scripts/year-end-cleanup.ipynb similarity index 100% rename from release-scripts/year-end-cleanup.ipynb rename to internal/releases-archive/release-scripts/year-end-cleanup.ipynb diff --git a/release-scripts/yearly_cleanup.py b/internal/releases-archive/release-scripts/yearly_cleanup.py similarity index 100% rename from release-scripts/yearly_cleanup.py rename to internal/releases-archive/release-scripts/yearly_cleanup.py diff --git a/scripts/generate_template_schema_docs.py b/scripts/generate_template_schema_docs.py index 3becbac57d..c790489403 100644 --- a/scripts/generate_template_schema_docs.py +++ b/scripts/generate_template_schema_docs.py @@ -30,7 +30,10 @@ BACKEND_ROOT = Path(os.environ.get("BACKEND_ROOT", REPO_ROOT.parent / "backend")) SCHEMA_FILE = BACKEND_ROOT / "src/backend/templates/documentation/model_documentation/mdd_template_schema_v5_ui.json" -OUTPUT_FILE = REPO_ROOT / "site/guide/templates/_template-schema-generated.qmd" +TARGET_FILE = REPO_ROOT / "site/guide/templates/_template-schema-generated.qmd" + +# Minimum expected file size in bytes (sanity check for valid output) +MIN_OUTPUT_SIZE = 40000 # CSS stylesheets to link in the generated HTML STYLESHEETS = [ @@ -62,7 +65,7 @@ def main(): print(f"Generating schema documentation from {SCHEMA_FILE}") # Create temporary output - temp_output = OUTPUT_FILE.with_suffix(".tmp.html") + temp_output = TARGET_FILE.with_suffix(".tmp.html") subprocess.run([ "generate-schema-doc", @@ -98,6 +101,20 @@ def main(): '', html_content ) + # Strip the title tag (not needed when embedded in Quarto page) + html_content = re.sub( + r'\s*
Top-level documentation sections shown in the template editor.
+ + + + + + + No Additional ItemsA section in the document tree.
+ + + No Additional Properties + + + + + + +Unique identifier for the section.
+ + + + + + + +Title of the section.
+ + + + + + + +Description of the section.
+ + + + + + + +Order of the section in the navigation menu. By default sections are ordered alphabetically. If order is specified, sections will be ordered by the order value, and then alphabetically.
+ + + + + + + +Default text for the section. If set, a metadata content row will be created with this text when installing the template on a given project.
+ + + + + + + +If true, the section will be displayed in the navigation menu, but it will not be accessible via direct link.
+ + + + + + + +If true, the section will condense all of its subsections into a single section.
+ + + + + + + +Documentation or validation guidelines for the section.
+ + + + + + + No Additional ItemsContents to be displayed on the section.
+ + + + + + + No Additional ItemsSingle content block rendered within a section.
+ + + + + + + + + +"text"
+"test"
+ID of the content to be displayed for the given content type.
+"sample_text"
+[
+ "sample_text",
+ "section_intro"
+]
+Options for the content block.
+ + + + + + +{
+ "default_text": "This is a sample text block."
+}
+{
+ "metric_id": "metric_1",
+ "title": "Custom Title for Metric 1"
+}
+{
+ "test_id": "adf_test"
+}
+Default text for the content block. Only applicable for text content blocks.
+ + + + + + + +Title of the content block. Only applicable for metric and test content blocks.
+ + + + + + + +Additional Properties of any type are allowed.
+ + Type: objectNested child sections.
+ + + + + + + No Additional Items' ) - # Copyright header to place before the raw HTML block - copyright_header = """""" - - # Wrap HTML in Quarto raw HTML block for .qmd file, with comment before - qmd_content = f"""{copyright_header} +Source: {SCHEMA_FILE.relative_to(BACKEND_ROOT.parent)} +--> ```{{=html}} {html_content} ``` """ - # Write final output - OUTPUT_FILE.parent.mkdir(parents=True, exist_ok=True) - with open(OUTPUT_FILE, "w") as f: - f.write(qmd_content) + # Validate output before writing + if len(output_content) < MIN_OUTPUT_SIZE: + print(f"Error: Generated output is too small ({len(output_content)} bytes)") + print("This likely indicates a generation failure.") + temp_output.unlink(missing_ok=True) + sys.exit(1) + + if "" not in html_content: + print("Error: Generated output does not contain valid HTML structure") + temp_output.unlink(missing_ok=True) + sys.exit(1) + + # Write to target file + TARGET_FILE.write_text(output_content) # Clean up temp file temp_output.unlink() - print(f"Generated {OUTPUT_FILE}") + print(f"Generated template schema documentation: {TARGET_FILE}") + print(f"Output size: {len(output_content)} bytes") if __name__ == "__main__": diff --git a/site/Makefile b/site/Makefile index 6773da52d5..d3372f286c 100644 --- a/site/Makefile +++ b/site/Makefile @@ -427,7 +427,7 @@ release-notes: template-schema-docs: @echo "\nGenerating template schema documentation ..." @if [ ! -d "$(SRC_ROOT)/backend" ]; then echo "Error: Backend not cloned. Run 'make clone' first."; exit 1; fi - @pip install -q json-schema-for-humans + @python -m pip install -q json-schema-for-humans @BACKEND_ROOT=$(SRC_ROOT)/backend python ../scripts/generate_template_schema_docs.py test-descriptions: diff --git a/site/_extensions/category-filter/_extension.yml b/site/_extensions/category-filter/_extension.yml new file mode 100644 index 0000000000..f12627f1d7 --- /dev/null +++ b/site/_extensions/category-filter/_extension.yml @@ -0,0 +1,6 @@ +title: Category Filter +author: Nik Richers +version: 1.0.0 +contributes: + filters: + - category-filter.lua diff --git a/site/_extensions/category-filter/category-filter.lua b/site/_extensions/category-filter/category-filter.lua new file mode 100644 index 0000000000..62fbdf5ee5 --- /dev/null +++ b/site/_extensions/category-filter/category-filter.lua @@ -0,0 +1,59 @@ +-- Category Filter Lua Extension +-- Reads listing-filter from YAML frontmatter and injects config as a data attribute + +local function meta_to_native(val) + if val == nil then + return nil + end + + local mt = getmetatable(val) + + -- Check for pandoc List type (used for YAML arrays) + if mt and mt.__name == "List" then + local arr = {} + for i, item in ipairs(val) do + arr[i] = meta_to_native(item) + end + return arr + end + + -- Check for pandoc Inlines (YAML string values become Inlines) + if mt and (mt.__name == "Inlines" or mt.__name == "Blocks") then + return pandoc.utils.stringify(val) + end + + -- Plain Lua types + local t = type(val) + if t == "string" or t == "number" or t == "boolean" then + return val + elseif t == "table" then + -- Check if it's an array-like table + if #val > 0 and val[1] ~= nil then + local arr = {} + for i, item in ipairs(val) do + arr[i] = meta_to_native(item) + end + return arr + else + -- It's a map/object + local obj = {} + for k, v in pairs(val) do + obj[k] = meta_to_native(v) + end + return obj + end + end + + -- Fallback: try stringify + return pandoc.utils.stringify(val) +end + +function Meta(meta) + if meta['listing-filter'] then + local config = meta_to_native(meta['listing-filter']) + local json = quarto.json.encode(config) + local escaped = json:gsub("'", "'") + quarto.doc.include_text("after-body", + '
') + end +end diff --git a/site/_quarto.yml b/site/_quarto.yml index 3431441f74..b2482ebcbd 100644 --- a/site/_quarto.yml +++ b/site/_quarto.yml @@ -4,6 +4,10 @@ project: type: website + render: + - "**/*.qmd" + - "**/*.ipynb" + - "**/*.md" metadata-files: # - _drafts.yaml diff --git a/site/about/glossary/mcp/_mcp-server.qmd b/site/about/glossary/mcp/_mcp-server.qmd new file mode 100644 index 0000000000..d758930933 --- /dev/null +++ b/site/about/glossary/mcp/_mcp-server.qmd @@ -0,0 +1,6 @@ + + +MCP server +: A service that exposes tools and resources to AI assistants via the MCP protocol. The {{< var vm.product >}} MCP server provides access to model inventory operations. diff --git a/site/about/glossary/mcp/_mcp-tool.qmd b/site/about/glossary/mcp/_mcp-tool.qmd new file mode 100644 index 0000000000..739c6cd6e5 --- /dev/null +++ b/site/about/glossary/mcp/_mcp-tool.qmd @@ -0,0 +1,6 @@ + + +MCP tool +: An operation exposed by an MCP server that AI assistants can invoke to perform actions, such as querying models or updating artifacts. diff --git a/site/about/glossary/mcp/_mcp.qmd b/site/about/glossary/mcp/_mcp.qmd new file mode 100644 index 0000000000..0dca829df8 --- /dev/null +++ b/site/about/glossary/mcp/_mcp.qmd @@ -0,0 +1,6 @@ + + +MCP (Model Context Protocol) +: An open standard that enables AI assistants to connect to external data sources and tools through a unified protocol, allowing natural language interactions with structured systems. diff --git a/site/developer/model-documentation/install-and-initialize-validmind-for-r.qmd b/site/developer/model-documentation/install-and-initialize-validmind-for-r.qmd index f595c8166d..3398550a75 100644 --- a/site/developer/model-documentation/install-and-initialize-validmind-for-r.qmd +++ b/site/developer/model-documentation/install-and-initialize-validmind-for-r.qmd @@ -12,12 +12,12 @@ listing: fields: [title, description] grid-columns: 2 contents: - - path: https://github.com/validmind/validmind-library/blob/main/notebooks/quickstart/quickstart_model_documentation.Rmd - title: "Quickstart for model documentation" - description: "End-to-end model documentation workflow in R: load data, preprocess, train a GLM model, and run the full documentation test suite." - - path: https://github.com/validmind/validmind-library/blob/main/notebooks/quickstart/quickstart_model_validation.Rmd - title: "Quickstart for model validation" - description: "End-to-end model validation workflow in R: load data, run data quality tests, train a champion GLM model, and run model evaluation tests." + - path: https://github.com/validmind/validmind-library/tree/main/notebooks/quickstart/ + title: "Quickstart for model documentation" + description: "End-to-end model documentation workflow in R: load data, preprocess, train a GLM model, and run the full documentation test suite." + - path: https://github.com/validmind/validmind-library/tree/main/notebooks/quickstart/ + title: "Quickstart for model validation" + description: "End-to-end model validation workflow in R: load data, run data quality tests, train a champion GLM model, and run model evaluation tests." --- Use the ValidMind R package to document and validate models built in R. The package interfaces with the {{< var validmind.developer >}} through `reticulate`, giving you access to the full Python API from R. diff --git a/site/developer/supported-models-and-frameworks.qmd b/site/developer/supported-models-and-frameworks.qmd index d1b25d81af..ab9319d529 100644 --- a/site/developer/supported-models-and-frameworks.qmd +++ b/site/developer/supported-models-and-frameworks.qmd @@ -81,6 +81,12 @@ Retrieval-augmented generation pipelines. - Tests: RAGAS integration - Refer to [RAG evaluation](#rag-evaluation) for dataset requirements and available tests + +## Agentic AI +LLM-based agents that use tools and multi-step reasoning. + +- Scorers: DeepEval integration +- Refer to [Agentic AI evaluation](#agentic-ai-evaluation) for available scorers ::: ## Machine learning models @@ -465,6 +471,28 @@ run_test( - **Context Precision** — Measures relevance of retrieved contexts - **Answer Relevancy** — Assesses if the response addresses the query +## Agentic AI evaluation + +For agentic AI systems, the {{< var validmind.developer >}} integrates with [DeepEval](https://docs.confident-ai.com/) for trace-based evaluation of tool usage and reasoning. + +### Available agentic scorers + +- **TaskCompletion** — Assesses whether the agent achieves the requested outcome +- **PlanQuality** — Measures if generated plans are logical, complete, and efficient +- **PlanAdherence** — Evaluates whether the agent follows its plan during execution +- **ToolCorrectness** — Validates that the agent invokes the expected tools +- **ArgumentCorrectness** — Checks if arguments passed to tools are correct + +### Scorer requirements + +| Scorer | Requires model | Parameters | +|--------|----------------|------------| +| TaskCompletion | Yes (`predict_fn`) | `input_column` | +| PlanQuality | Yes (`predict_fn`) | `input_column` | +| PlanAdherence | Yes (`predict_fn`) | `input_column` | +| ToolCorrectness | No | `input_column`, `expected_tools_called_column`, `actual_tools_called_column` | +| ArgumentCorrectness | No | `input_column`, `actual_tools_called_column` | + ## Python and dependency compatibility The {{< var validmind.developer >}} requires: diff --git a/site/guide/_sidebar.yaml b/site/guide/_sidebar.yaml index b5d7d6dcda..fd3b304124 100644 --- a/site/guide/_sidebar.yaml +++ b/site/guide/_sidebar.yaml @@ -42,9 +42,10 @@ website: contents: - guide/integrations/manage-secrets.qmd - guide/integrations/configure-connections.qmd - - guide/integrations/configure-analytics-exports.qmd - guide/integrations/implement-custom-integrations.qmd - guide/integrations/link-external-models.qmd + - guide/mcp/connect-ai-assistants-via-mcp.qmd + - guide/integrations/configure-analytics-exports.qmd - guide/integrations/integrations-examples.qmd - text: "---" - text: "Workflows" diff --git a/site/guide/integrations/managing-integrations.qmd b/site/guide/integrations/managing-integrations.qmd index bfa1708256..41bcce250e 100644 --- a/site/guide/integrations/managing-integrations.qmd +++ b/site/guide/integrations/managing-integrations.qmd @@ -33,6 +33,7 @@ graph TD E[Public REST API] F[Testing & documentation] G[Service integration] + H[AI assistants] A <--> B A <--> C @@ -40,6 +41,7 @@ graph TD A <--> E A <--> F A <--> G + A <--> H ``` @@ -194,6 +196,29 @@ Link to tickets in external systems and keep them synchronized. Attach tickets t :::: +--- + +### AI assistants + +Connect AI assistants to {{< var vm.product >}} using the Model Context Protocol (MCP). Query and manage your model inventory through natural language conversations.[^7] + +**Supported** + +:::: {.flex .flex-wrap .justify-around} + +::: {.w-33-ns} +- Claude Desktop +::: + +::: {.w-33-ns} +- Cursor IDE +::: + +::: {.w-33-ns} + +::: + +:::: ## Key concepts @@ -233,4 +258,5 @@ Link to tickets in external systems and keep them synchronized. Attach tickets t [^3]: [Introduction to workflows](/guide/workflows/introduction-to-workflows.qmd) [^4]: [Public REST API](/reference/validmind-rest-api-vm.qmd) [^5]: [Testing & documentation](/developer/validmind-library.qmd) -[^6]: [Configure analytics exports](/guide/integrations/configure-analytics-exports.qmd) \ No newline at end of file +[^6]: [Configure analytics exports](/guide/integrations/configure-analytics-exports.qmd) +[^7]: [Connect AI assistants](/guide/mcp/connect-ai-assistants-via-mcp.qmd) \ No newline at end of file diff --git a/site/guide/mcp/connect-ai-assistants-via-mcp.qmd b/site/guide/mcp/connect-ai-assistants-via-mcp.qmd new file mode 100644 index 0000000000..a2e66f0717 --- /dev/null +++ b/site/guide/mcp/connect-ai-assistants-via-mcp.qmd @@ -0,0 +1,198 @@ +--- +# Copyright © 2023-2026 ValidMind Inc. All rights reserved. +# Refer to the LICENSE file in the root of this repository for details. +# SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial +title: "Connect AI assistants via MCP" +date: last-modified +--- + +The {{< var vm.product >}} MCP (Model Context Protocol) server enables AI assistants to query and manage your model inventory through natural language, providing seamless access to models, artifacts, templates, and custom fields. + + +::: {.attn} + +## Prerequisites + +- [x] {{< var link.login >}} +- [x] You have your API key and secret.[^1] +- [x] You have a compatible AI assistant installed: + - Cursor IDE[^2] + - Claude Code[^3] + +::: + +## Key concepts + +{{< include /about/glossary/mcp/_mcp.qmd >}} + +{{< include /about/glossary/mcp/_mcp-server.qmd >}} + +{{< include /about/glossary/mcp/_mcp-tool.qmd >}} + +### How does {{< var vm.product >}} MCP work? + +```{mermaid} +graph LR + subgraph ai [AI assistants] + Claude[Claude Code] + Cursor[Cursor IDE] + end + + subgraph mcp [MCP layer] + MCPServer[ValidMind MCP Server] + end + + subgraph vm [ValidMind Platform] + Models[Models] + Artifacts[Artifacts] + Templates[Templates] + CustomFields[Custom fields] + end + + Claude --> MCPServer + Cursor --> MCPServer + MCPServer --> Models + MCPServer --> Artifacts + MCPServer --> Templates + MCPServer --> CustomFields +``` + +Your AI assistant sends natural language queries through the MCP protocol. The {{< var vm.product >}} MCP server translates these into API calls, authenticates using your API key, and returns data from the {{< var validmind.platform >}}. + +### What can I do with {{< var vm.product >}} MCP? + +The MCP server exposes tools for working with your model inventory: + +:::: {.flex .flex-wrap .justify-around} + +::: {.w-50-ns .pr3} + +**Model and artifact operations** + +- List and get models +- List and get artifacts +- Filter by risk level, deployment region, or ownership + +**Custom field operations** + +- List custom fields for models and artifacts +- Update custom field values + +::: + +::: {.w-50-ns .pl3} + +**Template operations** + +- List available templates +- Get template details +- Validate templates +- Duplicate and update templates + +::: + +:::: + +**Example queries you can ask:** + +- "Show me all models that are high risk" +- "Find all the models I am an owner for" +- "List my validation artifacts" +- "What templates are available for credit risk models?" + +## Configure your AI assistant + +::: {.panel-tabset} + +### Cursor IDE + +1. In Cursor, open **Settings** > **Cursor Settings** and navigate to the **MCP** section. + +2. Click **Add new global MCP server** to open your `~/.cursor/mcp.json` file. + +3. Add the {{< var vm.product >}} MCP server configuration: + + ```json + { + "mcpServers": { + "validmind": { + "url": "https://api.prod.validmind.ai/mcp", + "headers": { + "x-api-key": "YOUR_API_KEY", + "x-api-secret": "YOUR_API_SECRET" + } + } + } + } + ``` + +4. Replace `YOUR_API_KEY` and `YOUR_API_SECRET` with your ValidMind credentials.[^1] + +5. Save the file and reload Cursor with the **Command/Ctrl + Shift + P** > **Developer: Reload Window** shortcut. + +6. Return to **Cursor Settings > MCP** and verify that the ValidMind server appears. If it shows as disabled, click the toggle to enable it. + +7. Try asking Cursor questions like: + + - "What models do I own?" + - "Show me all tier 1 models" + - "Register a new model called Customer Churn" + +### Claude Code + +1. In Claude Code, add the {{< var vm.product >}} MCP server (this updates your `~/.claude.json` file): + + ```bash + claude mcp add --transport http validmind https://api.prod.validmind.ai/mcp \ + --header "x-api-key: YOUR_API_KEY" \ + --header "x-api-secret: YOUR_API_SECRET" + ``` + +2. Replace `YOUR_API_KEY` and `YOUR_API_SECRET` with your ValidMind credentials.[^1] + +3. Verify the connection: + + ```bash + claude mcp list + ``` + + You should see `validmind` with status `✓ Connected`. + +4. Start Claude Code and try asking questions like: + + - "What models do I own?" + - "Show me all tier 1 models" + - "Register a new model called Customer Churn" + +::: + +## Troubleshooting + +::: {.panel-tabset} + +### Connection refused or timeout errors + +- Verify your network can reach `api.prod.validmind.ai`. +- Check if your organization uses a firewall or proxy that blocks MCP connections. +- Ensure you are using the correct MCP URL for your environment. + +### Authentication errors (401 or 403) + +- Confirm your API key and secret are correct. +- Check that your API credentials have not expired. +- Verify your account has the necessary permissions to access the requested resources. + +### MCP server not appearing in Cursor + +- Ensure the configuration file is saved at `~/.cursor/mcp.json`. +- Validate the JSON syntax in your configuration file. +- Reload Cursor after making configuration changes. +- Check **Cursor Settings > MCP** to verify the server appears and is enabled. You may need to manually toggle the server on after adding it to the configuration. + +::: + + + +[^1]: [Get your API key and secret](/reference/validmind-rest-api-vm.qmd#get-your-api-key-and-secret) +[^2]: [Cursor](https://cursor.com) +[^3]: [Claude Code](https://docs.anthropic.com/en/docs/claude-code) diff --git a/site/guide/model-validation/manage-artifact-types.qmd b/site/guide/model-validation/manage-artifact-types.qmd index 0f3b7d35a6..8f3669d081 100644 --- a/site/guide/model-validation/manage-artifact-types.qmd +++ b/site/guide/model-validation/manage-artifact-types.qmd @@ -13,7 +13,7 @@ aliases: #### Artifact types -By default, the {{< var validmind.platform >}} provides three native artifact types: +By default, the {{< var validmind.platform >}} provides three artifact types: Validation Issue : Problems discovered during model validation that reflect errors, inconsistencies, or gaps in data, methodology, implementation, or documentation that need to be addressed before the model is considered reliable. @@ -75,7 +75,7 @@ Custom artifact types support the same features as default types, including stat ## Archive and delete artifact types ::: {.callout-important title="Deletion of artifact types is permanent."} -- Native (default) artifact types cannot be deleted, only archived.[^4] When archiving a native artifact type, existing artifacts of that type will be hidden and no new artifacts of that type can be created. +- Default artifact types cannot be deleted, only archived.[^4] When archiving a default artifact type, existing artifacts of that type will be hidden and no new artifacts of that type can be created. - When archiving a custom artifact type, existing artifacts of that type will remain viewable, but no new artifacts of that type can be created. ::: diff --git a/site/guide/templates/_template-schema-generated.qmd b/site/guide/templates/_template-schema-generated.qmd new file mode 100644 index 0000000000..8edc74c349 --- /dev/null +++ b/site/guide/templates/_template-schema-generated.qmd @@ -0,0 +1,1143 @@ + + +```{=html} + + +
+ + + + + + + + + + + +