Source code for oas2mcp.agent.surface.context
"""Deterministic context builders for the catalog surface planner agent."""
from __future__ import annotations
from oas2mcp.agent.surface.models import (
CatalogSurfaceOperationContext,
CatalogSurfacePlanningContext,
CatalogSurfacePromptPlan,
CatalogSurfaceResourcePlan,
)
from oas2mcp.generate.models import EnhancedCatalog
from oas2mcp.generate.surface_defaults import (
build_default_catalog_prompt_definitions,
build_default_catalog_resource_definitions,
build_default_server_instructions,
)
[docs]
def build_catalog_surface_planning_context(
enhanced_catalog: EnhancedCatalog,
) -> CatalogSurfacePlanningContext:
"""Build deterministic context for catalog-level FastMCP surface planning."""
default_prompts = [
CatalogSurfacePromptPlan.model_validate(prompt.model_dump())
for prompt in build_default_catalog_prompt_definitions(enhanced_catalog)
]
default_resources = [
CatalogSurfaceResourcePlan.model_validate(resource.model_dump())
for resource in build_default_catalog_resource_definitions(enhanced_catalog)
]
return CatalogSurfacePlanningContext(
catalog_name=enhanced_catalog.catalog_name,
catalog_slug=enhanced_catalog.catalog_slug,
catalog_version=enhanced_catalog.catalog_version,
source_uri=enhanced_catalog.source_url,
api_purpose=enhanced_catalog.summary.api_purpose,
conceptual_overview=enhanced_catalog.summary.conceptual_overview,
authentication_summary=enhanced_catalog.summary.authentication_summary,
recommended_mcp_surface=enhanced_catalog.summary.recommended_mcp_surface,
primary_domains=[
domain.tag_name for domain in enhanced_catalog.summary.primary_domains
],
suggested_tool_domains=enhanced_catalog.summary.suggested_tool_domains,
suggested_resource_domains=enhanced_catalog.summary.suggested_resource_domains,
catalog_notes=[
*enhanced_catalog.summary.notes,
*enhanced_catalog.summary.operational_notes,
*enhanced_catalog.notes,
],
operations=[
CatalogSurfaceOperationContext(
operation_slug=operation.operation_slug,
operation_id=operation.operation_id,
final_kind=operation.final_kind,
namespace=operation.namespace,
title=operation.title,
description=operation.description,
tool_name=operation.tool_name,
resource_uri=operation.resource_uri,
requires_confirmation=operation.requires_confirmation,
auth_notes=operation.auth_notes,
prompt_template_names=[
prompt_template.name
for prompt_template in operation.prompt_templates
],
)
for operation in enhanced_catalog.operations
],
default_server_instructions=build_default_server_instructions(enhanced_catalog),
default_catalog_prompts=default_prompts,
default_catalog_resources=default_resources,
)