Skip to main content

MCP catalog

Generated from apiome-rest/openapi.yaml (API version 1.204.1) — do not edit by hand. How to authenticate is on the REST API reference.

Tag: mcp-catalog · 80 operations

GET /mcp/badge/{tenant}/{slug}.svg​

Get Mcp Status Badge

Render a published endpoint's status badge as a cacheable SVG (MCAT-19.3).

Resolves the endpoint by tenant + slug through the public gate, folds the requested metric into a badge, and returns it as SVG with caching headers. A target that is not a published, public endpoint (or does not exist) renders the neutral unknown badge with a 200 — never a 404 — so the response never reveals whether such an endpoint exists.

Args: tenant: The owning tenant's URL slug. slug: The endpoint's tenant-unique catalog slug (the .svg suffix is part of the route). metric: grade / health / version; unrecognized values normalize to grade. theme: light / dark label variant; unrecognized values normalize to light. if_none_match: Standard conditional-request header; a match yields 304 Not Modified.

Returns: A Response carrying the SVG (200) — or an empty 304 — with ETag and Cache-Control set.

Operation id: get_mcp_status_badge_mcp_badge__tenant___slug__svg_get

Parameters

NameInTypeRequiredDescription
tenantpathstringyesURL-safe tenant slug that scopes the request.
slugpathstringyesURL-safe resource slug.
metricquerystringnoWhich signal to render: 'grade' (A–F lint grade), 'health' (operational label), or 'version' (server-reported version). Anything else falls back to 'grade'.
themequerystringnoLabel variant: 'light' (default) or 'dark' — tones the label to suit the page.
If-None-Matchheaderstring or nullnoETag from a prior response; returns 304 when unchanged.

Responses

StatusDescriptionBody
200Successful response for get mcp status badge.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /mcp/feed/{tenant}​

Get Mcp Catalog Change Feed

Render a tenant's whole published catalog change feed (MCAT-19.4).

Renders recent changes across every published, public endpoint the tenant owns — a catalog-wide activity stream, most recent first — as RSS/Atom/JSON. Private and unpublished endpoints are excluded in SQL, so their changes never appear. An unknown or fully-private catalog renders an empty feed with a 200. Breaking changes are flagged in every entry.

Args: request: The incoming request (used only to build the feed's self/home URLs). tenant: The catalog's tenant slug. format: rss / atom / json; anything else is 400. if_none_match: Standard conditional-request header; a match yields 304 Not Modified.

Returns: A Response carrying the feed (200) — or an empty 304 — with ETag and Cache-Control set.

Operation id: get_mcp_catalog_change_feed_mcp_feed__tenant__get

Parameters

NameInTypeRequiredDescription
tenantpathstringyesURL-safe tenant slug that scopes the request.
formatquerystringnoFeed format: 'rss' (default), 'atom', or 'json' (JSON Feed 1.1).
If-None-Matchheaderstring or nullnoETag from a prior response; returns 304 when unchanged.

Responses

StatusDescriptionBody
200Successful response for get mcp catalog change feed.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /mcp/feed/{tenant}/{slug}​

Get Mcp Endpoint Change Feed

Render one published endpoint's change feed (MCAT-19.4).

Resolves the endpoint by tenant + slug through the public gate and renders its recent change history (newest snapshot first) as RSS/Atom/JSON. A target that is not a published, public endpoint (or does not exist) renders an identical empty feed with a 200 — never a 404 — so the response never reveals whether such an endpoint exists, and a private endpoint's changes are never disclosed. Breaking changes are flagged in every entry.

Args: request: The incoming request (used only to build the feed's self/home URLs). tenant: The owning tenant's URL slug. slug: The endpoint's tenant-unique catalog slug. format: rss / atom / json; anything else is 400. if_none_match: Standard conditional-request header; a match yields 304 Not Modified.

Returns: A Response carrying the feed (200) — or an empty 304 — with ETag and Cache-Control set.

Operation id: get_mcp_endpoint_change_feed_mcp_feed__tenant___slug__get

Parameters

NameInTypeRequiredDescription
tenantpathstringyesURL-safe tenant slug that scopes the request.
slugpathstringyesURL-safe resource slug.
formatquerystringnoFeed format: 'rss' (default), 'atom', or 'json' (JSON Feed 1.1).
If-None-Matchheaderstring or nullnoETag from a prior response; returns 304 when unchanged.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint change feed.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/conformance/rules​

Get Mcp Conformance Rules

Return the MCP conformance rule catalog and the profiles that select from it.

Every rule cites the MCP specification revision it derives from and a resolvable source reference, so any finding can be traced back to a normative statement (CLX-3.1 AC-1).

The catalog is registry-level — it describes the engine, not any one endpoint — so it authenticates with :func:validate_session_credentials rather than :func:validate_authentication. That is not interchangeable: validate_authentication takes tenant_slug as its first parameter, which FastAPI resolves from the path on every tenant-scoped route. This route has no {tenant_slug} segment, so it would instead be resolved as a required query parameter — making the catalog return 422 unless the caller invented a slug, and then authenticating against whatever they invented. The same reasoning is why GET /v1/lint/rules uses validate_session_credentials.

Operation id: get_mcp_conformance_rules_v1_mcp_conformance_rules_get

Parameters

NameInTypeRequiredDescription
profilequerystring or nullnoRestrict the catalog to the rules this profile evaluates.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp conformance rules.application/json McpConformanceRulesResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/lint/rules​

Get Mcp Surface Lint Rules

Return the MCP surface-lint rule catalog with CLX-4.3 transparency metadata.

Registry-level (describes the engine, not any endpoint). Blocking rules carry reference, remediation, false-positive guidance, fixture id, and scan modes.

Operation id: get_mcp_surface_lint_rules_v1_mcp_lint_rules_get

Parameters

NameInTypeRequiredDescription
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp surface lint rules.application/json McpSurfaceLintRulesResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/trust-posture/rules​

Get Mcp Trust Posture Rules

Return the trust-posture rule catalog, the profiles, and the OWASP MCP risk catalog.

Every rule declares which evidence lane it reads, which OWASP MCP risk it maps to, and what it needs to run at all — so a consumer can see, before running anything, exactly what the scan can and cannot tell them.

Registry-level (describes the engine, not any endpoint), so it authenticates with :func:validate_session_credentials for the same reason /conformance/rules and /v1/lint/rules do: it has no {tenant_slug} path segment.

Operation id: get_mcp_trust_posture_rules_v1_mcp_trust_posture_rules_get

Parameters

NameInTypeRequiredDescription
profilequerystring or nullnoRestrict the catalog to the rules this profile evaluates.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp trust posture rules.application/json McpPostureRulesResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/browse​

Browse Mcp Endpoints

Private browse: the caller's cataloged endpoints grouped by host (V2-MCP-23.1 / MCAT-9.1).

The browse-list half of the private catalog view (the detail half reuses the existing endpoint and version-detail reads). Returns every live endpoint the caller's tenant owns, bucketed by the host its URL points at, each carrying its current snapshot's capability counts (tools/resources/resource templates/prompts), quality score/grade, and last-discovered time. Like every catalog route, scoping comes from the token's tenant_id — never the URL slug — so a tenant only ever browses its own catalog.

Operation id: browse_mcp_endpoints_v1_mcp__tenant_slug__browse_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for browse mcp endpoints.application/json McpBrowseResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/capabilities​

List Mcp Capability Directory

Capability directory — paginated index of every live tool/resource/prompt (MCAT-21.4).

A browsable "what can be done" index across the caller's catalog: every capability item from each endpoint's current snapshot, with enough owning-server context to link back without a second read. name matches item name or title case-insensitively (substring); type, endpoint_id, and the usual host/category/grade/visibility filters compose (ANDed). Like every catalog route, scoping comes from the token's tenant_id — never the URL slug.

Operation id: list_mcp_capability_directory_v1_mcp__tenant_slug__capabilities_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
namequerystring or nullnoCase-insensitive substring match on capability name or title.
typequeryenum "tool", "resource", "resource_template", "prompt" or nullnoRestrict to one capability kind (tool/resource/resource_template/prompt).
endpoint_idquerystring or nullnoRestrict to capabilities from one cataloged server.
hostquerystring or nullnoFilter to endpoints on this host (case-insensitive).
categoryquerystring or nullnoFilter to endpoints in this category (case-insensitive).
gradequerystring or nullnoFilter to endpoints whose current snapshot earned this A-F grade.
visibilityqueryenum "public", "private" or nullnoFilter to 'private' or 'public' endpoints within the caller's own catalog.
sortqueryenum "server", "name", "type"noSort column: server (default), name, or type.
directionqueryenum "asc", "desc"noSort direction: asc (default) or desc.
limitqueryintegernoMaximum items to return.
offsetqueryintegernoItems to skip (pagination).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp capability directory.application/json McpCapabilityDirectoryResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/capabilities/search​

Cross Server Capability Search

Cross-server capability search — keyword + semantic, grouped by owning server (MCAT-21.2).

Answers "which servers offer a capability like X?" across the caller's catalog. Keyword matches use the V127 capability-item tsvector GIN index (websearch_to_tsquery). When APIOME_MCP_SIMILARITY_EMBEDDINGS_ENABLED is on and the Ollama embedding service is reachable, semantic matches also rank stored per-item embeddings (V149) by cosine similarity. Each distinct capability appears once with match_source keyword, semantic, or both.

Ranking (MCAT-9.7 / MCAT-21.2): per-item relevance is max(fts_rank, cosine_similarity); server groups sort by their best item relevance, then letter grade (A first, ungraded last), then score, then endpoint name; capabilities within a group sort by relevance desc, then ordinal. visibility and tenant scoping are enforced like the flat search route — only the caller's own catalog is searched. An empty or whitespace-only query, or a query that matches nothing, returns groups: [] (not an error).

Operation id: cross_server_capability_search_v1_mcp__tenant_slug__capabilities_search_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
qquerystringyesFree-text query (websearch syntax for keyword matches; also embedded for semantic).
scopequeryenum "tool", "resource", "resource_template", "prompt", "endpoint" or nullnoRestrict to one capability kind (tool/resource/resource_template/prompt). Omit to search all capability kinds.
hostquerystring or nullnoFilter to endpoints on this host (case-insensitive).
categoryquerystring or nullnoFilter to endpoints in this category (case-insensitive).
gradequerystring or nullnoFilter to endpoints whose current snapshot earned this A-F grade.
visibilityqueryenum "public", "private" or nullnoFilter to 'private' or 'public' endpoints within the caller's own catalog.
limitqueryintegernoMaximum server groups to return.
offsetqueryintegernoServer groups to skip (pagination).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for cross server capability search.application/json McpCrossServerCapabilitySearchResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/collections​

List Mcp Collections

List curated collections for the caller's tenant.

Operation id: list_mcp_collections_v1_mcp__tenant_slug__collections_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp collections.application/json McpCollectionListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/collections​

Create Mcp Collection

Create a curated collection, optionally with initial members.

Operation id: create_mcp_collection_v1_mcp__tenant_slug__collections_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for create mcp collection.

Responses

StatusDescriptionBody
200Successful response for create mcp collection.application/json McpCollectionOut
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/collections/{collection_id}​

Get Mcp Collection

Fetch one curated collection with its members.

Operation id: get_mcp_collection_v1_mcp__tenant_slug__collections__collection_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp collection.application/json McpCollectionOut
422Validation Errorapplication/json HTTPValidationError

PATCH /v1/mcp/{tenant_slug}/collections/{collection_id}​

Update Mcp Collection

Rename, describe, or publish/unpublish a curated collection.

Operation id: update_mcp_collection_v1_mcp__tenant_slug__collections__collection_id__patch

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for update mcp collection.

Responses

StatusDescriptionBody
200Successful response for update mcp collection.application/json McpCollectionOut
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/collections/{collection_id}​

Delete Mcp Collection

Delete a curated collection.

Operation id: delete_mcp_collection_v1_mcp__tenant_slug__collections__collection_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for delete mcp collection.application/json map of boolean
422Validation Errorapplication/json HTTPValidationError

PUT /v1/mcp/{tenant_slug}/collections/{collection_id}/members​

Replace Mcp Collection Members

Replace the full membership list for a collection.

Operation id: replace_mcp_collection_members_v1_mcp__tenant_slug__collections__collection_id__members_put

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for replace mcp collection members.

Responses

StatusDescriptionBody
200Successful response for replace mcp collection members.application/json McpCollectionOut
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/collections/{collection_id}/members​

Add Mcp Collection Members

Append endpoints to a collection.

Operation id: add_mcp_collection_members_v1_mcp__tenant_slug__collections__collection_id__members_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for add mcp collection members.

Responses

StatusDescriptionBody
200Successful response for add mcp collection members.application/json McpCollectionOut
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/collections/{collection_id}/members/{endpoint_id}​

Remove Mcp Collection Member

Remove one endpoint from a collection.

Operation id: remove_mcp_collection_member_v1_mcp__tenant_slug__collections__collection_id__members__endpoint_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
collection_idpathstring (uuid)yesPath parameter identifying the collection id segment.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for remove mcp collection member.application/json map of boolean
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/data-quality/duplicates​

List Mcp Duplicate Report

Advisory duplicate review list for the caller's catalog (V2-MCP-36.1 / MCAT-22.1).

Flags endpoints that share a normalized endpoint_url, the same network host (when fingerprints do not prove they are distinct), or an identical current surface_fingerprint. Published endpoints in other tenants that match the same keys are returned as cross-tenant hints. The report is advisory only — nothing is merged automatically.

Operation id: list_mcp_duplicate_report_v1_mcp__tenant_slug__data_quality_duplicates_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp duplicate report.application/json McpDuplicateReportResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/data-quality/freshness​

List Mcp Freshness Report

Freshness report for the caller's catalog (V2-MCP-36.2 / MCAT-22.2).

Flags endpoints that are overdue for re-discovery, in failure backoff/quarantine, or on a failing streak. Each flagged row carries a last_known_good_at anchor from the current snapshot (when one exists) plus the live cadence/backoff fields from mcp_endpoints. Healthy, in-cadence endpoints are omitted.

Operation id: list_mcp_freshness_report_v1_mcp__tenant_slug__data_quality_freshness_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp freshness report.application/json McpFreshnessReportResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/digest/config​

Get Mcp Digest Config

Read the calling tenant's scheduled catalog digest configuration (MCAT-19.5).

Returns the default disabled configuration when the tenant has never opted in (never a 404).

Args: tenant_slug: The tenant URL slug (validated by the auth dependency; scoping comes from the token). auth_data: The authenticated principal; tenant_id scopes the read.

Returns: The tenant's digest configuration.

Operation id: get_mcp_digest_config_v1_mcp__tenant_slug__digest_config_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp digest config.application/json McpDigestConfigResponse
422Validation Errorapplication/json HTTPValidationError

PUT /v1/mcp/{tenant_slug}/digest/config​

Put Mcp Digest Config

Create or update the calling tenant's digest configuration (MCAT-19.5).

Upserts the tenant's opt-in, cadence and empty-window policy. The window anchor (last_digest_at) is not reset, so changing cadence mid-stream does not lose the current window.

Args: tenant_slug: The tenant URL slug (validated by the auth dependency). body: The new digest preferences. auth_data: The authenticated principal; tenant_id scopes the write.

Returns: The stored digest configuration.

Operation id: put_mcp_digest_config_v1_mcp__tenant_slug__digest_config_put

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for put mcp digest config.

Responses

StatusDescriptionBody
200Successful response for put mcp digest config.application/json McpDigestConfigResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/digest/preview​

Preview Mcp Digest

Compile and return the tenant's digest for the current window without sending it (MCAT-19.5).

A dry run over real catalog data: the window ends now and spans one effective cadence back (the per-tenant override, or the global default). Nothing is delivered and the anchor is not advanced, so an operator can preview exactly what the next scheduled digest would contain. Respects tenant scoping — only the caller's own catalog is read.

Args: tenant_slug: The tenant URL slug (validated by the auth dependency; also used as the digest's subject slug). auth_data: The authenticated principal; tenant_id scopes the reads.

Returns: The digest payload (same JSON shape the scheduled delivery would carry).

Operation id: preview_mcp_digest_v1_mcp__tenant_slug__digest_preview_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for preview mcp digest.application/json object
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints​

List Mcp Endpoints

List every catalog endpoint owned by the caller's tenant (newest first).

Operation id: list_mcp_endpoints_v1_mcp__tenant_slug__endpoints_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp endpoints.application/json McpEndpointListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints​

Create Mcp Endpoint

Register a new MCP endpoint in the tenant's catalog.

The slug is taken from body.slug when supplied, otherwise derived from the name; either way it is uniquified within the tenant by the DB layer. Returns the created endpoint with 201.

Operation id: create_mcp_endpoint_v1_mcp__tenant_slug__endpoints_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for create mcp endpoint.

Responses

StatusDescriptionBody
201Successful response for create mcp endpoint.application/json McpEndpointResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}​

Get Mcp Endpoint

Fetch a single catalog endpoint by id; 404 when it is not the tenant's.

Operation id: get_mcp_endpoint_v1_mcp__tenant_slug__endpoints__endpoint_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint.application/json McpEndpointResponse
422Validation Errorapplication/json HTTPValidationError

PATCH /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}​

Update Mcp Endpoint

Patch mutable fields on a catalog endpoint; 404 when not the tenant's.

Only the fields present in the request body are applied (the slug is not patchable). An empty body is a no-op that returns the current record.

Operation id: update_mcp_endpoint_v1_mcp__tenant_slug__endpoints__endpoint_id__patch

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for update mcp endpoint.

Responses

StatusDescriptionBody
200Successful response for update mcp endpoint.application/json McpEndpointResponse
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}​

Delete Mcp Endpoint

Retire a catalog endpoint and purge its child data (V2-MCP-17.5 / MCAT-3.5).

The endpoint is soft-deleted (stamped deleted_at, disabled) so it vanishes from browse/list/get and is skipped by the discovery sweep, while its slug stays reserved. Its children are hard-deleted: the stored credentials (the security- critical purge), every discovery job, and every version snapshot — whose capability items, change logs and scores cascade away with it. Returns a teardown summary, or 404 when the endpoint is not the caller's tenant's (or was already deleted).

Operation id: delete_mcp_endpoint_v1_mcp__tenant_slug__endpoints__endpoint_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for delete mcp endpoint.application/json McpEndpointDeleteResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/credentials​

Get Mcp Endpoint Credentials

Return an endpoint's redacted credential status (never the secret itself).

Reports which auth_type is configured, whether a sealed secret is present (with a fixed mask placeholder when it is), the sealing key_version, non-secret oauth_metadata and timestamps. An endpoint with no credential reads as the anonymous none status. 404 when the endpoint is not the caller's tenant's.

Operation id: get_mcp_endpoint_credentials_v1_mcp__tenant_slug__endpoints__endpoint_id__credentials_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint credentials.application/json McpCredentialStatusResponse
422Validation Errorapplication/json HTTPValidationError

PUT /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/credentials​

Set Mcp Endpoint Credentials

Set or replace an endpoint's outbound credential, sealing the secret before storage.

The plaintext payload is validated against its auth_type (the same auth-type model used to build request headers, so a malformed or injection-bearing secret is rejected here), sealed via envelope encryption (MCAT-6.2), and upserted as ciphertext. The response is the redacted status — the secret is never echoed back. Returns 404 when the endpoint is not the caller's tenant's, 422 when the payload does not match its auth_type, and 503 when credential encryption is not configured (a secret cannot be stored safely without it).

Operation id: set_mcp_endpoint_credentials_v1_mcp__tenant_slug__endpoints__endpoint_id__credentials_put

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for set mcp endpoint credentials.

Responses

StatusDescriptionBody
200Successful response for set mcp endpoint credentials.application/json McpCredentialStatusResponse
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/credentials​

Clear Mcp Endpoint Credentials

Clear an endpoint's stored credential, removing the row (idempotent).

Returns removed=True when a credential was deleted and removed=False when the endpoint had none — both are 200. 404 when the endpoint is not the caller's tenant's.

Operation id: clear_mcp_endpoint_credentials_v1_mcp__tenant_slug__endpoints__endpoint_id__credentials_delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for clear mcp endpoint credentials.application/json McpCredentialDeleteResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/discover​

List Mcp Discovery Jobs

List an endpoint's discovery jobs, newest first; 404 when not the tenant's endpoint.

Operation id: list_mcp_discovery_jobs_v1_mcp__tenant_slug__endpoints__endpoint_id__discover_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp discovery jobs.application/json McpDiscoveryJobListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/discover​

Discover Mcp Endpoint

Kick off a discovery run for an endpoint and return its job (submit→poll).

Creates a manual discovery job and starts the run out of band: the MCP client connects, handshakes, paginates the capability listings, normalizes them, and persists a new version when the surface changed (version 1 on first run). Poll the returned job's GET .../discover/{job_id} for the terminal state and the produced version_id.

Concurrent discover requests on the same endpoint are de-duplicated: when a run is already queued/running, that existing job is returned (with deduplicated=True) and no second run starts. Returns 404 when the endpoint is not the caller's tenant's.

Operation id: discover_mcp_endpoint_v1_mcp__tenant_slug__endpoints__endpoint_id__discover_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
202Successful response for discover mcp endpoint.application/json McpDiscoveryJobResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/discover/{job_id}​

Get Mcp Discovery Job

Poll one discovery job's state/result; 404 when it is not this tenant+endpoint's job.

Operation id: get_mcp_discovery_job_v1_mcp__tenant_slug__endpoints__endpoint_id__discover__job_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
job_idpathstring (uuid)yesAsynchronous job identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp discovery job.application/json McpDiscoveryJobResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/digest​

Get Mcp Endpoint Digest

Return the caller's "changed since last view" digest for the endpoint (MCAT-16.5).

Compares the version the caller last saw (their per-user mcp_endpoint_views seen-marker) against the endpoint's current version and summarizes the delta and its breaking severity: new_to_you on a first visit (or when the last-seen snapshot has been pruned), has_changes with the classified diff when the surface moved on since, or neither flag when the caller is already up to date. A GET stays read-only — it does not advance the marker (POST …/views does), so the digest reflects the pre-advance state. An endpoint that was never discovered yields a digest with no changes (a 200). Returns 404 when the endpoint is not the caller's tenant's.

Operation id: get_mcp_endpoint_digest_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_digest_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint digest.application/json McpEndpointDigestResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/evolution​

Get Mcp Endpoint Insight Evolution

Return the endpoint's per-version evolution series (oldest snapshot first).

One point per discovery snapshot carrying its capability type_counts, quality score / grade, the change_counts (churn by direction) it introduced, and the severity_counts (V2-MCP-30.3) classifying that churn as breaking / additive / review — the time series a "how has this server evolved" chart plots, with breaking-change markers. An endpoint that was never discovered returns an empty series (a 200 with [], never a 500). Returns 404 when the endpoint is not the caller's tenant's.

Operation id: get_mcp_endpoint_insight_evolution_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_evolution_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight evolution.application/json McpInsightEvolutionResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/graph​

Get Mcp Endpoint Insight Graph

Return the capability relationship graph for a version snapshot (defaults to the current one).

Resolves the target snapshot — the supplied version_id or, when omitted, the endpoint's current_version_id — reconstructs its normalized surface from the persisted rows, and runs the deterministic :func:app.mcp_capability_graph.compute_capability_graph inference (one node per capability plus edges for prompts that name a tool, tools that reference a resource URI, and items that share a schema type) the 15.2 "Capability relationship graph" panel renders. Edges are emitted only on concrete signals (precision over recall); isolated nodes are still returned. A GET stays read-only. Returns 404 when the endpoint — or the named version under it — is not the caller's tenant's, or when no version_id was given and the endpoint has never been discovered.

Operation id: get_mcp_endpoint_insight_graph_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_graph_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idquerystring (uuid) or nullnoWhich snapshot to map; omit to map the endpoint's current surface.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight graph.application/json McpInsightGraphResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/percentile​

Get Mcp Endpoint Insight Percentile

Return the endpoint's peer percentile & category ranking across four axes (MCAT-18.3).

"Is this a good weather server?" needs a peer baseline, not an absolute grade. This ranks the endpoint against the other live endpoints in its catalog category — the cohort — on four axes: grade (the stored lint score), safety (annotation coverage crossed with the destructive/auth posture), documentation (documentation coverage), and latency (p95 responsiveness). Each axis reuses the same derivation the endpoint's own trust profile shows, so a rank never disagrees with the numbers on its Insight tab, and each carries the server's percentile (share of the cohort at or below it), its rank, and the "top N%" the UI badges render.

A blank/uncategorized endpoint is ranked within the uncategorized cohort. A single-member category is handled — the sole server is trivially the category leader. Any axis the endpoint has not measured (never scored, no tools, never tested) is an explicit gap, never a zero, so an undiscovered endpoint yields a coherent all-gap profile (a 200, never a 500). Scoping comes from the token's tenant, so the cohort never spans another tenant's catalog; returns 404 when the endpoint is not the caller's tenant's. A GET stays read-only, recomputed live as the catalog grows.

Operation id: get_mcp_endpoint_insight_percentile_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_percentile_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight percentile.application/json McpInsightPercentileResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/reliability​

Get Mcp Endpoint Insight Reliability

Return the endpoint's discovery and test-invocation reliability aggregates + health timeline.

discovery folds mcp_discovery_jobs into per-state tallies, a success rate over terminal jobs, and run-latency statistics; invocation folds mcp_test_invocations into call/error tallies, an error rate, and latency percentiles (p50/p95/p99). health (MCAT-17.1) adds the recent per-job outcome timeline (newest-first, capped at the timeline window), a windowed availability percentage, and the endpoint's live quarantine / backoff state. tools (MCAT-17.2) adds a per-tool latency & error-rate breakdown over the recent :data:TOOL_LATENCY_WINDOW_DAYS-day window — p50/p95/p99 and error rate per tool, a latency distribution, and the endpoint-wide totals. An endpoint with no discovery or test history returns zero counts, an empty timeline, an empty tool list, and empty (None) statistics — a 200, never a 500. Returns 404 when the endpoint is not the caller's tenant's.

Operation id: get_mcp_endpoint_insight_reliability_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_reliability_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight reliability.application/json McpInsightReliabilityResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/similar​

Get Mcp Endpoint Similar

Return "servers like this one" from capability overlap + optional semantic embeddings (MCAT-18.4).

Ranks the caller's other live endpoints against this one by two independent signals. overlap — always present — is the capability-name Jaccard overlap: peers sharing this server's tool / resource / prompt names, ranked by set-overlap, with the shared names surfaced (a server with nothing in common is not returned). semantic is a cosine nearest-neighbour over a per-snapshot capability embedding and is populated only when embeddings_enabled — the feature flag is on and both this endpoint and at least one peer carry a backfilled embedding. When embeddings are disabled or unbackfilled, semantic is empty and the endpoint page falls back to overlap-only (the "gracefully no-ops if embeddings are disabled" acceptance criterion). A never-discovered endpoint has no capabilities, so both lists are empty (a 200, never a 500). Scoping comes from the token's tenant, so neighbours never span another tenant's catalog; returns 404 when the endpoint is not the caller's tenant's. A GET stays read-only, recomputed live as the catalog grows.

Operation id: get_mcp_endpoint_similar_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_similar_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint similar.application/json McpSimilarServersResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/similar/reindex​

Reindex Mcp Endpoint Similar

(Re)compute and store this endpoint's current-snapshot capability embedding (MCAT-18.4).

The backfill step behind the semantic similarity signal: it derives the deterministic capability text of the endpoint's current surface (its tool/resource/prompt names + descriptions), embeds it via the Ollama embedding service, and stores the vector on the snapshot (V143) so the insight/similar semantic list can find it. Every non-success is a labelled no-op, not an error (always a 200): the feature flag being off, the endpoint having no discovered surface or no capabilities to embed, the embedding service being unreachable, or pgvector being unavailable each return reindexed=false with a detail explaining why. Returns 404 when the endpoint is not the caller's tenant's.

Operation id: reindex_mcp_endpoint_similar_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_similar_reindex_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for reindex mcp endpoint similar.application/json McpSimilarReindexResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/summary​

Get Mcp Endpoint Summary

Return the endpoint's usage examples and its cached AI digest, if any (MCAT-18.5).

Two things in one read. examples — one schema-derived example call per tool of the current surface — is always present: it is synthesized deterministically from each tool's input_schema with no model call and no tool execution, so it needs neither the feature flag nor an API key. The AI-written digest ("this server lets you …") is returned only when one has already been generated and cached for the current surface_fingerprint (null otherwise); ai_digest_enabled tells the UI whether the gated …/insight/summary/generate action is available. Because the cache is keyed on the fingerprint, a surface change automatically presents as "no digest yet" until regenerated. A never-discovered endpoint yields empty examples and a null digest (a 200, never a 500). Scoping comes from the token's tenant; 404 when the endpoint is not the caller's tenant's. Read-only.

Operation id: get_mcp_endpoint_summary_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_summary_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint summary.application/json McpServerDigestResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/summary/generate​

Generate Mcp Endpoint Summary

(Re)generate and cache the endpoint's AI digest for its current surface (MCAT-18.5).

The gated AI step. It (re)computes the schema-derived example calls (always), and — when APIOME_MCP_AI_DIGEST_ENABLED is on and an API key is configured — writes a short natural-language digest of the server via the Claude API and caches it under the current surface_fingerprint so it is computed once per surface. If a digest is already cached for this exact surface, it is returned as is without calling the model (from_cache=true). Every non-success is a labelled no-op, not an error (always a 200): the feature flag being off, no API key, the endpoint having no discovered surface, or the model being unreachable / declining each return generated=false with a detail. No tool is executed — the examples are pure schema synthesis and the model is told the surface is descriptive only. 404 when the endpoint is not the caller's tenant's.

Operation id: generate_mcp_endpoint_summary_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_summary_generate_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for generate mcp endpoint summary.application/json McpServerDigestGenerateResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/surface​

Get Mcp Endpoint Insight Surface

Return the capability-surface metrics for a version snapshot (defaults to the current one).

Resolves the target snapshot — the supplied version_id or, when omitted, the endpoint's current_version_id — reconstructs its normalized surface from the persisted rows, and runs the deterministic :func:app.mcp_surface_metrics.compute_surface_metrics roll-up (per-type counts, per-tool schema complexity, annotation and documentation coverage) the 15.x panels render. A GET stays read-only: nothing is written. Returns 404 when the endpoint — or the named version under it — is not the caller's tenant's, or when no version_id was given and the endpoint has never been discovered (no current surface to summarize).

Operation id: get_mcp_endpoint_insight_surface_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_surface_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idquerystring (uuid) or nullnoWhich snapshot to summarize; omit to summarize the endpoint's current surface.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight surface.application/json McpInsightSurfaceResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/insight/trust​

Get Mcp Endpoint Insight Trust

Return the endpoint's composite trust profile — five normalized 0-100 axes (MCAT-17.4).

The capstone of the single-server insight view: a synthesized "trust glance" across five axes, each reading one already-computed metric layer —

  • quality — the current snapshot's stored lint score;
  • safety — behavioural-annotation coverage crossed with the endpoint's auth posture and its destructive-tool count;
  • documentation — the snapshot's documentation coverage;
  • stability — the breaking-change rate across the evolution series' snapshot transitions;
  • responsiveness — the test-invocation error rate and p95 latency.

Every axis whose input is missing (a never-scored, never-changed, or never-tested server) is returned as an explicit gap — value: null with available: false — never a zero, and the overall composite averages only the available axes. This is deliberately a heuristic composite the panel labels as such, not an official rating. A never-discovered endpoint yields an all-gap profile (a 200), never a 500. Returns 404 when the endpoint is not the caller's tenant's. A GET stays read-only.

Operation id: get_mcp_endpoint_insight_trust_v1_mcp__tenant_slug__endpoints__endpoint_id__insight_trust_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint insight trust.application/json McpInsightTrustResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/jobs​

List Mcp Endpoint Jobs

List an endpoint's discovery-job status snapshots, newest first.

404 when the endpoint is not the caller's tenant's (so an unknown id never discloses another tenant's jobs as an empty list).

Operation id: list_mcp_endpoint_jobs_v1_mcp__tenant_slug__endpoints__endpoint_id__jobs_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp endpoint jobs.application/json McpDiscoveryJobStatusListResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/jobs/{job_id}​

Get Mcp Endpoint Job

Poll one discovery job's status snapshot (state, timings, version_id/error).

A terminal snapshot carries version_id (completed) or error / error_detail (failed). 404 when the job is not this tenant+endpoint's.

Operation id: get_mcp_endpoint_job_v1_mcp__tenant_slug__endpoints__endpoint_id__jobs__job_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
job_idpathstring (uuid)yesAsynchronous job identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint job.application/json McpDiscoveryJobStatusResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/notes​

List Mcp Endpoint Notes

List cataloger notes for an endpoint (newest first).

Operation id: list_mcp_endpoint_notes_v1_mcp__tenant_slug__endpoints__endpoint_id__notes_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp endpoint notes.application/json McpEndpointNoteListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/notes​

Create Mcp Endpoint Note

Add a cataloger note to an endpoint.

Operation id: create_mcp_endpoint_note_v1_mcp__tenant_slug__endpoints__endpoint_id__notes_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for create mcp endpoint note.

Responses

StatusDescriptionBody
200Successful response for create mcp endpoint note.application/json McpEndpointNoteOut
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/notes/{note_id}​

Get Mcp Endpoint Note

Fetch one cataloger note on an endpoint.

Operation id: get_mcp_endpoint_note_v1_mcp__tenant_slug__endpoints__endpoint_id__notes__note_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
note_idpathstring (uuid)yesPath parameter identifying the note id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint note.application/json McpEndpointNoteOut
422Validation Errorapplication/json HTTPValidationError

PATCH /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/notes/{note_id}​

Update Mcp Endpoint Note

Update a cataloger note on an endpoint.

Operation id: update_mcp_endpoint_note_v1_mcp__tenant_slug__endpoints__endpoint_id__notes__note_id__patch

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
note_idpathstring (uuid)yesPath parameter identifying the note id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for update mcp endpoint note.

Responses

StatusDescriptionBody
200Successful response for update mcp endpoint note.application/json McpEndpointNoteOut
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/notes/{note_id}​

Delete Mcp Endpoint Note

Delete a cataloger note from an endpoint.

Operation id: delete_mcp_endpoint_note_v1_mcp__tenant_slug__endpoints__endpoint_id__notes__note_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
note_idpathstring (uuid)yesPath parameter identifying the note id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for delete mcp endpoint note.application/json map of boolean
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/report​

Export Mcp Endpoint Report

Export a self-contained one-page report card for an endpoint version (MCAT-19.1).

Serializes the same panels the in-app Insight view shows — identity, grade + score breakdown, capability surface, safety posture, documentation coverage, license & terms signals, deprecation & lifecycle signals, the composite trust radar, and the change-since-previous summary — into a shareable Markdown or HTML document (the HTML carries a print stylesheet, so "PDF" is the browser's print-to-PDF of the same file). No new metric is computed: the route fetches the values the Insight endpoints already produce and the pure :mod:app.mcp_report_card layer renders them.

Visibility is honoured by the standard token-tenant scoping — a cross-tenant (or private, non-tenant) endpoint id reads as 404. A never-discovered or never-scored endpoint yields a graceful partial report (identity present; the unavailable sections say so) rather than an error. No credential secret ever reaches the report — only the auth posture and auth_type.

Args: tenant_slug: Informational; scoping comes from the validated token's tenant. endpoint_id: The endpoint to report on. format: markdown / md / html (400 on anything else). version_id: The snapshot to report; defaults to the endpoint's current surface. auth_data: The validated caller identity (also what enforces visibility).

Returns: A Response carrying the rendered document with the right Content-Type and an attachment Content-Disposition filename.

Operation id: export_mcp_endpoint_report_v1_mcp__tenant_slug__endpoints__endpoint_id__report_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
formatquerystringnoReport format: 'markdown' (alias 'md') or 'html'.
version_idquerystring (uuid) or nullnoWhich snapshot to report; omit to report the endpoint's current surface.
include_cataloger_notesquerybooleannoWhen true, include tenant cataloger commentary (not server-reported data).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for export mcp endpoint report.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/sources​

List Mcp Endpoint Sources

List an endpoint's linked sources, newest first. 404 when the endpoint is not the caller's.

Operation id: list_mcp_endpoint_sources_v1_mcp__tenant_slug__endpoints__endpoint_id__sources_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
includeRetiredquerybooleannoInclude retired source links (kept for historical evidence).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp endpoint sources.application/json McpSourceListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/sources​

Link Mcp Endpoint Source

Link a source artifact (git repo / package / image / registry identity) to an endpoint.

The reference is parsed and canonicalized by :mod:app.mcp_source_link; the pin strength is derived from whether the reference actually carries an immutable digest, never from what the caller asserts. Idempotent: re-linking the same live artifact returns the existing row.

404 when the endpoint is not the caller's tenant's; 400 on an unparseable reference.

Operation id: link_mcp_endpoint_source_v1_mcp__tenant_slug__endpoints__endpoint_id__sources_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for link mcp endpoint source.

Responses

StatusDescriptionBody
201Successful response for link mcp endpoint source.application/json McpSourceResponse
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/sources/{source_id}​

Retire Mcp Endpoint Source

Retire a linked source (soft delete). It stops backing new scans but stays readable.

404 when the source is not this endpoint's, or is already retired.

Operation id: retire_mcp_endpoint_source_v1_mcp__tenant_slug__endpoints__endpoint_id__sources__source_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
source_idpathstring (uuid)yesPath parameter identifying the source id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for retire mcp endpoint source.application/json McpSourceResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/sources/{source_id}/sbom​

Attach Mcp Source Sbom

Attach a CycloneDX/SPDX SBOM to a linked source. Coordinates only — no source is stored.

The document is parsed for component coordinates (name / version / purl / license) and nothing else; :mod:app.mcp_sbom has no field that could hold source or file content. The inventory is keyed by the artifact digest it describes, defaulting to the source's own pinned digest.

400 when the source is not pinned and no subject_digest is given (an inventory must name the artifact it inventories); 400 on an unrecognized SBOM; 404 when the source is not the caller's.

Operation id: attach_mcp_source_sbom_v1_mcp__tenant_slug__endpoints__endpoint_id__sources__source_id__sbom_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
source_idpathstring (uuid)yesPath parameter identifying the source id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for attach mcp source sbom.

Responses

StatusDescriptionBody
201Successful response for attach mcp source sbom.application/json McpSbomOut
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/test​

Test Mcp Endpoint Capability

Invoke one cataloged capability against its live MCP server and report the outcome.

The test-harness surface for the UI/CLI: it names a tool/resource/prompt on the endpoint's current discovered surface, validates the supplied arguments against the stored schema (a tool's inputSchema; a prompt's required arguments), attaches the endpoint's stored credential — or an ephemeral auth_override that is never persisted — and invokes the one method under timeout_seconds. The response carries the three outcomes the invocation service distinguishes: a successful result (completed / not is_error), a tool-level error (completed + is_error, with the error content), or a transport/JSON-RPC failure (completed=False with a classified error) — each with its latency_ms.

Safety guards (V2-MCP-22.3 / MCAT-8.3):

  • Confirm gate — a tool whose annotations assert destructiveHint or openWorldHint is refused with 428 unless the request sets confirm=true, so an irreversible or open-world tool is never fired by accident.
  • Per-endpoint rate limit — accepted calls are throttled per endpoint (429 when the window is exhausted) so the console cannot flood the external server.
  • Redacted audit log — every dispatched call is recorded in mcp_test_invocations with secret-named arguments/response fields masked; auth headers are never logged. The new row's id is returned as invocation_id. Logging is best-effort and never fails the call.

Status codes:

  • 404 — the endpoint is not the caller's tenant's, or the named capability is not on its current surface.
  • 409 — the endpoint has never been discovered (no current surface to test).
  • 422 — the arguments fail the stored schema, the override payload is malformed, or a resource has no concrete uri.
  • 428 — the tool is flagged destructive/open-world and the request did not set confirm.
  • 429 — the per-endpoint test rate limit for the current window has been reached.

A remote-server failure is not an HTTP error here: it is reported in-band as completed=False with the classified error, so "the tool is down" is data, not a 5xx.

Operation id: test_mcp_endpoint_capability_v1_mcp__tenant_slug__endpoints__endpoint_id__test_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for test mcp endpoint capability.

Responses

StatusDescriptionBody
200Successful response for test mcp endpoint capability.application/json McpEndpointTestResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions​

List Mcp Endpoint Versions

List an endpoint's version history newest-first (seq, date tag, score, change counts).

Each entry carries the snapshot's sequence and human-readable version_tag, its server identity and fingerprint, the quality score/grade (when scored), and the per-direction tally of changes it introduced. is_current marks the snapshot the endpoint currently points at. 404 when the endpoint is not the caller's tenant's.

Operation id: list_mcp_endpoint_versions_v1_mcp__tenant_slug__endpoints__endpoint_id__versions_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp endpoint versions.application/json McpEndpointVersionListResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/compare​

Compare Mcp Endpoint Versions

Compute an on-demand structured diff between any two of an endpoint's versions.

Works for any base/target pair — adjacent or arbitrarily distant — because the surfaces are diffed directly (MCAT-4.2), not by chaining adjacent step-diffs. The order is normalized to older→newer (by version_seq) regardless of which id was passed as base, so added/removed always read relative to the older surface. The same version on both sides yields an empty diff with fingerprint_changed = False. 404 when the endpoint — or either version under it — is not the caller's tenant's.

Operation id: compare_mcp_endpoint_versions_v1_mcp__tenant_slug__endpoints__endpoint_id__versions_compare_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
basequerystring (uuid)yesThe base (from) version id.
targetquerystring (uuid)yesThe target (to) version id.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for compare mcp endpoint versions.application/json McpVersionCompareResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}​

Get Mcp Endpoint Version

Fetch one version snapshot's full surface (identity, capabilities, and items).

Returns the server identity, declared capabilities, instructions, score/grade, change counts, and every normalized capability item of the snapshot. 404 when the endpoint — or the version under it — is not the caller's tenant's.

Operation id: get_mcp_endpoint_version_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version.application/json McpEndpointVersionResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/changes​

Get Mcp Endpoint Version Changes

Return a version's stored previous → this change report (the diff it introduced).

Empty for the first version (which introduces no diff). The changes are in the same stable order an on-demand compare of the same pair produces. 404 when the endpoint — or the version under it — is not the caller's tenant's.

Operation id: get_mcp_endpoint_version_changes_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__changes_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version changes.application/json McpVersionChangesResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/conformance​

Get Mcp Endpoint Version Conformance

Run and gate a conformance profile over one MCP version snapshot.

Assesses the snapshot's protocol behaviour and its tools' agent-readiness, then gates the result: the response's gate says whether the run cleared failOn / minScore, so a CI job can act on this single call.

Read-only and side-effect free: the report is recomputed on each request from the persisted surface and the snapshot's stored (redacted) protocol transcript, and nothing is written back. Any rule that needs a transcript this snapshot never captured is reported in skippedRules rather than assumed to pass.

format=sarif / format=junit return the CI artifact directly, through the same serializer the compatibility gate uses. 404 when the endpoint — or the version under it — is not the caller's tenant's; 400 on an unknown profile or threshold.

Operation id: get_mcp_endpoint_version_conformance_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__conformance_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
profilequerystring or nullnoConformance profile to run (default: mcp-conformance).
failOnquerystringnoFail the gate on findings of this severity or worse; 'none' to disable.
minScorequeryinteger or nullnoOptional score floor; a lower score fails the gate.
formatquerystring or nullnoResponse format: json (default), sarif, or junit.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version conformance.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint​

Get Mcp Endpoint Version Lint

Return a version snapshot's lint report — the stored score, or a live recompute.

Serves the report persisted at discovery time (source="stored") when one exists; when the snapshot has never been scored (or only an empty placeholder row exists), the surface is reconstructed and scored on the fly (source="computed") without writing it back — a GET stays read-only. Either way the response carries the deterministic score, A-F grade, per-rule and per-severity tallies, the stable fingerprint, and every itemized finding. 404 when the endpoint — or the version under it — is not the caller's tenant's.

Operation id: get_mcp_endpoint_version_lint_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version lint.application/json McpLintReportResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint​

Recompute Mcp Endpoint Version Lint

Recompute a version snapshot's lint report and persist the refreshed score.

Always reconstructs the snapshot's surface from its stored rows, re-runs the deterministic scorer, and upserts the result into mcp_version_scores (overwriting any prior score and moving scored_at to now). Returns the freshly computed report with source="computed" and the persisted scored_at. 404 when the endpoint — or the version under it — is not the caller's tenant's.

Operation id: recompute_mcp_endpoint_version_lint_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for recompute mcp endpoint version lint.application/json McpLintReportResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint/axes​

Get Mcp Endpoint Version Lint Axes

Return the multi-axis score and coverage evaluation for a version snapshot (CLX-1.2, #4849).

Prefers the latest stored lint_axis_evaluations row for algorithm clx-axis-v1. When none is stored, computes one from the persisted MCP score report. Legacy list score / grade fields are unchanged. 404 when the endpoint or version is not the caller's tenant's.

Operation id: get_mcp_endpoint_version_lint_axes_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_axes_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version lint axes.application/json LintAxesResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint/evidence​

Get Mcp Endpoint Version Lint Evidence

Return the immutable lint evidence recorded for a version snapshot (CLX-1.1, #4848).

Lists every evidence run captured for the snapshot — provenance (scanner, adapter, profile, fingerprints), outcome, normalized findings, and coverage — plus a per-scanner coverage summary in which a scanner that never ran reads as not_run (never as clean). Raw output artifacts are access-controlled: responses expose only their availability, never the storage reference or command metadata. 404 when the endpoint — or the version under it — is not the caller's tenant's.

Operation id: get_mcp_endpoint_version_lint_evidence_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_evidence_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version lint evidence.application/json LintEvidenceResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint/gate​

Get Mcp Endpoint Version Lint Gate

Evaluate the lint CI gate for an MCP snapshot and emit a machine-readable artifact (CLX-4.2).

The MCP twin of GET /v1/versions/…/lint/gate: policy verdict over the snapshot's current evidence, optional baseline regression diff, and JSON / SARIF / JUnit / Markdown / attestation serialization. HTTP status is always 200 — pass/fail lives in gate.passed.

Operation id: get_mcp_endpoint_version_lint_gate_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_gate_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
formatquerystring or nullnoArtifact format: json (default) | sarif | junit | markdown | attestation. The Accept header is honored when the query parameter is absent.
baselineVersionIdquerystring or nullnoOptional baseline snapshot (mcp_endpoint_versions.id) to diff regressions against; must belong to the same endpoint.
newOnlyquerybooleannoScope the CI verdict's unwaived-errors gate to newly introduced findings.
policyVersionIdquerystring or nullnoOptional historical policy pack id; defaults to the latest for the assigned guide.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version lint gate.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/lint/policy​

Get Mcp Endpoint Version Lint Policy

Evaluate the assigned style-guide policy pack against MCP version evidence (CLX-1.3, #4850).

Operation id: get_mcp_endpoint_version_lint_policy_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__lint_policy_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
policyVersionIdquerystring or nullnoOptional historical policy pack id; defaults to the latest for the assigned guide.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version lint policy.application/json LintPolicyResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/versions/{version_id}/trust-posture​

Get Mcp Endpoint Version Trust Posture

Run and gate a trust-posture profile over one MCP version snapshot.

Assesses what the server is built from — its advertised metadata, its linked source, and its dependencies — mapped to the OWASP MCP Top 10, then gates the result.

Two honesty guarantees are visible in every response and must not be ignored by a consumer:

  • Every finding carries exploitability — always static_signal today, because no dynamic probe exists yet (CLX-3.3, #4857). proven_count is 0. Nothing here is a demonstrated exploit; each is a signal a reviewer should confirm.
  • Rules whose evidence is absent (no linked source, no SBOM, no vulnerability lookup) appear in skipped_rules with a reason, never as passes. Use requireFullCoverage to fail the gate when the scan could not look at everything.

Read-only and side-effect free: recomputed on each request from persisted evidence. The metadata lane is fully offline; the dependency lane transmits only package coordinates, and only when vulnerability lookup is explicitly enabled. format=sarif / junit return the CI artifact. 404 when the endpoint or version is not the caller's tenant's; 400 on an unknown profile.

Operation id: get_mcp_endpoint_version_trust_posture_v1_mcp__tenant_slug__endpoints__endpoint_id__versions__version_id__trust_posture_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
version_idpathstring (uuid)yesVersion identifier or semantic version label, depending on the route.
profilequerystring or nullnoTrust-posture profile to run (default: mcp-trust-posture).
failOnquerystringnoFail the gate on findings of this severity or worse; 'none' to disable.
minScorequeryinteger or nullnoOptional score floor; a lower score fails the gate.
requireFullCoveragequerybooleannoFail the gate when any rule was skipped for lack of evidence.
formatquerystring or nullnoResponse format: json (default), sarif, or junit.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp endpoint version trust posture.application/json any
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/endpoints/{endpoint_id}/views​

Record Mcp Endpoint View

Record that the caller viewed the endpoint, advancing their seen-marker (MCAT-16.5).

Upserts the caller's per-user mcp_endpoint_views marker to the snapshot they saw — the version_id they acknowledge in the body, or the endpoint's current version when omitted — so the next "changed since last view" digest reads relative to it ("the marker advances on view"). Requires a resolvable user (403 otherwise, as the marker is per-user). Returns 404 when the endpoint — or an explicitly named version under it — is not the caller's tenant's, and 400 when the endpoint has no discovered version to mark.

Operation id: record_mcp_endpoint_view_v1_mcp__tenant_slug__endpoints__endpoint_id__views_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
endpoint_idpathstring (uuid)yesMCP endpoint identifier.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (optional)

Request body for record mcp endpoint view.

Responses

StatusDescriptionBody
200Successful response for record mcp endpoint view.application/json McpEndpointViewResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/endpoints:export​

Export Mcp Catalog Inventory

Export the tenant's whole MCP catalog as streamed CSV or JSON data (MCAT-19.2).

Serializes every cataloged endpoint into a flat inventory row — id, name, host, transport, category, visibility, published flag, current grade/score, per-kind capability counts (and their total), last discovery status/time, and a derived health label — as CSV (RFC-4180 escaped) or a JSON wrapper whose endpoints array carries the same fields. The catalog is walked one bounded keyset page at a time and the body is streamed, so a large catalog exports without loading every row into memory.

Like every catalog route, scoping comes from the validated token's tenant_id — never the URL slug — so the export only ever contains the caller's own catalog. scope=public restricts the export to published endpoints (the published-only variant a public directory would show). Only each endpoint's host is exported; the stored URL, which may embed a credential, never appears.

Args: tenant_slug: Informational; scoping comes from the validated token's tenant. format: csv or json (400 on anything else). scope: all (full catalog) or public (published-only); 400 on anything else. auth_data: The validated caller identity (also what enforces tenant scoping).

Returns: A StreamingResponse carrying the rendered inventory with the right Content-Type and an attachment Content-Disposition filename.

Operation id: export_mcp_catalog_inventory_v1_mcp__tenant_slug__endpoints_export_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
formatquerystringnoInventory format: 'csv' or 'json'.
scopequerystringno'all' exports the tenant's full catalog; 'public' exports only published endpoints (the public-directory variant).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for export mcp catalog inventory.application/json any
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/facets​

Faceted Mcp Catalog Search

Faceted search over the caller's MCP catalog with live facet counts (V2-MCP-35.1 / MCAT-21.1).

The catalog's rich metrics as queryable facets: filter by grade band, transport, category, safety posture, complexity band, protocol version, and discovery health. Filters AND across facets and OR within a facet; the response carries the matching endpoint page (browse- shaped rows, each with its facet fields) plus per-dimension bucket counts aggregated over the same filtered set, so the counts are live. Every bucket label — including the NULL-bucket sentinels ungraded / uncategorized / unknown — is itself a valid filter value.

Like every catalog route, scoping comes from the token's tenant_id — never the URL slug — so the search only ever spans the caller's own catalog, and visibility narrows the caller's own private/public endpoints. A filter combination matching nothing returns an empty page with zeroed counts, not an error; an invalid facet value is a 422.

Operation id: faceted_mcp_catalog_search_v1_mcp__tenant_slug__facets_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
gradequeryarray of string or nullnoGrade facet: A-F letters (any case) and/or 'ungraded'. Repeatable.
transportqueryarray of string or nullnoTransport facet: streamable_http / sse / stdio. Repeatable.
categoryqueryarray of string or nullnoCategory facet: category names (case-insensitive) and/or 'uncategorized'. Repeatable.
safetyqueryarray of string or nullnoSafety-posture facet: 'has_destructive' (a tool asserts destructiveHint) and/or 'read_only_only' (every tool asserts readOnlyHint). Repeatable.
complexityqueryarray of string or nullnoComplexity-band facet: simple / moderate / complex / unknown. Repeatable.
protocolqueryarray of string or nullnoProtocol-version facet: exact reported versions (e.g. 2025-06-18) and/or 'unknown'. Repeatable.
healthqueryarray of string or nullnoDiscovery-health facet: healthy / failing / undiscovered / disabled / quarantined. Repeatable.
visibilityqueryenum "public", "private" or nullnoFilter to 'private' or 'public' endpoints within the caller's own catalog.
limitqueryintegernoMaximum endpoints to return.
offsetqueryintegernoEndpoints to skip (pagination).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for faceted mcp catalog search.application/json McpFacetedSearchResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/insight/catalog​

Get Mcp Catalog Insight

Return a tenant-wide roll-up of the caller's live MCP catalog (feeds 18.1).

Aggregates every live endpoint the caller's tenant owns: total / published / discovered counts, the per-kind capability type_counts summed across each endpoint's current surface, the average quality score, and the A-F grade_distribution. Like every catalog route, scoping comes from the token's tenant_id — never the URL slug — so the aggregate only ever spans the caller's own catalog (an empty catalog returns zeroes, not a 404).

Operation id: get_mcp_catalog_insight_v1_mcp__tenant_slug__insight_catalog_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp catalog insight.application/json McpInsightCatalogResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/saved-searches​

List Mcp Saved Searches

List the caller's saved catalog searches (pinned first, then newest).

Operation id: list_mcp_saved_searches_v1_mcp__tenant_slug__saved_searches_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for list mcp saved searches.application/json McpSavedSearchListResponse
422Validation Errorapplication/json HTTPValidationError

POST /v1/mcp/{tenant_slug}/saved-searches​

Create Mcp Saved Search

Save the current catalog filter bundle under a name.

Operation id: create_mcp_saved_search_v1_mcp__tenant_slug__saved_searches_post

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for create mcp saved search.

Responses

StatusDescriptionBody
200Successful response for create mcp saved search.application/json McpSavedSearchOut
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/saved-searches/{search_id}​

Get Mcp Saved Search

Fetch one saved search owned by the caller.

Operation id: get_mcp_saved_search_v1_mcp__tenant_slug__saved_searches__search_id__get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
search_idpathstring (uuid)yesPath parameter identifying the search id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for get mcp saved search.application/json McpSavedSearchOut
422Validation Errorapplication/json HTTPValidationError

PATCH /v1/mcp/{tenant_slug}/saved-searches/{search_id}​

Update Mcp Saved Search

Update a saved search owned by the caller.

Operation id: update_mcp_saved_search_v1_mcp__tenant_slug__saved_searches__search_id__patch

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
search_idpathstring (uuid)yesPath parameter identifying the search id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Request body (required)

Request body for update mcp saved search.

Responses

StatusDescriptionBody
200Successful response for update mcp saved search.application/json McpSavedSearchOut
422Validation Errorapplication/json HTTPValidationError

DELETE /v1/mcp/{tenant_slug}/saved-searches/{search_id}​

Delete Mcp Saved Search

Delete a saved search owned by the caller.

Operation id: delete_mcp_saved_search_v1_mcp__tenant_slug__saved_searches__search_id__delete

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
search_idpathstring (uuid)yesPath parameter identifying the search id segment.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for delete mcp saved search.application/json map of boolean
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/saved-searches/{search_id}/run​

Run Mcp Saved Search

Re-run a saved search's facet-compatible filters and return matching endpoints.

Host/auth dimensions are applied client-side on the browse page; the server runs the facet subset via the same faceted-search path as GET /facets, so results match the equivalent live facet filter for those dimensions.

Operation id: run_mcp_saved_search_v1_mcp__tenant_slug__saved_searches__search_id__run_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
search_idpathstring (uuid)yesPath parameter identifying the search id segment.
limitqueryintegernoMaximum number of rows to return.
offsetqueryintegernoNumber of rows to skip before returning results.
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for run mcp saved search.application/json McpSavedSearchRunResponse
422Validation Errorapplication/json HTTPValidationError

GET /v1/mcp/{tenant_slug}/search​

Search Mcp Catalog

Free-text search over the caller's MCP catalog, relevance-then-score ranked (V2-MCP-23.2 / MCAT-9.2).

Backed by the V127 capability-item tsvector GIN index. scope selects what is searched: a single capability kind, every capability kind (the default), or the endpoints themselves (scope=endpoint). Each hit carries its owning endpoint's browse context (host, category, score/grade, visibility) so the result is renderable without a second read. The host / category / grade / visibility filters compose (each supplied filter is ANDed in).

Like every catalog route, scoping comes from the token's tenant_id — never the URL slug — so a search only ever returns the caller's own catalog (the public-directory variant waits on the MCAT-1.6 public read view). visibility therefore narrows the caller's own private/public endpoints rather than exposing another tenant's. A query that reduces to nothing under full-text parsing (e.g. only stop-words) is a valid request that simply returns no hits.

Operation id: search_mcp_catalog_v1_mcp__tenant_slug__search_get

Parameters

NameInTypeRequiredDescription
tenant_slugpathstringyesURL-safe tenant slug that scopes the request.
qquerystringyesFree-text query (websearch syntax: quotes for phrases, OR, leading - to exclude).
scopequeryenum "tool", "resource", "resource_template", "prompt", "endpoint" or nullnoWhat to search: a single capability kind (tool/resource/resource_template/prompt), or 'endpoint' to search endpoints by name/description/category. Omit to search across all capability kinds.
hostquerystring or nullnoFilter to endpoints on this host (case-insensitive).
categoryquerystring or nullnoFilter to endpoints in this category (case-insensitive).
gradequerystring or nullnoFilter to endpoints whose current snapshot earned this A-F grade.
visibilityqueryenum "public", "private" or nullnoFilter to 'private' or 'public' endpoints within the caller's own catalog.
limitqueryintegernoMaximum hits to return.
offsetqueryintegernoHits to skip (pagination).
authorizationheaderstring or nullnoJWT bearer token for authenticated access (Authorization: Bearer <token>).
X-API-Keyheaderstring or nullnoTenant-scoped API key used as an alternative to JWT bearer authentication.

Responses

StatusDescriptionBody
200Successful response for search mcp catalog.application/json McpSearchResponse
422Validation Errorapplication/json HTTPValidationError

Schemas used​

HTTPValidationError​

Validation error response emitted when request data fails schema checks.

PropertyTypeRequiredDescription
detailarray of ValidationErrornoDetail.

LintAxesResponse​

Response envelope for GET …/lint/axes (CLX-1.2, #4849).

PropertyTypeRequiredDescription
evaluationLintAxisEvaluationOutyesEvaluation.

LintEvidenceResponse​

All lint evidence for one catalog revision or MCP endpoint version (CLX-1.1, #4848).

PropertyTypeRequiredDescription
subjectTypestringyesSubject kind: catalog_revision or mcp_endpoint_version.
subjectIdstringyesThe revision (versions.id) or snapshot (mcp_endpoint_versions.id).
runsarray of LintEvidenceRunOutnoImmutable evidence runs, most recent first.
coveragearray of LintEvidenceCoverageOutnoPer-scanner coverage: expected scanners first, then any additional scanners with historical runs. Never-run scanners appear as not_run — never as clean.
countintegeryesNumber of evidence runs (== len(runs)).

LintPolicyResponse​

GET …/lint/policy response: pack pin, evaluation, findings with decisions.

PropertyTypeRequiredDescription
policyVersionStyleGuidePolicyVersionOutyesPolicy Version.
evaluationLintPolicyEvaluationOutyesEvaluation.
findingsarray of LintPolicyAnnotatedFindingOutnoFindings.

McpBrowseResponse​

Response envelope for the private browse view — endpoints grouped by host (MCAT-9.1).

PropertyTypeRequiredDescription
successbooleannoSuccess.
host_countintegeryesNumber of host.
endpoint_countintegeryesNumber of endpoint.
groupsarray of McpBrowseHostGroupyesGroups.

McpCapabilityDirectoryResponse​

Paginated capability directory envelope (MCAT-21.4).

PropertyTypeRequiredDescription
successbooleannoSuccess.
limitintegeryesLimit.
offsetintegeryesOffset.
totalintegeryesTotal.
countintegeryesNumber of count.
itemsarray of McpCapabilityDirectoryEntrynoItems.

McpCollectionCreate​

Body for creating a curated collection.

PropertyTypeRequiredDescription
namestringyesHuman-readable name.
slugstring or nullnoURL-safe identifier.
descriptionstring or nullnoFree-text description.
isPublishedbooleannoIs Published.
endpointIdsarray of stringnoEndpoint IDs.

McpCollectionListResponse​

Envelope for listing curated collections.

PropertyTypeRequiredDescription
successbooleannoSuccess.
collectionsarray of McpCollectionOutnoCollections.

McpCollectionMembersAdd​

Append endpoints to a collection.

PropertyTypeRequiredDescription
endpointIdsarray of stringyesEndpoint IDs.

McpCollectionMembersReplace​

Replace the full membership list for a collection.

PropertyTypeRequiredDescription
endpointIdsarray of stringnoEndpoint IDs.

McpCollectionOut​

One tenant-scoped curated collection of MCP endpoints.

PropertyTypeRequiredDescription
idstringyesStable resource identifier.
namestringyesHuman-readable name.
slugstringyesURL-safe identifier.
descriptionstring or nullnoFree-text description.
isPublishedbooleannoIs Published.
memberCountintegernoNumber of member.
createdBystringyesCreated By.
createdAtstring (date-time)yesCreated At.
updatedAtstring (date-time)yesUpdated At.
membersarray of McpCollectionMemberOut or nullnoMembers.

McpCollectionUpdate​

Patch body for updating a curated collection.

PropertyTypeRequiredDescription
namestring or nullnoHuman-readable name.
slugstring or nullnoURL-safe identifier.
descriptionstring or nullnoFree-text description.
isPublishedboolean or nullnoIs Published.

McpConformanceRulesResponse​

The conformance rule catalog and the profiles that select from it (CLX-3.1, #4855).

Every rule cites the MCP specification version it derives from and a resolvable source reference, so a finding is always traceable to a normative statement rather than an opinion.

PropertyTypeRequiredDescription
successbooleannoSuccess.
specVersionstringyesThe MCP specification revision this rule set is written against.
profilesarray of McpConformanceProfileOutyesProfiles.
rulesarray of McpConformanceRuleOutyesRules.

McpCredentialDeleteResponse​

Outcome of clearing an endpoint's credential (MCAT-6.5).

removed is True when a stored credential row was actually deleted, and False when the endpoint had no credential to begin with (the clear is idempotent — both are 200).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
removedbooleannoRemoved.

McpCredentialStatusResponse​

McpCredentialStatusResponse schema.

PropertyTypeRequiredDescription
successbooleannoSuccess.
credentialMcpCredentialStatusOutyesCredential.

McpCredentialUpsert​

Set or replace an endpoint's outbound credential (MCAT-6.5).

The plaintext payload is sealed server-side (MCAT-6.2) before it is stored and is NEVER echoed back by any response. auth_type must be a secret-bearing scheme (:data:MCP_CREDENTIAL_AUTH_TYPES) — to remove a credential entirely (the anonymous none state) DELETE the resource instead. oauth_metadata is non-secret OAuth2 discovery metadata persisted as cleartext. Accepts both camelCase and snake_case keys so UI and CLI can share it.

Expected payload shape per auth_type (validated against the auth-type model at the route):

  • bearer — {"token": "<secret>"}
  • header — {"name": "<Header-Name>", "value": "<secret>"}
  • oauth2 — {"access_token": "<token>", "token_type": "Bearer"?}
  • env — {"vars": {"NAME": "value", ...}}
PropertyTypeRequiredDescription
authTypestringyesAuth Type.
payloadobjectnoPayload.
oauthMetadataobject or nullnoOAuth Metadata.

McpCrossServerCapabilitySearchResponse​

Grouped cross-server capability search results (MCAT-21.2).

PropertyTypeRequiredDescription
successbooleannoSuccess.
querystringyesQuery.
scopestring or nullnoScope.
semantic_enabledbooleannoSemantic Enabled.
limitintegeryesLimit.
offsetintegeryesOffset.
totalintegeryesTotal.
countintegeryesNumber of count.
groupsarray of McpCrossServerCapabilityServerGroupnoGroups.

McpDigestConfigResponse​

Response model for the tenant's digest configuration.

PropertyTypeRequiredDescription
enabledbooleanyesWhether the resource is active.
cadenceSecondsinteger or nullnoCadence Seconds.
effectiveCadenceSecondsintegeryesEffective Cadence Seconds.
sendEmptybooleanyesSend Empty.
lastDigestAtstring (date-time) or nullnoLast Digest At.

McpDigestConfigUpdate​

Request body for PUT /digest/config — the tenant's digest preferences.

Attributes: enabled: Opt-in switch. When False the sweep never selects the tenant. cadence_seconds: Per-tenant cadence in seconds, or None to use the global default. send_empty: When True, an empty window still sends an explicit "no changes" digest.

PropertyTypeRequiredDescription
enabledbooleanyesOpt in (True) or out (False) of scheduled digests.
cadenceSecondsinteger or nullnoDigest cadence in seconds; null uses the global default.
sendEmptybooleannoSend an explicit 'no changes' digest when the window is empty.

McpDiscoveryJobListResponse​

Response envelope listing an endpoint's discovery jobs (newest first).

PropertyTypeRequiredDescription
successbooleannoSuccess.
jobsarray of McpDiscoveryJobOutyesJobs.

McpDiscoveryJobResponse​

Response envelope for a single discovery job (trigger + poll).

PropertyTypeRequiredDescription
successbooleannoSuccess.
deduplicatedboolean or nullnoDeduplicated.
jobMcpDiscoveryJobOutyesJob.

McpDiscoveryJobStatusListResponse​

Response envelope listing an endpoint's discovery-job snapshots (newest first).

PropertyTypeRequiredDescription
successbooleannoSuccess.
jobsarray of McpDiscoveryJobStatusyesJobs.

McpDiscoveryJobStatusResponse​

Response envelope for a single discovery-job status snapshot.

PropertyTypeRequiredDescription
successbooleannoSuccess.
jobMcpDiscoveryJobStatusyesJob.

McpDuplicateReportResponse​

Advisory duplicate review list for the caller's catalog.

PropertyTypeRequiredDescription
successbooleannoSuccess.
advisorybooleannoAdvisory.
group_countintegeryesNumber of group.
flagged_endpoint_countintegeryesNumber of flagged endpoint.
groupsarray of McpDuplicateGroupyesGroups.
cross_tenant_hintsarray of McpDuplicateCrossTenantHintnoCross Tenant Hints.

McpEndpointCreate​

Register an external MCP server in a tenant's catalog (MCAT-3.1).

name and endpoint_url are required; transport defaults to streamable_http (the most common HTTP transport). slug is optional — when omitted it is auto-derived from name and made unique within the tenant. Accepts both camelCase and snake_case keys so UI and CLI can share this model.

PropertyTypeRequiredDescription
namestringyesHuman-readable name.
endpointUrlstringyesEndpoint URL.
transportstringnoTransport.
slugstring or nullnoURL-safe identifier.
descriptionstring or nullnoFree-text description.
categorystring or nullnoClassification category for the primitive type.
visibilitystringnoVisibility.
discoveryCadenceSecondsinteger or nullnoDiscovery Cadence Seconds.

McpEndpointDeleteResponse​

Outcome of soft-deleting a catalog endpoint (V2-MCP-17.5 / MCAT-3.5).

The endpoint row is retired with a deleted_at stamp (so it disappears from browse but keeps its slug reserved), while its child data is purged: credentials_purged reports whether a stored credential row was dropped — the security-critical part of the teardown — and versions_deleted / jobs_deleted count the version snapshots (with their cascaded capability items, change logs and scores) and discovery jobs removed.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
credentials_purgedbooleannoCredentials Purged.
versions_deletedintegernoVersions Deleted.
jobs_deletedintegernoJobs Deleted.

McpEndpointDigestResponse​

The "changed since last view" digest for one user + endpoint (V2-MCP-30.5 / MCAT-16.5).

Summarizes what changed on the endpoint's surface between the version the user last saw (their mcp_endpoint_views seen-marker) and its current version, and how breaking that change is:

  • new_to_you — the user has no recorded marker (first visit), or the version they last saw has since been pruned (a NULL pointer). There is no "since" point to diff from, so changes is empty and current_type_counts describes the surface they are seeing fresh.
  • has_changes — a marker exists and points at an older snapshot than the current one, so changes / change_counts / severity_counts describe the delta since it.
  • Neither flag set — the user has already seen the current version; the endpoint is up to date.

Reading the digest does not advance the marker; a separate view-record call (POST …/views) does, so the digest reflects the pre-advance state on load.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
new_to_youbooleannoNew To You.
has_changesbooleannoWhether changes.
last_seen_version_idstring or nullnoLast Seen Version ID.
last_seen_version_seqinteger or nullnoLast Seen Version Seq.
last_seen_atstring or nullnoLast Seen At timestamp (ISO 8601).
current_version_idstring or nullnoCurrent Version ID.
current_version_seqinteger or nullnoCurrent Version Seq.
current_version_tagstring or nullnoCurrent Version Tag.
current_type_countsMcpTypeCountsOutnoCurrent Type Counts.
change_countsMcpVersionChangeCountsnoChange Counts.
severity_countsMcpChangeSeverityCountsnoSeverity Counts.
changesarray of McpVersionChangeOutnoChanges.

McpEndpointListResponse​

McpEndpointListResponse schema.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpointsarray of McpEndpointOutyesEndpoints.

McpEndpointNoteCreate​

Body for creating a cataloger note.

PropertyTypeRequiredDescription
bodystringyesBody.

McpEndpointNoteListResponse​

Envelope for a cataloger-notes list.

PropertyTypeRequiredDescription
successbooleannoSuccess.
notesarray of McpEndpointNoteOutnoNotes.

McpEndpointNoteOut​

One cataloger note on an MCP endpoint (human commentary, not server-reported data).

PropertyTypeRequiredDescription
idstringyesStable resource identifier.
endpointIdstringyesEndpoint ID.
bodystringyesBody.
createdBystringyesCreated By.
createdByNamestring or nullnoCreated By Name.
createdByEmailstring or nullnoCreated By Email.
updatedBystring or nullnoUpdated By.
updatedByNamestring or nullnoUpdated By Name.
updatedByEmailstring or nullnoUpdated By Email.
createdAtstring (date-time)yesCreated At.
updatedAtstring (date-time)yesUpdated At.

McpEndpointNoteUpdate​

Patch body for updating a cataloger note.

PropertyTypeRequiredDescription
bodystring or nullnoBody.

McpEndpointResponse​

McpEndpointResponse schema.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpointMcpEndpointOutyesEndpoint.

McpEndpointTestRequest​

Invoke one cataloged capability against its live MCP server and report the result.

Names the capability to exercise on the endpoint's current discovered surface and the arguments to call it with. item_type selects the invocation method (tool → tools/call, resource → resources/read, prompt → prompts/get); item_name is the capability's discovered name (for a resource, its name — the route resolves it to the stored concrete uri). arguments is validated against a tool's stored inputSchema (and a prompt's required arguments) before the call leaves the server.

auth_override supplies an ephemeral credential for this one call only (never persisted); when omitted the endpoint's stored credential is used. timeout_seconds bounds each request in the connect → handshake → invoke sequence.

PropertyTypeRequiredDescription
itemTypestringyesThe capability kind to invoke: 'tool', 'resource', or 'prompt'.
itemNamestringyesThe discovered capability name (a resource's name resolves to its uri).
argumentsobjectnoCall arguments; validated against a tool's stored inputSchema.
authOverrideMcpAuthOverride or nullnoEphemeral credential for this call only (never persisted).
timeoutSecondsnumbernoPer-request timeout in seconds for the test call (1-120).
confirmbooleannoExplicit acknowledgement required to invoke a tool whose annotations flag it as destructive (destructiveHint) or open-world (openWorldHint). Ignored for safe tools.

McpEndpointTestResponse​

The outcome of one test-harness invocation: content, error, and latency.

A single shape covers the three outcomes the invocation service distinguishes, branchable on two booleans (see :class:app.mcp_invoke.InvocationResult):

  • completed=True, is_error=False — the call ran and succeeded; content holds the result.
  • completed=True, is_error=True — the call ran but the tool reported a tool-level error (tools/call only); content holds the error payload the tool produced.
  • completed=False — the call failed (a JSON-RPC protocol error or a transport/handshake failure); error carries the classified reason and content is empty.

auth_override_applied records whether the call used an ephemeral override (True) or the endpoint's stored credential (False); the secret itself is never included either way.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpointIdstringyesEndpoint ID.
itemTypestringyesItem Type.
itemNamestringyesItem Name.
methodstringyesThe JSON-RPC method invoked (e.g. 'tools/call').
targetstringyesWhat was invoked: a tool/prompt name, or a resource uri.
completedbooleanyesTrue when the server returned a JSON-RPC result (success or tool error).
isErrorbooleanyesTrue when a tool ran but reported a tool-level error (tools/call only).
contentarray of objectnoReturned payload items (tool content / resource contents / prompt messages).
structuredContentobject or nullnoA tool's optional structuredContent object, when present.
latencyMsnumberyesRound-trip wall-clock in ms (connect + handshake + invoke).
errorobject or nullnoThe classified failure when completed is False; null otherwise.
authOverrideAppliedbooleannoTrue when an ephemeral auth override was used instead of stored credentials.
invocationIdstring or nullnoId of the persisted mcp_test_invocations log row, or null if logging failed.

McpEndpointUpdate​

Patch mutable fields on a catalog endpoint (MCAT-3.1).

Every field is optional; only the keys present in the request body are applied. slug is intentionally not patchable here — it is derived on create and stable thereafter so existing references do not break.

PropertyTypeRequiredDescription
namestring or nullnoHuman-readable name.
endpointUrlstring or nullnoEndpoint URL.
transportstring or nullnoTransport.
descriptionstring or nullnoFree-text description.
categorystring or nullnoClassification category for the primitive type.
visibilitystring or nullnoVisibility.
publishedboolean or nullnoPublished.
enabledboolean or nullnoWhether the resource is active.
discoveryCadenceSecondsinteger or nullnoDiscovery Cadence Seconds.

McpEndpointVersionListResponse​

Response envelope for an endpoint's version history (newest first).

PropertyTypeRequiredDescription
successbooleannoSuccess.
versionsarray of McpEndpointVersionSummaryyesVersions.

McpEndpointVersionResponse​

Response envelope for a single version's full surface.

PropertyTypeRequiredDescription
successbooleannoSuccess.
versionMcpEndpointVersionDetailyesVersion.

McpEndpointViewMarkRequest​

Body for advancing a user's seen-marker (V2-MCP-30.5 / MCAT-16.5).

version_id is the snapshot the client acknowledges having seen — normally the endpoint's current version, passed explicitly so the marker records exactly what the user saw even if a discovery advances "current" between the digest read and this call. When omitted the server marks the endpoint's current version.

PropertyTypeRequiredDescription
version_idstring or nullnoProject version identifier or semantic version label, depending on context.

McpEndpointViewResponse​

Response for a recorded view: the advanced seen-marker (V2-MCP-30.5 / MCAT-16.5).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
last_seen_version_idstring or nullnoLast Seen Version ID.
seen_atstring or nullnoSeen At timestamp (ISO 8601).

McpFacetedSearchResponse​

Response envelope of the faceted catalog search (MCAT-21.1).

endpoints is the requested page of matches (browse-shaped rows, each carrying its facet fields), count its length, and total the full match count across pages. facets holds the live bucket counts over the same filtered set, so the counts always describe exactly the result the filters produced. An empty match is a valid response — empty page, zero total, empty buckets — never an error.

PropertyTypeRequiredDescription
successbooleannoSuccess.
totalintegernoTotal.
countintegernoNumber of count.
limitintegeryesLimit.
offsetintegeryesOffset.
endpointsarray of McpBrowseEndpointOutnoEndpoints.
facetsMcpCatalogFacetsOutnoFacets.

McpFreshnessReportResponse​

Freshness report over the caller's catalog — only non-fresh endpoints are listed.

PropertyTypeRequiredDescription
successbooleannoSuccess.
default_cadence_secondsintegeryesDefault Cadence Seconds.
flagged_endpoint_countintegeryesNumber of flagged endpoint.
endpointsarray of McpFreshnessEndpointOutyesEndpoints.

McpInsightCatalogResponse​

Response envelope for the tenant-wide catalog insight roll-up (feeds 18.1).

Spans every live endpoint the caller's tenant owns: how many there are, how many are published / discovered, the per-kind capability type_counts summed across every endpoint's current surface, the average_score over scored current versions, and the A-F grade_distribution.

The composition breakdowns power the catalog analytics dashboard's tiles: category_distribution / transport_distribution / protocol_version_distribution / discovery_health (labelled buckets, busiest first), tool_count_distribution (a fixed-bucket histogram of per-endpoint tool counts), change_leaders (the most-churned endpoints), and top_capabilities (the most widely exposed capability names). All default to empty, so an empty catalog yields an all-empty — never a 500 — body.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_countintegernoNumber of endpoint.
published_countintegernoNumber of published.
public_countintegernoNumber of public.
private_countintegernoNumber of private.
discovered_countintegernoNumber of discovered.
scored_countintegernoNumber of scored.
average_scorenumber or nullnoAverage Score.
type_countsMcpTypeCountsOutyesType Counts.
grade_distributionmap of integernoGrade Distribution.
category_distributionarray of McpCatalogBucketOutnoCategory Distribution.
transport_distributionarray of McpCatalogBucketOutnoTransport Distribution.
protocol_version_distributionarray of McpCatalogBucketOutnoProtocol Version Distribution.
tool_count_distributionarray of McpCatalogBucketOutnoTool Count Distribution.
discovery_healtharray of McpCatalogBucketOutnoDiscovery Health.
change_leadersarray of McpCatalogLeaderOutnoChange Leaders.
top_capabilitiesarray of McpCatalogCapabilityOutnoTop Capabilities.

McpInsightEvolutionResponse​

Response envelope for an endpoint's evolution series (oldest snapshot first).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
seriesarray of McpEvolutionPointnoSeries.

McpInsightGraphResponse​

Response envelope for the capability relationship graph of one version snapshot.

Carries the resolved snapshot identity (version_id / version_seq / version_tag and whether it is the endpoint's is_current surface) alongside the inferred graph (nodes and concrete-signal edges) for that surface.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
version_idstringyesProject version identifier or semantic version label, depending on context.
version_seqintegeryesVersion Seq.
version_tagstring or nullnoVersion Tag.
is_currentbooleannoWhether current.
graphMcpCapabilityGraphOutyesGraph.

McpInsightPercentileResponse​

Response envelope for an endpoint's peer percentile & category ranking (MCAT-18.3).

Ranks the endpoint against the other live endpoints in its catalog category on four axes (grade, safety, documentation, latency), so the UI can render "top 10% for documentation"-style badges — a peer baseline, not an absolute grade. A single-member category yields a coherent profile (the sole server is the category leader), and any axis the server has not measured is an explicit gap, so an undiscovered or never-tested endpoint returns a 200, never a 500.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
profileMcpPeerPercentileOutyesProfile.

McpInsightReliabilityResponse​

Response envelope folding an endpoint's discovery and invocation reliability together.

discovery / invocation are the aggregate roll-ups (state tallies, success/error rates, latency); health adds the MCAT-17.1 discovery health timeline — the recent per-job outcome events, a windowed availability percentage, and the endpoint's quarantine / backoff state; tools adds the MCAT-17.2 per-tool latency & error-rate breakdown (p50/p95/p99 and error rate per tool, a latency distribution, and the endpoint-wide totals) over a recent window.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
discoveryMcpDiscoveryReliabilityOutyesDiscovery.
invocationMcpInvocationReliabilityOutyesInvocation.
healthMcpDiscoveryHealthOutyesHealth.
toolsMcpToolInvocationReliabilityOutyesTools.

McpInsightSurfaceResponse​

Response envelope for the capability-surface metrics of one version snapshot.

Carries the resolved snapshot identity (version_id / version_seq / version_tag and whether it is the endpoint's is_current surface) alongside the deterministic metrics roll-up for that surface.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
version_idstringyesProject version identifier or semantic version label, depending on context.
version_seqintegeryesVersion Seq.
version_tagstring or nullnoVersion Tag.
is_currentbooleannoWhether current.
metricsMcpSurfaceMetricsOutyesMetrics.

McpInsightTrustResponse​

Response envelope for an endpoint's composite trust profile radar (MCAT-17.4).

profile carries the five normalized axes (quality, safety, documentation, stability, responsiveness), each 0-100 or an explicit gap, plus the mean of the available axes. It is an explicitly heuristic composite — a synthesized "trust glance", not an official rating. version_id is the current snapshot the surface-derived axes (quality / safety / documentation) were read from, or None when the endpoint has never been discovered; auth_type is the endpoint's configured scheme the safety axis cross-references.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
version_idstring or nullnoProject version identifier or semantic version label, depending on context.
auth_typestring or nullnoAuth Type.
profileMcpTrustProfileOutyesProfile.

McpLintReportResponse​

Server-computed lint score + itemized findings for one MCP version snapshot (#3686).

The MCP catalog analogue of :class:LintReportResponse: the deterministic 0-100 score, its A-F grade, the per-rule/per-severity tallies, the stable report_fingerprint, and every itemized finding for a discovery snapshot's normalized surface. source records whether the report was served from the persisted mcp_version_scores row (stored) or computed live for this request (computed); scored_at is the persisted timestamp (only present when the report came from / was written to storage).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpointIdstringyesEndpoint ID.
versionIdstringyesThe version snapshot's id (mcp_endpoint_versions.id).
versionSeqintegeryesThe snapshot's monotonic sequence number under its endpoint.
versionTagstring or nullnoHuman-readable date/time tag for the snapshot, when present.
scoreintegeryesDeterministic 0-100 quality score.
gradestringyesA-F letter grade derived from the score.
findingsarray of LintFindingOutyesFindings.
ruleHitsmap of integernoCount of findings per rule id (deterministic).
severityCountsmap of integernoCount of findings per severity (error/warning/info).
reportFingerprintstringyesStable hash over score, grade, and findings for a fixed surface.
sourcestringyesWhere the report came from: 'stored' (persisted) or 'computed' (live).
scoredAtstring or nullnoWhen the persisted score was last (re)computed, when applicable.
algorithmIdstring or nullnoMulti-axis scoring algorithm id (CLX-1.2), e.g. clx-axis-v1.
axesarray of LintAxisOut or nullnoPer-axis scores and coverage (CLX-1.2). Null when not evaluated.
compositeScoreinteger or nullnoWeighted composite when required coverage is met; null otherwise.
compositeGradestring or nullnoA-F grade of the composite; null when compositeScore is null.
requiredCoverageMetboolean or nullnoTrue when required axes (v1: quality) are assessed.

McpPostureRulesResponse​

The trust-posture rule catalog, profiles, and OWASP risk catalog (CLX-3.2, #4856).

PropertyTypeRequiredDescription
successbooleannoSuccess.
owaspRevisionstringyesThe OWASP MCP Top 10 revision this rule set's mapping tracks.
profilesarray of McpPostureProfileOutyesProfiles.
rulesarray of McpPostureRuleOutyesRules.
owaspRisksarray of McpOwaspRiskOutyesOwasp Risks.

McpSavedSearchCreate​

Request body for creating a saved search.

PropertyTypeRequiredDescription
namestringyesHuman-readable name.
filtersMcpSavedSearchFiltersOutnoFilters.
querystringnoQuery.
sortstringnoSort.
isPinnedbooleannoIs Pinned.

McpSavedSearchListResponse​

Envelope for listing saved searches.

PropertyTypeRequiredDescription
successbooleannoSuccess.
searchesarray of McpSavedSearchOutnoSearches.

McpSavedSearchOut​

One saved catalog search owned by the caller.

PropertyTypeRequiredDescription
idstringyesStable resource identifier.
namestringyesHuman-readable name.
filtersMcpSavedSearchFiltersOutyesFilters.
querystringnoQuery.
sortstringnoSort.
isPinnedbooleannoIs Pinned.
createdAtstring (date-time)yesCreated At.
updatedAtstring (date-time)yesUpdated At.

McpSavedSearchRunResponse​

Saved search definition plus the faceted result of running its facet-compatible filters.

PropertyTypeRequiredDescription
successbooleannoSuccess.
searchMcpSavedSearchOutyesSearch.
resultMcpFacetedSearchResponseyesResult.

McpSavedSearchUpdate​

Request body for patching a saved search (all fields optional).

PropertyTypeRequiredDescription
namestring or nullnoHuman-readable name.
filtersMcpSavedSearchFiltersOut or nullnoFilters.
querystring or nullnoQuery.
sortstring or nullnoSort.
isPinnedboolean or nullnoIs Pinned.

McpSbomAttachRequest​

Request to attach a CycloneDX/SPDX SBOM to a linked source (CLX-3.2, #4856).

The document is read for component coordinates only — name / version / purl / license. Source and file contents are never extracted or stored; the SBOM model has no field for them.

PropertyTypeRequiredDescription
documentobjectyesA parsed CycloneDX (with 'bomFormat') or SPDX (with 'spdxVersion') document.
subject_digeststring or nullnoThe artifact digest this inventory describes. Defaults to the source's own pinned digest; required when the source is not pinned, since an inventory must name the specific artifact it inventories.

McpSbomOut​

The dependency inventory of a source artifact — coordinates only (CLX-3.2, #4856).

PropertyTypeRequiredDescription
successbooleannoSuccess.
sourceIdstringyesSource ID.
subjectDigeststringyesSubject Digest.
sbomFormatstringyesSbom Format.
originstringyesoperator_supplied (authoritative) | manifest_derived (best-effort).
componentCountintegeryesNumber of component.
sbomFingerprintstring or nullnoSbom Fingerprint.
authoritativebooleanyesWhether this inventory came from a real SBOM rather than lockfile derivation.

McpSearchResponse​

Response envelope for a catalog search — ranked hits plus the echoed query/scope (MCAT-9.2).

PropertyTypeRequiredDescription
successbooleannoSuccess.
querystringyesQuery.
scopestring or nullnoScope.
limitintegeryesLimit.
offsetintegeryesOffset.
countintegeryesNumber of count.
hitsarray of McpSearchHityesHits.

McpServerDigestGenerateResponse​

Response envelope for the gated digest generation step (MCAT-18.5).

Extends :class:McpServerDigestResponse with the outcome of a POST …/insight/digest/generate: generated is true only when the model actually produced (and cached) a digest on this call; from_cache is true when an already-cached digest for the current surface was returned without calling the model. When the feature flag is off, no API key is configured, the surface has nothing to summarize, or the model call fails, generated is false and detail explains why — always a 200 describing the no-op, never an error.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
version_idstring or nullnoProject version identifier or semantic version label, depending on context.
surface_fingerprintstring or nullnoSurface Fingerprint.
ai_digest_enabledbooleannoAi Digest Enabled.
ai_generatedbooleannoAi Generated.
digeststring or nullnoDigest.
modelstring or nullnoModel.
generated_atstring or nullnoGenerated At timestamp (ISO 8601).
tool_countintegernoNumber of tool.
examplesarray of McpToolExampleOutnoExamples.
generatedbooleannoGenerated.
from_cachebooleannoFrom Cache.
detailstringnoDetail.

McpServerDigestResponse​

Response envelope for an endpoint's natural-language digest + usage examples (MCAT-18.5).

Pairs an AI-generated plain-language summary of the server (digest — clearly labelled AI content, null until generated) with one deterministic, schema-derived example call per tool (examples — always present, computed offline from the current surface, never requiring the model or tool execution). ai_digest_enabled reflects the APIOME_MCP_AI_DIGEST_ENABLED feature flag so the UI knows whether a "generate" action is available. The digest is cached per surface_fingerprint and regenerated when the surface changes; model / generated_at record the provenance of a cached digest. A never-discovered endpoint yields empty examples and a null digest — a 200, never a 500.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
version_idstring or nullnoProject version identifier or semantic version label, depending on context.
surface_fingerprintstring or nullnoSurface Fingerprint.
ai_digest_enabledbooleannoAi Digest Enabled.
ai_generatedbooleannoAi Generated.
digeststring or nullnoDigest.
modelstring or nullnoModel.
generated_atstring or nullnoGenerated At timestamp (ISO 8601).
tool_countintegernoNumber of tool.
examplesarray of McpToolExampleOutnoExamples.

McpSimilarReindexResponse​

Response envelope for the similar-servers embedding backfill (MCAT-18.4).

Records the outcome of (re)computing and storing this endpoint's current-snapshot capability embedding for the semantic similarity signal. embeddings_enabled reflects the feature flag; reindexed is true only when an embedding was actually generated and stored. When the flag is off, the endpoint has no discovered surface, or the embedding service / pgvector is unavailable, reindexed is false and detail explains why — always a 200 describing the no-op, never an error.

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
embeddings_enabledbooleannoEmbeddings Enabled.
reindexedbooleannoReindexed.
version_idstring or nullnoProject version identifier or semantic version label, depending on context.
detailstringnoDetail.

McpSimilarServersResponse​

Response envelope for an endpoint's "similar servers" discovery (MCAT-18.4).

Surfaces "servers like this one" from two independent signals, each ranked against the caller's own live catalog: overlap — always present — ranks peers by capability-name Jaccard overlap; semantic ranks peers by cosine nearest-neighbour over a capability embedding, and is only populated when embeddings_enabled is true (the flag is on and both this endpoint and at least one peer have a backfilled embedding). When embeddings are disabled or unbackfilled, embeddings_enabled is false and semantic is empty — the feature gracefully falls back to overlap-only, never a 500. target_capability_count is this endpoint's own distinct capability-name count (0 when it was never discovered, in which case overlap is empty too).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpoint_idstringyesEndpoint ID.
embeddings_enabledbooleannoEmbeddings Enabled.
target_capability_countintegernoNumber of target capability.
overlaparray of McpSimilarOverlapNeighborOutnoOverlap.
semanticarray of McpSimilarEmbeddingNeighborOutnoSemantic.

McpSourceLinkRequest​

Request to link a source artifact to an MCP endpoint (CLX-3.2, #4856).

PropertyTypeRequiredDescription
source_kindstringyesgit | package | image | registry.
referencestringyesThe source reference. A git remote URL, a Package URL, an OCI image reference, or an MCP registry server id — meaning depends on source_kind.
revisionstring or nullnoFor git, the branch / tag / commit sha. A full 40-hex commit pins the source; a branch or tag leaves it a moving reference (verification_state 'unverified').
provenancestringnoHow this association is known: operator_declared | registry_published | discovery_advertised | attested. Never inferred.

McpSourceListResponse​

An endpoint's linked source associations (CLX-3.2, #4856).

PropertyTypeRequiredDescription
successbooleannoSuccess.
endpointIdstringyesEndpoint ID.
sourcesarray of McpSourceOutyesSources.

McpSourceResponse​

A single linked source association (CLX-3.2, #4856).

PropertyTypeRequiredDescription
successbooleannoSuccess.
sourceMcpSourceOutyesProvenance source for the record (for example human or imported).

McpSurfaceLintRulesResponse​

MCP surface-lint rule catalog (CLX-4.3, #4861).

PropertyTypeRequiredDescription
successbooleannoSuccess.
transparencyRevisionstringyesRevision of the blocking-rule transparency catalog.
docsPagestringyesRepository-relative docs page for MCP surface lint rules.
rulesarray of McpSurfaceLintRuleOutyesRules.
countintegeryesNumber of count.

McpVersionChangesResponse​

Response envelope for a version's stored previous → this change report.

PropertyTypeRequiredDescription
successbooleannoSuccess.
version_idstringyesProject version identifier or semantic version label, depending on context.
version_seqintegeryesVersion Seq.
countsMcpVersionChangeCountsyesCounts.
changesarray of McpVersionChangeOutyesChanges.

McpVersionCompareResponse​

On-demand structured diff between any two versions, normalized older→newer.

base/target are returned in chronological order regardless of the order they were requested, so added/removed always read relative to the older surface. fingerprint_changed is False exactly when the two surfaces are semantically identical (equal fingerprints) — including base == target, which yields an empty diff.

PropertyTypeRequiredDescription
successbooleannoSuccess.
baseMcpVersionRefyesBase.
targetMcpVersionRefyesTarget.
fingerprint_changedbooleanyesFingerprint Changed.
countsMcpVersionChangeCountsyesCounts.
changesarray of McpVersionChangeOutyesChanges.