Semantics
Creates a project under a (new or existing) client contact. Seeds milestones and initial tasks from the provider's business-type template (e.g. a design studio gets `kickoff → discovery → design → review → handover`). The returned project_id is the addressable handle for follow-up tools (`list_tasks`, `add_comment`, etc.).
Invariants
- If a client with the same email exists on this tenant, it is reused.
- The project is created in status `planning`. State transitions are owner-driven.
- Default milestones and tasks come from the provider's `business_type` setting; an agent can later add custom tasks via `create_task`.
When to use
When the user has decided to engage with a provider and wants to formalise the engagement. Different from `submit_request` (LeadKit) — that's pre-decision; `start_project` is post-decision and creates a project shell.
Input schema
{
"type": "object",
"required": [
"client_name",
"client_email",
"title",
"brief"
],
"properties": {
"brief": {
"type": "string",
"maxLength": 5000,
"minLength": 1
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"client_name": {
"type": "string",
"minLength": 1
},
"target_date": {
"type": "string",
"format": "date"
},
"agent_vendor": {
"type": "string"
},
"client_email": {
"type": "string",
"format": "email"
},
"client_phone": {
"type": "string"
},
"client_company": {
"type": "string"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean"
},
"error": {
"enum": [
"invalid_email",
"invalid_input",
"tenant_not_found"
],
"type": "string"
},
"client_id": {
"type": "string"
},
"portal_url": {
"type": "string",
"format": "uri"
},
"project_id": {
"type": "string"
},
"tasks_seeded": {
"type": "number"
},
"milestones_seeded": {
"type": "number"
}
}
}