diff --git a/.gitignore b/.gitignore index 7cf97c0d0..e5e5950ea 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,8 @@ __pypackages__/ # Environments .env +.env.* +*.crt .envrc *.crt *.key diff --git a/libs/cli/generate_schema.py b/libs/cli/generate_schema.py index 750496939..34255473a 100644 --- a/libs/cli/generate_schema.py +++ b/libs/cli/generate_schema.py @@ -23,6 +23,8 @@ from langgraph_cli.schemas import ( GraphDef, HttpConfig, IndexConfig, + McpConfig, + McpTasksConfig, SecurityConfig, SerdeConfig, StoreConfig, @@ -115,6 +117,8 @@ def add_descriptions_to_schema(schema, cls): AuthConfig, SecurityConfig, HttpConfig, + McpConfig, + McpTasksConfig, CorsConfig, CacheConfig, ThreadTTLConfig, diff --git a/libs/cli/langgraph_cli/schemas.py b/libs/cli/langgraph_cli/schemas.py index 5a00fc673..8c6d41d4b 100644 --- a/libs/cli/langgraph_cli/schemas.py +++ b/libs/cli/langgraph_cli/schemas.py @@ -439,6 +439,24 @@ class ConfigurableHeaderConfig(TypedDict, total=False): """ +class McpTasksConfig(TypedDict, total=False): + """Settings for authenticated MCP elicitation tasks.""" + + poll_interval_ms: int + """Suggested client polling interval, in milliseconds. Default 1000; range 100–60000.""" + ttl_minutes: int + """Maximum task lifetime, in minutes. Default 1440; range 1–10080.""" + completed_grace_seconds: int + """Result retention after completion, in seconds. Default 300; range 1–86400.""" + allow_insecure_urls: bool + """Allow HTTP elicitation URLs for development. Defaults to False; production URLs require HTTPS.""" + + +class McpConfig(TypedDict, total=False): + tasks: McpTasksConfig + """Polling, retention and URL settings for the MCP Tasks extension.""" + + class HttpConfig(TypedDict, total=False): """Configuration for the built-in HTTP server that powers your deployment's routes and endpoints.""" @@ -473,6 +491,8 @@ class HttpConfig(TypedDict, total=False): Default is False. """ + mcp: McpConfig + """Optional. Configure the MCP Tasks extension for elicitation over protocol 2026-07-28.""" disable_a2a: bool """Optional. If `True`, /a2a routes are removed, disabling default support to expose the deployment as an agent-to-agent (A2A) server. diff --git a/libs/cli/schemas/schema.json b/libs/cli/schemas/schema.json index 6eec6205b..692887bcf 100644 --- a/libs/cli/schemas/schema.json +++ b/libs/cli/schemas/schema.json @@ -1065,6 +1065,10 @@ ], "description": "Optional. Defines which headers are excluded from logging." }, + "mcp": { + "$ref": "#/$defs/McpConfig", + "description": "Optional. Configure the MCP Tasks extension for elicitation over protocol 2026-07-28." + }, "middleware_order": { "anyOf": [ { @@ -1170,6 +1174,42 @@ }, "required": [] }, + "McpConfig": { + "title": "McpConfig", + "type": "object", + "properties": { + "tasks": { + "$ref": "#/$defs/McpTasksConfig", + "description": "Polling, retention and URL settings for the MCP Tasks extension." + } + }, + "required": [], + "description": "dict() -> new empty dictionary\ndict(mapping) -> new dictionary initialized from a mapping object's\n (key, value) pairs\ndict(iterable) -> new dictionary initialized as if via:\n d = {}\n for k, v in iterable:\n d[k] = v\ndict(**kwargs) -> new dictionary initialized with the name=value pairs\n in the keyword argument list. For example: dict(one=1, two=2)" + }, + "McpTasksConfig": { + "title": "McpTasksConfig", + "description": "Settings for authenticated MCP elicitation tasks.", + "type": "object", + "properties": { + "allow_insecure_urls": { + "type": "boolean", + "description": "Allow HTTP elicitation URLs for development. Defaults to False; production URLs require HTTPS." + }, + "completed_grace_seconds": { + "type": "integer", + "description": "Result retention after completion, in seconds. Default 300; range 1\u201386400." + }, + "poll_interval_ms": { + "type": "integer", + "description": "Suggested client polling interval, in milliseconds. Default 1000; range 100\u201360000." + }, + "ttl_minutes": { + "type": "integer", + "description": "Maximum task lifetime, in minutes. Default 1440; range 1\u201310080." + } + }, + "required": [] + }, "UvSource": { "title": "UvSource", "description": "Deployment source rooted at a uv project or workspace.", diff --git a/libs/cli/schemas/schema.v0.json b/libs/cli/schemas/schema.v0.json index 6eec6205b..692887bcf 100644 --- a/libs/cli/schemas/schema.v0.json +++ b/libs/cli/schemas/schema.v0.json @@ -1065,6 +1065,10 @@ ], "description": "Optional. Defines which headers are excluded from logging." }, + "mcp": { + "$ref": "#/$defs/McpConfig", + "description": "Optional. Configure the MCP Tasks extension for elicitation over protocol 2026-07-28." + }, "middleware_order": { "anyOf": [ { @@ -1170,6 +1174,42 @@ }, "required": [] }, + "McpConfig": { + "title": "McpConfig", + "type": "object", + "properties": { + "tasks": { + "$ref": "#/$defs/McpTasksConfig", + "description": "Polling, retention and URL settings for the MCP Tasks extension." + } + }, + "required": [], + "description": "dict() -> new empty dictionary\ndict(mapping) -> new dictionary initialized from a mapping object's\n (key, value) pairs\ndict(iterable) -> new dictionary initialized as if via:\n d = {}\n for k, v in iterable:\n d[k] = v\ndict(**kwargs) -> new dictionary initialized with the name=value pairs\n in the keyword argument list. For example: dict(one=1, two=2)" + }, + "McpTasksConfig": { + "title": "McpTasksConfig", + "description": "Settings for authenticated MCP elicitation tasks.", + "type": "object", + "properties": { + "allow_insecure_urls": { + "type": "boolean", + "description": "Allow HTTP elicitation URLs for development. Defaults to False; production URLs require HTTPS." + }, + "completed_grace_seconds": { + "type": "integer", + "description": "Result retention after completion, in seconds. Default 300; range 1\u201386400." + }, + "poll_interval_ms": { + "type": "integer", + "description": "Suggested client polling interval, in milliseconds. Default 1000; range 100\u201360000." + }, + "ttl_minutes": { + "type": "integer", + "description": "Maximum task lifetime, in minutes. Default 1440; range 1\u201310080." + } + }, + "required": [] + }, "UvSource": { "title": "UvSource", "description": "Deployment source rooted at a uv project or workspace.",