Logs and usage
Read per-server runtime logs and resource usage over time.
Read per-server runtime logs and resource usage over time.
These are action names. In default compact mode, call the indicated group tool with {"action":"<action-name>","params":{...}}; the arguments below go inside params. In ?mode=all, call the action name directly with those arguments. browse_github and read_docs are direct tools in both modes. Expand each schema for nested fields, enum values and validation constraints. Successful results are JSON in both text content and structuredContent; failures use isError and structuredContent.error.
get_app_logs
Read a page of container logs for an app. Paging starts at the newest lines and moves back in time by default; inside a page, chunks and lines run oldest to newest, so the last line is the most recent.
Group: apps · Behavior: Read
Compact tool: apps · Action: get_app_logs
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.logs
GET /projects/{projectId}/apps/{appId}/logs
monitoring:read
Arguments
projectId
string
Yes
Project id
appId
string
Yes
App id
nodes
array<string>
No
Server addresses to read from; omit for every server the app ran on
cursorNs
string
No
Cursor from a previous page (nextCursorNs)
cursor
integer
No
Unix time in milliseconds to seek to when no cursorNs is given; 0 or omitted means now
pageSize
integer
No
Lines per page, at most 1000 (default 200)
direction
"older" / "newer"
No
Which way the next page moves from the cursor: older (the default) or newer. Lines inside a page are always chronological
Result
logs(array<object>): Chunks in chronological order, consecutive lines from one server merged into a chunk that from and to span; the last line of the last chunk is the newestnextCursorNs(string or null): Pass as cursorNs to fetch the next page in the same direction; null at the endhasMore(boolean): See the complete response schema below.totalLines(integer): Lines in this page across every chunk
get_app_usage
Resource usage of an app over a time range, bucketed per server
Group: apps · Behavior: Read
Compact tool: apps · Action: get_app_usage
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.usage
GET /projects/{projectId}/apps/{appId}/usage
monitoring:read
Arguments
projectId
string
Yes
Project id
appId
string
Yes
App id
start
string
No
Range start (ISO 8601); defaults to one hour before end
end
string
No
Range end (ISO 8601); defaults to now. At most 30 days after start
Result
start(string): ISO 8601 timestamp (UTC)end(string): ISO 8601 timestamp (UTC)intervalSeconds(integer): Width of each bucketseries(array<object>): One series per server the app ran on; each point sums the bucket
export_logs
The app's container logs as one text, oldest first. Every line is stamped with its time and server, up to maxBytes (1 MiB by default, 4 MiB at most). For a page at a time use apps.logs instead.
Group: apps · Behavior: Read
Compact tool: apps · Action: export_logs
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.logs.export
GET /projects/{projectId}/apps/{appId}/logs/export
monitoring:read
Arguments
projectId
string
Yes
Project id
appId
string
Yes
App id
nodes
array<string>
No
Server addresses to include; omit for all
maxBytes
integer
No
Stop after this many bytes of text; 1048576 by default
Result
text(string): The log lines, newline-separatedlines(integer): See the complete response schema below.truncated(boolean): maxBytes was reached before the end; the newest lines are missing
Operation-specific errors: 429 too_many_attempts.
get_log_retention
How long the app's container logs are kept
Group: apps · Behavior: Read
Compact tool: apps · Action: get_log_retention
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.logs.retention.get
GET /projects/{projectId}/apps/{appId}/logs/retention
apps:read
Arguments
projectId
string
Yes
Project id
appId
string
Yes
App id
Result
days(integer): How many days of container logs are keptisDefault(boolean): The platform default applies; no per-app setting
set_log_retention
Set how many days the app's container logs are kept. 1 to 180; 0 goes back to the platform default
Group: apps · Behavior: Write
Compact tool: apps_write · Action: set_log_retention
MCP annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.logs.retention.update
PATCH /projects/{projectId}/apps/{appId}/logs/retention
apps:write
Arguments
days
integer
Yes
Days to keep; 0 for the default
projectId
string
Yes
Project id
appId
string
Yes
App id
Result
days(integer): How many days of container logs are keptisDefault(boolean): The platform default applies; no per-app setting
Operation-specific errors: 429 too_many_attempts.
clear_logs
Delete the app's container logs older than a point in time. Cannot be undone.
Group: apps · Behavior: Write
Compact tool: apps_write · Action: clear_logs
MCP annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: false · openWorldHint: false
Requires confirm: true for this irreversible action.
Permissions and REST equivalents
apps.logs.clear
POST /projects/{projectId}/apps/{appId}/logs/clear
apps:write
Arguments
olderThan
string
Yes
Lines before this instant are deleted
projectId
string
Yes
Project id
appId
string
Yes
App id
confirm
true
Yes
Must be true: this action cannot be undone
Result
deletedCount(integer): Lines deleted
Operation-specific errors: 429 too_many_attempts.
Was this helpful?
