Skip to content
Star -

YAML Schemas

Related Topics: Endpoints (endpoint types) | Type System (parameter types) | Configuration (runtime config) | Validation (check syntax)

This page provides an overview of all YAML configuration files in MXCP. Click through to detailed schema references for complete documentation.

SchemaFile LocationDescription
Tool Schematools/*.ymlTool endpoint definitions
Resource Schemaresources/*.ymlResource endpoint definitions
Prompt Schemaprompts/*.ymlPrompt endpoint definitions
Site Configurationmxcp-site.ymlProject configuration
User Configuration~/.mxcp/config.ymlUser-level settings and secrets

Endpoints are the core building blocks of MXCP. Each type has its own schema:

Tools - Callable functions that AI agents can invoke:

mxcp: 1
tool:
name: get_user
description: Retrieve user by ID
parameters:
- name: user_id
type: integer
source:
file: ../sql/get_user.sql

Resources - Data accessible via URI patterns:

mxcp: 1
resource:
uri: "user://{user_id}/profile"
name: User Profile
source:
file: ../sql/user_profile.sql

Prompts - Templated conversation starters:

mxcp: 1
prompt:
name: analyze_data
description: Analyze data with customizable focus
parameters:
- name: topic
type: string
messages:
- role: system
type: text
prompt: "You are an expert analyst."
- role: user
type: text
prompt: "Analyze: {{ topic }}"

Site Configuration (mxcp-site.yml) - Project-level settings:

mxcp: 1
project: my-project
profile: default
extensions:
- httpfs
- parquet
profiles:
default:
duckdb:
path: ./data/app.duckdb
audit:
enabled: true

User Configuration (~/.mxcp/config.yml) - User-level secrets and auth:

mxcp: 1
projects:
my-project:
profiles:
default:
secrets:
- name: api_key
type: api
parameters:
api_key: "${MY_API_KEY}"
auth:
provider: github
github:
client_id: "${GITHUB_CLIENT_ID}"
client_secret: "${GITHUB_CLIENT_SECRET}"
callback_path: /auth/github/callback
auth_url: https://github.com/login/oauth/authorize
token_url: https://github.com/login/oauth/access_token

All MXCP YAML files start with the schema version:

mxcp: 1 # Required, always 1

User configuration supports dynamic value interpolation:

SyntaxSourceExample
${VAR}Environment variable${API_KEY}
vault://path#keyHashiCorp Vaultvault://secret/db#password
op://vault/item/field1Passwordop://Private/api/token
file://pathLocal filefile:///etc/ssl/cert.pem

See User Configuration for complete interpolation documentation.

Parameters are shared across tools, resources, and prompts:

parameters:
- name: user_id # Required: identifier
type: integer # Required: data type
description: User ID # Recommended: description
default: null # Optional: makes parameter optional
minimum: 1 # Optional: validation constraint

See Type System for complete type documentation.

Tools and resources require a source definition:

# Inline code
source:
code: |
SELECT * FROM users WHERE id = $user_id
# External file
source:
file: ../sql/get_user.sql

All endpoint types support inline tests:

tests:
- name: test_basic
arguments:
- key: user_id
value: 1
result_contains:
name: "Alice"

See Testing for complete documentation.

Tools and resources support access control policies:

policies:
input:
- condition: "user.role == 'guest'"
action: deny
reason: "Guests cannot access this endpoint"
output:
- condition: "user.role != 'admin'"
action: filter_fields
fields: ["salary", "ssn"]

See Policies for complete documentation.

Validate all YAML files:

Terminal window
# Validate entire project
mxcp validate
# Validate specific file
mxcp validate tools/my-tool.yml
# Verbose output
mxcp validate --debug
TypeRequired Fields
Toolmxcp, tool.name, tool.source
Resourcemxcp, resource.uri, resource.source
Promptmxcp, prompt.name, prompt.messages
Site Configmxcp, project, profile
User Configmxcp

All endpoint types (tools, resources, prompts) support these optional fields:

FieldDefaultDescription
descriptionnullHuman-readable description
enabledtrueSet to false to disable the endpoint
tags[]List of tags for categorization
tests[]Inline test definitions
policiesnullAccess control policies

Tools and resources also support:

FieldDefaultDescription
language"sql"Source language: "sql" or "python"
TypeDescriptionExample
stringText value"hello"
integerWhole number42
numberDecimal number3.14
booleanTrue/falsetrue
arrayList of items[1, 2, 3]
objectKey-value pairs{key: value}
ActionTypeDescription
denyinputBlock the request
filter_fieldsoutputRemove specified fields
mask_fieldsoutputMask field values
filter_sensitive_fieldsoutputRemove sensitive fields