create_project
Create a new trading strategy project in QuantConnect by specifying project name, programming language (C# or Python), and optional organization ID.
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 |
|---|---|---|---|
| name | Yes | ||
| language | No | Py | |
| organization_id | No |
Implementation Reference
- The primary handler implementation for the 'create_project' tool. This async function is decorated with @mcp.tool() and handles authentication, input validation, API request to QuantConnect's projects/create endpoint, and response parsing.@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, }
- Type hints and docstring defining the input schema (name: str, language: str='Py', organization_id: Optional[str]) and output as Dict[str, Any] with status, project details, or error information.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/src/tools/project_tools.py:8-11 (registration)The register_project_tools function where @mcp.tool() decorator registers the create_project handler with the FastMCP instance.def register_project_tools(mcp: FastMCP): """Register project management tools with the MCP server.""" @mcp.tool()
- quantconnect_mcp/src/server.py:73-79 (registration)Top-level registration during server startup: call to register_project_tools(mcp) which includes registration of create_project tool.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)