This document defines how XcodeBuildMCP versions and publishes the JSON Schemas for structured output fixtures and runtime payloads.
- Keep schema contracts stable and predictable for external consumers.
- Make published schema URLs real, durable, and safe to reference.
- Let the website serve schemas directly from
https://xcodebuildmcp.com/schemas/.... - Avoid ambiguous compatibility rules.
Each schema has two stable identifiers:
- The payload metadata:
{ "schema": "xcodebuildmcp.output.build-result", "schemaVersion": "1" } - The published schema file path:
https://xcodebuildmcp.com/schemas/structured-output/xcodebuildmcp.output.build-result/1.schema.json
The in-payload schema and schemaVersion values must always match the published
schema document that validates that payload.
schemaVersion uses integer strings only:
"1""2""3"
Do not use semver-style schema versions such as "1.1" or "2.0".
The version number is a contract version, not a release number.
Once a schema version is published, do not make breaking changes to that file.
Breaking changes include:
- removing a property
- making an optional property required
- narrowing allowed values or enums
- changing object shape incompatibly
- changing field meaning in a way that could break clients
If any of those changes are needed, publish a new version instead:
schemas/structured-output/xcodebuildmcp.output.build-result/2.schema.json
and emit:
"schemaVersion": "2"Previously published schema files must continue to be hosted.
Do not remove old schema versions from the website once consumers may rely on them.
Additive, optional fields can be compatible, but use caution.
If a new field is truly optional and old clients can safely ignore it, it may remain within the same schema version. If there is any doubt about compatibility or meaning, bump the schema version.
Bias toward a new version when the contract meaning changes.
Source schemas in this repository live under:
schemas/structured-output/
Published schemas on the website live under:
public/schemas/structured-output/
A source file such as:
schemas/structured-output/xcodebuildmcp.output.build-result/1.schema.json
is published to:
public/schemas/structured-output/xcodebuildmcp.output.build-result/1.schema.json
which is then served at:
https://xcodebuildmcp.com/schemas/structured-output/xcodebuildmcp.output.build-result/1.schema.json
Schema publishing is handled from this repository by a GitHub Actions workflow.
Trigger conditions:
- push to
mainwhen files underschemas/**change - manual
workflow_dispatch
Publishing steps:
- Check out this repository.
- Clone
getsentry/xcodebuildmcp.comover SSH. - Sync
schemas/structured-output/from this repository intopublic/schemas/structured-output/in the website repository. - Commit the website change if the published files changed.
- Push to the website repository
mainbranch. - Let Vercel deploy the website normally.
This keeps schema authoring in the main project repository while using the website repository as the deployment surface.
The publishing workflow requires this repository secret:
XCODEBUILDMCP_WEBSITE_DEPLOY_KEY
This secret must contain an SSH private key with write access to:
git@github.com:getsentry/xcodebuildmcp.com.git
The corresponding public key should be installed as a deploy key on the website repository with write access.
- Generate a dedicated SSH key pair for schema publishing.
ssh-keygen -t ed25519 -C "schema-publisher" -f ./xcodebuildmcp-website-deploy-key - In
getsentry/xcodebuildmcp.com, add the public key as a deploy key with write access.- GitHub, Settings, Deploy keys
- Add
xcodebuildmcp-website-deploy-key.pub - Enable write access
- In
getsentry/XcodeBuildMCP, add the private key as an actions secret named:XCODEBUILDMCP_WEBSITE_DEPLOY_KEY - Trigger the
Publish Schemasworkflow manually once to verify SSH access and sync. - Confirm that the website repository receives the commit and Vercel deploys it.
- Confirm a final URL resolves, for example:
https://xcodebuildmcp.com/schemas/structured-output/xcodebuildmcp.output.build-result/1.schema.json
Use a dedicated deploy key for this workflow only. Do not reuse a personal SSH key.
Consumers should branch on both schema and schemaVersion.
Example:
switch (`${payload.schema}@${payload.schemaVersion}`) {
case "xcodebuildmcp.output.build-result@1":
// validate using v1 schema
break
case "xcodebuildmcp.output.build-result@2":
// validate using v2 schema
break
default:
throw new Error("Unsupported schema version")
}These JSON Schemas describe payload shapes. They are not an OpenAPI description by themselves. If an HTTP API is introduced later, OpenAPI should reference the schema files as component schemas instead of trying to infer endpoints from them.
When updating schemas:
- Decide whether the change is compatible or breaking.
- If breaking, add a new versioned schema file instead of changing the old one.
- Update fixture payloads to emit the correct
schemaVersion. - Run:
npm run test:schema-fixtures
- Merge to
main. - Confirm the publish workflow updated the website repo.
- Confirm the final schema URL resolves on the website.