59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
# SPDX-FileCopyrightText: 2026 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
"""
|
|
CLI command handler for running the MCP server in background mode.
|
|
|
|
Started via ``blender --background file.blend --command blender_mcp``.
|
|
"""
|
|
|
|
__all__ = (
|
|
"cli_execute",
|
|
)
|
|
|
|
import argparse
|
|
|
|
from . import execute_blocking
|
|
from . import mcp_to_blender_server
|
|
|
|
|
|
def cli_execute(argv: list[str]) -> int:
|
|
"""
|
|
Block and serve MCP requests until interrupted.
|
|
"""
|
|
parser = argparse.ArgumentParser(
|
|
prog="blender_mcp",
|
|
description=(
|
|
"Start the Blender MCP server. "
|
|
"Deferred responses are not supported in background mode; "
|
|
"each request must complete before returning."
|
|
),
|
|
)
|
|
parser.add_argument(
|
|
"--host",
|
|
default=mcp_to_blender_server.DEFAULT_HOST,
|
|
help="Host to bind to.",
|
|
)
|
|
parser.add_argument(
|
|
"--port",
|
|
type=int,
|
|
default=mcp_to_blender_server.DEFAULT_PORT,
|
|
help="Port to listen on.",
|
|
)
|
|
args = parser.parse_args(argv)
|
|
|
|
try:
|
|
mcp_to_blender_server.start(args.host, args.port)
|
|
except Exception as ex: # pylint: disable=broad-exception-caught
|
|
print("Error: {:s}".format(str(ex)))
|
|
return 1
|
|
|
|
print("MCP server started on {:s}:{:d}, press Ctrl+C to exit.".format(args.host, args.port))
|
|
|
|
try:
|
|
execute_blocking.run()
|
|
finally:
|
|
mcp_to_blender_server.stop()
|
|
return 0
|