# Matchmaking criteria editor

Use live MCP discovery to check which tools your connection can call.

The Matchmaking criteria editor changes questions used to match an existing Project with funding recipients. This edits the criteria form, rather than completing its answers. To prepare criteria questions for future Projects, use [Application definitions](https://docs.staging.levr.ai/mcp/resources/application_definitions.md).

## Request access

This MCP toolset requires a specific grant and is not assigned by default. Use **Request an integration** in the documentation header to request Matchmaking criteria editor access, or contact Support. Documentation describes the tools; your connection's live discovery determines which you can use. A toolset grant does not grant access to additional applications or Portals.

## Edit an existing form

1. Use `providers.list` to choose a Portal and `projects.list` to find the Project. Copy the Project’s returned `workspace_slug` together with `provider_slug` for every `matchmaking_application_editor.*` call. Use `projects.get_matchmaking` with that workspace to check its current criteria and the Project’s returned links first. Both selectors must identify the same Portal and matching workspace; do not use an application or storage ID.
2. Read `matchmaking_application_editor.get_config` and `get_config_schema`. Include all existing and proposed `block_kinds` when using its schema to validate a complete document. Retain the current draft and live revisions, and preserve the complete `config_version`, `config_type`, and `application_runtime_structure` document. Reads do not create drafts. Use `view: "live"` to compare published questions with an existing draft; `config_source` identifies the returned document while both state tokens remain current. Use `open_draft` to start or reuse the editable draft, then read it again.
3. Change only the requested structure. Preserve retained question identities and answer shapes. Call `validate_config` with the complete candidate. Review the returned answer impacts as well as structural findings.
4. Explain the exact candidate's effects and save the validated draft directly with `matchmaking_application_editor.replace`. Pass the unchanged candidate and `review_digest`; copy `live_revision` to `expected_live_revision` and `draft_revision` to `expected_draft_revision`. Supply a unique `client_request_id`; identical retries reuse that key. Read the saved draft to confirm it. Draft edits do not require human approval or `user_confirmed`, and do not publish the form or delete stored answers.

For an optional file question, change only `request.is_required` to false. Keep its two ordered `request.fields`: `file` / `FileValue` / `is_required: true`, followed by `file_name` / `CharValue` / `is_required: false`. These fixed fields describe an uploaded response; they do not make the question mandatory. Start from the block catalog's `default_config`.

`allow_destructive_changes` defaults to false for publication. Draft removal leaves stored answers intact. For a deliberately reviewed destructive publication, set the flag consistently in `publish_review` and `publish`. Publishing removal of an answered scalar question requires an explicit reviewed decision: it permanently deletes its question and stored answer records, and uploaded files become inaccessible. Restoring the question structure does not restore deleted answers. Unsupported field identity or type conversions, list scope changes, and loss of existing repeated data remain blocked. Do not invent replacement identities to bypass protection.

## Work with JSON files

For a large form, use `get_config_download` (optionally `view: "live"`) and GET the returned URL with `transfer_token` as a Bearer credential outside the model. Keep the returned state tokens. Open the draft before reviewing edits. Edit the complete UTF-8 JSON envelope locally, preserving identities, then call `prepare_config_validation` with a JSON filename, exact `content_sha256`, `size_bytes`, and both expected revisions. POST the file as multipart field `config` within five minutes. Files must be at most 1 MiB; validation does not save.

Read the HTTP response's findings and answer impact. If valid, explain the exact change and call `prepare_config_replacement` directly with its `validation_token` and `client_request_id`. POST the same reviewed bytes as multipart `config` using the returned capability. The response is the saved draft receipt. Changed bytes or state require fresh validation. Identical uncertain retries reuse the same capability, bytes, and request key. Keep credentials private; live access is checked again at redemption.

## Change template PDFs

The `attachments` inventory in `get_config` identifies template PDFs by `stable_block_id`. These templates are separate from submitted answer files. Only file questions support template changes; signature templates are unsupported. Use `get_attachment_download` with the selected block and expected revisions to read a template. Choose `view: "live"` when comparing the published template to a staged replacement.

For a replacement, call `review_attachment_change` with `action: "set"`, the PDF filename, exact SHA-256 digest, and size. PDFs must be nonempty and at most 25 MiB. Explain the returned effects and call `prepare_attachment_upload` directly, passing the exact reviewed metadata, digest, revisions, and request key. POST the reviewed bytes as multipart `attachment` with the returned Bearer credential within five minutes. Preparation alone does not save; the upload response confirms the staged template.

To remove a template, review `action: "remove"` without replacement file metadata, then call `remove_attachment` directly with the review digest, expected revisions, and request key. Template changes affect the draft; publishing and notifications require a separate review and confirmation. Submitted answer files remain unchanged by these attachment actions.

## Review publication and notifications

The selected Portal controls its Project’s criteria. Read `projects.get_matchmaking_application_contract` and `projects.get_matchmaking_application_answers` to inspect existing answers separately.

Use `publish_review` to review the exact live criteria changes and existing-answer impacts. Publishing criteria does not send participant notifications: `recipient_ids` must be empty and `message` must be empty. Publication is still a dangerous action that requires separate consent. Saved drafts and published question changes can mark previous matching results out of date. The editor does not rerun matching, create Deals, or contact participants; use the corresponding Project tools separately when requested. Publishing criteria does not calculate matches.

Ask for human approval of those reviewed effects. Call `publish` with `user_confirmed: true` and the exact reviewed digest, preconditions, recipients, and message. If any reviewed state changes, review again and obtain fresh confirmation. Check the publication result and read the live form. If the result includes notification attempts, report their outcomes separately; a selected recipient list does not establish delivery. Do not publish again solely to retry a failed notification.

## Recover unpublished changes

Read `list_history`, then use `review_undo` followed by `undo` for the reviewed draft change, or `review_reset` followed by `reset` to discard unpublished changes. Explain what will be lost and execute directly with the exact review digest, expected revisions, and request key. Undo and reset do not require human approval. Draft recovery does not reverse live publication or recall notifications. Publication changes the shared live form. Any other Portal drafts keep their template overrides and history, but become stale after a live form publication. Preserve the staged config with a read or download, explicitly review and reset the stale draft, then reapply and validate the intended changes against the current live form. Further draft edits do not rebase it; obtain fresh approval before publication.

Live review tokens also change after answer edits and editor events. If a revision is stale, read the application again, reconcile changes, and obtain a fresh review before retrying a draft action. Publication requires new human approval of the current review. Form edits can advance answer revisions without changing stored values; treat revisions as concurrency tokens rather than edit counts. An identical retry returns the original receipt, so its change indicator describes the original execution rather than a new update. After a timeout or uncertain write outcome, read the authoritative state before another write; do not assume the operation failed or choose a new request identity blindly.

## Available tools

- [Read application form editing contract](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.get_config_schema.md): `matchmaking_application_editor.get_config_schema`

- [Review application template attachment change](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.review_attachment_change.md): `matchmaking_application_editor.review_attachment_change`

- [Download application form config](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.get_config_download.md): `matchmaking_application_editor.get_config_download`

- [Open application form draft](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.open_draft.md): `matchmaking_application_editor.open_draft`

- [Prepare reviewed application template upload](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.prepare_attachment_upload.md): `matchmaking_application_editor.prepare_attachment_upload`

- [Read application form draft history](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.list_history.md): `matchmaking_application_editor.list_history`

- [Read application template PDF](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.get_attachment_download.md): `matchmaking_application_editor.get_attachment_download`

- [Read existing application form](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.get_config.md): `matchmaking_application_editor.get_config`

- [Remove reviewed application template PDF](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.remove_attachment.md): `matchmaking_application_editor.remove_attachment`

- [Review application form JSON file](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.prepare_config_validation.md): `matchmaking_application_editor.prepare_config_validation`

- [Review proposed application form changes](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.validate_config.md): `matchmaking_application_editor.validate_config`

- [Save reviewed application form draft](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.replace.md): `matchmaking_application_editor.replace`

- [Save reviewed application form file](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.prepare_config_replacement.md): `matchmaking_application_editor.prepare_config_replacement`

- [Review application form publication](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.publish_review.md): `matchmaking_application_editor.publish_review`

- [Publish application form changes](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.publish.md): `matchmaking_application_editor.publish`

- [Review application form draft reset](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.review_reset.md): `matchmaking_application_editor.review_reset`

- [Review application form draft undo](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.review_undo.md): `matchmaking_application_editor.review_undo`

- [Reset application form draft](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.reset.md): `matchmaking_application_editor.reset`

- [Undo application form draft](https://docs.staging.levr.ai/mcp/tools/matchmaking_application_editor.undo.md): `matchmaking_application_editor.undo`
