projects
Manage Coolify deployments by listing, creating, updating, deleting projects, and handling environments or resources via a structured API or CLI interface.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body | |
| environmentNameOrUuid | No | Environment name or UUID (for environment operation) | |
| id | No | Project UUID | |
| operation | Yes | Operation to perform |
Implementation Reference
- src/mcp/tools/projects.ts:19-62 (handler)projectsHandler function that executes the core logic for the 'projects' tool, handling operations like list, get, create, update, delete, environment, and resources by delegating to generated API calls wrapped in safeApiCall.export async function projectsHandler(args: ProjectsToolArgs) { const { operation, id, environmentNameOrUuid, body } = args; switch (operation) { case 'list': return await safeApiCall(() => listProjects()); case 'get': if (!id) throw new Error('ID required for get operation'); return await safeApiCall(() => getProjectByUuid({ path: { uuid: id } })); case 'create': if (!body) throw new Error('Body required for create operation'); const createData = JSON.parse(body); return await safeApiCall(() => createProject({ body: createData })); case 'update': if (!id || !body) throw new Error('ID and body required for update operation'); const updateData = JSON.parse(body); return await safeApiCall(() => updateProjectByUuid({ path: { uuid: id }, body: updateData } as any)); case 'delete': if (!id) throw new Error('ID required for delete operation'); return await safeApiCall(() => deleteProjectByUuid({ path: { uuid: id } })); case 'environment': if (!id || !environmentNameOrUuid) throw new Error('ID and environmentNameOrUuid required for environment operation'); return await safeApiCall(() => getEnvironmentByNameOrUuid({ path: { uuid: id, environment_name_or_uuid: environmentNameOrUuid } })); case 'resources': return await safeApiCall(() => listResources()); default: throw new Error(`Unknown operation: ${operation}`); } }
- src/mcp-server.ts:185-192 (schema)Input schema for the 'projects' tool using Zod validation for parameters: operation, id, environmentNameOrUuid, body.{ operation: z.enum([ 'list', 'get', 'create', 'update', 'delete', 'environment', 'resources' ]).describe("Operation to perform"), id: z.string().optional().describe("Project UUID"), environmentNameOrUuid: z.string().optional().describe("Environment name or UUID (for environment operation)"), body: z.string().optional().describe("JSON request body") },
- src/mcp-server.ts:182-219 (registration)Registration of the 'projects' MCP tool on the McpServer instance, providing name 'projects', Zod input schema, and an async wrapper handler that logs input, calls projectsHandler, formats output as text content, and handles errors.// Register projects tool with proper Zod schema format server.tool( 'projects', { operation: z.enum([ 'list', 'get', 'create', 'update', 'delete', 'environment', 'resources' ]).describe("Operation to perform"), id: z.string().optional().describe("Project UUID"), environmentNameOrUuid: z.string().optional().describe("Environment name or UUID (for environment operation)"), body: z.string().optional().describe("JSON request body") }, async ({ operation, id, environmentNameOrUuid, body }) => { try { console.error('Projects tool received args:', JSON.stringify({ operation, id, environmentNameOrUuid, body }, null, 2)); const result = await projectsHandler({ operation, id, environmentNameOrUuid, body }); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );