Update project settings
Change source, build or runtime settings. containerPort must be an integer from 1 to 65535. A deployed project's runtime port is locked (getProject shows runtimePortLockedAt): changing it, or changing what serves the app, such as adding a startCommand to a static site (served on port 80) so a server listens on PORT, needs stopProject first, then this update, then deployProject; a conflicting update returns HTTP 409. staticUnknownPaths (auto, spa or not_found) changes what a static site serves for a path with no file, applied the next time the site deploys or restarts; null returns a project to the original home-page fallback. Port source and lock timestamps are read-only. Omitted fields keep their values. Save environment variables and build secrets through their dedicated endpoints. To pin a language version, Railpack builds use its RAILPACK_*_VERSION environment variable (for example RAILPACK_NODE_VERSION); Dockerfile builds send dockerRuntimeVersions, such as {"node":"22"}, which sets the matching build argument and keeps the others. An empty version removes it. healthCheckPath (such as /health) is checked for as long as an app with its own server runs; a static site served by HCode (no startCommand) gets no ongoing health check whatever path is saved, and after a start or restart HCode checks that its home page answers. To change the app's size, send size (256mb, 512mb, 1gb, 2gb, 4gb or 8gb) or memorySizeBytes on its own, without other fields. Changing the size restarts a running app straight away so the new size applies, exactly as in the dashboard: restarted is true when it did, and a stopped app takes the size when it next starts. If the restart is refused, the size is still saved, restartFailed is true and message says to restart the app (restartProject) to apply it. While a deploy is in progress the change is refused with HTTP 409 deploy_in_progress: wait for the deploy to finish. Every running app and database counts its size against the plan's memory (limits.ram_mb in getCapabilities); a stopped app counts nothing. A size that does not fit returns HTTP 409 plan_full with details.quota saying how much memory is free; stopping another app or making one smaller frees room. A running app's new size must also fit on the server it runs on: otherwise HTTP 409 node_full and nothing changes (try a smaller size or later).
Arguments
| Name | Type | Required | Limits |
|---|---|---|---|
name | string | No | See schema |
description | string | No | See schema |
framework | string | No | See schema |
repositoryUrl | string | No | See schema |
branch | string | No | See schema |
githubInstallationId | integer | No | Minimum 1 |
rootDirectory | string | No | See schema |
buildType | string | No | See schema |
installCommand | string | No | See schema |
buildCommand | string | No | See schema |
startCommand | string | No | See schema |
outputDirectory | string | No | See schema |
healthCheckPath | string | No | See schema |
dockerfilePath | string | No | See schema |
dockerContextPath | string | No | See schema |
dockerBuildStage | string | No | See schema |
staticUnknownPaths | "auto" | "spa" | "not_found" | null | No | See schema |
containerPort | integer | No | Minimum 1; Maximum 65535 |
size | "256mb" | "512mb" | "1gb" | "2gb" | "4gb" | "8gb" | No | See schema |
memorySizeBytes | 268435456 | 536870912 | 1073741824 | 2147483648 | 4294967296 | 8589934592 | No | See schema |
dockerRuntimeVersions | object | No | See schema |
projectId | string | Yes | At least 1 character(s) |
Full input schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"framework": {
"type": "string"
},
"repositoryUrl": {
"type": "string"
},
"branch": {
"type": "string"
},
"githubInstallationId": {
"type": "integer",
"minimum": 1
},
"rootDirectory": {
"type": "string"
},
"buildType": {
"type": "string"
},
"installCommand": {
"type": "string"
},
"buildCommand": {
"type": "string"
},
"startCommand": {
"type": "string"
},
"outputDirectory": {
"type": "string"
},
"healthCheckPath": {
"type": "string"
},
"dockerfilePath": {
"type": "string"
},
"dockerContextPath": {
"type": "string"
},
"dockerBuildStage": {
"type": "string"
},
"staticUnknownPaths": {
"anyOf": [
{
"type": "string",
"enum": [
"auto",
"spa",
"not_found"
]
},
{
"type": "null"
}
]
},
"containerPort": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"size": {
"type": "string",
"enum": [
"256mb",
"512mb",
"1gb",
"2gb",
"4gb",
"8gb"
]
},
"memorySizeBytes": {
"type": "integer",
"enum": [
268435456,
536870912,
1073741824,
2147483648,
4294967296,
8589934592
]
},
"dockerRuntimeVersions": {
"type": "object",
"properties": {
"node": {
"type": "string"
},
"bun": {
"type": "string"
},
"deno": {
"type": "string"
},
"python": {
"type": "string"
},
"go": {
"type": "string"
},
"java": {
"type": "string"
},
"ruby": {
"type": "string"
},
"rust": {
"type": "string"
},
"elixir": {
"type": "string"
},
"erlang": {
"type": "string"
},
"dotnet": {
"type": "string"
}
},
"required": [],
"additionalProperties": false
},
"projectId": {
"type": "string",
"minLength": 1
}
},
"required": [
"projectId"
],
"additionalProperties": false
}Example call
The params of a tools/call request. Replace the placeholder values with your own IDs.
{
"name": "updateProject",
"arguments": {
"projectId": "REPLACE_WITH_PROJECT_ID"
}
} Result
The same data as the API operation, wrapped as {"untrusted_data": true, "source": "updateProject", "note": "...", "data": ...} so the model treats project content as data, not instructions.