create_project
Initialize a new project in QuantConnect by specifying a unique name, programming language, and optional organization ID. Organizes and structures your algorithmic trading strategies efficiently.
Instructions
Create a new project in your QuantConnect organization.
Args: name: Project name (must be unique within organization) language: Programming language - "C#" or "Py" (default: "Py") organization_id: Optional organization ID (uses default if not specified)
Returns: Dictionary containing project creation result with project details
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Py | |
| name | Yes | ||
| organization_id | No |
Implementation Reference
- The core handler function decorated with @mcp.tool() that implements the create_project tool logic: authenticates user, validates inputs, calls QuantConnect API to create project, handles responses and errors.@mcp.tool() async def create_project( name: str, language: str = "Py", organization_id: Optional[str] = None ) -> Dict[str, Any]: """ Create a new project in your QuantConnect organization. Args: name: Project name (must be unique within organization) language: Programming language - "C#" or "Py" (default: "Py") organization_id: Optional organization ID (uses default if not specified) Returns: Dictionary containing project creation result with project details """ auth = get_auth_instance() if auth is None: return { "status": "error", "error": "QuantConnect authentication not configured. Use configure_auth() first.", } # Validate language parameter valid_languages = ["C#", "Py"] if language not in valid_languages: return { "status": "error", "error": f"Invalid language '{language}'. Must be one of: {valid_languages}", } try: # Prepare request data request_data = {"name": name, "language": language} # Add organization ID if provided, otherwise use the auth instance's default if organization_id: request_data["organizationId"] = organization_id elif auth.organization_id: request_data["organizationId"] = auth.organization_id # Make API request response = await auth.make_authenticated_request( endpoint="projects/create", method="POST", json=request_data ) # Parse response if response.status_code == 200: data = response.json() if data.get("success", False): # Extract project info from the response projects = data.get("projects", []) if projects: # The newly created project should be in the list created_project = None for project in projects: if ( project.get("name") == name and project.get("language") == language ): created_project = project break if created_project: return { "status": "success", "project": created_project, "message": f"Successfully created project '{name}' with {language} language", } # Fallback response if project not found in list return { "status": "success", "project": { "name": name, "language": language, "organizationId": request_data.get("organizationId"), }, "message": f"Successfully created project '{name}' with {language} language", "note": "Full project details not available in response", } else: # API returned success=false errors = data.get("errors", ["Unknown error"]) return { "status": "error", "error": "Project creation failed", "details": errors, "api_response": data, } elif response.status_code == 401: return { "status": "error", "error": "Authentication failed. Check your credentials and ensure they haven't expired.", } else: return { "status": "error", "error": f"API request failed with status {response.status_code}", "response_text": ( response.text[:500] if hasattr(response, "text") else "No response text" ), } except Exception as e: return { "status": "error", "error": f"Failed to create project: {str(e)}", "project_name": name, "language": language, }
- Input schema defined by type hints and comprehensive docstring describing parameters, validation, and return type.async def create_project( name: str, language: str = "Py", organization_id: Optional[str] = None ) -> Dict[str, Any]: """ Create a new project in your QuantConnect organization. Args: name: Project name (must be unique within organization) language: Programming language - "C#" or "Py" (default: "Py") organization_id: Optional organization ID (uses default if not specified) Returns: Dictionary containing project creation result with project details """
- quantconnect_mcp/main.py:46-52 (registration)Entry point where register_project_tools(mcp) is called, which defines and registers the create_project tool using FastMCP decorator.safe_print("🔧 Registering QuantConnect tools...") register_auth_tools(mcp) register_project_tools(mcp) register_file_tools(mcp) register_backtest_tools(mcp) register_live_tools(mcp) register_optimization_tools(mcp)