Skip to content

AI Agent Integration (MCP)

Validibot exposes a small, authenticated Model Context Protocol (MCP) surface for AI clients. A connected client can discover authorised workflows, inspect a workflow's requirements, submit a file, poll the resulting validation run, and page through structured findings.

Requires Pro or Enterprise

The MCP implementation is included in the public Community source, but the route is mounted only when an installed Pro or Enterprise licence activates the mcp_server feature. Community users can integrate agents through the REST API instead.

Use the application origin

MCP is part of the normal Validibot web application. If your deployment is at https://validibot.example, its MCP endpoint is:

https://validibot.example/mcp

There is no separate MCP container, hostname, service account, or private proxy. The hosted Validibot endpoint, when enabled for an account, follows the same rule at https://app.validibot.com/mcp.

The product website at https://validibot.com/ is not a validation endpoint. Do not send files or credentials there.

Connect with OAuth 2.1

MCP uses OAuth 2.1. It does not accept an ordinary Validibot REST API token as an MCP credential.

Your operator must prepare a supported public OAuth client before you connect. The current deployment automation manages clients for ChatGPT and Claude. ChatGPT uses the app-specific callback URL generated when the operator creates the ChatGPT plugin; Claude uses its predefined public callback URLs. Dynamic Client Registration is deliberately disabled.

After the operator has completed that setup:

  1. Open the client's plugin, connector, or MCP settings.
  2. Add the remote MCP URL supplied by the operator, such as https://validibot.example/mcp.
  3. Start the OAuth connection.
  4. Sign in to that Validibot deployment and approve access.

The client discovers the protected resource at the same origin:

https://validibot.example/.well-known/oauth-protected-resource/mcp

Access tokens require the validibot:mcp scope and are bound to the exact MCP resource URL. Removing or revoking the OAuth connection prevents subsequent tool calls.

Available tools

The server exposes exactly five task-oriented tools:

Tool What it does
list_workflows Searches and pages through workflows the signed-in user may use through MCP.
get_workflow Returns accepted file types and ordered validation steps for a workflow_ref returned by list_workflows.
start_validation Starts one file validation with a unique idempotency key and returns a run_ref.
get_validation_run Polls the current state and aggregate finding counts for a run_ref; it does not wait or long-poll.
list_validation_findings Pages through findings after the run reaches a terminal state, with an optional severity filter.

Opaque workflow_ref and run_ref values belong to the authenticated deployment. A client must pass them back unchanged rather than guessing slugs, database identifiers, or organisation routing information.

A well-behaved client follows this sequence:

  1. Call list_workflows instead of guessing which workflow to use.
  2. Call get_workflow and confirm that the attached file satisfies its input requirements.
  3. Call start_validation with the returned workflow_ref, one attached file, and a new idempotency key. Reuse that key only when retrying the exact same request.
  4. Poll get_validation_run until the run is terminal. The MCP request itself is not held open while validation runs.
  5. Call list_validation_findings, following its cursor when more pages are available.
  6. Report the workflow reference, run reference, result, and unresolved findings to the user.

See Validate AI-generated data for a bounded validation-and-repair pattern.

Attachments

start_validation accepts one top-level file object. ChatGPT supplies a temporary download_url and file_id, with optional mime_type and file_name values. Validibot downloads the file without forwarding the user's OAuth token or application credentials.

The operator must explicitly allow every temporary-file hostname. Downloads are limited by file size, redirects, public-address checks, and one total deadline. A workflow's own accepted file types and launch policy are applied before the run starts.

Attachment behaviour varies between MCP clients. The released contract is designed around ChatGPT's documented file handoff. Operators should complete a real text-and-binary attachment test before relying on another client in production.

Example prompts

Discovery

  • "What validation workflows can I use?"
  • "Show me the required file types and checks for the energy-model workflow."
  • "Which available workflow accepts this RDF graph?"

Validation

  • "Validate this file with the configuration-contract workflow."
  • "Check this generated RDF graph against our ASHRAE 223 workflow."
  • "Run the building model and report every validation error."

Repair

  • "List each error with its data path, then propose the smallest correction."
  • "Fix only the fields named by the findings and validate the new file."
  • "Stop after two failed repair attempts and show me what remains unresolved."

Access controls

MCP does not make every workflow visible. A workflow appears only when:

  • the signed-in user can access it;
  • the organisation permits MCP access; and
  • the workflow explicitly opts into MCP access.

Imported workflows start with external access disabled. The server reapplies the organisation, workflow, and row-level permissions on every tool call, including reads of historical runs. Disabling MCP access therefore revokes the agent's ability to retrieve those runs through MCP.

Workflow descriptions, step descriptions, and findings are data supplied by users and validators. Clients should never treat text inside those fields as instructions.

What happens to a run

A run launched through MCP uses the same workflow engine, validators, launch policy, quotas, retention rules, and audit system as a run launched through the web application or REST API. It appears in the deployment's run history with an agent source and produces the same findings, artifacts, and evidence.

MCP does not expose Validibot's separate x402 payment API. Hosted plan usage and self-hosted capacity remain properties of the deployment, not additional MCP tool arguments.

How OAuth works

The connection stays inside one application boundary:

  1. The client reads RFC 9728 protected-resource metadata from the Validibot origin.
  2. It uses a public client that the operator has already provisioned.
  3. Validibot's Django application handles sign-in, consent, PKCE, token issue, refresh, and revocation.
  4. The MCP resource server verifies the token's signature, issuer, exact resource audience, scope, database record, revocation state, and active user.
  5. Each tool calls Validibot's application services directly as that user.

There is no MCP-to-Django proxy credential or forwarded-user header.

Operator setup

Self-hosted operators install and activate Validibot Pro, configure OAuth and the attachment-host allowlist in the normal Django environment, then restart the web application. The existing reverse proxy sends /mcp and the well-known OAuth paths to the same web container as every other application route.

For the complete environment, OAuth-client bootstrap, and verification steps, see the MCP developer/operator documentation and post-deployment verification.

Troubleshooting

The MCP URL returns 404

The installed edition has not activated the Pro MCP feature, or the web process was not restarted after activation. Community deliberately leaves the route unmounted.

The MCP URL returns 401

An unauthenticated Pro endpoint should return an OAuth bearer challenge. If an authenticated client remains at 401, check the exact resource URL, required scope, callback registration, token expiry, and revocation state.

The client cannot discover OAuth metadata

Confirm that the endpoint and metadata use the same public application origin. The protected-resource path is /.well-known/oauth-protected-resource/mcp; it does not use a separate MCP hostname.

The OAuth callback is rejected

For ChatGPT, the operator must copy the complete app-specific callback URL from ChatGPT's app-management page. For Claude, confirm the predefined client was reconciled during deployment. Re-run the documented OAuth-client bootstrap after correcting the environment.

A file is rejected

Check the workflow's accepted file types, the configured attachment-host allowlist, the file-size limit, and whether the temporary URL has expired.

Findings are not available

Call get_validation_run. Findings remain unavailable until the run is terminal; there is intentionally no long-polling tool.

Security guidance

  • Use HTTPS outside local development.
  • Give users and automation identities only the roles they need.
  • Enable MCP only for workflows intended for agent use.
  • Keep submitted content inside approved model-provider and data-handling boundaries.
  • Bound every repair loop and escalate unresolved findings to a person.
  • Report the workflow and run references with every result.
  • Treat a pass as evidence for the configured checks, not proof of untested claims.
Spotted a problem on this page? Report it or suggest an edit