Skip to content

MCP tools catalogue

Expecto exposes its full functionality as an MCP server, so an AI assistant (Claude Desktop, Claude Code, Cursor, or an in-house client) can drive the platform directly: onboard suppliers, build contracts and transformers, run sessions, and inspect results. This page lists every available tool, grouped by domain.

For connection and authentication, see the Developer Quickstart → "Do the same thing through MCP". In short: point your client at <EXPECTO_BASE_URL>/mcp/ and authenticate with the same X-API-Key header used for the REST API.

Reading the catalogue

Descriptions below are one-liners. Your MCP client exposes each tool's full input schema (parameter names, types, which are required) via introspection — most clients show this when you inspect or call a tool. The parameters in parentheses are the inputs each tool accepts; required ones depend on the tool. The equivalent REST surface is documented interactively at <EXPECTO_BASE_URL>/api/docs.

All tools are scoped to the organization behind your API key. Tools that mutate state (create_*, update_*, delete_*, run_*, approve_*, …) require the corresponding permission on the key.

Identity & health

Tool Purpose
get_identity Return the principal, organization, and effective permissions behind the API key.
health Check MCP server status and version.

Projects

Tool Purpose
list_projects List projects in the organization (optional search).
get_project Full project detail: entities, catalogs, data contracts, receivers, and context_schema (required session-context scalars/tables to set before running a pipeline).
get_project_instructions Read a project's operational instructions (markdown).
create_project Create a project (delivery standard); optionally set the export output_format.
update_project Update project settings (approval mode, session-creation mode, blocking severity, export output_format).
set_project_context_schema Replace the project's session-context schema (scalars + tables, each with required / filled_by). Read the current one via get_project, merge, and pass the whole result; mark integration-filled fields filled_by: "integration".
update_project_instructions Replace a project's operational instructions.
delete_project Delete a project and all its scoped resources.
attach_entity_to_project Attach an existing entity to a project under a semantic role.
detach_entity_from_project Detach an entity from a project by its role name.
attach_catalog_to_project Attach an org-level catalog to a project.
detach_catalog_from_project Detach an org-level catalog from a project.

Entities

Target schemas plus row-level validation rules.

Tool Purpose
list_entities List entities (target schemas) in the organization.
get_entity Entity detail including schema and validation rules.
create_entity Create a new entity (org-level or project-scoped).
update_entity Update an entity's name or description.
delete_entity Delete an entity and its schema/rules.
set_entity_schema Create or replace the JSON Schema for an entity.
get_entity_schema Get the JSON Schema definition for an entity.
create_entity_rule Create a validation rule on an entity. message accepts a string or a multilingual object ({"en": …, "de": …, "ru": …}, "en" required).
update_entity_rule Update an existing validation rule. message accepts a string or a multilingual object.
delete_entity_rule Delete a validation rule from an entity.

Data contracts

Supplier format agreements and their immutable revisions.

Tool Purpose
list_data_contracts List data contracts (supplier format agreements).
get_data_contract Contract detail including revisions and sources.
create_data_contract Create a new data contract (optionally with a caller-owned external_id, unique per organization).
add_source_to_contract Add a source (role + type + parsing config) to a revision.
create_revision Create a new draft revision on an existing contract.
activate_revision Activate a draft revision (with a valid_from period).
update_data_contract Update a contract's name, description or external_id (pass an empty string to clear it; the value is usable in v1 session creation as data_contract: {"external_id": …}).
delete_data_contract Delete a contract and all its revisions/sources.

Transformers

Field mappings from a contract's sources to an entity's target schema.

Tool Purpose
list_transformers List transformers for a data contract.
get_transformer A transformer with its full field mappings.
create_transformer Create a transformer (mappings from contract to entity; optional per-role row filters).
update_transformer_mappings Replace a transformer's field mappings, and optionally its row filters.
validate_transformer_expressions Validate all mapping expressions (and row filters) in a transformer.
preview_transformer_sql Preview the compiled DuckDB SQL for a transformer.
delete_transformer Delete a transformer from a data contract.

Row filters (row_filters_json). create_transformer and update_transformer_mappings accept an optional row_filters_json map of {role: predicate}. Each predicate is a boolean DuckDB SQL expression; input rows where it evaluates false are dropped before mapping, so they never reach the entity data, validation, reconciliation, or the export package. Use it to exclude explicit-not-mapped accounts from the SAP output, e.g. {"postings": "\"Konto\" NOT IN (SELECT \"code\" FROM cat_kontenplan__provider WHERE \"mapping_type\" = 'ignore')"}. On update, omitting row_filters_json leaves existing filters unchanged; passing {} clears them. Dropped-row counts are reported in the session's transform summary.

Catalogs

Reference data sets (charts of accounts, code tables, exclusion lists). A catalog is scoped to the organization, a project, or — via data_provider_id — a single supplier.

Tool Purpose
list_catalogs List catalogs. Filter by project_id, or by data_provider_id for provider-scoped catalogs.
get_catalog_data Read a catalog's columns and rows (paginated).
create_catalog Create a catalog — org-level, project-scoped (project_id), or provider-scoped (data_provider_id).
update_catalog Update a catalog's name or description.
delete_catalog Delete a catalog and its data.
import_catalog_data Import CSV/Excel into a catalog (replaces existing data).
add_catalog_column Append a column (with a default) without re-importing — existing rows are preserved.
edit_catalog_cell Set a single cell by row index, e.g. flag one account's mapping_type = 'ignore'.

Data providers

Suppliers that submit data. A provider gets access to a project, can have member user accounts, and can own provider-scoped catalogs.

Tool Purpose
list_data_providers List suppliers (data providers). Use the returned id as data_provider_id for provider-scoped catalogs.
get_data_provider A single provider's details by id.
create_data_provider Create a provider (name, optional external_id, language en/de/ru).
update_data_provider Rename, change external_id, set message language (en/de/ru), or set is_active.
deactivate_data_provider Deactivate a provider (soft delete — is_active = false).
list_provider_members List the user accounts attached to a provider.
add_provider_member Attach a user by user_id or email with a role (contributor / manager); an unknown email is auto-provisioned into the org.
remove_provider_member Detach a member (by membership id).
list_provider_access List a provider's project access grants.
grant_provider_access Grant access to a project_id (optionally scoped to a data_contract_id).
revoke_provider_access Revoke an access grant (by grant id).

Integrations, context sources & outbound bindings

Connections to external systems and the per-project configuration around them. A connection's adapter declares capabilities: context (auto-fill session context — BuiltAPI, PostgreSQL) and/or outbound (write session events to the external platform — Salesforce). Context sources let the caller send only query parameters (e.g. period, fund number) while Expecto fetches the rest at session creation; outbound bindings push check results out when a run completes.

Tool Purpose
list_connection_types Catalog of supported connection types: each entry carries the type's capabilities (context / outbound) and the form metadata to collect a connection of that type — base_url shape, credential shape (single token or structured fields), and config fields with required flags. Call it before create_integration_connection.
create_integration_connection Create an org-scoped connection (name, type = builtapi, postgres, or salesforce, base_url — an API URL, a postgresql:// DSN, or a Salesforce My Domain instance URL, config_json — workspace_id for BuiltAPI, api_version for Salesforce, write-only credentials — a token string, or {client_id, client_secret} for OAuth types).
list_integration_connections List connections; responses expose capabilities (context / outbound) and has_credentials, never the secret.
update_integration_connection Rename, change config, rotate (credentials) or clear (clear_credentials) the token, toggle is_active.
test_integration_connection Probe a saved connection (connection_id, stored credentials) or an unsaved payload with a cheap authenticated call; returns {ok, error_kind, message}.
delete_integration_connection Delete a connection; rejected while any project's context sources or outbound bindings reference it.
set_project_context_sources Declare what to fetch: sources with a BuiltAPI query — records_search (filter + projection) or aggregation (Mongo pipeline with $lookup) — or a PostgreSQL sql query (single read-only SELECT); {{ context.* }} / {{ session.* }} placeholders — and the context table/scalar each one produces. BuiltAPI queries are paginated automatically and fetch all rows; the optional take is a total row limit (1–100 000), not a page size. Without take, a result exceeding 100 000 rows fails with an explicit error instead of being truncated silently.
get_project_context_sources Read the project's context-sources configuration.
test_context_source Dry-run one source's query with sample placeholder values; returns a preview (row count, columns, first rows) or a semantic error, without creating a session.
fetch_session_context Re-run the automatic context fetch for a session (allowed until it is confirmed); outcome lands in context_fetch_report.
set_project_outbound_bindings Declare which session events are written where: bindings with an outbound-capable connection, events (e.g. session.checked, session.failed) and an adapter-specific mapping — for Salesforce: sobject + fields with {{ … }} templates over envelope fields (session_id, run_id, health, …) and {{ context.* }}.
get_project_outbound_bindings Read the project's outbound bindings.

Mark integration-filled fields with filled_by: "integration" in the project context schema so callers are not asked to provide them; a pending or failed fetch blocks the pipeline before parse with per-source, human-readable reasons.

Per-platform guides (Salesforce-side setup, query kinds, limits, error semantics) are in the Integrations section.

Webhooks

Outbound webhooks for session lifecycle events (Standard Webhooks-compliant). Endpoints are org- or project-scoped; signing secrets are shown once and Fernet-encrypted at rest.

Tool Purpose
list_webhook_endpoints List the organization's webhook endpoints.
get_webhook_endpoint A single endpoint's details by id.
create_webhook_endpoint Create an endpoint (url, event_types, optional project_id, optional auth header). Secret returned only with reveal_secret=true.
update_webhook_endpoint Update URL, event types, active state, or auth header.
delete_webhook_endpoint Delete an endpoint and its deliveries.
rotate_webhook_secret Rotate the signing secret (shown once with reveal_secret=true).
send_webhook_ping Send a synthetic webhook.ping to verify connectivity.
list_webhook_deliveries List delivery attempts — for one endpoint, one connection (connection_id), or the whole organization; outbound-binding deliveries carry connection_id / project_id / binding_name, and a successful one stores the upstream record reference.
get_webhook_delivery A single delivery's details, including the last response excerpt.
replay_webhook_delivery Re-send a past delivery — endpoint deliveries with the original signed body, outbound-binding deliveries through the adapter.

Business rules

Cross-entity reconciliation and project-level checks (DuckDB SQL / expression).

Tool Purpose
list_business_rules List business rules for a project.
get_business_rule A specific business rule with full details.
create_business_rule Create a business rule (optionally gated by applicable_when_sources). message accepts a string or a multilingual object ({"en": …, "de": …, "ru": …}, "en" required).
update_business_rule Update a business rule. message accepts a string or a multilingual object.
delete_business_rule Delete a business rule from a project.

Sessions

One delivery act: files → parse → transform → validate → check → confirm → approve → export.

Tool Purpose
list_sessions List sessions (filter by project, status, health, search).
get_session Session detail: files (with per-file parse_validation_summary), transformers, pipeline status, plus context_validation_errors and file_validation_errors.
create_session Create a delivery session for a contract + period (+ provider).
upload_session_file Upload a file against a source role.
run_session_pipeline Run the full pipeline (parse → transform → validate → check); returns job_id (polling handle) and run_id — the stable ID of the minted run (one per execution, see GET /sessions/{id}/runs). A failed pre-flight gate returns error + details naming the missing context fields or source files. A blocked session can be re-run (each call mints a new run; health stays blocked until the re-run passes). If the automatic context fetch is still pending, parse runs right away (the technical result does not wait for the context) and the run then waits before transform — get_job_status shows run_status = waiting, waiting_for = context_fetch — and continues by itself when the fetch completes (same run_id / job_id); a failed fetch or a wait past the timeout closes it as errors.
set_session_context Set session context values (scalars and tables).
get_session_parse_issues Parse validation issues for one uploaded file: summary counts, groups by (check, column) with counts, format hints and sample rows, plus a paginated raw issues list. The only way to read the full parse errors — get_session carries just the summary.
get_session_violations Validation violations for a session transformer.
get_session_check_violations Business-rule check violations for a specific rule.
confirm_session Confirm a checked session (reviewed by the submitter).
approve_session Approve a confirmed session (final sign-off before export).
reject_session Reject a confirmed session and send it back for corrections.
export_session Export a session's output package as a trackable job; the project must have an output format configured.
add_session_comment Add a comment to a session.
list_session_comments List a session's comments in chronological order.

Jobs

Asynchronous work (pipeline runs, exports, imports) is tracked as jobs.

Tool Purpose
get_job_status Status of an async job (pipeline run, export, import). For a pipeline job also run_id, run_status and waiting_for (context_fetch while the run waits for the context fetch).
list_jobs Recent async jobs for the organization.