create_project_collaborator
Add collaborators to QuantConnect projects with customizable permissions for write access and live control.
Instructions
Add a collaborator to a project.
Args: project_id: ID of the project to add collaborator to collaborator_user_id: User ID of the user to add as collaborator (from profile URL) collaboration_write: Grant write permission (default: True) collaboration_live_control: Grant live control permission (default: False)
Returns: Dictionary containing collaborator addition result
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| collaborator_user_id | Yes | ||
| collaboration_write | No | ||
| collaboration_live_control | No |
Implementation Reference
- The core handler function for the 'create_project_collaborator' tool. It is a nested async function decorated with @mcp.tool() inside register_project_tools. Handles authentication, prepares API request to QuantConnect's projects/collaboration/create endpoint, and processes the response.@mcp.tool() async def create_project_collaborator( project_id: int, collaborator_user_id: str, collaboration_write: bool = True, collaboration_live_control: bool = False ) -> Dict[str, Any]: """ Add a collaborator to a project. Args: project_id: ID of the project to add collaborator to collaborator_user_id: User ID of the user to add as collaborator (from profile URL) collaboration_write: Grant write permission (default: True) collaboration_live_control: Grant live control permission (default: False) Returns: Dictionary containing collaborator addition result """ auth = get_auth_instance() if auth is None: return { "status": "error", "error": "QuantConnect authentication not configured. Use configure_auth() first.", } try: # Prepare request data request_data = { "projectId": project_id, "collaboratorUserId": collaborator_user_id, "collaborationWrite": collaboration_write, "collaborationLiveControl": collaboration_live_control, } # Make API request response = await auth.make_authenticated_request( endpoint="projects/collaboration/create", method="POST", json=request_data ) # Parse response if response.status_code == 200: data = response.json() if data.get("success", False): return { "status": "success", "project_id": project_id, "collaborator_user_id": collaborator_user_id, "collaboration_write": collaboration_write, "collaboration_live_control": collaboration_live_control, "message": f"Successfully added collaborator {collaborator_user_id} to project {project_id}", } else: # API returned success=false errors = data.get("errors", ["Unknown error"]) return { "status": "error", "error": "Failed to add project collaborator", "details": errors, "project_id": project_id, "collaborator_user_id": collaborator_user_id, } 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 add project collaborator: {str(e)}", "project_id": project_id, "collaborator_user_id": collaborator_user_id, }
- quantconnect_mcp/main.py:48-48 (registration)Registration call in the main entry point that invokes register_project_tools(mcp), which defines and registers the create_project_collaborator tool via its @mcp.tool() decorator.register_project_tools(mcp)
- quantconnect_mcp/src/server.py:75-75 (registration)Alternative registration call in server.py that registers the project tools including create_project_collaborator.register_project_tools(mcp)